home *** CD-ROM | disk | FTP | other *** search
/ Antennas / Antennas_CD-ROM_Walnut_Creek_September_1996.iso / mathaids / misc / fourier.asc < prev    next >
Text File  |  1996-06-30  |  2KB  |  42 lines

  1. 10 PRINT "MANUAL FAST FOURIER TRANSFORM": PRINT : PRINT "          B Priestley 1984 ": PRINT : REM ELECTRONIC ENGINEERING MARCH 1986:PI=3.1415926535898
  2. 20 INPUT "NUMBER OF POINTS"; S: SS = S: FOR B = 1 TO 2 STEP 0: IF SS <= 1 THEN B = 3: GOTO 40
  3. 30 SS = SS / 2: P = P + 1: NEXT B
  4. 40 IF ABS(SS - 1) > .001 THEN P = 0: GOTO 20
  5. 50 Z = 2 * PI / S: INPUT "FWD or REV Transform (F/R)"; H$: DIM R(S - 1), I(S - 1), B(P - 1): IF H$ = "R" THEN Z = -Z
  6. 60 INPUT "HAMMING WEIGHTING (Y/N)"; H$: DEF FNA (X) = .54 - .46 * COS(2 * PI * X / (S))
  7. 70 INPUT "Quad samples (Y/N)"; Q$
  8. 80 CLS : FOR J = 0 TO S - 1
  9. 90 PRINT "Real sample no."; J: INPUT R: REM amplitude of Real sample
  10. 100 IF Q$ = "Y" THEN PRINT "Quad Sample no."; J: INPUT I: REM amplitude of Imaginary/quadrature sample
  11. 110 IF H$ = "Y" THEN R = R * FNA(J): I = I * FNA(J)
  12. 120 GOSUB 1000
  13. 130 R(K) = R: I(K) = I
  14. 140 NEXT J
  15. 150 FOR A = 1 TO P: O = 2 ^ (A - 1): REM A=Pass number
  16. 160 FOR B = 0 TO S / 2 - 1
  17. 170 N = B + O * INT(B / O): M = O + N
  18. 180 GOSUB 1500
  19. 190 W = W + 2 ^ (P - A): IF W > S / 2 THEN W = 0
  20. 200 NEXT B: W = 0
  21. 210 NEXT A: CLS : PRINT " N", " REAL", " QUAD"
  22. 220 FOR Q = 0 TO S - 1: PRINT Q, R(Q), I(Q)
  23. 225 H = H + 1: IF H = 20 THEN H = 0: INPUT "More !"; H$:   _
  24. REM omit this line for line printer output. H$ can be anything or just Return/Newline; it is simply a means of breaking the output print into 20 line chunks so that it does not scroll off the screen.
  25. 230 NEXT Q: END
  26. 1000 REM BIT REVERSED BINARY SBR
  27. 1010 K = J: FOR Q = 0 TO P - 1: B(Q) = 0: NEXT Q
  28. 1020 FOR Q = P - 1 TO 0 STEP -1
  29. 1030 IF K >= 2 ^ Q THEN B(Q) = 1: K = K - 2 ^ Q
  30. 1040 NEXT Q: K = 0
  31. 1050 FOR Q = 0 TO P - 1: K = K + B(P - 1 - Q) * (2 ^ Q): NEXT Q
  32. 1060 RETURN
  33. 1500 REM BUTTERFLY
  34. 1510 V = Z * W: Z1 = COS(V): Z2 = SIN(V)
  35. 1520 Z3 = R(M) * Z1 = I(M) * Z2: Z4 = R(M) * Z2 - I(M) * Z1
  36. 1530 R(N) = R(N) + Z3
  37. 1540 I(N) = I(N) - Z4
  38. 1550 R(M) = R(N) - Z3 - Z3
  39. 1560 I(M) = I(N) + Z4 + Z4
  40. 1570 RETURN
  41.  
  42.