第2章:传感器误差模型——确定性误差与随机误差的数学建模
做传感器融合这些年,我最大的体会就是:不懂误差模型,就别谈融合。你想想看,传感器本身就不是完美的。它输出的数据,说白了就是「真实值 + 一堆乱七八糟的误差」。如果你连这些误差长什么样、怎么建模都不知道,那后面的卡尔曼滤波、互补滤波全都是空中楼阁。
这一章,我们就来把传感器误差这件事彻底讲清楚。我会分成两大块:确定性误差和随机误差。前者是可以校准掉的,后者是随机过程,需要用统计方法处理。
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。嗯,这就是零偏随温度变化了,后面得加温度补偿。
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²——对于导航来说,这已经很大了。
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。这个方法在工业界非常成熟,我几乎每个项目都会用。
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°。
2.2.2 随机游走(Random Walk)
随机游走,就是白噪声的积分。你想想看,如果陀螺仪的输出有白噪声,那积分后的角度就会像醉汉走路一样,越漂越远。这就是随机游走。
数学上,随机游走是一个维纳过程:
x(k+1) = x(k) + w(k)
其中 w(k) ~ N(0, σ²)
随机游走的方差随时间线性增长:
Var[x(t)] = σ² * t
这就是为什么纯惯性导航会发散——因为随机游走导致误差随时间累积。我在做无人机导航时,纯惯导撑不过30秒,位置误差就超过10米了。
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 / τ)
τ是相关时间常数。当τ很大时,它接近随机游走;当τ很小时,它接近白噪声。闪烁噪声就介于两者之间。
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噪声,用马尔可夫近似)
在实际工程中,我一般这样处理:
- 第一步:标定确定性误差。用六位置法或转台标定,把M、S、b求出来,然后补偿掉。
- 第二步:分析随机误差。采集静态数据,做Allan方差分析,识别出白噪声、随机游走、闪烁噪声的系数。
- 第三步:建立状态空间模型。把随机误差作为状态变量,融入到卡尔曼滤波器中。
嗯,这一章的内容就到这里。误差模型是传感器融合的基石,理解透了,后面的卡尔曼滤波、互补滤波才能用得顺手。下一章我们会深入Allan方差的具体计算方法,到时候我会手把手教你如何从原始数据中提取出这些误差参数。