文章目录
《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=0∑N−1x(n)WNnk=n=0∑N−1{ℜ[x(n)]+jℑ[x(n)]}{ℜ[WNnk]+jℑ[WNnk]}=n=0∑N−1{ℜ[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(2N−1),均与
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)∗=WN−nk=WN(N−n)k=WNn(N−k) |
周期性 | 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(N−n)]ℜ[WN(N−n)k]={ℜ[x(n)]+ℜ[x(N−n)]}ℜ[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(N−n)]ℑ[WN(N−n)k]=−{ℑ[x(n)]−ℑ[x(N−n)]}ℑ[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=0∑N−1x(n)WNnk, k=0,1,⋯,N−1将
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,⋯,2N−1则序列 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=0∑2N−1x(2r)WN2rk+r=0∑2N−1x(2r+1)WN(2r+1)k=r=0∑2N−1x1(r)W2Nrk+WNkr=0∑2N−1x2(r)W2Nrk=DFT[x1(n)]+WNkDFT[x2(n)]=X1(k)+WNkX2(k), k=0,1,⋯,2N−1由旋转因子的周期性,即
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,⋯,2N−1类似地,可以将分离后的序列继续按奇偶序号分成两个序列计算,直到每个序列中只含有两个点。此时开始计算 DFT。这种方法称为基-2 按时间抽取的 FFT 算法。
3.2 蝶形运算流图符号
3.3 8 点基-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=0∑4N−1x1(2l)W2N2lk+l=0∑4N−1x1(2l+1)W2N(2l+1)k=l=0∑4N−1x3(l)W4Nlk+W2Nkl=0∑4N−1x4(l)W4Nlk=X3(k)+W2NkX4(k), k=0,1,⋯,4N−1
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,⋯,4N−1同理
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,⋯,4N−1对于最后剩下的四个
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=0∑4N−1x3(l)W4Nlk=l=0∑1x3(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。上述过程的运算流图如下左图,实际绘制按照如下右图即可。
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⋅ν=2Nlog2N复数加法:aF=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,WN2⋅N8,W83⋅N8 | 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,⋯,W2N4N−1 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,⋯,WN2N−2 | 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,⋯,WN2N−1 | 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,⋯,WN2N−1,共 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=0∑N−1x(n)WNnk, k=0,1,⋯,N−1将
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,⋯,2N−1则序列的 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=0∑2N−1x(n)WNnk+n=2N∑N−1x(n)WNnk=n=0∑2N−1x(n)WNnk+n=0∑2N−1x(n+2N)WN(n+2N)k=n=0∑2N−1[x(n)+WN2Nkx(n+2N)]WNnkWN2Nk=(−1)kn=0∑2N−1[x(n)+(−1)kx(n+2N)]WNnk, k=0,1,⋯,2N−1由
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,⋯,2N−1,则
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=0∑2N−1[x(n)+x(n+2N)]WN2rn=n=0∑2N−1[x(n)+x(n+2N)]W2NrnX(2r+1)=n=0∑2N−1[x(n)−x(n+2N)]WN2rn=n=0∑2N−1[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,⋯,2N−1则
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=0∑2N−1x1(n)W2Nrn, X(2r+1)=n=0∑2N−1x2(n)W2Nrn由此,可将
N
N
N 点 DFT 按频率
k
k
k 的奇偶分解为两个序列的
N
2
\dfrac{N}{2}
2N 点 DFT。类似地,可以将分离后的序列继续按频率k的奇偶分成两个序列计算,直到每个序列中只含有两个点。此时开始计算 DFT。这种方法称为基-2 按频率抽取的 FFT 算法。
4.2 蝶形运算流图符号
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⋅ν=2Nlog2N复数加法:aF=N⋅ν=Nlog2N
5. 基-2 DIT-FFT 和 基-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=0∑N−1x(n)WNnk, k=0,1,⋯,N−1将
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,⋯,2N−1则序列的 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=0∑4N−1x(n)WNnk+n=4N∑2N−1x(n)WNnk+n=2N∑43N−1x(n)WNnk+n=43N∑N−1x(n)WNnk=n=0∑4N−1[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=0∑4N−1[x(n)+x(n+4N)WN4Nk+x(n+2N)WN2Nk+x(n+43N)WN43Nk]WNnk=n=0∑4N−1[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=4r、k=4r+1、k=4r+2、k=4r+3,其中
r
=
0
,
1
,
⋯
,
N
4
−
1
r=0,1,\cdots,\dfrac{N}{4}-1
r=0,1,⋯,4N−1,则有
{
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=0∑4N−1[x(n)+x(n+4N)+x(n+2N)+x(n+43N)]W4NrnX(4r+1)=n=0∑4N−1[x(n)−jx(n+4N)−x(n+2N)+jx(n+43N)]WNnW4NrnX(4r+2)=n=0∑4N−1[x(n)−x(n+4N)+x(n+2N)−x(n+43N)]WN2nW4NrnX(4r+3)=n=0∑4N−1[x(n)+jx(n+4N)−x(n+2N)−jx(n+43N)]WN3nW4Nrn, r=0,1,⋯,4N−1上述过程也是基-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=0∑2N−1[x(n)+x(n+2N)]WN2rn,X(4r+1)=n=0∑4N−1[(x(n)−x(n+2N))−j(x(n+4N)−x(n+43N))]WNnW4Nrn,X(4r+3)=n=0∑4N−1[(x(n)−x(n+2N))+j(x(n+4N)−x(n+43N))]WN3nW4Nrn,r=0,1,⋯,2N−1r=0,1,⋯,4N−1r=0,1,⋯,4N−1令
{
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,⋯,2N−1n=0,1,⋯,4N−1n=0,1,⋯,4N−1则有
{
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=0∑2N−1x2(n)W2Nrn=DFT[x2(n)],X(4r+1)=n=0∑4N−1x41(n)W4Nrn=DFT[x41(n)],X(4r+3)=n=0∑4N−1x42(n)W4Nrn=DFT[x42(n)],r=0,1,⋯,2N−1r=0,1,⋯,4N−1r=0,1,⋯,4N−1由此,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 蝶形运算流图符号
6.3 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=4N−2lj−1=6N[1−(−21)i], i=1⟹i=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=2⋅i=1∑ν−1li=3Nlog2N−92N+9(−1)ν2 ∝ 3Nlog2N复数加法:aF=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∗(N−k)]
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∗(N−k)]蝶形图如下:
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,⋯,N−1将
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∗(N−k)]
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∗(N−k)]因此
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=0∑2N−1x(n)WNnk=n=0∑N−1x(2n)W2N2nk+n=0∑N−1x(2n+1)W2N(2n+1)k=n=0∑N−1x(2n)W2N2nk+W2Nkn=0∑N−1x(2n+1)W2N2nk=n=0∑N−1x1(n)WNnk+W2Nkn=0∑N−1x2(n)WNnk=X1(k)+W2NkX2(k), k=0,1,⋯,N−1
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,⋯,N−1 蝶形图如下: