卡尔曼滤波是一种高效的递归(自回归)滤波器。能够从一系列的不完全及包含噪声的测量中,估计动态系统的状态。卡尔曼滤波会根据各测量值在不同时间下的值,考虑各时间下的联合分布,再产生对未知变量的估计,因此会比只以单一测量值为基础的估计方式要准^{[1]}。
卡尔曼滤波示例
示例1^{[2]}
简单来说,卡尔曼滤波就是有多个不确定的结果,经过分析、推理和计算,获得相对准确的结果。
假设一辆车,从原点出发以2m/s匀速自西向东直线运动。t-1时刻位于原点正东6m处,t时刻雷达测得车距离原点东9m处。已知车匀速直线运动,运动模型方差 \theta_q^2=4(m^2),雷达距离方差 \theta_r^2=1(m^2)。问:当前小车距原点何处?或者问:小车距离原点何处可能性最大?
关于方差,一般方差的单位是测量值单位的平方。位置的单位为m时,那么其方差的单位应为m^2。方差的单位其实没有什么意义,而且此处方差的单位和平方米并非一个概念。
根据匀速直线运动方程,t时刻车应距离原点以东x_t=8m,称之为预测值。此模型并未考虑阻力和t-1时刻速度和t-1时刻位置准确性等因素。对于雷达测量的z_t=9m,称为观测值,由于测量仪器本身存在误差,也不完全准确。
那么如何利用预测值和观测值获取更准确的位置?一种方法是取两者均值,即二者均50%权重,结果为8.5m。但这并未利用二者的方差,方差越大代表结果可信度越低。因此方差越大的值,应该具有更低的权重。因此使用公式:
上述公式也是卡尔曼滤波最优值的更新公式。
示例2^{[5]}
假设一个车辆在时刻 t 的位置和速度状态 x_t。
其中位置p_t
速度状态v_t
通过上面两个公式,可以看到 p_t 以及 v_t 是输入变量的线性组合。因此也可以写为矩阵格式。
公式可以简化为卡尔曼滤波中第一个公式,即状态预测公式:
其中 F_t 为状态转移矩阵,表示如何从上一时刻 t-1 的状态来推测当前时刻的状态,B_t 为控制矩阵,表示控制量 u 如何作用于当前状态。上述 x 的 \hat {} 表示这是一个估计值,^- 上标是 x 的上标而非 t 的,表示这个估计值是根据上一时刻的状态推测而来。在后面会根据观测量来修正 \hat{x}^-_t,然后才能得到最优估计值。
在KF中,不确定性用状态协方差矩阵 P 表示,为了让不确定性在时刻间传递,使用 P_t^- = FP_{t-1}F^T 来表示,即两边乘以状态转移矩阵 F。这是根据协方差矩阵的性质: cov(Ax, Bx) = Acov(x,x)B^T 得来的。为了表示预测模型本身的噪声,在后面再加入一个状态转移协方差矩阵 Q,即
这也是卡尔曼滤波的第二个公式,表示不确定性在各个时刻间的传递。前两个公式是通过上一时刻的状态来预测当前时刻的状态。
然后,假设我们使用一个观测器,观测这个汽车的位置 z_t,即观测值。从汽车本身状态 x_t 到 z_t,需要一个观测矩阵 H 来进行线性变换。
在这里,x_t 和 z_t 的维度可以不同,z_t 的观测值只有位置即1个维度,但是 x_t 包含了两个维度,因此可以假设 H = [1 \quad 0],当 x_t 和矩阵 H 相乘可以得到标量 z_t。可以得到公式 z_t=Hx_t +v,由于观测值也存在误差,因此引入了观测噪声 v,其协方差矩阵用观测噪声方差矩阵 R 来表示。
根据上面得到的 \hat{x}^-_t,得到最优估计值公式(第四个公式,第三个公式在后面):
公式中 z_t - H \hat{x}^-_t 表示实际观测值和预测的观测值的残差。
残差是指观察值与模型估计值之间的差
K_t 为卡尔曼系数,其作用是权衡 预测状态协方差 P 和 观察值协方差 R 的大小来决定预测模型与观察模型的权重。以及把残差的表现形式从观察域转换到状态域。
卡尔曼系数的计算公式(第三个公式)为:
最后,更新最佳估计值的噪声分布(第五个公式),留给下一轮迭代使用:
状态的不确定性是减小的,下一轮迭代中由于传递噪声的引入,不确定性又会增大。KF就是在不确定性变化中寻找平衡。
原理推导
(线性)卡尔曼滤波的应用基于以下三个假设前提:
- 当前时刻状态只和上一时刻状态有关。
- 模型和系统均满足线性关系。
- 引入的噪声符合高斯分布。
对于和多时刻状态有关、非线性、非高斯问题,不能简单地使用卡尔曼滤波。
先说明一下卡尔曼滤波中涉及到的各个值:
- 真实值 True Value:系统状态的实际情况,一般是未知的。要知道就用不着KF了。如:车辆的真实速度30kph。
- 观测值 Measurement:通过传感器或其他手段获取的信息,但是会存在误差。如:速度传感器获取的速度28kph。
- 预测值 Prediction:根据上一时刻的估计值和系统动态模型预测到当前时刻的状态,也会存在误差。如:根据上一时刻估计的速度和加速度,预测得到当前时刻的速度。上一时刻估计值Estimation为29kph,加速度为0,那么预测车速仍为29kph。
- 估计值 Estimation:卡尔曼滤波的输出,基于观测值Measurement和预测值Prediction的加权,目的是尽可能接近真实值True Value。如:根据观测值Measurement和预测值Prediction加权,估计值Estimation计算为28.5kph。
过程模型:
测量模型:
x_k 表示 k 时刻真实值,即待估计值。如位置、速度等。
x_{k-1} 表示 k-1 时刻的真实值。
u_{k-1} 表示 k-1 时刻的控制输入量,如加速度。
w_k 表示过程噪声,p(w_k) \sim N(0,Q),即符合均值为0,协方差矩阵为Q的高斯噪声分布。
z_k 表示 k 时刻的观测值,如雷达或GPS测量结果,维度可能和 x_k 相同,也可能不同,如 x_k 包含位置和速度,但是测量结果只有位置信息。
v_k 表示测量噪声,和 w_k 类似,p(v_k) \sim N(0,R)。
F、B、H分别表示状态转移矩阵,控制矩阵,观测转移矩阵。
卡尔曼滤波黄金五条公式
预测
更新
参考文章
[2] 深入浅出理解卡尔曼滤波【实例、公式、代码和图】 - 知乎
[3] Kalman滤波通俗理解+实际应用_卡尔曼滤波应用实例-CSDN博客