FFT及其框图实现
基
2时域抽取
基
2频域抽取
FFT的全称为快速傅里叶变换,但是
FFT并不是一种变换,而是实现
DFT的一种快速算法。当
N比较大时,使用
FFT可大大减少进行
DFT变换的计算量。
N点的
DFT所需的计算量为:
X[k]=n=0∑N−1x[n]WNkn
乘法:
N2次,加法:
N(N−1)次。每当
N提高一倍,计算量增大四倍。
基
2时域抽取
假设有一长度为
2N的有限长序列
x[n],现对其进行
DFT变换,现有一算法可以将
2N点的
DFT计算降为
N的
DFT计算,如下:
记
g[n]为
x[n]的下标为偶数时的序列,即
g[n]=x[2n],0≤n≤N−1,记
v[n]为
x[n]的下标为奇数时的序列,即
v[n]=x[2n+1],0≤n≤N−1,则
X[k]=n=0∑2N−1x[n]W2Nkn=n=0∑N−1x[2n]W2Nk2n+n=0∑N−1x[2n+1]W2Nk(2n+1)=n=0∑N−1g[n]WNkn+W2Nkn=0∑N−1v[n]WNkn=G[<k>N]+W2NkV[<k>N],0≤k≤2N−1
当
0≤k≤N−1时
X[k]=G[k]+W2NkV[k]
当
N≤k≤2N−1时
X[k]=G[<k>N]+W2NkV[<k>N]k=m+N
G[m]−W2NmV[m],0≤m≤N−1
其中
g[n]和
v[n]的
DFT都是
N点的。
两个
N点的
DFT的运算量(以乘法为例)为
2N2,而一个
2N点的
DFT运算量为
4N2,计算量减少了一半!如果
N=2r,则可以一直降下去,从而大大的减少了计算量。通过计算,可以知道此时的计算量为:乘法:
2Nlog2N,加法:
Nlog2N。
下面以8
点的
DFT为例,其实现框图为:
基
2频域抽取
依然对于
2N点的序列
x[n]进行
DFT计算,这次将
x[n]分为前后两部分,即
g[n]为
x[n]的前
N个点,即
g[n]=x[n],0≤n≤N−1,
v[n]为
x[n]的后
N个点,即
v[n]=x[n+N],0≤n≤N−1,则:
X[k]=n=0∑2N−1x[n]W2Nkn=n=0∑N−1x[n]W2Nkn+n=N∑2N−1x[n]W2Nkn=n=0∑N−1x[n]W2Nkn+m=0∑N−1x[m+N]W2Nk(m+N)=n=0∑N−1g[n]W2Nkn+(−1)kn=0∑N−1v[n]W2Nkn
对其进行频域抽取
X[2r]=n=0∑N−1g[n]W2N2rn+n=0∑N−1v[n]W2N2rn=G[k]+V[k],0≤r≤N−1
X[2r+1]=n=0∑N−1g[n]W2N(2r+1)n−n=0∑N−1v[n]W2N(2r+1)n=W2Nn(G[k]−V[k])
该算法也将
2N点的
DFT降为了2
个
N点的
DFT。
将上面时域抽取的实现框图中所有的
x[n]换成
X[k],然后所有箭头反向,即输入变输出,输出变输入,得到的框图就是频域抽取实现的框图,由于我画不动了,我就不画了,等哪天有时间了再补上。