快速傅氏变换之旅(一) 概念简介 2

原创 2012年03月31日 15:18:36

快速傅里叶变换

定义:离散傅里叶变换的一种快速算法,能克服时间域与频率域之间相互转换的计算障碍,在光谱、大气波谱分析、数字信号处理等方面有广泛应用。

有限长序列可以通过离散傅里叶变换(DFT)将其频域也离散化成有限长序列。但其计算量太大,很难实时地处理问题,因此引出了快速傅里叶变换(FFT). 1965年,Cooley和Tukey提出了计算离散傅里叶变换(DFT)的快速算法,将DFT的运算量减少了几个数量级。从此,对快速傅里叶变换(FFT)算法的研究便不断深入,数字信号处理这门新兴学科也随FFT的出现和发展而迅速发展。根据对序列分解与选取方法的不同而产生了FFT的多种算法,基本算法是基2DIT和基2DIF。FFT在离散傅里叶反变换、线性卷积和线性相关等方面也有重要应用。

快速傅氏变换(FFT),是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。

计算离散傅里叶变换的快速方法,有按时间抽取的FFT算法和按频率抽取的FFT算法。前者是将时域信号序列按偶奇分排,后者是将频域信号序列按偶奇分排。它们都借助于的两个特点:一是的周期性;另一是的对称性,这里符号*代表其共轭。这样,便可以把离散傅里叶变换的计算分成若干步进行,计算效率大为提高。
  时间抽取算法  令信号序列的长度为N=2,其中M是正整数,可以将时域信号序列x(n)分解成两部分,一是偶数部分x(2n),另一是奇数部分x(2n+1),其中。于是信号序列x(n)的离散傅里叶变换可以用两个N/2抽样点的离散傅里叶变换来表示和计算。考虑到和离散傅里叶变换的周期性,式(1)可以写成
  (3)其中(4a)(4b)由此可见,式(4)是两个只含有N/2个点的离散傅里叶变换,G(k)仅包括原信号序列中的偶数点序列,H(k)则仅包括它的奇数点序列。虽然k=0,1,2,…,N-1,但是G(k)和H(k)的周期都是N/2,它们的数值以N/2周期重复。
  因为于是由式(3)和式(4)得到(5a)(5b)
  因此,一个抽样点数为N 的信号序列x(n)的离散傅里叶变换,可以由两个 N/2抽样点序列的离散傅里叶变换求出。依此类推,这种按时间抽取算法是将输入信号序列分成越来越小的子序列进行离散傅里叶变换计算,最后合成为N点的离散傅里叶变换。
  通常用图1中蝶形算法的信号流图来表示式(5)的离散傅里叶变换运算。例如,N=8=2的抽样点的信号序列x(n)的离散傅里叶变换,可用如图2所示的FET算法的信号流图来计算。
  ① N=2点的离散傅里叶变换的计算全由蝶形运算组成,需要M级运算,每级包括N/2个蝶形运算,总共有 个蝶形运算。所以,总的计算量为次复数乘法运算和N log2N次复数加法运算。
  ② FFT算法按级迭代进行,计算公式可以写成
  (6)N抽样点的输入信号具有N个原始数据x0(n),经第一级运算后,得出新的N个数据x1(n),再经过第二级迭代运算,又得到另外N个数据x2(n),依此类推,直至最后的结果x(k)=xM(k)=X(k)在逐级迭代计算中,每个蝶形运算的输出数据存放在原来存贮输入数据的单元中,实行所谓“即位计算”,这样可以节省大量存放中间数据的寄存器。
  ③ 蝶形运算中加权系数随迭代级数成倍增加。由图2可以看出系数的变化规律。对于N=8,M=3情况,需进行三级迭代运算。在第一级迭代中,只用到一种加权系数;蝶形运算的跨度间隔等于1。在第二级迭代中,用到两种加权系数即、;蝶形运算的跨度间隔等于2。在第三级迭代中,用到4种不同的加权系数即、、、;蝶形运算的跨度间隔等于4。可见,每级迭代的不同加权系数的数目比前一级迭代增加一倍;跨度间隔也增大一倍。
  ④ 输入数据序列x(n)需重新排列为x(0)、x(4)、x(2)、x(6)、x(1)、x(5)、x(3)、x(7),这是按照二进制数的码位倒置所得到的反序数,例如N=8中数“1”的二进制数为“001”,将其码位倒转变为“100”,即为十进制数“4”。
  频率抽取算法 按频率抽取的 FFT算法是将频域信号序列X(k)分解为奇偶两部分,但算法仍是由时域信号序列开始逐级运算,同样是把N点分成N/2点计算FFT,可以把直接计算离散傅里叶变换所需的N次乘法缩减到次。
  在N=2的情况下,把N点输入序列x(n)分成前后两半
  (7)
  时间序列x1(nx2(n)的长度为N/2, 于是N点的离散傅里叶变换可以写成
  (8a)
  (8b)
  频率信号序列X(2l)是时间信号序列x1(n)+x2(n)的N/2点离散傅里叶变换,频率信号序列X(2l+1)是时间信号序列【x1(n)-x2(n)】的N/2点离散傅里叶变换,因此,N点离散傅里叶变换的计算,通过两次加(减)法和一次乘法,从原来序列获得两个子序列,所以,频率抽取算法也具有蝶形运算形式。以2为基数的FFT基本蝶形运算公式为
  (9)
  其计算量完全和时间抽取算法一样,即只需次乘法运算和Nlog2N次加(减)法运算。图3 表示N=8=2点的离散傅里叶变换的信号流图。由图可见,它以三级迭代进行即位计算,输入数据是按自然次序存放,使用的系数也是按自然次序,而最后结果则以二进制反序存放。
  实际上,频率抽取算法与时间抽取算法的信号流图之间存在着转置关系,如将流图适当变形,可以得出多种几何形状。
  除了基2的FFT算法之外,还有基4、基8等高基数的FFT算法以及任意数为基数的FFT算法。

傅里叶变换、拉氏变换、z变换的含…

傅里叶变换、拉氏变换、z变换的含义到底是什么?   |字号 订阅 1。关于傅里叶变换变换?(来自百度知道) 答:fourier变换是将连续的时间域信号转变到频率域;它可以说是la...
  • originalsinQ
  • originalsinQ
  • 2014年03月04日 13:51
  • 1861

快速傅立叶变换的意义及应用

为什么要进行傅里叶变换,其物理意义是什么?   傅立叶变换是数字信号处理领域一种很重要的算法。要知道傅立叶变换算法的意义,首先要了解傅立叶原理的意义。傅立叶原理表明:任何连续测量的时序或信...
  • todayq
  • todayq
  • 2014年09月30日 11:30
  • 1877

快速傅里叶变化C++实现

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1...
  • u013472838
  • u013472838
  • 2015年07月15日 17:55
  • 418

一步一步的无障碍理解快速傅立叶变换

fft
  • tt2767
  • tt2767
  • 2015年08月05日 19:04
  • 2470

C和FORTRAN的快速傅里叶/余弦/正弦变换(Fast Fourier/Cosine/Sine Transform)开源库分享

Takuya Ooura: General Purpose FFT Package, http://www.kurims.kyoto-u.ac.jp/~ooura/fft.html. Free C &...
  • pplxlee
  • pplxlee
  • 2016年09月30日 19:22
  • 697

快速傅里叶变换使用方法

1. 采样频率决定-频谱图最大频率值 2. 采样点数决定-频谱图最小细分频率间隔大小,即频率分辨率 3. 函数FFT返回值的数据结构具有对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果 ...
  • zyboy2000
  • zyboy2000
  • 2013年01月06日 21:52
  • 5594

opencv之离散傅里叶变换

函数解读: C++: intgetOptimalDFTSize(int vecsize) 源码解读; int cv::getOptimalDFTSize( int size0 ) {    ...
  • ubunfans
  • ubunfans
  • 2014年04月30日 14:10
  • 14137

快速傅里叶变换和逆变换的C++实现

近来做一个大整数乘法的ACM题目时候一直被运行超时所困扰,上网搜索下后发现需要用到快速傅里叶变换和逆变换的算法来实现大整数乘法,才能把复杂度降到LogN * N. 看了一个星期的资料, 吃透了算法才把...
  • yyr2008
  • yyr2008
  • 2016年01月06日 18:33
  • 1517

卷积与傅里叶变换

很多朋友和我一样,工科电子类专业,学了一大堆信号方面的课,什么都没学懂,背了公式考了试,然后毕业了。   先说"卷积有什么用"这个问题。(有人抢答,"卷积"是为了学习"信号与系统"这门课的后续章节而存...
  • Augusdi
  • Augusdi
  • 2013年10月08日 16:02
  • 12828

拉氏变换 & 传递函数

拉氏变换 和 传递函数
  • Dennis_BIRL
  • Dennis_BIRL
  • 2016年11月18日 13:40
  • 1126
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速傅氏变换之旅(一) 概念简介 2
举报原因:
原因补充:

(最多只允许输入30个字)