C THIS IS A SAMPLE DRIVER TO SHOW SOME OF THE FEATURES OF THE FFT C ROUTINE FFTBA2. C TWO SIGNALS, BOTH 50% DUTY-CYCLE SQUARE WAVES ARE GENERATED, TRANSFORMED, C INVERSE TRANSFORMED, AND FOLDED. THE FIRST AND LAST 8 VALUES FOR BOTH THE C REAL AND IMAGINARY VECTORY ARE PRINTED AFTER EACH OPERATION. C C THE FIRST SQUARE WAVE IS CENETERD ABOUT T=0 AND IS THEREFORE AN C EVEN FUNCTION GENERATING ONLY COSINE TERMS. THE SECOND SQUARE WAVE HAS C ITS NEGATIVE TO POSITIVE TRANSISTION AT T=0 AND IS THEREFORE AN ODD C FUNCTION GENERATING ONLY SINE TERMS. C THE XR(1) TERM OF THE TRANSFORMED VECTORS IS THE DC TERM AND THE XI(1) TERM C OF THE TRANSFORMED VECTORS IS ALWAYS IDENTICALLY ZERO. C C THE CALL TO FFTBA2S IS: C CALL FFTBA2(XR,XI,N,L,KUNS) WHERE C XR = THE REAL COMPONENT OF THE SIGNAL OR THE COEFFICIENTS OF THE C COSINE TERMS. C XI = THE IMAGINARY COMPONENT OF THE SIGNAL OR THE COEFFICIENTS OF C THE SINE TERMS. C N = THE LENGTH OF VECTORS XR AND XI. N MUST BE A POWER OF 2 . C L DETERMINS IF THE TRANSFORM IS FORWARD L > 0, OR INVERSE L < 0 ; C IF L = 0, NO TRANSFORMATION TAKES PLACE BUT UNSCRAMBLING MAY TAKE C PLACE DETERMINED BY THE VALUE OF KUNS. C KUNS CONTROLS UNSCRAMBLING OF THE TRANSFORMED DATA. IF KUNS = 0, THEN C NO UNSCRAMBLING TAKES PLACE. NOTE THAT EACH TIME DATA IS EITHER C FORWARD OR INVERSE TRANSFORMED, THE VECTORS ARE SCRAMBLED. THE C THE DYADIC SCRAMBLING IS ITS OWN INVERSE; HENCE TWO SUCESSIVE C SCRAMBLINGS (UNSCRAMBLINGS) CANCEL EACH OTHER. DIMENSION XR(4096),XI(4096) REAL *8 VOT(2),VTT(2),DSW(2),DRR,DII LOGICAL *1 IJK,ISW DATA VOT/'ORIGINAL',' '/,VTT/'TRANSFOR','MED'/, 1DRR/' REAL '/,DII/' IMAG. '/,DSW/'CENTER',' START'/ DATA XI/4096*0./ IJK=.FALSE. ISW=IJK KSW=1 N=4096 KK=8 LL=N-KK+1 8 IF(ISW)GOTO 33 DO 10 I=1,1024 10 XR(I)=1. DO 11 I=1025,3072 11 XR(I)=0. DO 12 I=3073,4096 12 XR(I)=1. GOTO 41 33 DO 20 I=1,2048 XR(I)=1. 20 XI(I)=0. DO 21 I=2049,4096 XR(I)=0. 21 XI(I)=0. KSW=2 41 TYPE 899,DSW(KSW) 899 FORMAT('1THIS SAMPLE IS FOR A SQUARE WAVE OF UNITY AMPLITUDE FROM ', 1'ZERO TO ONE,'/' HENCE THE PULSE HAS A DC COMPONENT OF 0.5 .'/ 2' THE DUTY CYCLE IS 50% AND THE PULSE IS DEFINED ', 3'WITH 4096 SAMPLES'/' WITH THE ',A6,' OF THE POSITIVE HALF CYCLE ', 1'AT T = 0'/) ICNT=1 IFR=1 TYPE 900,KK,VOT(1),VOT(2),DRR CALL XPRNT(XR,XI,N,KK,LL,1) TYPE 900,KK,VOT(1),VOT(2),DII CALL XPRNT(XR,XI,N,KK,LL,-1) 1 CALL FFTBA2(XR,XI,N,IFR,1) IF(IJK)CALL FOLDFT(XR,XI,N,-1) TYPE 900,KK,VTT,DRR 900 FORMAT('0THE FIRST AND LAST',I5,' TERMS OF THE ',A8,A3, 1A7'VECTOR:') CALL XPRNT(XR,XI,N,KK,LL,1) TYPE 900,KK,VTT,DII CALL XPRNT(XR,XI,N,KK,LL,-1) IF(IJK)TYPE 999 999 FORMAT(' NOTE THAT NOW XR(1) CONTAINS A0, TWICE THE DC COMPONENT ', 1'AND NOT A0/2') IF(IJK)GOTO 51 IFR=-IFR ICNT=ICNT+1 IF(ICNT.GT.2)GO TO 2 TYPE 901 901 FORMAT('0THE TRANSFORMED DATA WILL NOW BE INVERSE TRANSFORMED AND ', 1'PRINTED') GOTO 1 2 TYPE 998 998 FORMAT('1THE USE OF THE SUBROUTINE FOLDFT TO GENERATE THE FOURIER ', 1'COEFFICIENTS'/' WITH ITYPE = -1') IJK=.TRUE. GOTO 1 51 IF(ISW)CALL EXIT ISW=.TRUE. IJK=.FALSE. GOTO 8 END SUBROUTINE XPRNT(XR,XI,N,KK,LL,IC) DIMENSION XR(N),XI(N) IF(IC.GT.0)TYPE 909,(I,XR(I),I=1,KK) IF(IC.GT.0)TYPE 909,(I,XR(I),I=LL,N) IF(IC.LT.0)TYPE 909,(I,XI(I),I=1,KK) IF(IC.LT.0)TYPE 909,(I,XI(I),I=LL,N) 909 FORMAT(4(1H ,(I4,1PE11.3,5X))) RETURN END