实验报告
专业班级: 姓名 学号 指导教师:
完成时间:
一、实验题目
1. 用语言编程实现DFT和FFT
二、实验目的
1.不使用MATLAB现有的FFT函数,自己编写所有具体算法
2.给出流程图和理论计算结果。
3.设计实验,给出DFT和FFT算法差异的证明,如复杂度等。(精度、不同长度的序列等)
4.分析数据,得出结论。
三、实验内容
1.不使用MATLAB现有的FFT函数,自己编写所有具体算法
2.给出流程图和理论计算结果。
3.设计实验,给出DFT和FFT算法差异的证明,如复杂度等。(精度、不同长度的序列等)
4.分析数据,得出结论。
四、实验步骤
(一)文件与文件夹管理
1.自行编写8点FFT流程算法
下图为8点FFT的蝶形运算图,我们采用基2蝶形运算单元来实现8点FFT的变换。
图1 8点FFT蝶形运算图
2.给出流程图和理论计算结果
图2 基2蝶形运算单元
图3 8点FFT架构模型
利用Matlab 对已知输入数据进行 DFT运算,得出其理论值
假设输入数据为:
实现DFT算法:
得出其理论值
3.设计实验,给出DFT和FFT算法差异的证明,如复杂度等。(精度、不同长度的序列等)
通过在matlab中对DFT 和FFT的建模,计算相同点数的变换所需要的加法次数和乘法次数。以此来比较两种不同算法的差异性。
首先DFT 算法中,由于一次循环 需要一次复数乘法和一次复数加法(第一次循环不需要加法,所以需要加法次数为计算结果减1)
同理在FFT的蝶形运算中,每一次蝶形运算所消耗的复数乘法和复数加法都可以通过参数来计算出来。
每次运行基2蝶形模块一次,都需要消耗两次复数加法,一次复数乘法。
4.分析数据,得出结论
通过运行matlab 程序我们可以得出其中的运算复杂度的数值
可以看出一个8点的DFT运算需要 次复数乘法,63次复数加法,符合理论值。而一个8点FFT运算则只需要12次复数乘法和24次复数加法,而且其中12次复数乘法中还包含旋转因子为1的乘法运算,所以综上所述,我们可以看出FFT的实现复杂度相对于DFT大大降低。
5.实验心得
通过这次matlab上级实验,我不仅对matlab这个强大的工具有了更加深入的了解,而且对DFT和FFT也有了更深的了解。通过自己的亲自动手操作,将课本上学习的FFT理论知识转化为实际的数学模型,通过matlab语言进行描写,并进行了辛苦的调试工作,最后成功地完成了基于2点蝶形运算的FFT模型。通过对比DFT和FFT算法中实际运行所消耗的复数加法次数和乘法次数,让我更加清楚的了解到FFT的优势所在。