用matlab实现DFT-FFT完整版.doc

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

PAGE26

用matlab实现DFTFFT

目录

TOC\o1-3\h\z\u实验目的 2

实验内容 2

1.用MATLAB实现DFT 2

2.用MATLAB实现FFT,分析有限离散序列的FFT 3

3.通过分别计算时间,得出DFT与FFT的算法差异 7

实验原理 7

1.离散傅里叶变换的快速算法FFT 7

2.FFT提高运算速度的原理 8

3.理论分析DFT与FFT算法差异 10

实验步骤 11

实验结果 11

实验分析 19

实验结论 24

实验体会 24

实验目的

通过研究DFT,FFT性质,用语言实现DFT,FFT。不使用MATLAB现有的FFT函数,自己编写具体算法。

掌握FFT基2时间抽选法,理解其提高减少乘法运算次数提高运算速度的原理。

设计实验,得出DFT和FFT算法差异的证明,如复杂度等(精度、不同长度的序列等)。

实验内容

1.用MATLAB实现DFT

N点序列x(n)的DFT为:

X

DFT的矩阵为:

根据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=1,S=N/2,R=0,K=1:N/2则有P=(K-1)*1,所以

WNP=WNJ

L=2时,B=2,S=N/4,R=0:N/2:N-1,K=1:N/4则有P=(K-1)*2,所以

WNP=WN/2J

L=3时,B=4,S=N/8,R=0:N/4:N-1,K=1:N/8则有P=(K-1)*4,所以

WNP=WN/4J

所以对于一般情况N=2M,第L级的旋转因子为P=(K-1)*B。

从而得到DIT-FFT的Matlab流程图:

DIT-FFT的MATLAB实现为(以对x(n)=cos(nπ

3.通过分别计算时间,得出DFT与FFT的算法差异:

法一:

对N=512,1024,2048和4096点的离散时间信号x(n),用Matlab语言编程分别以DFT和FFT计算N个频率样值X(k),比较两者所用时间的大小。设x(n)=cos(

利用TIC,TOC函数,分别跟踪变换时间。

法二:

利用clock返回当前日期向量的时间,通过etime()函数返回走过的日期向量的时间。

用MATLAB实现如下:

实验原理

1.离散傅里叶变换的快速算法FFT

N点序列x(n)的DFT为:

Xk

由于系数WNnk

WN

且是对称的:

WN

快速傅里叶变换算法正是基于这样的基本思想而发展起来的,它的算法基本可以分称两大类:时间抽取法(DIT-FFT)和频率抽取(DIF-FFT)。由于DIF-FFT算法思想基本一致,只是划分方式略有差异,所以这里以DIT-FFT算法为例进行说明。

当N是2的整数次方时,称为基2的FFT算法。

首先将序列x(n)分解为两组,偶数项为一组,奇数项为一组:

x2r=

将x1(r)和x2(r)分别进行N/2点的DFT得

Xk=

重复这一过程,可得到x(n)的FFT。

2.FFT提高运算速度的原理

FFT算法将长序列的DFT分解为短序列的DFT。N点的DFT

文档评论(0)

浅唱愁淡 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档