卷 III · 迟到CH 10深度 10/24

把「晚」翻译成「反」

这一章只讲一件事,但它是整本书的枢纽:一个固定的延迟,对不同速度的信号不是同一件事。对慢信号它只是稍微推后一点,对快信号它可以让信号完全反过来。而当反馈信号反过来的时候,负反馈就变成了正反馈——你什么都没改,它自己变的。

相位−180° 那一刻失稳的机制

▷ 先拧一下

一个信号经过固定 2 秒的延迟管道。信号本身是一条正弦波。

问:把延迟后的信号和原信号做相关(+1 表示完全同步,0 表示毫无关系,−1 表示完全反着来),在下面这几种周期下分别是多少?

A 都接近 +1。延迟只是推后,波形本身没变,所以还是很像 B 周期越短相关越低,最低到 0 C 周期 4 秒时相关是 −1(完全反相),周期 2 秒时又回到 +1 D 相关随周期单调下降,一直降到 −1 为止

选项 C 里那个「又回到 +1」是关键。如果它让你觉得奇怪,那这一章正是为你写的。

同一个延迟,不同的意义

先做个思想实验。你在跟一个人打电话,线路有 2 秒延迟。

如果你们在慢悠悠地聊天,每句话隔十几秒,那 2 秒几乎不影响什么——顶多有点别扭。

但如果你们要一起数拍子、一起唱同一首歌,节拍是每 2 秒一下,那这 2 秒的延迟意味着:你听到的永远是上一拍。你会跟着上一拍打,而对方听到的又是你的上一拍……这时候延迟不再是「有点别扭」,它改变了你在做的事

关键在于:延迟的严重程度,取决于它占了信号周期的多大比例。

这个比例有个标准的说法,叫相位(phase)。一整个周期是 360°,所以:

   相位滞后 = −360° × ( 延迟 / 周期 )

# 或者用角频率 ω = 2π/周期 写:
   相位滞后 = −ω L    (弧度)

★ 注意这个式子的形状:延迟 L 是固定的,但相位滞后正比于频率 ω。
  频率越高,同一个延迟造成的相位滞后越大,而且**没有上限**。

最后那句话是这一章的全部重量所在。纯延迟造成的相位滞后没有上限。作为对照,一级惯性最多只能贡献 −90°,两级最多 −180°,永远够不到(只在无穷频率处趋近)。而纯延迟只要频率够高,−180°、−360°、−720° 都能给你。

那个精确的时刻

把上面的式子解一下:什么时候相位滞后正好是 −180°?

   −360° × (L / 周期) = −180°
   →  周期 = 2 L

★ 当信号周期恰好等于两倍延迟时,迟到的信号与原信号精确反相。

这非常好理解:延迟半个周期,正弦波的波峰正好落到原来波谷的位置。

下面这个 demo 固定 2 秒延迟,你可以拖信号周期。请一路拖到 4 秒,盯着「与原信号的相关」那一格:

信号周期延迟占了相移与原信号的相关感觉像
24 s8.3%−30.0°0.8726基本还是同一回事
12 s16.7%−60.0°0.5377开始对不上了
8 s25.0%−90.0°0.0646几乎毫无关系
4 s50.0%−180.0°−1.0000完全反着来
2 s100%−360.0°1.0000又完全同步了

最后一行解释了选项 C 里那个「又回到 +1」:延迟整整一个周期,正弦波看起来和没延迟一模一样。周期性的东西被延迟一整个周期,是看不出来的。

(这也是本书唯一一次会提到的一个坑:正弦波无法区分「延迟 0 秒」和「延迟一整个周期」。真实系统的延迟造成的麻烦,主要来自 −180° 附近那个区间,而不是这些整周期的巧合。)

为什么反相是灾难

现在把这件事装回环里。回忆负反馈的定义:输出偏高,就往下压。

假设这个环正在以某个频率轻微振荡——不管这个振荡是哪来的(一个扰动、一次开机、一点噪声)。控制器看到的是延迟后的振荡。如果这个频率恰好使延迟造成 −180° 的相移:

