第2章:传感器误差模型——确定性误差与随机误差的数学建模

做传感器融合这些年,我最大的体会就是:不懂误差模型,就别谈融合。你想想看,传感器本身就不是完美的。它输出的数据,说白了就是「真实值 + 一堆乱七八糟的误差」。如果你连这些误差长什么样、怎么建模都不知道,那后面的卡尔曼滤波、互补滤波全都是空中楼阁。

这一章,我们就来把传感器误差这件事彻底讲清楚。我会分成两大块:确定性误差和随机误差。前者是可以校准掉的,后者是随机过程,需要用统计方法处理。

传感器误差模型知识体系 传感器误差模型 确定性误差 零偏 (Bias) 尺度因子 (Scale Factor) 轴偏差 (Misalignment) 随机误差 白噪声 (White Noise) 随机游走 (Random Walk) 闪烁噪声 (Flicker Noise) 校准确定性误差 → 建模随机误差 → 融合滤波

2.1 确定性误差:能校准的,都不是问题

确定性误差,说白了就是「有规律的偏差」。它不会随机跳变,每次开机基本都一样。所以,只要你知道它长什么样,就能把它干掉。我在做IMU标定时,第一步永远是先把确定性误差抠干净。

2.1.1 零偏(Bias)

零偏是最直观的误差。传感器静止时,输出应该为零,但它偏不。比如加速度计平放时,Z轴输出不是9.8 m/s²,而是9.85 m/s²。这多出来的0.05,就是零偏。

数学上,零偏模型很简单:

y_measured = y_true + b + noise

其中 b 就是零偏。我习惯用 Allan方差法 来估计零偏的稳定性。记得有一次,一个陀螺仪刚上电时零偏是0.01°/s,运行半小时后漂到了0.05°/s。嗯,这就是零偏随温度变化了,后面得加温度补偿。

实战技巧: 零偏校准最简单的方法就是「静态采集求平均」。把传感器放平,采集1000个数据点,取均值就是零偏。但要注意——采集时间要够长,至少30秒,否则随机噪声会影响精度。

2.1.2 尺度因子(Scale Factor)

尺度因子,就是「增益误差」。传感器输出的变化量,和真实变化量不成正比。比如你转90°,陀螺仪输出显示95°。这个1.0556的比例偏差,就是尺度因子误差。

模型长这样:

y_measured = (1 + s) * y_true + b + noise

s 就是尺度因子误差,通常用ppm(百万分之一)或百分比表示。我曾经调试过一个MEMS加速度计,尺度因子误差达到了2%。这意味着测10m/s²时,误差就有0.2m/s²——对于导航来说,这已经很大了。

注意: 尺度因子往往是非线性的!在小量程和大量程下,s的值可能不一样。我建议做多点标定,至少取3个不同的输入值,拟合出s的曲线。

2.1.3 轴偏差(Misalignment)

轴偏差,就是传感器的三个轴没有严格正交。你想想看,MEMS芯片封装时,X轴和Y轴不可能完美垂直90°,总会有个零点几度的偏差。这个偏差在旋转时会耦合到其他轴上。

完整的确定性误差模型,其实是这样的矩阵形式:

y_measured = M * S * (y_true + b) + noise

其中:

  • M 是轴偏差矩阵(3×3,非对角元素表示轴间耦合)
  • S 是尺度因子矩阵(对角矩阵)
  • b 是零偏向量

我习惯把这三个合起来,做一个六位置标定法。具体做法是:把传感器分别朝六个方向(±X, ±Y, ±Z)静止放置,采集数据,然后解算出M、S、b。这个方法在工业界非常成熟,我几乎每个项目都会用。

核心结论: 确定性误差的校准,本质上就是求解一个线性方程组。只要你的标定工装足够精密,校准后可以把误差降低1~2个数量级。

2.2 随机误差:这才是真正的挑战

校准完确定性误差后,你以为数据就干净了?太天真了。剩下的随机误差,才是融合滤波要对付的真正敌人。随机误差无法被「校准掉」,只能用统计模型来描述,然后用滤波器去估计和抑制。

2.2.1 白噪声(White Noise)

白噪声是最基础的随机误差。它的特点是:每个时刻的噪声值相互独立,服从高斯分布。数学上,我们用功率谱密度(PSD)来描述它。

