Josh 的复习总结之数字信号处理(Part 4——快速傅里叶变换 FFT)


《Josh 的复习总结之数字信号处理》系列文章目录:

      Part 1——离散时间信号和系统分析基础
      Part 2——离散傅里叶级数 DFS
      Part 3——离散傅里叶变换 DFT
👉 Part 4——快速傅里叶变换 FFT
      Part 5——部分 FFT 蝶形图
      Part 6——数字滤波器的基本结构
      Part 7——数字滤波器设计


1. 直接计算 DFT 的计算量

  考察列长为 N N N 的序列 x ( n ) x\left(n\right) x(n) 的 DFT
X ( k ) = ∑ n = 0 N − 1 x ( n ) W N n k = ∑ n = 0 N − 1 { ℜ [ x ( n ) ] + j ℑ [ x ( n ) ] } { ℜ [ W N n k ] + j ℑ [ W N n k ] } = ∑ n = 0 N − 1 { ℜ [ x ( n ) ] ℜ [ W N n k ] − ℑ [ x ( n ) ] ℑ [ W N n k ] } + j { ℜ  ⁣  [ x ( n ) ] ℑ  ⁣  [ W N n k ] + ℑ [  ⁣  x ( n ) ] ℜ  ⁣  [ W N n k ] } \begin{aligned} X\left(k\right)&=\sum_{n=0}^{N-1}{x\left(n\right)W_N^{nk}}=\sum_{n=0}^{N-1}\left\{\Re{\left[x\left(n\right)\right]}+j\Im{\left[x\left(n\right)\right]}\right\}\left\{\Re{\left[W_N^{nk}\right]}+j\Im{\left[W_N^{nk}\right]}\right\} \\ &=\sum_{n=0}^{N-1}{\left\{ \Re \left[ x\left( n \right) \right] \Re \left[ W_{N}^{nk} \right] -\Im \left[ x\left( n \right) \right] \Im \left[ W_{N}^{nk} \right] \right\} +j\left\{ \Re \!\:\left[ x\left( n \right) \right] \Im \!\:\left[ W_{N}^{nk} \right] +\Im \left[ \!\:x\left( n \right) \right] \Re \!\:\left[ W_{N}^{nk} \right] \right\}} \end{aligned} X(k)=n=0N1x(n)WNnk=n=0N1{[x(n)]+j[x(n)]}{[WNnk]+j[WNnk]}=n=0N1{[x(n)][WNnk][x(n)][WNnk]}+j{[x(n)][WNnk]+[x(n)][WNnk]}由此,直接计算 DFT 时,在不忽略 W N 0 = 1 W_N^0=1 WN0=1 等特例时,实数乘法次数为 4 N 2 4N^2 4N2,实数加法次数为 2 N ( 2 N − 1 ) 2N\left(2N-1\right) 2N(2N1),均与 N 2 N^2 N2 成正比,计算量非常庞大。


2. 利用旋转因子 W N n k W_N^{nk} WNnk 的特性改善 DFT 的运算效率

W N n k = e j 2 π N n k W_N^{nk}=e^{j\frac{2\pi}{N}nk} WNnk=ejN2πnk
对称性 ( W N n k ) ∗ = W N − n k = W N ( N − n ) k = W N n ( N − k ) \left(W_N^{nk}\right)^\ast=W_N^{-nk}=W_N^{\left(N-n\right)k}=W_N^{n\left(N-k\right)} (WNnk)=WNnk=WN(Nn)k=WNn(Nk)
周期性 W N n k = W N ( N + n ) k = W N n ( N + k ) W_N^{nk}=W_N^{\left(N+n\right)k}=W_N^{n\left(N+k\right)} WNnk=WN(N+n)k=WNn(N+k)
可约性 W N n k = W m N m n k , W N n k = W N m n k m W_N^{nk}=W_{mN}^{mnk},W_N^{nk}=W_{\frac{N}{m}}^{\frac{nk}{m}} WNnk=WmNmnk,WNnk=WmNmnk
特殊点 W N 0 = W N N = 1 , W N N 2 = − 1 , W N k + N 2 = − W N k W_N^0=W_N^N=1,W_N^{\frac{N}{2}}=-1,W_N^{k+\frac{N}{2}}=-W_N^k WN0=WNN=1,WN2N=1,WNk+2N=WNk

利用旋转因子 W N n k W_N^{nk} WNnk 的特性,可将直接计算 DFT 算式中的对称项合并,从使长序列的DFT分解为为更小点数的DFT,即
ℜ [ x ( n ) ] ℜ [ W N n k ] + ℜ [ x ( N − n ) ] ℜ [ W N ( N − n ) k ] = { ℜ [ x ( n ) ] + ℜ [ x ( N − n ) ] } ℜ [ W N n k ] \Re \left[ x\left( n \right) \right] \Re \left[ W_{N}^{nk} \right] +\Re \left[ x\left( N-n \right) \right] \Re \left[ W_{N}^{\left( N-n \right) k} \right] =\left\{ \Re \left[ x\left( n \right) \right] +\Re \left[ x\left( N-n \right) \right] \right\} \Re \left[ W_{N}^{nk} \right] [x(n)][WNnk]+[x(Nn)][WN(Nn)k]={[x(n)]+[x(Nn)]}[WNnk] − ℑ [ x ( n ) ] ℑ [ W N n k ] − ℑ [ x ( N − n ) ] ℑ [ W N ( N − n ) k ] = − { ℑ [ x ( n ) ] − ℑ [ x ( N − n ) ] } ℑ [ W N n k ] -\Im \left[ x\left( n \right) \right] \Im \left[ W_{N}^{nk} \right] -\Im \left[ x\left( N-n \right) \right] \Im \left[ W_{N}^{\left( N-n \right) k} \right] =-\left\{ \Im \left[ x\left( n \right) \right] -\Im \left[x\left( N-n \right) \right] \right\} \Im \left[ W_{N}^{nk} \right] [x(n)][WNnk][x(Nn)][WN(Nn)k]={[x(n)][x(Nn)]}[WNnk]


3. 基-2 按时间抽取的 FFT 算法

(radix-2 Decimation in Time Fast Fourier Transform, radix-2 DIT-FFT, i.e. Cooley-Turkey Method)

3.1 算法原理

  设序列 x ( n ) x\left(n\right) x(n) 的列长 N = 2 ν N=2^\nu N=2ν ν \nu ν 为整数,则其 DFT
