第1章:线性卡尔曼滤波推导——从贝叶斯估计到卡尔曼增益
各位同学好,我是老张。在组合导航这行摸爬滚打了十几年,今天咱们来聊聊卡尔曼滤波最核心的东西——它的数学推导。
说实话,我第一次接触卡尔曼滤波时,看着那一堆矩阵和协方差,头都大了。后来慢慢发现,这东西说白了就是一套「预测-修正」的循环。你想想看,我们做导航,不就是先猜一下位置,然后用观测数据去修正这个猜测吗?
1.1 从贝叶斯估计说起
卡尔曼滤波的根,其实在贝叶斯估计里。贝叶斯定理告诉我们:
P(x|z) = P(z|x) * P(x) / P(z)
翻译成人话就是:后验概率 = 似然 × 先验概率 / 证据
嗯,这里要注意,在卡尔曼滤波的语境下:
- 先验:我们根据上一时刻的状态,预测当前时刻的状态
- 似然:当前观测值在给定状态下的可能性
- 后验:融合了预测和观测之后,我们对状态的最佳估计
我个人习惯把贝叶斯估计看作是卡尔曼滤波的「哲学基础」。你理解了贝叶斯,就理解了卡尔曼滤波为什么是「最优」的——因为它是在概率框架下,把已知信息都用上了。
核心思想:卡尔曼滤波本质上是在做「贝叶斯在线推理」,每一步都在更新我们对状态的概率认知。
1.2 线性卡尔曼滤波的数学推导
好,咱们来点硬核的。线性卡尔曼滤波假设系统是线性的,噪声是高斯白噪声。模型长这样:
状态方程:x_k = F * x_{k-1} + B * u_k + w_k
观测方程:z_k = H * x_k + v_k
其中 w_k ~ N(0, Q),v_k ~ N(0, R)。
我在项目中遇到过一个问题:有人把Q和R设成对角矩阵就完事了,结果滤波发散。后来发现,Q矩阵必须反映真实的系统噪声特性,不能随便拍脑袋。
预测步(Time Update)
预测步就是「猜」。我们根据上一时刻的最优估计,预测当前时刻的状态和协方差:
x_pred = F * x_est + B * u
P_pred = F * P_est * F^T + Q
这里:
- x_pred:预测的状态
- P_pred:预测的协方差(代表不确定性)
- Q:过程噪声协方差
你想想看,为什么协方差会变大?因为预测引入了不确定性(Q),所以我们对状态的把握变差了。
更新步(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就是卡尔曼增益,是整个滤波器的灵魂。
小技巧:我建议初学者先用手算一遍一维的情况,把矩阵换成标量,这样能直观看到每个变量的变化。
1.3 卡尔曼增益的物理意义
卡尔曼增益K,说白了就是一个「权重分配器」。它决定了我们更相信预测还是更相信观测。
咱们来看K的表达式:
K = P_pred * H^T * (H * P_pred * H^T + R)^{-1}
这个公式可以拆成两部分理解:
- 分子:P_pred * H^T —— 预测的不确定性
- 分母:H * P_pred * H^T + R —— 预测不确定性 + 观测噪声
所以K的取值在0到1之间(一维情况下):
- 当R很小(观测很准)时,K → 1,我们更相信观测
- 当P_pred很小(预测很准)时,K → 0,我们更相信预测
我曾经调试一个组合导航系统,发现K值一直偏大,导致滤波结果跟着观测跳来跳去。后来发现是R矩阵设得太小了,相当于我过度相信了传感器。调大R之后,K值降下来,滤波曲线就平滑了。
避坑指南:我曾经把Q和R设成固定值,结果系统在不同工况下表现差异很大。后来我改用自适应方法,根据残差动态调整Q和R,效果好了很多。
1.4 知识体系总览
下面这张图是我自己画的,把本章的核心逻辑串起来了:
这张图把贝叶斯估计、预测步、更新步和卡尔曼增益串在了一起。你顺着箭头看,就能理解整个滤波流程。
1.5 本章小结
咱们这一章讲了三个核心内容:
- 贝叶斯估计是卡尔曼滤波的理论基础——后验 = 似然 × 先验
- 预测步和更新步的数学推导——先猜后修,循环往复
- 卡尔曼增益的物理意义——它是预测和观测之间的「信任天平」
说实话,这些公式看起来复杂,但只要你理解了「预测-修正」这个循环,再回头看公式,就会发现它们其实很自然。我在带新人时,总是让他们先用手算一维的例子,把每个变量的变化画出来,这样比死记公式有效得多。
下一章咱们会聊非线性情况——扩展卡尔曼滤波。不过那是后话了,先把线性情况吃透再说。