基于时间抽取FFT(DIT-FFT),矩阵拆分完整推导

基2时间抽取FFT(DIT-FFT),FN\boldsymbol{F}_NFN 矩阵拆分完整推导

前提:N=2mN = 2^mN=2m,mmm为正整数,旋转因子定义:ωN=e−j2πN\omega_N = e^{-j\frac{2\pi}{N}}ωN=e−jN2π

性质先列出(旋转因子恒等式,后面反复用):

  1. 周期性:ωNn+N=ωNn\omega_N^{n+N} = \omega_N^nωNn+N=ωNn
  2. 对称性:ωNn+N/2=−ωNn\omega_N^{n+N/2} = -\omega_N^nωNn+N/2=−ωNn
  3. 尺度关系:ωN2k=ωN/2k\omega_N^{2k} = \omega_{N/2}^kωN2k=ωN/2k

原始DFT公式:

Xk=∑n=0N−1xnωNkn,k=0,1,...,N−1 Xk=\sum_{n=0}^{N-1} xn\omega_N^{kn},\quad k=0,1,\dots,N-1 Xk=n=0∑N−1xnωNkn,k=0,1,...,N−1

时间抽取:把原序列 xnxnxn 按下标奇偶,拆成两个长度 N/2N/2N/2 的子序列

偶数点:x0r=x2r,r=0,1,...,N2−1x_0r = x2r,\quad r=0,1,\dots,\frac{N}{2}-1x0r=x2r,r=0,1,...,2N−1

奇数点:x1r=x2r+1,r=0,1,...,N2−1x_1r = x2r+1,\quad r=0,1,\dots,\frac{N}{2}-1x1r=x2r+1,r=0,1,...,2N−1

把求和拆成偶数项求和 + 奇数项求和:

Xk=∑r=0N2−1x2rωNk⋅(2r)+∑r=0N2−1x2r+1ωNk⋅(2r+1)=∑r=0N2−1x0r(ωN2)kr+ωNk∑r=0N2−1x1r(ωN2)kr \begin{aligned} Xk &= \sum_{r=0}^{\frac{N}{2}-1}x2r\omega_N^{k\cdot(2r)}+\sum_{r=0}^{\frac{N}{2}-1}x2r+1\omega_N^{k\cdot(2r+1)} \\ &=\sum_{r=0}^{\frac{N}{2}-1}x_0r(\omega_N^2)^{kr}+\omega_N^k\sum_{r=0}^{\frac{N}{2}-1}x_1r(\omega_N^2)^{kr} \end{aligned} Xk=r=0∑2N−1x2rωNk⋅(2r)+r=0∑2N−1x2r+1ωNk⋅(2r+1)=r=0∑2N−1x0r(ωN2)kr+ωNkr=0∑2N−1x1r(ωN2)kr

利用性质 ωN2=ωN/2\omega_N^2=\omega_{N/2}ωN2=ωN/2,代入:

Xk=∑r=0N2−1x0rωN/2kr+ωNk∑r=0N2−1x1rωN/2kr Xk=\sum_{r=0}^{\frac{N}{2}-1}x_0r\omega_{N/2}^{kr}+\omega_N^k\sum_{r=0}^{\frac{N}{2}-1}x_1r\omega_{N/2}^{kr} Xk=r=0∑2N−1x0rωN/2kr+ωNkr=0∑2N−1x1rωN/2kr

观察两个求和式,正好分别是 x0rx_0rx0r 和 x1rx_1rx1r 的N/2点DFT,记:

X0k=DFT(x0r),X1k=DFT(x1r)X_0k=\text{DFT}(x_0r),\quad X_1k=\text{DFT}(x_1r)X0k=DFT(x0r),X1k=DFT(x1r)

X0k=∑r=0N2−1x0rωN/2kr,X1k=∑r=0N2−1x1rωN/2krX_0k=\sum_{r=0}^{\frac{N}{2}-1}x_0r\omega_{N/2}^{kr},\quad X_1k=\sum_{r=0}^{\frac{N}{2}-1}x_1r\omega_{N/2}^{kr}X0k=r=0∑2N−1x0rωN/2kr,X1k=r=0∑2N−1x1rωN/2kr

于是得到:

Xk=X0k+ωNkX1k,k=0,1,...,N2−1(1)Xk=X_0k+\omega_N^k X_1k,\quad k=0,1,\dots,\frac{N}{2}-1 \tag{1}Xk=X0k+ωNkX1k,k=0,1,...,2N−1(1)

上面式子只覆盖前一半频点 k∈0,N/2−1k\in0,N/2-1k∈0,N/2−1

对于后一半频点:令 k′=k−N/2k'=k-N/2k′=k−N/2,也就是 k=k′+N/2k = k'+N/2k=k′+N/2,k′=0,1,...,N/2−1k'=0,1,\dots,N/2-1k′=0,1,...,N/2−1

