|
|
DataMuseum.dkPresents historical artifacts from the history of: MIKADOS |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about MIKADOS Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 2496 (0x9c0)
Notes: Mikados TextFile, Mikados_K
Names: »FFT2«
└─⟦d110b5765⟧ Bits:30005308 Eksamensopgave i dynamiske systemer med FFT
└─⟦this⟧ »FFT2«
SEGMENT PROCEDURE FFT2(VAR XR,XI:VEKTOR;
N,GAM:INTEGER);
(* HER FORETAGES FFT'EN
XR ER REALDELEN AF SIGNALET.
XI ER IMAGINAERDELEN
N ER ANTALLET AF SAMPLES
GAM 2 OPLOEFTET TIL GAM ER LIGMED N *)
CONST TOPI=6.2831853072;
TYPE INDEX= 1..256;
VAR N2,NHALV,K,L,I:INTEGER;
HELPINDEX:INDEX;
C,CDP,S,SDP,CGL,SGL,TR,TI,XRN2,XIN2,XRK,XIK,DP:REAL;
FUNCTION BITREV(J,GAM:INTEGER):INTEGER;
VAR I,J1,J2,K:INTEGER;
BEGIN
J1:=J;
K:=0;
FOR I:=1 TO GAM DO
BEGIN
J2:=J1 DIV 2;
K:=K*2+ (J1-2*J2);
J1:=J2;
END;
BITREV:=K;
END;
(* BIT REVERSERING AF DATA *)
BEGIN
CLEARSCREEN;
WRITELN('Bit reversering af data');
WRITE('Punkt nr.');
FOR K:=0 TO N-1 DO
BEGIN
GOTOXY(10,2);
WRITE(K);
I:=BITREV(K,GAM);
IF I>K THEN
BEGIN
TR:=XR(K);
TI:=XI(K);
XR(K):=XR(I);
XI(K):=XI(I);
XR(I):=TR;
XI(I):=TI;
END;
END;
IF TEST THEN
BEGIN
FOR I:=0 TO 15 DO WRITELN('XR(',I,')= ',XR(I));
READLN;
END;
(* START PAA SELVE(STE) FFT'EN *)
N2:=1;
K:=0;
NHALV:=N;
WRITELN;
WRITELN('SELVE FFT''EN STARTER');
WRITE('Trin nr.');
FOR L:=1 TO GAM DO
BEGIN
GOTOXY(10,4);
WRITE(L);
NHALV:=NHALV DIV 2;
DP:=TOPI*NHALV/N;
CDP:=COS(DP);
SDP:=SIN(DP);
IF TEST THEN
BEGIN
WRITELN('DP=',DP,' CDP= ',CDP,' SDP= ',SDP);
READLN;
END;
WHILE (K<N) DO
BEGIN
S:=0.0;
C:=1.0;
FOR I:=1 TO N2 DO
BEGIN
IF TEST THEN
BEGIN
WRITELN('S= ',S,' C= ',C,' I = ',I);
WRITELN('K= ',K,'N2= ',N2);
END;
HELPINDEX:=K+N2;
XRN2:=XR(HELPINDEX);
XIN2:=XI(HELPINDEX);
TR:=C*XRN2 - S*XIN2;
TI:=C*XIN2 + S*XRN2;
XRK:=XR(K);
XIK:=XI(K);
XR(HELPINDEX):=XRK - TR;
XI(HELPINDEX):=XIK - TI;
XR(K):=XRK + TR;
XI(K):=XIK + TI;
SGL:=S;
CGL:=C;
C:=CGL*CDP - SGL*SDP;
S:=CGL*SDP + SGL*CDP;
K:=K+1;
END;
IF TEST THEN
BEGIN
WRITELN('I L0KKE SLUT');
READLN;
END;
K:=K+N2;
END;
K:=0;
N2:=2*N2;
END;
WRITELN;
END;