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;