4、传感器噪声建模:从高斯到卡尔曼
做多传感器融合,第一关就是跟噪声打交道。我刚开始接触这行的时候,总觉得传感器数据嘛,读出来直接用不就完了?后来被现实狠狠教育了一顿——传感器输出的原始数据,说白了就是「信号 + 噪声」的混合体。你不把噪声的脾气摸清楚,后面什么滤波、融合都是白搭。
这一章,咱们就把几种最常见的噪声模型挨个过一遍。我会结合自己踩过的坑,告诉你每种噪声长什么样、怎么建模、怎么处理。
4.1 高斯噪声:最温柔的干扰
高斯噪声,也叫正态分布噪声。你想想看,传感器在理想环境下,读数围绕真实值上下波动,大部分偏差很小,偶尔出现大偏差——这就是高斯噪声的典型表现。
数学上,它用两个参数描述:均值 μ 和标准差 σ。均值通常为 0,标准差决定了噪声的「幅度」。
核心公式:
概率密度函数:p(x) = (1 / (σ√(2π))) · e^(-(x-μ)² / (2σ²))
实际应用中,我们通常假设 μ=0,只关心 σ。
我在项目中遇到过一件事:用某款激光雷达测距,静态场景下读数一直在 ±2cm 跳动。我一开始以为是硬件问题,后来用 Allan 方差一分析(后面会讲),发现就是典型的高斯白噪声。加个简单的均值滤波就搞定了。
实战建议:
判断传感器噪声是否服从高斯分布,可以采集一段静态数据,画直方图。如果形状像钟形曲线,那就是高斯噪声。否则,就要考虑其他模型了。
4.2 椒盐噪声:视觉传感器的噩梦
椒盐噪声,名字挺形象——图像上随机出现一些白点(盐)和黑点(椒)。这玩意儿在摄像头、红外传感器里特别常见。
为什么会这样?说白了就是传感器像素单元损坏、传输过程中数据丢包、或者电磁干扰。我调试过一个工业相机,在强电磁环境下,图像上每隔几帧就蹦出一堆白点。一开始我以为是算法问题,查了半天才发现是电源滤波没做好。
椒盐噪声的建模很简单:
- 设定噪声密度 d(比如 0.05 表示 5% 的像素被污染)
- 被污染的像素中,一半变成最大值(盐),一半变成最小值(椒)
注意:
椒盐噪声不能用均值滤波处理!均值滤波会把噪声扩散到周围像素,反而让图像更模糊。正确的做法是用中值滤波——我当年就犯过这个错,折腾了两天才发现。
4.3 量化噪声:ADC 带来的精度损失
量化噪声,是模拟信号转数字信号时必然产生的。你想想看,一个 12 位的 ADC,只能把电压分成 4096 个等级。真实电压落在两个等级之间时,只能取整——这个取整误差就是量化噪声。
量化噪声的模型很简单:
- 假设量化步长为 q(比如 12 位 ADC,参考电压 3.3V,q = 3.3/4096 ≈ 0.8mV)
- 量化误差均匀分布在 [-q/2, q/2] 之间
- 方差为 q²/12
我记得有一次做惯性导航,IMU 的加速度计读数总是有 0.01g 左右的波动。我一开始以为是运动噪声,后来发现是 ADC 位数不够——从 12 位换成 16 位后,问题直接解决了。
经验公式:
每增加 1 位 ADC 位数,信噪比提升约 6dB。所以,如果你对精度要求高,直接上高位数 ADC 是最省事的办法。
4.4 Allan 方差分析:IMU 噪声的「体检报告」
Allan 方差,说白了就是给 IMU 做体检。它能帮你把陀螺仪和加速度计里的各种噪声成分拆解开——哪些是白噪声、哪些是随机游走、哪些是零偏不稳定性。
做法很简单:采集一段长时间的静态数据(至少 1 小时),然后计算不同时间尺度下的方差。画成 log-log 图,不同斜率的线段对应不同的噪声类型。
我画个图帮你理解:
这张图怎么看?我教你个口诀:
- 斜率为 -1/2 的部分:对应角度随机游走(白噪声),这是陀螺仪的主要噪声源
- 平坦的部分:对应零偏不稳定性,这是 IMU 的「底噪」
- 斜率为 +1/2 的部分:对应速率随机游走,这是低频漂移
曲线的最低点对应的 τ 值,就是 IMU 的最佳积分时间。超过这个时间,漂移就开始占主导了。
实战技巧:
做 Allan 方差分析时,数据采集时间至少是最大相关时间的 10 倍。比如你想分析 100 秒的噪声特性,至少采 1000 秒的数据。我一般采 2 小时起步。
4.5 IMU 随机游走建模:漂移从哪来
IMU 的随机游走,说白了就是噪声的积分效应。陀螺仪的输出是角速度,积分得到角度。如果角速度上有白噪声,积分后就会变成随机游走——角度误差随时间线性增长。
数学上,随机游走是一个维纳过程:
// 离散时间模型
θ[k+1] = θ[k] + w[k] * dt
其中:
θ[k] 是第 k 步的角度
w[k] ~ N(0, σ²) 是高斯白噪声
dt 是采样间隔
我记得有一次做无人机姿态估计,悬停时角度漂移越来越严重。用 Allan 方差一分析,发现陀螺仪的角度随机游走系数是 0.01°/√h。这意味着悬停 1 小时,角度误差会漂到 0.6° 左右——对于无人机来说,这已经很大了。
避坑指南:
我曾经以为随机游走只能靠更高精度的 IMU 解决。后来发现,用卡尔曼滤波融合加速度计和磁力计,可以有效抑制低频漂移。硬件不够,算法来凑——这是做传感器融合的常态。
4.6 卡尔曼滤波基础:噪声的「克星」
卡尔曼滤波,说白了就是一个「预测 + 修正」的循环。它用系统模型预测下一时刻的状态,然后用传感器测量值来修正这个预测。
核心就五个公式:
| 步骤 | 公式 | 说明 |
|---|---|---|
| 预测状态 | x̂ₖ⁻ = A·x̂ₖ₋₁ + B·uₖ | 根据上一时刻估计当前状态 |
| 预测协方差 | Pₖ⁻ = A·Pₖ₋₁·Aᵀ + Q | 估计的不确定性 |
| 卡尔曼增益 | Kₖ = Pₖ⁻·Hᵀ·(H·Pₖ⁻·Hᵀ + R)⁻¹ | 决定相信预测还是测量 |
| 更新状态 | x̂ₖ = x̂ₖ⁻ + Kₖ·(zₖ - H·x̂ₖ⁻) | 用测量值修正预测 |
| 更新协方差 | Pₖ = (I - Kₖ·H)·Pₖ⁻ | 更新不确定性 |
这里面的 Q 和 R 是关键——Q 是过程噪声协方差(对应系统模型的不确定性),R 是测量噪声协方差(对应传感器的噪声水平)。
我刚开始用卡尔曼滤波时,最头疼的就是调 Q 和 R。后来总结了一个经验:
- Q 设得大:滤波器更相信测量值,响应快但噪声大
- R 设得大:滤波器更相信预测值,响应慢但平滑
- Q/R 比值决定了滤波器的带宽
一个简单的例子:
假设你要估计一个静止物体的位置,用超声波传感器测量距离。系统模型就是位置不变(A=1),测量模型就是直接测量位置(H=1)。
如果超声波噪声标准差是 1cm,你设 R=1。如果物体可能缓慢移动,你设 Q=0.01。卡尔曼滤波会自动平衡预测和测量,给出最优估计。
嗯,这一章的内容就到这。噪声建模是传感器融合的基石——高斯噪声、椒盐噪声、量化噪声,各有各的脾气。Allan 方差帮你给 IMU 做体检,随机游走解释了漂移的来源,卡尔曼滤波则是把这些噪声统统「制服」的利器。
下一章,我们会把这些工具真正用起来——做一次完整的传感器标定和融合实战。