X ( k ) = ∑ n = 0 N − 1 x ( n ) W N n k ,    k = 0 , 1 , ⋯   , N − 1 X\left(k\right)=\sum_{n=0}^{N-1}{x\left(n\right)W_N^{nk}},\ \ k=0,1,\cdots,N-1 X(k)=n=0N1x(n)WNnk,  k=0,1,,N1 x ( n ) x\left(n\right) x(n) 按照 n n n 的奇偶分成两个子序列
{ x 1 ( r ) = x ( 2 r ) x 2 ( r ) = x ( 2 r + 1 ) ,    r = 0 , 1 , ⋯   , N 2 − 1 \begin{cases} x_1\left(r\right)=x\left(2r\right)\\ x_2\left(r\right)=x\left(2r+1\right) \end{cases} ,\ \ r=0,1,\cdots,\frac{N}{2}-1 {x1(r)=x(2r)x2(r)=x(2r+1),  r=0,1,,2N1则序列 DFT 的前半部分可表示为
X ( 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 + 1 ) k = ∑ r = 0 N 2 − 1 x 1 ( r ) W N 2 r k + W N k ∑ r = 0 N 2 − 1 x 2 ( r ) W N 2 r k = D F T [ x 1 ( n ) ] + W N k D F T [ x 2 ( n ) ] = X 1 ( k ) + W N k X 2 ( k ) ,    k = 0 , 1 , ⋯   , N 2 − 1 \begin{aligned} X\left(k\right)&=\sum_{r=0}^{\frac{N}{2}-1}{x\left(2r\right)W_N^{2rk}}+\sum_{r=0}^{\frac{N}{2}-1}{x\left(2r+1\right)W_N^{\left(2r+1\right)k}}=\sum_{r=0}^{\frac{N}{2}-1}{x_1\left(r\right)W_{\frac{N}{2}}^{rk}}+W_N^k\sum_{r=0}^{\frac{N}{2}-1}{x_2\left(r\right)W_{\frac{N}{2}}^{rk}} \\ &=\mathrm{DFT}\left[x_1\left(n\right)\right]+W_N^k\mathrm{DFT}\left[x_2\left(n\right)\right] \\ &=X_1\left(k\right)+W_N^kX_2\left(k\right),\ \ k=0,1,\cdots,\frac{N}{2}-1 \end{aligned} X(k)=r=02N1x(2r)WN2rk+r=02N1x(2r+1)WN(2r+1)k=r=02N1x1(r)W2Nrk+WNkr=02N1x2(r)W2Nrk=DFT[x1(n)]+WNkDFT[x2(n)]=X1(k)+WNkX2(k),  k=0,1,,2N1由旋转因子的周期性,即
W N 2 r k = W N 2 r ( k + N 2 ) W_{\frac{N}{2}}^{rk}=W_{\frac{N}{2}}^{r\left(k+\frac{N}{2}\right)} W2Nrk=W2Nr(k+2N)可将序列DFT的后半部分表示为
X ( k + N 2 ) = X 1 ( k + N 2 ) + W N ( k + N 2 ) X 2 ( k + N 2 ) = X 1 ( k ) + W N ( k + N 2 ) X 2 ( k ) = X 1 ( k ) − W N k X 2 ( k ) ,    k = 0 , 1 , ⋯   , N 2 − 1 \begin{aligned} X\left(k+\frac{N}{2}\right)&=X_1\left(k+\frac{N}{2}\right)+W_N^{\left(k+\frac{N}{2}\right)}X_2\left(k+\frac{N}{2}\right) \\ &=X_1\left(k\right)+W_N^{\left(k+\frac{N}{2}\right)}X_2\left(k\right) \\ &=X_1\left(k\right)-W_N^kX_2\left(k\right),\ \ k=0,1,\cdots,\frac{N}{2}-1 \end{aligned} X(k+2N)=X1(k+2N)+WN(k+2N)X2(k+2N)=X1(k)+WN(k+2N)X2(k)=X1(k)WNkX2(k),  k=0,1,,2N1类似地,可以将分离后的序列继续按奇偶序号分成两个序列计算,直到每个序列中只含有两个点。此时开始计算 DFT。这种方法称为基-2 按时间抽取的 FFT 算法

3.2 蝶形运算流图符号

基-2 按时间抽取的 FFT 算法的鲽形图

3.3 8 点基-2 DIT-FFT 推导

8 点 radix-2 DIT-FFT 推导
  对于 8 点的序列,进行两次分解后每部分序列只含有两个点,可以直接计算 DFT。为了得到自然顺序输出的 DFT 序列,将第二级分解以后的结果作为输入。下面推导每级分解后序列的结果表示。

  对于第一级分解,直接用算法原理中的式子表示结果,有
X ( k ) = X 1 ( k ) + W N k X 2 ( k ) , k = 0 , 1 , ⋯   , N 2 X ( k + N 2 ) = X 1 ( k ) + W N k X 2 ( k ) , k = 0 , 1 , ⋯   , N 2 \begin{aligned} &X\left(k\right)=X_1\left(k\right)+W_N^kX_2\left(k\right),&k=0,1,\cdots,\frac{N}{2}\\ &X\left(k+\frac{N}{2}\right)=X_1\left(k\right)+W_N^kX_2\left(k\right),&k=0,1,\cdots,\frac{N}{2} \end{aligned} X(k)=X1(k)+WNkX2(k),X(k+2N)=X1(k)+WNkX2(k),k=0,1,,2Nk=0,1,,2N对于第二级分解
X 1 ( k ) = ∑ l = 0 N 4 − 1 x 1 ( 2 l ) W N 2 2 l k + ∑ l = 0 N 4 − 1 x 1 ( 2 l + 1 ) W N 2 ( 2 l + 1 ) k = ∑ l = 0 N 4 − 1 x 3 ( l ) W N 4 l k + W N 2 k ∑ l = 0 N 4 − 1 x 4 ( l ) W N 4 l k = X 3 ( k ) + W N 2 k X 4 ( k ) ,    k = 0 , 1 , ⋯   , N 4 − 1 \begin{aligned} X_1\left(k\right)&=\sum_{l=0}^{\frac{N}{4}-1}{x_1\left(2l\right)W_{\frac{N}{2}}^{2lk}}+\sum_{l=0}^{\frac{N}{4}-1}{x_1\left(2l+1\right)W_{\frac{N}{2}}^{\left(2l+1\right)k}} \\ &=\sum_{l=0}^{\frac{N}{4}-1}{x_3\left(l\right)W_{\frac{N}{4}}^{lk}}+W_{\frac{N}{2}}^k\sum_{l=0}^{\frac{N}{4}-1}{x_4\left(l\right)W_{\frac{N}{4}}^{lk}}=X_3\left(k\right)+W_{\frac{N}{2}}^kX_4\left(k\right),\ \ k=0,1,\cdots,\frac{N}{4}-1 \end{aligned} X1(k)=l=04N1x1(2l)W2N2lk+l=04N1x1(2l+1)W2N(2l+1)k=l=04N1x3(l)W4Nlk+W2Nkl=04N1x4(l)W4Nlk=X3(k)+W2NkX4(k),  k=0,1,,4N1 X 1 ( k + N 4 ) = X 3 ( k ) − W N 2 k X 4 ( k ) ,    k = 0 , 1 , ⋯   , N 4 − 1 X_1\left(k+\frac{N}{4}\right)=X_3\left(k\right)-W_{\frac{N}{2}}^kX_4\left(k\right),\ \ k=0,1,\cdots,\frac{N}{4}-1 X1(k+4N)=X3(k)W2NkX4(k),  k=0,1,,4N1同理
X 2 ( k ) = X 5 ( k ) + W N 2 k X 6 ( k ) , X 2 ( k + N 2 ) = X 5 ( k ) − W N 2 k X 6 ( k ) ,    k = 0 , 1 , ⋯   , N 4 − 1 X_2\left(k\right)=X_5\left(k\right)+W_{\frac{N}{2}}^kX_6\left(k\right),X_2\left(k+\frac{N}{2}\right)=X_5\left(k\right)-W_{\frac{N}{2}}^kX_6\left(k\right),\ \ k=0,1,\cdots,\frac{N}{4}-1 X2(k)=X5(k)+W2NkX6(k),X2(k+2N)=X5(k)W2NkX6(k),  k=0,1,,4N1对于最后剩下的四个 N 4 = 2 \dfrac{N}{4}=2 4N=2 点的 DFT,即 X 3 ( k ) 、 X 4 ( k ) 、 X 5 ( k ) 、 X 6 ( k ) , k = 0 , 1 X_3\left(k\right)、X_4\left(k\right)、X_5\left(k\right)、X_6\left(k\right),k=0,1 X3(k)X4(k)X5(k)X6(k)k=0,1,可按定义计算,如对 X 3 ( k ) X_3\left(k\right) X3(k)
X 3 ( k ) = ∑ l = 0 N 4 − 1 x 3 ( l ) W N 4 l k = ∑ l = 0 1 x 3 ( l ) W N 4 l k ⟹ X 3 ( 0 ) = x 3 ( 0 ) + W 2 0 x 3 ( 1 ) = x ( 0 ) + W N 0 x ( 4 ) , X 3 ( 1 ) = x 3 ( 0 ) + W 2 1 x 3 ( 1 ) = x ( 0 ) − W N 0 x ( 4 ) \begin{aligned} &X_3\left(k\right)=\sum_{l=0}^{\frac{N}{4}-1}{x_3\left(l\right)W_{\frac{N}{4}}^{lk}}=\sum_{l=0}^{1}{x_3\left(l\right)W_{\frac{N}{4}}^{lk}}\\ \Longrightarrow &X_3\left(0\right)=x_3\left(0\right)+W_2^0x_3\left(1\right)=x\left(0\right)+W_N^0x\left(4\right),X_3\left(1\right)=x_3\left(0\right)+W_2^1x_3\left(1\right)=x\left(0\right)-W_N^0x\left(4\right) \end{aligned} X3(k)=l=04N1x3(l)W4Nlk=l=01x3(l)W4NlkX3(0)=x3(0)+W20x3(1)=x(0)+WN0x(4),X3(1)=x3(0)+W21x3(1)=x(0)WN0x(4)将上述各式的旋转因子统一为 W N 2 k = W N 2 k W_{\frac{N}{2}}^k=W_N^{2k} W2Nk=WN2k,则一个 8 点的 DFT 可以分解为四个 N 4 \dfrac{N}{4} 4N 点的 DFT ,先做 N 4 \dfrac{N}{4} 4N 点的 DFT,再用相应的两个 N 4 \dfrac{N}{4} 4N 点 DFT 的结果合成 N 2 \dfrac{N}{2} 2N 点的 DFT,从而得到 X 1 ( k ) 、 X 2 ( k ) X_1\left(k\right)、X_2\left(k\right) X1(k)X2(k),最后组合成为 N N N 点的 DFT。上述过程的运算流图如下左图,实际绘制按照如下右图即可。8 点 radix-2 DIT-FFT 的蝶形图

3.4 算法特点

3.4.1 原位运算

  每级计算所得点数相同,且上一级数据不影响下级运算,数据可以保存在原寄存器中。

3.4.2 比特反位序

  若下标 n n n 可用二进制表示为 n = ( b 2 b 1 b 0 ) 2 n=\left(b_2b_1b_0\right)_2 n=(b2b1b0)2,则 FFT 的输入样本序号 k k k 就可用二进制表示为 k = ( b 0 b 1 b 2 ) 2 k=\left(b_0b_1b_2\right)_2 k=(b0b1b2)2

3.4.3 计算复杂度

  对于长度为 N = 2 ν N=2^\nu N=2ν 的序列,共有 ν \nu ν 级蝶形运算,每级有 N 2 \dfrac{N}{2} 2N 个蝶形,每个蝶形有 1 1 1 次复数加法、 2 2 2 次复数乘法,因此 ν \nu ν 级蝶形运算共有
复 数 乘 法 : m F = N 2 ⋅ ν = N 2 log ⁡ 2 N 复 数 加 法 : a F = N ⋅ ν = N log ⁡ 2 N \begin{aligned} &复数乘法:m_F=\frac{N}{2}\cdot\nu=\frac{N}{2}\log_2{N}\\ &复数加法:a_F=N\cdot\nu=N\log_2{N} \end{aligned} mF=2Nν=2Nlog2NaF=Nν=Nlog2N

3.4.4 各类蝶形运算两个点相距的“距离”及 W N k W_N^k WNk 的变化规律

点数 N N N列数蝶形运算的种类数蝶形运算的系数参加蝶形运算的
两数据点的间距
⊤ \top 1 1 1 1 1 1 W 2 0 / W 8 0 = 1 W_2^0/W_8^0=1 W20/W80=1 1 1 1
8 8 8 2 2 2 2 2 2 W 4 0 / W 8 0 , W 4 1 / W 8 2 W_4^0/W_8^0,{W_4^1/W}_8^2 W40/W80,W41/W82 2 2 2
⊥ \bot 3 3 3 4 4 4 W 8 0 , W 8 1 , W 8 2 , W 8 3 W_8^0,W_8^1,W_8^2,W_8^3 W80,W81,W82,W83 4 4 4
⊤ \top 1 1 1 2 0 2^0 20 W 2 0 / W N 0 W_2^0/W_N^0 W20/WN0 1 1 1
∣ \mid 2 2 2 2 1 2^1 21 W 4 0 / W N 0 , W 4 1 / W N N 4 W_4^0/W_N^0,{W_4^1/W}_N^{\frac{N}{4}} W40/WN0,W41/WN4N 2 2 2
∣ \mid 3 3 3 2 2 2^2 22 W 8 0 , W 8 1 , W 8 2 , W 8 3 / W_8^0,W_8^1,W_8^2,W_8^3/ W80,W81,W82,W83/
W N 0 , W N 8 N , W N 2 ⋅ 8 N , W 8 3 ⋅ 8 N W_N^0,W_N^{\frac{8}{N}},W_N^{2\cdot\frac{8}{N}},W_8^{3\cdot\frac{8}{N}} WN0,WNN8,WN2N8,W83N8
4 4 4
2 ν 2^\nu 2ν ⋮ \vdots ⋮ \vdots ⋮ \vdots ⋮ \vdots
∣ \mid ν − 1 \nu-1 ν1 2 ν − 2 2^{\nu-2} 2ν2 W N 2 0 , W N 2 1 , W N 2 2 , ⋯   , W N 2 N 4 − 1 W_{\frac{N}{2}}^0,W_{\frac{N}{2}}^1,W_{\frac{N}{2}}^2,\cdots,W_{\frac{N}{2}}^{\frac{N}{4}-1} W2N0,W2N1,W2N2,,W2N4N1 W N 0 , W N 2 , W N 4 , ⋯   , W N N 2 − 2 W_N^0,W_N^2,W_N^4,\cdots,W_N^{\frac{N}{2}-2} WN0,WN2,WN4,,WN2N2 N 4 \dfrac{N}{4} 4N
⊥ \bot ν \nu ν 2 ν − 1 2^{\nu-1} 2ν1 W N 0 , W N 1 , W N 2 , ⋯   , W N N 2 − 1 W_N^0,W_N^1,W_N^2,\cdots,W_N^{\frac{N}{2}-1} WN0,WN1,WN2,,WN2N1 N 2 \dfrac{N}{2} 2N

  以上述 8 点 FFT 为例,各列蝶形运算的种类数和系数以及参加蝶形运算的两数据点的间距如上表上半部。可见,每列的蝶形类型比前一列增加一倍,参加蝶形运算的两个数据点的间距也增大一倍。最后一列系数用的最多,为 4 个,即 W 8 0 , W 8 1 , W 8 2 , W 8 3 W_8^0,W_8^1,W_8^2,W_8^3 W80,W81,W82,W83;而前一列只用带它偶序号的那一半,即 W 4 0 / W 8 0 , W 4 1 / W 8 2 {W_4^0/W}_8^0,{W_4^1/W}_8^2 W40/W80,W41/W82;第一列只有一个系数即 W 2 0 / W 8 0 {W_2^0/W}_8^0 W20/W80

  上述结论可推广至 N = 2 ν N=2^\nu N=2ν 的一般情况。如上表下半部。从前向后,第一列只有一种类型的蝶形运算 W N 0 W_N^0 WN0,以后的每列蝶形的类型逗逼前一列增加一倍,到第 ν \nu ν 列是 N 2 \dfrac{N}{2} 2N 个蝶形类型,系数是 W N 0 , W N 1 , ⋯   , W N N 2 − 1 W_N^0,W_N^1,\cdots,W_N^{\frac{N}{2}-1} WN0,WN1,,WN2N1,共 N 2 \dfrac{N}{2} 2N 个。从后向前,系数是后一级的偶数序号的那一半。参加蝶形运算的两个数据点的间距,是最末一级最大,其值为 N 2 \dfrac{N}{2} 2N,向前每推进一列,间距减少一半。


4. 基-2 按频率抽取的 FFT 算法

(radix-2 Decimation in Frequency Fast Fourier Transform, radix-2 DIF-FFT, i.e. Sande-Tukey Method)

4.1 算法原理

  设序列 x ( n ) 的 列 长 N = 2 ν x\left(n\right)的列长N=2^\nu x(n)N=2ν ν \nu ν 为整数,则其 DFT
X ( k ) = ∑ n = 0 N − 1 x ( n ) W N n k ,    k = 0 , 1 , ⋯   , N − 1 X\left(k\right)=\sum_{n=0}^{N-1}{x\left(n\right)W_N^{nk}},\ \ k=0,1,\cdots,N-1 X(k)=n=0N1x(n)WNnk,  k=0,1,,N1 x ( n ) x\left(n\right) x(n) 按照 n n n 的顺序分成两个子序列(即可将 X ( k ) X\left(k\right) X(k) 按照奇偶分组)
{ 前 半 子 序 列 x ( n ) 后 半 子 序 列 x ( n + N 2 ) ,    n = 0 , 1 , ⋯   , N 2 − 1 \begin{cases} 前半子序列x\left(n\right)\\ 后半子序列x\left(n+\dfrac{N}{2}\right) \end{cases} ,\ \ n=0,1,\cdots,\frac{N}{2}-1 x(n)x(n+2N),  n=0,1,,2N1则序列的 DFT 可表示为
X ( k ) = ∑ n = 0 N 2 − 1 x ( n ) W N n k + ∑ n = N 2 N − 1 x ( n ) W N n k = ∑ n = 0 N 2 − 1 x ( n ) W N n k + ∑ n = 0 N 2 − 1 x ( n + N 2 ) W N ( n + N 2 ) k = ∑ n = 0 N 2 − 1 [ x ( n ) + W N N 2 k x ( n + N 2 ) ] W N n k = W N N 2 k = ( − 1 ) k ∑ n = 0 N 2 − 1 [ x ( n ) + ( − 1 ) k x ( n + N 2 ) ] W N n k ,    k = 0 , 1 , ⋯   , N 2 − 1 \begin{aligned} X\left(k\right)&=\sum_{n=0}^{\frac{N}{2}-1}{x\left(n\right)W_N^{nk}}+\sum_{n=\frac{N}{2}}^{N-1}{x\left(n\right)W_N^{nk}}=\sum_{n=0}^{\frac{N}{2}-1}{x\left(n\right)W_N^{nk}}+\sum_{n=0}^{\frac{N}{2}-1}{x\left(n+\frac{N}{2}\right)W_N^{(n+\frac{N}{2})k}} \\ &=\sum_{n=0}^{\frac{N}{2}-1}{\left[x\left(n\right)+W_N^{\frac{N}{2}k}x\left(n+\frac{N}{2}\right)\right]W_N^{nk}} \\ &\xlongequal{W_{N}^{\frac{N}{2}k}=\left( -1 \right) ^k}\sum_{n=0}^{\frac{N}{2}-1}{\left[x\left(n\right)+\left(-1\right)^kx\left(n+\frac{N}{2}\right)\right]W_N^{nk}},\ \ k=0,1,\cdots,\frac{N}{2}-1 \end{aligned} X(k)=n=02N1x(n)WNnk+n=2NN1x(n)WNnk=n=02N1x(n)WNnk+n=02N1x(n+2N)WN(n+2N)k=n=02N1[x(n)+WN2Nkx(n+2N)]WNnkWN2Nk=(1)k n=02N1[x(n)+(1)kx(n+2N)]WNnk,  k=0,1,,2N1 W N N 2 k = ( − 1 ) k W_N^{\frac{N}{2}k}=\left(-1\right)^k WN2Nk=(1)k,按照 k k k 的奇偶可将 X ( k ) X\left(k\right) X(k) 分成两部分,令 k = 2 r k=2r k=2r k = 2 r + 1 ,   r = 0 , 1 , ⋯   , N 2 − 1 k=2r+1,\ r=0,1,\cdots,\dfrac{N}{2}-1 k=2r+1, r=0,1,,2N1,则
X ( 2 r ) = ∑ n = 0 N 2 − 1 [ x ( n ) + x ( n + N 2 ) ] W N 2 r n = ∑ n = 0 N 2 − 1 [ x ( n ) + x ( n + N 2 ) ] W N 2 r n X ( 2 r + 1 ) = ∑ n = 0 N 2 − 1 [ x ( n ) − x ( n + N 2 ) ] W N 2 r n = ∑ n = 0 N 2 − 1 [ x ( n ) − x ( n + N 2 ) ] W N n W N 2 r n \begin{aligned} &X\left(2r\right)=\sum_{n=0}^{\frac{N}{2}-1}{\left[x\left(n\right)+x\left(n+\frac{N}{2}\right)\right]W_N^{2rn}}=\sum_{n=0}^{\frac{N}{2}-1}{\left[x\left(n\right)+x\left(n+\frac{N}{2}\right)\right]W_{\frac{N}{2}}^{rn}} \\ &X\left(2r+1\right)=\sum_{n=0}^{\frac{N}{2}-1}{\left[x\left(n\right)-x\left(n+\frac{N}{2}\right)\right]W_N^{2rn}}=\sum_{n=0}^{\frac{N}{2}-1}{\left[x\left(n\right)-x\left(n+\frac{N}{2}\right)\right]W_N^nW_{\frac{N}{2}}^{rn}} \end{aligned} X(2r)=n=02N1[x(n)+x(n+2N)]WN2rn=n=02N1[x(n)+x(n+2N)]W2NrnX(2r+1)=n=02N1[x(n)x(n+2N)]WN2rn=n=02N1[x(n)x(n+2N)]WNnW2Nrn上两式种的前者是输入序列前一半和后一半之和的 N 2 \dfrac{N}{2} 2N 点 DFT,后者是输入序列前一半和后一半之差与 W N n W_N^n WNn 之积的 N 2 \dfrac{N}{2} 2N 点 DFT。令
{ x 1 ( n ) = x ( n ) + x ( n + N 2 ) x 2 ( n ) = [ x ( n ) − x ( n + N 2 ) ] W N n ,    n = 0 , 1 , ⋯   , N 2 − 1 \begin{cases} x_1\left(n\right)=x\left(n\right)+x\left(n+\dfrac{N}{2}\right)\\ x_2\left(n\right)=\left[x\left(n\right)-x\left(n+\dfrac{N}{2}\right)\right]W_N^n \end{cases} ,\ \ n=0,1,\cdots,\frac{N}{2}-1 x1(n)=x(n)+x(n+2N)x2(n)=[x(n)x(n+2N)]WNn,  n=0,1,,2N1
X ( 2 r ) = ∑ n = 0 N 2 − 1 x 1 ( n ) W N 2 r n ,    X ( 2 r + 1 ) = ∑ n = 0 N 2 − 1 x 2 ( n ) W N 2 r n X\left(2r\right)=\sum_{n=0}^{\frac{N}{2}-1}{x_1\left(n\right)W_{\frac{N}{2}}^{rn}},\ \ X\left(2r+1\right)=\sum_{n=0}^{\frac{N}{2}-1}{x_2\left(n\right)W_{\frac{N}{2}}^{rn}} X(2r)=n=02N1x1(n)W2Nrn,  X(2r+1)=n=02N1x2(n)W2Nrn由此,可将 N N N 点 DFT 按频率 k k k 的奇偶分解为两个序列的 N 2 \dfrac{N}{2} 2N 点 DFT。类似地,可以将分离后的序列继续按频率k的奇偶分成两个序列计算,直到每个序列中只含有两个点。此时开始计算 DFT。这种方法称为基-2 按频率抽取的 FFT 算法

4.2 蝶形运算流图符号

基-2 按频率抽取的 FFT 算法的蝶形图

4.3 8 点基-2 DIF-FFT 推导简述

在这里插入图片描述
运算流图如下左图,实际绘制按照如下右图即可。
在这里插入图片描述
对于任何流图,只要保持各节点所连的支路及其传输系数不变,则不论节点位置怎么排列,所得流图总是等效的,最后所得 DFT 结果也是正确的,只是数据的提取和存放次序不同而已。

4.4 算法特点

4.4.1 原位运算

  每级计算所得点数相同,且上一级数据不影响下级运算,数据可以保存在原寄存器中。

4.4.2 比特反位序

  若下标 n n n 可用二进制表示为 n = ( b 2 b 1 b 0 ) 2 n=\left(b_2b_1b_0\right)_2 n=(b2b1b0)2,则 FFT 的输入样本序号 k k k 就可用二进制表示为 k = ( b 0 b 1 b 2 ) 2 k=\left(b_0b_1b_2\right)_2 k=(b0b1b2)2

4.4.3 计算复杂度

  对于长度为 N = 2 ν N=2^\nu N=2ν 的序列,共有 ν \nu ν 级蝶形运算,每级有 N 2 \dfrac{N}{2} 2N 个蝶形,每个蝶形有 1 1 1 次复数加法、 2 2 2 次复数乘法,因此 ν \nu ν 级蝶形运算共有
复 数 乘 法 : m F = N 2 ⋅ ν = N 2 log ⁡ 2 N 复 数 加 法 : a F = N ⋅ ν = N log ⁡ 2 N \begin{aligned} &复数乘法:m_F=\frac{N}{2}\cdot\nu=\frac{N}{2}\log_2{N}\\ &复数加法:a_F=N\cdot\nu=N\log_2{N} \end{aligned} mF=2Nν=2Nlog2NaF=Nν=Nlog2N


5. 基-2 DIT-FFT 和 基-2 DIF-FFT 的比较

radix-2 DIT-FFT 和 radix-2 DIF-FFT 的比较


6. 分裂基 FFT 算法(split-radix FFT Method)

6.1 算法原理(基-4 DIF-FFT同理)

  设序列 x ( n ) x\left(n\right) x(n) 的列长 N = 2 ν N=2^\nu N=2ν ν \nu ν为整数,则其 DFT
X ( k ) = ∑ n = 0 N − 1 x ( n ) W N n k ,    k = 0 , 1 , ⋯   , N − 1 X\left(k\right)=\sum_{n=0}^{N-1}{x\left(n\right)W_N^{nk}},\ \ k=0,1,\cdots,N-1 X(k)=n=0N1x(n)WNnk,  k=0,1,,N1 x ( n ) x\left(n\right) x(n) 按照 n n n 的顺序分成四个子序列
{ 第 一 子 序 列 x ( n ) 第 二 子 序 列 x ( n + N 4 ) 第 三 子 序 列 x ( n + N 2 ) 第 四 子 序 列 x ( n + 3 N 4 ) ,    n = 0 , 1 , ⋯   , N 2 − 1 \begin{cases} 第一子序列x\left(n\right)\\ 第二子序列x\left(n+\dfrac{N}{4}\right)\\ 第三子序列x\left(n+\dfrac{N}{2}\right)\\ 第四子序列x\left(n+\dfrac{3N}{4}\right) \end{cases} ,\ \ n=0,1,\cdots,\frac{N}{2}-1 x(n)x(n+4N)x(n+2N)x(n+43N),  n=0,1,,2N1则序列的 DFT 可表示为
X ( k ) = ∑ n = 0 N 4 − 1 x ( n ) W N n k + ∑ n = N 4 N 2 − 1 x ( n ) W N n k + ∑ n = N 2 3 N 4 − 1 x ( n ) W N n k + ∑ n = 3 N 4 N − 1 x ( n ) W N n k = ∑ n = 0 N 4 − 1 [ x ( n ) W N n k + x ( n + N 4 ) W N ( n + N 4 ) k + x ( n + N 2 ) W N ( n + N 2 ) k + x ( n + 3 N 4 ) W N ( n + 3 N 4 ) k ] = ∑ n = 0 N 4 − 1 [ x ( n ) + x ( n + N 4 ) W N N 4 k + x ( n + N 2 ) W N N 2 k + x ( n + 3 N 4 ) W N 3 N 4 k ] W N n k = ∑ n = 0 N 4 − 1 [ x ( n ) + x ( n + N 4 ) W 4 k + x ( n + N 2 ) W 4 2 k + x ( n + 3 N 4 ) W 4 3 k ] W N n k \begin{aligned} X\left(k\right)&=\sum_{n=0}^{\frac{N}{4}-1}{x\left(n\right)W_N^{nk}}+\sum_{n=\frac{N}{4}}^{\frac{N}{2}-1}{x\left(n\right)W_N^{nk}}+\sum_{n=\frac{N}{2}}^{\frac{3N}{4}-1}{x\left(n\right)W_N^{nk}}+\sum_{n=\frac{3N}{4}}^{N-1}{x\left(n\right)W_N^{nk}} \\ &=\sum_{n=0}^{\frac{N}{4}-1}\left[x\left(n\right)W_N^{nk}+x\left(n+\frac{N}{4}\right)W_N^{\left(n+\frac{N}{4}\right)k}+x\left(n+\frac{N}{2}\right)W_N^{\left(n+\frac{N}{2}\right)k}+x\left(n+\frac{3N}{4}\right)W_N^{\left(n+\frac{3N}{4}\right)k}\right] \\ &=\sum_{n=0}^{\frac{N}{4}-1}{\left[x\left(n\right)+x\left(n+\frac{N}{4}\right)W_N^{\frac{N}{4}k}+x\left(n+\frac{N}{2}\right)W_N^{\frac{N}{2}k}+x\left(n+\frac{3N}{4}\right)W_N^{\frac{3N}{4}k}\right]W_N^{nk}} \\ &=\sum_{n=0}^{\frac{N}{4}-1}{\left[x\left(n\right)+x\left(n+\frac{N}{4}\right)W_4^k+x\left(n+\frac{N}{2}\right)W_4^{2k}+x\left(n+\frac{3N}{4}\right)W_4^{3k}\right]W_N^{nk}} \end{aligned} X(k)=n=04N1x(n)WNnk+n=4N2N1x(n)WNnk+n=2N43N1x(n)WNnk+n=43NN1x(n)WNnk=n=04N1[x(n)WNnk+x(n+4N)WN(n+4N)k+x(n+2N)WN(n+2N)k+x(n+43N)WN(n+43N)k]=n=04N1[x(n)+x(n+4N)WN4Nk+x(n+2N)WN2Nk+x(n+43N)WN43Nk]WNnk=n=04N1[x(n)+x(n+4N)W4k+x(n+2N)W42k+x(n+43N)W43k]WNnk按照 k k k 除以 4 4 4 的余数可将 X ( k ) X\left(k\right) X(k) 分成四部分,分别令 k = 4 r 、 k = 4 r + 1 、 k = 4 r + 2 、 k = 4 r + 3 k=4r、k=4r+1、k=4r+2、k=4r+3 k=4rk=4r+1k=4r+2k=4r+3,其中 r = 0 , 1 , ⋯   , N 4 − 1 r=0,1,\cdots,\dfrac{N}{4}-1 r=0,1,,4N1,则有
{ X ( 4 r ) = ∑ n = 0 N 4 − 1 [ x ( n ) + x ( n + N 4 ) + x ( n + N 2 ) + x ( n + 3 N 4 ) ] W N 4 r n X ( 4 r + 1 ) = ∑ n = 0 N 4 − 1 [ x ( n ) − j x ( n + N 4 ) − x ( n + N 2 ) + j x ( n + 3 N 4 ) ] W N n W N 4 r n X ( 4 r + 2 ) = ∑ n = 0 N 4 − 1 [ x ( n ) − x ( n + N 4 ) + x ( n + N 2 ) − x ( n + 3 N 4 ) ] W N 2 n W N 4 r n X ( 4 r + 3 ) = ∑ n = 0 N 4 − 1 [ x ( n ) + j x ( n + N 4 ) − x ( n + N 2 ) − j x ( n + 3 N 4 ) ] W N 3 n W N 4 r n ,    r = 0 , 1 , ⋯   , N 4 − 1 \begin{cases} X\left(4r\right)=\displaystyle\sum_{n=0}^{\frac{N}{4}-1}{\left[x\left(n\right)+x\left(n+\dfrac{N}{4}\right)+x\left(n+\dfrac{N}{2}\right)+x\left(n+\dfrac{3N}{4}\right)\right]W_{\frac{N}{4}}^{rn}} \\ X\left(4r+1\right)=\displaystyle\sum_{n=0}^{\frac{N}{4}-1}{\left[x\left(n\right)-jx\left(n+\dfrac{N}{4}\right)-x\left(n+\dfrac{N}{2}\right)+jx\left(n+\dfrac{3N}{4}\right)\right]W_N^nW_{\frac{N}{4}}^{rn}} \\ X\left(4r+2\right)=\displaystyle\sum_{n=0}^{\frac{N}{4}-1}{\left[x\left(n\right)-x\left(n+\dfrac{N}{4}\right)+x\left(n+\dfrac{N}{2}\right)-x\left(n+\dfrac{3N}{4}\right)\right]W_N^{2n}W_{\frac{N}{4}}^{rn}} \\ X\left(4r+3\right)=\displaystyle\sum_{n=0}^{\frac{N}{4}-1}{\left[x\left(n\right)+jx\left(n+\dfrac{N}{4}\right)-x\left(n+\dfrac{N}{2}\right)-jx\left(n+\dfrac{3N}{4}\right)\right]W_N^{3n}W_{\frac{N}{4}}^{rn}} \end{cases} ,\ \ r=0,1,\cdots,\frac{N}{4}-1 X(4r)=n=04N1[x(n)+x(n+4N)+x(n+2N)+x(n+43N)]W4NrnX(4r+1)=n=04N1[x(n)jx(n+4N)x(n+2N)+jx(n+43N)]WNnW4NrnX(4r+2)=n=04N1[x(n)x(n+4N)+x(n+2N)x(n+43N)]WN2nW4NrnX(4r+3)=n=04N1[x(n)+jx(n+4N)x(n+2N)jx(n+43N)]WN3nW4Nrn,  r=0,1,,4N1上述过程也是基-4 DIF-FFT 的推导。上式中的偶数序号项合并,得
{ X ( 2 r ) = ∑ n = 0 N 2 − 1 [ x ( n ) + x ( n + N 2 ) ] W N 2 r n , r = 0 , 1 , ⋯   , N 2 − 1 X ( 4 r + 1 ) = ∑ n = 0 N 4 − 1 [ ( x ( n ) − x ( n + N 2 ) ) − j ( x ( n + N 4 ) − x ( n + 3 N 4 ) ) ] W N n W N 4 r n , r = 0 , 1 , ⋯   , N 4 − 1 X ( 4 r + 3 ) = ∑ n = 0 N 4 − 1 [ ( x ( n ) − x ( n + N 2 ) ) + j ( x ( n + N 4 ) − x ( n + 3 N 4 ) ) ] W N 3 n W N 4 r n , r = 0 , 1 , ⋯   , N 4 − 1 \begin{aligned} \begin{cases} X\left(2r\right)=\displaystyle\sum_{n=0}^{\frac{N}{2}-1}{\left[x\left(n\right)+x\left(n+\dfrac{N}{2}\right)\right]W_N^{2rn}}, &r=0,1,\cdots,\dfrac{N}{2}-1 \\ X\left(4r+1\right)=\displaystyle\sum_{n=0}^{\frac{N}{4}-1}{\left[\left(x\left(n\right)-x\left(n+\dfrac{N}{2}\right)\right)-j\left(x\left(n+\dfrac{N}{4}\right)-x\left(n+\dfrac{3N}{4}\right)\right)\right]W_N^nW_{\frac{N}{4}}^{rn}},&r=0,1,\cdots,\dfrac{N}{4}-1 \\ X\left(4r+3\right)=\displaystyle\sum_{n=0}^{\frac{N}{4}-1}{\left[\left(x\left(n\right)-x\left(n+\dfrac{N}{2}\right)\right)+j\left(x\left(n+\dfrac{N}{4}\right)-x\left(n+\dfrac{3N}{4}\right)\right)\right]W_N^{3n}W_{\frac{N}{4}}^{rn}},&r=0,1,\cdots,\dfrac{N}{4}-1 \end{cases} \end{aligned} X(2r)=n=02N1[x(n)+x(n+2N)]WN2rn,X(4r+1)=n=04N1[(x(n)x(n+2N))j(x(n+4N)x(n+43N))]WNnW4Nrn,X(4r+3)=n=04N1[(x(n)x(n+2N))+j(x(n+4N)x(n+43N))]WN3nW4Nrn,r=0,1,,2N1r=0,1,,4N1r=0,1,,4N1
{ x 2 ( n ) = x ( n ) + x ( n + N 2 ) , n = 0 , 1 , ⋯   , N 2 − 1 x 4 1 ( n ) = [ ( x ( n ) − x ( n + N 2 ) ) − j ( x ( n + N 4 ) − x ( n + 3 N 4 ) ) ] W N n , n = 0 , 1 , ⋯   , N 4 − 1 x 4 2 ( n ) = [ ( x ( n ) − x ( n + N 2 ) ) + j ( x ( n + N 4 ) − x ( n + 3 N 4 ) ) ] W N 3 n , n = 0 , 1 , ⋯   , N 4 − 1 \begin{aligned} \begin{cases} x_2\left(n\right)=x\left(n\right)+x\left(n+\dfrac{N}{2}\right), &n=0,1,\cdots,\dfrac{N}{2}-1 \\ x_4^1\left(n\right)=\left[\left(x\left(n\right)-x\left(n+\dfrac{N}{2}\right)\right)-j\left(x\left(n+\dfrac{N}{4}\right)-x\left(n+\dfrac{3N}{4}\right)\right)\right]W_N^n,&n=0,1,\cdots,\dfrac{N}{4}-1 \\ x_4^2\left(n\right)=\left[\left(x\left(n\right)-x\left(n+\dfrac{N}{2}\right)\right)+j\left(x\left(n+\dfrac{N}{4}\right)-x\left(n+\dfrac{3N}{4}\right)\right)\right]W_N^{3n},&n=0,1,\cdots,\dfrac{N}{4}-1 \end{cases} \end{aligned} x2(n)=x(n)+x(n+2N),x41(n)=[(x(n)x(n+2N))j(x(n+4N)x(n+43N))]WNn,x42(n)=[(x(n)x(n+2N))+j(x(n+4N)x(n+43N))]WN3n,n=0,1,,2N1n=0,1,,4N1n=0,1,,4N1则有
{ X ( 2 r ) = ∑ n = 0 N 2 − 1 x 2 ( n ) W N 2 r n = D F T [ x 2 ( n ) ] , r = 0 , 1 , ⋯   , N 2 − 1 X ( 4 r + 1 ) = ∑ n = 0 N 4 − 1 x 4 1 ( n ) W N 4 r n = D F T [ x 4 1 ( n ) ] , r = 0 , 1 , ⋯   , N 4 − 1 X ( 4 r + 3 ) = ∑ n = 0 N 4 − 1 x 4 2 ( n ) W N 4 r n = D F T [ x 4 2 ( n ) ] , r = 0 , 1 , ⋯   , N 4 − 1 \begin{aligned} \begin{cases} X\left(2r\right)=\displaystyle\sum_{n=0}^{\frac{N}{2}-1}{x_2\left(n\right)W_{\frac{N}{2}}^{rn}}=DFT\left[x_2\left(n\right)\right], &r=0,1,\cdots,\dfrac{N}{2}-1 \\ X\left(4r+1\right)=\displaystyle\sum_{n=0}^{\frac{N}{4}-1}{x_4^1\left(n\right)W_{\frac{N}{4}}^{rn}}=\mathrm{DFT}\left[x_4^1\left(n\right)\right],&r=0,1,\cdots,\dfrac{N}{4}-1 \\ X\left(4r+3\right)=\displaystyle\sum_{n=0}^{\frac{N}{4}-1}{x_4^2\left(n\right)W_{\frac{N}{4}}^{rn}}=\mathrm{DFT}\left[x_4^2\left(n\right)\right],&r=0,1,\cdots,\dfrac{N}{4}-1 \end{cases} \end{aligned} X(2r)=n=02N1x2(n)W2Nrn=DFT[x2(n)],X(4r+1)=n=04N1x41(n)W4Nrn=DFT[x41(n)],X(4r+3)=n=04N1x42(n)W4Nrn=DFT[x42(n)],r=0,1,,2N1r=0,1,,4N1r=0,1,,4N1由此,DFT 的偶数部分采用基-2 算法,奇数部分采用基-4 算法,将一个 N N N 点 DFT 的分解为一个 N 2 \dfrac{N}{2} 2N 点 DFT 和两个 N 4 \dfrac{N}{4} 4N 点 DFT。可将分裂基-2/4 算法看成时域分段、频域抽取的方法。先将整个 N N N 点序列在时域分成两段,对于偶数段,在时域进一步分成两段,相当于在频域抽取偶数点 X ( 2 r ) X\left(2r\right) X(2r);对于奇数段,在时域分成 4 段,相当于在频域抽取奇数点 X ( 4 r + 1 ) X\left(4r+1\right) X(4r+1) X ( 4 r + 3 ) X\left(4r+3\right) X(4r+3)。类似地,可将分离后的序列继续分解,直到最后一级。这种方法称为分裂基 FFT 算法

6.2 L 蝶形运算流图符号

L 蝶形运算流图符号

6.3 8 点 radix-2/4 FFT举例

8 点 radix-2/4 FFT举例

6.4 运算量分析

  对于 N = 2 ν N=2^\nu N=2ν 点 DFT,设第 i i i 级有 l i l_i li 个蝶形, j = 0 , 1 , ⋯   , ν − 1 j=0,1,\cdots,\nu-1 j=0,1,,ν1,则
{ l 1 = N 4 l i = N 4 − l j − 1 2 = N 6 [ 1 − ( − 1 2 ) i ] ,    i ≠ 1 ⟹ ∑ i = 1 ν − 1 l i = N 6 [ ν − 2 3 + 2 3 ( − 1 2 ) ν ] \begin{cases} l_1=\dfrac{N}{4}\\ l_i=\dfrac{N}{4}-\dfrac{l_{j-1}}{2}=\dfrac{N}{6}\left[1-\left(-\dfrac{1}{2}\right)^i\right],\ \ i\neq1 \end{cases} \Longrightarrow\sum_{i=1}^{\nu-1}l_i=\frac{N}{6}\left[\nu-\frac{2}{3}+\frac{2}{3}\left(-\frac{1}{2}\right)^\nu\right] l1=4Nli=4N2lj1=6N[1(21)i],  i=1i=1ν1li=6N[ν32+32(21)ν]其中 l i l_i li 来自 L 蝶形的特殊结构。总的复乘次数为 L 蝶形数的两倍,而总的复加次数与基-2 FFT 算法相同,即
复 数 乘 法 : C F = 2 ⋅ ∑ i = 1 ν − 1 l i = N 3 log ⁡ 2 N − 2 N 9 + ( − 1 ) ν 2 9    ∝    N 3 log ⁡ 2 N 复 数 加 法 : a F = N ⋅ ν = N log ⁡ 2 N \begin{aligned} &复数乘法:C_F=2\cdot\sum_{i=1}^{\nu-1}l_i=\frac{N}{3}\log_2{N}-\frac{2N}{9}+\frac{\left(-1\right)^\nu2}{9}\ \ \propto\ \ \frac{N}{3}\log_2{N}\\ &复数加法:a_F=N\cdot\nu=N\log_2{N} \end{aligned} CF=2i=1ν1li=3Nlog2N92N+9(1)ν2    3Nlog2NaF=Nν=Nlog2N显然,复乘次数相比基-2 FFT 算法下降了33%

L 蝶形数与流图中 − j -j j 的个数相等。


7. 实序列的 FFT 算法

7.1 用一个 N N N 点 DFT 同时计算两个 N N N 点实序列的 DFT

  设 x 1 ( n ) , x 2 ( n ) x_1\left(n\right),x_2\left(n\right) x1(n),x2(n) 是相互独立的两个 N N N 点实序列,将 x 1 ( n ) x_1\left(n\right) x1(n) x 2 ( n ) x_2\left(n\right) x2(n) 分别当作一复序列的实部和虚部,即
x ( n ) = x 1 ( n ) + j x 2 ( n ) x\left(n\right)=x_1\left(n\right)+jx_2\left(n\right) x(n)=x1(n)+jx2(n)则由 DFT 的线性性质, x ( n ) x\left(n\right) x(n) 的 DFT 可表示为
X ( k ) = X 1 ( k ) + j X 2 ( k ) X\left(k\right)=X_1\left(k\right)+jX_2\left(k\right) X(k)=X1(k)+jX2(k)再由的复序列的 DFT 性质
X ( k ) = X e p ( k ) + X o p ( k ) X\left(k\right)=X_{ep}\left(k\right)+X_{op}\left(k\right) X(k)=Xep(k)+Xop(k)则有 X 1 ( k ) X_1\left(k\right) X1(k) X 2 ( k ) X_2\left(k\right) X2(k)
X 1 ( k ) = X e p ( k ) = 1 2 [ X ( k ) + X ∗ ( N − k ) ] X_1\left(k\right)=X_{ep}\left(k\right)=\frac{1}{2}\left[X\left(k\right)+X^\ast\left(N-k\right)\right] X1(k)=Xep(k)=21[X(k)+X(Nk)] X 2 ( k ) = − j X o p ( k ) = − j 2 [ X ( k ) − X ∗ ( N − k ) ] X_2\left(k\right)=-{jX}_{op}\left(k\right)=-\frac{j}{2}\left[X\left(k\right)-X^\ast\left(N-k\right)\right] X2(k)=jXop(k)=2j[X(k)X(Nk)]蝶形图如下:
用一个 N点 DFT 同时计算两个 N 点实序列的 DFT的蝶形图

7.2 用一个 N N N 点 DFT 计算一个 2 N 2N 2N 点实序列的 DFT

  设 x ( n ) x\left(n\right) x(n) 是一个 2 N 2N 2N 点的实序列,将其按照奇偶分为两个独立的 N N N 点实序列 x 1 ( n ) , x 2 ( n ) x_1\left(n\right),x_2\left(n\right) x1(n),x2(n),即
{ x 1 ( n ) = x ( 2 n ) x 2 ( n ) = x ( 2 n + 1 ) ,    n = 0 , 1 , ⋯   , N − 1 \begin{cases} x_1\left(n\right)=x\left(2n\right)\\ x_2\left(n\right)=x\left(2n+1\right) \end{cases} ,\ \ n=0,1,\cdots,N-1 {x1(n)=x(2n)x2(n)=x(2n+1),  n=0,1,,N1 x 1 ( n ) x_1\left(n\right) x1(n) x 2 ( n ) x_2\left(n\right) x2(n) 分别当作一复序列的实部和虚部,即
y ( n ) = x 1 ( n ) + j x 2 ( n ) y\left(n\right)=x_1\left(n\right)+jx_2\left(n\right) y(n)=x1(n)+jx2(n)则由 DFT 的线性性质, y ( n ) y\left(n\right) y(n) 的 DFT 可表示为
Y ( k ) = X 1 ( k ) + j X 2 ( k ) Y\left(k\right)=X_1\left(k\right)+jX_2\left(k\right) Y(k)=X1(k)+jX2(k)则由上述讨论,有 X 1 ( k ) X_1\left(k\right) X1(k) X 2 ( k ) X_2\left(k\right) X2(k)
X 1 ( k ) = Y e p ( k ) = 1 2 [ Y ( k ) + Y ∗ ( N − k ) ] X_1\left(k\right)=Y_{ep}\left(k\right)=\frac{1}{2}\left[Y\left(k\right)+Y^\ast\left(N-k\right)\right] X1(k)=Yep(k)=21[Y(k)+Y(Nk)] X 2 ( k ) = − j Y o p ( k ) = − j 2 [ Y ( k ) − Y ∗ ( N − k ) ] X_2\left(k\right)=-{jY}_{op}\left(k\right)=-\frac{j}{2}\left[Y\left(k\right)-Y^\ast\left(N-k\right)\right] X2(k)=jYop(k)=2j[Y(k)Y(Nk)]因此 x ( n ) x\left(n\right) x(n) 的傅里叶变换(类似基-2 DIT)
X ( k ) = ∑ n = 0 2 N − 1 x ( n ) W N n k = ∑ n = 0 N − 1 x ( 2 n ) W 2 N 2 n k + ∑ n = 0 N − 1 x ( 2 n + 1 ) W 2 N ( 2 n + 1 ) k = ∑ n = 0 N − 1 x ( 2 n ) W 2 N 2 n k + W 2 N k ∑ n = 0 N − 1 x ( 2 n + 1 ) W 2 N 2 n k = ∑ n = 0 N − 1 x 1 ( n ) W N n k + W 2 N k ∑ n = 0 N − 1 x 2 ( n ) W N n k = X 1 ( k ) + W 2 N k X 2 ( k ) ,             k = 0 , 1 , ⋯   , N − 1 \begin{aligned} X\left(k\right)&=\sum_{n=0}^{2N-1}{x\left(n\right)W_N^{nk}}=\sum_{n=0}^{N-1}{x\left(2n\right)W_{2N}^{2nk}}+\sum_{n=0}^{N-1}{x\left(2n+1\right)W_{2N}^{\left(2n+1\right)k}} \\ &=\sum_{n=0}^{N-1}{x\left(2n\right)W_{2N}^{2nk}}+W_{2N}^k\sum_{n=0}^{N-1}{x\left(2n+1\right)W_{2N}^{2nk}} \\ &=\sum_{n=0}^{N-1}{x_1\left(n\right)W_N^{nk}}+W_{2N}^k\sum_{n=0}^{N-1}{x_2\left(n\right)W_N^{nk}} \\ &=X_1\left(k\right)+W_{2N}^kX_2\left(k\right),\ \ \ \ \ \ \ \ \ \ \ k=0,1,\cdots,N-1 \end{aligned} X(k)=n=02N1x(n)WNnk=n=0N1x(2n)W2N2nk+n=0N1x(2n+1)W2N(2n+1)k=n=0N1x(2n)W2N2nk+W2Nkn=0N1x(2n+1)W2N2nk=n=0N1x1(n)WNnk+W2Nkn=0N1x2(n)WNnk=X1(k)+W2NkX2(k),           k=0,1,,N1 X ( k + N ) = X 1 ( k ) − W 2 N k X 2 ( k ) ,    k = 0 , 1 , ⋯   , N − 1   X\left(k+N\right)=X_1\left(k\right)-W_{2N}^kX_2\left(k\right),\ \ k=0,1,\cdots,N-1\qquad\qquad\quad\ X(k+N)=X1(k)W2NkX2(k),  k=0,1,,N1 蝶形图如下:

用一个 N 点 DFT 计算一个 2N 点实序列的 DFT的蝶形图


上一篇:Part 3——离散傅里叶变换 DFT
下一篇:Part 5——部分 FFT 蝶形图

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值