什么是卡尔曼滤波?
你想对某一组指标进行预测,现在已经有两组不是很准的方案:
- 你已经有了预测方程,进而可以预测均值和方差(假设这一组指标)
- 测量某些指标,从而推断你的指标
这种情况非常适合Kalman滤波 卡尔曼滤波的的优点如下:
- 可以有效利用多个粗糙数据之间的关系,而单独面对这些数据你可能都无从下手。
- 卡尔曼滤波尤其适合动态系统。
- 它对于内存要求极低(它仅需要保留系统上一个状态的数据,空间复杂度O(1))。它运算很快,这使得它非常适合解决实时问题和应用于嵌入式系统。
step1
1. 预测部分
$x_k=Ax_{k-1}+Bu_{k-1}+w_{k-1}$
其中,
$x_{k-1}$是一个多维正态分布,代表系统状态
$u_{k-1}$是对系统的控制量,
$w$是多维正态分布,是系统噪声
如果仅仅使用预测迭代式进行迭代,预测误差会越来越大,最终没有意义。
2. 测量部分
$z_k=H x_k+v_k$
step2
这一步,分别使用以上两种模型去求随机变量$z_k$
预测部分
在第k-1次迭代中,求得了$x_{k-1}\sim N(\hat x_{k-1},P_{k-1})$,带入预测公式,可以求得:
$x_k\sim N(\hat x_k,P_k)$
带入$z_k=H_k x_k$
得到$z_k\sim N(H_k x_k,H_kP_kH_k^T)$
(这里有个运算法则:多元正态分布乘以矩阵后,仍是多元正态分布,且均值和方差满足以上公式)
测量部分
$z_k\sim N(\hat z_k,R_k)$
step3
现在有了两种方案得到的$z_k$的分布,我们希望以此得到一个更准确的$z_k$分布。
(这一步看到过有贝叶斯法、最小均方差、正态分布乘法法,都是等价的,这里用正态分布乘法进行推导)
$N(u_0,\Sigma_0)\times N(u_1,\Sigma_1)=N(u_0+k(u_1-u_0),\Sigma_0-K\Sigma_0)$
其中,$K=\Sigma_0 (\Sigma_0+\Sigma_1)^{-1}$(定理见于这里)
step2中已经得到:
$z_k\sim N(H_k x_k,H_kP_kH_k^T)$
$z_k\sim N(\hat z_k,R_k)$
如此,便可求出这次迭代中,两个信息都用到的最佳$x_k$所对应的$z_k$(记录这个最佳$x_k$为$x_k’$,它也是下次迭代的输入)
$H_k\hat x_k’=H_k\hat x_k+K(z-H_k \hat x_k)$
$H_kP_k’H_k^T=H_kP_kH_k^T-KH_pP_kH_k^T$
其中,$K=H_kP_kH_k^T(H_kP_kH_k^T+R_k)^(-1)$
5个核心公式
时间更新
$\hat x_k’=A\hat x_{k-1}’+Bu_{k-1}$
$P_k’=AP_{k-1}A^T+Q$
状态更新
$K_k=P_k’H^T(HP_k’H^T+R)^{-1}$
$\hat x_k=\hat x_k’+K_k(y_k-H\hat x_k’)$
$P_k=(I-K_kH)P_k’$
参考资料
如何通俗并尽可能详细解释卡尔曼滤波? - 米开朗基罗赵的回答 - 知乎
Understanding the Basis of the Kalman Filter
Via a Simple and Intuitive Derivation
最后再提一句,有资料说,Kalman与HMM有一定的深刻联系,只不过HMM的隐变量是离散的。