卡尔曼滤波:让不确定的数据“融合”出真相
2026/6/16 2:36:50 网站建设 项目流程

引言

在现实生活中,我们往往无法直接获得一个系统状态的精确值。例如:无人驾驶汽车需要知道自己的实时位置——GPS信号有噪声,惯性传感器的读数会漂移,轮速计在打滑时失效。单独依赖任何一个传感器,都会得到不完美的结果。有没有一种方法,可以把这些“不准”的数据融合起来,得到一个“更准”的估计?

卡尔曼滤波(Kalman Filter)正是这样一个优雅的数学工具。它由鲁道夫·卡尔曼在1960年提出,通过预测—更新两个步骤的迭代,利用系统的动态模型和带有噪声的观测,递归地给出最优状态估计(在噪声服从高斯分布、系统线性的假设下,它是最小均方误差意义上的最优估计)。

如果把单次测量比作“雾里看花”,把模型预测比作“刻舟求剑”,那么卡尔曼滤波就是“让预测和观测互相纠错,像炼金术士一样炼出最纯的金子”


前置知识

  1. 状态空间模型:用状态向量 xkxk​ 描述系统在时刻 kk 的“真实情况”(如位置、速度)。状态随时间演化,并且我们能通过观测 zkzk​ 间接感知它。

  2. 线性高斯系统

    • 状态转移方程:xk=Fkxk−1+Bkuk+wkxk​=Fk​xk−1​+Bk​uk​+wk​,其中 wk∼N(0,Qk)wk​∼N(0,Qk​) 是过程噪声。

    • 观测方程:zk=Hkxk+vkzk​=Hk​xk​+vk​,其中 vk∼N(0,Rk)vk​∼N(0,Rk​) 是观测噪声。

    • 所有噪声均为零均值高斯白噪声,且互不相关。

  3. 协方差矩阵:描述状态各分量之间不确定度的相关性。例如 Pk=Cov(xk)Pk​=Cov(xk​)。

  4. 贝叶斯滤波:卡尔曼滤波是贝叶斯在线滤波在高斯线性情况下的闭式解。

  5. 矩阵运算基础:转置、求逆、矩阵乘法和加法。


核心思想

卡尔曼滤波采用递归方式:每个时刻,它先根据上一时刻的估计值预测当前时刻的状态(先验估计),然后利用当前时刻的观测值更新这个预测(后验估计)。更新时按照卡尔曼增益来平衡预测的不确定度和观测的不确定度——谁的协方差小,谁就更“可信”。

可以用一个生活中的例子来理解:

  • 你要估计房间的温度。你有一个温度模型(比如关窗后温度变化很小),这是预测

  • 你还有一个温度计,但读数有误差,这是观测

  • 卡尔曼滤波会结合两者:如果温度计很准(观测噪声小),就更相信它;如果模型很准(过程噪声小),就更相信预测。而且它会动态地调整这种信任程度。

数学本质:卡尔曼滤波推导出后验估计的均值和协方差的解析解,结果就是先验估计 + 增益 × (观测 - 期望观测),其中增益由协方差计算得出。整个过程不需要保留历史数据,仅需上一时刻的状态和协方差,因此极其适合实时应用。


卡尔曼滤波算法步骤(标准形式)

假设系统是离散时间、线性的。每个周期包括两个阶段:

1. 预测阶段(基于上一时刻的后验)

  • 状态先验估计

    x^k−=Fkx^k−1+Bkukx^k−​=Fk​x^k−1​+Bk​uk​

    其中 x^k−1x^k−1​ 是上一时刻的后验估计,ukuk​ 是控制输入(如驱动力)。

  • 先验协方差

    Pk−=FkPk−1FkT+QkPk−​=Fk​Pk−1​FkT​+Qk​

    这一步将上一时刻的不确定度传播到当前,并加上过程噪声 QkQk​ 带来的新增不确定度。

2. 更新阶段(融合当前观测)

  • 卡尔曼增益

    Kk=Pk−HkT(HkPk−HkT+Rk)−1Kk​=Pk−​HkT​(Hk​Pk−​HkT​+Rk​)−1

    增益决定了观测对估计的修正程度。当观测噪声 RkRk​ 很大时,KkKk​ 变小,更相信预测;当 Pk−Pk−​ 很大时,KkKk​ 变大,更相信观测。

  • 状态后验估计

    x^k=x^k−+Kk(zk−Hkx^k−)x^k​=x^k−​+Kk​(zk​−Hk​x^k−​)

    括号内称为新息(innovation)或残差,即实际观测与预期观测之差。

  • 后验协方差更新(两种等价形式):

    Pk=(I−KkHk)Pk−Pk​=(I−Kk​Hk​)Pk−​

    这一步量化了融合后剩余的不确定性。

