home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1979-12-31 | 2.2 KB | 61 lines |
- 10 PRINT CHR$(26): PRINT "BASIC FOURIER PROGRAM BY A. KATZ, TSC V2.0 2/16/1986
- 20 PRINT "FOR WAVEFORM STORED STARTING AT LINE 540": DEFINT I-N
- 30 PRINT: PRINT: INPUT "NUMBER OF HARMONICS DESIRED"; NH
- 40 INPUT "NUMBER OF INTEGRATION POINTS"; M
- 50 DIM A(NH), B(NH), C(NH), P(NH), AM(M+1), FV(M+1)
- 60 PI=4*ATN(1): P2=PI*2
- 70 GOSUB 550: PRINT: PRINT WF$: PRINT
- 80 REM CALC DC TERM
- 90 S=0: FOR I=0 TO M: TI=I*DT: S=S+FV(I): NEXT
- 100 A0=(DT/T)*(S-(FV(0)+FV(I))/2): PRINT "A0= ";A0
- 110 REM CALC AC TERMS
- 120 PRINT: PRINT " N"; " A(N)"; " B(N)"; " C(N)"; " ANGLE"
- 130 FOR N=1 TO NH: AS=0: BS=0
- 140 FOR I=0 TO M: TI=I*DT: WN=P2*TI*N/T
- 150 AS=AS+FV(I)*COS(WN): BS=BS+FV(I)*SIN(WN): NEXT
- 160 A(N)=2*(DT/T)*(AS-(FV(0)+FV(I))/2)
- 170 B(N)=2*(DT/T)*BS: C(N)=SQR(A(N)^2+B(N)^2)
- 180 P(N)=-ATN(B(N)/A(N))*180/PI: IF A(N)<0 THEN P(N)=P(N)+180
- 190 PRINT N;: PRINT USING " ##.#^^^^ "; A(N); B(N); C(N);: PRINT USING "####.#"; P(N): NEXT
- 200 PRINT: INPUT "DO YOU WANT HARD COPY (Y/N)"; H$
- 210 IF H$<>"Y" THEN 250
- 220 LPRINT: LPRINT WF$: LPRINT: LPRINT "A0 = "; A0
- 230 LPRINT: LPRINT " N", " A(N)"; " B(N)"; " C(N)"; " ANGLE"
- 240 FOR N=1 TO NH: LPRINT N;: LPRINT USING " ##.#^^^^ "; A(N); B(N); C(N);: LPRINT USING "####.#"; P(N): NEXT
- 250 REM SPECTRUM PLOT
- 260 PRINT: PRINT: PRINT "SPECTRUM HISTOGRAM OF "; WF$: PRINT
- 270 FOR N=1 TO NH: IF CM<C(N) THEN CM=C(N)
- 280 NEXT: FOR N=1 TO NH: F=N/T: NC=10+INT(50*C(N)/CM)
- 290 PRINT F;: FOR I=10 TO NC: PRINT TAB(I); "*";: NEXT
- 300 PRINT: NEXT
- 310 PRINT: INPUT "DO YOU WANT HARD COPY (Y/N)"; H$
- 320 IF H$<>"Y" THEN 380
- 330 LPRINT: LPRINT: LPRINT "SPECTRUM HISTOGRAM OF "; WF$
- 340 FOR N=1 TO NH: IF CM<C(N) THEN CM=C(N)
- 350 NEXT: FOR N=1 TO NH: F=N/T: NC=10+INT(50*C(N)/CM)
- 360 LPRINT F;: FOR I=10 TO NC: LPRINT TAB(I); "*";: NEXT
- 370 LPRINT: NEXT
- 380 REM CALC WAVEFORM
- 390 PRINT: PRINT: PRINT "WAVEFORM "; WF$: PRINT: I2=1: IF M>19 THEN I2=2
- 400 FOR I=0 TO M STEP I2: TI=I*DT: AM(I)=A0: W=P2*TI/T
- 410 FOR N=1 TO NH: AM(I)=AM(I)+A(N)*COS(N*W)+B(N)*SIN(N*W): NEXT
- 420 NEXT
- 430 REM PLOT WAVEFORM
- 440 FOR I=0 TO M STEP I2: IF AX<AM(I) THEN AX=AM(I)
- 450 IF AN>AM(I) THEN AN=AM(I)
- 460 NEXT: FOR I=0 TO M STEP I2: TI=I*DT
- 470 NA=10+INT(50*(AM(I)-AN)/(AX-AN))
- 480 PRINT TI; TAB(NA); "*": NEXT
- 490 PRINT: INPUT "DO YOU WANT HARD COPY (Y/N)"; H$
- 500 IF H$<>"Y" THEN END
- 505 LPRINT: LPRINT: LPRINT "WAVEFORM "; WF$: LPRINT
- 510 FOR I=0 TO M STEP I2: TI=I*DT
- 520 NA=10+INT(50*(AM(I)-AN)/(AX-AN))
- 530 LPRINT TI; TAB(NA); "*": NEXT: END
- 540 REM **********************************************************
- 550 REM SQUARE WAVE FUNCTION
- 560 WF$="SQUARE WAVE": T=1: DT=T/M
- 570 FOR I=0 TO M: TI=I*DT
- 580 IF TI<T/2 THEN FV(I)= 5 ELSE FV(I)=0
- 590 NEXT: RETURN
-