卷 V · 看不见的东西CH 19深度 19/24

推出你测不到的那个量

上一章解决的是「反馈太慢」,这一章解决更根本的:你想控制的那个量根本没有传感器。办法是让模型去推——而这条思路顺手会给出一个漂亮到有点反直觉的结论:两个都不太准的说法,合起来可以比其中任何一个都准。

观测器卡尔曼的三行秘密平滑不等于估计

▷ 先拧一下

关于同一个量,你有两个说法:

说法一:10.0,不确定度 ±2.0(我按模型推的)
说法二:12.0,不确定度 ±1.0(我刚测到的)

两个说法的误差互相独立。把它们合成一个最好的估计,这个估计的不确定度是多少?

A 大约 ±1.5——两个的平均 B 恰好 ±1.0——不可能比更准的那个更准 C 大约 ±0.89——比两个输入里更准的那个还小 D 大约 ±2.0——合成只会引入更多不确定性

如果 C 让你觉得违反常识,那正好——它是这一章的支点。

先解决「测不到」

一个具体的场景:你要控制一个二阶系统(比如一根柔性臂、一个电机),你想同时用位置速度做反馈(因为速度反馈就是第 7 章那个微分项,能提供阻尼)。但你只有一个位置编码器,没有测速传感器

最朴素的办法是对位置求差分。而第 7 章已经告诉过你后果:差分会把噪声放大到不能用。

控制论的答案是观测器(observer),思路只有两句:

◆ 这一章的主线

第一句:你有一个对象的模型。那就在计算机里跑一份这个模型——喂给它和真设备一样的控制量,让它自己算出「位置和速度现在应该是多少」。

第二句:模型一定会漂。所以拿模型算出的位置和真实测到的位置比一比,用这个差去纠正整个模型的状态——包括那个你测不到的速度。

关键在第二句:位置的误差携带着速度的信息。如果模型的位置一直比实际低,那多半是模型的速度估小了。所以「用位置的误差去修速度」不是猜,是模型结构告诉你的。

这就是一个反馈环——只不过它反馈的对象不是设备,是那个模型。所以前面十八章的全部工具在这里原样适用:它有自己的特征方程、自己的极点、自己的收敛速度。

# 观测器的误差动态(推导略,结论很干净):
#   估计误差 = 真实状态 − 估计状态,它满足自己的微分方程,
#   而这个方程的特征根**由你选的观测器增益决定**。

# 我们把它的两个极点放在 −4 和 −5,解出增益:
   l₁ = 8.6000     l₂ = 15.5600
   误差特征多项式 = s² + 9 s + 20 = (s+4)(s+5)  ✓

# 于是估计误差按 e^(−4t) 的速度衰减。验算一下:
   t = 0.5 s   速度真值 −0.43454   估计 +0.44826   误差 8.83e−1
   t = 1.0 s   速度真值 −0.69388   估计 −0.50148   误差 1.92e−1
   t = 2.0 s   速度真值 −0.63308   估计 −0.62921   误差 3.87e−3
   t = 3.0 s   速度真值 −0.11249   估计 −0.11379   误差 1.30e−3

★ 两秒之内,速度估计的误差压到了千分之四 ——
  而这个量从头到尾**没有任何传感器测过它**。

观测器极点怎么选?一条通用的经验:比被控系统的极点快 2 到 5 倍。太慢,估计跟不上,反馈拿到的是过期信息(又回到第 17 章那个「晚」);太快,它对测量噪声的敏感度会急剧上升(又回到第 7 章那个求导放大噪声)。观测器的整定和控制器的整定是同一类权衡,同一套直觉。

然后是那个「比两个都准」

观测器有一个问题没回答:那个增益到底该多大?上面是我硬选了两个极点。有没有「最优」的选法?

有,前提是你愿意说清楚「模型有多不准」和「测量有多不准」。这就是卡尔曼滤波,而它的全部秘密只有三行。

