傅里叶变换
傅里叶的原理说明:任何连续测量的时序或信号,都可以用不同频率的正弦波信号的无限叠加来表示。
在数学的角度来看,傅里叶变换算法利用直接测量得到的初始信号,用累加的方式来计算该初始信号中不同正弦波信号的 频率、幅值和相位。
而从物理学的角度来看,傅里叶变换可以帮助我们 将时域的信号转为频域 来分析。有些在时域上很难分析的一些信号,在被转换到频域后,更容易找到其特征。此外,频谱 也可以通过傅里叶变换得出。下图可以更好理解时域到频域的转换:

傅里叶变换的4种类型
- 非周期性连续信号傅里叶变换(Fourier Transform)
- 周期性连续信号傅里叶级数 (Fourier Series)
- 非周期性离散信号离散时域傅里叶变换(Discrete Time Fourier Transform)
- 周期性离散信号离散傅里叶变换 (Discrete Fourier Transform, DFT)

快速傅里叶变换
因为计算机只能处理有限长的离散数值序列,因此适用的是 离散傅里叶变换(DFT)。FFT 是 DFT 的一种快速算法。DFT 运算过程如下:
其中,
\text{X}(k) — 频域的值
\text{x}(n) — 时域的采样点
\text{n} — 时域采样点的序列索引
\text{k} — 频域值的索引
\text{N} — 采样点数量
对于在毕设中出现的平面曲线的 descriptor,\text{X}(k) 和 \text{Y}(k) 分别代表 \text{x} 轴和 \text{y} 轴的坐标。
其中,
\text{a}(u) — 频域的值
\text{s}(k) — 复数表示的平面坐标点 \text{k}
\text{k} — 点的索引
\text{u} — 频域值的索引
\text{K} — 曲线中的总点数
快在哪?
由公式可以看出,DFT 后的输出包含与输入数量相同的采样点。对于实数信号,FFT 结果具有共轭对称性:
因此实际上只有 0 到 \text{N}/2 共 \frac{\text{N}}{2}+1 个点包含有用信息。
FFT 相比 DFT,原本时间复杂度为 O(\text{N}^2) 的运算,变成了 O(\text{N}\log \text{N})。
快速算法实现举例
以下式为例(\text{N}=4):
直接计算需要 4 \times 4 = 16 次复数乘法。FFT 采用 Cooley-Tukey 分治策略,将序列按索引的奇偶性分为两组:
其中 \text{W}_4^\text{k} = e^{-j\frac{2\pi}{4}\text{k}} 为旋转因子。
先计算两个 2 点 DFT:
- \text{E}(0) = \text{x}(0) + \text{x}(2), \text{E}(1) = \text{x}(0) - \text{x}(2)
- \text{O}(0) = \text{x}(1) + \text{x}(3), \text{O}(1) = \text{x}(1) - \text{x}(3)
然后通过 蝶形运算 组合得到最终结果:
只需 4 次复数加法 + 2 次复数乘法,远低于直接 DFT 的 16 次复数乘法。当 \text{N} 很大时,这种分治策略将复杂度从 O(\text{N}^2) 降至 O(\text{N}\log \text{N})。
变换前后信号的对应关系
原始信号 幅值 为 \text{A},FFT 结果的每个点(除第一个直流分量外),幅值就是 \text{A} 的 \frac{\text{N}}{2} 倍。直流(DC)分量,也就是第一个点(0 Hz),它的幅值是直流分量的 \text{N} 倍。
每个点的 相位,就是 该频率下 的信号的相位。
\text{N} 个点均匀分布在 0 到 \text{F}_{\text{s}} 的频率轴上(不含 \text{F}_{\text{s}}),第 \text{k} 个点(从 0 开始计数)的频率为:
在某个点 \text{n} 处所能分辨的 频率 为 \frac{\text{F}_{\text{s}}}{\text{N}}。\text{F}_{\text{s}} 为采样频率,\text{N} 为采样点数。
对于实数信号,由于共轭对称性,有效信息仅在 0 到 \text{F}_{\text{s}}/2(Nyquist 频率) 之间。

参考文献
[1] FFT的物理意义 available @7/28/2022
[2] 数字图像处理中的傅里叶(DFT/FFT) available @7/28/2022
评论