按时间抽取的基2FFT算法分析及MATLAB实现.docVIP

按时间抽取的基2FFT算法分析及MATLAB实现.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
按时间抽取的基2FFT算法分析及MATLAB实现

按时间抽取的基2FFT算法分析及MATLAB实现 1DIT-FFT算法的基本原理 有限长序列x(n)的N点DFTk n定义为:X(k)??x(n)WN,式中WN?en?0N?1?j2?,其整数次幂简称为旋转因子。 直接进行DFT运算大约需要2N2次三角函数计算、4N2次实数乘法计算和2N(2N?1)次实数加法计算,且需许多索引和寻址操作[2]。文[3]列出了直接DFT的MATLAB程序,这种直接DFT运算概念清楚、编程简单,但占用内存大、运算速度低,在实际工作中并不实用。基2FFT算法的基本思想是把原始的N点序列依次分解成一系列短序列,充分利用旋转因子的周期性和对称性,分别求出这些短序列对应的DFT,再进行适当的组合,得到原N点序列的DFT,最终达到减少运算次数,提高运算速度的目的。按时间抽取的基2FFT算法,先是将N点输入序列x(n)在时域按奇偶次序分解成2个N/2点序列x1(n)和x2(n),再分别进行DFT运算,求出与之对应的X1(k)和X2(k),然后利用图1所示的运算流程进行蝶形运算,得到原N点序列的DFT。只要N是2的整数次幂,这种分解就可一直进行下去,直到其DFT就是本身的1点时域序列。一个完整的8点DIT-FFT运算流程如图2所示[4]。图中的输入序列不再是顺序排列但有规律可循,数组A(存储地址)用于存放输入数据和每级运算的结果。 2DIT-FFT算法的运算规律及编程思想 为了编写DIT-FFT算法的运算程序,首先要分析其运 算规律,总结编程思想并绘出程序框图。由图2可知, DIT-FFT算法的运算过程很有规律。 2.1原位计算 对N?2M点的FFT共进行M级运算,每级由N/2个 蝶形运算组成。在同一级中,每个蝶的输入数据只对本蝶 有用,且输出节点与输入节点在同一水平线上,这就意味 着每算完一个蝶后,所得数据可立即存入原输入数据所占 用的数组元素(存储单元),这种原位(址)计算的方法可节 省大量内存。 2.2蝶形运算图1DIT 蝶形运算流图符号图28点DIT-FFT运算流程 实现FFT运算的核心是蝶形运算,找出蝶形运算的规律是编程的基础。蝶形运算是分级进行的;每级的蝶形运算可以按旋转因子的指数大小排序进行;如果指数大小一样则可从上往下依次蝶算。对N?2M点的FFT共有M级运算,用L表示从左到右的运算级数(L=1,2,…,M)。第L级共有B?2L?1个不同指数的旋转因子,用R表示这些不同指数旋转因子从上到下的顺序(R=0,1,…,B-1)。第R个旋转因子的指数P?2M?LR,旋转因子指数为P的第一个蝶的第一节点标号k从R 开始,由于本级中旋转因子指数相 1 同的蝶共有2M?L个,且这些蝶的相邻间距为2L,故旋转因子指数为P 的最后一个蝶的第一节点标号k为:(2M?L?1)?2L?R?N?2L?R,本级 中各蝶的第二个节点与第一个节点都相距B点。应用原位计算,蝶形运 算可表示成如下形式: AL(k)?AL?1(k)?WNPAL?1(k?B) AL(k?B)?AL?1(k)?WNPAL?1(k?B) 总结上述运算规律,可采用如下运算方法进行DIT-FFT运算。首先 读入数据,根据数据长度确定运算级数M,运算总点数N?2M,不足 补0处理。然后对读入数据进行数据倒序操作。数据倒序后从第1级开 始逐级进行,共进行M级运算。在进行第L级运算时,先算出该级不 同旋转因子的个数B?2L?1(也是该级中各个蝶形运算两输入数据的间 距),再从R=0开始按序计算,直到R=B-1结束。每个R对应的旋转因 子指数P?2M?LR,旋转因子指数相同的蝶从上往下依次逐个运算,各 个蝶的第一节点标号k都是从R开始,以2L为步长,到N?2L?R(可简 取极值N-2)结束。考虑到蝶形运算有两个输出,且都要用到本级的两个 输入数据,故第一个输出计算完毕后,输出数据不能立即存入输入地址, 要等到第二个输出计算调用输入数据完毕后才能覆盖。这样数据倒序后 的运算可用三重循环程序实现。整个运算流程如图3所示。 2.3序列倒序 为了保证运算输出的X(k)按顺序排列,要求序列x(n)倒序输入,即在运算前要先对输入的序列进行位序颠倒。如果总点数为N?2M的x(n)的顺序数是用M位二进制数表示,则倒序数只需将顺序数的二进制位倒置即可[5]图3DIT-FFT运算程序框图,按照这一规律用硬件电路和汇编语言很容易产生倒序数。但用MATLAB等高级语言实现倒序时,直接

您可能关注的文档

文档评论(0)

sheppha + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:5134022301000003

1亿VIP精品文档

相关文档