4、传感器原理(下):传感器噪声分析、Allan方差、零偏稳定性、标度因数误差、安装误差

好,咱们接着聊传感器原理。上一节我把陀螺仪和加速度计的基本工作原理讲清楚了。这一节,咱们得面对一个现实问题——传感器不完美

你想想看,再贵的MEMS芯片,它也是个微机械结构。温度一变、振动一来、甚至你呼吸的气流都能影响它。我刚开始做惯导那会儿,拿到一块崭新的IMU,兴冲冲地往板子上一焊,结果数据一读——嗯?怎么静止不动的时候,陀螺仪还在输出0.1度每秒?

这就是噪声。咱们这一节,就是要把这些“不完美”拆开来看清楚。

4.1 传感器噪声的来源与分类

传感器噪声,说白了就是输出信号里那些你不想要的随机波动。它分两大类:

  • 随机噪声:比如白噪声、随机游走。这类噪声没法完全消除,只能靠滤波。
  • 确定性误差:比如零偏、标度因数误差、安装误差。这类误差可以通过标定来补偿。

我个人习惯把噪声想象成“信号上的毛刺”。你用手按住IMU,理论上输出应该是0。但实际读出来,可能是在0附近上下跳动的值。这些跳动,就是噪声。

一个小经验: 判断噪声大不大,最简单的办法就是看静止时的数据标准差。如果标准差超过了你系统允许的误差范围,那这块IMU就得考虑换或者做更复杂的补偿了。

4.2 Allan方差——噪声的“CT扫描仪”

说到噪声分析,就绕不开Allan方差。这玩意儿是干啥的?

你可以把它理解成噪声的“CT扫描仪”。它能帮你把不同时间尺度上的噪声成分一一拆解出来。比如:哪些是白噪声?哪些是随机游走?哪些是零偏不稳定性?

我记得第一次用Allan方差分析一个国产陀螺仪的数据,画出来的曲线让我大吃一惊——那个陀螺仪的低频噪声比数据手册上写的差了整整一个数量级。嗯,从那以后,我再也不完全相信数据手册了。

Allan方差的计算方法其实不复杂:

// 伪代码:Allan方差计算
for tau in 时间簇长度列表:
    将原始数据按tau长度分成N段
    计算每段的平均值
    计算相邻段平均值的差的平方
    取平均,再除以2
    得到Allan方差值 σ²(τ)

画出来就是一张log-log图。横轴是时间τ,纵轴是Allan标准差。不同斜率的线段对应不同的噪声类型:

  • 斜率 -1/2:角度随机游走(白噪声)
  • 斜率 0:零偏不稳定性
  • 斜率 +1/2:速率随机游走
  • 斜率 +1:量化噪声
关键点: Allan方差曲线的最低点对应的τ值,就是你能获得最佳角度估计的时间窗口。这个值对卡尔曼滤波的参数设计非常有用。

4.3 零偏稳定性——你永远无法消除的“常数”

零偏,就是传感器在零输入时的输出值。理论上应该是0,实际上不是。

更麻烦的是,这个零偏不是固定的。它会随着温度、时间、甚至供电电压的变化而缓慢漂移。这个漂移的程度,就是零偏稳定性

我做过一个项目,把IMU放在恒温箱里测了24小时。结果发现,温度每变化1度,陀螺仪的零偏就漂移了0.01度/秒。你想想看,如果飞行器在户外飞行,温度变化十几度,那误差积累起来有多可怕。

零偏稳定性的单位通常是 °/h(度每小时)或 mg(毫重力加速度)。数值越小越好。比如:

传感器等级 陀螺仪零偏稳定性 加速度计零偏稳定性
消费级(手机用) 10 ~ 100 °/h 10 ~ 50 mg
工业级 1 ~ 10 °/h 1 ~ 10 mg
战术级 0.1 ~ 1 °/h 0.1 ~ 1 mg
导航级 < 0.01 °/h < 0.01 mg
注意: 零偏稳定性不是固定值。它通常是在特定温度下、经过充分预热后测得的。实际使用中,温度变化会显著恶化这个指标。

4.4 标度因数误差——你的传感器“刻度”不准

标度因数,就是输入和输出之间的比例关系。比如陀螺仪,输入100°/s的角速度,输出应该是某个电压值或数字量。如果这个比例关系有偏差,就是标度因数误差。

举个例子:你给陀螺仪输入100°/s,它输出对应的数值。但实际计算时,你用的是理想的比例系数。结果算出来的角速度可能是98°/s或102°/s。这就是标度因数误差在作怪。

标度因数误差通常用ppm(百万分之一)或百分比表示。我见过最夸张的一次,一个廉价IMU的标度因数误差达到了5%。也就是说,你转一圈360度,它算出来可能只有342度。这种误差在姿态估计中会直接导致角度积分发散。

标定方法其实不复杂:

  • 陀螺仪:放在转台上,给一个已知角速度,记录输出,拟合出真实比例系数。
  • 加速度计:利用重力加速度,分别让每个轴朝上、朝下,记录输出,计算比例系数。

4.5 安装误差——三个轴“歪了”

理想情况下,IMU的三个轴应该是互相垂直的。但实际制造中,不可能做到绝对垂直。这个偏差就是安装误差。

安装误差的影响有多大?我举个例子:

假设X轴和Y轴之间有1度的安装误差。当载体绕X轴旋转时,Y轴会“看到”一个微小的角速度分量。这个分量在卡尔曼滤波里会被当成真实的运动,导致姿态估计出现偏差。

安装误差的补偿通常需要做六位置标定多位置标定。说白了,就是把IMU放在已知姿态的位置上,记录数据,然后反算出三个轴之间的夹角偏差。

我的建议: 如果你用的是模块化IMU(比如MPU6050、ICM-20948这类),出厂前已经做过基本的安装误差补偿了。但如果你自己把IMU焊在板子上,或者用了非标封装,那一定要重新做安装误差标定。

4.6 把这些误差放进卡尔曼滤波

好了,现在我们知道传感器有这么多“毛病”。那在卡尔曼滤波里怎么处理?

答案是:把误差建模成状态变量

比如,在姿态估计的卡尔曼滤波中,状态向量通常包含:

  • 姿态角(四元数或欧拉角)
  • 陀螺仪零偏
  • 加速度计零偏(可选)

这样,滤波器在估计姿态的同时,也在实时估计传感器的零偏。这就是所谓的“在线标定”。

我曾经在一个无人机项目里,把陀螺仪零偏作为状态量加入滤波器。结果发现,起飞后前30秒,零偏估计值从初始的0.1°/s逐渐收敛到0.02°/s。之后姿态精度明显提升。嗯,这就是卡尔曼滤波的魅力——它不仅能滤波,还能帮你“学习”传感器的特性。

最后说一句:理解传感器噪声,是设计好卡尔曼滤波的前提。你花在噪声分析上的时间,会在后续的滤波调试中十倍百倍地回报你。