快速傅里叶变换 FFT

本篇关注从 DFT 到 FFT 的过渡。


        快速傅里叶变换(FFT)是离散傅里叶变换(DFT)的高效算法,其核心思想是利用 DFT 的对称性和周期性,将计算复杂度从 O(N^2) 降低到 O(N \log N)。接下来概述性地罗列一下推导过程。

1. DFT 的标准定义回顾


这次使用化简友好的书写格式,DFT 的定义式为:

X[k] = \sum_{n=0}^{N-1} x[n] \cdot W_N^{kn}, \quad k = 0,1,\dots,N-1

其中:

W_N = e^{-j \frac{2\pi}{N}} (旋转因子,Twiddle Factor)

W_N^{kn} = e^{-j \frac{2\pi}{N} kn}

直接计算 DFT 需要 N^2 次复数乘法和加法,计算量较大。

2. FFT 的核心思想:分治法(Divide and Conquer)


FFT 的关键在于 将 DFT 分解为更小的 DFT,从而减少计算量。最经典的 FFT 算法是 Cooley-Tukey 算法,适用于 N = 2^m(即 N 是 2 的幂次)。

(1) 将 DFT 分解为奇偶序列


假设 N 是偶数,将输入序列 x[n]  分成 偶数索引 和 奇数索引 两部分:

\begin{cases} x_{\text{even}}[m] = x[2m], \quad m = 0,1,\dots,\frac{N}{2}-1 \\ x_{\text{odd}}[m] = x[2m+1], \quad m = 0,1,\dots,\frac{N}{2}-1 \end{cases}

 
(2) 将 DFT 表示为两个更小的 DFT


利用 DFT 的线性性质,可以将其拆分为两个 N/2 点的 DFT:

X[k] = \sum_{n=0}^{N-1} x[n] W_N^{kn} = \sum_{m=0}^{N/2-1} x[2m] W_N^{k(2m)} + \sum_{m=0}^{N/2-1} x[2m+1] W_N^{k(2m+1)}
 
由于  W_N^{2kn} = W_{N/2}^{kn} ,因此:

X[k] = \underbrace{\sum_{m=0}^{N/2-1} x_{\text{even}}[m] W_{N/2}^{km}}_{\text{DFT of even samples}} + W_N^k \cdot \underbrace{\sum_{m=0}^{N/2-1} x_{\text{odd}}[m] W_{N/2}^{km}}_{\text{DFT of odd samples}}

 
即:

X[k] = X_{\text{even}}[k] + W_N^k X_{\text{odd}}[k], \quad k = 0,1,\dots,N-1
 


(3) 利用周期性减少计算量


由于 X_{\text{even}}[k]X_{\text{odd}}[k] 都是 N/2 点的 DFT,它们的周期是 N/2,因此:

        X_{\text{even}}[k + N/2] = X_{\text{even}}[k], \quad X_{\text{odd}}[k + N/2] = X_{\text{odd}}[k]
于是,我们只需要计算 k = 0,1,\dots,N/2-1,然后利用对称性得到后半部分:

\begin{cases} X[k] = X_{\text{even}}[k] + W_N^k X_{\text{odd}}[k], & k = 0,1,\dots,N/2-1 \\ X[k + N/2] = X_{\text{even}}[k] - W_N^k X_{\text{odd}}[k], & k = 0,1,\dots,N/2-1 \end{cases}

这里利用了  W_N^{k + N/2} = -W_N^k  。

3. 递归计算 FFT


上述分解过程可以 递归进行,直到 N = 1(此时 DFT 就是它本身)。
计算步骤:

分解:将 N-点 DFT 分解为 2 个 N/2-点 DFT。

递归计算:计算 X_{\text{even}}[k] 和 X_{\text{odd}}[k] 。

合并:根据对称性合并结果。

计算复杂度分析
每层递归的计算量:O(N)(合并阶段)。

递归深度:\log_2 N(因为每次 N 减半)。

总计算量:O(N \log N) ,远优于 DFT 的 O(N^2) 。

4. 示例:8 点 FFT(N = 8N=8)


(1) 第一次分解
偶数索引:x[0], x[2], x[4], x[6] (4 点 DFT)

奇数索引:x[1], x[3], x[5], x[7] (4 点 DFT)

