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