4 REM ... FFT.ECB 5 PRINT "**************************" 6 PRINT " FFT/IFT" 7 PRINT " AFTER WAGGENER" 8 PRINT "**************************" 9 PRINT "ENTER DATE/TIME FOR THE RECORD:"; 10 INPUT D$ 12 PRINT 13 PRINT "FDS-OR-INV"; 14 INPUT A$ 15 IF A$="F" THEN LET D=0 16 IF A$="I" THEN LET D=1 20 PRINT "M="; 21 INPUT M 30 LET N=INT(2^M) 31 PRINT "N=";N 32 DIM X(N,2) 35 IF D=0 THEN PRINT "INPUT TIME DOMAIN DATA:" 36 IF D=1 THEN PRINT "INPUT FREQ DOMAIN DATA:" 40 FOR I=1 TO N 41 PRINT "--------------------------" 44 PRINT "INPUT X(";I;",1) X(";I;",2)"; 45 INPUT X(I,1),X(I,2) 50 NEXT I 51 PRINT "==========================" 55 IF D=0 THEN PRINT "TIME DOMAIN INPUT DATA ARRAY IS:" 56 IF D=1 THEN PRINT "FREQ DOMAIN INPUT DATA ARRAY IS:" 57 PRINT "POINT","REAL","IMAG" 60 FOR I=1 TO N 70 PRINT I,X(I,1),X(I,2) 80 NEXT I 110 GOSUB 500 111 PRINT "//////////////////////////" 112 IF D=0 THEN PRINT "NOW IN FREQ DOMAIN THE " 113 IF D=1 THEN PRINT "NOW IN TIME DOMAIN THE " 114 PRINT " TRANSFORMED DATA IS:" 115 PRINT "POINT","REAL","IMAG" 120 FOR I=1 TO N 130 PRINT I,X(I,1),X(I,2) 140 NEXT I 142 PRINT "==========================" 145 PRINT " - DONE -" 150 GOTO 9999 500 REM. 501 REM. FFT/IFT SUBROUTINE 502 REM. 550 LET N=2^M 560 REM. DO BIT SHUFFLE 570 LET N2=N/2 580 LET N1=N-1 590 LET J=1 600 FOR I=1 TO N1 610 IF I>=J THEN 680 630 LET T1=X(J,1) 640 LET T2=X(J,2) 650 LET X(J,1)=X(I,1) 655 LET X(J,2)=X(I,2) 660 LET X(I,1)=T1 670 LET X(I,2)=T2 680 LET K=N2 690 IF K>=J THEN 730 700 LET J=J-K 710 LET K=K/2 720 GOTO 690 730 LET J=J+K 740 NEXT I 750 REM. END OF SHUFFLE 760 LET S1=-1 770 IF D=0 THEN 790 780 LET S1=1 790 LET P1=3.1415926535898 800 FOR L=1 TO M 810 LET L1=2^L 820 LET L2=L1/2 830 LET U1=1 840 LET U2=0 850 LET W1=COS(P1/L2) 860 LET W2=S1*SIN(P1/L2) 870 FOR J=1 TO L2 880 FOR I=J TO N STEP L1 890 LET I1=I+L2 895 REM. DO BUTTERFLY 900 LET V1=(X(I1,1)*U1-X(I1,2)*U2) 910 LET V2=(X(I1,2)*U1+X(I1,1)*U2) 920 LET X(I1,1)=X(I,1)-V1 930 LET X(I1,2)=X(I,2)-V2 940 LET X(I,1)=X(I,1)+V1 950 LET X(I,2)=X(I,2)+V2 960 NEXT I 970 REM. DO TWIDL FACTOR 975 LET U3=U1 976 LET U4=U2 980 LET U1=(U3*W1-U4*W2) 990 LET U2=(U4*W1+U3*W2) 1000 NEXT J 1010 NEXT L 1020 IF D=1 THEN 1060 1030 FOR I=1 TO N 1040 LET X(I,1)=X(I,1)/N 1045 LET X(I,2)=X(I,2)/N 1050 NEXT I 1060 RETURN 9999 END