22.09.2015 Views

of Microprocessors

Musical-Applications-of-Microprocessors-2ed-Chamberlin-H-1987

Musical-Applications-of-Microprocessors-2ed-Chamberlin-H-1987

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

432 MUSICAL ApPLICATIONS OF MICROPROCESSORS<br />

1000 REM PROGRAM TO UTILIZE THE FOURIER SERIES TO FILL A WAVEFORM TABLE<br />

1010 REM ARRAY A HOLDS THE AMPLITUDES OF THE HARMONICS<br />

1020 REM ARRAY P HOLDS THE PHASES OF THE HARMONICS<br />

1030 REM THE ZEROTH ELEMENT OF A AND P CORRESPONDS TO THE DC COMPONENT<br />

1040 REM VARIABLE N HOLDS THE NUMBER OF THE HIGHEST HARMONIC TO PROCESS<br />

1050 REM VARIABLE MHOLDS THE SIZE OF THE TABLE TO GENERATE<br />

1060 REM VARIABLE Q IF 0 SELECTS RANDOM PHASES, IF 1 USES ARRAY P<br />

1070 REM ARRAY T IS THE GENERATED TABLE WITH ALL ENTRIES BETWEEN BUT NOT<br />

1080 REM INCLUDING -1 AND +1<br />

1100 REM AMPLITUDE DATA<br />

1110 DATA 0,.8,.6,.2,.55,1.0,.7,.3,.2,.1,.05<br />

1120 REM PHASE DATA<br />

1130 DATA 0,0, .2,.4,.7, .45, .1, .5, .85, .9,0<br />

1140 LET N=10<br />

1150 LET M=256<br />

1160 LET Q=l<br />

1200 REM SET UP THE AMPLITUDE AND PHASE ARRAYS<br />

1210 FOR 1=0 TO N<br />

1220 READ A( I)<br />

1230 NEXT I<br />

1240 FOR 1=0 TO N<br />

1250 IF Q=O GOTO 1270<br />

1260 READ P(I)<br />

1270 GOTO 1280<br />

1270 LET P(I)=RND(l)<br />

1280 NEXT I<br />

1300 REM MAIN LOOP TO COMPUTE PRELIMINARY TABLE CONTENTS<br />

1310 FOR 1=0 TO M-1<br />

1320 LET T(I )=0<br />

1330 LET A1=6.28318*I/M<br />

1340 FOR J=O TO N<br />

1350 LET T(I)=T(I)+A(J)*COS(J*A1+6.28318*P(J))<br />

1360 NEXT J<br />

1370 NEXT I<br />

1400 REM SCAN RESULTING TABLE FOR MAXIMUM ABSOLUTE VALUE<br />

1410 LET A1=0<br />

1420 FOR 1=0 TO M-1<br />

1430 IF ABS(T(I)~A1 THEN LET A1=ABS(T(I))<br />

1440 NEXT I<br />

1500 REM NORMALIZE THE TABLE<br />

1510 FOR 1=0 TO M-1<br />

1520 LET T(I)=T(I)/A1*.99999<br />

1530 NEXT I<br />

1600 REM ADD CODE HERE TO OUTPUT THE TABLE IN SUITABLE FORM<br />

1700 STOP<br />

1800 END<br />

Fig. 13-7. Program to optimally fill waveform tables<br />

almost always produces waves with a single high-amplitude peak and low<br />

average amplitude elsewhere, which is less than optimum for low noise. The<br />

array T is the waveform table containing values between - 1 and + 1 when<br />

the program returns. Additional code to convert the values into integers with<br />

the appropriate range and to store them in the final waveform table is easily<br />

added.<br />

Assembly language can also be used to construct the table in 1% to<br />

10% <strong>of</strong> the time required by a BASIC program. Part <strong>of</strong> the improvement is<br />

due to more efficient program execution, while the rest is due to the use <strong>of</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!