详解FFT(快速傅里叶变换FFT.
FFT-快速傅里叶变换

p=6.283185306/n;
pr[1]=cos(p);
pi[1]=-sin(p);
if (l)
pi[1]=-pi[1];
for(i=2;i<=n-1;i++){
p=pr[i-1]*pr[1];
q=pi[i-1]*pi[1];
s=(pr[i-1]+pi[i-1])*(pr[1]+pi[1]);
注:亲测,这个版本无法运行,作者删改了重要内容[1] 请参考源码(2)
//快速傅立叶变换
// 入口参数:
// l: l=0, 傅立叶变换;l=1, 逆傅立叶变换
// il: il=0,不计算傅立叶变换或逆变换模和幅角;il=1,计算模和幅角
// n: 输入的点数,为偶数,一般为32,64,128,...,1024等
wi = wi*wpr + wtemp*wpi + wi;
}
mmax = istep;
}
}
在C++环境下的源码
bool FFT(complex<double> * TD, complex<double> * FD, int r)
{
//一维快速Fourier变换。
//complex<double> * TD ——指向时域数组的指针; complex<double> * FD ——指向频域数组的指针; r ——2的幂数,即迭代次数
// fr[]: l=0, 返回傅立叶变换的实部
// l=1, 返回逆傅立叶变换的实部
// fi[]: l=0, 返回傅立叶变换的虚部
快速傅里叶变换 FFT

因为
,所以:
上式中X1(k)和X2(k)分别为x2(r)和x2(r)的N/2点DFT, 即
由于X1(k)和X2(k)均以N/2为周期,且 X(k)又可表示为:
,以
即将一个N点的DFT分解成为两个N/2点的DFT。 上述运算可用右下图来表示,称为蝶形运算符号。
从右图可知,要完成一 个蝶形运算需要进行一 次复数相乘和两次复数 相加运算。
对于象雷达、通信、声纳等需要实时处理的信号, 因为其运算量更大,所以无法满足信号处理的实时 性要求。迫切需要有新的算法。
二、DFT运算的特点
实际上,DFT运算中包含有大量的重复运算。在WN
矩阵中,虽然其中有N2个元素,但由于WN的周期
性,其中只有N个独立的值,即
,且
这N个值也有一些对称关系。总之,WN因子具有如 下所述周期性及对称性:
N 1
X (k) x(n)WNkn n0
x(n)
1 N
N 1
X (k)WNkn
k 0
k 0,1,2, , N 1 n 0,1,2, , N 1
计算X(k)的运算量:需要N2次复数乘法,N(N-1)
次复数加法。在N较大时计算量很大。
例如:N=1024时, 需要1,048,576次复数乘法, 即 4,194,304次实数乘法
1.对称性
2.周期性 由上述特性还可得出:
利用上述对称特性,可使DFT运算中有些项可以合 并,这样,可使乘法次数减少大约一半;利用WN 矩阵的对称性及周期性,可以将长序列的DFT分解 为短序列的DFT,N越小,运算量能够减少。 例如,对于四点的DFT,直接计算需要16次复数乘 法,根据上述特性可以有以下形5年,J. W. Cooley和J. W. Tukey巧妙应用DFT中 W因子的周期性及对称性提出了最早的FFT,这是 基于时间抽取的FFT。具有里程碑式的贡献(运算量 缩短两个数量级)
《快速傅里叶变换》课件

FFT的历史背景
01
1960年代,Cooley和Tukey提 出了基于“分治”思想的FFT 算法,为快速傅里叶变换的实 用化奠定了基础。
02
随后,出现了多种FFT算法的 变种和优化,如Radix-2、 Radix-4等。
03
随着计算机技术的发展,FFT 算法在硬件实现上也得到了广 泛应用,如FPGA、GPU等。
《快速傅里叶变换》ppt课件
contents
目录
• FFT简介 • FFT基本原理 • FFT实现 • FFT的应用 • FFT的优化与改进 • FFT的挑战与未来发展
01 FFT简介
FFT的定义
快速傅里叶变换(FFT):一种高效计算离散傅里叶变换(DFT)及其逆变换的 算法。它将复杂度为$O(N^2)$的DFT计算降低到$O(Nlog N)$,大大提高了计 算效率。
详细描述
混合基数FFT算法结合了基数-2和基数-4算法的特点,利用两者在计算过程中的 互补性,减少了计算量,提高了计算效率。同时,该算法在处理大规模数据时 ,能够保持较高的精度。
分段FFT算法
总结词
分段FFT算法将输入数据分成若干段,对每一段进行快速傅里叶变换,以降低计算复杂度和提高计算效率。
详细描述
02 FFT基本原理
离散傅里叶变换(DFT)
定义
应用
DFT是时间域信号到频域的变换,通 过计算信号中各个频率成分的幅度和 相位,可以分析信号的频谱特性。
DFT在信号处理、图像处理、频谱分 析等领域有广泛应用。
计算量
DFT的计算量随着信号长度N的增加 而呈平方关系增长,因此对于长信号 ,计算量巨大。
详解FFT(快速傅里叶变换)

详解FFT(快速傅⾥叶变换)前置知识:多项式,分治。
应⽤场景:多项式乘法。
温馨提⽰:本⽂证明不必掌握,仅供想要了解的⼈阅读。
〇、导⼊您⼀定算过多项式乘法吧!有的时候,这算起来⽐较⿇烦,⽐如:(x2+2x−2)(2x2−x+3)=x2(2x2−x+3)+2x(2x2−x+3)−2(2x2−x+3)= (2x4−x3+3x2)+(4x3−2x2+6x)−(4x2−2x+6)= 2x4−x3+3x2+4x3−2x2+6x−4x2+2x−6= 2x4+(−x3+4x3)+(3x2−2x2−4x2)+(6x+2x)−6= 2x4+3x3−3x2+8x−6.⽤L A T E X表⽰就更⿇烦了。
在实际应⽤上,有时⾯对的多项式甚⾄多达上万项!这个时候再⼈⼯⼿算效率过低,且容易出错。
幸好,我们已经有了计算机,能够⽤⾮常快的速度算出结果!暴⼒算法是很容易想到的:for(int i=0;i<n;++i)for(int j=0;j<m;++j)c[i+j]+=a[i]*b[j];但它的时间复杂度为Θ(n2) 级,如果遇到上万的数据还是容易被卡了。
有没有更快的⽅法呢?当然有!那就是我们现在要讲的 FFT !⼀、知识补充1. 多项式1-1 多项式的⼀般表达我们通常⽤F(x) 来表⽰⼀个多项式,定义⼀个多项式只需⽤F(x)=a n x n+a n−1x n−1+⋯+a0,如F(x)=x2+3x−5 。
可以把它理解为函数,⽐如F(2) 就是将x=2 代⼊多项式F(x) 后的值。
1-2 多项式的点值表达我们知道,在平⾯直⾓坐标系中,n+1 个不重合的点可以唯⼀确定⼀个⼀元n次多项式。
所以我们可以⽤n+1 个点值来表⽰⼀个⼀元n次多项式!那么如何通过点值表达来计算多项式乘法呢?设已知两个⼀元n次多项式F(x),G(x) 的点值表达,W(x)=F(x)×G(x) 。
很显然,多项式W(x) 在x=i时的点值为W(i)=F(i)×G(i) 。
[2017年整理]详解FFT(快速傅里叶变换FFT
![[2017年整理]详解FFT(快速傅里叶变换FFT](https://img.taocdn.com/s3/m/ecf1a510e97101f69e3143323968011ca300f79a.png)
knNW NN第四章 快速傅里叶变换有限长序列可以通过离散傅里叶变换(DFT)将其频域也离散化成有限长 序列.但其计算量太大,很难实时地处理问题,因此引出了快速傅里叶变换 (FFT). 1965 年,Cooley 和 Tukey 提出了计算离散傅里叶变换(DFT )的快 速算法,将 DFT 的运算量减少了几个数量级。
从此,对快速傅里叶变换(FFT ) 算法的研究便不断深入,数字信号处理这门新兴学科也随 FFT 的出现和发 展而迅速发展。
根据对序列分解与选取方法的不同而产生了 FFT 的多种算 法,基本算法是基2DIT 和基2DIF 。
FFT 在离散傅里叶反变换、线性卷积 和线性相关等方面也有重要应用。
快速傅里叶变换(FFT )是计算离散傅里叶变换(DFT )的快速算法。
DFT 的定义式为N −1X (k ) = ∑ x (n )W NR N (k )n =0在所有复指数值 W kn 的值全部已算好的情况下,要计算一个 X (k ) 需要 N 次复数乘法和 N -1 次复数加法。
算出全部 N 点 X (k ) 共需 N 2次复数乘法和 N ( N − 1) 次复数加法。
即计算量是与 N 2 成正比的。
FFT 的基本思想:将大点数的 DFT 分解为若干个小点数 DFT 的组合, 从而减少运算量。
W N 因子具有以下两个特性,可使 DFT 运算量尽量分解为小点数的 DFT运算:(1) 周期性:( k + N ) nN= W kn= W ( n + N ) k(2) 对称性:W( k + N / 2 )= −WkN N利用这两个性质,可以使 DFT 运算中有些项合并,以减少乘法次数。
例子: 求当 N =4 时,X(2)的值4 N N N3∑44444X (2) = n =0x (n )W 2 n = x (0)W 0 + x (1)W 2 + x (2)W 4 + x (3)W 6= [ x (0) + x (2)]W 0 + [ x (1) + x (3)]W 2(周期性)4=[ x (0) + x (2)]-[ x (1) + x (3)]W 04(对称性)通过合并,使乘法次数由 4 次减少到 1 次,运算量减少。
FFT(快速傅里叶变换)算法详解

FFT (快速傅⾥叶变换)算法详解多项式的点值表⽰(Point Value Representation)设多项式的系数表⽰(Coefficient Representation):P a (x )=a 0+a 1x +a 2x 2+⋯+a n −1x n −1=n −1∑i =0a ix i则我们对上⾯的式⼦可以代⼊不同的 n 个 x 的值,构成⼀个 n 维向量:P a (x 0)P a (x 1)P a (x 2)⋮P a (x n −1)=1x 0x 20⋯x n −101x 1x 21⋯x n −111x 2x 22⋯x n −12⋮⋮⋮⋱⋮1x n −1x 2n −1⋯x n −1x −1a 0a 1a 2⋮a n −1更简洁的写法:P a =X α对上式观察后发现,X 是所谓的范德蒙德矩阵(Vandermonde's Matrix),在 n 个 x 的值不同的情况下,其⾏列式的值为:det (X )=∏0⩽i <j ⩽n −1(x j −x i )很明显,当所有 n 个 x 取值不同时,其⾏列式不为零,因此 X 可逆。
所以我们可以唯⼀确定多项式系数构成的向量 α:α=X −1P a也就是说,多项式 P a (x ) 还可以由 n 个 x 代⼊得到的 n 个点值来唯⼀表⽰:{x 0,P(x 0),x 1,P(x 1),x 2,P(x 2),⋯,x n −1,P(x n −1)}这就是多项式的点值表⽰。
多项式的点值表⽰是指,对于 n 次多项式,可以⽤ n 个不同的 x 和与之对应的多项式的值 P(x ) 构成⼀个长度为 n 的序列,这个序列唯⼀确定多项式,并且能够与系数表⽰相互转化。
n 次单位根了解了多项式的点值表⽰,⼀个很⾃然的问题是:如何选择 x 的值,来防⽌其指数⼤⼩爆炸型增长呢?这⾥可以借⽤复数的单位根。
简单回顾⼀下,复数有两种表⽰⽅法:迪卡尔积坐标表⽰和极坐标表⽰,这⾥我们⽤到的是后者:z =re i θi 是虚数单位,r 表⽰模长,θ 表⽰相⾓。
详解快速傅里叶变换FFT算法

详解快速傅里叶变换FFT算法快速傅里叶变换(FFT)算法是一种高效的计算离散傅里叶变换的方法。
它通过将傅里叶变换问题分解为更小的子问题,从而减少计算量。
FFT算法广泛应用于信号处理、图像处理和其他科学与工程领域。
FFT算法的核心思想是将一个长度为N的复数序列分解为两个长度为N/2的复数序列,并重用其计算结果。
这种分解是通过将序列的奇数项与偶数项分为两组来实现的。
分解后可以继续将长度为N/2的序列分解为长度为N/4的序列,直到序列长度为1时停止。
然后,通过合并这些子问题的解,我们可以得到原始问题的解。
FFT算法的关键步骤可以概括为以下几点:1.首先,将输入序列通过位逆序操作重新排列。
这是为了便于分解和合并子问题的解。
2.然后,将序列分解为两个长度为N/2的子序列。
一组是奇数项,另一组是偶数项。
3.对两个子序列进行递归调用FFT算法,分别计算它们的傅里叶变换。
4.将子问题的解合并为原始问题的解。
这是通过使用每个子问题的解的一部分和一些旋转因子来完成的。
5.重复以上步骤,直到得到最终的傅里叶变换结果。
FFT算法的时间复杂度是O(NlogN),相对于朴素的傅里叶变换(时间复杂度为O(N^2)),有着显著的性能优势。
这个优势主要来自于FFT算法中子问题的重用和分治思想的应用。
FFT算法的应用非常广泛。
在信号处理中,FFT算法可以用来分析信号的频域特征,还可以用于滤波、频谱分析和频率估计等。
在图像处理中,FFT算法被用来进行图像变换,包括傅里叶变换、离散余弦变换等。
此外,FFT算法还被广泛应用于通信、雷达和声音等领域中的数据处理和分析。
总的来说,FFT算法通过分解和重用子问题的解,实现了高效的计算离散傅里叶变换的目的。
它的应用范围广泛,并且在在很多领域中被广泛使用。
fft 快速傅里叶变换 (fast fourier transform)

FFT 快速傅里叶变换(Fast Fourier Transform) 是一种用于快速计算傅里叶变换的算法,是在傅里叶变换的基础上发展而来的。
FFT 算法被广泛应用于数字信号处理、图像处理、声音处理、卷积操作、解析几何等领域,它的高效性和实时性使得它成为了当今计算机科学领域不可或缺的一部分。
一、傅里叶变换简介傅里叶变换是将一个时域信号转换为频域信号的过程,其公式如下:$F(\omega)=\int_{-\infty}^{\infty}f(t)e^{-i\omega t}dt$其中,$f(t)$ 表示时域信号,$F(\omega)$ 表示频域信号,$\omega$ 表示角频率。
傅里叶变换可以分为连续傅里叶变换和离散傅里叶变换两种。
连续傅里叶变换仅适用于连续信号,而离散傅里叶变换适用于离散信号。
二、离散傅里叶变换离散傅里叶变换是一种将离散信号变换为频域信号的方法,其公式如下:$X_k=\sum_{n=0}^{N-1}x_n e^{-\frac{2\pi i}{N}kn},k=0,1,...,N-1$其中,$x_n(n=0,1,...,N-1)$ 表示原始离散信号,$X_k(k=0,1,...,N-1)$ 表示变换后的频域信号。
但是,使用该公式直接计算离散傅里叶变换的时间复杂度为$O(N^2)$,计算效率低下。
三、FFT 快速傅里叶变换FFT 快速傅里叶变换是一种基于DFT 离散傅里叶变换的高效算法,它的时间复杂度可以达到$O(NlogN)$,较之直接计算DFT 的时间复杂度要低得多。
FFT 算法的基本思想是将 DFT 分治成多个较小的 DFT,并利用其重复性降低运算次数。
1.蝴蝶运算蝴蝶运算是 FFT 算法的基本运算,通过它可以将 DFT 的计算复杂度降低为 $O(N)$。
蝴蝶运算的实质是将两个相邻点之间的信号进行乘法和加法运算,其公式如下:$X_k=X_{k1}+W_{N}^kX_{k2},X_{k+N/2}=X_{k1}-W_{N}^kX_{k2}$其中,$X_{k1}$ 表示 $X_k$ 中偶数项,$X_{k2}$ 表示 $X_k$ 中奇数项,$W_N$ 是DFT 的核函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
knN W N N第四章 快速傅里叶变换有限长序列可以通过离散傅里叶变换(DFT)将其频域也离散化成有限长 序列.但其计算量太大,很难实时地处理问题,因此引出了快速傅里叶变换 (FFT). 1965 年,Cooley 和 Tukey 提出了计算离散傅里叶变换(DFT )的快 速算法,将 DFT 的运算量减少了几个数量级。
从此,对快速傅里叶变换(FFT ) 算法的研究便不断深入,数字信号处理这门新兴学科也随 FFT 的出现和发 展而迅速发展。
根据对序列分解与选取方法的不同而产生了 FFT 的多种算 法,基本算法是基2DIT 和基2DIF 。
FFT 在离散傅里叶反变换、线性卷积 和线性相关等方面也有重要应用。
快速傅里叶变换(FFT )是计算离散傅里叶变换(DFT )的快速算法。
DFT 的定义式为N −1X (k ) = ∑ x (n )W NR N (k )n =0在所有复指数值 W kn 的值全部已算好的情况下,要计算一个 X (k ) 需要 N 次复数乘法和 N -1 次复数加法。
算出全部 N 点 X (k ) 共需 N 2次复数乘法和 N ( N − 1) 次复数加法。
即计算量是与 N 2成正比的。
FFT 的基本思想:将大点数的 DFT 分解为若干个小点数 DFT 的组合, 从而减少运算量。
W N 因子具有以下两个特性,可使 DFT 运算量尽量分解为小点数的 DFT运算:(1) 周期性:( k + N ) nN= W kn= W ( n + N ) k(2) 对称性:W( k + N / 2 )= −W kNN利用这两个性质,可以使 DFT 运算中有些项合并,以减少乘法次数。
例子: 求当 N =4 时,X(2)的值4 NNN3∑44444X (2) = n =0x (n )W 2 n = x (0)W 0 + x (1)W 2 + x (2)W 4 + x (3)W 6= [ x (0) + x (2)]W 0 + [ x (1) + x (3)]W 2(周期性)4=[ x (0) + x (2)]-[ x (1) + x (3)]W 04(对称性)通过合并,使乘法次数由 4 次减少到 1 次,运算量减少。
FFT 的算法形式有很多种,但基本上可以分为两大类:按时间抽取 (DIT )和按频率抽取(DIF )。
4.1 按时间抽取(DIT )的 FTT为了将大点数的 DFT 分解为小点数的 DFT 运算,要求序列的长度 N 为 复合数,最常用的是 N = 2 M的情况(M 为正整数)。
该情况下的变换称为基 2FFT 。
下面讨论基 2 情况的算法。
先将序列 x(n)按奇偶项分解为两组⎧x (2r ) = x 1 (r ) ⎨⎩x (2r +1) = x 2 (r ) 将 DFT 运算也相应分为两组Nr = 0,1,L , 2 − 1N −1X (k ) = DFT [ x (n )] = ∑ x (n )W knn =0N −1= ∑ x (n )W kn + N −1∑ x (n )W knn =0 n 为偶数n =0 n 为奇数N / 2−1∑(2 )2 r k+N / 2−1rk kk= W )∑ (2+ 1)( 2 r +1) k=x r =0r W Nx rW Nr =0N / 2−1∑2 r k+N / 2−1 k∑2 r k=r =0x 1 (r )W NW N r =0x 2 (r )W NN / 2−1= ∑ x 1 (r )Wr =0N / 2+ W NN / 2−1∑x 2(r )Wr =0rkN / 2(因为W2 r k NrkN / 2= X 1 (k ) + W N X 2 (k )1 N 2N1 N1 N 21 N 2N其中 X 1 (k ) 、 X 2 (k ) 分别是 x 1 (n )、x 2 (n ) 的 N/2 点的 DFTN / 2−1N / 2−1rkrkX 1 (k ) = ∑ x 1 (r )W N / 2 = ∑ x (2r )W N / 2 ,0 ≤ k ≤ − 1r =0r =02N / 2 −1N / 2 −1rkrkNX 2 (k ) = ∑ x 2 (r )W N / 2 = ∑ x (2r + 1)W N / 2 ,0 ≤ k ≤ −1r =0r =02至此,一个 N 点 DFT 被分解为两个 N/2 点的 DFT 。
上面是否将全部 N 点的 X (k ) 求解出来了?分析: X 1 (k ) 和N X 2 (k ) 只有 N/2 个点( k = 0,1,L ,2− 1 ),则 由X (k ) = X (k ) + W kX (k ) 只能求出 X (k ) 的前 N/2 个点的 DFT ,要求出全部 N 点的 X (k ) ,需要找出 X 1 (k ) 、 X 2 (k ) 和 X (k + N / 2) 的关系,其N中 k = 0,1,L , 2− 1。
由式子 X (k ) = X 1(k ) + W kX2 (k ) 可得X (k + N / 2) = X (k + N / 2) + W k + N / 2kX 2 (k + N / 2) 化简得NX (k + N / 2) = = X 1 (k ) − W N X 2 (k ) , k = 0,1,L , 2− 1这样 N 点 DFT 可全部由下式确定出来:⎪ X (k ) = X (k ) + W kX (k ) ⎨ X (k + N / 2) = X (k ) − W k X (k )k = 0,1,L, N − 1 2(*)上式可用一个专用的碟形符号来表示,这个符号对应一次复乘和两次复加运算。
NWN k2aa + W k bba − W k b-1N图 蝶形运算符号通过这样的分解以后,每一个 N /2 点的 DFT 只需要 ( N ) 2 =N次复数乘 24+N / 2 N 1 3 N 22 lk法,两个 N/2 点的 DFT 需要 2( N ) 2 =N次复乘,再加上将两个 N /2 点 22DFT 合并成 为 N 点 DFT 时有 N / 2 次与 W 因 子相 乘,一 共需 要N + N22N 2≈ 次复乘。
可见,通过这样的分解,运算量节省了近一半。
2因为 N = 2 M ,N/2 仍然是偶数,因此可以对两个 N/2 点的 DFT 再 分别作进一步的分解,将两个 N/2 点的 DFT 分解成两个 N/4 点的 DFT 。
例如对 x 1 (r ) ,可以在按其偶数部分及奇数部分进行分解:⎧x 1 (2l ) = x 3 (l ) ⎨⎩x 1 (2l +1) = x 4 (l ) 则的运算可相应分为两组:Nl = 0,1,L , 4 − 1N / 4−1X 1 (k ) = ∑ x 1 (2l )Wl =02lk N / 2N / 4−1+ ∑ x 1 (2l + 1)Wl =0( 2l +1) k N / 2N / 4−1 ∑3( )/ 4k N / 2N / 4−1 ∑4( )lk N / 4=x l =0l W NWkx l Wl =0N= X 3 (k ) + W N / 2 X 4 (k )将系数统一为以N为周期,即W kk = 0,1,L ,4− 1= W 2 k,可得⎪ X (k ) = X (k ) + W 2 k⎨X 4 (k ) 2 kk = 0,1,L , N − 1X 1 (k + N / 4) = X 3 (k ) − W N X 4 (k )4同样,对 X 2 (k ) 也可进行类似的分解。
一直分解下去,最后是2点的DFT ,2点 DFT 的运算也可用碟形符号来表示。
这样,对于一个 N = 2 3= 8的 DFT 运算,其按时间抽取的分解过程及完整流图如下图所示。
这种方法,由于每一步分解都是按输入序列在时域上的次序是属于偶数还是奇数来抽取的,故称为“时间抽取法”。
分析上面的流图, N = 2 M ,一共要进行 M 次分解,构成了从 x(n)到 X(k)的 M 级运算过程。
每一级运算都是由 N/2 个蝶形运算构成,因此每一 级运算都需要 N/2 次复乘和 N 次复加,则按时间抽取的 M 级运算后总共需 要复数乘法次数: m F =N⋅ M 2= Nlog N22复数加法次数: a F = N ⋅ M = N log 2 N根据上面的流图,分析FFT算法的两个特点,它们对FFT的软硬件 构成产生很大的影响。
(1) 原位运算 也称为同址运算,当数据输入到存储器中以后,每一级运算的结果仍然存储 在原来的存储器中,直到最后输出,中间无需其它的存储器。
根据运算流图 分析原位运算是如何进行的。
原位运算的结构可以节省存储单元,降低设备 成本。
(2) 变址 分析运算流图中的输入输出序列的顺序,输出按顺序,输入是“码位倒置” 的顺序。
见图。
X(0) X(4) X(2) X(6) X(1) X(5) X(3) X(7)码位倒置的变址处理在实际运算中,直接将输入数据 x(n)按码位倒置的顺序排好输入很不方便,一般总是先按自然顺序输入存储单元,然后通过变址运算将自然顺序N(N / 2)k nk的存储换成码位倒置顺序的存储,这样就可以进行FFT 的原位运算。
变质的功能如图所示。
用软件实现是通用采用雷德(Rader)算法,算出I 的倒序J以后立即将输入数据X(I)和X(J)对换。
尽管变址运算所占运算量的比例很小,但对某些高要求的应用(尤其在实时信号处理中),也可设法用适当的电路结构直接实现变址。
例如单片数字信号处理器TMS320C25 就有专用于FFT 的二进制码变址模式。
4.2按频率抽取(DIF)的FTT除时间抽取法外,另外一种普遍使用的FFT 结构是频率抽取法。
频率抽取法将输入序列不是按奇、偶分组,而是将N点DFT 写成前后两部分:N −1X (k )= DFT [ x(n)] = ∑x(n)W knn=0( N / 2)−1N −1= ∑x(n)W kn+∑x(n)W knn =0N Nn=N / 2N / 2−1∑( )nk +N / 2−1∑( +/ 2)(n+N / 2)k=n=0x n WNx n N WNn=0N / 2−1=∑[x(n) +W N x(n + N / 2)]WNn=0因为W N / 2 = −1,W ( N / 2)k= (−1) k ,k为偶数时(−1) k=1 ,k为奇数时N N(−1) k= −1,由此可将X(k)分解为偶数组和奇数组:N / 2−1∑N X (k)=n=0[x(n) + (−1)k x(n + N / 2)]W nkN / 2−1∑NX (2r)=n=0[x(n) + x(n + N / 2)]W 2nrN / 2−1∑N / 2 =[x(n) + x(n + N / 2)]W nrn=0NN / 2−1∑NX (2r + 1)=N / 2−1n =0[ x (n ) − x (n + N / 2)]W ( 2 r +1) n∑NN / 2=n =0[ x (n ) − x (n + N / 2)]W n W nr⎧x 1 (n ) = x (n ) + x (n + N / 2)令 ⎨n = 0,1,L , N / 2 − 1⎩x 2 (n ) = [ x (n ) − x (n + N / 2)]W n这两个序列都是 N/2 点的序列,对应的是两个 N/2 点的 DFT 运算:N / 2−1∑1N / 2X (2r )=n =0x (n )]W nrN / 2−1∑2N / 2X (2r + 1)=x n =0(n )W rn这样,同样是将一个 N 点的 DFT 分解为两个 N/2 点的 DFT 了。