音高不住在谱上

有一段声音,你听见它的时候,会觉得它有一个很低的音高。可你去查它的频谱,那个低音根本不在里面。

四根弦同时响:800、1000、1200、1400 赫兹。它们都是 200 的整数倍。人耳听完会说:这是 200 赫兹的音,只是音色很亮。但把这段波形拿去做谱分析,200 赫兹那里是空的。

这件事有个名字,叫缺失基频。我一直把它当成一个听觉的魔术。今天我想问的其实很朴素:那个 200,到底是谱上的一个位置,还是谱上几个位置之间的关系?

一

我先把两台仪器造好。

第一台是谱探针:在某个频率上做一次投影,看那里有多少能量。它在 800、1000、1200、1400 各读 1.000000000,在 200、400、600 读 0.000000000。干净得像用尺子量过。

第二台是自相关:把波形和它自己错开一点再叠起来,看重合得多好。错开的量从零慢慢加大。对这段波形,它在错开 5 毫秒处给出 0.975 的重合度——5 毫秒正好是 1/200 秒。

所以两台仪器,一段波形,两个答案:谱说没有,周期说有。

我倾向于相信后者的说法更接近事实,因为它不声称自己看见了 200 赫兹这条线,它只声称「这个波形以 5 毫秒为周期重复」。周期是一个关系的读数,不是一个位置的读数。

二

接着做三组对照。每次只换关系,不换别的:

四根弦(赫兹) 它们的最大公约数 自相关读出的音高
800, 1000, 1200, 1400 200 200.00
800, 1200, 1600, 2000 400 400.00
600, 1000, 1500 100 100.00

三行全中。

第三行最有意思:最低的那根弦是 600 赫兹,可读出来的音高是 100。而且 100 赫兹跟 600、1000、1500 都不成整数倍关系——它比最低的弦还低一个半八度多。你在谱上永远找不到它,因为它不是一条线,它是三个数凑在一起才有的东西。

于是我得到一个短句,写下来的时候有点意外:谐波复合音的音高,是它各分音频率的最大公约数。

这也解释了「缺失」这个词为什么一直让我不舒服。什么都没缺。那个数从来没打算住在谱上。

三

我原本还猜了另一件事,猜错了。

我想:既然音高是从波形里读出来的,那把相位打乱,波形就变了,读数应该跟着塌。幅度谱一模一样,只是每条分音的起始相位随机化。

结果:**0.975,一点没动。**音高读数 200.0012 赫兹,与打乱之前逐位相同。

原因是一句很轻的话:在 5 毫秒这个滞后上,第 k 条分音正好走完整 k 个周期,相位被整数周期完全约掉了。

所以「音高住在相位里」是错的。更准确的说法是:它住在相位的整数栅格里。具体相位是 0 还是 2.1 无关紧要,是不是同一条栅格才要紧。

四

那么把栅格弄坏一点,会发生什么?

我让第 5 号分音失谐 δ 个周期——δ=0.1 就是它本该在 1000 赫兹、实际在 1020。然后读它跟自己的重合度。

理论说这个读数应该按 (3 + cos 2πδ) / 4 掉。我把测量值和这条闭式并排放:

δ=0.05 时 0.9884 对 0.9878;δ=0.15 时 0.8989 对 0.8970;δ=0.25 时 0.7530 对 0.7500;δ=0.5 时 0.5000 对 0.5000。最大偏差 0.003。

如果四条分音一起失谐(一上一下交替),换另一条闭式 cos 2πδ,也是逐点吻合——但掉得快得多:同样 δ=0.25,前一种还剩 0.75,这一种已经掉到 0。

同一个误差量,记在一条分音上不算什么,记在四条上并且同相,就把周期读没了。

五

下面是今天真正想留下的东西。

我把 δ 从 0 扫到 0.5,每一步都让仪器回答「音高是多少」。它必须回答,因为我只在几个候选周期里给它选。

它给出的答案是一条非单调的阶梯:

δ 从 0 到 0.21,它说 200 赫兹。 δ 到 0.22,它突然改口:50 赫兹。 δ 到 0.29,它说 66.67。 δ 到 0.42,它说 100。

先掉两个八度,再一路升回来。

δ=0.24 的时候,四条分音已经没有公共周期了——第 5 号在 1048 赫兹,四者互素。真实答案是「没有这个周期」。而仪器报的是「50.00 赫兹」,置信度 0.992。

同一时刻,在真正该看的那个滞后上,读数是 0.766。

错的答案比对的答案更自信。

原因不难看穿:第 k 个候选在 δ = 1/k 处恰好对齐。δ=0.25 让 k=4 完美对齐,δ=1/3 让 k=3 对齐,δ=1/2 让 k=2 对齐。当 1/δ 从 5 掉到 2,赢家就按 k = 1, 4, 3, 2 的顺序换人——于是音高先往下跳,再往上爬。

还有更难看的一面:同一个 δ=0.34,我允许它只看 200 个样本的滞后时,它报 99.57 赫兹;放宽到 340,它报 66.67。两个都是它认认真真的答案,两个都不对。

「读数是多少」不是一个数,是(信号,我允许它看多远)。

六

写到这里我得承认一件小事,因为它差点骗过我。

图上第一个峰最高,第二个低一点,第三个再低一点。0.975、0.950、0.925、0.900。看起来完全符合直觉:基频最强,高次谐波依次减弱。

其实这四个数逐个等于 (N−τ)/N——窗口长度减去滞后,再除以窗口长度。它们的高低差全部由我的窗给出,与声音一点关系都没有。

如果我只看图不看公式,我会得出一个漂亮的、完全错误的结论。自己仪器里的那种整齐单调,先怀疑是仪器给的。

七

最后还有一个安静的读数。把整组频率统一拉伸百分之一,音高读数变成 202.0093;拉伸百分之三,205.9904;百分之六,212.0044。期望值分别是 202.0、206.0、212.0。

峰高一直是 0.975。

所以这把尺子只读关系,不读绝对值。同一个和弦换一个调,它跟着整体平移,形状不动。

八

天黑了。我把今天的两台仪器收起来,剩下的问题还有很多没碰:真实的琴弦不是理想谐波,钢琴的八度要「拉伸」才听得顺,因为弦的泛音不精确落在整数倍上——那正是把公约数弄坏的方式。人耳到底怎么做这件事,我一点证据都没有,今天只有两台我亲手写的仪器在吵架。

但有件事我比较确定了。

一个数可以不住在任何地方,只住在几个地方之间。谱只印位置,音高读的是位置之间的关系。而关系一旦被扰动,仪器不会说「我不知道」——它会往下走几级台阶,找一个更整齐的公约数,然后带着百分之九十九的置信,把它报出来。

自相关、失谐曲线与音高的阶梯