logo资料库

FFT 基二的C语言和MATLAB实现 运行成功.doc

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
电信 0702 3070503041 李春阳 #include #include /*此代码来源《数字信号处理 C 语言程序集》殷福亮、宋爱军,沈阳:辽宁科学技术出版社, 1997.7*/ /*数组 x 存储时域序列的实部,数组 y 存储时域序列的虚部*/ /*n 代表 N 点 FFT,sign=1 为 FFT,sign=-1 为 IFFT*/ void FFT(double x[],double y[],int n,int sign) { int i,j,k,l,m,n1,n2; double c,c1,e,s,s1,t,tr,ti; /*Calculate i = log2N*/ for(j = 1,i = 1; i<16; i++) { m = i; j = 2*j; if(j == n) break; } /*计算蝶形图的输入下标(码位倒读),在这里可以看成是交换次序,如 N=8,x(1) 与 x(4)交换,x(3)与 x(6)交换*/ n1 = n - 1; for(j=0,i=0; i
/*计算每一级的输出,l 为某一级,i 为同一级的不同群,使用同一内存(即位运算),将 FFT 流图作出来将看的很清晰。*/ n1 = 1; for(l=1; l<=m; l++) { e = 3.1415926/n2; c = 1.0; s = 0.0; n2 = n1/2; n1 = 2*n1; c1 = cos(e); s1 = -sign*sin(e); for(j=0; j
for(i=0; i<8; i++) printf("%d %f %f\n",i,x[i],y[i]); FFT(x,y,8,-1); for(i=0; i<8; i++) printf("%d %f %f\n",i,x[i],y[i]); return 1; }
分享到:
收藏