home *** CD-ROM | disk | FTP | other *** search
- PROGRAM d12r3(input,output);
- (* driver for routine REALFT *)
- LABEL 1,99;
- CONST
- eps=1.0e-3;
- np=32;
- np2=34; (* np+2 *)
- width=50.0;
- pi=3.1415926;
- TYPE
- gldarray = ARRAY [1..np2] OF real;
- VAR
- big,per,scal,small : real;
- i,j,n,nlim : integer;
- data,size : gldarray;
-
- (*$I MODFILE.PAS *)
- (*$I FOUR1.PAS *)
-
- (*$I REALFT.PAS *)
-
- BEGIN
- n := np DIV 2;
- 1: writeln('Period of sinusoid in channels (2-',np:2,')');
- readln(per);
- IF (per <= 0.0) THEN GOTO 99;
- FOR i := 1 to np DO BEGIN
- data[i] := cos(2.0*pi*(i-1)/per)
- END;
- realft(data,n,+1);
- big := -1.0e10;
- FOR i := 1 to n DO BEGIN
- size[i] := sqrt(sqr(data[2*i-1])+sqr(data[2*i]));
- IF (size[i] > big) THEN big := size[i]
- END;
- size[1] := data[1];
- IF (size[1] > big) THEN big := size[1];
- scal := width/big;
- FOR i := 1 to n DO BEGIN
- nlim := round(scal*size[i]+eps);
- write(i:4,' ');
- FOR j := 1 to nlim+1 DO write('*');
- writeln
- END;
- writeln('press RETURN to continue ...');
- readln;
- realft(data,n,-1);
- big := -1.0e10;
- small := 1.0e10;
- FOR i := 1 to np DO BEGIN
- IF (data[i] < small) THEN small := data[i];
- IF (data[i] > big) THEN big := data[i]
- END;
- scal := width/(big-small);
- FOR i := 1 to np DO BEGIN
- nlim := round(scal*(data[i]-small)+eps);
- write(i:4,' ');
- FOR j := 1 to nlim+1 DO write('*');
- writeln
- END;
- GOTO 1;
- 99:
- END.
-