4、传感器原理(下):传感器噪声分析、Allan方差、零偏稳定性、标度因数误差、安装误差
好,咱们接着聊传感器原理。上一节我把陀螺仪和加速度计的基本工作原理讲清楚了。这一节,咱们得面对一个现实问题——传感器不完美。
你想想看,再贵的MEMS芯片,它也是个微机械结构。温度一变、振动一来、甚至你呼吸的气流都能影响它。我刚开始做惯导那会儿,拿到一块崭新的IMU,兴冲冲地往板子上一焊,结果数据一读——嗯?怎么静止不动的时候,陀螺仪还在输出0.1度每秒?
这就是噪声。咱们这一节,就是要把这些“不完美”拆开来看清楚。
4.1 传感器噪声的来源与分类
传感器噪声,说白了就是输出信号里那些你不想要的随机波动。它分两大类:
- 随机噪声:比如白噪声、随机游走。这类噪声没法完全消除,只能靠滤波。
- 确定性误差:比如零偏、标度因数误差、安装误差。这类误差可以通过标定来补偿。
我个人习惯把噪声想象成“信号上的毛刺”。你用手按住IMU,理论上输出应该是0。但实际读出来,可能是在0附近上下跳动的值。这些跳动,就是噪声。
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:量化噪声
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放在已知姿态的位置上,记录数据,然后反算出三个轴之间的夹角偏差。
4.6 把这些误差放进卡尔曼滤波
好了,现在我们知道传感器有这么多“毛病”。那在卡尔曼滤波里怎么处理?
答案是:把误差建模成状态变量。
比如,在姿态估计的卡尔曼滤波中,状态向量通常包含:
- 姿态角(四元数或欧拉角)
- 陀螺仪零偏
- 加速度计零偏(可选)
这样,滤波器在估计姿态的同时,也在实时估计传感器的零偏。这就是所谓的“在线标定”。
我曾经在一个无人机项目里,把陀螺仪零偏作为状态量加入滤波器。结果发现,起飞后前30秒,零偏估计值从初始的0.1°/s逐渐收敛到0.02°/s。之后姿态精度明显提升。嗯,这就是卡尔曼滤波的魅力——它不仅能滤波,还能帮你“学习”传感器的特性。
最后说一句:理解传感器噪声,是设计好卡尔曼滤波的前提。你花在噪声分析上的时间,会在后续的滤波调试中十倍百倍地回报你。