Xk′+N2=X0k′+N2+ωNk′+N2X1k′+N2 \begin{aligned} X\leftk'+\\frac{N}{2}\\right &= X_0\leftk'+\\frac{N}{2}\\right+\omega_N^{k'+\frac{N}{2}}X_1\leftk'+\\frac{N}{2}\\right \end{aligned} Xk′+2N=X0k′+2N+ωNk′+2NX1k′+2N

X0,X1X_0,X_1X0,X1 是N/2点DFT,具有周期N/2:X0k′+N/2=X0k′, X1k′+N/2=X1k′X_0k'+N/2=X_0k',\ X_1k'+N/2=X_1k'X0k′+N/2=X0k′, X1k′+N/2=X1k′

ωNk′+N/2=ωNk′⋅ωNN/2=−ωNk′\omega_N^{k'+N/2}= \omega_N^{k'}\cdot\omega_N^{N/2}= -\omega_N^{k'}ωNk′+N/2=ωNk′⋅ωNN/2=−ωNk′

代入化简:

Xk′+N2=X0k′−ωNk′X1k′ X\leftk'+\\frac{N}{2}\\right=X_0k'-\omega_N^{k'}X_1k' Xk′+2N=X0k′−ωNk′X1k′

把k'换回k:

Xk+N2=X0k−ωNkX1k,k=0,1,...,N2−1(2) X\leftk+\\frac{N}{2}\\right=X_0k-\omega_N^{k}X_1k,\quad k=0,1,\dots,\frac{N}{2}-1 \tag{2} Xk+2N=X0k−ωNkX1k,k=0,1,...,2N−1(2)

式(1)(2)就是蝶形运算核心公式。

转为矩阵形式推导FN\boldsymbol{F}_NFN分解

原始向量:

x=x\[0,x1,x2,x3,...,xN−1]T\boldsymbol x = x\[0,x1,x2,x3,\dots,xN-1]^Tx=x\[0,x1,x2,x3,...,xN−1]T

时间抽取,奇偶重排后的向量:

xp=x0\[0,x01,...,x0N/2−1, x10,x11,...,x1N/2−1]T\boldsymbol x_p = x_0\[0,x_01,\dots,x_0N/2-1,\ x_10,x_11,\dots,x_1N/2-1]^Txp=x0\[0,x01,...,x0N/2−1, x10,x11,...,x1N/2−1]T

xp\boldsymbol x_pxp 是 x\boldsymbol xx 经过置换矩阵 PN\boldsymbol P_NPN 做下标重排得到:

xp=PNx\boldsymbol x_p = \boldsymbol P_N \boldsymbol xxp=PNx

置换矩阵 PN\boldsymbol P_NPN 的作用:对输入向量做位反转重排(DIT-FFT输入重排)。

xp\boldsymbol x_pxp 前半段是偶数序列x0x_0x0,后半段奇数序列x1x_1x1。

分别对两段做N/2点DFT:

\\begin{bmatrix} \\boldsymbol X_0 \\ \\boldsymbol X_1 \\end{bmatrix} \\begin{bmatrix} \\boldsymbol F_{N/2} \& \\boldsymbol 0 \\ \\boldsymbol 0 \& \\boldsymbol F_{N/2} \\end{bmatrix} \\boldsymbol x_p

FN/2\boldsymbol F_{N/2}FN/2 是N/2阶DFT矩阵。

接下来蝶形合并,写成矩阵:

\\boldsymbol X \\begin{bmatrix} \\boldsymbol I_{N/2} \& \\boldsymbol D_{N/2} \\ \\boldsymbol I_{N/2} \& -\\boldsymbol D_{N/2} \\end{bmatrix} \\begin{bmatrix} \\boldsymbol X_0 \\ \\boldsymbol X_1 \\end{bmatrix}

其中 IN/2\boldsymbol I_{N/2}IN/2 是N/2阶单位矩阵;

DN/2\boldsymbol D_{N/2}DN/2 是对角矩阵,对角元素:DN/2k,k=ωNk, k=0,1,...,N/2−1\boldsymbol D_{N/2}k,k=\omega_N^k,\ k=0,1,\dots,N/2-1DN/2k,k=ωNk, k=0,1,...,N/2−1

把上面式子连起来:

\\boldsymbol X \\begin{bmatrix} \\boldsymbol I_{N/2} \& \\boldsymbol D_{N/2} \\ \\boldsymbol I_{N/2} \& -\\boldsymbol D_{N/2} \\end{bmatrix} \\cdot \\begin{bmatrix} \\boldsymbol F_{N/2} \& \\boldsymbol 0 \\ \\boldsymbol 0 \& \\boldsymbol F_{N/2} \\end{bmatrix} \\cdot \\boldsymbol P_N \\boldsymbol x

又因为DFT定义:X=FNx\boldsymbol X = \boldsymbol F_N \boldsymbol xX=FNx,两边消去x\boldsymbol xx,得到FN\boldsymbol{F}_NFN的矩阵分解:

\\boldsymbol F_N \\begin{bmatrix} \\boldsymbol I_{N/2} \& \\boldsymbol D_{N/2} \\ \\boldsymbol I_{N/2} \& -\\boldsymbol D_{N/2} \\end{bmatrix} \\begin{bmatrix} \\boldsymbol F_{N/2} \& \\boldsymbol 0 \\ \\boldsymbol 0 \& \\boldsymbol F_{N/2} \\end{bmatrix} \\boldsymbol P_N

递归含义

FN\boldsymbol F_NFN 的计算,分解为:

  1. PN\boldsymbol P_NPN:置换矩阵,对原输入向量奇偶重排
  2. 分块对角矩阵:分别计算两个N/2点DFT(递归调用FFT)
  3. 蝶形矩阵:利用旋转因子对角阵,合并两组N/2点DFT结果,得到N点DFT输出

这个分解可以一直递归下去,直到N=2(二阶DFT矩阵)。

N=2最简例子验证

N=2,ω2=e−jπ=−1\omega_2 = e^{-j\pi}=-1ω2=e−jπ=−1

F2=111−1 \boldsymbol F_2=\begin{bmatrix} 1 & 1 \\ 1 & -1 \end{bmatrix} F2=111−1
套用上面拆分:N=2,N/2=1;F1=1\boldsymbol F_1=1F1=1;D1=ω20=1\boldsymbol D_1=\\omega_2\^0=1D1=ω20=1;P2\boldsymbol P_2P2 置换矩阵,N=2奇偶重排不变 P2=I2\boldsymbol P_2=\boldsymbol I_2P2=I2

\\begin{bmatrix} \\boldsymbol I_1 \& \\boldsymbol D_1 \\ \\boldsymbol I_1 \& -\\boldsymbol D_1 \\end{bmatrix} \\begin{bmatrix} \\boldsymbol F_1 \& 0 \\ 0 \& \\boldsymbol F_1 \\end{bmatrix} \\boldsymbol P_2 \\begin{bmatrix} 1 \& 1 \\ 1 \& -1 \\end{bmatrix} \\begin{bmatrix} 1 \& 0 \\ 0 \& 1 \\end{bmatrix} \\begin{bmatrix} 1 \& 0 \\ 0 \& 1 \\end{bmatrix} =\\boldsymbol F_2

等式成立。

补充说明

  1. FFT本质就是不断递归执行这个矩阵分解;不需要显式构造任何一个大FN\boldsymbol{F}_NFN矩阵,只需要在代码中计算蝶形乘加。
  2. DIT(时间抽取):输入重排,输出自然顺序 ;对应的置换矩阵PN\boldsymbol{P}_NPN作用在输入侧。
  3. 如果是DIF(频率抽取FFT),矩阵拆分形式会变,置换矩阵移动到输出侧。
相关推荐
jiang_bluetooth3 天前
编码 OFDM 通信系统完整解析:从 16QAM 调制到 Viterbi 译码
ofdm·fft·qam·viterbi译码
AARONIA1 个月前
频谱分析架构演进笔记:扫频、步进 FFT 与实时架构
fft·频谱分析仪·扫频·spectran v6 plus·安诺尼aaronia·实时频谱分析仪·拓力智慧·零中频
sprlightning1 个月前
LHDC V5 算法深度解析
算法·fft·lhdcv5·imdct·mdct·rice·fac
Briwisdom2 个月前
Conv2D 算子实现深入——im2col、Implicit GEMM、Winograd、FFT 代码级拆解
gemm·fft·matmul·conv2d·implicit gemm·winograd
你是我的解忧王子2 个月前
10进制和16进制 超声波 FFT 变换分析筛选系统误差-ADC采样筛选工具
数据分析·adc·fft·系统误差
aichitang20243 个月前
数论变换(NTT)
c++·算法·fft·ntt
chase20253 个月前
谐波降噪(1) - 基于步进脉冲相位调制
fft·3d打印·谐波降噪·位置脉冲调制·开环步进
惆怅客1234 个月前
UVa12327/LA5705 Xavier is Learning to Count
fft·快速傅里叶变换·容斥原理·icpc·uva·生成函数的乘法
ACQTEC研索仪器4 个月前
DIC 技术测量结构固有振型的优势:以研索仪器VIC-3D系统为例的实测解析
fft·vic-3d·dic技术·dic测量·非接触全场测量·结构动力学·模态振型