在信号处理中,离散傅里叶变换(DFT)无疑是最重要的方法之一。但它的数学形式常让人望而生畏:求和符号里包含复数项 e^(-iwt),其中 e 是自然常数,i 是虚数单位,w 是角频率,t 是时间。

我设计了下面这个练习,想说明一个事实:在复杂的符号背后,DFT 本质上只是一连串可以用手算完成的矩阵乘法。✍️ 一旦你看到这一点,就不会惊讶于深度神经网络——同样由矩阵乘法和激活函数构成——也能学会执行 DFT,从而高效地处理和分析信号

打开网易新闻 查看精彩图片

学习 vs 固定:U-Net 从数据中学习滤波器,在空间域处理信号;DFT 则是经典的另一极:一个由人设计而非学习得到的固定变换,把同一信号在频率域中看作若干余弦波的叠加。

DFT 是如何工作的?先从设定开始。

第 1 步,共 12 步:给定条件

频率域中的三个信号 A、B、C:

A = cos(w) + 2cos(2w)
B = cos(w) + cos(3w) + cos(4w)
C = -cos(2w) + cos(3w)

每个信号都是四个频率(1w、2w、3w、4w)余弦波的加权和。我们将先用逆 DFT 把这几个信号转换到时域,再展示 DFT 可以把它们还原为原来的频域表示。

时域信号 X 在 1t 到 10t 共 10 个时间点采样:

X = [-2.5, -1.8, 3, -0.7, -1.0, -0.7, 3, -1.8, -2.5, 5]

假设 X 也是同样四个余弦波的加权和,但我们不知道权重;后面会用 DFT 把这些权重找出来。

第 2 步,共 12 步:频率矩阵 F

把 A、B、C 的系数写成矩阵 F。每个信号占一行,每个频率对应一列。于是 F 的第一行来自 A:cos(w) 的系数是 1,2cos(2w) 的系数是 2,cos(3w) 和 cos(4w) 的系数是 0;B 行是 [1, 0, 1, 1];C 行是 [0, -1, 1, 0]。

接下来要做的,就是让这些行向量与余弦波采样值构成的矩阵相乘,从而看到“频域 → 时域 → 频域”的完整循环。这个过程虽然步骤多,但每一步都只是加法、减法和乘法,完全可以拿纸笔算完。继续往下算,你会看到 DFT 并不是黑魔法,而是一个可验证、可手算的线性代数过程。