频率不是音高,是每秒转几圈
大多数人对傅里叶的全部印象,是那句「把信号分解成不同频率的正弦波」。这句话有一个很坏的副作用:它让人以为这是声音的事,是音频工程师的手艺。这一章要做的第一件事,就是把「波」和「声音」这两个词都拿掉——留下的那个东西,能同时处理你的照片、你的心电图、一块硅晶体,和一个量子算法。
下面四样东西:
① 一段三分钟的录音 ② 一张 4000 × 3000 的照片 ③ 一年的股票收盘价 ④ 一块硅晶体的 X 射线衍射图样
问:其中哪几样可以用这本书里这一台机器去分析?(注意,问的不是「哪几样有人这么做过」,而是「哪几样在数学上用的是同一个变换」。)
先把「波」这个词扔掉
打开任何一本教材,第一页画的都是一条起起伏伏的线,旁边写着「正弦波」。这个图害人不浅,因为它让人以为正弦是一种形状。
正弦不是形状。正弦是影子。
拿一个点,让它在一个圆上匀速转圈。盯着它的高度看——只看高度,不看左右——你会看见这个高度先升到顶,再降到底,再升回来。把这个高度随时间画出来,那就是正弦曲线。
换句话说:
sin(θ) 和 cos(θ) 不是「两个三角函数」,
是圆上那一点的两个坐标:
圆上转到角度 θ 的那一点 = ( cos θ , sin θ )
└──┬──┘ └──┬──┘
横坐标 纵坐标
所以:
「一条 3 Hz 的正弦曲线」 = 「一个每秒转 3 圈的点的纵坐标」
这不是一个比喻,是定义。中学课本先教三角形再教圆,所以大部分人脑子里 sin 是「对边比斜边」;但在这本书之后的所有页里,sin 和 cos 就是圆上那个点的两个坐标,没有别的意思。
于是「频率」这个词的意思也跟着变了:
频率 = 每秒转几圈。单位 Hz 的字面意思就是「每秒几次」,而这个「次」指的是转完一整圈。
3 Hz 就是每秒转三圈;转一圈要 1/3 秒;转到 1/12 秒的时候,已经走完了一圈的四分之一,也就是 90°——这时候纵坐标(正弦)正好在最高点 1.000000,横坐标(余弦)正好是 0.000000。
这本书往后所有的内容,都是这一句话的展开:任何变化的东西,都可以写成一堆匀速旋转的和。「分析一个信号」的全部意思,就是「查出里面有哪些转速,各转得多快多大」。
为什么非得说「旋转」,说「正弦」不行吗
行,但会漏掉一半,而且漏掉的正好是最要紧的那一半。
一个匀速旋转,需要三个数才能描述清楚:转速(每秒几圈)、半径(转得多大)、起始角(时钟归零的那一刻,它站在哪儿)。
如果你只盯着影子看,第三个数就变得很别扭——它变成了「这条正弦曲线在时间轴上被推了多远」。教材管它叫相位,然后大多数人就把它当成一个可以忽略的技术细节。第 4 章会给出一个实验,说明这个「技术细节」里藏着一张图几乎全部的内容。
说「旋转」的第二个好处,是它自然地要求你用两个数记住一个状态(横坐标和纵坐标)。而「一个数记住两件事」这件事,数学里早就有专门的工具,叫复数。
复数在这本书里没有任何神秘的意思。它就是平面上的一个点,写成 a + bi 的时候,a 是横坐标,b 是纵坐标。「虚数」这个译名是历史事故(英文 imaginary 同样是笛卡尔当年的贬义词),它一点也不比负数更虚。
复数唯一比「一对实数」多出来的本事是:它自带一套乘法,而这套乘法的几何意义正好就是「旋转 + 缩放」。两个复数相乘,角度相加,长度相乘。这就是它在这本书里出现的全部理由。
于是那个吓人的记号 e^(iθ),意思只是「圆上角度为 θ 的那一点」:
e^(iθ) = cos θ + i · sin θ ← 圆上的点,横坐标 cos θ,纵坐标 sin θ
θ = π 的时候,那一点转到了圆的最左边,坐标是 (−1, 0):
e^(iπ) = −1 本机现算 cos(π) + 1 = 0.0e+0
传说中「最美的公式」在这里只是一句大白话:转半圈,到对面。
往后看到 e^(-i2πft),就在心里念成:「一个每秒转 f 圈、正在往顺时针方向转的点,此刻在哪儿」。整本书里它不表示别的意思。
你以为它是 X,其实它是 Y
这一节是整本书的地图。左边是大多数人默认的理解,右边是学完这本书之后会换上的那个。如果你只带走一样东西,带走这张表。
| 你以为它是 X | 其实它是 Y |
|---|---|
| 傅里叶变换是「分解成正弦波」 | 是换一套坐标系。就像把「东北方向 5 米」写成「东 3 米、北 4 米」——数据一个比特都没变,只是换了一组基准方向来记它 |
| 频域是给同一份数据换一种画法 | 是给它换一个乘法变简单的地方。时域里那个又慢又拧巴的卷积,到了频域就是逐点相乘。这是全书唯一值得跑一趟的理由(第 14 章) |
| 频率就是音高 | 频率是每秒转几圈。音高是人耳对它取对数之后的感受;而在图像里,「频率」跟时间和听觉都没有半点关系 |
| 采样率越高越好,是精度问题 | 是阈值问题。低于两倍带宽,信息不可逆地丢掉;达到了,就一点都不丢(第 5 章,实测重建误差 3.86 × 10⁻¹³) |
| 采样丢掉的高频「没了」 | 没有没,它换了个身份混进低频里,而且事后没有任何算法能把它认出来(第 6 章) |
| 频谱上那些毛刺是噪声 | 很多时候是你把信号剪断这个动作本身造出来的。一个绝对纯净的音,能糊到 41 根谱线上去(第 8 章) |
| 幅度谱是信号的「特征」 | 幅度谱丢掉了一半信息,而且丢的是更重要的那一半。把两张图的相位互换,你会看见换脸(第 4 章) |
| 「测不准原理」是量子力学的性质 | 是傅里叶的性质。任何一对互为傅里叶变换的量都逃不掉,量子力学只是把单位换成了动量和位置(第 10 章) |
| 滤波是「把某些频率删掉」 | 是拿频谱去乘一条曲线。而理想的那条曲线(通带 1、阻带 0)对应的时域动作需要用到未来,所以造不出来(第 15 章) |
| 信号弱到淹没在噪声里就没救了 | 只要你手里有它的样板,相关一遍就能捞出来。GPS 的信号到你手机时比噪声弱几百倍(第 16 章) |
| FFT 是傅里叶变换的一种 | FFT 不是一种变换,是算同一个变换的一个快法。结果一模一样,只是从 6.2 小时变成 29 毫秒(第 17 章) |
| 中心极限定理是概率论的定理 | 它可以用傅里叶一行证明:概率密度相加就是卷积,卷积就是频域相乘,而反复相乘会把任何东西压成高斯(第 19 章) |
这张表里每一行,后面都有一整章。
为什么这台机器能同时对付照片和晶体
回到开头那个问题。答案是 D:四样全部,而且不是「打比方」的同一台,是同一个公式、同一段代码、同一个 fft() 调用。原因在于:这台机器根本不关心横轴是什么。
- 录音:横轴是时间(秒),「频率」的单位是 Hz(每秒几圈)。
- 照片:横轴是位置(像素),「频率」的单位是每毫米几圈——衡量的是明暗变化有多密。一大片天空是低频,一件条纹衬衫是高频。第 18 章会用真实的 JPEG 数据把这件事做完。
- 股价:横轴是天。「频率」的单位是每年几圈,正好对应「季节性」这个词。
- 晶体衍射:这一个最有意思,因为这里没有人在算傅里叶变换——是物理本身在算。X 射线穿过晶体后落在底片上的图样,就是晶体内部电子密度的傅里叶变换。1953 年那张著名的 51 号照片,就是 DNA 的傅里叶变换;沃森和克里克要做的事,是把它逆变换回去。第 19 章会回到这里。
把横轴换成任何东西,只要「平移它一下,规则不变」(往后挪一秒和往后挪一天没有本质区别,往右挪一个像素和往右挪十个像素也没有),这台机器就成立。第 19 章会说清楚,这个「平移不变」才是它真正的入场券——它甚至可以用在一个群上,而那正是 Shor 算法拆大整数的那一步。
这本书里最短的一个实验:给四个数做傅里叶变换,看看出来的是什么。
import numpy as np print(np.fft.fft([1, 2, 3, 4]))
会打出:
[10.+0.j -2.+2.j -2.+0.j -2.-2.j]
四个数进去,四个复数出来。第一个 10 是 1+2+3+4——第 0 根谱线永远是所有样本的和(转速为 0 的那个「旋转」根本不转,于是「缠一圈取平均」就退化成了直接求和)。剩下三个是转速 1、2、3 圈的那三个分量。第 2 章会让你能一眼看出这四个数是怎么来的。
没装 numpy 也行,浏览器控制台里两行就能算完这个四点变换:
const x = [1, 2, 3, 4], N = 4;
for (let k = 0; k < N; k++) {
let re = 0, im = 0;
for (let n = 0; n < N; n++) {
const a = -2 * Math.PI * k * n / N;
re += x[n] * Math.cos(a);
im += x[n] * Math.sin(a);
}
console.log(k, re.toFixed(3), im.toFixed(3));
}
python3 -c "import numpy as np; print(np.fft.fft([1,2,3,4]))"
在线跑:python.org/shell(numpy 未必有)或任意浏览器按 F12 打开控制台,上面那段 JS 直接粘。
你今天已经用过这台机器至少几百次,只是它没告诉你:
- 你听的每一秒音乐。MP3 / AAC / Opus 全都在频域里工作——它们扔掉的不是「小的样本」,是「你听不见的频率分量」。第 11 章会说清楚它们怎么切段。
- 你手机的每一格信号。4G / 5G / Wi-Fi 用的 OFDM,字面意思是「正交频分复用」,整条空口协议就架在第 3 章那条正交性上。
- 你相册里的每一张 JPEG。它把图切成 8 × 8 的小块,每块做一次余弦变换,然后按频率高低分配比特。第 18 章会拿 JPEG 标准里那块著名的方块从头算一遍。
- 医院里的每一次 MRI。核磁共振机器直接采集的就是频域数据(业内叫 k-空间),你看到的那张脑片是逆变换出来的。它比 CT 更依赖这本书的第 7 章:扫得越久,分辨率越高。
- 电网。50 Hz 或 60 Hz 是全国电网同步转动的转速;调度中心盯着的那个数字,就是这个转速的实时估计。
「频率就是音高。频率高 = 声音尖。」
在纯音上,这句话成立。问题是现实里几乎没有纯音。
拿小提琴和长笛同时拉一个 440 Hz 的 A:它们的基频完全一样,你却一耳朵能分开——差别全在那一串泛音的强弱比例上,也就是频谱的形状,不是频谱的位置。
更远一点:把 440 Hz 和 880 Hz 放在一起,人耳听到的是「同一个音高了八度」,而在这台机器眼里,它们只是两个不同的转速,一个是另一个的两倍,没有任何特殊地位。「八度」是听觉系统的事,不是频率的事。
最要命的是:在一张照片上,「高频」指的是明暗变化很密——那里既没有时间,也没有声音,「音高」这个词一点意义都没有。判据是:频率永远是「每单位横轴转几圈」,横轴是什么,这个词就是什么单位。
正确答案是 D:四样全部,而且是同一个变换、同一段代码。
A 「傅里叶是做音频的」——这是最常见的误会,来源是教材第一页那张正弦波图。这台机器不关心横轴是什么,只要求「平移它一下规则不变」。它在图像、晶体学、概率论、量子力学里的分量,加起来比在音频里重得多。 B 「②④ 不是时间序列」——对,但这不构成障碍。照片是二维的,做法是先对每一行做一次一维变换,再对每一列做一次,两步就完事(第 4 章的那个实验就是这么算的)。多一个维度只是多一遍循环。 C 「④ 是物理现象不是数据处理」——恰恰相反,这是四样里最纯粹的一个。没有人在那里算傅里叶变换,是自然界在算:远场衍射图样在数学上就是孔径的傅里叶变换。这是这本书最深的一层——它不只是一种分析方法,它是波这种东西的行为方式本身。这一栏会在每一章末尾出现,把刚讲完的东西在另一个域里重讲一遍。二十遍之后,「换个地方看」会从一个技巧变成一种下意识。
一段 3 Hz 的正弦,是一条上下起伏的曲线;你要用几百个采样点才能把它记下来。 同一个东西,是一根立在 3 的位置上的线;你只要记三个数:位置 3、高度(半径)、起始角。请注意这里发生了什么:同一份信息,一边要几百个数,另一边要三个数。压缩、去噪、滤波、识别——这本书后面所有的好处,根子上都是这一句话。反过来也一样成立:有些东西在时域里三个数就够(比如「第 500 个样本处有一记敲击」),到了频域反而要一千个数。没有哪个域天然更好,只有「对这份数据哪个域更省」。第 12 章会把这句话变成一张具体的账单。
这一章的一句话
正弦不是一种形状,是一个匀速旋转的影子;频率不是音高,是每秒转几圈。剩下十九章讲的,都是「怎么查出里面有哪些转速」,以及现实每次修正这个问题时开出的账单。
下一章装那台机器。它只有一个动作:把信号缠到一个圆上,然后取平均。用它去查同一段信号里有没有 3 Hz,答案是 0.5000;去查有没有 4 Hz,答案是 4.6 × 10⁻¹⁷。这两个数之间那十七个数量级的鸿沟,就是整本书站着的地基。