请教如何传递参数!!//能有图象的傅立叶变换demo给三百分
定义tcomplex=record
real :double ;
image:double;
end;
Tcomplexarray=aray[0..0] of Tcomplex;
pcomplexarray =^Tcomplexarray ;
finbuffer:Pcomplexarray;
data1:Tcomplexarray;
我想让finbuffer的 指针指向data1的首地址。
即让finbuffer[i].real等于data1[i].real;
另外,谁能做出图象的傅立叶变换,给三百分
定义tcomplex=record
real :double ;
image:double;
end;
Tcomplexarray=aray[0..0] of Tcomplex;
pcomplexarray =^Tcomplexarray ;
finbuffer:Pcomplexarray;
data1:Tcomplexarray;
我想让finbuffer的 指针指向data1的首地址。
即让finbuffer[i].real等于data1[i].real;
另外,谁能做出图象的傅立叶变换,给三百分
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas';{$R *.RES}begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
------------------
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
F:TextFile;
implementationuses
unit2;
{$R *.DFM}
procedure PRNTFT(DATA:array of real; NN2:integer);
const
s1 = '%13.6f'; s2 = '#0';
var
NN,N,M,MM:integer;
begin
Writeln(F,' n Real H(n) Imag H(n) Real H(N-n) Imag H(N-n)');
Writeln(F,' ',FormatFloat('0',0),Format(s1,[DATA[1]]),
Format(s1,[DATA[2]]),Format(s1,[DATA[1]]),Format(s1,[DATA[2]]));
For NN:=2 To (((NN2 div 2) + 2) div 2) do
begin
N:= 2 * NN -1;
M:= (N-1) div 2;
MM:=NN2 + 2 - N;
Writeln(F,' ',FormatFloat(s2,M),Format(s1,[DATA[N]]),
Format(s1,[DATA[N+1]]),Format(s1,[DATA[MM]]),Format(s1,[DATA[MM+1]]));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
s1='%13.6f'; s2 = '##';
N = 32; N2 = 2 * N; PER = 8; PI = 3.1415926;
var
DATA1,DATA2:array[0..32] of real; FFT1,FFT2:array[0..64] of real;
I,II,ISIGN,J:integer; X:real;
begin
//输出计算结果到文件
AssignFile(F, 'd10r2.dat');
Rewrite(F);
For I:=1 To N do
begin
X:= 2* PI * I / PER;
DATA1[I]:= Round(Cos(X));
DATA2[I]:= Round(Sin(X));
end;
TWOFFT(DATA1, DATA2, FFT1, FFT2, N);
Writeln(F, 'Fourier transform of first function:');
PRNTFT(FFT1, N2);
Writeln(F, 'Fourier transform of second function:');
PRNTFT(FFT2, N2);
//Invert transform
ISIGN:= -1;
FOUR1(FFT1, N, ISIGN);
Writeln(F, 'Inverted transform = first function:');
PRNTFT(FFT1, N2);
FOUR1(FFT2, N, ISIGN);
Writeln(F, 'Inverted transform = second function:');
PRNTFT(FFT2, N2);
CloseFile(F);
//屏幕显示计算结果
memo1.Lines.LoadFromFile('d10r2.dat');
end;end.
-----------------------
unit Unit2;interface Procedure FOUR1(var DATA:array of real; NN, ISIGN:integer);
Procedure TWOFFT(DATA1, DATA2:array of real;
var FFT1, FFT2:array of real; N:integer);
implementationProcedure FOUR1(var DATA:array of real; NN, ISIGN:integer);
var
N,J,JJ,I,M,II,MM,ISTEP,MMAX:integer;
THETA,WR,WI,WPR,SUM,WTEMP,Y1,Y2,TEMPR,TEMPI,WPI:real;
begin
N:=2 * NN;
J:=1;
For II:=1 To NN do
begin
I:= II * 2 - 1;
If J > I Then
begin
TEMPR:=DATA[J];
TEMPI:=DATA[J + 1];
DATA[J]:=DATA[I];
DATA[J + 1]:=DATA[I + 1];
DATA[I]:=TEMPR;
DATA[I + 1]:=TEMPI;
end;
M:=N div 2;
While (M >= 2) And (J > M) do
begin
J:=J - M;
M:=M div 2;
end;
J:=J + M;
end;
MMAX:=2;
While N > MMAX do
begin
ISTEP:=2 * MMAX;
THETA:=6.28318530717959 / (ISIGN * MMAX);
WPR:=-2 * Sqr(Sin(0.5 * THETA));
WPI:=Sin(THETA);
WR:=1;
WI:=0;
For II:=1 To (MMAX div 2) do
begin
M:= II * 2 - 1;
For JJ:=0 To ((N-M) div ISTEP) do
begin
I:= M + JJ*ISTEP ;
J:=I + MMAX;
TEMPR:=WR * DATA[J] - WI * DATA[J + 1];
TEMPI:=WR * DATA[J + 1] + WI * DATA[J];
DATA[J]:=DATA[I] - TEMPR;
DATA[J + 1]:=DATA[I + 1] - TEMPI;
DATA[I]:=DATA[I] + TEMPR;
DATA[I + 1]:=DATA[I + 1] + TEMPI;
end;
WTEMP:=WR;
WR:=WR * WPR - WI * WPI + WR;
WI:=WI * WPR + WTEMP * WPI + WI;
end;
MMAX:=ISTEP;
end;
end;Procedure TWOFFT(DATA1, DATA2:array of real;
var FFT1, FFT2:array of real; N:integer);
var
C1R,C1I,C2R,C2I,CONJR,CONJI,H1R,H1I,H2R,H2I:real; N2,J,J2:integer;
begin
C1R:=0.5;
C1I:=0;
C2R:=0;
C2I:=-0.5;
For J:=1 To N do
begin
FFT1[2 * J - 1]:=DATA1[J];
FFT1[2 * J]:=DATA2[J];
end;
FOUR1(FFT1, N, 1);
FFT2[1]:=FFT1[2];
FFT2[2]:=0;
FFT1[2]:=0;
N2:=2 * (N + 2);
For J:=2 To ((N div 2) + 1) do
begin
J2:=2 * J;
CONJR:=FFT1[N2 - J2 - 1];
CONJI:=-FFT1[N2 - J2];
H1R:=C1R * (FFT1[J2 - 1] + CONJR) - C1I * (FFT1[J2] + CONJI);
H1I:=C1I * (FFT1[J2 - 1] + CONJR) + C1R * (FFT1[J2] + CONJI);
H2R:=C2R * (FFT1[J2 - 1] - CONJR) - C2I * (FFT1[J2] - CONJI);
H2I:=C2I * (FFT1[J2 - 1] - CONJR) + C2R * (FFT1[J2] - CONJI);
FFT1[J2 - 1]:=H1R;
FFT1[J2]:=H1I;
FFT1[N2 - J2 - 1]:=H1R;
FFT1[N2 - J2]:=-H1I;
FFT2[J2 - 1]:=H2R;
FFT2[J2]:=H2I;
FFT2[N2 - J2 - 1]:=H2R;
FFT2[N2 - J2]:=-H2I;
end;
end; end.