卡尔曼滤波(Kalman Filter, KF)及其扩展版本——扩展卡尔曼滤波(Extended Kalman Filter, EKF)和无迹卡尔曼滤波(Unscented Kalman Filter, UKF)——是用于动态系统状态估计的经典方法。本笔记将详细介绍这三种滤波器的原理、数学推导和算法流程。
基本卡尔曼滤波(KF)
问题背景与基本假设
卡尔曼滤波的目标是估计一个动态系统的状态 $x_k$,该状态随时间 $ k $ 变化。由于我们无法直接观测 $ x_k $,只能通过含噪声的观测 $ z_k $ 间接获取状态信息。系统基于以下假设:
- 线性动态系统:状态转移和观测过程可以用线性方程描述。
- 高斯噪声:系统噪声和观测噪声均为零均值的高斯白噪声。
系统的数学模型如下:
状态转移方程:
- $ x_k $:时刻 $ k $ 的真实状态向量(未知)。
- $ A $:状态转移矩阵,描述状态从 $ k-1 $ 到 $ k $ 的线性演化。
- $ B $:控制输入矩阵,将控制输入映射到状态空间。
- $ u_{k-1} $:控制输入向量,表示外部输入对系统的作用。
- $ w_{k-1} $:过程噪声,服从高斯分布 $ w_{k-1} \sim N(0, Q) $,其中 $ Q $ 为过程噪声协方差矩阵,描述过程噪声的不确定性。
示例说明
假设一个简单的一维运动系统:物体在匀加速运动中,状态包括位置 $ p $ 和速度 $ v $,控制输入是加速度 $ a $。状态向量为 $ x_k = [p_k, v_k]^T $,控制输入为 $ u_k = a_k $。
离散化后(时间步长为 $ \Delta t $)的状态转移方程为:
写成矩阵形式:
状态转移矩阵$ A = \begin{bmatrix} 1 & \Delta t \\ 0 & 1 \end{bmatrix} $描述位置和速度的自然演化(即使没有加速度,位置仍随速度变化)。$ A $ 是系统的内在动力学模型,负责状态的自然演化。$ A x_{k-1} $ 表示无外部输入时的状态转移。
控制输入矩阵$ B = \begin{bmatrix} \frac{1}{2} \Delta t^2 \\ \Delta t \end{bmatrix} $将加速度 $ a_{k-1} $ 映射到位置和速度的变化。$ B $ 是外部控制的桥梁,将控制输入引入状态空间。$ B u_{k-1} $ 表示加速度对状态的贡献。
观测方程:
- $ z_k $:时刻 $ k $ 的观测向量,通过传感器获取。
- $ H $:观测矩阵,将真实状态映射到观测空间。
- $ v_k $:观测噪声,服从高斯分布 $ v_k \sim N(0, R) $,其中 $ R $ 为观测噪声协方差矩阵,描述观测噪声的不确定性。
目标:根据观测 $ z_k $ 和先前的估计,递归地计算状态 $ x_k $ 的最佳估计。??
概率框架与贝叶斯估计
卡尔曼滤波基于贝叶斯估计,利用先验信息和观测数据更新状态估计。核心是计算状态 $ x_k $ 的后验概率分布 $ p(x_k | z_{1:k}) $,其中 $ z_{1:k} $ 表示从时刻 1 到 $ k $ 的所有观测。
贝叶斯定理(Bayes’ Theorem)
贝叶斯定理是概率论中的一个基本公式,用于在有新证据时更新某一事件发生的概率。其核心思想是:通过已知的条件概率反推出感兴趣的概率。
- 条件概率的定义
设 $A$、$B$ 是两个概率大于 0 的事件,定义条件概率为:
同理:
两式右边的分子都是事件 $A$ 与 $B$ 同时发生的概率 $P(A \cap B)$。
- 贝叶斯定理的推导过程
从 (2) 式变形,解出联合概率:
代入式 (1) 中,得到:
这就是贝叶斯定理的标准形式,其中:
- $ P(A \mid B) $:后验概率(posterior),即在已知 $B$ 发生的前提下,事件 $A$ 发生的概率;
- $ P(B \mid A) $:似然度(likelihood),即在 $A$ 已发生的前提下,$B$ 发生的概率;
- $ P(A) $:先验概率(prior),即在未观察到 $B$ 前,事件 $A$ 的概率;
- $ P(B) $:边际概率(marginal),即事件 $B$ 发生的总概率。
贝叶斯估计在卡尔曼滤波中的应用
根据贝叶斯定理:
- $p(x_k|z_{1:k})$:后验概率(posterior),表示在观测到 $z_{1:k}$ 后,状态 $x_k$ 的概率分布。
- $p(z_k|x_k)$:似然概率(likelihood),表示在状态 $x_k$ 下观测到 $z_k$ 的概率。
- $p(x_k|z_{1:k-1})$:先验概率(prior),表示在观测到 $z_k$ 之前,基于历史观测 $z_{1:k-1}$ 对状态 $x_k$ 的预测。
- $p(z_k|z_{1:k-1})$:归一化常数(evidence),表示观测 $z_k$ 的边缘概率,用于归一化后验概率。
卡尔曼滤波通过以下两步实现贝叶斯估计:
- 预测(时间更新):根据上一时刻的后验分布预测当前时刻的先验分布。
- 更新(测量更新):利用贝叶斯定理结合观测更新为后验分布。
先验概率 $p(x_k | z_{1:k-1})$
贝叶斯定理中的部分:
卡尔曼滤波中的对应公式:
其中:
似然概率 $p(z_k | x_k)$
贝叶斯定理中的部分:
卡尔曼滤波中的对应公式:
归一化常数 $p(z_k | z_{1:k-1})$
贝叶斯定理中的部分:
卡尔曼滤波中的对应公式:
其中:
后验概率 $p(x_k | z_{1:k})$
贝叶斯定理中的部分:
卡尔曼滤波中的对应公式:
其中:
协方差与协方差矩阵:
协方差是衡量两个随机变量之间线性相关性的统计量。对于随机变量 $ X $ 和 $ Y $,协方差定义为:
- 正协方差:$ X $ 和 $ Y $ 趋于同方向变化。
- 负协方差:$ X $ 和 $ Y $ 趋于反方向变化。
- 协方差为零:$ X $ 和 $ Y $ 无线性相关性。
协方差矩阵是协方差的推广,适用于随机向量。对于 $ n $ 维随机向量 $ \mathbf{x} = [x_1, x_2, \dots, x_n]^T $,协方差矩阵 $ \Sigma $ 为:
- 对角线元素 $ \Sigma_{ii} = \text{Var}(x_i) $:表示 $ x_i $ 的方差。
- 非对角线元素 $ \Sigma_{ij} = \text{Cov}(x_i, x_j) $:表示 $ x_i $ 和 $ x_j $ 的协方差。
在卡尔曼滤波中,协方差矩阵(如 $ P_{k|k-1} $ 和 $ P_{k|k} $)描述状态估计的不确定性,是算法的核心组成部分。
预测步骤(时间更新)
状态预测
根据状态转移方程:
由于 $ w_{k-1} $ 是零均值高斯噪声,取期望得到先验状态估计:
- $ \hat{x}_{k-1|k-1} $:时刻 $ k-1 $ 的后验状态估计,上一时刻更新后的估计值。
协方差预测
定义先验误差为:
代入状态转移方程:
- $ e_{k-1|k-1} $:后验误差,即 $ x_{k-1} - \hat{x}_{k-1|k-1} $。
先验协方差矩阵 $ P_{k|k-1} $ 是先验误差的协方差:
展开:
取期望:
由于 $ e_{k-1|k-1} $ 是上一时刻的后验误差,与当前时刻的过程噪声 $ w_{k-1} $ 独立,且 $ E[w_{k-1}] = 0 $,交叉项为零:
因此:
更新步骤(测量更新)
观测残差
观测残差(或创新)是实际观测与预测观测之差:
创新协方差 $ S_k $ 是观测残差的协方差:
推导:
由于 $ e_{k|k-1} $ 和 $ v_k $ 独立,且 $ E[v_k] = 0 $:
因此:
$ S_k $ 是以下两部分的综合:
- 先验预测的不确定性:$ H P_{k|k-1} H^T $ 表示先验状态估计的不确定性通过观测矩阵映射到观测空间。
- 观测噪声的不确定性:$ R $ 表示传感器本身的噪声特性。
卡尔曼增益
卡尔曼增益 $ K_k $ 是先验估计和观测的权衡因子:
它决定了观测残差对状态估计的修正程度。
卡尔曼增益的推导
卡尔曼增益 $ K_k $ 是状态估计的关键,目标是通过最小化后验误差协方差得到最优估计。这里使用最小均方误差(MMSE)方法推导 $ K_k = P_{k|k-1} H^T S_k^{-1} $。
后验状态估计定义为:
后验误差:
后验协方差:
目标是最小化 $ P_{k|k} $ 的迹($\text{tr}(P_{k|k})$),对 $ K_k $ 求导:
解得:
状态更新
后验状态估计通过先验估计加上残差的加权修正得到:
协方差更新
后验协方差矩阵表示更新后的不确定性:
代入 $ \hat{x}_{k|k} = \hat{x}_{k|k-1} + K_k \tilde{y}_k $:
计算协方差:
展开并利用 $ e_{k|k-1} $ 和 $ v_k $ 独立性,简化得:
完整算法流程
初始化:
- 初始状态估计:$ \hat{x}_{0|0} $
- 初始协方差矩阵:$ P_{0|0} $
对于每个时刻 $ k = 1, 2, \dots $:
- 预测:
- $ \hat{x}_{k|k-1} = A \hat{x}_{k-1|k-1} + B u_{k-1} $
- $ P_{k|k-1} = A P_{k-1|k-1} A^T + Q $
- 更新:
- $ \tilde{y}_k = z_k - H \hat{x}_{k|k-1} $
- $ S_k = H P_{k|k-1} H^T + R $
- $ K_k = P_{k|k-1} H^T S_k^{-1} $
- $ \hat{x}_{k|k} = \hat{x}_{k|k-1} + K_k \tilde{y}_k $
- $ P_{k|k} = (I - K_k H) P_{k|k-1} $
强化理解
预测
这一阶段利用系统模型从上一时刻的状态估计当前时刻的状态。
$ \hat{x}_{k|k-1} = A \hat{x}_{k-1|k-1} + B u_{k-1} $
- 物理意义:
$ \hat{x}_{k|k-1} $ 是当前时刻的先验状态估计,表示在未使用当前测量数据之前,根据系统动态模型预测的状态。- $ A \hat{x}_{k-1|k-1} $:
通过状态转移矩阵 $ A $ 将上一时刻的最优状态 $ \hat{x}_{k-1|k-1} $(如位置、速度)映射到当前时刻。例如,若物体匀速运动,位置增加量为速度乘以时间间隔。 - $ B u_{k-1} $:
表示外部控制输入(如加速度、油门)对状态的影响,通过控制矩阵 $ B $ 映射到状态空间。若无控制输入,则此项为零。 - 直观理解:
比如一辆车,上一秒位置是10米,速度是2米/秒,预测下一秒位置是12米(假设无加速度控制)。
- $ A \hat{x}_{k-1|k-1} $:
- 物理意义:
$ P_{k|k-1} = A P_{k-1|k-1} A^T + Q $
- 物理意义:
$ P_{k|k-1} $ 是先验协方差矩阵,表示预测状态 $ \hat{x}_{k|k-1} $ 的不确定性。- $ A P_{k-1|k-1} A^T $:
将上一时刻的后验协方差 $ P_{k-1|k-1} $(上一时刻状态的不确定性)通过状态转移传播到当前时刻。不确定性可能因系统动态而放大或缩小。 - $ Q $:
过程噪声协方差,表示系统模型的不完美性(如风速变化、路面不平引起的随机扰动)。 - 直观理解:
预测时间越长(或模型越不准),不确定性越大,$ P_{k|k-1} $ 的值会增加。例如,预测一辆车的未来位置时,风向变化会增加位置的不确定性。
- $ A P_{k-1|k-1} A^T $:
- 物理意义:
更新
这一阶段利用当前测量数据修正预测值,得到更准确的状态估计。
$ \tilde{y}_k = z_k - H \hat{x}_{k|k-1} $
- 物理意义:
$ \tilde{y}_k $ 是测量残差(或创新),表示实际测量值与预测测量值之间的偏差。- $ z_k $:
当前时刻的传感器测量值(如GPS报告的位置)。 - $ H \hat{x}_{k|k-1} $:
通过观测矩阵 $ H $ 将预测状态映射到测量空间的预期测量值。例如,若状态包括位置和速度,而传感器只测位置,则 $ H $ 提取位置部分。 - 直观理解:
如果预测位置是12米,测量值是11.8米,残差 $ \tilde{y}_k = 11.8 - 12 = -0.2 $ 米,表示预测偏高。
- $ z_k $:
- 物理意义:
$ S_k = H P_{k|k-1} H^T + R $
- 物理意义:
$ S_k $ 是测量残差的协方差矩阵,表示残差 $ \tilde{y}_k $ 的不确定性,综合了预测和测量的不可靠性。- $ H P_{k|k-1} H^T $:
预测状态的不确定性 $ P_{k|k-1} $ 在测量空间的投影,反映预测的可信度对残差的影响。 - $ R $:
测量噪声协方差,表示传感器测量的随机误差(如GPS的精度误差)。 - 直观理解:
$ S_k $ 越大,说明残差受预测或测量噪声影响越大,可信度越低。例如,若GPS精度差,$ R $ 大,$ S_k $ 增加。
- $ H P_{k|k-1} H^T $:
- 物理意义:
$ K_k = P_{k|k-1} H^T S_k^{-1} $
- 物理意义:
$ K_k $ 是卡尔曼增益,决定预测和测量在状态修正中的相对权重,反映了两者的可信度平衡。- $ P_{k|k-1} H^T $:
表示预测状态的不确定性如何影响测量空间。若 $ P_{k|k-1} $ 大(预测不可靠),$ K_k $ 倾向于更大。 - $ S_k^{-1} $:
残差协方差的逆。若 $ S_k $ 大(残差不可信),$ S_k^{-1} $ 小,$ K_k $ 减小。 - 直观理解:
若预测位置不确定性高($ P_{k|k-1} $ 大),而测量较可靠($ R $ 小),$ K_k $ 接近1,更信任测量;反之,若测量噪声大,$ K_k $ 接近0,更信任预测。
- $ P_{k|k-1} H^T $:
- 物理意义:
$ \hat{x}_{k|k} = \hat{x}_{k|k-1} + K_k \tilde{y}_k $
- 物理意义:
$ \hat{x}_{k|k} $ 是后验状态估计,结合预测和测量信息后的最优状态估计。- $ \hat{x}_{k|k-1} $:
先验状态估计,作为更新的起点。 - $ K_k \tilde{y}_k $:
根据卡尔曼增益和测量残差对预测值的修正量。 - 直观理解:
预测位置12米,测量11.8米,若 $ K_k = 0.6 $,则 $ \hat{x}_{k|k} = 12 + 0.6 \cdot (11.8 - 12) = 11.88 $ 米,融合了两者的结果。
- $ \hat{x}_{k|k-1} $:
- 物理意义:
$ P_{k|k} = (I - K_k H) P_{k|k-1} $
- 物理意义:
$ P_{k|k} $ 是后验协方差矩阵,表示后验状态估计 $ \hat{x}_{k|k} $ 的不确定性。- $ (I - K_k H) $:
一个缩减因子,反映测量信息如何减少预测的不确定性。 - $ P_{k|k-1} $:
先验协方差,作为更新的基础。 - 直观理解:
融合测量后,不确定性通常减小。例如,若 $ K_k $ 大(信任测量),$ P_{k|k} $ 显著小于 $ P_{k|k-1} $,表示状态估计更可信。
- $ (I - K_k H) $:
- 物理意义:
总结
KF 通过预测和更新递归优化状态估计,适用于线性高斯系统,具有高效性和最优性。
扩展卡尔曼滤波(EKF)
问题背景与基本假设
EKF 用于非线性动态系统的状态估计,假设噪声为高斯,通过局部线性化处理非线性。
数学模型与线性化
状态转移方程:
- $ f(\cdot) $:非线性状态转移函数。
观测方程:
- $ h(\cdot) $:非线性观测函数。
线性化
- 状态转移函数在 $ \hat{x}_{k-1|k-1} $ 处:
- 观测函数在 $ \hat{x}_{k|k-1} $ 处:
预测步骤(时间更新)
状态预测
根据非线性状态转移方程:
更新步骤(测量更新)
观测残差
线性化后:
创新协方差
卡尔曼增益
状态更新
协方差更新
完整算法流程
初始化:
- $ \hat{x}_{0|0} $,$ P_{0|0} $
对于每个时刻 $ k = 1, 2, \dots $:
- 预测:
- $ \hat{x}_{k|k-1} = f(\hat{x}_{k-1|k-1}, u_{k-1}, 0) $
- $ F_k = \frac{\partial f}{\partial x} \bigg|_{x = \hat{x}_{k-1|k-1}, u_{k-1}, w_{k-1}=0} $
- $ P_{k|k-1} = F_k P_{k-1|k-1} F_k^T + Q $
- 更新:
- $ \tilde{y}_k = z_k - h(\hat{x}_{k|k-1}, 0) $
- $ H_k = \frac{\partial h}{\partial x} \bigg|_{x = \hat{x}_{k|k-1}, v_k=0} $
- $ S_k = H_k P_{k|k-1} H_k^T + R $
- $ K_k = P_{k|k-1} H_k^T S_k^{-1} $
- $ \hat{x}_{k|k} = \hat{x}_{k|k-1} + K_k \tilde{y}_k $
- $ P_{k|k} = (I - K_k H_k) P_{k|k-1} $
总结
EKF 通过线性化处理非线性,适用于弱非线性系统,但强非线性时线性化误差可能影响精度。
无迹卡尔曼滤波(UKF)
问题背景与基本假设
UKF 用于非线性动态系统,通过无迹变换捕捉非线性特性,避免线性化误差。假设噪声为高斯。
数学模型与无迹变换
状态转移方程:
观测方程:
无迹变换
无迹变换通过一组精心选择的采样点(Sigma 点)传播非线性函数:
- 对于 $ n $ 维状态向量 $ x \sim N(\hat{x}, P) $,生成 $ 2n + 1 $ 个 Sigma 点。
- 将这些点通过非线性函数 $ f $ 或 $ h $ 传播,计算变换后的均值和协方差。
- 参数:
- $ \lambda = \alpha^2 (n + \kappa) - n $:缩放参数。
- $ \alpha $:控制 Sigma 点分布范围(通常取 $ 10^{-3} \sim 1 $)。
- $ \kappa $:次要缩放参数(通常取 0 或 $ 3 - n $)。
- $ \beta $:融入高阶信息(对于高斯分布,$ \beta = 2 $ 最优)。
UKF 的步骤分为预测和更新两部分,使用 Sigma 点传播非线性。
预测步骤(时间更新)
生成 Sigma 点
基于上一时刻的后验估计 $ \hat{x}_{k-1|k-1} $ 和 $ P_{k-1|k-1} $:
- $ \lambda = \alpha^2 (n + \kappa) - n $。
- $ (\sqrt{(n + \lambda) P_{k-1|k-1}})_i $ 是矩阵平方根(如 Cholesky 分解)的第 $ i $ 列。
状态预测
将 Sigma 点通过状态转移函数传播:
加权平均计算先验状态估计:
权重:
协方差预测
计算先验协方差:
权重:
更新步骤(测量更新)
观测预测
将 Sigma 点通过观测函数传播:
预测观测均值:
创新协方差与交叉协方差
创新协方差:
状态-观测交叉协方差:
卡尔曼增益
状态更新
观测残差:
后验状态估计:
协方差更新
完整算法流程
初始化:
- 初始状态估计:$ \hat{x}_{0|0} $
- 初始协方差矩阵:$ P_{0|0} $
对于每个时刻 $ k = 1, 2, \dots $:
- 预测:
- 生成 Sigma 点:$ \mathcal{X}_{k-1|k-1}^{(i)} $
- $ \mathcal{X}_{k|k-1}^{(i)} = f(\mathcal{X}_{k-1|k-1}^{(i)}, u_{k-1}, 0) $
- $ \hat{x}_{k|k-1} = \sum_{i=0}^{2n} W_m^{(i)} \mathcal{X}_{k|k-1}^{(i)} $
- $ P_{k|k-1} = \sum_{i=0}^{2n} W_c^{(i)} (\mathcal{X}_{k|k-1}^{(i)} - \hat{x}_{k|k-1})(\mathcal{X}_{k|k-1}^{(i)} - \hat{x}_{k|k-1})^T + Q $
- 更新:
- $ \mathcal{Z}_{k|k-1}^{(i)} = h(\mathcal{X}_{k|k-1}^{(i)}, 0) $
- $ \hat{z}_{k|k-1} = \sum_{i=0}^{2n} W_m^{(i)} \mathcal{Z}_{k|k-1}^{(i)} $
- $ S_k = \sum_{i=0}^{2n} W_c^{(i)} (\mathcal{Z}_{k|k-1}^{(i)} - \hat{z}_{k|k-1})(\mathcal{Z}_{k|k-1}^{(i)} - \hat{z}_{k|k-1})^T + R $
- $ P_{xz,k} = \sum_{i=0}^{2n} W_c^{(i)} (\mathcal{X}_{k|k-1}^{(i)} - \hat{x}_{k|k-1})(\mathcal{Z}_{k|k-1}^{(i)} - \hat{z}_{k|k-1})^T $
- $ K_k = P_{xz,k} S_k^{-1} $
- $ \hat{x}_{k|k} = \hat{x}_{k|k-1} + K_k (z_k - \hat{z}_{k|k-1}) $
- $ P_{k|k} = P_{k|k-1} - K_k S_k K_k^T $
总结
UKF 通过无迹变换处理非线性,精度高于 EKF,适用于强非线性系统,但计算复杂度较高。
三种滤波器的对比
滤波器 | 适用系统 | 方法 | 优点 | 缺点 |
---|---|---|---|---|
KF | 线性高斯系统 | 线性代数 | 计算高效、最优 | 不适用于非线性系统 |
EKF | 弱非线性系统 | 线性化(雅可比) | 扩展到非线性、计算较快 | 线性化误差、需计算导数 |
UKF | 强非线性系统 | 无迹变换 | 精度高、无需导数 | 计算复杂度高 |
选择滤波器时需根据系统特性权衡精度和计算成本。