matlab fft实现dft,用matlab实现DFT FFT.doc

PAGE \* MERGEFORMAT 26

用matlab实现DFT FFT

目录

TOC \o "1-3" \h \z \u HYPERLINK \l "_Toc294282722" 实验目的 PAGEREF _Toc294282722 \h 2 HYPERLINK \l "_Toc294282723" 实验内容 PAGEREF _Toc294282723 \h 2 HYPERLINK \l "_Toc294282724" 1.用MATLAB实现DFT PAGEREF _Toc294282724 \h 2 HYPERLINK \l "_Toc294282725" 2.用MATLAB实现FFT,分析有限离散序列的FFT PAGEREF _Toc294282725 \h 3 HYPERLINK \l "_Toc294282726" 3.通过分别计算时间,得出DFT与FFT的算法差异 PAGEREF _Toc294282726 \h 7 HYPERLINK \l "_Toc294282727" 实验原理 PAGEREF _Toc294282727 \h 7 HYPERLINK \l "_Toc294282728" 1. 离散傅里叶变换的快速算法FFT PAGEREF _Toc294282728 \h 7 HYPERLINK \l "_Toc294282729" 2. FFT提高运算速度的原理 PAGEREF _Toc294282729 \h 8 HYPERLINK \l "_Toc294282730" 3. 理论分析DFT与FFT算法差异 PAGEREF _Toc294282730 \h 10 HYPERLINK \l "_Toc294282731" 实验步骤 PAGEREF _Toc294282731 \h 11 HYPERLINK \l "_Toc294282732" 实验结果 PAGEREF _Toc294282732 \h 11 HYPERLINK \l "_Toc294282733" 实验分析 PAGEREF _Toc294282733 \h 19 HYPERLINK \l "_Toc294282734" 实验结论 PAGEREF _Toc294282734 \h 24 HYPERLINK \l "_Toc294282735" 实验体会 PAGEREF _Toc294282735 \h 24

实验目的通过研究DFT,FFT性质,用语言实现DFT, FFT。不使用MATLAB现有的FFT函数,自己编写具体算法。掌握FFT基2时间抽选法,理解其提高减少乘法运算次数提高运算速度的原理。设计实验,得出DFT和FFT算法差异的证明,如复杂度等(精度、不同长度的序列等)。实验内容1. 用MATLAB实现DFTN点序列x(n) 的DFT为:Xk=n=0N-1xnWNnk 0≤k≤N-1DFT的矩阵为:

根据DFT公式与矩阵展开,通过MATLAB实现DFT:

2.用Matlab实现FFT编程思想及程序??图:原位计算因为DIT-FFT与DIF-FFT的算法类似,这里我们以DIT-FFT为例。N=2M点的FFT共进行M级运算,且每一级都由N/2个蝶形运算组成,后一级的节点数据由前一级同处一条水平线位置的节点数据产生,所以我们同样可以将后一级的节点数据储存到前一级的节点中,这样的方法叫做原位计算,它大大节省了内存资源,降低了成本,简化了运算。序列的倒序无论是进行DIT-FFT还是DIF-FFT都需要进行倒序,包括输入倒序与输出倒序,以一定的方式将数组进行重新排列。倒序的方法: 首先由于N=2M,我们就可以用M位二进制数来表示节点的顺序,并且按照奇偶时域抽取。然后,如图1所示,第一次按最低位n0的0、1值分解为奇偶组,第二次按次低位n1的0、1值分解为奇偶组,以此类推。最后,所得二进制数所对应的十进制数即为序列倒序后产生的序列。

图1 序列倒序过程倒序的MATLAB方法:用雷德算法可以对输入信号序列进行倒序重排,流程图如下所示:

蝴蝶因子的变化规律在DIT-FFT中,每一级都由N/2个蝶形运算构成,每个蝶形运算包含一个蝴蝶因子,每一级的蝶形因子又有一定的变化规律:设L表示自左而右的运算级次(L=1,2,3,…,M),序数R,次数K。每个蝶形运算的两个输入量相距B=2^(L-1)个点。假设N=8, 则M=3,这时有:L=1 时, B=

你可能感兴趣的:(matlab,fft实现dft)