| 1 | C FFTR.FT FFT-V4A 4/22/76\r |
| 2 | \r |
| 3 | SUBROUTINE FFTR (A,N,DIR,SGNEX)\r |
| 4 | \r |
| 5 | C-------ZUSATZPROGRAMM ZUR FFT FUER 2**N REELLE DATEN\r |
| 6 | C A = IN- UND OUTPUTARRAY, LAENGE N+1, KOMPLEX (A,B)\r |
| 7 | C A(1),...,A(N) ENTHALTEN DIE 2*N REELLEN DATEN\r |
| 8 | C VORWAERTS CALL FFT\r |
| 9 | C CALL REALTR MIT SGNEXP=+1.\r |
| 10 | C RUECKWAERTS CALL REALTR\r |
| 11 | C CALL FFT MIT SGNEXP=-1.\r |
| 12 | C-------(DAZU IN EINER RICHTUNG MIT 1/N NORMIEREN)\r |
| 13 | \r |
| 14 | DIMENSION A(1)\r |
| 15 | NH=N+1\r |
| 16 | NK=2*NH\r |
| 17 | SD=3.14159265/FLOAT(N)\r |
| 18 | CD=2.*SIN(.5*SD)**2\r |
| 19 | SD=SIN(SD)*SGNEX\r |
| 20 | SN=0.\r |
| 21 | CN=DIR\r |
| 22 | IF (DIR.LT.0.) GOTO 10\r |
| 23 | A(NK-1)=A(1)\r |
| 24 | A(NK)=A(2)\r |
| 25 | 10 DO 20 J=1,NH,2\r |
| 26 | K=NK-J\r |
| 27 | J1=J+1\r |
| 28 | K1=K+1\r |
| 29 | AA=A(J)+A(K)\r |
| 30 | AB=A(J)-A(K)\r |
| 31 | BA=A(J1)+A(K1)\r |
| 32 | BB=A(J1)-A(K1)\r |
| 33 | RE=CN*BA+SN*AB\r |
| 34 | CIM=SN*BA-CN*AB\r |
| 35 | A(J)=(AA+RE)*.5\r |
| 36 | A(K)=(AA-RE)*.5\r |
| 37 | A(J1)=(CIM+BB)*.5\r |
| 38 | A(K1)=(CIM-BB)*.5\r |
| 39 | AA=CN-(CD*CN+SD*SN)\r |
| 40 | SN=(SD*CN-CD*SN)+SN\r |
| 41 | C THE FOLLOWING THREE STATMENTS COMPENSATE FOR TRUNCATION\r |
| 42 | C ERROR. IF ROUNDED ARITHMETIC IS USED, SUBSTITUTE\r |
| 43 | C 20 CN=AA\r |
| 44 | CN=.5-.5*(AA*AA+SN*SN)\r |
| 45 | SN=CN*SN+SN\r |
| 46 | 20 CN=CN*AA+AA\r |
| 47 | RETURN\r |
| 48 | END\r |
| 49 | \f\1a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 |