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

1. 概述

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

2. 贝叶斯公式

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

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

$P(x|y) = \frac{P(y|x)P(x)}{P(y)}$,

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

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

3. 滤波算法

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

$x_k = f_k(x_{k-1}, v_{k-1})$和$y_k = h_k(x_k, n_k)$,

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

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

3.1 预测

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

$p(x_k|y_{1:k-1}) = \int p(x_k, x_{k-1}|y_{1:k-1})dx_{k-1}$

$= \int p(x_k|x_{k-1}, y_{1:k-1}p(x_{k-1}|y_{1:k-1}))dx_{k-1}$

$= \int p(x_k|x_{k-1})p(x+{k-1}|y_{1:k-1})dx_{k-1}$,

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

3.2 更新

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

$p(x_k|y_{1:k}) = \frac{p(y_k|x_k,y_{1:k-1})p(x_k|y_{1:k-1})}{p(y_k|y_{1:k-1})}$

$= \frac{p(y_k|x_k)p(x_k|y_{1:k-1})}{p(y_k|y_{1:k-1})}$,

其中归一化常数为$p(y_k|y_{1:k-1}) = \int p(y_k|x_k)p(x_k|y_{1:k-1})dx_k$。等式第一行到第二行是因为测量方程知道, y(k)只与x(k)有关。$p(y_k|x_k)$也称之为似然函数,由量测方程决定。也和上面的推理一样,$y_k = h(x_k) + n_k$,x(k)部分是常数,$p(y_k|x_k)$也是只和量测噪声n(k)的概率分布有关。

4. 参考