其他分享
首页 > 其他分享> > 你真的搞懂贝叶斯滤波了吗?

你真的搞懂贝叶斯滤波了吗?

作者:互联网

 一谈到贝叶斯滤波,就开始联系到各种随机过程、概率密度函数等等,那些曾经上课都听不进去的东西,这里能讲清楚吗?我自己也会有这个疑惑,不过要看懂贝叶斯滤波原理还是需要一定基础的。这篇博客,我会结合自己的理解尽量讲得通俗、方便理解一点。
 
 这篇博客大部分参考了b站视频:忠厚老实的王大头
 感谢up主做的视频

一、先验知识

1. 随机过程与概率论

 两门都是大学学过的课程,那它们之间到底有什么关系呢?呃…其实大学期间自己也没理解,笑cry。

2. 先验、似然、后验概率

 大家可能都清楚,就是先验是因,后验是果,似然就是在因的条件下,发生果的概率。那么到底什么是因,什么是果呢?

还是举个例子讲一下先验、似然、观测、后验。

比如在相机和IMU融合SLAM中(由于博主是做这个的,就以这个为例子了,可能对不是做这个的不友好,所以博主上面给了参考博客链接),机器人的状态(包括位姿、速度、偏置等)的概率分布是先验,相机拍摄的图像信息(特征点、特征匹配等)和IMU提供的运动信息(加速度、角速度积分成速度、位移、旋转),都是观测,你得先有机器人的状态,才会有这些观测。

