快速傅里叶变换(FFT)
一、FFT出现的原因
对x(n)进行N点DFT计算,一共有N2 次乘法,N2次加法
如果N=1024,则有2*1048576次计算,计算量过于庞大。
FFT的思想就是:不断把长序列的DFT分解成几个短序列的DFT,并利用WNkn的周期性和对称性来减少DFT的运算次数。
二、DIT-FFT
(1)8点DFT一次时域抽取分解运算
经过一次分解后,计算1个N点DFT共需要计算两个N/2点DFT和N/2个蝶形运算。而计算一个N/2点DFT需要(N/2)2次复数乘法和N/2(N/2-1)次复数加法。仅仅经过一次分解,就使运算量减少近一半。
(2)8点DFT二次时域抽取分解运算
经过第二次分解,又将N/2点DFT分解为2个N/4点DFT和N/4个蝶形运算,而1点DFT就是时域序列本身。
(3)DIT-FFT与DFT运算量的比较
设N=2M ,有M级蝶形。每一级都由N/2个蝶形运算构成。每一级运算都需要N/2次复数乘和N次复数加
下图显示了DIT-FFT与DFT运算量的比较,可以直观看出FFT算法的优越性。N越大时,优越性就越明显。
三、用Python实现FFT算法
import numpy as np
from scipy.fftpack import fft, ifft
<