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

⟦0b3709f13⟧

    Length: 20352 (0x4f80)
    Notes: Mikados TextFile, Mikados_K
    Names: »FFTDEMO«

Derivation

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

Text

PROGRAM FFTDEMO;
(*********************************************
     
  ENDELIG VERSION AF PROGRAMMET FFTDEMO 1/9-80
      
  FORUDSAETTER FILERNE:
    FFTPLOT (INDEHOLDENDE PROCEDUREN FFTPLOT)
    MIT  (-----"------ -----"---- MIT)
    FFT2 (-----"------ -----"---- FFT2)
    KONVERT (---"----- -----"---- KONVERTERING)
  ********************************************)
CONST TOPI=6.283185307179;
      PI=3.141592653489;
      PIHALV=1.570796326794;
      REOGIM='real- og imaginaerdelen';
      AOGF='amplituden og fasen';
     
TYPE CHECK=(OK,IKKEOK);
     VEKTOR =ARRAY (0..255) OF REAL;
     OVERSKRIFT=STRING(40);
     SIGNALFORM=STRING(3);
     SYMBOLER=ARRAY (1..2) OF CHAR;
     PUNKTER=ARRAY(1..256,1..2) OF REAL;
       
VAR SIG1I,SIG1R,SIG2R,SIG2I  : VEKTOR;
    X,Y:PUNKTER;
    DEL,NUMSIG: ARRAY (1..4) OF STRING(15);
    M,N,MTEST,S,SIG,D,I,IHE,N1 :INTEGER;
    A,B :REAL;
    ART,SVAR :SIGNALFORM;
    CASETEGN,SPTYPE:CHAR;
    TEGN:SYMBOLER;
    TEST,FORTSAT,PLOT :BOOLEAN;
    SVARTEST:CHECK;
    SIGNAL:SIGNALFORM;
     
  
