7.1 思想实验:只有低精度传感器,如何测出精确值?
📚 本文内容摘自本人的开源书《从沙子到车辙 - 一个工程师的理解》
🔗 在线阅读/下载:from-sand-to-ruts
git clone https://github.com/Lularible/from-sand-to-ruts
⭐ 如果对您有帮助,欢迎 Star 支持,也欢迎通过 GitHub Issues 交流讨论。
戈壁滩上的一群人
1964 年,中国西北戈壁。
一组工程师围着一块传感器,愁眉不展。任务:测量核爆炸的精确当量——需要千分之几的精度。
问题是:手里最好的传感器,精度只有 1%。
1% 的传感器,怎么测出千分之一精度的物理量?
你可能觉得这不可能——精度1%的尺子量不出千分之一精度的长度,这是小学数学。但在工程里,数学书的结论只是起点。书上说"不可能",是因为书上假设你只用传感器读一次数就完事了。但如果你读了一万次呢?如果你同时用了五种不同的测量方法呢?如果你把物理方程、统计规律、电路拓扑全部动员起来——把整个已知的物理世界变成你的"第二传感器"呢?
我们先说清楚1964年的实际测量挑战是什么。核爆炸当量的精确测定,不是拿一个压力表往蘑菇云里一插。你需要同时测量至少三个物理量:冲击波的传播速度(通过高速摄影机拍摄烟云前沿位置随时间的变化)、火球的膨胀速率(通过辐射亮度的时间曲线反推)、以及爆心附近的地震波走时。这三个量各用一种传感器采集——冲击波用空气中布置的压力传感器阵列,火球用光电管记录可见光和红外辐射强度,地震波用地表加速度计。每一种传感器的标称精度都在 1% 左右。更糟的是,戈壁滩的环境——零下二十度到零上四十度的温度跨度、沙尘暴带来的机械振动、光学路径上的气溶胶散射——让传感器的实际工作精度远低于 1% 的出厂指标。
但最终当量要用它们反推出千分之一精度。因为如果你估错了 0.5%——对整个武器设计来说,这个误差意味着你根本不知道下一次实验该填多少装药、该把临界质量调到哪个点。
你可能会想:找更好的传感器。但在当时的条件下——冷战封锁、技术禁运、国内工业基础刚刚起步——"更好的传感器"不是一个选项。这个选项就不存在。
答案不是硬件。答案是方法论。
当你被逼到这个墙角的时候,你会发现一件奇妙的事:传感器只是物理世界和数字世界之间的一个"翻译器"。如果翻译器不够好,你可以用数学去重新校准它、用物理模型去补充它、用统计规律去提炼它。当硬件走到尽头的时候,数学和物理就成了你新的传感器。这不是1964年戈壁滩上那群人的专利——这是每一代工程师在绝境中都会发现的秘密。
我在面板厂做良率分析时,每天都要面对检测工具的物理局限。一片玻璃基板上有几千个面板单元,每个单元有几百万个 TFT——而用来检测缺陷的工具,精度有限。AOI(自动光学检测)能看到颗粒,但看不到 50nm 的针孔。电性测试能测 TFT 参数,但看不到物理形态。点灯测试能看到坏点,但不知道原因。
检测工具的物理局限,逼出了另一个方法:多组数据融合。把 AOI、电性测试、点灯测试的三组数据叠加——一个 AOI 漏检的针孔,会在电性测试里表现为漏电流偏高,在点灯测试里表现为某个像素不亮。三组粗糙的眼睛,从三个方向观察——融合后的定位,比任何单一检测都精确。
方法一:当你有时间,你就有精度
随机噪声——热噪声、散粒噪声——有一个至关重要的数学特性:它是零均值的。这意味着如果你对同一个物理量多次采样然后取平均,噪声会相互抵消。
σ_n = σ / √n
标准差的下降速度,是采样次数平方根的倒数。测量 100 次,精度提高一个数量级。测量 10000 次,精度提高两个数量级。
这个公式很优雅。但它的前提也很苛刻:噪声必须是零均值的、不相关的。对大多数物理传感器来说,这两个前提近似成立——但不是全局成立。你需要知道你的传感器的噪声特性,知道它在什么条件下满足"零均值、不相关",在什么条件下不满足。这需要对物理世界深刻的理解,而不仅仅是数学公式。
说一个具体例子。一个 12 位 ADC,量化噪声的理论 RMS 是 LSB/√12 ≈ 0.289 LSB。如果你对同一个直流信号采样 100 次然后取平均——假设叠加在信号上的噪声是白噪声,幅度至少大于 1 LSB——有效分辨率会从 12 位提高到 16 位。4 个额外 bit 的精度,完全不修改硬件。只需要多采 100 次样、做一个累加和移位。这就是过采样 + 抽取(oversampling and decimation)。你没花钱,没换芯片,没改 PCB 布局——你只是把采样频率从 1kHz 提到了 100kHz,然后用时间换精度。
但注意那个前提:“噪声是白噪声且幅度大于 1 LSB”。如果你的信号干净得没有任何噪声——比如你测的是一个从精密电压基准输出的恒定电压——过采样不会提升有效位数。因为 ADC 每一次转换都落在同一个量化区间里,你做 100 次平均得到的还是那个值。你需要噪声把信号在两个 LSB 之间"抖动"——这就是抖动注入(dithering)的技巧。故意在输入端叠加一个已知幅度的伪随机噪声,让信号在量化边界上反复横跳,然后过采样把它平摊掉。听起来自相矛盾——加噪声来减少噪声——但数学证明它是可行的。
戈壁滩上的工程师没有 ADC,更不用说过采样。他们用的是什么呢?示波器拍照,一张一张地记录波形,然后人工读数、人工计算平均值。一万次采样——不是一万行 Python 脚本,而是一万张底片、一万次记录、一万次计算。每张底片的曝光、冲洗、读数——任何一步操作失误,那张底片废掉,重新来。一万次,不是比喻。是精确的一万次。
你手上如果有 12 位 ADC,用 100 次过采样把精度提到 16 位——你应该心怀感激。你的前辈用一万张底片换来了 100 次软件采样可以达到的精度。
方法二:用已知量"校准"——和校准的传递链
如果你有一个 1kg 的标准砝码,放在传感器上,记录输出值,用这个偏差去校正后续的所有测量——这就是交叉校准。
本质上,你在用绝对精确的参考量,给不精确的传感器画一张"偏差地图"。
你在 ECU 上做的传感器学习(sensor calibration),和这是一模一样的逻辑。方向盘角度传感器过 EOL(下线检测)时,产线工人打满左 + 打满右,ECU 抓到两端的位置——这两个已知的端点,就是你的"标准砝码"。然后你在中间做插值,补偿非线性。
但校准不止这一种。还有一种更精巧的方法:校准传递。你没有直接的标准砝码,但你有一个可以被标准砝码校准的传递标准。比如,你没有精确的压力源去校准 MAP(进气歧管绝对压力)传感器,但你在产线上有一台经过计量院标定的参考气压计。你用它先校准一批"金样件" MAP 传感器——然后用这些金样件去校准产线上每一台车的 MAP 传感器。精度会逐级衰减,但只要每一级的衰减因子可控,最终的精度仍然远高于不校准的原始传感器。
这就是一条校准链。本质上是把绝对精度从一个已知参考点向外"搬运",像接力一样传递到最终产品上。汽车工业的整个质量体系——从国家标准到计量院到产线工装到 EOL 工位——就是一张巨大的校准传递网络。
再比如爆震传感器:每个缸体在不同温度下的"正常振动"背景值,也是一种参考——DSP 不是在检测"是否有振动",而是在检测"振动是否显著偏离了正常背景"。这就是参考校准的变体:你的参考不是绝对零,而是统计规律下的"预期正常值"。
我在面板厂做良率分析的时候,对这一套感受特别深。每一台光学检测机台——KLA、AMAT、Hitachi——出厂前都被原厂用标准缺陷基板校准过。校准片上用聚焦离子束(FIB)精确雕刻了尺寸已知的人造缺陷。但机台搬到产线以后,温度变化了几度,光学平台上积累了几个月的微尘——校准就开始漂。我们用机台自带的每日 monitor 跑一遍自动校准程序,再用裸基板做 particle count 验证。每一个产线工程师都知道:你今天看到机台显示的"缺陷尺寸 0.35μm"——它可能是 0.30,也可能是 0.40。但你通过校准传递链,把不确定性控制在了一个已知的范围内。你不知道真值是多少,但你知道误差在 ±0.05μm 之内。这就够了。
方法三:让共模自己消失——差分测量的智慧
有时候问题不是精度不够,是信号被淹没了。
你的传感器输出一个微伏级的信号,但周围环境的电磁干扰是毫伏级的——信号完全被噪声盖住了。这时候你不应该跟噪声"硬刚"——你应该让噪声自己消失。
这就是差分测量和电桥电路的核心智慧。
惠斯通电桥(Wheatstone Bridge)是工程史上最优雅的发明之一。四个电阻臂构成一个平衡电路:当桥臂平衡时,输出端电压为零。任何微小的不平衡——比如一个应变片被拉伸了 0.01%——会在输出端产生一个微弱的差分电压。但外界温度变化导致的所有四个臂同时改变阻值——这个共模变化被电桥自动抵消了。
你车上至少几十个传感器在用这个原理。进气压力传感器(MAP)——硅微机械加工的膜片上有四个压敏电阻,组成惠斯通电桥。压力让膜片弯曲,两个电阻被压缩、两个被拉伸,电桥失衡,输出差分电压。温度变化?四个电阻一起漂,共模抵消。这比用单个压敏电阻加温度补偿表——精度至少高一个数量级。
差分 CAN 总线也是一样的逻辑。CAN_H 和 CAN_L 两条线并行走线,外界电磁干扰在两线上感应出几乎完全相同的共模噪声。接收端的差分比较器只看 CAN_H - CAN_L 的差值——共模噪声在减法中彻底消失。这就是为什么 CAN 总线在汽车的电磁地狱里还能可靠通信:不是你屏蔽做得好,是差分让噪声自己打自己。
从惠斯通电桥到差分信号,从仪表放大器到全差分 ADC——整个精密测量领域的基石思想只有四个字:让共模抵消。不需要消灭噪声,只需要让噪声在两个通道上完全相同地出现——然后做减法。物理世界帮你做完最难的步骤。
方法四:让物理模型帮你"猜"——卡尔曼滤波的直觉
有时问题不是精度不够——是你根本无法直接测量你想要的值。
电池 SOC(电量状态)就是一个典型的例子。你不可能拿一个"SOC 传感器"直接插进去读一下还剩多少电。SOC 是系统状态,不是传感器可测的物理量。
BMS 的做法是:电流积分(安时法) 累加充入和放出的电量,给出 SOC 的连续估计;同时周期性地用 OCV-SOC 曲线(开路电压 → 电量映射)做修正。两个粗糙的测量——电流传感器的积分误差和电压传感器的噪声——通过系统的物理模型融合,给出精确的 SOC 估计。
这个方法有一个名字:卡尔曼滤波。
让我用最简单的语言讲清楚卡尔曼滤波在做什么。没有矩阵。没有协方差。只有三个词:预测—测量—更新。
你站在一条漆黑的走廊里。你想知道自己的位置。第一步:你根据上一步的位置和你的步长,预测你现在在哪里——"我上一秒在门口,迈了三步,一步大约 0.7 米,所以我现在应该在门口往里约 2.1 米的位置。“但这个预测是不确定的——你的步长并不精确。第二步:你伸手摸到了墙壁上的一扇门,你知道这扇门在离门口刚好 2.5 米的位置——这是你的测量。但测量也是不精确的——你不知道你的手是不是摸偏了。第三步:你根据预测和测量的相对可信度把它们融合——如果你的步数估计很准但测量很粗糙(比如你只是隐约摸到了门框),你就更相信预测;如果测量非常确定(比如你的手掌完全贴在门把手上),你就更相信测量。最终你得到的"我的位置大约是 2.3 米”——比你单纯用预测(2.1 米)或单纯用测量(2.5 米)都更接近真实。
这就是卡尔曼滤波。预测来自你对物理世界的建模。测量来自传感器。融合的权重来自统计——预测的不确定性和测量的噪声,哪一个更小,哪一个权重就更大。最终输出的估计值,比任何一个单一传感器都精确。
车速估计 = 轮速传感器 + IMU 加速度 + GPS 速度 + 车辆动力学模型
每一项单独拿出来都不够精确。但融合之后,精确到可以用于 ESP 的滑移率计算。
还有一个更细腻的例子:轮速传感器的齿间插值。一个 48 齿的磁性音轮——车轮每转一圈产生 48 个脉冲。在 100km/h 时,齿周期大约是 1.5 毫秒。但 ESP 的控制周期是 1 毫秒——在下一齿到来之前,ESP 需要知道当前的瞬时轮速。怎么办?不是"等下一齿"。是用上一次的两个齿之间测得的平均速度,加上根据上一次齿间加速度推算出的"当前速度预测值",在脉冲空缺的 1.5ms 里外推。等到下一个脉冲真的来了,用实测值修正模型,重新校准加速度参数。这就是轮速传感器的卡尔曼滤波——虽然它是单维的,不需要矩阵,但它的灵魂一模一样:预测 + 修正。
更进一步的——齿间插值可以精确到什么程度?如果你不仅测量齿间的时间间隔,还利用磁轮旋转时磁场变化的连续波形——在每一个齿的上升沿和下降沿之间,模拟磁场是连续穿越感应元件的——你可以从 48 齿扩展到等效几千个虚拟齿。48 齿的一圈,精度 360°/48 = 7.5°。加上连续波形拟合和卡尔曼轨迹估计——精度可以推到 0.01°。从 7.5° 到 0.01°,不是硬件升级,是数学和物理的组合拳。
方法五:让物理规律替你做减法——多燃烧周期的统计叠加
发动机爆震检测是另一个完美的案例。一颗压电传感器——本质上是一块冲击陶瓷——贴在缸体上。你不只捕获到了爆震产生的特征压力震荡——你同时捕获了活塞敲击缸壁的机械振动(大约在 500Hz-2kHz)、气门落座的冲击、正时链条的哗啦声、路面的低频振动。爆震特征信号在 5-15kHz 的频率带上,但它的幅值——在最严重的情况下——也只是燃烧室最大压力的约 5%。在轻微爆震时,这个比例可能低到 1%。传感器的输出信噪比在全部工况范围内经常是负数——噪声比信号大。
传统做法——设一个电压阈值,高过阈值就算爆震——在发动机全工况内是根本不可用的。怠速时的背景振动幅值比 6000RPM 全负荷时低了两个数量级。一个固定阈值要么在低速时漏检,要么在高速时误判。
ECU 的实际做法深刻地体现了前面所有方法的综合:第一,带通滤波——在时域上把 5-15kHz 之外的所有振动分量砍掉,这是让共模以外的频率分量消失。第二,统计阈值检测——不需要一个固定阈值,而是让 ECU 在稳态工况下(比如怠速、定速巡航时)自学每个缸"正常燃烧噪声"的均值和标准差。定义阈值 = μ + kσ——k 是一个标定值,由 OEM 根据发动机耐久性和排放综合权衡。第三,多循环叠加——你连续观察 N 个燃烧循环的爆震窗口。一个循环里的信号可能被随机噪声淹没,但你把 N 个循环的爆震信号对齐到曲轴角度的同一位置、做叠加平均——噪声因为是随机的而衰减 1/√N,爆震信号因为是确定性的而保持不变。经过 100 个循环的叠加,SNR 改善 10 倍。
20dB 的 SNR 增益——不靠更好的传感器,不靠更好的 ADC,不靠屏蔽。靠的是"你把同一件事重复了 100 次,然后把它们对齐叠加起来"这个思想。戈壁滩上一万张底片——也是同一个思想。
首先,你需要相信这是可能的
精度 1% 的传感器能测出千分之一精度的物理量。
这不是魔法。这需要数学(过采样和统计)、物理(噪声建模和差分抵消)、系统理论(卡尔曼滤波)、电路设计(电桥和差分放大),以及对传感器本质的深刻理解。
但首先——需要你相信这是可能的。
如果 1964 年戈壁滩上的那群工程师选择了放弃——“传感器不够好,没法做。等更好的传感器来了再说。”——那个项目就不会有结论。核爆炸的精确当量就是未知数。后续的防御决策就没有数据支撑。
最后:你已经在做了
你可能没有意识到——你每天都在做同样的事。
每一个曾经用示波器手动 decode 过 SPI 波形的你。每一个在没有仿真环境的情况下把代码烧进 Flash 反复重启测试的你。每一个在 128KB SRAM 里精细分配缓冲区地址的你。每一个用安时积分+OCV修正估算 SOC 的你——你们都在重复同一个故事。 1964年戈壁滩上的那群人,今天下午在实验室里穿着无尘服盯着 AOI 图像的良率工程师,昨天晚上坐在示波器面前一帧一帧 decode CAN 报文的你——用的是同一种思维、同一种精神、同一种"我不信这个邪"的倔强。
资源永远是不够的。 无论是 1964 年的戈壁滩,还是半导体工厂,还是你今天写着 MISRA C 2012 法规要求的 ASIL-D 安全代码——资源向来不够。但资源和方法的结合,可以创造出超越资源本身的结果。
这就是一条贯穿全书、贯穿你整个职业生涯的主线:有限资源 + 人的主观能动性 = 无限可能。
本篇小结
今天我们做了一件事:用多种方法论——从过采样到卡尔曼滤波——证明了——精度1%的传感器,可以测出千分之一精度的物理量。
关键结论:
- 过采样 + 统计平均:用时间换精度,噪声是零均值的,采样10000次,精度提升两个数量级。
- 差分测量让共模自己消失:从惠斯通电桥到CAN总线,不需要消灭噪声,只需要让噪声在两个通道上完全相同地出现——然后做减法。
- 卡尔曼滤波的本质只有三个词:预测—测量—更新——融合多路粗糙传感器,得到比任何单一传感器都精确的估计。
下一节,那群戈壁滩上的工程师背后,是一段比任何好莱坞电影都更震撼的故事。
【下集预告】
这群戈壁滩上的工程师——他们背后的故事,比任何好莱坞电影都更震撼。苏联撤走所有专家、带走所有资料,留下一句"没有我们,你们一辈子也造不出原子弹"。然后呢?算盘 + 手摇计算机、手工打磨微米级离心机转子、拿生命做实验安全担保。两弹一星的精神到底是什么?下一节,我们走进那段历史。
722

被折叠的 条评论
为什么被折叠?