∑ 算一遍

你有两个关于同一件事的、误差互相独立的说法,各自带着自己的方差。最优的合成方式是:

   1/σ² = 1/σ₁² + 1/σ₂²                    ← 精度(方差的倒数)直接相加
   合成值 = ( m₁/σ₁² + m₂/σ₂² ) / (1/σ²)   ← 按精度加权平均

# 代进本章开头那道题:
   说法一:10.0 ± 2.0   (方差 4)
   说法二:12.0 ± 1.0   (方差 1)

   1/σ² = 1/4 + 1/1 = 1.25    →  σ = 0.8944
   合成 = (10/4 + 12/1) / 1.25 = 11.6000
   权重 = 20.0% / 80.0%        (谁更确定,谁说了算)

★ 合成后的 0.8944 比两个输入里更准的那个(1.0)**还小**。

为什么可以更准?因为你用上了两份独立的信息。测量说 12,模型说 10——模型虽然粗糙,但它确实排除了一些可能性(比如「真值是 20」)。把这份排除加进去,剩下的可能性就更窄了。

那个「1/σ² 直接相加」的形式值得记住,它就是信息可加的数学表达:方差的倒数在统计里正经叫「精度」(precision),而独立的信息,精度直接相加

这条也说明了这个魔法的前提:两个误差必须独立。如果你的「模型」其实是拿同一个测量算出来的,那它没带来任何新信息,相加就是自欺欺人。「合成比单个更准」的现金价值,全部来自那个独立性假设。

卡尔曼滤波做的事,就是每一步都做一次这个合成:先用模型往前推一步(不确定度增大),再和新的测量合成一次(不确定度减小),如此往复。

估计方法RMSE说明
直接用原始读数0.9778就是测量噪声本身
卡尔曼滤波0.2869好了 3.41 倍
一路取平均1.2917比原始读数还差

那个「稳态卡尔曼增益」也有闭式解,可以验算:K∞ = 0.095125,而仿真跑 300 步之后收敛到的值是 0.095125——完全一致。这说明卡尔曼滤波最终会稳定在一个固定的增益上(如果模型和噪声统计不变的话)。这一点很实用:很多工程实现干脆直接用这个稳态增益,省掉每步更新协方差的计算,效果几乎一样。

那一行「比原始读数还差」

表格最后一行是这一章第二个重点,也是最容易被忽略的。

「一路取平均」是一个非常自然的降噪想法:读数有噪声,那就多读几次取平均嘛。而它在这里的表现比不做任何处理还糟(1.2917 vs 0.9778)。

原因很简单:真值一直在变,而平均值假设它不变。你把三十步前的读数和现在的读数一视同仁地平均,得到的是「过去三十步的平均真值」,而那不是你要的。

✎ 术语正名:「滤波」

「滤波」这个词在工程语境里被约等于「平滑」——去掉毛刺、让曲线好看。而卡尔曼滤波的「滤波」是统计意义上的:给定所有历史观测,求当前状态的最优估计

两者的差别就是上面那张表:平滑只需要知道「我想让曲线多平」,估计需要知道「这个量自己会变多快」。

那个「变多快」就是卡尔曼滤波里的过程噪声 q。它是这套东西里唯一需要你动脑子的参数,而它的含义非常具体:「在我下次测量之前,这个真值自己能漂多远?」

  • q 设得太小 = 你告诉滤波器「这东西几乎不动」→ 它会过度相信历史,跟不上变化(就变成上面那个「一路取平均」)。
  • q 设得太大 = 你告诉滤波器「这东西乱蹦」→ 它会过度相信当前测量,等于没滤波。

整个卡尔曼滤波的调参,本质上就是回答一个问题:我的模型和我的传感器,哪个更值得信?q/r 这个比值就是你的答案。

▸ 在现实里

