zoukankan      html  css  js  c++  java
  • 卡尔曼滤波

    很好的一个讲解卡尔曼滤波的文章:https://zhuanlan.zhihu.com/p/39912633

    1.实践前提是这些数据满足高斯分布。

    2.理论前提是一个高斯斑乘以另一个高斯斑可以得到第三个高斯斑,第三个高斯斑即为提取到相对精确的数据范围。

    观测也有误差,所以需要将预测和观测相结合

    将预测的高斯分布和观测的(或者说获得的)高斯分布做乘积得到两者结合的高斯分布,得到是两个分布的交集,这个分布是最佳的分布。

    新的最佳估计是是基于原最佳估计和已知外部影响矫正后得到的预测

    新的不确定性是基于原不确定性和外部环境的不确定性得到的预测

    根据实测的数据对原有的估计进行矫正

    通过预测矩阵,或者说状态转移矩阵得到下一个状态

    协方差是

    还是上面这个问题,我们有一个状态,它和速度、位置有关:

    我们不知道它们的实际值是多少,但掌握着一些速度和位置的可能组合,其中某些组合的可能性更高:

    卡尔曼滤波假设两个变量(在我们的例子里是位置和速度)都应该是随机的,而且符合高斯分布。每个变量都有一个均值 μ ,它是随机分布的中心;有一个方差 σ^2 ,它衡量组合的不确定性。

    在上图中,位置和速度是不相关的,这意味着我们不能从一个变量推测另一个变量。

    那么如果位置和速度相关呢?如下图所示,机器人前往特定位置的可能性取决于它拥有的速度。

    这不难理解,如果基于旧位置估计新位置,我们会产生这两个结论:如果速度很快,机器人可能移动得更远,所以得到的位置会更远;如果速度很慢,机器人就走不了那么远。

    这种关系对目标跟踪来说非常重要,因为它提供了更多信息:一个可以衡量可能性的标准。这就是卡尔曼滤波的目标:从不确定信息中挤出尽可能多的信息!

    为了捕获这种相关性,我们用的是协方差矩阵。简而言之,矩阵的每个值是第 i 个变量和第 j 个变量之间的相关程度(由于矩阵是对称的, i 和 j 的位置可以随便交换)。我们用 Σ 表示协方差矩阵,在这个例子中,就是 Σ_{ij} 。

    原始的预测(或者说没有测量值矫正的预测):

    式子(一)

    Xk是从上一个预测结果经过预测矩阵加上外部的影响(比如模拟火车运动,除了列车自驾系统,列车操作员可能会手动调速)得到的当前预测结果

    Pk是从上一个不确定性经过预测矩阵和协方差的噪声Qk(这个噪声就是外部的不确定性,比如车轮打滑或者地面变得粗糙)得到的当前的不确定性

    (其实在这一步预测结果和不确定性没发生关系,因为Xk的公式里并没有Pk)

    我们必须把测量值和预测值相结合,由于两者都服从高斯分布,把两者相乘得到新的高斯分布就把两者结合起来(就是两个分布的交集),得到新的分布的均值和方差如下图:

    u1是测量的均值,u0是预测的均值,新的均值和方差可以通过如下公式获得:

    把以下两式带入到上面的式子中(从这个式子中看出之前求的HkXk是均值,HkPkHk是方差)

     (μ_0,Σ_0)=(H_khat{x}_k,H_kP_kH_{k}^{T})

    (μ_1,Σ_1)=(vec{z}_k,R_k)

    注意这里的Σ0是方差,不是协方差,Pk才是协方差

    得到如下图的公式(通过测量值来细化估计值,其实也就是矫正估计值):

    式子(二)

    这个时候可以把式子一和式子二联合起来了,也就是说先用式子一从Xk-1得到当前的预测Xk,然后将测量的结果再和Xk结合,这个结合是两个均值相减然后乘以卡尔曼增益再加上Xk;同理,先用式子一从Pk-1得到当前的协方差Pk,然后结合。卡尔曼增益是预测和测量的方差的结合结合,测量的方差又包含不确定性协方差的值,这样就把不确定性协方差和预测相结合了,也就是PK'和Xk‘结合了,在式子一中没有结合。

    卡尔曼滤波是对动态事物的感知,对动态事物的感知的一般的方法是预测和观测,但两者本身都有误差。卡尔曼滤波就是将这两者结合来获得动态事物状态的最优估计。

    预测方程分为预测结果的方程和不确定性的方程,不确定性方程是通过协方差来表达(因为协方差能代表不同变量的相关性),预测结果的方程是上一次的预测结果*预测矩阵,不确定方程也是上一次预测结果*预测矩阵,预测结果加了外部的影响,协方差矩阵也加了协方差噪声。

    卡尔曼滤波假设预测和观测符合高斯分布,两者的相互作用就是把两个高斯分布相乘(也就是求两个高斯斑的交集),这样得到一个新的高斯分布,通过预测和观测的均值和方差获得相互作用的式子。

    通过预测方程获得当前状态的初始预测,然后通过两者的关系方程获得新的预测和新的不确定性。

    https://www.zhihu.com/question/23971601

    协方差:

    期望值分别为E[X]与E[Y]的两个实随机变量XY之间的协方差Cov(X,Y)定义为:
    从直观上来看,协方差表示的是两个变量总体误差的期望。
    如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值时另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值;如果两个变量的变化趋势相反,即其中一个变量大于自身的期望值时另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。
    也就是说协方差表达的是两个变量的相关性,协方差>0正相关,<0负相关
  • 相关阅读:
    SuperSocket中的Server是如何初Start的
    SuperSocket中的Server是如何初Initialize的
    Explicit Interface Implementation (C# Programming Guide)
    Interfaces (C# Programming Guide)
    Java泛型Restletclient
    jQuery 完成ajax传jsonObject数据,并在后台处理
    SDUT 2933-人活着系列Streetlights(最小生成树Kruskal+和理查德设置来实现)
    华为OJ:查找字符的第一个字符串只出现一次
    Linux查找多个类似,但不同的名称和重命名文件
    【Java收集的源代码分析】Hashtable源代码分析
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/9507769.html
Copyright © 2011-2022 走看看