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

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
                Hi, All!


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

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


                                        Oleg

Re: быстрое преобразование фурье
Hi, Oleg Dozhdev

Quoted text here. Click to load it

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

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.



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

Quoted text here. Click to load it

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

Quoted text here. Click to load it

  ДАЙТЕ ДЕНЕГ!

Quoted text here. Click to load it

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


Site Timeline