漫步线性代数二十——快速傅里叶变换(下)

本文介绍了快速傅里叶变换(FFT)的基本原理及其高效计算方法。通过将傅里叶变换分解为更小规模的变换,FFT显著减少了计算量,使得频域分析变得可行。文章详细解释了FFT算法的步骤,并提供了具体的矩阵分解示例。
摘要由CSDN通过智能技术生成

快速傅里叶变换

傅里叶分析是一个很美妙的理论,而且它还很实用。在频域分析波形可以很好的将信号分离开来,相反的过程又能回到时域中。处于物理和数学的缘故,指定实用指数函数,我们感觉最主要的原因就是:如果我们对 eikx 求导、积分或将 x 变成x+h,结果依然是 eikx 的倍数,指数函数非常适用于微分方程,积分方程和差分方程,每个频域分量有自己的运作方式,就像特征值一样,然后阿门重新组合得到问题的解。信号的分析和合成(从 y 中计算c,从 c 中计算y)是科学计算的中心问题。

我们想要展示 Fc,F1y 计算非常快,关键点就是 F4 F2 的关系:

F4=11111ii2i31i2i4i81i3i6i9F2=11111111

F4 包含 w4=i ,1的四次根, F2 包含 w2=1 ,1的平方根。注意 F2 有一半的元素都是零,做两次 2×2 的变换仅需要直接进行 4×4 变换时间的一半,如果 64×64 变化可以用两个 32×32 变换替换,那么运行时间将减少一般。之所有能够如此,原因在于 w64 w32 之间存在一个简单的联系:

(w64)2=w32,(e2πi/64)2=e2πi/32

从圆上的点看,32次根是64次根的两倍,如果 w64=1 ,那么 (w2)32=1 ,如果 m n的一半,那么 m 次根是n 次根的平方:

m=12n,w2n=wm(1)

FFT 的速度取决于像 210=1024 这样的合数。如果没有快速变换,那么 F 乘以c就需要 (1024)2 次乘法,相比之下,快速变换只需要 51024 步,整整快了200倍。一般来讲,当 n=2 时,我们用 12n 代替 n2 ,我们先将 Fn 和两个 Fn/2 联系起来,然后在和四个 Fn/4 联系起来,如此不断进行下去最后可以得出很小的 F ,通常来讲n2步会减到 12nlogn2

我们现在看看 y=Fnc (一个有 n 个元素的向量)如何从两个只有一半长度的向量中恢复回来。第一步是将c分成奇数和偶数两部分:

c=(c0,c2,,cn2)c′′=(c1,c3,,cn1)

利用这两个向量,我们变换 y=Fmc,y′′=Fmc′′ ,这两个乘法的矩阵 Fm 比原来要小。现在问题变成如何从 y,y′′ 中恢复 y ,Cooley和Tukey注意到了如何求解这个问题:

33、向量y=Fnc的前 m 项和后m项是

yj=yj+wjny′′j,yj+m=yjwjny′′j,j=0,,m1j=0,,m1(2)

因此第三步就是:将 c 分成c,c′′,用 Fm 将他们变成 y,y′′ 并且利用 (13) 进行重构。

这种不断分半的想法可以一直重复进行,例如从 F1024 F512 再到 F256 ,如果我们从 n=2 开始到一直到 n=1 ,那么最终的计数是 12n 。另一种计算方法是:从 n=2 n=1 需要 步,每一步需要 n/2 次乘法,相当于是 Fn 的一个分解:

F1024=[I512I512D512D512][F512F512][](3)

所需的代价近似是线性的,傅里叶分析完全可以用FFT进行转换,为了证实方程(13),我们将 yi 分成奇数项和偶数项:

yi=k=0n1wjknckk=0m1w2jknc2k+k=0m1w(2k+1)jnc(2k+1)

右边的两个和式分别有 m=12n 项。因为 w2n=wm ,所以这两个和式子可以表示为:

yj=k=0m1wjkmck+wjnk=0m1wjkmc′′k=yj+wjny′′j(4)

在方程(13)的第二部分, j+m 部分有一个符号的变化:

在和式里面,因为 wkmm=1k=1 ,所以 wk(j+1)m 依然为 wkjm ;在外面,因为 wmn=e2πim/n=eπi=1 ,所以 wj+mn=wjn

FFT的想法用其他的素数 n 代替后就得到一个新版本,如果n本身是一个素数,那么将会有一个全新的算法。

例1:从 n=4 n=2

c0c1c2c3c0c2c1c3[F2cF2c′′][y]

因为每步都是线性的,所以从一个矩阵开始,这些矩阵的乘积也必须是 F4

11111ii2i31i2i4i61i3i6i9=111111ii111111111111(5)

我们可以看出中间的是两个 F2 ,右边是将 c 分成c,c′′的置换矩阵,左边是用乘以 wjn 的矩阵。如果我们从 F8 开始,那么中间的矩阵就是两个 F4 ,所以FFT相当于傅里叶矩阵的因式分解! n2 个非零向量矩阵 F 近似为=logn2个矩阵(他们有 n 个非零元素)相乘的结果。

FFT

FFT的第一步是将 Fn 的乘法变成两个 Fm 的乘法,偶数项 (c0,c2) 从奇数项 (c1,c3) 中分离出来,如1给出了 n=4 时的流图(flow graph)。对于 n=8 ,只要用 F2 代替 F4 即可。新元素 w4=i 是老元素 w=w8=e2πi/8 的平方,流图给出了 c 进入FFT的顺序。

每一步需要12n次乘法,所以最终需要 12nlogn


这里写图片描述
图2

添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值