FFT 算法详解
FFT快速傅里叶变换(蝶形算法)详解概要

5.4 按频率抽取的基2-FFT算法
算法原理
先把输入按n的顺序分成前后两半 再把输出X(k)按k的奇偶分组 设序列长度为N=2L,L为整数 前半子序列x(n) 后半子序列 x(n
nk x ( n ) W N
N 1
rk k rk x1 (r )W N WN x ( r ) W 2 N 2 2
k X 1 (k ) WN X 2 (k )
式中,X1(k)和X2(k)分别是x1(n)和x2(n)的N/2的DFT。
另外,式中k的取值范围是:0,1, …,N/2-1 。
N 2M , 第L级:
r WN W2jL , j 0,1,2,,2 L1 1
2 L 2 M 2 LM N 2 LM
W W
r N j N 2 L M
e
j
2 N 2 L M
j
e
j
2 j 2 M L N
W
j 2 M L N
r WN
的确定
25
序列的逆序排列
序列的逆序排列
由于 x(n) 被反复地按奇、偶分组,所以流图输入端的 排列不再是顺序的,但仍有规律可循: 因为 N=2M , 对于任意 n(0≤n ≤N-1),可以用M个 二进制码表示为:
n( DEC) (nM 1nM 2 n2 n1n0 ) ( BIN )
(2)周期性 (3)可约性 另外,
( n N ) k n( k N ) nk WN WN WN
mnk nk WmN WN
nk nk / m WN WN /m
( k N / 2) k WN WN
N /2 WN 1
8
FFT算法详解

FFT算法详解FFT (Fast Fourier Transform) 是一种高效的离散傅里叶变换算法,用于将时域信号转换为频域信号。
它在信号处理、图像处理、通信领域等具有广泛的应用。
本文将详细介绍FFT算法的原理和实现。
一、傅里叶变换的基本原理傅里叶变换是一种将信号从时域转换到频域的方法。
它将时域信号分解成多个不同频率的正弦和余弦函数的叠加。
傅里叶变换的基本公式为:F(k) = Σ_{n=0}^{N-1} f(n)e^{-2πikn/N}其中,F(k)是频域信号的复数表示,f(n)是时域信号的复数表示,N是信号长度,k是频率。
二、傅里叶变换的问题传统的傅里叶变换算法的时间复杂度为O(N^2),计算量较大,不适用于实时处理大型信号。
FFT算法通过分治的思想,将DFT(Digital Fourier Transform)问题转化为多个子问题,从而降低了计算复杂度。
三、蝶形运算蝶形运算的公式为:y_0=x_0+W_N^k*x_1y_1=x_0-W_N^k*x_1其中,x_0、x_1是输入,y_0、y_1是输出,W_N^k是旋转因子,N是信号长度,k是频率。
四、FFT算法的步骤1.将输入信号分成偶数下标和奇数下标的两个子序列。
2.对两个子序列分别进行FFT变换,得到两个子序列的频域表示。
3.将两个子序列的频域表示合并成完整的频域信号。
4.重复上述步骤,直到得到最终的频域信号。
五、FFT算法的实现1.初始化输入信号和旋转因子。
2.将输入信号按照偶数下标和奇数下标分成两个子序列。
3.对两个子序列分别进行FFT变换,递归调用FFT函数。
4.将两个子序列的频域表示合并成完整的频域信号。
5.返回最终的频域信号。
总结:FFT算法是一种高效的离散傅里叶变换算法,通过分治的思想将DFT问题分解为多个子问题,从而降低了计算复杂度。
它在信号处理、图像处理、通信领域等有着广泛的应用。
掌握FFT算法的原理和实现对于理解信号处理技术和提高算法效率具有重要意义。
现代通信中的FFT算法

现代通信中的FFT算法现代通信技术的发展离不开算法的支持,其中FFT算法是通信领域中最重要的数学算法之一。
在通信领域,FFT算法通过将连续时间函数转化为离散时间函数,大大地提高了通信的速度和效率。
本文将介绍FFT算法的基本原理、应用场景以及优化对策。
一、FFT算法基本原理FFT算法是快速傅立叶变换(Fast Fourier Transform)的缩写,是一种高效的信号处理算法,在信号压缩、遥感等领域有着广泛的应用。
FFT算法的基本原理是把连续的信号在一定的时间间隔内取样,然后用傅里叶变换公式将其转化为频域上的信息,再通过逆傅里叶变换将其转换回时域信号。
在通信领域,我们通常使用的是离散傅立叶变换(DFT),即将连续信号按照时间间隔取样,然后再进行傅立叶变换。
然而,直接通过DFT计算机算量巨大,效率低下。
FFT算法通过巧妙地将DFT分解为多个小的子问题,从而减少计算量,提高了算法的效率。
二、FFT算法的应用场景FFT算法广泛应用于数字信号处理、信道估计、多载波调制等领域。
以OFDM(Orthogonal Frequency-Division Multiplexing)技术为例,OFDM技术中的多载波信号可以通过FFT算法实现快速的频域处理,从而实现多载波信号的调制和解调。
此外,FFT算法还广泛应用于卫星遥感、医学影像处理等领域。
三、FFT算法的优化对策虽然FFT算法在通信领域中十分重要,但是其高算法复杂度限制了其在实际中的应用。
为了提高FFT算法的效率和性能,研究人员提出了许多优化对策。
以下是一些优化对策的介绍。
1.快速傅立叶变换算法:FFT算法的核心是快速傅立叶变换算法,其中最知名的是Cooley-Tukey算法。
该算法通过将DFT分解为多个小的子问题,在一定的时间复杂度内实现快速傅立叶变换。
2.算法并行化:随着计算机硬件性能的提高,通过并行化算法可以充分利用计算机多核CPU或GPU的并行计算能力,从而提高FFT算法的运算速度。
fft的计算原理

fft的计算原理FFT(Fast Fourier Transform)是一种高效地计算离散傅里叶变换(Discrete Fourier Transform, DFT)的算法。
FFT能够将一个时域上的离散信号转换到频域上,并可以用于信号分析、滤波、图像处理以及编码等领域。
FFT的计算原理可以从两个角度来讲解:一是从离散傅里叶变换(DFT)的定义出发,二是从FFT的具体计算过程中各个步骤的推导和实现。
首先,从DFT的定义出发,对一个离散信号x(n)进行DFT计算,可以得到其频域表示X(k),表示为:X(k) = Σ(x(n) * exp(-j2πkn/N))其中,N为信号的长度,k为频域采样点的索引,n为时域采样点的索引。
直接按照DFT的定义计算的复杂度是O(N^2),当信号长度很大时,计算量非常大。
FFT算法通过对DFT的变换矩阵进行分解,将复杂度降低到O(NlogN)。
然后,从FFT的具体计算过程中各个步骤的推导和实现来看。
以下是常见的快速傅里叶变换算法,即Cooley-Tukey算法的计算过程:1. 将信号x(n)分为两个部分:偶数索引部分x_e(n)和奇数索引部分x_o(n),分别由原信号的偶数索引和奇数索引采样得到。
2. 对x_e(n)和x_o(n)分别进行FFT计算,得到频域表示X_e(k)和X_o(k)。
3. 将得到的频域表示X_e(k)和X_o(k)按照以下公式合并得到最终的频域表示X(k):X(k) = X_e(k) + W_N^k * X_o(k)其中,W_N^k = exp(-j2πk/N)为旋转因子,可由欧拉公式得到。
4. 重复以上步骤,直到计算得到所有频域采样点的值。
以上就是FFT算法的基本原理和计算过程。
通过对信号进行分解和合并的方式,FFT算法能够大大减少计算量,快速地计算得到离散信号的频域表示。
后续还有一些对FFT算法进行改进和优化的方法,如快速傅里叶变换的再加工算法(Radix-2 FFT Algorithm)以及快速余弦和正弦变换(Fast Cosine and Sine Transform)等。
fft的用法 -回复

fft的用法-回复FFT,即快速傅里叶变换(Fast Fourier Transform),是一种高效的信号处理算法,用于快速计算傅里叶变换。
它广泛应用于数字信号处理、图像处理、通信和音频处理等领域。
在本文中,我将详细介绍FFT的原理、算法步骤以及应用。
一、傅里叶变换简介傅里叶变换是一种将信号从时域转换为频域的数学工具,它可以将一个信号分解为不同频率成分的叠加。
傅里叶变换公式为:F(w) = ∫f(t)e^(-jwt)dt其中,F(w)表示频域的复数函数,f(t)表示时域的函数,w为频率。
二、快速傅里叶变换原理FFT算法是在1965年由J.W. Cooley和J.W. Tukey发现的,它利用了傅里叶变换的对称性质,将O(n^2)复杂度的计算降低为O(nlogn)的复杂度。
FFT算法通过将信号采样点划分为不同的子集进行计算,并利用了旋转因子运算的特性,实现了快速的计算。
三、FFT算法步骤1. 输入信号首先,我们需要准备一个输入信号,该信号是以时间为自变量的实数函数。
通常,我们会对信号进行采样,得到一组离散的采样点。
2. 信号的长度针对采样点的数量,我们需要确定信号的长度为N。
在实际应用中,为了确保FFT的正确性,通常会选择2的整数次幂,即N=2^k。
3. 填充零如果信号的长度小于N,我们需要对其进行零填充,使其长度等于N。
这样做是为了保证FFT算法的正确性以及计算的高效性。
4. 快速傅里叶变换采用分治法的思想,FFT算法将信号分为两个子集,并分别计算它们的频谱。
然后,通过合并这些子集的结果以及旋转因子的运算,得到整个信号的频谱。
5. 频谱结果最后,我们可以得到信号的频谱结果,它表示了信号中不同频率成分的振幅和相位。
四、FFT的应用1. 音频处理在音频处理中,FFT被广泛应用于音频信号的频谱分析、波形绘制和滤波处理等方面。
通过FFT算法,我们可以将音频信号转化为频域表示,实现音频特征提取、音频识别以及音频效果的处理。
新手小白一看就会FFT算法的原理详解

新手小白一看就会FFT算法的原理详解傅里叶变换(Fourier Transform)是一种用于信号分析和图像处理的重要数学方法,它基于信号可以用一组正弦和余弦函数加权和表示的基本原理。
傅里叶变换主要通过将一个信号从时域变换到频域,实现信号的频谱分析和频域处理。
而快速傅里叶变换(Fast Fourier Transform,FFT)则是一种高效实现傅里叶变换的算法。
FFT算法的核心思想是分治策略,即将一个规模为N的问题分解为若干规模为N/2的子问题。
FFT算法借鉴了分治算法的优点,使得傅里叶变换的计算时间复杂度从O(N^2)下降到了O(NlogN),大大提高了计算效率。
下面将详细介绍FFT算法的原理。
首先,考虑需要进行傅里叶变换的一个离散的序列f(x),其中x为序列的下标。
这个序列可以看作是一个多项式的系数,傅里叶变换的目的是求得该多项式的根。
FFT算法的基本思路是将这个多项式分解为奇次和偶次项两个多项式的和,并分别对其进行傅里叶变换。
然后再将变换后的结果合并为最终的结果。
设序列f(x)的长度为N,可以将其分为两部分:f_e(x)=f(2x),其中x为偶数f_o(x)=f(2x+1),其中x为奇数那么f(x)可以表示为f_e(x^2)+f_o(x^2)*x对序列f_e(x)和f_o(x)分别进行N/2点的傅里叶变换,得到变换后的序列F_e(x)和F_o(x)。
接下来将F_e(x)和F_o(x)合并为最终的结果F(x)。
根据频域上两个序列的关系可知:F(x)=F_e(x)+W_N^x*F_o(x)其中W_N^x表示复数的单位根,即在单位圆上的第x个点。
根据Euler公式可知 W_N = exp(-2πi/N),则 W_N^x = exp(-2πi/N)^x,在计算机中可以通过查表或者递推的方式计算出。
最后,递归地将N个点的傅里叶变换转化为两个N/2个点的傅里叶变换,并利用合并的方式得到最终的结果。
总体而言,FFT算法可以通过递归的方式将一个长度为N的序列的傅里叶变换转化为两个长度为N/2的序列的傅里叶变换,并通过合并得到最终结果。
FFT算法详解

FFT算法详解2.3 快速傅⽴叶变换问题1) 问题背景在数值电路的传输中,为了避免信号⼲扰,需要把⼀个连续信号 x(t)先通过取样离散化为⼀列数值脉冲信号x(0), x(1), …… ,然后再通过编码送到传输电路中。
如果取样间隔很⼩,⽽连续信号的时间段⼜很长,则所得到的数值脉冲序列将⾮常庞⼤。
因此,传输这个编码信号就需要长时间的占⽤传输电路,相应地也需要付出昂贵的电路费⽤。
那么能否经过适当处理是使上述的数值脉冲序列变短,⽽同时⼜不会丧失有⽤的信息?的经过研究,⼈们发现,如果对上述数值脉冲序列作如下的变换处理:∑-=--=-==1/21,1,...,1,0,)()(N k Nnki i N n ek x n X π (1)则所得到的新序列X(0), X(1) , ……将⾮常有序,其值⽐较⼤的点往往集中在某⼀很狭窄的序列段内,这将⾮常有利于编码和存储,从⽽达到压缩信息的⽬的。
公式(1)就是所谓的离散傅⽴叶变换,简称DFT 。
现在我们来分析⼀下计算DFT 所需要的⼯作量。
如果我们不考虑公式(7.1)中指数项的运算,那么计算其每⼀个点X (n) 需要N 次复数乘法和N-1次的复数加法。
显然当N 很⼤时,这个⼯作量也⾮常巨⼤。
正是由于这个原因,使得DFT 的应⽤范围在过去很长的时间⾥受到了严格的限制。
注意到公式(1)是⾮常有规律性的,那么能否利⽤这种规律性来降低DFT 的计算时间?1965年,凯莱和塔柯的提出了⼀种⽤于计算DFT 的数学⽅法,⼤⼤减少了DFT 的计算时间,同时⼜特别适⽤于硬件处理,这就是所谓的快速傅⾥叶变换,简称FFT 。
鉴于DFT 的数据结构可以通过傅⽴叶变换的离散化获得,亦可通过三⾓插值得到,⽽本质上⼜同连续傅⾥叶分析有着极为密切的关系。
下⾯我们从傅⽴叶级数级数和傅⽴叶积分⼊⼿,导出DFT 结构的来源和FFT 的⼯作原理。
2)傅⽴叶变换如果x(t)是定义在整个实轴上的实值或复值函数,则其傅⽴叶变换可由下式给出:∞∞---==1,)()(/2i dt et x f X Tnift (2)若对任意参数f ,上述积分都存在,则(2)式确定了⼀个函数X(f),称为x(t) 的傅⽴叶变换。
fft计算公式

fft计算公式摘要:一、引言二、FFT 计算公式简介1.离散傅里叶变换2.快速傅里叶变换三、FFT 计算公式推导1.基2 递归算法2.蝴蝶运算四、FFT 在实际应用中的优势五、总结正文:一、引言在数字信号处理、图像处理等领域,傅里叶变换是一种非常重要的数学工具。
然而,对于大规模的信号处理问题,直接应用傅里叶变换的计算复杂度较高,因此,快速傅里叶变换(FFT)应运而生。
本文将详细介绍FFT 的计算公式及应用。
二、FFT 计算公式简介为了便于理解FFT 的计算公式,我们先简要介绍一下离散傅里叶变换(DFT)和快速傅里叶变换(FFT)。
1.离散傅里叶变换(DFT)DFT 是一种将离散信号从时域转换到频域的方法,其计算公式如下:X[k] = ∑N/2^n i^(-k+n) * x[n]其中,X[k] 表示频域的系数,x[n] 表示时域的信号,k 和n 分别为频域和时域的下标,N 为信号长度。
2.快速傅里叶变换(FFT)FFT 是DFT 的高效实现方法,它采用分治策略和循环移位技术,将DFT 的计算复杂度从O(N^2) 降低到O(NlogN)。
FFT 的计算公式如下:X[k] = ∑(N/2^n)^(2m) * C[m, k] * x[n]其中,m 为迭代次数,k 和n 分别为频域和时域的下标,N 为信号长度,C[m, k] 为复合基函数。
三、FFT 计算公式推导为了更直观地理解FFT 的计算过程,我们分两步进行推导。
1.基2 递归算法(1)首先,将输入序列x[n] 进行零填充,使其长度变为2 的整数次幂,即N = 2^n。
(2)将x[n] 和x[n+N/2] 进行旋转,得到x[n] 和x[n+N/2],其中x[n] 为原始序列,x[n+N/2] 为旋转后的序列。
(3)对旋转后的序列进行DFT 计算,得到频域系数X[k] 和X[k+N/2]。
(4)根据旋转序列的关系,可以得到频域系数X[k+N/2] = X[k],因此,我们只需计算一半的频域系数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.3 快速傅立叶变换问题1) 问题背景在数值电路的传输中,为了避免信号干扰,需要把一个连续信号 x(t)先通过取样离散化为一列数值脉冲信号x(0), x(1), …… ,然后再通过编码送到传输电路中。
如果取样间隔很小,而连续信号的时间段又很长,则所得到的数值脉冲序列将非常庞大。
因此,传输这个编码信号就需要长时间的占用传输电路,相应地也需要付出昂贵的电路费用。
那么能否经过适当处理是使上述的数值脉冲序列变短,而同时又不会丧失有用的信息?的经过研究,人们发现,如果对上述数值脉冲序列作如下的变换处理:∑-=--=-==1/21,1,...,1,0,)()(N k Nnki i N n ek x n X π (1)则所得到的新序列X(0), X(1) , ……将非常有序,其值比较大的点往往集中在某一很狭窄的序列段内,这将非常有利于编码和存储,从而达到压缩信息的目的。
公式(1)就是所谓的离散傅立叶变换,简称DFT 。
现在我们来分析一下计算DFT 所需要的工作量。
如果我们不考虑公式(7.1)中指数项的运算,那么计算其每一个点X (n) 需要N 次复数乘法和N-1次的复数加法。
显然当N 很大时,这个工作量也非常巨大。
正是由于这个原因,使得DFT 的应用范围在过去很长的时间里受到了严格的限制。
注意到公式(1)是非常有规律性的,那么能否利用这种规律性来降低DFT 的计算时间?1965年,凯莱和塔柯的提出了一种用于计算DFT 的数学方法,大大减少了DFT 的计算时间,同时又特别适用于硬件处理,这就是所谓的快速傅里叶变换,简称FFT 。
鉴于DFT 的数据结构可以通过傅立叶变换的离散化获得,亦可通过三角插值得到,而本质上又同连续傅里叶分析有着极为密切的关系。
下面我们从傅立叶级数级数和傅立叶积分入手,导出DFT 结构的来源和FFT 的工作原理。
2) 傅立叶变换如果x(t)是定义在整个实轴上的实值或复值函数,则其傅立叶变换可由下式给出:⎰∞∞---==1,)()(/2i dt et x f X Tnift (2)若对任意参数f ,上述积分都存在,则(2)式确定了一个函数X(f),称为x(t) 的傅立叶变换。
如果已知X(f) 则利用如下的傅立叶逆变换,还可复原x(t) :⎰∞∞--==1,)()(/2i df ef X t x Tnift (3)若x(t) 和 X(f) 同时满足(2)、(3)式,则称他们是一个傅立叶变换对,记为)()(f X t x ⇔。
通常X(f) 是一个复函数,因此可以写成如下两部分:i f I f R f X )()()(+= , 1-=i (4)式子中R(f) ,I(f) 分别是X(f) 的实部和虚部。
将上式表示为指数形式:)()()(f i ef X f X φ= 1-=i (5)其中)()()(22f I f R f X +=(6)))()(()(1f R f I tgf -=φ工程技术中,常将x(t) 看成一时间信号,相应的空间,称为时间域和空域;将其傅立叶变换X(f) 看成频率函数,相应的空间称为频域。
)(f X 称为x(t) 的傅立叶谱,而)(f φ称为其相角,这在物理上是有良好背景的。
的譬如此频率的的含义可以这样来理解:应用欧拉公式可将指数项表示成正弦-余弦的形式,如果把(2)式解释成离散项和的极限,则显然X(f)是包含了无限项正弦-余弦的和,而且f 的每一个值确定了所对应的正弦-余弦的频率。
在以后的叙述中,我们不妨用t 表示时间,用f 表示频率;同时用小写字母表示时间函数,并用相应的大写字母表示其傅立叶变换。
傅立叶变换可很容易地推广到二维情形。
假设x(t , s)是连续的和可积的,且X(f , g)是可积的,则相应的傅立叶变换对如下:⎰⎰∞∞-∞∞-+--==1,),(),(/)(2i dtds es t x g f X Tgs ft ni (7)⎰∞∞-+-==1,),(),(/)(2i dfdg eg f X s t x Tgs ft ni (8)3) 离散傅立叶变换尽管傅立叶级数和傅立叶变换具有非常优美的数学结构,但并不实用,并为他们都无法用有限字长的计算机作逻辑上的运算。
为此,我们必须建立傅立叶变换的数值方法,并由此导出DFT 数据结构的来源。
a. 傅立叶积分的离散化由于傅立叶变换无法用数字计算机进行逻辑运算,工程分析中,通常采用抽样的方法,观测x(t)的一些离散值,然后利用数值积分将傅立叶变换离散化。
函数抽样是函数插值的逆过程,假定用取2N+1 个互相间隔为 t ∆的节点的方法,当一个连续函数x(t) 离散化为的一个序列:}),(),...,(),0(),(),...,({t N x t x x t x t N x ∆∆∆-∆-于是当N 充分大时,有:⎰∆∆--≈tN tN niftdtet x f X 2)()( (9)现在我们把(9)式中的求积函数当成周期为t N ∆2的函数,以Nj t j ±±±=∆,...2,1,0,为节点,对(9)式用复化梯形公式做数值积分得∑-=∆-∆∆≈NNn tnifn et n x tf X 12)()( (10)对f 进行离散化,取1,...2,1,0),/(-=∆=N j t N j f , 则上式可改写:∑-=--=∆∆≈∆NNn Nnijn N j et n x ttN j X 1/21,...,1,0,)()((11)这就是一维傅立叶积分的离散表达式。
b 离散傅立叶变换在上面,我们普便的遇到了带有复指数乘积项的和式。
实际上,这种特殊的数据结构可利用以下更为一般的方式定义。
给定N 个实或复的数列{x(0), x(1),……x(N-1)},定义∑-=--=-==1/21,1,...,1,0,)()(N k Nnki i N n ek x n X π (12)为{x(k)}的离散傅立叶变换,简称DFT 。
我们指出,(11)式可以转化成上述一般形式。
这说明(12)式与傅立叶变换之间存在内在的联系,渴望获得与连续傅立叶变换相类似的性质,事实上确实如此。
下面我们就来做这件事。
首先说明,由(12)式确定的序列{X(n)}可以恢复为原序列{x(k)}。
事实上,在(12)式两边同乘以Nnijn e/2,并对n 从0 到n-1求和得:∑∑∑-=--=-==1/)(211/2)()(N k Ni k j n N n N n Nnji ek x en X ππ∑∑-=--==1/)(21][)(N n nNi k j n N k ek x πNi k j n ik j n N jk k eek x j Nx /)(2)(21,011)()(---≠=--+=∑ (13)注意到(13)式的和式中分子部分为0,从而∑-=-==1/21,...,1,0,)(1)(N n Nnji N j en X Nj x π (14)今后我们称(14)式是(12)式的逆变换,并称{x(k)}和{X(n)}为离散傅立叶变换对,简记为)()(n X k x ⇔离散傅立叶变换的这种可恢复性质,在工程技术中有着极为重要的应用。
因为,可以通过抽样获得一组的离散值,并利用DFT 转换为另一组数据,通过对变换数据的修改以及逆变换,达到对原数据的修正。
这也正是DFT 最具魅力的地方。
应用DFT 作数值分析,抽样也变得相当简单。
这时,可以抽取函数的任一片断,而无需象傅立叶变换离散化那样做对称抽样。
4) 快速傅里叶变换本节我们将把注意力集中在如何计算DFT 上。
如果我们不考虑(12)式中的复指数部分的运算,则求解(12)式共需要N * N 次乘法和N * (N-1)次加法。
显然当N 很大时,其工作量是相当可观的。
为此,凯莱和卡柯提出了一种专门用于处理DFT 的快速算法(FFT), 大大减少了DFT 的计算时间。
充分理解FFT 的工作原理,这并不需要高深的数学知识,只要时刻的盯住DFT 的数据结构即可。
为了便于理解,我们先从最简单的情形入手。
a FFT 直观发展注意到(12)式可以表示成一个矩阵运算,而FFT 实际上是一个矩阵分解算法,它对N 的要求有一定的限制,通常N 取成r2,其中r 是正整数。
为了更加直观,这里我们假定r=2, N =4 ,并引进记号1,/2-==-i eW Ni N π (15)则(12)式可改写为如下的矩阵形式:⎪⎪⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛)3()2()1()0()3()2()1()0(946434464442404342414044040404x x x x W W W W W W W W W W W W W W W W X X X X (16)注意到1=knN W ,k 为整数,则(16)式还可简化为⎪⎪⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛)3()2()1()0(1111111)3()2()1()0(142434240424342414x x x x W W W W W W W W W X X X X (17)上式以及以后的式子中没有把04W 写成1 ,完全是为了以后推广的需要。
第二步我们要做的是,把上述矩阵分解为两个矩阵的乘积:⎪⎪⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛)3()2()1()0(010010100011100001001)3()2()1()0(2424040434142404x x x x W W W W W W W W X X X X (18)上述分解基于以后要讲到的FFT 算法理论,其中第一行和第二行的位置做了变换,,这是FFT 本身所要求的。
以后将会看到,这种交换有利于数据存储,成为输出倒置。
今引进⎪⎪⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛)3()2()1()0(01001010001)3()2()1()0(242404041111x x x x W W W W x x x x (19)则⎪⎪⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛)3()2()1()0(1100001001)3()2()1()0()3()2()1()0(1111341424042222x x x x W W W W x x x x X X X X (20)于是求解X(n)分成了两次矩阵运算。
下面我们来分析一下这个过程的工作量。
计算)0(1x 需要的一个复数乘法和一个复数加法,即)2()0()0(041x W x x += 这里没有用1代替04W 是因为在一般情况下这一项通常不为1。
计算)1(1x 同样需要一个复数乘法和一个复数加法。
计算)2(1x 只需要一个复数加法,这是因为424W W -=,从而)2()0()2()0()2(04241x W x x W x x -=+=其中)2(04x W 在计算)0(1x 时已经计算过。