分治法:快速傅里叶变换算法

分治法:快速傅里叶变换算法

ID:40499367

大小:277.22 KB

页数:10页

时间:2019-08-03

分治法:快速傅里叶变换算法_第1页
分治法:快速傅里叶变换算法_第2页
分治法:快速傅里叶变换算法_第3页
分治法:快速傅里叶变换算法_第4页
分治法:快速傅里叶变换算法_第5页
资源描述:

《分治法:快速傅里叶变换算法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、分治法:快速傅里叶变换算法学院:网研院姓名:xxx学号:xxx一、分治法原理分治法是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。分治法的精髓:u分--将问题分解为规模更小的子问题;u治--将这些规模更小的子问题逐个击破;u合--将已解决的子问题合并,最终得出“母”问题的解;二、快速傅里叶变换(FFT)简介快速傅里叶变换(FastFourierTransform,FFT),是离散傅里叶变换的快速算法,也可用于计算离散傅里叶变换的逆变换。

2、它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。快速傅里叶变换有广泛的应用,如数字信号处理、计算大整数乘法、求解偏微分方程等等。序列的离散傅里叶变换公式为:令则上式可写为:从算法分析角度:于是:分别考虑对其奇数项和偶数项作傅氏变换:则从而,可以将对N个量的傅氏变换变成为对两个规模更小的序列的变换。这样,将变换的量大大减小。快速傅里叶变换是分治法的一种具体实现。一、快速傅里叶变换算法FFT1.算法l输入采样值;l对采用值进行补0操作,使采样值的个数是2的幂次;l对补0后的序列进行重排,重排的原则是按照

3、序列的下标奇偶性排序,先偶后奇,分成两个子序列,然后对子序列继续重排。如1,2,3,4,5,6,7->1,3,5,7;2,4,6,8->1,5;3,7;2,6;4,8->1,5,3,7,2,6,4,8;l对补0重排后的序列用三层嵌套的循环来完成M=log2N(阶数)次迭代,三层循环的功能是:最里的一层循环完成相同WNP的蝶形运算,中间的一层循环完成因子WNP的变化,而最外的一层循环则是完成M次迭代过程。2.算法复杂度令,则得从而快速傅氏变换的复杂性度为3.可能的改进本次实验使用的是最基本的基2FFT算法,根据维基百科,有如下比较出名的

4、FFT算法,在性能上应该都优于本实现。Cooley-Tukey算法是最常见的FFT算法。这一方法以分治法为策略递归地将长度为的DFT分解为长度为的个较短序列的DFT,以及与个旋转因子的复数乘法。在Cooley-Tukey算法之外还有其他DFT的快速算法。对于长度且与互质的序列,可以采用基于中国剩余定理的互质因子算法将N长序列的DFT分解为两个子序列的DFT。与Cooley-Tukey算法不同的是,互质因子算法不需要旋转因子。Rader-Brenner算法是类似于Cooley-Tukey算法,但是采用的旋转因子都是纯虚数,以增加加法运算

5、和降低了数值稳定性为代价减少了乘法运算。这方法之后被split-radixvariantofCooley-Tukey所取代,与Rader-Brenner算法相比,有一样多的乘法量,却有较少的加法量,且不牺牲数值的准确性。Bruun以及QFT算法是不断的把DFT分成许多较小的DFT运算。(Rader-Brenner以及QFT算法是为了2的指数所设计的算法,但依然可以适用在可分解的整数上。Bruun算法则可以运用在可被分成偶数个运算的数字)。尤其是Bruun算法,把FFT看成是,并把它分解成与的形式。另一个从多项式观点的快速傅立叶变换法是

6、Winograd算法。此算法把分解成cyclotomic多项式,而这些多项式的系数通常为1,0,-1。这样只需要很少的乘法量(如果有需要的话),所以winograd是可以得到最少乘法量的快速傅立叶算法,对于较小的数字,可以找出有效率的算方式。更精确地说,winograd算法让DFT可以用点的DFT来简化,但减少乘法量的同时,也增加了非常多的加法量。Winograd也可以利用剩余值定理来简化DFT。Rader算法提出了利用点数为N(N为质数)的DFT进行长度为N-1的回旋折积来表示原本的DFT,如此就可利用折积用一对基本的FFT来计算D

7、FT。另一个prime-size的FFT算法为chirp-Z算法。此法也是将DFT用折积来表示,此法与Rader算法相比,能运用在更一般的转换上,其转换的基础为Z转换。一、算法实现框架本次实验使用的语言是java,只有一个类FFT.java,类有一个属性xConv用来存储补0和重排后的序列;FFT()构造方法对序列进行补0操作,然后调用i2Sort()方法对补0后序列进行重排,最后调用myFFT()方法进行快速傅里叶变换;i2Sort()法对补0后序列进行重排;myFFT()方法对补0重排后序列进行快速傅里叶变换操作;main()方法

8、是程序的入口,用于输入数据并调用构造方法FFT()。如下图所示。i2Sort()方法对补0后序列进行重排,如1,2,3,4,5,6,7->1,5,3,7,2,6,4,8。myFFT()方法对补0重排后序列进行快速傅里叶变

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。