知行编程网知行编程网  2022-06-13 10:00 知行编程网 隐藏边栏 |   抢沙发  150 
文章评分 0 次,平均分 0.0

一文读懂卡尔曼滤波(Kalman filter) ,含详细数学推导

来自 | 知乎  作者 | Mockingjay
链接 | https://zhuanlan.zhihu.com/p/134595781
编辑 | 深度学习这件小事
本文仅作学术交流,如有侵权,请联系后台删除

一文读懂卡尔曼滤波(Kalman filter) ,含详细数学推导

   概述

总的来说,卡尔曼滤波器是一个状态估计器,它利用传感器融合信息融合来提高系统的精度。通常,我们要观测一个系统的状态,有两种手段。一种是通过系统的状态转移方程,并结合上一时刻的状态推得下一时刻的状态。一种是借助辅助系统(量测系统)的测量得到系统状态。这两种方式都有各自的不确定性,卡尔曼滤波可以将这两者做到最优结合(加权平均),使得我们估计的状态的不确定性小于其中任何一种。所以权重的选择至关重要,它意味着我们更信任哪一种方式得出的状态(当然是更加信任不确定性较小的状态)。

   建模

比如,我们观测一辆小车的速度位置(所以我们要观察的状态就是速度  和位置  ,即状态  ,这里的  都是向量),当我们有了  时刻的状态  后,那么如果速度不变,我们就可以得到下一时刻的状态  ,其中 ,  。
当然,我们也可以对小车进行控制,比如让小车加速、拐弯等等,这些都可以用一个加速度来表示:  ,这样,下一时刻状态  的表示变为:
将  写成  ,化简为:
写成状态转移的形式:
 (1)
其中:
 被称为状态转移模型状态转移矩阵
 被称为控制输入模型,他将我们的控制输入转变为状态的改变。
但是,现实的情况并没有那么理想,小车可能会受到外界的各种扰动,比如,轮胎打滑,地面崎岖等等,都会使得状态转移的过程中混入噪音干扰(过程噪声),而且这个噪音往往是不可被测量的,也就是说,没办法通过建模消除噪音项。不过,往往我们可以认为这个噪音是服从零均值的高斯分布的。那么(1)式重写为
 (2)
其中  是控制输入,在本例中即为  ,  为其协方差矩阵。
上面的状态转移方程为我们提供了观察系统状态的一种方式,同时,我们可能有一些辅助系统,比如对于这个小车,我们可以用GPS作为得到其状态的另一种方式。
那样的话,GPS每一时刻都可以提供一次当前状态的观测值  ,它与真实状态  的关系为,  (3)
其中的  是观测模型,它把系统真实状态空间映射成观测空间,  是噪声项,称为观测噪声——因为任何的测量系统都是有误差的,所以观测值实际上是真实值与噪声的叠加。我们同样可以认为此噪声是服从0均值的高斯分布的。即
 ,  为其协方差矩阵。
现在我们比较这两种方式得到的系统状态,容易想到,状态转移方程得到的系统状态在演变时会非常平滑,而它的不确定度会随着迭代的进行而逐渐增大,因为误差会在一次次迭代的过程中不断累积(具体反映为估计状态的方差越来越大)。相反,由量测系统得到的状态不存在累积误差,但演变时也会很不平滑。这时我们就需要将两者得到的状态有效结合起来。这就是卡尔曼滤波做的事情了。

   卡尔曼滤波

利用我们之前建立的模型((2)和(3)),假设对于k-1时刻我们对系统有一个估计值 ,这个估计值的协方差为  ,则利用状态转移方程我们得到预测状态
 (4)
这个预测状态的协方差  为:
然后我们要算出测量残差:
直观上理解  :如果使用状态转移方程计算出预测量  ,应该得到的观测值为 ,而我们实际的观测值为  ,所以这个  衡量的是我们的测量值与预测值的偏差,  的协方差  为
第一项为0,因为  代表k时刻系统状态的真实值,是一个固定值,没有协方差。所以简化为:
最后,我们得到的后验估计  为:
其中  为卡尔曼增益,我们要选取最优卡尔曼增益使得估计值的均方误差达到最小,均方误差表达为  ,
而  的协方差  为
所以  
因为有:  ,所以
其中,第一项 
第二项  需要注意的是,因为  求的是矩阵的对角阵元素之和,所以  ,所以可以先将第二项括号内的式子转置得到:  ,而协方差矩阵  又是对称矩阵,所以可以化为 
第三项  ,  也为对称矩阵,所以可化为 
综上, 
令导数为0,即  ,解得
 即为所求卡尔曼增益,用它作为更新(修正)状态的权值(即  )可以获得最小均方误差。
所以最优估计  就产生了,这时,再用
更新最优估计的协方差矩阵  即可,这样一次迭代就结束了。然后将  和  作为下一时刻的状态值即可继续迭代。

<pre style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;letter-spacing: 0.544px;white-space: normal;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section><p style="margin-bottom: 15px;padding-right: 0em;padding-left: 0em;max-width: 100%;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 25.5938px;letter-spacing: 3px;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(0, 0, 0);box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 16px;font-family: 微软雅黑;caret-color: red;box-sizing: border-box !important;overflow-wrap: break-word !important;">为您推荐</span></strong></span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="font-size: 14px;">长尾分布下图像分类问题最新综述(2019-2020)</span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="font-size: 14px;">GitHub重大更新:在线开发上线,是时候卸载IDE了</span></p><section style="margin: 5px 8px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;">特朗普拿H1B签证开刀,LeCun吴恩达等实名谴责!</section><section style="margin: 5px 8px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;">数据分析入门常用的23个牛逼Pandas代码</section><section style="margin: 5px 8px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="color:#576b95;"><span style="font-size: 14px;">如何在科研论文中画出漂亮的插图?</span></span><br  /></section></section></section></section></section></section></section></section></section>
一文读懂卡尔曼滤波(Kalman filter) ,含详细数学推导

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享