大家好,又见面了,我是你们的朋友全栈君。
一、预备知识
1、协方差矩阵
是一个
维列向量,
是
的期望,协方差矩阵为
![=\begin{bmatrix} E[(x_1-u_1)(x_1-u_1)]& E[(x_1-u_1)(x_2-u_2)]& ...& E[(x_1-u_1)(x_n-u_n)]&\\ E[(x_2-u_2)(x_1-u_1)]& E[(x_2-u_2)(x_2-u_2)]& ...& E[(x_2-u_2)(x_n-u_n)]\\ ...& ...& ...& ...&\\ E[(x_n-u_n)(x_1-u_1)]& E[(x_n-u_n)(x_2-u_2)]& ...& E[(x_n-u_n)(x_n-u_n)]& \end{bmatrix}](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
可以看出
协方差矩阵都是对称矩阵且是半正定的
协方差矩阵的迹
是
的均方误差
2、用到的两个矩阵微分公式
公式一:

公式二:若
是对称矩阵,则下式成立
tr表示矩阵的迹,具体推导过程参考相关矩阵分析教程
二、系统模型与变量说明
1、系统离散型状态方程如下
由k-1时刻到k时刻,系统状态预测方程

系统状态观测方程

2、变量说明如下
:状态转移矩阵
:系统输入向量
:输入增益矩阵
:均值为0,协方差矩阵为
,且服从正态分布的过程噪声
:测量矩阵
:均值为0,协方差矩阵为
,且服从正态分布的测量噪声
初始状态以及每一时刻的噪声
都认为是互相独立的,实际上,很多真实世界的动态系统都并不确切的符合这个模型;但是由于卡尔曼滤波器被设计在有噪声的情况下工作,一个近似的符合已经可以使这个滤波器非常有用了。
三、卡尔曼滤波器
卡尔曼估计实际由两个过程组成:预测与校正,在预测阶段,滤波器使用上一状态的估计,做出对当前状态的预测。在校正阶段,滤波器利用对当前状态的观测值修正在预测阶段获得的预测值,以获得一个更接进真实值的新估计值。
1、变量说明
:真实值
:卡尔曼估计值
:卡尔曼估计误差协方差矩阵
:预测值
:预测误差协方差矩阵
:卡尔曼增益
:测量余量
2、卡尔曼滤波器计算过程
预测:


校正:



更新协方差估计:

观察以上六个式子,我们使用过程中关键要明白
,
的算法原理,及
的更新算法
3、卡尔曼滤波算法详细推导
从协方差矩阵开始说起,真实值与预测值之间的误差为

预测误差协方差矩阵为![{P}'_k=E[{e}'_k{{e}'_k}^T]=E[(x_k-\hat{x}'_k)(x_k-\hat{x}'_k)^T]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
真实值与估计值之间的误差为


卡尔曼估计误差协方差矩阵为
![P_k=E[e_ke_k^T]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
将
代入得到
![P_k=E[[(I-K_kH)(x_k-\hat{x}'_k)-K_kv_k][(I-K_kH)(x_k-\hat{x}'_k)-K_kv_k]^T]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
其中
,并将预测误差协方差矩阵代入,得到

卡尔曼滤波本质是最小均方差估计,而均方差是
的迹,将上式展开并求迹

最优估计
使
最小,所以上式两边对
求导

套用第一节中提到的那两个矩阵微分公式,得到

令上式等于0,得到

到此,我们就知道了卡尔曼增益是怎么算出来的了,但是又有问题,
是怎么算的呢?
![P'_k=E[(x_k-\hat{x}'_k)(x_k-\hat{x}'_k)^T]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
![=E[(Ax_{k-1}+Bu_k+w_k-A\hat{x}_{k-1}-Bu_k)(Ax_{k-1}+Bu_k+w_k-A\hat{x}_{k-1}-Bu_k)^T]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
![=E[(A(x_{k-1}-\hat{x}_{k-1})+w_k)(A(x_{k-1}-\hat{x}_{k-1})+w_k)^T]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
![=E[(Ae_{k-1})(Ae_{k-1})^T]+E[w_kw_k^T]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)

(注意其中展开过程用到了
)
所以预测误差协方差矩阵
可以由上一次算出的估计误差协方差矩阵
及状态转移矩阵
和过程激励噪声的协方差矩阵
算得
4、总结
总结卡尔曼滤波的更新过程为
1步,首先
,
已知,然后由
算出
,再由
算出
,有了这些参数后,结合观测值就能估计出
,再利用
更新
2步,然后下次更新过程为由
算出
,再由
算出
,有了这些参数后,结合观测值就能估计出
,再利用
更新
……
n步,由
算出
,再由
算出
,有了这些参数后,结合观测值就能估计出
,再利用
更新
这就是卡尔曼滤波器递推过程。
至于
的算法,

将
代入上式右边最后一项中 ,
保持原样



(转载请声明出处 谢谢合作)
reference:
1、https://zh.wikipedia.org/wiki/%E5%8D%A1%E5%B0%94%E6%9B%BC%E6%BB%A4%E6%B3%A2
2、《矩阵分析与应用》 张贤达 著
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130648.html原文链接:https://javaforall.net