以上公式中,所有矩阵在 kk 时刻均可已知(Fk,Bk,Hk,Qk,RkFk​,Bk​,Hk​,Qk​,Rk​ 可能是时变的,但通常很多应用中是常数)。


算法流程图解

text

+-------------------+ +-------------------+ | 上一时刻后验估计 | | 系统输入 | | x_hat_{k-1}, P_{k-1} | | u_k | +-------------------+ +-------------------+ │ │ ↓ ↓ ┌─────────────────────────────────────┐ │ 预测: │ │ x_hat_k^- = F_k x_hat_{k-1} + B_k u_k│ │ P_k^- = F_k P_{k-1} F_k^T + Q_k │ └─────────────────────────────────────┘ │ ↓ ┌─────────────────────────────────────┐ │ 等待观测 z_k │ └─────────────────────────────────────┘ │ ↓ ┌─────────────────────────────────────┐ │ 更新: │ │ K_k = P_k^- H_k^T (H_k P_k^- H_k^T + R_k)^{-1} │ │ x_hat_k = x_hat_k^- + K_k(z_k - H_k x_hat_k^-) │ │ P_k = (I - K_k H_k) P_k^- │ └─────────────────────────────────────┘ │ ↓ +-------------------+ | 当前时刻后验估计 | | x_hat_k, P_k | +-------------------+ │ └──────────→ 下一时刻

性质与关键理解

性质说明
最优性在系统为线性且噪声为高斯白噪声的条件下,卡尔曼滤波提供最小均方误差(MMSE)估计,等价于贝叶斯后验均值。
递归只需保存上一时刻的状态和协方差,计算量恒定,适合嵌入式实时系统。
无偏性如果初始估计无偏,则所有后续估计都是无偏的:E[x^k]=E[xk]E[x^k​]=E[xk​]。
协方差收敛对于时不变系统(固定F, H, Q, R),协方差矩阵 PkPk​ 会收敛到一个稳态值,此时卡尔曼增益也收敛。
鲁棒性即便噪声不是严格高斯,卡尔曼滤波往往也是线性系统下性能优良的次优滤波器。
可观测性系统必须可观(即通过观测能唯一确定状态),否则滤波发散。

关于卡尔曼增益的直观

  • 当观测噪声协方差 RR 很大(观测不可信)时,KK 很小,依赖预测。

  • 当状态先验协方差 P−P− 很大(预测很迷茫)时,KK 很大,更相信观测。

  • 当状态维度高时,矩阵求逆(HP−HT+RHP−HT+R 的逆)是主要计算开销。


拓展与变体

  1. 扩展卡尔曼滤波(EKF):用于非线性系统。将状态转移函数和观测函数进行一阶泰勒展开线性化,然后套用标准卡尔曼滤波框架。广泛用于无人机、机器人SLAM。

  2. 无迹卡尔曼滤波(UKF):使用Sigma点近似非线性分布,比EKF精度更高,无需计算雅可比矩阵。

  3. 容积卡尔曼滤波(CKF):基于球面径向积分规则,高维系统性能更优。

  4. 信息滤波:协方差矩阵的逆(信息矩阵)递推,适合多传感器融合。

  5. 自适应卡尔曼滤波:在线估计过程噪声 QQ 和观测噪声 RR,应对时变环境。

  6. 粒子滤波:非高斯、强非线性场景下,用随机采样的粒子近似后验分布,替代卡尔曼滤波。


常见误区澄清

  • 误区1:卡尔曼滤波要求系统是线性的。
    → 正确:标准卡尔曼滤波确实要求线性,但EKF/UKF能处理弱非线性。

  • 误区2:卡尔曼滤波只能处理平稳过程。
    → 不,它可以跟踪时变系统,只要模型参数 Fk,HkFk​,Hk​ 能随时间变化。

  • 误区3:过程噪声和观测噪声必须已知且精确。
    → 实际工程中往往需要调参(tuning),通过实验选择合理的 QQ 和 RR。

  • 误区4:卡尔曼滤波的初值不重要。
    → 实际上,初值 x^0x^0​ 和 P0P0​ 会影响前期收敛速度,但对稳态性能影响很小。

总结

卡尔曼滤波是将模型预测数据观测进行最优融合的数学框架。它用优雅的递归公式,将充满噪声的传感器数据和动力学模型相结合,实时给出真实状态的最佳估计。虽然其背后的数学涉及概率论和矩阵运算,但其核心思想极其朴素:相信模型还是相信数据?——看谁更确定

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询