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 图,不同斜率的线段对应不同的噪声类型。

我画个图帮你理解:

Allan 方差分析曲线(典型 IMU) 相关时间 τ (s) 10⁰ 10¹ 10² 10³ 10⁻⁴ 10⁻⁵ 10⁻⁶ Allan 方差 白噪声 (斜率 -1/2) 零偏不稳定性 随机游走 (斜率 +1/2) 最佳时间 噪声成分 角度随机游走 零偏不稳定性 速率随机游走

这张图怎么看?我教你个口诀:

  • 斜率为 -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 做体检,随机游走解释了漂移的来源,卡尔曼滤波则是把这些噪声统统「制服」的利器。

下一章,我们会把这些工具真正用起来——做一次完整的传感器标定和融合实战。


专注资料整理