一、离散傅里叶变换回顾与FFT的引出
对于长度为N点的数字信号序列 ,定义其离散傅里叶变换为:
我们知道,利用系数 的性质可以大大减少DFT的计算量,这种算法就是快速离散傅里叶变换FFT。需要说明的是,FFT不是一种新的变换,而是一种求DFT的快速计算机算法。
对序列 按奇偶分成两列,重写DFT表达式:
他们分别是偶相列和奇数项列的DFT:
。
那么,对于一个 的序列进行不断分解,就可以得出如下所谓的蝶形图:
二、FFT运算的规律及实现
-
观察上面的蝶形图,我们发现,一个N点序列(注意N必须是2的幂次,如果原序列不是,可以填上0。如:1000点的x(n)可以在后面天24个0,使之变为1024点),可以进行M=logN次的抽取,对应蝶形图就有M级。如上图中8点序列的蝶形图就有3级; 每一级都是N/2个蝶形运算;
-
每一个蝶形的计算如下图:
X(k)=X1+X2*WN=X1_r+j(X1_i)+(X2_r+jX2_i)*(WN_r+jWN_i)
展开得到X(k)的实部和虚步分别为:X_r = X1_r + X2_r * WN_r - X2_i * WN_i,
X_i = X1_i + X2_i * WN_r + X2_r * WN_i.