(2) 第二次分解
对 4 点 DFT 继续分解:

偶数部分的偶数:x[0], x[4] (2 点 DFT)

偶数部分的奇数:x[2], x[6](2 点 DFT)

奇数部分的偶数:x[1], x[5](2 点 DFT)

奇数部分的奇数:x[3], x[7](2 点 DFT)

(3) 最终分解

2 点 DFT 可以直接计算:

X[0] = x[0] + x[1], \quad X[1] = x[0] - x[1]

(4) 逐层合并

按照对称性逐层合并,最终得到 8 点 DFT 结果。

5. 归纳总结一下


FFT 步骤操作
1. 分治分解    将 N-点 DFT 分解为 2 个 N/2-点 DFT(奇偶分离)
2. 递归计算    对更小的 DFT 继续分解,直到 N = 1
3. 对称合并    利用 W_N^{k+N/2} = -W_N^k  减少计算量
4. 最终结果    通过逐层合并,得到完整的 DFT 频谱


FFT 的优势

计算复杂度从O(N^2)  降到 O(N \log N) ,适用于实时信号处理。

广泛应用于音频处理、图像压缩(JPEG)、通信系统(OFDM)等领域。

数学公式总结
DFT 定义:

X[k] = \sum_{n=0}^{N-1} x[n] W_N^{kn}

FFT 分解:

X[k] = X_{\text{even}}[k] + W_N^k X_{\text{odd}}[k]

X[k + N/2] = X_{\text{even}}[k] - W_N^k X_{\text{odd}}[k]

旋转因子性质:

W_N^{k + N/2} = -W_N^k

通过这种分治策略,FFT 极大提升了 DFT 的计算效率,成为现代数字信号处理的基石。

6. 深入思考环节

 6.1. 递归性的物理意义

FFT 的递归分治不仅是一种数学技巧,还具有深刻的物理和几何意义:

(1) 多分辨率频率分析

物理意义:FFT 的递归分解类似于“逐步聚焦”的频率分析。每一层递归对应不同的频率分辨率,高层(大 N)捕捉低频趋势,底层(小 N)捕捉高频细节。类似小波变换(Wavelet Transform)的多尺度思想。

(2) 旋转因子的几何意义

        W_N^k  的几何解释:在复平面上,W_N^k   是单位圆上的等间隔旋转(角度 \frac{2\pi k}{N} )。

        FFT 的递归性对应旋转因子的 对称分组,将计算量从 N^2 次旋转减少到 N \log N 次。

(3) 信号的能量重新分配

奇偶分解的物理含义:

        偶数样本(x_{\text{even}} )代表信号的“平滑”部分(低频主导)。

        奇数样本(x_{\text{odd}} )代表信号的“细节”部分(高频主导)。

                递归过程逐步分离信号的不同频率成分。

6.2. 几何代数意义

(1) 群论视角

DFT 的矩阵表示:
DFT 可以看作一个 N \times N 的酉矩阵F,其元素为 F_{kn} = W_N^{kn} 。

FFT 的递归性对应矩阵 F 的 块对角化分解,即:

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

其中 D_{N/2} 是对角旋转因子矩阵,P 是排列矩阵。

(2) 张量积结构

FFT 的递归性反映了 信号空间的张量积分解:

\mathbb{C}^N \cong \mathbb{C}^{N/2} \otimes \mathbb{C}^2
这种结构在量子计算中有应用(如量子傅里叶变换)。

(3) 多项式插值

DFT 是多项式求值:
X[k] 可以看作多项式 P(z) = \sum_{n=0}^{N-1} x[n] z^n  在 z = W_N^k  处的值。

FFT 的递归性对应 多项式的分治求值(类似快速多项式乘法)。

6.3. 归纳一下

说得有点乱,整理到表格里: 

层面意义
计算优化通过分治递归将复杂度从 O(N^2)O(N2) 降至 O(N \log N)O(NlogN)。
物理意义多尺度频率分析,旋转因子的对称性,信号能量分层提取。
几何意义复平面上的旋转分组,矩阵的块对角化分解。
代数意义群论中的酉矩阵分解,多项式插值的分治策略。

一言以蔽之,FFT 的递归性不仅是算法优化,更揭示了信号在时域和频域中的深层对称性与结构!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值