FFT及其框图实现

F F T FFT 及其框图实现

   2 2 时域抽取
   2 2 频域抽取

   F F T FFT 的全称为快速傅里叶变换,但是 F F T FFT 并不是一种变换,而是实现 D F T DFT 的一种快速算法。当 N N 比较大时,使用 F F T FFT 可大大减少进行 D F T DFT 变换的计算量。

   N N 点的 D F T 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}
乘法: N 2 N^2 次,加法: N ( N 1 ) N(N-1) 次。每当 N N 提高一倍,计算量增大四倍。

2 2 时域抽取

  假设有一长度为 2 N 2N 的有限长序列 x [ n ] x[n] ,现对其进行 D F T DFT 变换,现有一算法可以将 2 N 2N 点的 D F T DFT 计算降为 N N D F T DFT 计算,如下:
  记 g [ n ] g[n] x [ n ] x[n] 的下标为偶数时的序列,即 g [ n ] = x [ 2 n ] , 0 n N 1 g[n]=x[2n],0\leq n \leq N-1 ,记 v [ n ] v[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 ,则
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}
0 k N 1 0 \leq k \leq N-1
X [ k ] = G [ k ] + W 2 N k V [ k ] X[k]=G[k]+W_{2N}^kV[k]
N k 2 N 1 N \leq k \leq 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
其中 g [ n ] g[n] v [ n ] v[n] D F T DFT 都是 N N 点的。

  两个 N N 点的 D F T DFT 的运算量(以乘法为例)为 2 N 2 2N^2 ,而一个 2 N 2N 点的 D F T DFT 运算量为 4 N 2 4N^2 ,计算量减少了一半!如果 N = 2 r N=2^r ,则可以一直降下去,从而大大的减少了计算量。通过计算,可以知道此时的计算量为:乘法: N 2 l o g 2 N \dfrac{N}{2}log_2N ,加法: N l o g 2 N Nlog_2N

  下面以8点的 D F T DFT 为例,其实现框图为:

2 2 频域抽取

  依然对于 2 N 2N 点的序列 x [ n ] x[n] 进行 D F T DFT 计算,这次将 x [ n ] x[n] 分为前后两部分,即 g [ n ] g[n] x [ n ] x[n] 的前 N N 个点,即 g [ n ] = x [ n ] , 0 n N 1 g[n]=x[n],0 \leq n \leq N-1 , v [ n ] v[n] x [ n ] x[n] 的后 N N 个点,即 v [ n ] = x [ n + N ] , 0 n N 1 v[n]=x[n+N],0\leq n\leq 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 [ 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 [ 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])
该算法也将 2 N 2N 点的 D F T DFT 降为了2 N N 点的 D F T DFT

  将上面时域抽取的实现框图中所有的 x [ n ] x[n] 换成 X [ k ] X[k] ,然后所有箭头反向,即输入变输出,输出变输入,得到的框图就是频域抽取实现的框图,由于我画不动了,我就不画了,等哪天有时间了再补上。

猜你喜欢

转载自blog.csdn.net/The_last_knight/article/details/84956561