(*$IFFTPLOT*)
(*$IFFT2*)
(*$IMIT*)
(*$IKONVERT*)
  
  
 SEGMENT FUNCTION JANEJ(SP0RGSMAAL:STRING):BOOLEAN;
   
 (* DENNE PROCEDURE UDSKRIVER 'SP0RGSMAAL' OG LAESER
    SVARET. DEN ER TRUE HVIS SVARET ER 'J' ELLER 'JA'
    OG FALSE HVIS DET ER 'NEJ' ELLER 'N'.    *)
 BEGIN
 REPEAT
   SVARTEST:=OK;
   WRITE(SP0RGSMAAL);
   READLN;   READ(SVAR);
   IF (SVAR<>'JA') AND (SVAR<>'NEJ') AND
      (SVAR<>'J') AND (SVAR<>'N')   THEN
     BEGIN
     WRITELN('Det indtastede: ',SVAR,' er ikke lovligt.');
     WRITELN('Kun JA,NEJ,J,N er lovlige svar');
     SVARTEST:=IKKEOK;
     END;
 UNTIL SVARTEST=OK;
 JANEJ:=SVAR(1)='J';
 END;
   
 SEGMENT PROCEDURE SIGNALPLOT(D:INTEGER;
                              SIGNALNR:INTEGER;
                              SKALA:BOOLEAN;
                              TEKST:OVERSKRIFT);
 (* DENNE PROCEDURE UDTEGNER SIGNAL/SPEKTRUM.
    D ER 1 FOR REALDELEN OG 2 FOR IMAGINAERDELEN.
    SIGNALNR ER 1 FOR DET F0RSTE SIGNAL OG 2 FOR DET ANDET.
             3 FOR BADE REAL- OG IMAGINAER DEL AF 1. SIGNAL
             4 -"- --"- --"-- "  ----"----  "  "  2. --"---
    SKALA TRUE NAAR X-AKSEN ER -N/2 TIL N/2 OG FALSE NAAR
          DEN SKAL VAERE 0 TIL N-1.
    TEKST ER EN TEKST SOM BESKRIVER HVAD DER PLOTTES.    *)
    
    VAR S:INTEGER;
    BEGIN
      CASE SIGNALNR OF
      1:   CASE D OF
           1:   FOR I:=0 TO N1 DO Y(I+1,1):= SIG1R(I);
           2:   FOR I:=0 TO N1 DO Y(I+1,1):=SIG1I(I);
           END;
         
      2:   CASE D OF
           1:   FOR I:=0 TO N1 DO Y(I+1,1):= SIG2R(I);
           2:   FOR I:=0 TO N1 DO Y(I+1,1):=SIG2I(I);
           END;
            
      3:   FOR I:=0 TO N1 DO
             BEGIN
             IHE:=I+1;
             Y(IHE,1):=SIG1R(I);
             Y(IHE,2):=SIG1I(I);
             END;
 
      4:  FOR I:=0 TO N1 DO
             BEGIN
             IHE:=I+1;
             Y(IHE,1):=SIG2R(I);
             Y(IHE,2):=SIG2I(I);
             END;
      END;
             
      IF (SIGNALNR >= 3) THEN
        BEGIN
        S:=2;
        TEGN(1):='r';
        TEGN(2):='i';
        END
      ELSE
        BEGIN
        S:=1;
        TEGN(1):=TEKST(1);
        END;
 
      IF SKALA THEN
        FOR I:=0 TO N1 DO X(I+1,1):=I-N DIV 2
      ELSE
        FOR I:=0 TO N1 DO
        BEGIN
        IHE:=I+1;
        X(IHE,1):=I;
        X(IHE,2):=I;
        END;
      WRITELN;
      WRITELN('Her kommer ',TEKST);
      WRITELN('Tryk RETURN naar kurven ikke skal vises mere');
      FFTPLOT(S,N,X,Y,TEGN,TRUE);
      READLN;
    END;
     
  SEGMENT PROCEDURE TABEL(X,Y:VEKTOR;
                          HOVED:OVERSKRIFT;
                          KOLNAVN1,KOLNAVN2:OVERSKRIFT);
      
  (*  DENNE PROCEDURE UDSKRIVER TABEL MED VEKTORERNE X OG Y
      HOVED ANGIVER HVAD TABELLEN INDEHOLDER.
      KOLNAVN1 ER INDHOLDET AF F0RSTE KOLONNE.
      KOLNAVN2 "  ----"---- "  ANDEN  ---"---       *)
  VAR TL,LINIE,NR:INTEGER;
  BEGIN
    NR:=0;
    REPEAT
      LINIE:=1;
      CLEARSCREEN;
      GOTOXY(13,1); WRITELN('Tabel over ',HOVED);
      GOTOXY(13,2); FOR I:=1 TO 11+LENGTH(HOVED) DO WRITE('*');
      WRITELN;
      GOTOXY(4,4);  WRITE('i');
      GOTOXY(13,4);  WRITE(KOLNAVN1);
      GOTOXY(36,4);  WRITE(KOLNAVN2);
      GOTOXY(1,5);  FOR I:=1 TO 51 DO WRITE('-');
      WRITELN('-');
      REPEAT
        TL:=1;
        REPEAT
        WRITELN('   ',NR,'   ',X(NR),'   ',Y(NR));
        LINIE:=LINIE+1;
        TL:=TL+1;
        NR:=NR+1;
        UNTIL (TL>=5) OR (NR>N1);
      WRITELN;
      UNTIL(NR>N1) OR (LINIE>=12);
      WRITE('Tryk RETURN naar der skal fortsaettes.');
      READLN;
    UNTIL (NR>=N1);
    END;  (*SLUT TABEL*)
   
   SEGMENT PROCEDURE SIGFKT(VAR ST:VEKTOR;
                           A,B:REAL;
                           SI:SIGNALFORM);
   (*  HER UDREGNES SIGNALET BESTEMT VED SI OG AFLEVERES
       I VEKTOREN ST. A OG B ER PARAMETRE TIL SIGNALERNE.  *)
  VAR H,HELP,F,XMAX,DXM:REAL;
      I,J,X,OVRE,DX,BMAX,ETTER,NULLER:INTEGER;
      CASETEGN:CHAR;
 
  PROCEDURE INDSAT(MAXANTAL:INTEGER;
                   VAERDI:REAL);
  (* DENNE PROCEDURE INDSAETTER TALLET VAERDI I VEKTOREN
     ST, FRA HVOR X PEGER OG TIL X+MAXANTAL (X ER INDEKS I
     VEKTOREN)  *)
  VAR ANTAL:INTEGER;
  BEGIN
  ANTAL:=1;
  WHILE (ANTAL<=MAXANTAL) AND (X<=N1) DO
    BEGIN
    ST(X):=VAERDI;
    X:=X+1;
    ANTAL:=ANTAL+1;
    END;
  END;
   
  BEGIN
  CASETEGN:=SI(1);
  CASE CASETEGN OF
  'T':  BEGIN
        H:=-4*A/N/N;
        HELP:=N1/A;
        DXM:=HELP/2;
        XMAX:=0.0;
        X:=0;
        F:=0.0;
        REPEAT
          I:=1;
          XMAX:=XMAX + DXM;
          H:=-H;
          WHILE (X<=XMAX) AND (X<=N1) DO
          BEGIN
          ST(X):=H*(X-F);
          X:=X+1;
          I:=I+1;
          END;
        I:=1;
        H:=-H;
        XMAX:=XMAX + DXM;
        F:=F+HELP;
        WHILE (X<=XMAX ) AND (X<=N1) DO
          BEGIN
          ST(X):=H*(X-F);
          X:=X+1;
          I:=I+1;
          END;
        IF X=N1 THEN ST(X):=H*(X-F);
        UNTIL X>=N1;
        END;
  'S':  BEGIN
        A:=TOPI*A/N;
        CLEARSCREEN;
        WRITE('Punkt nr.');
        FOR X:=0 TO N1 DO
          BEGIN
          ST(X):= SIN(A*X);
          GOTOXY(10,1);
          WRITE(X);
          END;
        GOTOXY(1,2);
        END;
  'C':  BEGIN
        A:=TOPI*A/N;
        CLEARSCREEN;
        WRITE('Punkt nr.');
        FOR X:=0 TO N1 DO
          BEGIN
          ST(X):=COS(A*X);
          GOTOXY(10,1);
          WRITE(X);
          END;
        GOTOXY(1,2);
        END;
  'F':  BEGIN
        X:=0;
        BMAX:=TRUNC(B);
        NULLER:=TRUNC(N/2/A);
        ETTER:=NULLER-2;
        IF BMAX>0 THEN
          BEGIN
          FOR X:=0 TO BMAX DO ST(X):=0.0;
          X:=BMAX+1;
          END;
        REPEAT
          ST(X):=0.5;
          X:=X+1;
          INDSAT(ETTER,1.0);
          IF (X<=N1) THEN ST(X):=0.5;
          X:=X+1;
          INDSAT(NULLER,0.0);
        UNTIL (X>=N1);
        END;
  'I':  BEGIN
        DX:=TRUNC( N/(A+1) );
        FOR X:=0 TO N1 DO ST(X):=0.0;
        FOR I:=1 TO TRUNC(A) DO
          BEGIN
          X:=DX*I;
          ST(X):=1.0;
          END;
        END;
  'K':  FOR X:=0 TO N1 DO ST(X):=A;
     
  'M':  MIT(A,ST,D);
    
  END;
  END;
 
    SEGMENT PROCEDURE TOSIGNAL;
   (* DENNE PROCEDURE LAVER LINIARKOMBINATIONEN ELLER
      PRODUKTET AF DE TIDLIGERE DEFINEREDE SIGNALER  *)
    
    VAR RE1,IM1,RE2,IM2:REAL;
  
    BEGIN
      REPEAT
        SVARTEST:=OK;
        WRITELN;
        WRITELN('Hvordan skal de to signaler "kombineres"?');
        WRITELN;
        WRITELN('Indtast:');
        WRITELN('1  for A*SIGNAL1 + B*SIGNAL2');
        WRITELN('2  for A*SIGNAL1*SIGNAL2');
        WRITELN;
        WRITE('Indtast det oenskede: ');
        READLN;  READ(ART);
        IF (ART<>'1') AND (ART<>'2')  THEN
          BEGIN
          WRITELN('Det indtastede: ',ART,' er ikke lovligt.');
          WRITELN('Kun 1,2 er lovlige svar.');
          SVARTEST:=IKKEOK;
          END;
      UNTIL SVARTEST=OK;
      WRITE('Indtast A:');
      READ(A);
      CASETEGN:=ART(1);
      CASE CASETEGN OF
      '1':  BEGIN
            WRITE('Indtast B:');   READ(B);
            FOR I:=0 TO N1 DO
              BEGIN
              SIG1R(I):=A*SIG1R(I) + B*SIG2R(I);
              SIG1I(I):=A*SIG1I(I) + B*SIG2I(I);
              END;
            END;
      '2':  FOR I:=0 TO N1 DO
              BEGIN
              RE1:=SIG1R(I);
              IM1:=SIG1I(I);
              RE2:=SIG2R(I);
              IM2:=SIG2I(I);
              SIG1R(I):=A*(RE1*RE2-IM1*IM2);
              SIG1I(I):=A*(RE1*IM2+RE2*IM1);
              END;
      END;
      IF JANEJ(CONCAT('0nskes plot af ',DEL(1),'?') ) THEN
        SIGNALPLOT(1,1,FALSE,DEL(1));
      IF JANEJ( CONCAT('0nskes plot af ',DEL(2),'?') ) THEN
        SIGNALPLOT(2,1,FALSE,DEL(2));
      IF JANEJ( CONCAT('0nskes tabel over ',REOGIM) ) THEN
        TABEL(SIG1R,SIG1I,REOGIM,DEL(1),DEL(2)) ELSE ;
  END;
  
   
  
   
 SEGMENT PROCEDURE SIGNALDEFINITION;
 (*  DENNE PROCEDURE GIVER LISTE OVER DE MULIGE STANDARD-
     SIGNALER, OG CHECKER SVARENE PAA SP0RGSMAALENE OM
     REAL OG IMAGINAERDELEN AF SIGNAL NR. 1 EVT. OGSAA NR. 2
     KALDER SAA SIGFKT SOM LEVERER SIGNALET.  *)
  BEGIN
  FOR SIG:=1 TO S DO
    BEGIN
    FOR D:=1 TO 2 DO
    BEGIN
    REPEAT
      SVARTEST:=OK;
      WRITELN;
      WRITELN('Hvordan skal ',DEL(D),' af det ',NUMSIG(SIG),' signal',
              ' vaere?');
      WRITELN('Der er flg. svarmuligheder:');
      WRITELN;
      WRITELN('aTRE   betyder trekantsignal');
      WRITELN('aFIR   ---"--- firkantsignal');
      WRITELN('aIMP   ---"--- impulssignal (diskret delta fkt)');
      WRITELN('aCOS ---"--- cosinus signal');
      WRITELN('aSIN ---"--- sinus signal');
      WRITELN('kKST ---"--- konstanten k');
      WRITELN('xMIT ---"--- brugerdefineret signal i proceduren MIT');
      WRITELN;
      WRITELN('a betegner et reelt, positivt tal som angiver,');
      WRITELN('  hvormange gange det valgte signal gentages');
      WRITE('Indtast det oenskede:');
      READ(A);   READ(SIGNAL);
      IF (A<=0) AND (SIGNAL<>'KST') AND (SIGNAL<>'MIT')  THEN
        BEGIN
        WRITELN('Det indtastede a: ',A,' er ikke lovligt.');
        WRITELN('a skal vaere positiv!');
        SVARTEST:=IKKEOK;
        END;
      IF (SIGNAL<>'TRE') AND (SIGNAL<>'FIR') AND (SIGNAL<>'IMP')
         AND
         (SIGNAL<>'COS') AND (SIGNAL<>'SIN') AND (SIGNAL<>'KST')
         AND  (SIGNAL<>'MIT')
        THEN
        BEGIN
        WRITELN('Det indtastede signal: ',SIGNAL,' er ikke lovligt');
        SVARTEST:=IKKEOK;
        END;
      IF (SIGNAL='FIR') THEN
        BEGIN
        WRITE('Hvad skal forskydningen vaere?');
        READ(B);
        IF B<0 THEN
          BEGIN
          WRITELN('b skal vaere ikke negativ');
          SVARTEST:=IKKEOK;
          END;
        END;
      UNTIL SVARTEST=OK;
 
      CASE SIG OF
      1:   CASE D OF
           1: SIGFKT(SIG1R,A,B,SIGNAL);
    
           2: SIGFKT(SIG1I,A,B,SIGNAL);
           END;
       
      2:   CASE D OF
           1:  SIGFKT(SIG2R,A,B,SIGNAL);
     
           2:  SIGFKT(SIG2I,A,B,SIGNAL);
           END;
      END;   (* CASE SIG *)
      IF JANEJ( CONCAT('0nskes plot af ',DEL(D),'?') ) THEN
        SIGNALPLOT(D,SIG,FALSE,DEL(D));
    END;
  IF JANEJ(CONCAT('0nskes plot af ',REOGIM,'?'))  THEN
    SIGNALPLOT(1,SIG+2,FALSE,REOGIM);
  IF JANEJ(CONCAT('0nskes tabel over ',REOGIM,'?')) THEN
    CASE SIG OF
    1: TABEL(SIG1R,SIG1I,REOGIM,DEL(1),DEL(2));
    2: TABEL(SIG2R,SIG2I,REOGIM,DEL(1),DEL(2));
    END;  
  END;
  END;
  
  SEGMENT PROCEDURE NSP0RGSMAAL;
  (* HER STILLES ? OM N (ANTALLET AF SAMPLES) OG SVARET
     CHECKES. DER FINDES OGSAA M SAA 2**M=N.
     ENDELIG ? OM SIGNALET SKAL LAVES MED ET ELLET TO SIGNALER *)
  BEGIN
  REPEAT
    SVARTEST:=OK;
    WRITE('Hvormange samples (N) oenskes?  ÆN<=256Å :');
    READ(N);
    M:=-1;
    MTEST:=2*N;
    IF N>=2 THEN
    REPEAT
      MTEST:=MTEST DIV 2;
      M:=M+1;
    UNTIL (MTEST=1) OR ((MTEST MOD 2)=1);
    IF MTEST<>1 THEN
      BEGIN
      WRITELN('Det indtastede N=',N,' er ikke en potens af 2');
      SVARTEST:=IKKEOK;
      END;
    IF N>256 THEN
      BEGIN
      WRITELN('Det indtastede N=',N,'  er for stort. (N<=256 )');
      SVARTEST:=IKKEOK;
      END;
    IF N<2 THEN
      BEGIN
      WRITELN('Det indtastede N= ',N,' er for lille. (N>=2)');
      SVARTEST:=IKKEOK;
      END;
  UNTIL SVARTEST=OK;
  N1:=N-1;
     
  REPEAT
    SVARTEST:=OK;
    WRITELN;
    WRITE('0nskes der anvendt 1 eller 2 signaler?');
    READ(S);
    IF (S<>1) AND (S<>2) THEN
      BEGIN
      WRITELN('Det angivne antal signaler: ',S,' er ikke lovligt');
      SVARTEST:=IKKEOK;
      END;
  UNTIL SVARTEST=OK;
  END;
 
   
  SEGMENT PROCEDURE VINDUE;
  (*  PROCEDUREN DEFINERER VINDUE, SOM KAN GANGES PAA DET
      FAERDIGE SIGNAL *)
   
  VAR V1,V2:INTEGER;
  PROCEDURE READHELTAL(A:CHAR;
                       VAR H:INTEGER);
  (* LAESER HELTALLET VED NAVN 'A' IND I DEN VARIABLE H
     OG CHECKER OM DET ER INTERVALLET Æ0;N-1Å   *)
     
  BEGIN
  REPEAT
    SVARTEST:=OK;
    WRITE('Indtast ',A,':');
    READ(H);
    IF (H<0) OR (H>N1) THEN
      BEGIN
      WRITELN('Det indtastede ',A,'= ',H,' er ikke lovligt');
      WRITELN(A,' skal vaere i intervallet Æ0;',N1,'Å');
      SVARTEST:=IKKEOK;
      END;
  UNTIL SVARTEST=OK;
  END;
  
  BEGIN
  WRITELN('PT. Kun en mulighed for efterbehandling af signalet');
  WRITELN('Nemlig anvendelse af et firkantet vindue');
  WRITELN('dvs. signalet ganges med flg. funktion.');
  WRITELN('      1 for a<x<b ');
  WRITELN('F(X)= o.5 for x=a og x=b ');
  WRITELN('      0 ellers');
  WRITELN('Hvor a,b,x er hele tal i intervaller Æ0;',n1,'Å');
  WRITELN('og a<=b');
  READHELTAL('a',V1);
  REPEAT
    SVARTEST:=OK;
    READHELTAL('b',V2);
    IF V2<V1 THEN
      BEGIN
      WRITELN('b skal vaere stoerre end a');
      SVARTEST:=IKKEOK;
      END;
  UNTIL SVARTEST=OK;
  FOR I:= 0 TO V1 DO
    BEGIN
    SIG1R(I):=0.0;
    SIG1I(I):=0.0;
    END;
  SIG1R(V1):=0.5*SIG1R(V1);
  SIG1I(V1):=0.5*SIG1I(V1);
  SIG1R(V2):=0.5*SIG1R(V2);
  SIG1I(V2):=0.5*SIG1I(V2);
  FOR I:=V2+1 TO N1 DO
    BEGIN
    SIG1R(I):=0.0;
    SIG1I(I):=0.0;
    END;
  END;
   
    SEGMENT PROCEDURE SPEKTRUM(TEKST:OVERSKRIFT);
    
    (*  DENNE PROCEDURER STILLER ?? OM HVORDAN 'TEKST'
        F.EKS. SPEKTRET SKAL PRAESENTERES  *)
    FUNCTION READSVAR(VAR TEGN:CHAR):CHECK;
    BEGIN
    READLN;    READ(TEGN);
    IF  (TEGN<>'1') AND (TEGN<>'2') AND (TEGN<>'3') THEN
      BEGIN
      WRITELN('Det indtastede: ',TEGN,' er ikke lovligt.');
      WRITELN('Kun 1,2,3 er lovlige svar.');
      READSVAR:=IKKEOK;
      END;
    END;
   
  BEGIN
  REPEAT
    SVARTEST:=OK;
    PLOT:=FALSE;
    WRITELN('Hvad skal plottet af ',TEKST,' indeholde?');
    WRITELN('Der er flg. valgmuligheder:');
    WRITELN;
    WRITELN('1  Plot af ',REOGIM);
    WRITELN('2  -"-- af ',AOGF);
    WRITELN('3  Begge dele');
    WRITE('Indtast nummeret paa det oenskede: ');
    SVARTEST:=READSVAR(SPTYPE);
  UNTIL SVARTEST=OK;
  IF (SPTYPE<>'1') THEN
    BEGIN
    KONVERT(SIG1R,SIG1I,SIG2R,SIG2I);
    PLOT:=TRUE;
    END;
  CASE SPTYPE OF
  '1':  FOR D:=1 TO 2 DO
        BEGIN
        SIGNALPLOT(D,1,FALSE,DEL(D));
        END;
  '2':  FOR D:=1 TO 2 DO
        BEGIN
        SIGNALPLOT(D,2,TRUE,DEL(D+2));
        END;
  '3':  BEGIN
        FOR D:=1 TO 2 DO   SIGNALPLOT(D,1,FALSE,DEL(D));
        FOR D:=3 TO 4 DO  SIGNALPLOT(D-2,2,TRUE,DEL(D));
      END;
  END;
  IF (JANEJ(CONCAT('0nskes tabel over ',TEKST,' ?') ))  THEN
    BEGIN
    REPEAT
    SVARTEST:=OK;
    WRITELN('Hvad skal tabellen indeholde?');
    WRITELN;
    WRITELN('Der flg. valgmuligheder:');
    WRITELN('1  Tabel over ',REOGIM);
    WRITELN('2  --"-- -"-- ',AOGF);
    WRITELN('3  Baade og');
    WRITE('Indtast nummeret paa det oenskede:');
    SVARTEST:=READSVAR(SPTYPE);
  UNTIL SVARTEST=OK;
    IF (SPTYPE<>'1') AND (NOT PLOT) THEN
      KONVERT(SIG1R,SIG1I,SIG2R,SIG2I);
    CASE SPTYPE OF
    '1':  TABEL(SIG1R,SIG1I,REOGIM,DEL(1),DEL(2));
    '2':  TABEL(SIG2R,SIG2I,AOGF,DEL(3),DEL(4));
    '3':  BEGIN
        TABEL(SIG1R,SIG1I,REOGIM,DEL(1),DEL(2));
        TABEL(SIG2R,SIG2I,AOGF,DEL(3),DEL(4));
        END;
    END;
    END;
  END;
             
BEGIN
DEL(1):='realdelen';
DEL(2):='imaginaerdelen';
DEL(3):='amplituden';
DEL(4):='fasen';
NUMSIG(1):='f0rste';
NUMSIG(2):='andet';
   TEST:=FALSE;
REPEAT
  NSP0RGSMAAL;
  SIGNALDEFINITION;
  IF S=2 THEN TOSIGNAL;
  IF JANEJ('0nskes signalet efterbehandlet?') THEN VINDUE;
   FFT2(SIG1R,SIG1I,N,M);
  SPEKTRUM('spektret');
  
  FORTSAT:=(NOT JANEJ('0nskes behandlet flere signaler?'));
UNTIL FORTSAT;
WRITE('TAK FOR IDAG ');
END.