vSLAMNet(六)-滤波算法-贝叶斯滤波

1. 概述

  • 贝叶斯滤波基于贝叶斯公式发展起来的

2. 贝叶斯公式

基于条件概率公式和全概率公式,我们可以导出贝叶斯公式:

P(x,y)=P(x|y)p(y)=P(y|x)P(x), 得到,

P(x|y)=P(y|x)P(x)P(y),

其中,P(y|x)表示似然概率,或者causal knowledge;P(x)称为先验概率或者prior knowledge;P(x|y)称为后验概率,是基于观测对状态的诊断或推断。

贝叶斯公式的本质就是利用causal knowledge和prior knowledge来进行状态推断或推理

3. 滤波算法

假设有一个系统,它的状态方程和量测方程如下:

xk=fk(xk1,vk1)yk=hk(xk,nk),

其中,x为系统状态,y为测量到的数据,f和h是状态转移函数和测量函数,v和n是过程噪声和测量噪声,噪声都是独立同分布的。

状态估计问题就是根据之前一系列的已有数据y1:k递推的计算出当前状态xk的可信度p(xk|y1:k),具体包括预测和更新两个过程

3.1 预测

  • 利用系统模型(状态方程)预测状态的先验概率密度,也就是通过已有的先验知识对未来的状态进行猜测,即p(xk|xk1),它的概率分布形状和系统的过程噪声vk1形状一模一样。如果没有噪声,x(k)完全由x(k-1)计算得到,也就没由概率分布这个概念了,由于出现了噪声,所以x(k)不好确定,他的分布就如同vk1,实际上形状和噪声是一样的,只是进行了一些平移。理解了这一点,对粒子滤波程序中,状态x(k)的采样的计算很有帮助,要采样x(k),直接采样一个过程噪声,再叠加上 f(x(k-1)) 这个常数就行了
  • 由上一时刻的概率密度p(xk1|y1:k1)得到p(xk|y1:k1),含义是既然有了前面1:k1时刻的测量数据,那就可以预测一下状态xk出现的概率
  • 计算推导如下

p(xk|y1:k1)=p(xk,xk1|y1:k1)dxk1

=p(xk|xk1,y1:k1p(xk1|y1:k1))dxk1

=p(xk|xk1)p(x+k1|y1:k1)dxk1,

其中,等式的第一行到第二行纯粹是贝叶斯公式的应用,第二行得到第三行是由于一阶马尔科夫过程的假设,即状态xk只由xk1决定。

3.2 更新

  • 利用最新的测量值对先验概率密度进行修正,得到后验概率密度,也就是对之前的猜测进行修正
  • p(xk|y1:k1)得到后验概率p(xk|y1:k)。这个后验概率才是真正有用的东西,上一步还只是预测,这里又多了k时刻的测量,对上面的预测再进行修正,就是滤波了。这里的后验概率也将是代入到下次的预测,形成递推

p(xk|y1:k)=p(yk|xk,y1:k1)p(xk|y1:k1)p(yk|y1:k1)

=p(yk|xk)p(xk|y1:k1)p(yk|y1:k1)

其中归一化常数为p(yk|y1:k1)=p(yk|xk)p(xk|y1:k1)dxk。等式第一行到第二行是因为测量方程知道, y(k)只与x(k)有关。p(yk|xk)也称之为似然函数,由量测方程决定。也和上面的推理一样,yk=h(xk)+nk,x(k)部分是常数,p(yk|xk)也是只和量测噪声n(k)的概率分布有关。

4. 参考