




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
FFT算法研究报告 1、 程序设计背景(FFT算法理解)FFT(fast fourier transformation),快速傅里叶变换。是对DFT算法的改进,其利用了WNnk的周期性、共轭对称性和可约性,使得DFT中有些项可以合并,大大减小了计算量。按输入序列在时间上的次序是属于偶数还是奇数来分解称为“按时间抽取法”(DIT)。另一种是把输出序列X(k)按顺序的奇偶分解为越来越短的序列,称为按频率抽样的FFT算法(DIF)。DIT算法是先作复乘后作加减,而DIF的复乘只出现在减法之后。本次程序采用DIT算法实现FFT。用c语言实现FFT的难点在于数据倒位序的处理,以及各级蝶形运算的实现。倒位序的实现可以使用“反向进位加法”,即倒位序二进制数的下面一个数是上面一个数在最高位加一并由高位向低位进位而得到的。对于点数为N = 2L的FFT运算,可以分解为L阶蝶形图级联,第M阶蝶形图内又分为2(L-M)个蝶形组,每个蝶形组内包含2(M-1)个蝶形。而且旋转因子与蝶形阶数和蝶形分组内的蝶形个数存在关联。因此我们就可以构造循环来实现蝶形运算。2、 FFT算法流程图输入数组指针a,长度n倒位序流程图:n=0? Yi=0Nin?N i%2=0?Y NTempi=ai/2temp(n+i)/2=ai Yi=i+1a=tempn=n/2结束Y3、 FFT程序代码#include #include #include #include #define PI 3.141592653 #define SIZE 16#define MAX 10 /定义复数结构体 typedef struct Complex double real; double imag; comp; /定义复数乘法,加法,减法 void Add_(comp * a1,comp *a2,comp *b) b-imag=a1-imag+a2-imag; b-real=a1-real+a2-real; void Sub_(comp * a1,comp *a2,comp *b) b-imag=a1-imag-a2-imag; b-real=a1-real-a2-real; void Mul_(comp * a1,comp *a2,comp *b) double r1=0.0,r2=0.0; double i1=0.0,i2=0.0; r1=a1-real; r2=a2-real; i1=a1-imag; i2=a2-imag; b-imag=r1*i2+r2*i1; b-real=r1*r2-i1*i2; /利用srand()、rand()随机生成一个输入并显示数据 void Input(double *data,int n) printf(输入信号为:n); srand(int)time(0); for(int i=0;iimag=-sin(x); b-real=cos(x); /处理FFT的数据位置,输入倒位序,输出自然顺序(正序),用递归结构实现 int reverse(double * a,int n) if(n=1) return 0; double * temp=(double *)malloc(sizeof(double)*n); for(int i=0;in;i+) if(i%2=0) tempi/2=ai; else temp(n+i)/2=ai; for(int i=0;in;i+) ai=tempi; free(temp); reverse(a, n/2); reverse(a+n/2, n/2); return 1; /定义FFT函数 void FFT(double * a,comp * b,int n) reverse(a, n); /对输入信号进行倒位序处理 int k=n; int m=0; while (k/=2) /记录需要蝶形运算的级数 m+; k=m; comp * a_comp=(comp*)malloc(sizeof(comp)*n); for(int i=0;in;i+) a_compi.real=ai; a_compi.imag=0; /将输入数据赋值给 a_comp for(int i=0;ik;i+) /依次计算各级蝶形运算 z=0; for(int j=0;jn;j+) if(j/(2(i-1)%2=1) comp wn; WN(z, n, &wn); Mul_(&a_compj, &wn,&a_compj); z+=2(k-i-2); comp temp; int company=j-(2(i-1); temp.real=a_compcompany.real; temp.imag=a_compcompany.imag; Add_(&temp, &a_compj, &a_compcompany ); Sub_(&temp, &a_compj, &a_compj); else m=0; printf(nnFFT处理结果:n); for(int i=0;i=0.0) printf(%lf+%lfjn,a_compi.real,a_compi.imag); else printf(%lf%lfjn,a_compi.real,a_compi.imag); for(int i=0;in;i+) bi.imag=a_compi.imag; bi.real=a_compi.real; int main() double arraySIZE; comp bSIZE; Input(array,SIZE); /随机生成16个输入数据 FFT(array, b, SIZE); 4、 与MATLAB自带FFT函数运行结果的比较自编FFT结果:将输入信号在matlab中进行FFT运算,结果如下:由以上截图可知,函数成功地完成了对于序列xn的FFT计算,但是可以看出matlab的准确度更高,应该是matlab计算使用的pi值更为精确。为比较二者的时间,将数据长度重新定义为215Matlab FFT程序: 自编FFT程序: 由于计算matlab用时使用的数据与自编FFT程序所用数据不同,可能会有不可预料的误差存在,但通过多次重复看出matlab的FFT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度财务人员工作试用期工作总结汇编15篇
- 电视新闻基础知识培训课件
- 电脑配件装机知识培训课件
- 电脑设备基础知识培训课件
- 高考文言文句式课件
- 配网基建工作前期补偿协议
- sas考试题目及答案
- plm系统考试及答案
- 电线电缆课件
- 福建省龙岩市长汀县2022-2023学年九年级上学期期中化学试题(含答案)
- 学校食堂从业人员食品安全知识培训考试试题(含答案)
- 2025年教科版新教材科学三年级上册全册教案设计(含教学计划)
- 从+“心”+出发遇见更好的自己-开学第一课暨心理健康教育主题班会-2025-2026学年高中主题班会
- GB 46031-2025可燃粉尘工艺系统防爆技术规范
- 初中历史教师培训讲座
- 2025年苏教版新教材数学二年级上册教学计划(含进度表)
- T/CCS 075-2023煤矿柔性薄喷材料喷涂施工技术要求
- 近十年中职试卷及答案
- 2022年会计师事务所预算管理制度
- 林地恢复施工组织设计方案
- 贯彻落实2022年新修订的《地理》科目《义务教育地理课程标准(2022年版)》新课标PPT课件
评论
0/150
提交评论