数字信号处理之 快速傅里叶变换(FFT)

文章目录

  • 快速傅里叶变换(FFT)
    • 一、直接计算DFT的问题和改善DFT运算效率的基本途径
      • 直接计算DFT的问题
      • 改善DFT运算效率的基本途径
    • 二、按时间抽取(DIT)的FFT算法(库利-图基算法)
      • 算法原理
      • 按时间抽取的FFT算法与直接计算DFT运算量的比较
      • 按时间抽取的FFT算法的特点
      • 按时间抽取的FFT算法的若干变体
    • 三、按频率抽取(DIF)的FFT算法(桑德-图基算法)
      • 算法原理
      • 时间抽取算法与频率抽取算法的比较
      • 离散傅里叶逆变换的快速算法(IFFT)
      • 按频率抽取的FFT算法的若干变体
    • 四、N为复合数的FFT算法——统一的FFT方法
      • 算法原理
      • 运算步骤
      • 基数
      • N为复合数的FFT运算量的估计
    • 五、分裂基FFT算法
      • 快速算法的探求
      • 算法原理
      • 分裂基FFT算法的运算量
    • 六、实序列的FFT算法
      • 问题的提出
      • 一个N点FFT同时运算两个N点实序列
      • 一个N点FFT运算一个2N点的实序列
    • 七、线性调频z变换(Chirp Z Transform)算法
      • 问题的提出
      • 算法原理
      • CZT的实现步骤
      • CZT运算量的估算
      • CZT算法的特点
    • 八、ZFFT算法

快速傅里叶变换(FFT)

快速傅里叶变换(FFT)并不是与DFT不同的另一种变换,而是为了减少计算次数的一种快速有效的算法。

本章主要研究若干中计算离散傅里叶变换的算法:

  • 按时间抽取的FFT算法
  • 按频率抽取的FFT算法
  • N为复合数的FFT算法
  • 分裂基FFT算法
  • 线性调频z变换算法
  • ZFFT算法

着重讨论算法原理,并提供了实现算法的详细细节。

一、直接计算DFT的问题和改善DFT运算效率的基本途径

直接计算DFT的问题

有限列长为N的序列 x ( n ) x(n) x(n)的DFT对为 X ( k ) = ∑ n = 0 N − 1 x ( n ) W N n k k = 0 , 1 , . . . , N − 1 X(k)=\sum_{n=0}^{N-1}x(n)W_N^{nk}\qquad k=0,1,...,N-1 X(k)=n=0N1x(n)WNnkk=0,1,...,N1 x ( n ) = 1 N ∑ k = 0 N − 1 X ( k ) W N − n k n = 0 , 1 , . . . , N − 1 x(n)=\frac1N\sum_{k=0}^{N-1}X(k)W_N^{-nk}\qquad n=0,1,...,N-1 x(n)=N1k=0N1X(k)WNnkn=0,1,...,N1完成全部DFT的总计算量为 N 2 N^2 N2次复数相乘及 N ( N − 1 ) N(N-1) N(N1)次复数相加。

DFT实际计算方式为 X ( k ) = ∑ n = 0 N − 1 { [ R e x ( n ) R e W N n k − I m x ( n ) I m W N k n ] + X(k)=\sum_{n=0}^{N-1}\{[\mathbf{Re}x(n)\mathbf{Re}W_N^{nk}-\mathbf{Im}x(n)\mathbf{Im}W_N^{kn}]+ X(k)=n=0N1{[Rex(n)ReWNnkImx(n)ImWNkn]+ j [ R e x ( n ) I m W N k n + I m x ( n ) R e W N k n ] } \qquad\qquad j[\mathbf{Re}x(n)\mathbf{Im}W_N^{kn}+\mathbf{Im}x(n)\mathbf{Re}W_N{kn}]\} j[Rex(n)ImWNkn+Imx(n)ReWNkn]}运算复杂度为 4 N 2 4N^2 4N2

改善DFT运算效率的基本途径

W N k n W_N^{kn} WNkn的固有特性:

  1. W N k n W_N^{kn} WNkn的对称性 W N k ( N − n ) = W N − k n = ( W N k n ) ∗ . W_N^{k(N-n)}=W_N^{-kn}=(W_N^{kn})^* . WNk(Nn)=WNkn=(WNkn).
  2. W N k n W_N^{kn} WNkn的周期性 W N k n = W N k ( n + N ) = W N ( k + N ) n . W_N^{kn}=W_N^{k(n+N)}=W_N^{(k+N)n}. WNkn=WNk(n+N)=WN(k+N)n.

二、按时间抽取(DIT)的FFT算法(库利-图基算法)

算法原理

方便讨论,设 N = 2 ν N=2^\nu N=2ν,这种 N N N为2的整数幂的FFT,也称基-2FFT。定义 X ( k ) = ∑ n = 0 N − 1 x ( n ) W N n k k = 0 , 1 , . . . , N − 1 X(k)=\sum_{n=0}^{N-1}x(n)W_N^{nk}\qquad k=0,1,...,N-1 X(k)=n=0N1x(n)WNnkk=0,1,...,N1分成奇偶子序列 { x ( 2 r ) = x 1 ( r ) x ( 2 r + 1 ) = x 2 ( r ) r = 0 , 1 , . . . N 2 − 1 \begin{cases}x(2r)=x_1(r)\\x(2r+1)=x_2(r)\end{cases}\qquad r=0,1,...\frac N2-1 { x(2r)=x1(r)x(2r+1)=x2(r)r=0,1,...2N1 X 1 ( k ) X_1(k) X1(k) X 2 ( k ) X_2(k) X2(k)分别是 x 1 ( r ) x_1(r) x1(r) x 2 ( r ) x_2(r) x2(r) N / 2 N/2 N/2点DFT X 1 ( k ) = ∑ r = 0 N / 2 − 1 x 1 ( r ) W N / 2 r k = ∑ r = 0 N / 2 − 1 x ( 2 r ) W N / 2 r k X 2 ( k ) = ∑ r = 0 N / 2 − 1 x 2 ( r ) W N / 2 r k = ∑ r = 0 N / 2 − 1 x ( 2 r + 1 ) W N / 2 r k X_1(k)=\sum_{r=0}^{N/2-1}x_1(r)W_{N/2}^{rk}=\sum_{r=0}^{N/2-1}x(2r)W_{N/2}^{rk}\\X_2(k)=\sum_{r=0}^{N/2-1}x_2(r)W_{N/2}^{rk}=\sum_{r=0}^{N/2-1}x(2r+1)W_{N/2}^{rk} X1(k)=r=0N/21x1(r)WN/2rk=r=0N/21x(2r)WN/2rkX2(k)=r=0N/21x2(r)WN/2rk=r=0N/21x(2r+1)WN/2rk X ( k ) X(k) X(k)表达为2部分: { X ( k ) = X 1 ( k ) + W N k X 2 ( k ) X ( k + N 2 ) = X 1 ( k ) − W N k X 2 ( k ) k = 0 , 1 , . . . , N 2 − 1 \begin{cases}X(k)=X_1(k)+W_N^kX_2(k)\\X(k+\frac N2)=X_1(k)-W_N^kX_2(k)\end{cases}\qquad k=0,1,...,\frac N2-1 { X(k)=X1(k)+WNkX2(k)X(k+2N)=X1(k)WNkX2(k)k=0,1,...,2N<

你可能感兴趣的:(信号处理,算法)