быстрое преобразование фурье

Jan 04, 2007 2 Replies

Hi, All!


где можно взять алгоритмы быстрого преобразования фурье. ассемблер. авр (тини, желательно).



практическое применение не плаируется, просто очень (очень-очень) интересно. желательно с *.пдф даташитом.


Oleg


Hi, Oleg Dozhdev

Если просто интересно, то вот:

unit BPF;

interface

type TDoubleArray = array of Double;

var DoubleArray:TDoubleArray;

procedure BPF_Pr(var MasIn: TDoubleArray);

implementation

procedure BPF_Pr(var MasIn: TDoubleArray); const ss: array [1..12] of real =(0,-1,-0.7071,-0.38268,-0.19509,-0.09802,-0.04907, -0.02454, -0.01227, -0.0061, -0.00307, -0.001539); cc: array [1..12] of real =(-1,0,0.7071068,0.9238795,0.9807853,0.9951847,0.9987955, 0.9996988,

0.9999247, 0.9999812, 0.9999953, 0.999999); var n,r,i,k,ni,l,m,j,g,n1,n2:Integer; x,ci,s,v,w,z,u,y,nn:Double; a,b: array of double; begin n:=Length(MasIn); case n of 256: r:=8; 512: r:=9; 1024: r:=10; 2048: r:=11; 4096: r:=12; else Exit; // не поддерживается типа end; n1:=n div 2; n2:=n1+1; nn:=1/n; SetLength(a,n+1); SetLength(b,n+1); for i:=1 to n do a[i]:=MasIn[i-1]; for i:=1 to n do b[i]:=0; ni:=n1; k:=n2; for i:=2 to n-1 do begin if i<k then begin x:=a[k]; a[k]:=a[i]; a[i]:=x; end; l:=ni; while l<k do begin k:=k-l; l:=l div 2; end; k:=k+l; end; m:=1; l:=n1; for i:=1 to r do begin ci:=cc[i]; s:=ss[i]; v:=1; w:=0; for j:=1 to m do begin for k:=1 to l do begin ni:=j+2*(k-1)*m; g:=ni+m; z:=a[g]; u:=b[g]; x:=z*v+u*w; y:=u*v-z*w; z:=a[ni]; u:=b[ni]; a[ni]:=z+x; b[ni]:=u+y; a[g]:=z-x; b[g]:=u-y; end; x:=v*ci-w*s; w:=w*ci+v*s; v:=x; end; m:=m shl 1; l:=l shr 1; end; for i:=1 to n1 do begin a[i]:=a[i]*nn; b[i]:=b[i]*nn; MasIn[i-1]:=sqrt(a[i]*a[i]+b[i]*b[i]); end; SetLength(a,0); SetLength(b,0); end;

end.

Numerical recipes in C. Там, вроде и исходник и разжёвано всё. Да и вообще google.

ДАЙТЕ ДЕНЕГ!

PDF даташиты ищутся как application notes. Там тоже разжёвано, с исходниками. У Texas Instruments, например. Да у всех кто что-то с претензией на DSP делает.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required