绕圈
一本关于频域的小书。
你大概听过「傅里叶变换把信号分解成不同频率的正弦波」。这句话每个字都对,而且几乎没用——它没告诉你凭什么拆得开,没告诉你拆完以后为什么值得,更没告诉你为什么一台每秒采四万四千次的机器会听见一个根本不存在的声音。
这本书只有一台机器:把一段信号缠到一个圆上,看它的质心跑到哪儿去。二十章讲的都是这一件事,以及它每一次被现实修正时,你要付出的账单。
任何变化的东西,都可以写成一堆匀速旋转的和。「频域」不是给同一份数据换一种画法,而是给它换一套坐标系——就像把一个向量从「东北方向 5 米」换成「东 3 米、北 4 米」,数没变,看问题的姿势变了。
值得换的理由只有一条,但这一条大得离谱:时域里那个又慢又拧巴的运算(卷积),在频域里就是逐点相乘。模糊、回声、滤波、平滑、概率分布相加、多项式相乘——全是同一个运算,也就全都在那边变简单。
这本书里能拿到的几个数
| 第几章 | 数 | 它推翻了什么 |
|---|---|---|
| 04 | 98.93% | 把 F 的幅度谱和 T 的相位谱拼起来重建,出来的图和 T 有 98.93% 的格子对得上。所有人都在看幅度谱,而图像的内容几乎全在相位里 |
| 06 | 2.39 × 10⁻¹² | 1400 Hz 与 400 Hz,用 1000 Hz 采样,采出来的一千个数最大只差 2.39 × 10⁻¹²——不是「接近」,是数学上同一串数。事后没有任何算法能分开它们 |
| 08 | 1 → 41 | 同一个纯音,频率挪动半个格子,装下 99% 能量所需的谱线从 1 根变成 41 根。多出来的四十根不是噪声,是你那一刀切出来的 |
| 10 | 0.0795775 | 四个宽度完全不同的高斯脉冲,σt × σf 全都等于 1/4π。这条不等式和海森堡测不准原理是同一条定理,量子力学只是换了单位 |
| 14 | 402 ms → 2.1 ms | 两条 16384 长的序列做卷积:老老实实乘 402 毫秒,绕道频域 2.1 毫秒,结果相对误差 8.4 × 10⁻¹³ |
| 15 | 8.9490% | 用有限个正弦逼近一个方波,边沿会翘起 8.9490%。抽头从 21 加到 401,超调从 9.1164% 只掉到 8.9493%——它不收敛到 0 |
| 16 | −20 dB | 信号比噪声弱一百倍,肉眼、示波器、频谱仪全都看不见。但只要你手里有它的样板,相关一遍,它就从噪声里跳出来到 7.1 σ |
| 17 | 6.2 小时 → 29 毫秒 | 本机实测:2²⁰ 个点的变换,按定义式算要 6.2 小时,走 FFT 是 29 毫秒 |
这些数字全部是生成这本书时在本机现算的,并且和本机的 numpy 2.5.2 逐项核对过(20 项,全部一致,包括 JPEG 标准里那块著名的 8×8 方块的 DCT 系数 −415.375)。书里没有一个手写的数。
目录
转起来
TURN世界上没有波,只有旋转。整本书只有一台机器,这一卷把它装好——装完你会发现,傅里叶变换那个吓人的公式,就是「把线缠到圆上,然后取平均」。
只看几眼
GLIMPSE前一卷假装你能连续地看着信号。真机器不能——它只能一眼一眼地看,而且只看有限长的一段。这两条限制,制造了这本书里全部的麻烦。
付账
PAY这一卷全是交易。想要窄的主瓣,就得忍受高的旁瓣;想要频率看得准,就得放弃时间看得准。没有一样是白拿的,而最后那笔账单,签字的是傅里叶本人。
相乘
MULTIPLY到这里为止,频域只是「另一种看法」。这一卷回答那个真正的问题:为什么值得跑一趟。答案是一条定理——那边的乘法,就是这边的卷积。
算得动
AFFORD最后一卷回答「那为什么是今天」。1965 年(其实是 1805 年)的一个分治算法,把前面所有这些东西从论文里搬进了你的耳机、相机和手机基带。
写给谁
写给这样的人
- 会写代码,但没系统学过信号处理。你调用过
fft(),也大概知道它返回一个复数数组,但从来没弄清楚那些复数是什么、为什么长度是 N 而不是 N/2、为什么第一个数总是所有样本的和。 - 数学不怕,但要从直觉进入。书里会出现积分和复指数,但每一个都是先说清楚「我们要满足哪几条」,再推出「所以只能长这样」。没有一个公式是空降的。
- 做过和信号沾边的活。音频、图像、动画曲线、传感器读数、时间序列、模型训练里的谱归一化——这些地方每天都在用频域,而大部分代码是抄来的。
- 喜欢那种「学完之后别的东西也跟着变清楚」的知识。这一门尤其明显:学完你会在概率论、量子力学、晶体学、甚至群论里看见同一台机器。
不打算做的事
- 不做严格证明。这本书里所有的「因此」都是可以在纸上补严的,但补严不在这本书的范围里。要严格版,第 20 章给了书单。
- 不讲滤波器设计的工程细节。双线性变换、椭圆滤波器阶数选择、极点零点摆放——这些是专门一本书的事,这里只讲到「为什么理想滤波器不存在」为止。
- 不在页面里塞交互 Demo。每章末尾给你一段几十行的、能直接粘进 Python 或浏览器控制台的代码,和一个已经跑出来的结果表。你自己的机器比这个页面强得多。
- 不假装频域万能。第 11、12 章会花整整两章说它什么时候不好使,第 18 章会说为什么工业界的图像压缩根本没用它。
怎么读这本书
三条建议
- 卷 I 别跳。它只有四章,而后面十六章全部建立在第 2 章那台机器上。如果你在第 5 章开始觉得吃力,八成是第 2 章那张图没有真的看进去。
- 每章开头有一个「▷ 先猜一下」,答案在章末的「◇ 揭晓」里。先猜,猜错更好——错的那一下,就是这一章对你的信息量。
- 每章末尾有一个「⟳ 换个域看」。它把这一章的结论在另一个域里重讲一遍。这是全书唯一的自指组件:这本书讲的就是「同一件事换个坐标系会变简单」,那这本书自己也该每章示范一次。