详解快速傅里叶变换FFT 算法
快速傅里叶变换FFT 是离散傅里叶变换DFT 的一种快速算法,只有FFT 才能在现实中有实际应
用的意义。虽然许多学过数字信号处理这门课的同学都知道 DFT 和 FFT,但实际上真正理解其算法
原理的屈指可数,绝大部分同学知其然而不知其所以然,况且限于高校课程教学体制,课堂上不可
能把这些原理和算法讲得明明白白的。为此,特意以本文讲解FFT 算法的原理与实际应用,给欲往
电子信息类专业进修和发展的同学一些课外参考。
N 点有限长序列x(n)的DFT 为
N 1 2
nk 其中 nk j N nk
X (k ) x (n ) W W e
N N
n 0
其逆变换IDFT 为
1 N 1 nk
x(n) X(k) W
N
N n 0
正逆变换的运算量都是相同的。x(n)和X (k)都是复数序列,计算一个X(k)值,需要N 次复数
乘法和N-1 次复数加法。X(k)有N 个点,所以总共需要N*N 次复数乘法和N(N-1)次复数加法。复数
运算实际上是通过实数运算来完成的。上式可以写成:
N 1
nk nk
X (k ) Re x (n ) j Im x (n ) Re W j Im W
N N
n 0
N 1
nk nk nk nk
Re x(n) Re W Im x(n) Im W j Re x(n) Im W Im x(n) Re W
N N N N
n 0
由此可见,一次复数乘法需要4 次实数乘法和2 次实数加减法。一次复数加法需要2 次实数加
法。所以每一个X (k)计算需要4N 次实数乘法以及2N+2(N-1)=2(2N-1)次实数加法。整个DFT 运算
总共需要4N*N 次实数乘法和N*2(2N-1)=2N(2N-1)次实数加法。当N 足够大,N>>1 时,直接计算DFT
的乘法次数和加法次数都是和N 的平方成正比。当N=1024 时,DFT 的运算量为1048576 次,即一百
多万次复乘运算,一块嵌入式32 位处理器的最高速度为105 百万指令每秒,那么它要完全计算这个
DFT 的时间最快也要1 秒,期间还是独占CPU 所有运算资源且不能有任何其他的中断请求。这样计
算量太庞大,计算速递太慢了,谈不上实时性,根本没有实用意义。
所以,我们就要利用DFT 的系数的固有特性来简化计算,减少运算量。特性如下:
1. 共轭对称性:(Wnk )* Wnk
N N
2. 周期性: Wnk W(nN )k Wn(k N )
N N N
3. 可约性: Wnk Wnmk Wnk / m
N N N /m
得出:
Wn(N k ) W(N n)k Wnk WN