P(状态) - 先验 , 记为 P(A)
P(状态/图像和运动信息) - 后验,在知道观测的条件下,状态的概率(知果求因) , 记为P(A/B)
P(图像和运动信息/状态) - 似然概率,在知道状态的条件下,发生这些观测的概率(知因求果),记为P(B/A)
贝叶斯公式: P(B/A)P(A)=P(A/B)P(B)P(B/A)*P(A) = P(A/B)*P(B)P(B/A)∗P(A)=P(A/B)∗P(B), 变形为:P(B/A)=(P(A/B)P(B)P(A)P(B/A)=\frac{(P(A/B)*P(B)}{P(A)}P(B/A)=P(A)(P(A/B)∗P(B)​
若有多个观测,那么P(Bj/A)=(P(A/Bj)P(Bj)i=1i=nP(A/Bi)P(Bi)P(B_j/A)=\frac{(P(A/B_j)*P(B_j)}{\sum_{i=1}^{i=n}P(A/B_i)*P(B_i)}P(Bj​/A)=∑i=1i=n​P(A/Bi​)∗P(Bi​)(P(A/Bj​)∗P(Bj​)​

有一个问题,不知道大家是否想过,为什么状态会是一个概率,难道它是随机事件吗?
个人认为,是因为我们通常会认为我们估计出来的状态,由于传感器观测会包含随机噪声,所以状态也可认为服从一个高斯分布,它的均值就是最优的状态结果。

二、贝叶斯滤波

1. 问题建模

(1) 符号定义:

(2) 问题描述

(3)状态方程和观测方程

{Xk=f(Xk1)+QkYk=h(Xk)+Rk\begin{cases} X_k = f(X_{k-1})+Q_k \\ Y_k = h(X_k)+R_k \end{cases}{Xk​=f(Xk−1​)+Qk​Yk​=h(Xk​)+Rk​​
 假设X0Q1Q2...QkR1R2...RkX_0、Q_1、Q_2...Q_k、R_1、R_2...R_kX0​、Q1​、Q2​...Qk​、R1​、R2​...Rk​相互独立。
状态量可能是一个向量,因为状态量通常不只有一个,在机器人里面,就包含位姿、速度、偏置等,因此大多数情况下,状态量是一个向量,那么QkRkQ_k、R_kQk​、Rk​都是矩阵。另外,如果有多个传感器,那么每个时刻都会有多个观测,这里只写了一个传感器时候的例子。
 现在有一组观测值,y1y2...yky_1、y_2...y_ky1​、y2​...yk​分别表示时刻x1x2...xkx_1 、x_2...x_kx1​、x2​...xk​对应的观测(或者叫传感器测量数据,R其实是表示的是传感器的精度)。

2、预测步推导(求先验)

我们首先要根据上一时刻k-1的状态来预测当前状态,得到fk(x)f^-_k(x)fk−​(x),其实就是求先验
fk(x)=dP(Xk<x)dxf_k{(x)} = \frac{dP(X_k<x)}{dx}fk​(x)=dxdP(Xk​<x)​
 要求解fk(x)f_k{(x)}fk​(x),可以先求解P(Xk<x)P(X_k<x)P(Xk​<x),求解方法类似与泰勒一阶展开,展开到上一时刻状态量。
P(Xk<x)=u=xP(Xk=u),uP(Xk=u)=v=+P(Xk=uXk1=v)P(Xk1=v)=v=+P[Xkf(Xk1)=uf(v)Xk1=v]P(Xk1=v)=v=+P[QK=uf(v)Xk1=v]P(Xk1=v)=v=+P[QK=uf(v)]P(Xk1=v)Xk1Qk=limε>0v=+fQk[uf(v)]εfk1(v)ε,1=limε>0+fQk[uf(v)]fk1(v)dvε2,P(Xk<x)=u=xlimε>0+fQk1[uf(v)]fk1(v)dvε=x+fQk[uf(v)]fk1(v)dvdufk(x)=dP(Xk<x)dx=+fQk[xf(v)]fk1(v)dv\begin{aligned} P(X_k < x) &= \sum_{u = -\infty}^x{P(X_k = u)} , u连续取值 \\ P(X_k = u) &= \sum_{v=\infty}^{+\infty}P(X_k=u|X_{k-1} =v)P(X_{k-1} =v) \\ & = \sum_{v=\infty}^{+\infty}P[X_k-f(X_{k-1})=u-f(v)|X_{k-1}=v]*P(X_{k-1}=v) \\ &=\sum_{v=\infty}^{+\infty}P[Q_K=u-f(v)|X_{k-1}=v]*P(X_{k-1}= v) \\ &=\sum_{v=\infty}^{+\infty}P[Q_K=u-f(v)]*P(X_{k-1}= v) , 因为X_{k-1}和Q_k独立 \\ &=\lim_{\varepsilon->0}\sum_{v=\infty}^{+\infty}f_{Q_k}[u-f(v)]*\varepsilon*f_{k-1}(v)*\varepsilon,见下面注解1 \\ &=\lim_{\varepsilon->0}\int_{-\infty}^{+\infty}f_{Q_k}[u-f(v)]*f_{k-1}(v)dv*\varepsilon ,见下面注解2\\ 所以,P(X_k<x)&=\sum_{u=-\infty}^x\lim_{\varepsilon ->0}\int_{-\infty}^{+\infty}f_{Q_{k-1}}[u-f(v)]f_{k-1}(v)dv * \varepsilon \\ &=\int_{-\infty}^x\int_{-\infty}^{+\infty}f_{Q_k}[u-f(v)]*f_{k-1}(v)dvdu \\ 因此:f_k^-(x) &= \frac{dP(X_k<x)}{dx}=\int_{-\infty}^{+\infty}f_{Q_k}[x-f(v)]*f_{k-1}(v)dv \\ \end{aligned}P(Xk​<x)P(Xk​=u)所以,P(Xk​<x)因此:fk−​(x)​=u=−∞∑x​P(Xk​=u),u连续取值=v=∞∑+∞​P(Xk​=u∣Xk−1​=v)P(Xk−1​=v)=v=∞∑+∞​P[Xk​−f(Xk−1​)=u−f(v)∣Xk−1​=v]∗P(Xk−1​=v)=v=∞∑+∞​P[QK​=u−f(v)∣Xk−1​=v]∗P(Xk−1​=v)=v=∞∑+∞​P[QK​=u−f(v)]∗P(Xk−1​=v),因为Xk−1​和Qk​独立=ε−>0lim​v=∞∑+∞​fQk​​[u−f(v)]∗ε∗fk−1​(v)∗ε,见下面注解1=ε−>0lim​∫−∞+∞​fQk​​[u−f(v)]∗fk−1​(v)dv∗ε,见下面注解2=u=−∞∑x​ε−>0lim​∫−∞+∞​fQk−1​​[u−f(v)]fk−1​(v)dv∗ε=∫−∞x​∫−∞+∞​fQk​​[u−f(v)]∗fk−1​(v)dvdu=dxdP(Xk​<x)​=∫−∞+∞​fQk​​[x−f(v)]∗fk−1​(v)dv​

3、更新步推导(求后验)

假设有一个传感器,在k时刻有观测Yk=ykY_k=y_kYk​=yk​,我们需要利用观测去更新fk(x)f_k^-(x)fk−​(x)成fk+(x)f_k^+(x)fk+​(x),其实就是后验概率fk(xyk)f_k(x|y_k)fk​(x∣yk​)
fYkXk(ykx)=limε0P(yk<Yk<yk+εXk=x)ε=limε0P(ykh(x)<Ykh(Xk)<ykh(x)+εXk=x)ε=limε0P(ykh(x)<Rk<ykh(x)+εXk=x)ε=limε0P(ykh(x)<Rk<ykh(x)+ε)ε,RkXk=fRk[ykh(x)]fk+(x)=fk(xyk)=fYkXk(ykx)fk(x)fYk(yk)=fRk[ykh(x)]fk(x)fYk(yk)=ηfRk[ykh(x)]fk(x)ηη={+fRk([ykh(x)]fk(x)dx}1\begin{aligned} f_{Y_k|X_k}(y_k|x) &=\lim_{\varepsilon \to 0}\frac{P(y_k<Y_k<y_k+\varepsilon|X_k=x)}{\varepsilon} \\ &=\lim_{\varepsilon\to 0}\frac{P(y_k-h(x)<Y_k-h(X_k)<y_k-h(x)+\varepsilon|X_k=x)}{\varepsilon} \\ &=\lim_{\varepsilon\to0}\frac{P(y_k-h(x)<R_k<y_k-h(x)+\varepsilon|X_k=x)}{\varepsilon} \\ &=\lim_{\varepsilon\to0}\frac{P(y_k-h(x)<R_k<y_k-h(x)+\varepsilon)}{\varepsilon},因为R_k和X_k独立\\ &=f_{R_k}[y_k-h(x)] \\ 所以,有: \\ f_k^+(x)&=f_k(x|y_k)=\frac{f_{Y_k|X_k}(y_k|x)*f_k^-(x)}{f_{Y_k}(y_k)} \\ &=\frac{f_{R_k}[y_k-h(x)]*f_k^-(x)}{f_{Y_k}(y_k)} \\ &=\eta*f_{R_k}[y_k-h(x)]*f_k^-(x) \\ 其中,\eta为:\\ \eta&=\{\int_{-\infty}^{+\infty}f_{R_k}([y_k-h(x)]*f_k^-(x)dx\}^{-1} \end{aligned}fYk​∣Xk​​(yk​∣x)所以,有:fk+​(x)其中,η为:η​=ε→0lim​εP(yk​<Yk​<yk​+ε∣Xk​=x)​=ε→0lim​εP(yk​−h(x)<Yk​−h(Xk​)<yk​−h(x)+ε∣Xk​=x)​=ε→0lim​εP(yk​−h(x)<Rk​<yk​−h(x)+ε∣Xk​=x)​=ε→0lim​εP(yk​−h(x)<Rk​<yk​−h(x)+ε)​,因为Rk​和Xk​独立=fRk​​[yk​−h(x)]=fk​(x∣yk​)=fYk​​(yk​)fYk​∣Xk​​(yk​∣x)∗fk−​(x)​=fYk​​(yk​)fRk​​[yk​−h(x)]∗fk−​(x)​=η∗fRk​​[yk​−h(x)]∗fk−​(x)={∫−∞+∞​fRk​​([yk​−h(x)]∗fk−​(x)dx}−1​
经过更新步之后,状态量的方差大大降低,也就是经过贝叶斯滤波后减少了噪声,得到更优更可靠的状态估计值.

三、贝叶斯滤波递推过程

f0(x)f1(x)=+fQ1[xf(v)]f0(v)dvf1+(x)=η1fR1[y1h(x)]f1(x)f2(x)=+fQ2[xf(v)]f1+(x)dvf2+(x)=η2fR2[y2h(x)]f2(x)fk(x)=+fQk[xf(v)]fk1+(x)dvfk+(x)=ηkfRk[ykh(x)]fk(x)ηk={+fRk[ykh(x)]fk(x)dx}1,\begin{aligned} f_0(x)&\xRightarrow{预测}f_1^-(x)=\int_{-\infty}^{+\infty}f_{Q_1}[x-f(v)]f_0(v)dv\xRightarrow{观测更新}f_1^+(x)=\eta_1*f_{R_1}[y_1-h(x)]*f_1^-(x) \\ &\xRightarrow{预测}f_2^-(x)=\int_{-\infty}^{+\infty}f_{Q_2}[x-f(v)]f_1^+(x)dv\xRightarrow{观测更新}f_2^+(x)=\eta_2*f_{R_2}[y_2-h(x)]*f_2^-(x) \\ &…… \\ &\xRightarrow{预测}f_k^-(x)=\int_{-\infty}^{+\infty}f_{Q_k}[x-f(v)]f_{k-1}^+(x)dv\xRightarrow{观测更新}f_k^+(x)=\eta_k*f_{R_k}[y_k-h(x)]*f_k^-(x) \\ 其中,\eta_k&=\{\int_{-\infty}^{+\infty}f_{R_k}[y_k-h(x)]*f_k^-(x)dx\}^{-1},其实就是后面那一坨的积分的倒数。\end{aligned}f0​(x)其中,ηk​​预测​f1−​(x)=∫−∞+∞​fQ1​​[x−f(v)]f0​(v)dv观测更新​f1+​(x)=η1​∗fR1​​[y1​−h(x)]∗f1−​(x)预测​f2−​(x)=∫−∞+∞​fQ2​​[x−f(v)]f1+​(x)dv观测更新​f2+​(x)=η2​∗fR2​​[y2​−h(x)]∗f2−​(x)……预测​fk−​(x)=∫−∞+∞​fQk​​[x−f(v)]fk−1+​(x)dv观测更新​fk+​(x)=ηk​∗fRk​​[yk​−h(x)]∗fk−​(x)={∫−∞+∞​fRk​​[yk​−h(x)]∗fk−​(x)dx}−1,其实就是后面那一坨的积分的倒数。​
公式中,除了初值即可认为是先验,又可以认为是后验,其他都需要经过预测和更新两个步骤,实验证明,初值即使很差,也不会影响后面时刻状态量的估计值。
这里递推的都是概率密度函数,要求各时刻的状态估计,只需要求均值即可。
x^k=+xfk+(x)dx\hat{x}_k=\int_{-\infty}^{+\infty}x*f_k^+(x)dxx^k​=∫−∞+∞​x∗fk+​(x)dx

四、贝叶斯滤波算法流程

(1) 设初值:初始状态x0x_0x0​和它的概率密度函数f0(x)f_0(x)f0​(x)

(2) 预测步fk(x)=+fQk[xf(v)]fk1+(v)dvf_k^-(x)=\int_{-\infty}^{+\infty}f_{Q_k}[x-f(v)]*f_{k-1}^+(v)dvfk−​(x)=∫−∞+∞​fQk​​[x−f(v)]∗fk−1+​(v)dv

(3) 更新步fk+(x)=ηkfRk[ykh(x)]fk(x),ηk={+fRk[ykh(x)]fk(x)dx}1f_k^+(x)=\eta_k * f_{R_k}[y_k-h(x)]*f_k^-(x),其中,\eta_k=\{\int_{-\infty}^{+\infty}f_{R_k}[y_k-h(x)]*f_k^-(x)dx\}^{-1}fk+​(x)=ηk​∗fRk​​[yk​−h(x)]∗fk−​(x),其中,ηk​={∫−∞+∞​fRk​​[yk​−h(x)]∗fk−​(x)dx}−1
 这里要提一下有些博客不准确的说法:P(xkyk)=ηP(ykxk)+P(xkxk1)P(xk1)dxk1P(x_k|y_k)=\eta*P(y_k|x_k)*\int_{-\infty}^{+\infty}P(x_k|x_{k-1})*P(x_{k-1})dx_{k-1}P(xk​∣yk​)=η∗P(yk​∣xk​)∗∫−∞+∞​P(xk​∣xk−1​)∗P(xk−1​)dxk−1​

(4) 求状态量x^k=+xfk+(x)dx\hat{x}_k=\int_{-\infty}^{+\infty}x*f_k^+(x)dxx^k​=∫−∞+∞​x∗fk+​(x)dx

五、贝叶斯滤波算法优缺点

到这里,贝叶斯滤波就讲完了,后面会写一写关于卡尔曼滤波的博客,搞清楚贝叶斯滤波之后,卡尔曼滤波就非常好理解了,因为它就是在贝叶斯滤波基础上,将状态方程里面的函数fff和观测方程里的hhh假设是线性的,没有了非线性,计算也就发便多了。

标签:Xk,yk,infty,fY,滤波,贝叶斯,dx,搞懂,fk
来源: https://blog.csdn.net/wq1psa78/article/details/105849353