快速傅里叶变换(FFT)的推导过程(DIT)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hhhhhhxh/article/details/80792924

FFT是一种快速计算DFT的算法。按时间抽选的基-2FFT推导过程如下:

首先给出DFT的计算公式:

X ( k ) = D F T [ x ( n ) ] = n = 0 N 1 x ( n ) W N n k

其中 W N = e j 2 π N

容易证明:

W N n k = W N ( n + r N ) k = W N ( k + r N ) n r

W N n k = W m N m n k W N n k = W N / m n k / m

因此,可以得出一些特殊值:

W N N / 2 = 1

W N k + N 2 = W N k

W N ( N k ) n = W N ( N n ) k = W N n k

FFT的主要思想就是利用这些性质将DFT中的某些项合并。

设序列的长度为 N = 2 L ,将其分成奇偶两组:

(1) { x ( 2 r ) = x 1 ( r ) x ( 2 r + 1 ) = x 2 ( r )

其中

r = 0 , 1 , . . . , N 2 1

X ( k ) = n = 0 ( n ) N 1 x ( n ) W N n k + n = 0 ( n ) N 1 x ( n ) W N n k

X ( k ) = r = 0 N 2 1 x ( 2 r ) W N 2 r k + r = 0 N 2 1 x ( 2 r + 1 ) W N ( 2 r + 1 ) k

X ( k ) = r = 0 N 2 1 x 1 ( r ) W N / 2 r k + W N k r = 0 N 2 1 x 2 ( r ) W N / 2 r k

X 1 ( k ) = r = 0 N 2 1 x 1 ( r ) W N / 2 r k

X 2 ( k ) = r = 0 N 2 1 x 2 ( r ) W N / 2 r k

(2) X ( k ) = X 1 ( k ) + W N k X 2 ( k )

X 1 ( k ) , X 2 ( k ) 分别是 x 1 ( r ) x 2 ( r ) N / 2 点DFT。

这样我们就可以把一个 N 点DFT分解为两个 N / 2 点DFT,并通过 ( 2 ) 式组合成 N 点DFT。

但是式中的 k , r = 0 , 1 , . . . , N 2 1 ,也就是说,这只是 X ( k ) 的前一半序列。

可以应用周期性求解 X ( k ) 的后一半序列。

易证:

X 1 ( N 2 + k ) = X 1 ( k ) X 2 ( N 2 + k ) = X 2 ( k ) W N k + N 2 = W N k

因此:

(3) X ( k + N 2 ) = X 1 ( k ) W N k X 2 ( k ) , k = 0 , 1 , . . . , N 2 1

通过 ( 2 ) 式和 ( 3 ) 式,就可以通过两个 N / 2 点DFT序列组合出一个完整的 N 点DFT序列。

附运算次数(序列的长度为 N ):

直接DFT:
复数乘法 N 2
复数加法 N ( N 1 )

利用FFT求解DFT:
复数乘法 N 2 l o g 2 N
复数加法 N l o g 2 N

猜你喜欢

转载自blog.csdn.net/hhhhhhxh/article/details/80792924