A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / fftc.ft
1 C FFTC.FT FFT-V4A 4/22/76
2
3 SUBROUTINE FFTC (A,N,M,SGNEX)
4
5 C-------FFT VON N=2**M KOMPLEXEN DATEN
6 C A = IN- UND OUTPUTARRAY, LAENGE N=2**M, KOMPLEX
7 C-------SGNEXP = VORZEICHEN DES EXPONENTEN DER E-FUNKTIONEN
8
9 DIMENSION A(2,513)
10 DIMENSION U(2),W(2),T(2),V(2)
11 NV2=N/2
12 NM1=N-1
13 J=1
14 DO 7 I=1,NM1
15 IF (I.GE.J) GOTO 5
16 T(1)=A(1,J)
17 T(2)=A(2,J)
18 A(1,J)=A(1,I)
19 A(2,J)=A(2,I)
20 A(1,I)=T(1)
21 A(2,I)=T(2)
22 5 K=NV2
23 6 IF (K.GE.J) GOTO 7
24 J=J-K
25 K=K/2
26 GO TO 6
27 7 J=J+K
28 PI=3.141592653*SGNEX
29 LE1=1
30 S=0.
31 DO 30 L=1,M
32 LE=2*LE1
33 U(1)=1.
34 U(2)=0.
35 SN=SIN(PI/FLOAT(LE))
36 W(1)=-2.*SN*SN
37 W(2)=S
38 S=SN
39 DO 20 J=1,LE1
40 DO 10 I=J,N,LE
41 IP=I+LE1
42 T(1)=A(1,IP)*U(1)-A(2,IP)*U(2)
43 T(2)=A(1,IP)*U(2)+A(2,IP)*U(1)
44 A(1,IP)=A(1,I)-T(1)
45 A(2,IP)=A(2,I)-T(2)
46 A(1,I)=A(1,I)+T(1)
47 A(2,I)=A(2,I)+T(2)
48 10 CONTINUE
49 V(1)=U(1)+U(1)*W(1)-U(2)*W(2)
50 V(2)=U(2)+U(1)*W(2)+U(2)*W(1)
51 U(1)=V(1)
52 U(2)=V(2)
53 COR=.5-.5*(U(1)*U(1)+U(2)*U(2))
54 U(1)=COR*U(1)+U(1)
55 20 U(2)=COR*U(2)+U(2)
56 30 LE1=LE
57 RETURN
58 END
59 \f\1a