home *** CD-ROM | disk | FTP | other *** search
- PROGRAM d12r6(input,output);
- (* driver for routine CONVLV *)
- CONST
- n=16; (* data array size *)
- m=9; (* response function dimension - must be odd *)
- n2p2=34; (* n2=2*n+2 *)
- pi=3.14159265;
- TYPE
- glnarray = ARRAY [1..n] OF real;
- gln2array = ARRAY [1..n2p2] OF real;
- gl2narray = gln2array;
- gldarray = gln2array;
- VAR
- i,isign,j : integer;
- cmp : real;
- ans : gln2array;
- data,respns,resp : glnarray;
-
- (*$I MODFILE.PAS *)
- (*$I FOUR1.PAS *)
-
- (*$I TWOFFT.PAS *)
-
- (*$I REALFT.PAS *)
-
- (*$I CONVLV.PAS *)
-
- BEGIN
- FOR i := 1 to n DO BEGIN
- data[i] := 0.0;
- IF ((i >= ((n DIV 2)-(n DIV 8))) AND
- (i <= ((n DIV 2)+(n DIV 8)))) THEN
- data[i] := 1.0
- END;
- FOR i := 1 to m DO BEGIN
- respns[i] := 0.0;
- IF ((i > 2) AND (i < 7)) THEN respns[i] := 1.0;
- resp[i] := respns[i]
- END;
- isign := 1;
- convlv(data,n,resp,m,isign,ans);
- (* compare with a direct convolution *)
- writeln ('i':3,'CONVLV':14,'Expected':13);
- FOR i := 1 to n DO BEGIN
- cmp := 0.0;
- FOR j := 1 to (m DIV 2) DO BEGIN
- cmp := cmp+data[((i-j-1+n) MOD n)+1]*respns[j+1];
- cmp := cmp+data[((i+j-1) MOD n)+1]*respns[m-j+1]
- END;
- cmp := cmp+data[i]*respns[1];
- writeln (i:3,ans[i]:15:6,cmp:12:6)
- END
- END.
-