home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / tech / rf3 / fourier.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1979-12-31  |  2.2 KB  |  61 lines

  1. 10  PRINT CHR$(26): PRINT "BASIC FOURIER PROGRAM BY A. KATZ, TSC V2.0 2/16/1986
  2. 20  PRINT "FOR WAVEFORM STORED STARTING AT LINE 540": DEFINT I-N
  3. 30  PRINT: PRINT: INPUT "NUMBER OF HARMONICS DESIRED"; NH
  4. 40  INPUT "NUMBER OF INTEGRATION POINTS"; M
  5. 50  DIM A(NH), B(NH), C(NH), P(NH), AM(M+1), FV(M+1)
  6. 60  PI=4*ATN(1): P2=PI*2
  7. 70  GOSUB 550: PRINT: PRINT WF$: PRINT
  8. 80  REM CALC DC TERM
  9. 90  S=0: FOR I=0 TO M: TI=I*DT: S=S+FV(I): NEXT
  10. 100  A0=(DT/T)*(S-(FV(0)+FV(I))/2):  PRINT "A0= ";A0
  11. 110  REM CALC AC TERMS
  12. 120  PRINT: PRINT " N"; "     A(N)";  "        B(N)"; "        C(N)"; "     ANGLE"
  13. 130  FOR N=1 TO NH: AS=0: BS=0
  14. 140  FOR I=0 TO M: TI=I*DT: WN=P2*TI*N/T
  15. 150  AS=AS+FV(I)*COS(WN): BS=BS+FV(I)*SIN(WN): NEXT
  16. 160  A(N)=2*(DT/T)*(AS-(FV(0)+FV(I))/2)
  17. 170  B(N)=2*(DT/T)*BS: C(N)=SQR(A(N)^2+B(N)^2)
  18. 180  P(N)=-ATN(B(N)/A(N))*180/PI: IF A(N)<0 THEN P(N)=P(N)+180
  19. 190  PRINT N;: PRINT USING " ##.#^^^^   "; A(N); B(N); C(N);: PRINT USING "####.#"; P(N): NEXT
  20. 200  PRINT: INPUT "DO YOU WANT HARD COPY (Y/N)"; H$
  21. 210  IF H$<>"Y" THEN 250
  22. 220  LPRINT: LPRINT WF$: LPRINT: LPRINT "A0 = "; A0
  23. 230  LPRINT: LPRINT " N", "     A(N)";  "        B(N)"; "        C(N)"; "     ANGLE"
  24. 240  FOR N=1 TO NH: LPRINT N;: LPRINT USING " ##.#^^^^   "; A(N); B(N); C(N);: LPRINT USING "####.#"; P(N): NEXT
  25. 250  REM SPECTRUM PLOT
  26. 260  PRINT: PRINT: PRINT "SPECTRUM HISTOGRAM OF "; WF$: PRINT
  27. 270  FOR N=1 TO NH: IF CM<C(N) THEN CM=C(N)
  28. 280  NEXT: FOR N=1 TO NH: F=N/T: NC=10+INT(50*C(N)/CM)
  29. 290  PRINT F;: FOR I=10 TO NC: PRINT TAB(I); "*";: NEXT
  30. 300  PRINT: NEXT
  31. 310  PRINT: INPUT "DO YOU WANT HARD COPY (Y/N)"; H$
  32. 320  IF H$<>"Y" THEN 380
  33. 330  LPRINT: LPRINT: LPRINT "SPECTRUM HISTOGRAM OF "; WF$
  34. 340  FOR N=1 TO NH: IF CM<C(N) THEN CM=C(N)
  35. 350  NEXT: FOR N=1 TO NH: F=N/T: NC=10+INT(50*C(N)/CM)
  36. 360  LPRINT F;: FOR I=10 TO NC: LPRINT TAB(I); "*";: NEXT
  37. 370  LPRINT: NEXT
  38. 380  REM CALC WAVEFORM
  39. 390  PRINT: PRINT: PRINT "WAVEFORM "; WF$: PRINT: I2=1: IF M>19 THEN I2=2
  40. 400  FOR I=0 TO M STEP I2: TI=I*DT: AM(I)=A0: W=P2*TI/T
  41. 410  FOR N=1 TO NH: AM(I)=AM(I)+A(N)*COS(N*W)+B(N)*SIN(N*W): NEXT
  42. 420  NEXT
  43. 430  REM PLOT WAVEFORM
  44. 440  FOR I=0 TO M STEP I2: IF AX<AM(I) THEN AX=AM(I)
  45. 450  IF AN>AM(I) THEN AN=AM(I)
  46. 460  NEXT: FOR I=0 TO M STEP I2: TI=I*DT
  47. 470  NA=10+INT(50*(AM(I)-AN)/(AX-AN))
  48. 480  PRINT TI; TAB(NA); "*": NEXT
  49. 490  PRINT: INPUT "DO YOU WANT HARD COPY (Y/N)"; H$
  50. 500  IF H$<>"Y" THEN END
  51. 505  LPRINT: LPRINT: LPRINT "WAVEFORM "; WF$: LPRINT
  52. 510  FOR I=0 TO M STEP I2: TI=I*DT
  53. 520  NA=10+INT(50*(AM(I)-AN)/(AX-AN))
  54. 530  LPRINT TI; TAB(NA); "*": NEXT: END
  55. 540  REM **********************************************************
  56. 550  REM SQUARE WAVE FUNCTION
  57. 560  WF$="SQUARE WAVE": T=1: DT=T/M
  58. 570  FOR I=0 TO M: TI=I*DT
  59. 580  IF TI<T/2 THEN FV(I)= 5 ELSE FV(I)=0
  60. 590  NEXT: RETURN
  61.