正文

FFT4 C程序2007-05-15 11:44:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/vfdff/25910.html

分享到:

/* VC 下运行通过 2007。4。26 把radix4中某些层for->while等效 14:51*//*****************fft programe*********************/void rad4(double x[],double y[],double TAB[],int i,int n2,int adr1,int adr2,int adr3){ int i1,i2,i3; double co1,co2,co3,si1,si2,si3; double r1,r2,r3,r4,s1,s2,s3,s4;     i1=i+n2;i2=i1+n2;i3=i2+n2;                       /* 数据位置 */  co1=TAB[2*adr1];co2=TAB[2*adr2];co3=TAB[2*adr3]; /* 旋转因子 */ si1=TAB[2*adr1+1];si2=TAB[2*adr2+1];si3=TAB[2*adr3+1];  r1=x[i]+x[i2];r3=x[i]-x[i2]; s1=y[i]+y[i2];s3=y[i]-y[i2]; r2=x[i1]+x[i3];r4=x[i1]-x[i3]; s2=y[i1]+y[i3];s4=y[i1]-y[i3];  x[i]=r1+r2; y[i]=s1+s2;   r2=r1-r2; r1=r3-s4;r3=r3+s4; s2=s1-s2; s1=s3+r4;s3=s3-r4; x[i1]=co1*r3+si1*s3;y[i1]=co1*s3-si1*r3; x[i2]=co2*r2+si2*s2;y[i2]=co2*s2-si2*r2; x[i3]=co3*r1+si3*s1;y[i3]=co3*s1-si3*r1;} void switchadr(double x[],double y[],int n) // 变换后,如果想顺序输出就调用这个{ double tempx,tempy; int i,j,k; for(i=0,j=0;i<=n-1;i++) {  if(i<j)  {   tempx=x[j];  tempy=y[j]; x[j]=x[i];y[j]=y[i]; x[i]=tempx;  y[i]=tempy;  }  k=n/4;     while(3*k<(j+1)&&(j>0) )  {   j=j-3*k; k=k/4;  }  j=j+k; }} void radix4(double x[],double y[],double TAB[],int n) // 核心变换代码{ int k,e,n1,n2; int a,b,c;    n2=n; e=1;    /* 1 -- n 有效 */ k=n; while(k>1) /*内部循环没有使用K值,只是用来控制循环次数而已,log4\n次*/  {  int j;  n1=n2; n2=n2/4;   for(j=1;j<=n2;j++)  {   int i;   a=(j-1)*e;b=a+a; c=a+b;   a &= (n-1);  b &= (n-1); c &= (n-1); /* 旋转因子周期 N */             i = (j-1);    do {    rad4(x,y,TAB,i,n2,a,b,c);    i+=n1;   }while(i<n);  }  e <<= 2; k >>= 2; }}

阅读(10403) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册