你究竟如何计算快速傅立叶变换?

时间:2010-07-11 22:17:34

标签: algorithm math fft

我一直在阅读很多关于快速傅立叶变换的内容,并且我正在尝试理解它的低级方面。不幸的是,谷歌和维基百科根本没有太大的帮助..而且我已经开放了5种不同的算法书籍也没有多大帮助。

我正在尝试找到像矢量[1,0,0,0]那样简单的FFT。当然我可以将其插入Matlab,但这无助于我理解底层正在发生的事情。另外,当我说我想找到一个向量的FFT时,就像说我想用一个更有效的算法找到一个向量的DFT一样吗?

5 个答案:

答案 0 :(得分:26)

你是对的,“快速傅里叶变换只是任何算法的名称,它在O(n log n)时间内计算离散傅立叶变换,并且有几种这样的算法。

这是我想到的最简单的DFT和FFT解释,也是小N的例子,这可能会有所帮助。 (请注意,有其他解释和其他算法。)

离散傅立叶变换

给定N个数字f 0 ,f 1 ,f 2 ,...,f N-1 < / sub>,DFT提供了一组不同的N个数字。

具体来说:设ω是1的原始 N <根(在复数或某个有限域中),这意味着ω N = 1但是没有更小的权力是1.您可以将f k 视为多项式的系数P(x)=Σf k x k 。 DFT给出的 N 新数字F 0 ,F 1 ,...,F N-1 在ω的幂处评估多项式的结果。也就是说,对于从0到N-1的每个 n ,新的数字F n 是P(ω n )=Σ 0≤k≤N-1 f k ω nk

image of dft

[选择ω的原因是逆DFT具有很好的形式,非常类似于DFT本身。]

请注意,找到这些F天真地需要O(N 2 )操作。但是我们可以利用来自我们选择的ω的特殊结构,这允许我们在O(N log N)中进行。任何这样的算法都称为快速傅里叶变换。

快速傅立叶变换

所以这是进行FFT的一种方法。我将用2N替换N以简化符号。我们有f 0 ,f 1 ,f 2 ,...,f 2N-1 ,我们想要计算P(ω 0 ),P(ω 1 ),... P(ω 2N-1 )我们可以写的

  

P(x)= Q(x)+ω N R(x)with

     

Q(x)= f 0 + f 1 x + ... + f N-1 x N-1 < / sup>

     

R(x)= f N + f N + 1 x + ... + f 2N-1 x 2N- 1

现在这里是美丽的东西。观察到ω k + N 的值非常简单地与ω k 的值相关:
P(ω k + N )=ω N (Q(ω k )+ω N R(ω k ))= R(ω k )+ω N Q(ω k )。因此,在ω 0 到ω N-1 的Q和R的评估就足够了。

这意味着你原来的问题 - 在2N点评估2N项多项式Pω 0 到ω 2N-1 - 已经减少到两个问题评估N点多项式Q和R在N点ω 0 到ω N-1 。所以运行时间T(2N)= 2T(N)+ O(N)以及所有这些,得到T(N)= O(N log N)。

DFT的例子

请注意,其他定义的因子为1 / N或1 /√N。

对于N = 2,ω= -1,(a,b)的傅立叶变换是(a + b,a-b)。

对于N = 3,ω是1的复立方根,(a,b,c)的傅立叶变换是(a + b + c,a +bω+cω 2 ,a +bω 2 +cω)。 (因为ω 4 =ω。)

对于N = 4且ω= i,(a,b,c,d)的傅里叶变换是(a + b + c + d,a + bi-c-di,a-b + cd,一个-BI-C + DI)。特别是你问题中的例子:(1,0,0,0)上的DFT给出(1,1,1,1),也许并不是很有启发性。

答案 1 :(得分:7)

FFT只是DFT的有效实现。两者的结果应该相同,但通常FFT会快得多。确保您首先了解DFT的工作原理,因为它更简单,更容易掌握。

当您了解DFT时,请转到FFT。注意,尽管一般原理是相同的,但FFT有许多不同的实现和变化,例如,抽取时间v抽取频率,基数2 v其他基数和混合基数,复数到复数v实数到复数等。

关于这个主题的一本很好的实用书是E. Brigham的Fast Fourier Transform and Its Applications

答案 2 :(得分:2)

是的,FFT只是一种有效的DFT算法。理解FFT本身可能需要一些时间,除非你已经研究过复数和连续傅里叶变换;但它基本上是从周期函数派生的基础的基础变化。

(如果您想了解有关傅里叶分析的更多信息,我推荐Gerald B. Folland撰写的傅立叶分析及其应用一书)

答案 3 :(得分:2)

我也是傅立叶变换的新手,我发现这本在线书很有帮助:

The Scientists and Engineer's Guide to Digital Signal Processing

该链接将带您进入离散傅里叶变换的章节。本章解释了所有傅里叶变换之间的区别,以及您使用哪一个和伪代码,以及如何计算离散傅里叶变换。

答案 4 :(得分:2)

如果您寻求DFT的简单英语解释和一点FFT,而不是学术 goggledeegoo ,那么必须读取此内容:http://blogs.zynaptiq.com/bernsee/dft-a-pied/

我自己无法解释得更好。