手机的定位。GPS 精度几米、每秒一次,加速度计精度差但每秒几百次。单靠 GPS,你的位置会一跳一跳;单靠加速度计,误差会随时间累积到离谱。融合之后既平滑又不漂——这就是本章那个「1/σ² 相加」在你口袋里跑着。进隧道时 GPS 丢失,滤波器会完全依赖模型继续推算,出隧道时再被拉回来。

无传感器电机控制。便宜的电机不装编码器,靠测电流和电压、结合电机模型反推转子位置——这是一个观测器。省下的编码器成本乘以产量,是实打实的钱。

你对一件事的判断。「我原本以为要三天(±2 天),同事说他做过类似的,两天(±1 天)」——按本章的算法,你应该给出 2.2 天左右,而且你的不确定度比同事那个 ±1 天还小。前提是你俩的判断依据真的独立;如果你俩看的是同一份文档,那就没有这份收益。

「多个指标互相印证」。这句管理常识的数学版本就是本章。而它的前提同样是独立性:如果三个指标都是从同一份日志算出来的,那「互相印证」是幻觉——它们会一起错。

✗ 这个直觉是错的
既然可以用模型推算出测不到的量,那传感器不就可以少装几个了? 观测器能信息,不能信息。它成立的前提是「你的模型是对的」,而模型的准确度不在任何一个观测器公式里——它是一个外部输入。

这一条和第 2 章那句「开环的精度上限是你对世界的了解」是同一件事,绕了十七章又回来了。观测器本质上是一个局部的开环:那些没有被测量修正的状态分量,全靠模型撑着。

所以正确的判断顺序是:

  1. 这个量是「可观测」的吗?——有一个严格的数学判据(可观测性,本书不展开)。直觉版本:如果两种不同的内部状态会产生完全相同的测量序列,那你永远分不出它们,任何观测器都无能为力。
  2. 我的模型误差有多大?模型错的那部分,会变成估计的系统性偏差,而滤波器不会报警——它会给你一个自信满满的错误答案。这是观测器最危险的失效模式:它不会说「我不知道」。
  3. 装一个传感器要多少钱?如果不贵,就装。一份真实的测量胜过一个漂亮的模型——而且它还能反过来验证你的模型对不对。
◈ 回读

C±0.8944,比两个输入里更准的那个(±1.0)还小。合成值是 11.6000,两个说法的权重是 20.0% 和 80.0%

算法只有一行:方差的倒数直接相加。1/4 + 1/1 = 1.25,开方取倒数就是 0.8944。而这条「信息可加」的性质,是整个卡尔曼滤波、整个传感器融合、乃至整个贝叶斯推断的地基。

A 「两个的平均,±1.5」——这是把不确定度也拿去平均了。不确定度不这么合成:一个很不准的说法不会拖累一个很准的说法,它只是贡献得少一点(权重 20%)。 B 「不可能比更准的那个更准」——这个直觉非常强,也非常自然:多了一个更差的信息源,怎么可能变得更好?答案是:因为它是独立的信息。再差的独立信息也排除了一些可能性。这也是为什么那个独立性前提如此关键——如果两个说法来自同一个源头,那 B 就是对的。 D 「合成只会引入更多不确定性」——这在不知道各自不确定度的时候是对的:如果你不知道谁更靠谱,随便一平均确实可能更糟。而这套算法的全部要求,就是你得诚实地估计出每个来源的不确定度知道自己有多不确定,本身就是一份可以变现的信息。

这一章的一句话

模型能补上传感器测不到的部分,而两份独立的、都不太准的信息合起来,可以比其中任何一份都准——代价是你必须诚实地说出各自有多不准。

下一章是卷 V 的收尾,也是这本书里性价比最高的一个结构改动:在环里再套一个环。把扰动关在离它最近的那个内环里,同一个扰动造成的峰值偏差从 0.18337 变成 0.01736——小了 10.6 倍,累计误差小了 22.6 倍。而外环的控制器一个参数都没改