4、卡尔曼滤波推导(上):从贝叶斯滤波到卡尔曼滤波,状态预测与观测更新

各位同学好,我是你们的导航算法讲师。今天我们来啃一块硬骨头——卡尔曼滤波的数学推导。

说实话,我当年第一次看卡尔曼滤波的论文时,也是一头雾水。满篇的矩阵、协方差、高斯分布,感觉像在看天书。但后来我在做组合导航项目时,被IMU的噪声折磨得够呛,才真正理解了这套理论的精妙之处。

嗯,咱们不搞那些花里胡哨的。今天我就带你从最朴素的贝叶斯滤波出发,一步步走到卡尔曼滤波。你想想看,这其实就是一个「猜谜游戏」——我们怎么用数学来「猜」出系统的最优状态。

4.1 从贝叶斯滤波说起

贝叶斯滤波,说白了就是一套「根据观测结果更新信念」的数学框架。我习惯把它理解成:

  • 先验:我对系统状态的初始猜测
  • 似然:当前观测值有多「像」我的猜测
  • 后验:结合观测后,我对状态的修正

公式很简单,但威力巨大:

P(x|z) = P(z|x) * P(x) / P(z)

这里P(x|z)就是后验概率,P(x)是先验,P(z|x)是似然。分母P(z)是个归一化常数,保证概率和为1。

核心思想:贝叶斯滤波告诉我们——不要只相信模型,也不要只相信观测,要相信「模型+观测」的融合结果。

我在做车载组合导航时遇到过一个问题:GPS信号突然变差,如果只相信GPS,定位会跳来跳去;如果只相信IMU,误差会越积越大。贝叶斯滤波的思路就是——两边都听,但谁靠谱就多信谁一点。

4.2 从贝叶斯到卡尔曼:高斯假设

贝叶斯滤波虽然优雅,但有个致命问题——计算量太大。为什么呢?因为你需要维护整个概率分布,这在连续状态空间里几乎不可能。

卡尔曼老爷子想了个聪明的办法:假设所有噪声都是高斯分布。这样一来,我们只需要维护两个东西:

  • 均值 μ:系统状态的最优估计
  • 协方差 P:这个估计的不确定性

你想想看,一个高斯分布只需要两个参数就能描述,这比维护整个概率密度函数省了多少事!

个人经验:我刚开始做滤波时,总觉得高斯假设太强了,实际噪声哪有那么完美?后来发现,只要噪声不是特别离谱,卡尔曼滤波的鲁棒性其实很强。当然,如果遇到重尾噪声(比如GPS多径效应),那就得考虑鲁棒卡尔曼滤波了。

4.3 状态预测:时间更新

预测阶段,说白了就是「根据模型猜下一步」。假设我们有线性系统:

x_k = F * x_{k-1} + B * u_k + w_k
z_k = H * x_k + v_k

其中w_k是过程噪声,v_k是观测噪声,都假设为零均值高斯分布。

预测公式其实就两行:

// 状态预测
x_pred = F * x_est + B * u

// 协方差预测
P_pred = F * P_est * F^T + Q

这里Q是过程噪声协方差矩阵。Q越大,说明我们对模型越不信任,预测的不确定性就越大。

避坑指南:我曾经在调Q矩阵时犯过一个低级错误——把Q设得太小,觉得自己的模型很准。结果系统收敛得很慢,而且一旦有扰动就反应不过来。后来我学乖了:Q要留点余量,给模型不确定性一些「呼吸空间」。

4.4 观测更新:测量更新

观测更新阶段,就是「用实际测量值修正预测」。核心公式如下:

// 卡尔曼增益
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

这里R是观测噪声协方差矩阵。R越大,说明观测越不可靠,卡尔曼增益K就越小,我们越不相信观测值。

你仔细看这个公式:

  • z - H*x_pred 叫「新息」或「残差」——预测值和实际观测的差距
  • K 就是「信任分配器」——多大程度上用新息修正预测

说白了,卡尔曼滤波就是在做一件事:用新息乘以一个权重,然后加到预测值上。这个权重K就是卡尔曼增益。

直观理解:如果模型很准(Q小),观测噪声大(R大),那么K就小,我们更相信预测。反之,如果模型不准(Q大),观测很准(R小),那么K就大,我们更相信观测。

4.5 知识体系总览

为了让你对本章内容有个整体把握,我画了一张流程图:

卡尔曼滤波推导(上):知识体系 贝叶斯滤波 P(x|z) = P(z|x)P(x)/P(z) 先验 → 似然 → 后验 高斯假设 卡尔曼滤波 均值μ + 协方差P 线性系统 + 高斯噪声 两大步骤 ① 状态预测 ② 观测更新 状态预测(时间更新) x_pred = F·x_est + B·u P_pred = F·P_est·F^T + Q Q:过程噪声协方差 观测更新(测量更新) K = P_pred·H^T·(H·P_pred·H^T+R)^(-1) x_est = x_pred + K·(z - H·x_pred) R:观测噪声协方差 核心思想 预测 + 观测 → 最优估计 卡尔曼增益K = 信任分配器

4.6 一个简单的例子

假设我们要估计一辆汽车的位置。系统模型是:

位置 = 上一时刻位置 + 速度 * dt + 噪声

观测是GPS给出的位置,但GPS有噪声。

预测阶段:

x_pred = x_est + v * dt
P_pred = P_est + Q   // 这里F=1,所以简化了

观测更新阶段:

K = P_pred / (P_pred + R)
x_est = x_pred + K * (z - x_pred)
P_est = (1 - K) * P_pred

你看,当GPS噪声R很大时,K很小,我们基本不相信GPS,位置主要靠模型预测。当模型噪声Q很大时,P_pred变大,K接近1,我们更相信GPS。

调参心得:我习惯先调R(观测噪声),因为GPS的噪声特性通常可以从数据手册或实测得到。Q就比较玄学了,我一般先设一个较小的值,然后看滤波器的收敛速度和稳态误差,慢慢调整。

4.7 本章小结

今天我们走完了从贝叶斯滤波到卡尔曼滤波的推导之路。核心就三点:

  • 贝叶斯滤波是理论根基,但计算量大
  • 高斯假设让问题简化,只需维护均值和协方差
  • 预测+更新两步走,卡尔曼增益K决定信任分配

下一章我们会继续深入,讨论卡尔曼滤波的数学推导细节,以及在实际工程中如何调参。嗯,今天就到这里,希望你能把这几行核心公式刻在脑子里。

记住:卡尔曼滤波不是魔法,它只是用数学告诉你——在不确定的世界里,如何做出最优的决策。

专注资料整理