# 真实输出(现在):   ╱‾╲___╱‾╲___     ← 正在往上冲
# 控制器看到的:       ___╱‾╲___╱‾╲     ← 半个周期前的,正在往下走
#
# 控制器的判断:「它在往下掉,我得往上顶!」
# 而真实情况:      它正在往上冲。
#
# 于是控制器的动作**加大了**那个振荡,而不是压制它。
#
# ┌──────────────────────────────────────────────┐
# │  设计意图:输出高了 → 往下压   (负反馈)      │
# │  实际发生:输出高了 → 往上顶   (正反馈)      │
# │  中间没有任何人改过代码。改变它的是延迟。      │
# └──────────────────────────────────────────────┘
◆ 这一章的主线

一个环失稳,需要在同一个频率上同时满足两个条件:

  1. 相位条件:绕环一圈的总相位滞后达到 180°(此时负反馈已经变成正反馈);
  2. 幅值条件:在那个频率上,绕环一圈的增益 ≥ 1(回来的比出去的大,所以下一圈更大)。

两个都满足,振荡自我放大,永远停不下来。缺任何一个都不会失稳。

这就是第 4 章那张真值表的完整解释:「力气大」管的是条件 2,「延迟/多级惯性」管的是条件 1。它们必须同时到场,这就是为什么八种组合里只有四种会晃。

这条判据叫奈奎斯特稳定判据(Nyquist,1932,贝尔实验室——他当时研究的是长途电话线上放大器的啸叫)。上面那个版本是它最简单的形式,严格陈述要复杂一些,但对本书的所有系统都够用。

那个上限,现在有来历了

回到第 9 章那张表。为什么 L = 2 秒时,可用增益上限恰好是 8.502?

因为:

  1. 先找到那个频率——在那里,绕环一圈的相位滞后正好 180°。这个环的滞后有两部分:纯延迟给 ωL,一级惯性给 arctan(ωτ)。所以要解 ωL + arctan(ωτ) = π
  2. 解出来 ω = 0.844341345 rad/s,对应周期 7.4415 秒——这就是第 8 章那个 Tu
  3. 然后问:在这个频率上,增益要多大才刚好等于 1?答案就是 Ku = 8.502424988

所以第 8 章那两个神秘的数,其实是同一件事的两面Tu 是这个环在 −180° 处的周期,Ku 是在那个周期上增益到 1 所需的力气。Ziegler–Nichols 那个「加大增益直到持续振荡」的实验,做的就是让系统自己把这个频率找出来。

注意上面第 2 步里的那个数:周期 7.44 秒,而延迟只有 2 秒。为什么不是 4 秒(两倍延迟)?因为惯性也贡献了一部分相位滞后——这里延迟贡献了 0.844 × 2 = 1.69 弧度(约 96.7°),惯性贡献了剩下的约 83.3°。两个加起来才是 180°。纯延迟主导时周期趋近 2L,惯性也参与时会更长。

✎ 术语正名:「相位」

相位在日常语境里几乎没有用法,所以它反倒没被用坏——只是让人觉得陌生和抽象。

其实它的意思非常朴素:「同一个周期性的事情,你比我晚了多少」,用角度而不是时间来表示。用角度的理由只有一个:这样它就和周期无关了,可以直接判断「有没有反过来」。

为什么控制论如此偏爱频率的视角?因为它把「延迟」和「惯性」这两个看起来毫不相干的东西,换算成了同一种货币:相位。有了这个共同单位,你就能把一个环里所有环节的滞后直接相加,看总数有没有到 180°。这是频域方法最大的实用价值——它让不同的东西可以做加法。

▸ 在现实里

麦克风啸叫。音箱的声音被麦克风收进去,放大后再放出来——这是一个环。在某些频率上,声音从音箱走到麦克风的传播延迟恰好造成 −180°(加上功放和音箱本身的相位),于是正反馈成立,那个频率的能量指数增长,直到设备饱和。调音师做的「拉掉某几个频段」,就是在破坏那些频率的幅值条件。Nyquist 当年研究的正是同类问题。

