Text1.txt
上传用户:alisonmail
上传日期:2013-02-28
资源大小:500k
文件大小:2k
源码类别:

图片显示

开发平台:

Visual C++

  1. void fft(float * pr,float * pi,int n,int k,
  2.         float * fr,float * fi,int l,int il)
  3. {
  4. int it,m,is,i,j,nv,l0;
  5.     float p,q,s,vr,vi,poddr,poddi;//
  6.     for (it=0; it<=n-1; it++)
  7.     {
  8. m=it; is=0;
  9.         for (i=0; i<=k-1; i++)
  10.         { 
  11. j=m/2; is=2*is+(m-2*j); m=j;
  12. }
  13.         fr[it]=pr[is]; fi[it]=pi[is];
  14.     }
  15.     pr[0]=1.0; pi[0]=0.0;
  16.     p=6.283185306/(1.0*n);
  17.     pr[1]=cos(p); pi[1]=-sin(p);
  18.     if (l!=0)
  19. {
  20. pi[1]=-pi[1];
  21. }
  22.     for (i=2; i<=n-1; i++)
  23.     { 
  24. p=pr[i-1]*pr[1]; q=pi[i-1]*pi[1];
  25.         s=(pr[i-1]+pi[i-1])*(pr[1]+pi[1]);
  26.         pr[i]=p-q; pi[i]=s-p-q;
  27.     }
  28.     for (it=0; it<=n-2; it=it+2)
  29.     { 
  30. vr=fr[it]; vi=fi[it];
  31.         fr[it]=vr+fr[it+1]; fi[it]=vi+fi[it+1];
  32.         fr[it+1]=vr-fr[it+1]; fi[it+1]=vi-fi[it+1];
  33.     }
  34.     m=n/2; nv=2;
  35.     for (l0=k-2; l0>=0; l0--)
  36.     { 
  37. m=m/2; nv=2*nv;
  38.         for (it=0; it<=(m-1)*nv; it=it+nv)
  39. {
  40. for (j=0; j<=(nv/2)-1; j++)
  41.             { p=pr[m*j]*fr[it+j+nv/2];
  42.               q=pi[m*j]*fi[it+j+nv/2];
  43.               s=pr[m*j]+pi[m*j];
  44.               s=s*(fr[it+j+nv/2]+fi[it+j+nv/2]);
  45.               poddr=p-q; poddi=s-p-q;
  46.               fr[it+j+nv/2]=fr[it+j]-poddr;
  47.               fi[it+j+nv/2]=fi[it+j]-poddi;
  48.               fr[it+j]=fr[it+j]+poddr;
  49.               fi[it+j]=fi[it+j]+poddi;
  50.             }
  51. }
  52.      }
  53.     if (l!=0)
  54.     {  for (i=0; i<=n-1; i++)
  55.         { fr[i]=fr[i]/(1.0*n);
  56.           fi[i]=fi[i]/(1.0*n);
  57.         }
  58. }
  59.     if (il!=0)
  60. {
  61. for (i=0; i<=n-1; i++)
  62.         { pr[i]=sqrt(fr[i]*fr[i]+fi[i]*fi[i]);
  63.           if (fabs(fr[i])<0.000001*fabs(fi[i]))
  64.           { 
  65.   if ((fi[i]*fr[i])>0) 
  66.   pi[i]=90.0;
  67.               else
  68.   pi[i]=-90.0;
  69.           }
  70.           else
  71.             pi[i]=atan(fi[i]/fr[i])*360.0/6.283185306;
  72.         }
  73. }
  74. }