fft程序(c語言)

void fftt(struct COMPLEX *a,int l)
{
  const double pai=3.141592653589793;
  struct COMPLEX u,w,t,tmp1;
  unsigned n=1,nv2,nm1,k,le,lei,ip;
  unsigned i,j,m;
  double tmp;
  n<<=l;
  nv2=n>>1;
  nm1=n-1;
  j=0;
  for(i=0;i<nm1;i++)
  {
    if(i<j)
    {
      t.re=a[j].re;
      t.im=a[j].im;
      a[j].re=a[i].re;
      a[j].im=a[i].im;
      a[i].re=t.re;
      a[i].im=t.im;
     }
      k=nv2;
      while(k<=j)
      {
        j-=k;
        k>>=1;
      }
      j+=k;
    }
    le=1;
    for(m=1;m<=l;m++)
    {
      lei=le;
      le<<=1;
      u.re=1.0;
      u.im=0.0;
      tmp=pai/lei;
      w.re=cos(tmp);
      w.im=-sin(tmp);
      for(j=0;j<lei;j++)
      {
        for(i=j;i<n;i+=le)
        {
          ip=i+lei;
          mul(a[ip],u,&tmp1);
          t.re=tmp1.re;
          t.im=tmp1.im;
          sub(a[i],t,&tmp1);
          a[ip].re=tmp1.re;
          a[ip].im=tmp1.im;
          add(a[i],t,&tmp1);
          a[i].re=tmp1.re;
          a[i].im=tmp1.im;
        }
        mul(u,w,&tmp1);
        u.re=tmp1.re;
        u.im=tmp1.im;
      }
     }
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章