你在会议室里的自我干扰。连着会议音响的电脑没静音,你说话经过网络延迟又从音箱放出来——延迟几百毫秒,正好是人说话音节的尺度。这时候人几乎无法说话,因为大脑对自己声音的反馈环被破坏了。这个现象有名字(延迟听觉反馈),它甚至能让口吃的人变流利、让流利的人口吃,剂量就是那个延迟。

司机看到的刹车灯。高速上的幽灵堵车是一个延迟正反馈:每个司机对前车的反应有约一秒的延迟,车队里一个微小的减速被逐车放大,几公里后变成完全停死。自适应巡航(ACC)之所以能显著缓解它,不是因为它刹车更好,而是因为它的反应延迟只有几十毫秒。

✗ 这个直觉是错的
只要延迟小于系统的响应时间,反馈就还是「负」的,不会出问题。 一个环里存在无穷多个频率。你的系统在「主要工作频率」上可能确实是良好的负反馈——而失稳不发生在那里,它发生在那个你从没想过的、相位刚好转到 180° 的高频上。

这是频域视角最重要的一课,也是最难接受的一课:你必须为你不关心的频率负责。

一个具体的例子:你的自动扩容器面对的是分钟级的流量变化,你自然会按分钟级去思考。但如果这个环在周期 6 分钟处相位到了 180°、增益又大于 1,那么系统就会自发地以 6 分钟的周期振荡——尽管流量本身根本没有 6 分钟的周期成分。那个振荡不是外面来的,是环自己长出来的。(第 22 章你会亲眼看到它。)

这也是为什么工程上要留「裕度」:不是因为模型算错了,而是因为你永远不可能列全环里所有的相位来源。有人加了一层代理、有人把批处理窗口从 1 秒改成 5 秒、有人给指标加了个平滑——每一个都在往环里塞相位。第 14 章会告诉你留多少合适,以及怎么把它变成一个可以监控的数。

◈ 回读

C周期 24 秒时相关 0.8726(基本同步),12 秒 0.5377,8 秒 0.0646(几乎毫无关系),4 秒时精确地是 −1.0000(完全反相),而 2 秒时又回到 +1.0000

那个 −1.0000 是这本书里最重要的一个数字。在那个频率上,你精心设计的负反馈,在数学上等同于正反馈。你没有改任何代码,改变它的是一段两秒的管道。

A 「延迟只是推后,波形没变,所以还是很像」——波形确实没变,这是对的。错的是「所以还是很像」:对周期信号而言,「像不像」取决于对不对得上,而不是长得像不像。两条一模一样的正弦波,错开半个周期就是彼此的相反数。 B 「最低到 0」——0 出现在 −90° 处(周期 8 秒,表里是 0.0646),但它不是终点。相关系数会继续往下走到 −1。停在 0 的直觉大概来自「毫无关系已经是最差了」,而实际上比「毫无关系」更糟的是系统性地反着来——毫无关系的信号只是没用,反相的信号是有害的。 D 「单调下降到 −1 为止」——前半段完全正确,方向也对。它只漏了周期性:相位滞后是 −360°×L/T,T 继续变小,滞后会越过 180° 一路到 360°、540°……于是相关系数会在 +1 和 −1 之间来回。失稳的风险不是「频率越高越危险」,而是「在某些特定频率上危险」。

这一章的一句话

延迟不改变信号,它改变信号的意义——在周期等于两倍延迟的地方,「压下去」和「顶上来」是同一个动作。

下一章把这条机制变成一个可以验算的数字,而且用四条完全独立的方法各算一遍:解析地解那个超越方程、在复频响上数值搜索、在复平面上用牛顿法找特征根、以及真跑一遍仿真做二分。前三条会给出小数点后九位完全相同的 8.502424988