Programa Cālcul FFT llibre "Digital Signal Processing" de C a Pascal
Traducciķ a Pascal del codi del llibre,"Digital Signal Processing", en C. Aquest codi es presenta sense cap garantia. Tothom que el faci servir és sota la seva propia responsabilitat. En cap moment es garanteix que funcioni correctament.
var
f: array[0..NMax-1] of real; //valors de la funciķ
type
SoReal = array[1..NMax] of single;
Procedure CalculFftllibre(GrandariaBufferFFT:LongInt);
var
m,irem,l,le,le1,i,j,k,ip:integer;
ur,ui,wr,wi,tr,ti,temp:single;
comodi,comodi2:single;
DR,DI: SoReal;
begin
GrandariaBufferFFT:=N;
for i:=1 to GrandariaBufferFFT do begin
DR[i]:= f[i-1];
DI[i]:= 0.;
end;
//Cālcul FFT
j:=1;
comodi:=0.5;
for i:=1 to GrandariaBufferFFT-1 do begin
if i1 do begin
irem:=round(irem*comodi);
m:=m+1;
end;
for l:=1 to m do begin
le:=round(exp(l*ln(2)));
le1:=round(le*comodi);
ur:=1.0;
ui:=0;
wr:=cos(pi/le1);
wi:=-sin(pi/le1);
for j:=1 to le1 do begin
i:=j;
while i<=GrandariaBufferFFT do begin
ip:=i+le1;
tr:=DR[ip]*ur-DI[ip]*ui;
ti:=DI[ip]*ur+DR[ip]*ui;
DR[ip]:=DR[i]-tr;
DI[ip]:=DI[i]-ti;
DR[i]:=DR[i]+tr;
DI[i]:=DI[i]+ti;
i:=i+le;
end;
temp:=ur*wr-ui*wi;
ui:=ui*wr+ur*wi;
ur:=temp;
end;
end;
for i:=1 to GrandariaBufferFFT do begin
DR[i]:=DR[i]/GrandariaBufferFFT;
DI[i]:=DI[i]/GrandariaBufferFFT;
end;
end;
|