Kalman 滤波根据线性高斯模型可求得解析解,但是在非线性、非高斯的情况下无法得到解析解,对这类一般的情况,则要采用粒子滤波的方法
对于复杂的概率分布,可以通过一个简单的概率分布 q ( z ) q(z) q(z) 作为桥梁进行采样(重要性采样),求得概率分布函数积分值(期望):
E [ f ( z ) ] = ∫ z f ( z ) p ( z ) d z = ∫ z f ( z ) p ( z ) q ( z ) q ( z ) d z = 1 N ∑ i = 1 N f ( z i ) p ( z i ) q ( z i ) → w e i g h t \begin{aligned} \mathbb{E}[f(z)]&=\int_zf(z)p(z)dz=\int_zf(z)\frac{p(z)}{q(z)}q(z)dz\\&=\frac1N\sum\limits_{i=1}^Nf(z_i)\boxed{\frac{p(z_i)}{q(z_i)} }\color{blue}\to weight \end{aligned} E[f(z)]=∫zf(z)p(z)dz=∫zf(z)q(z)p(z)q(z)dz=N1i=1∑Nf(zi)q(zi)p(zi)→weight
通过对 q ( z ) q(z) q(z) 采样,然后对每一个采样的样本应用权重就得到了期望的近似,为了概率分布的特性,还需要对权重进行归一化。
在滤波问题中,需要求解 p ( z t ∣ x 1 : t ) p(z_t|x_{1:t}) p(zt∣x1:t),其权重为:
w t i = p ( z t i ∣ x 1 : t ) q ( z t i ∣ x 1 : t ) , i = 1 , 2 , ⋯ , N w_t^i=\frac{p(z_t^i|x_{1:t})}{q(z_t^i|x_{1:t})},i=1,2,\cdots,N wti=q(zti∣x1:t)p(zti∣x1:t),i=1,2,⋯,N
若每一个时刻 t t t 都需要采样 N N N 个点,则每个时刻都要计算 N N N个权重,使得计算较为繁杂,希望找到一个关于权重的递推公式,于是就引入了序列重要性采样(SIS)。
在 SIS (sequential importance sampling filter)中,解决的问题是 p ( z 1 : t ∣ x 1 : t ) p(z_{1:t}|x_{1:t}) p(z1:t∣x1:t)。 w t i ∝ p ( z 1 : t ∣ x 1 : t ) q ( z 1 : t ∣ x 1 : t ) w_t^i\propto\frac{p(z_{1:t}|x_{1:t})}{q(z_{1:t}|x_{1:t})} wti∝q(z1:t∣x1:t)p(z1:t∣x1:t)
根据 LDS 中的推导可以得到上式分子的递推式:
p ( z 1 : t ∣ x 1 : t ) ∝ p ( x 1 : t , z 1 : t ) = p ( x t ∣ z 1 : t , x 1 : t − 1 ) p ( z 1 : t , x 1 : t − 1 ) = p ( x t ∣ z t ) p ( z t ∣ x 1 : t − 1 , z 1 : t − 1 ) p ( x 1 : t − 1 , z 1 : t − 1 ) = p ( x t ∣ z t ) p ( z t ∣ z t − 1 ) p ( x 1 : t − 1 , z 1 : t − 1 ) ∝ p ( x t ∣ z t ) p ( z t ∣ z t − 1 ) p ( z 1 : t − 1 ∣ x 1 : t − 1 ) \begin{aligned}{\color{blue}p(z_{1:t}|x_{1:t})}\propto p(x_{1:t},z_{1:t})&=p(x_t|z_{1:t},x_{1:t-1})p(z_{1:t},x_{1:t-1})\\ &=p(x_t|z_t)p(z_t|x_{1:t-1},z_{1:t-1})p(x_{1:t-1},z_{1:t-1})\\ &=p(x_t|z_t)p(z_t|z_{t-1})p(x_{1:t-1},z_{1:t-1})\\ &\propto p(x_t|z_t)p(z_t|z_{t-1})\color{blue}p(z_{1:t-1}|x_{1:t-1}) \end{aligned} p(z1:t∣x1:t)∝p(x1:t,z1:t)=p(xt∣z1:t,x1:t−1)p(z1:t,x1:t−1)=p(xt∣zt)p(zt∣x1:t−1,z1:t−1)p(x1:t−1,z1:t−1)=p(xt∣zt)p(zt∣zt−1)p(x1:t−1,z1:t−1)∝p(xt∣zt)p(zt∣zt−1)p(z1:t−1∣x1:t−1)
对于分母(指定的提议分布),直接分解为:
q ( z 1 : t ∣ x 1 : t ) = q ( z t ∣ z 1 : t − 1 , x 1 : t ) q ( z 1 : t − 1 ∣ x 1 : t − 1 ) q(z_{1:t}|x_{1:t})=q(z_t|z_{1:t-1},x_{1:t})q(z_{1:t-1}|x_{1:t-1}) q(z1:t∣x1:t)=q(zt∣z1:t−1,x1:t)q(z1:t−1∣x1:t−1) 所以有: w t i ∝ p ( z 1 : t ∣ x 1 : t ) q ( z 1 : t ∣ x 1 : t ) ∝ p ( x t ∣ z t ) p ( z t ∣ z t − 1 ) p ( z 1 : t − 1 ∣ x 1 : t − 1 ) q ( z t ∣ z 1 : t − 1 , x 1 : t ) q ( z 1 : t − 1 ∣ x 1 : t − 1 ) = p ( x t ∣ z t ) p ( z t ∣ z t − 1 ) q ( z t ∣ z 1 : t − 1 , x 1 : t ) w t − 1 i {\color{blue}w_t^i}\propto\frac{p(z_{1:t}|x_{1:t})}{q(z_{1:t}|x_{1:t})}\propto \frac{p(x_t|z_t)p(z_t|z_{t-1})\color{blue}p(z_{1:t-1}|x_{1:t-1})}{q(z_t|z_{1:t-1},x_{1:t})\color{blue}q(z_{1:t-1}|x_{1:t-1})}=\frac{p(x_t|z_t)p(z_t|z_{t-1})}{q(z_t|z_{1:t-1},x_{1:t})}\color{blue}w_{t-1}^i wti∝q(z1:t∣x1:t)p(z1:t∣x1:t)∝q(zt∣z1:t−1,x1:t)q(z1:t−1∣x1:t−1)p(xt∣zt)p(zt∣zt−1)p(z1:t−1∣x1:t−1)=q(zt∣z1:t−1,x1:t)p(xt∣zt)p(zt∣zt−1)wt−1i
得到计算权重的的步骤:
SIS 算法会出现权值退化的情况,在一定时间后,可能会出现大部分权重很小,极少数较大,这是高维空间容易出现的情况,解决方法:
采用重采样的 SIS 算法就是基本的粒子滤波算法。若选择上述提议分布,则称之为 SIR 算法。
【1】粒子滤波
【2】粒子滤波算法
【3】Particle Filter Tutorial 粒子滤波:从推导到应用(四)
【4】粒子滤波(Particle filter)算法简介及MATLAB实现
【5】Particle Filter Tutorial 粒子滤波:从推导到应用(一)到( 四 )