DataMuseum.dk

Presents historical artifacts from the history of:

MIKADOS

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about MIKADOS

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦db68dd5f9⟧

    Length: 2496 (0x9c0)
    Notes: Mikados TextFile, Mikados_K
    Names: »FFT2«

Derivation

└─⟦d110b5765⟧ Bits:30005308 Eksamensopgave i dynamiske systemer med FFT
    └─ ⟦this⟧ »FFT2« 

Text

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;