第2章:卡尔曼滤波入门:状态空间模型、预测与更新、协方差矩阵的意义
各位同学,欢迎来到第二讲。
上一章我们聊了INS的基本原理,知道了陀螺和加速度计是怎么工作的。但有个问题一直悬着——传感器有噪声,积分会漂移,怎么办?
答案就是卡尔曼滤波。
说实话,我当年刚接触卡尔曼滤波时,被那一堆矩阵公式搞得晕头转向。后来在项目里摔了几次跟头,才慢慢摸到门道。今天我就用最直白的方式,把卡尔曼滤波的核心讲清楚。
2.1 状态空间模型:把问题装进盒子里
卡尔曼滤波的第一步,是把你的系统描述成「状态空间模型」。说白了,就是用数学语言告诉滤波器:你现在有什么、下一步会变成什么样。
一个典型的状态空间模型包含两个方程:
- 状态方程:描述系统状态如何随时间演化
- 观测方程:描述传感器测量值与状态的关系
拿INS来说,我们的状态通常包括:位置、速度、姿态角,还有陀螺和加速度计的零偏。写成矩阵形式就是:
x_k = F * x_{k-1} + B * u_k + w_k
z_k = H * x_k + v_k
这里:
x_k是k时刻的状态向量F是状态转移矩阵u_k是控制输入(比如加速度计读数)w_k是过程噪声z_k是观测值(比如GPS位置)H是观测矩阵v_k是观测噪声
关键点:状态空间模型的核心假设是「马尔可夫性」——当前状态只与上一时刻状态有关,与更早的历史无关。这个假设大大简化了计算。
我在做车载组合导航时,遇到过一个问题:状态向量里到底该包含哪些量?我的经验是——能估计的尽量估计,但不要贪多。比如陀螺零偏一定要加,但加速度计刻度因子如果变化不大,可以先忽略。否则状态维数太高,滤波器容易发散。
2.2 预测与更新:两步走,步步为营
卡尔曼滤波的精髓就两个字:预测和更新。像个循环,每来一个新数据就执行一次。
2.2.1 预测步(Time Update)
预测步做什么?用上一时刻的最优估计,推算当前时刻的状态和协方差。
x_pred = F * x_est + B * u
P_pred = F * P_est * F^T + Q
这里:
x_pred是预测状态P_pred是预测协方差Q是过程噪声协方差矩阵
嗯,这里要注意:Q 矩阵的设置非常关键。它代表你对模型的信任程度。Q设得太大,滤波器会过于相信测量值,噪声大;Q设得太小,滤波器反应迟钝,跟不上真实变化。
我的经验:Q矩阵的调参没有标准答案。我一般先根据传感器手册的噪声指标估算一个初值,然后在仿真数据上微调。记住一个原则——宁可Q偏大一点,也别偏小。偏大只是噪声大,偏小可能导致发散。
2.2.2 更新步(Measurement Update)
当新的测量值到来时,我们用预测值和测量值做一个加权平均,得到最优估计。
K = P_pred * H^T * (H * P_pred * H^T + R)^{-1}
x_est = x_pred + K * (z - H * x_pred)
P_est = (I - K * H) * P_pred
这里:
K是卡尔曼增益R是观测噪声协方差矩阵z - H*x_pred是残差(也叫新息)
卡尔曼增益K决定了预测和测量谁更可信。K大,说明测量值可靠,更新幅度大;K小,说明预测值可靠,更新幅度小。
避坑指南:我曾经在项目中遇到一个问题——滤波器输出结果看起来很好,但残差序列明显不白。后来发现是R矩阵设得太小,导致滤波器过度相信GPS测量,把INS的预测信息几乎丢弃了。结果GPS一丢,INS直接飞掉。所以一定要检查残差的白噪声特性。
2.3 协方差矩阵的意义:不确定性的量化
协方差矩阵是卡尔曼滤波的灵魂。它量化了我们对状态估计的不确定性。
对角线元素是方差,代表每个状态量的不确定度。非对角线元素是协方差,代表不同状态量之间的相关性。
举个例子:
P = [ σ_xx^2 σ_xy^2 ]
[ σ_yx^2 σ_yy^2 ]
如果σ_xy很大,说明x和y的估计误差高度相关。这在INS中很常见——比如位置误差和速度误差就是强相关的。
为什么协方差矩阵重要?
- 它决定了卡尔曼增益的大小
- 它反映了滤波器的收敛状态
- 它可以帮助我们诊断滤波器是否正常工作
我习惯在调试时把协方差矩阵的对角线元素画出来。如果某个状态的方差突然增大,说明那个时刻的观测质量可能有问题。如果方差一直不收敛,那就要检查模型或者参数了。
你想想看,如果没有协方差矩阵,我们怎么知道当前估计有多可靠?卡尔曼滤波之所以强大,就是因为它不仅给出估计值,还给出估计的置信度。
2.4 核心逻辑框架图
下面我用一张SVG图来总结卡尔曼滤波的完整流程:
这张图把卡尔曼滤波的闭环流程展示得很清楚。从初始状态出发,先预测,再更新,输出最优估计,然后进入下一时刻。周而复始,这就是卡尔曼滤波的「递推」本质。
2.5 本章小结
今天我们讲了三个核心概念:
- 状态空间模型:把INS问题抽象成数学形式
- 预测与更新:两步走的递推框架
- 协方差矩阵:不确定性的量化工具
说实话,这些概念光看公式是不够的。我建议你动手写一个一维的卡尔曼滤波程序,比如估计一个匀速运动物体的位置。跑起来,看看协方差怎么变化,看看增益怎么调整。只有亲手调过参数,才能真正理解卡尔曼滤波的脾气。
课后小练习:写一个一维卡尔曼滤波,状态为位置和速度,观测为位置(带噪声)。尝试不同的Q和R值,观察估计效果的变化。你会发现——Q和R的比值,决定了滤波器的「性格」。
公众号:蓝海资料掘金营,微信deep3321