SUBROUTINE FFT(X,N) C C THIS IS A COMPLEX FFT ROUTINE. IT IS DESIGNED TO RUN ON C THE PDP-11/55 USING THE FORTRAN OTS. IT WILL DO A FFT C OR AN INVERSE FFT. THIS ROUTINE IS ADAPTED FROM A C ROUTINE WRITTEN IN THE FFT TRANSFORM BY ORAN BRIGHAM. C C X IS THE COMPLEX ARRAY FROM THE CALLING ROUTINE C N IS THE NUMBER OF ELEMENTS IN THE ARRAY X C INVFFT(X,N) IS THE ENTRY POINT FOR THE INVERSE FFT. C C THIS SUBROUTINE WAS WRITTEN BY JEFF HAMILTON. C COMPLEX X(N),TRNS PARAMETER (TWOPI=6.283185) ISIGN=1 GO TO 10 ENTRY INVFFT(X,N) ISIGN=-1 10 CONTINUE ANG=TWOPI*(-ISIGN)/N N2=N/2 NU=ALOG(FLOAT(N))/ALOG(2.) NU1=NU-1 K=0 DO 40,L=1,NU 20 DO 30,I=1,N2 K1=K+1 K1N2=K1+N2 ARG=ANG*IBITR(K/2**NU1,NU) TRNS=X(K1N2)*CMPLX(COS(ARG),SIN(ARG)) !NUMBER 2 X(K1N2)=X(K1)-TRNS X(K1)=X(K1)+TRNS 30 K=K+1 K=K+N2 IF(K.LT.N)GO TO 20 K=0 NU1=NU1-1 40 N2=N2/2 DO 50,K=1,N I=IBITR(K-1,NU)+1 IF(I.LE.K)GO TO 50 TRNS=X(K) X(K)=X(I) X(I)=TRNS 50 CONTINUE C C NOW NORMALIZE THE ARRAY C DO 60,I=1,N 60 X(I)=X(I)/SQRT(FLOAT(N)) RETURN END