模型:

w(t) ~ N(0, σ²)
E[w(t) * w(τ)] = σ² * δ(t - τ)

说白了,白噪声的均值是0,方差是σ²,不同时刻之间没有相关性。在IMU中,白噪声通常来自电子热噪声和量化噪声。

我个人习惯用 角度随机游走(ARW) 或 速度随机游走(VRW) 来量化白噪声。比如一个陀螺仪的ARW是0.01°/√h,意思是积分1小时后,角度误差的均方根是0.01°。

避坑指南: 我曾经以为白噪声很简单,直接用方差σ²建模就行。后来发现,不同采样率下,白噪声的方差会变!因为采样率越高,噪声带宽越宽。正确的做法是用噪声密度(单位:°/s/√Hz)来建模,这样与采样率无关。

2.2.2 随机游走(Random Walk)

随机游走,就是白噪声的积分。你想想看,如果陀螺仪的输出有白噪声,那积分后的角度就会像醉汉走路一样,越漂越远。这就是随机游走。

数学上,随机游走是一个维纳过程:

x(k+1) = x(k) + w(k)
其中 w(k) ~ N(0, σ²)

随机游走的方差随时间线性增长:

Var[x(t)] = σ² * t

这就是为什么纯惯性导航会发散——因为随机游走导致误差随时间累积。我在做无人机导航时,纯惯导撑不过30秒,位置误差就超过10米了。

关键理解: 白噪声是「高频随机」,随机游走是「低频漂移」。在Allan方差曲线上,白噪声对应斜率为-1/2的区域,随机游走对应斜率为+1/2的区域。

2.2.3 闪烁噪声(Flicker Noise / 1/f Noise)

闪烁噪声,也叫1/f噪声,是低频段的「幽灵」。它的功率谱密度与频率成反比:

S(f) ∝ 1/f

频率越低,噪声越大。这意味着,你采集时间越长,闪烁噪声的影响越明显。在MEMS传感器中,闪烁噪声主要来自半导体材料的载流子捕获和释放过程。

闪烁噪声的建模比较麻烦,因为它既不是白噪声,也不是随机游走。我常用的方法是:

  • 用 Allan方差 来识别闪烁噪声(曲线上斜率为0的区域)
  • 用 一阶马尔可夫过程 来近似建模

一阶马尔可夫模型:

x(k+1) = α * x(k) + w(k)
其中 α = exp(-Δt / τ)

τ是相关时间常数。当τ很大时,它接近随机游走;当τ很小时,它接近白噪声。闪烁噪声就介于两者之间。

我曾经踩过的坑: 有一回做高精度姿态估计,我用了简单的白噪声模型,结果低频漂移一直压不下去。后来用Allan方差一分析,发现闪烁噪声占了主导。换成马尔可夫模型后,效果立竿见影。所以,别偷懒,一定要先做Allan方差分析。

2.3 完整的误差模型:把一切串起来

好了,现在我们把确定性误差和随机误差合在一起,得到一个完整的传感器输出模型:

y_measured = M * S * (y_true + b) + n_white + n_walk + n_flicker

其中:

  • M, S, b:确定性误差(可校准)
  • n_white:白噪声(高斯分布,无相关性)
  • n_walk:随机游走(白噪声的积分)
  • n_flicker:闪烁噪声(1/f噪声,用马尔可夫近似)

在实际工程中,我一般这样处理:

  1. 第一步:标定确定性误差。用六位置法或转台标定,把M、S、b求出来,然后补偿掉。
  2. 第二步:分析随机误差。采集静态数据,做Allan方差分析,识别出白噪声、随机游走、闪烁噪声的系数。
  3. 第三步:建立状态空间模型。把随机误差作为状态变量,融入到卡尔曼滤波器中。
一句话总结: 确定性误差靠校准,随机误差靠滤波。两者缺一不可,顺序也不能搞反。先校准,再滤波——这是我做传感器融合的铁律。

嗯,这一章的内容就到这里。误差模型是传感器融合的基石,理解透了,后面的卡尔曼滤波、互补滤波才能用得顺手。下一章我们会深入Allan方差的具体计算方法,到时候我会手把手教你如何从原始数据中提取出这些误差参数。


可可精品资料库