卡尔曼滤波系列——(六)卡尔曼平滑

1 简介

对于此前的若干篇与卡尔曼滤波有关的博文,所描述的算法都是基于过去以及当前时刻的传感器观测结果以估计当前时刻系统的状态,此为滤波算法。而在一些应用场景中,使用者对于系统状态的估计实时性要求较低,青睐于获取更准确的系统状态估计效果,此时可以利用一长段时间内获得的所有传感器观测来估计期间各个时刻的系统状态,此为平滑算法。

卡尔曼平滑算法是其中常用的一种,又称为RTS平滑——Rauch–Tung–Striebel smoother (RTSS, Rauch et al., 1965),本篇博文将详细介绍该算法。


2 原理

2.1 概率状态空间模型

本应用适用于服从以下条件概率分布的概率状态空间模型或称为滤波模型:对于 k=1,2,...k = 1,2,...

xkp(xkxk1)\mathbf{x}_k \sim p(\mathbf{x}_k|\mathbf{x}_{k-1})

ykp(ykxk)\mathbf{y}_k \sim p(\mathbf{y}_k|\mathbf{x}_{k})

这里

  • xkRn\mathbf{x}_k \in \mathbb{R}^n 表示 kk 时刻的系统状态;
  • ykRm\mathbf{y}_k \in \mathbb{R}^m 表示 kk 时刻的测量结果;
  • p(xkxk1)p(\mathbf{x}_k|\mathbf{x}_{k-1}) 是描述系统随机动态的动状态模型;
  • p(ykxk)p(\mathbf{y}_k|\mathbf{x}_{k}) 是描述给定系统状态时测量结果概率分布的观测模型。

可见,该状态模型是一阶Markov链。

2.2 贝叶斯平滑公式

贝叶斯平滑的目的是在获得截止到时间 TT 的所有观测后,计算 kk 时刻系统状态 xk\mathbf{x}_k 的边缘分布,即:

p(xky1:T)p(\mathbf{x}_k|\mathbf{y}_{1:T})

其中 T>kT>kxk\mathbf{x}_k 表示 kk 时刻的系统状态,y1:T\mathbf{y}_{1:T} 表示 1T1 \sim T 时段的所有观测结果。

滤波和平滑的区别在于贝叶斯滤波利用的是过去和当前 kk 时刻的观测结果,而贝叶斯平滑则同时也利用了 kk 时刻之后的观测结果。基于 1T1 \sim T 时段的观测,有以下后验边缘分布的推论:

推论1(贝叶斯最优平滑公式):用于计算任意 kk 时刻( k<Tk<T )平滑分布 p(xky1:T)p(\mathbf{x}_k|\mathbf{y}_{1:T}) 的后向递归方程(贝叶斯平滑器)为:

p(xk+1y1:k)=p(xk+1xk)p(xky1:k)dxkp(\mathbf{x}_{k+1}|\mathbf{y}_{1:k}) = \int p(\mathbf{x}_{k+1}|\mathbf{x}_{k})p(\mathbf{x}_{k}|\mathbf{y}_{1:k})d \mathbf{x}_{k}

p(xky1:T)=p(xky1:k)p(xk+1xk)p(xk+1y1:T)p(xk+1y1:k)dxk+1p(\mathbf{x}_{k}|\mathbf{y}_{1:T}) = p(\mathbf{x}_{k}|\mathbf{y}_{1:k}) \int \frac{p(\mathbf{x}_{k+1}|\mathbf{x}_{k})p(\mathbf{x}_{k+1}|\mathbf{y}_{1:T})}{p(\mathbf{x}_{k+1}|\mathbf{y}_{1:k})}d \mathbf{x}_{k+1}

其中 p(xky1:k)p(\mathbf{x}_{k}|\mathbf{y}_{1:k}) 代表 kk 时刻的滤波分布,而 p(xk+1y1:k)p(\mathbf{x}_{k+1}|\mathbf{y}_{1:k}) 代表对 k+1k+1 时刻的预测分布。

2.3 两个引理

  • 定义(高斯分布) 若随机变量 xRn\mathbf{x} \in \mathbb{R}^n 的概率密度形式如下:

N(xm,P)=1(2π)n/2P1/2exp(12(xm)TP1(xm))N(\mathbf{x}|\mathbf{m},\mathbf{P})=\frac{1}{(2\pi)^{n/2}\mathbf{\left | P \right |}^{1/2}} exp\left( \frac{1}{2}\left( \mathbf{x}-\mathbf{m} \right) ^T \mathbf{P}^{-1} \left( \mathbf{x}-\mathbf{m} \right) \right)

则称变量服从均值为 mRn\mathbf{m} \in \mathbb{R}^n ,协方差为 PRn×n\mathbf{P} \in \mathbb{R}^{n \times n} 的高斯分布,其中 P\left | \mathbf{P} \right | 表示协方差矩阵 P\mathbf{P} 的行列式。

  • 引理1 (高斯变量的联合分布)如果随机变量 xRn\mathbf{x} \in \mathbb{R}^n 和变量 yRm\mathbf{y} \in \mathbb{R}^m 服从下述高斯分布:

xN(m,P)\mathbf{x} \sim N(\mathbf{m},\mathbf{P})

yxN(Hx+u,R)\mathbf{y|x} \sim N(\mathbf{Hx+u},\mathbf{R})

那么 x\mathbf{x}y\mathbf{y} 的联合分布以及 y\mathbf{y} 的边缘分布为:

[xy]N([mHm+u],[PPHTHPHPHT+R])\left [ \begin{matrix} \mathbf{x}\\ \mathbf{y} \end{matrix} \right ] \sim N\left ( \left [ \begin{matrix} \mathbf{m}\\ \mathbf{Hm+u} \end{matrix} \right ] , \left [ \begin{matrix} \mathbf{P} & \mathbf{PH}^T\\ \mathbf{HP} & \mathbf{HPH}^T+\mathbf{R} \end{matrix} \right ] \right )

yN(Hm+u,HPHT+R)\mathbf{y} \sim N(\mathbf{Hm+u}, \mathbf{HPH}^T+\mathbf{R})

  • 引理2 (高斯变量的条件分布)如果随机变量 xRn\mathbf{x} \in \mathbb{R}^n 和变量 yRm\mathbf{y} \in \mathbb{R}^m 服从下述联合高斯分布:

[xy]N([ab],[ACCTB])\left [ \begin{matrix} \mathbf{x}\\ \mathbf{y} \end{matrix} \right ] \sim N\left ( \left [ \begin{matrix} \mathbf{a}\\ \mathbf{b} \end{matrix} \right ] , \left [ \begin{matrix} \mathbf{A} & \mathbf{C}\\ \mathbf{C}^T & \mathbf{B} \end{matrix} \right ] \right )

那么 x\mathbf{x}y\mathbf{y} 的边缘分布及条件分布分别为:

xN(a,A)\mathbf{x} \sim N(\mathbf{a},\mathbf{A})

yN(b,B)\mathbf{y} \sim N(\mathbf{b}, \mathbf{B})

xyN(a+CB1(yb),ACB1CT)\mathbf{x|y} \sim N(\mathbf{a+C} \mathbf{B}^{-1}(\mathbf{y-b}),\mathbf{A-C} \mathbf{B}^{-1}\mathbf{C}^T)

yxN(b+CTA1(xa),BCTA1C)\mathbf{y|x} \sim N(\mathbf{b+C}^T \mathbf{A}^{-1}(\mathbf{x-a}),\mathbf{B-C}^T \mathbf{A}^{-1}\mathbf{C})

2.4 RTS平滑

RTS平滑可以用于计算以下闭合解

p(xky1:T)=N(xkmks,Pks)p(\mathbf{x}_{k}|\mathbf{y}_{1:T}) =N(\mathbf{x}_{k}|\mathbf{m}_k^s,\mathbf{P}_k^s)

即利用观测 y1:T\mathbf{y}_{1:T} 估计 kk 时刻的系统状态后验分布,该过程分成前向和后向两步:

  • 前向递推(Forward Recursion):

mk+1=Akmk\mathbf{m}_{k+1}^{-}=\mathbf{A}_k\mathbf{m}_k

Pk=AkPkAkT+Qk\mathbf{P}_{k}^{-}=\mathbf{A}_k\mathbf{P}_k\mathbf{A}_k^T+\mathbf{Q}_k

Sk=(HkPkHkT+Rk)1\mathbf{S}_{k}^{-}=(\mathbf{H}_k\mathbf{P}_k^{-}\mathbf{H}_k^T+\mathbf{R}_k)^{-1}

Kk=PkHkTSk\mathbf{K}_{k}=\mathbf{P}_k^{-}\mathbf{H}_k^T\mathbf{S}_{k}^{-}

mk=mk+Kk(zkHkmk)\mathbf{m}_{k}=\mathbf{m}_{k}^{-}+\mathbf{K}_k(\mathbf{z}_{k}-\mathbf{H}_k\mathbf{m}_{k}^{-})

Pk=(IKkHk)Pk\mathbf{P}_{k}=(\mathbf{I}-\mathbf{K}_{k}\mathbf{H}_{k})\mathbf{P}_{k}^{-}

  • 后向递推(Backward Recursion):

mk+1=Akmk\mathbf{m}_{k+1}^-=\mathbf{A}_k\mathbf{m}_k

Pk+1=AkPkAkT+Qk\mathbf{P}_{k+1}^-=\mathbf{A}_k\mathbf{P}_k\mathbf{A}_k^T+\mathbf{Q}_k

Gk=PkAkT(Pk+1)1\mathbf{G}_{k}=\mathbf{P}_k\mathbf{A}_k^T(\mathbf{P}_{k+1}^-)^{-1}

mks=mk+Gk(mk+1smk+1)\mathbf{m}_{k}^s=\mathbf{m}_{k}+\mathbf{G}_k(\mathbf{m}_{k+1}^s-\mathbf{m}_{k+1}^-)

Pks=Pk+Gk(Pk+1sPk+1)GkT\mathbf{P}_{k}^s=\mathbf{P}_{k}+\mathbf{G}_k(\mathbf{P}_{k+1}^s-\mathbf{P}_{k+1}^-)\mathbf{G}_k^T

从初始时刻1到 TT 时刻完成 TT 次前向递推后,再由 TT 时刻经过 TT 次后向递推,完成RTS平滑过程。其中前向递推过程即为卡尔曼滤波过程,而前向递推获得的最后 TT 时刻的状态估计 mT\mathbf{m}_{T} 和协方差矩阵 PT\mathbf{P}_{T} 即为后向递推过程的初始状态估计 mTs\mathbf{m}_{T}^s 与协方差矩阵 PTs\mathbf{P}_{T}^s ,即 mT=mTs\mathbf{m}_{T}=\mathbf{m}_{T}^sPT=PTs\mathbf{P}_{T}=\mathbf{P}_{T}^s


3 推导

3.1 贝叶斯平滑公式的推导

对于我们在目标跟踪上的应用,系统的状态转移是一阶Markov模型。根据一阶Markov的性质,当给定 xk+1\mathbf{x}_{k+1} 时, 状态 xk\mathbf{x}_{k} 与观测 yk+1:T\mathbf{y}_{k+1:T} 无关,即 p(xkxk+1,y1:T)=p(xkxk+1,y1:k)p(\mathbf{x}_k|\mathbf{x}_{k+1},\mathbf{y}_{1:T})=p(\mathbf{x}_k|\mathbf{x}_{k+1},\mathbf{y}_{1:k}) ,于是利用贝叶斯公式有:

p(xkxk+1,y1:T)=p(xkxk+1,y1:k)=p(xk,xk+1y1:k)p(xk+1y1:k)=p(xk+1xk,y1:k)p(xky1:k)p(xk+1y1:k)=p(xk+1xk)p(xky1:k)p(xk+1y1:k)p(\mathbf{x}_k|\mathbf{x}_{k+1},\mathbf{y}_{1:T})=p(\mathbf{x}_k|\mathbf{x}_{k+1},\mathbf{y}_{1:k}) \\ = \frac{p(\mathbf{x}_k,\mathbf{x}_{k+1}|\mathbf{y}_{1:k})}{p(\mathbf{x}_{k+1}|\mathbf{y}_{1:k})} \\ = \frac{p(\mathbf{x}_{k+1}|\mathbf{x}_k,\mathbf{y}_{1:k})p(\mathbf{x}_{k}|\mathbf{y}_{1:k})}{p(\mathbf{x}_{k+1}|\mathbf{y}_{1:k})} \\ = \frac{p(\mathbf{x}_{k+1}|\mathbf{x}_k)p(\mathbf{x}_{k}|\mathbf{y}_{1:k})}{p(\mathbf{x}_{k+1}|\mathbf{y}_{1:k})}

于是在给定观测 y1:T\mathbf{y}_{1:T} 下, xk\mathbf{x}_{k}xk\mathbf{x}_{k} 的联合分布为

p(xk,xk+1y1:T)=p(xkxk+1,y1:T)p(xk+1y1:T)=p(xkxk+1,y1:k)p(xk+1y1:T)=p(xk+1xk)p(xky1:k)p(xk+1y1:T)p(xk+1y1:k)p(\mathbf{x}_k,\mathbf{x}_{k+1}|\mathbf{y}_{1:T})=p(\mathbf{x}_k|\mathbf{x}_{k+1},\mathbf{y}_{1:T}) p(\mathbf{x}_{k+1}|\mathbf{y}_{1:T}) \\ =p(\mathbf{x}_k|\mathbf{x}_{k+1},\mathbf{y}_{1:k}) p(\mathbf{x}_{k+1}|\mathbf{y}_{1:T})\\ = \frac{p(\mathbf{x}_{k+1}|\mathbf{x}_k)p(\mathbf{x}_{k}|\mathbf{y}_{1:k})p(\mathbf{x}_{k+1}|\mathbf{y}_{1:T})}{p(\mathbf{x}_{k+1}|\mathbf{y}_{1:k})}

其中 p(xk+1y1:T)p(\mathbf{x}_{k+1}|\mathbf{y}_{1:T}) 即为 k+1k+1 时刻的平滑分布,而系统状态 xk\mathbf{x}_k 在给定观测 y1:T\mathbf{y}_{1:T} 的边缘分布可以通过对 xk+1\mathbf{x}_{k+1} 的积分获得,因此便可以推出2.1节的贝叶斯平滑公式

3.2 RTS平滑的推导

  • 前向递推公式的推导:
  1. 利用2.3节引理1,给定观测 y1:k1\mathbf{y}_{1:k-1}xk\mathbf{x}_kxk1\mathbf{x}_{k-1} 的联合分布为:

p(xk,xk1y1:k1)=p(xkxk1)p(xk1y1:k1)=N(xkAk1xk1,Qk1)N(xk1mk1,Pk1)=N([xk1xk]m,P)p(\mathbf{x}_k,\mathbf{x}_{k-1}|\mathbf{y}_{1:k-1}) \\ =p(\mathbf{x}_k|\mathbf{x}_{k-1})p(\mathbf{x}_{k-1}|\mathbf{y}_{1:k-1}) \\ = N(\mathbf{x}_{k}|\mathbf{A}_{k-1} \mathbf{x}_{k-1},\mathbf{Q}_{k-1})N(\mathbf{x}_{k-1}|\mathbf{m}_{k-1} ,\mathbf{P}_{k-1}) \\ =N\left ( \begin{bmatrix} \mathbf{x}_{k-1}\\ \mathbf{x}_{k} \end{bmatrix}| \mathbf{m}^{'},\mathbf{P}^{'} \right )

m=[mk1Ak1mk1] \mathbf{m}^{'}=\left [ \begin{matrix} \mathbf{m}_{k-1}\\ \mathbf{A}_{k-1} \mathbf{m} _{k-1}\end{matrix} \right ]

P=[Pk1Pk1Ak1TAk1Pk1Ak1Pk1Ak1T+Qk1]\mathbf{P}^{'}=\left [ \begin{matrix} \mathbf{P}_{k-1} & \mathbf{P}_{k-1} \mathbf{A}_{k-1}^T\\ \mathbf{A}_{k-1} \mathbf{P}_{k-1}&\mathbf{A}_{k-1} \mathbf{P}_{k-1} \mathbf{A}_{k-1}^T+\mathbf{Q}_{k-1} \end{matrix} \right ]

  1. 然后利用2.3节引理2可以推出 xk\mathbf{x}_k 的边缘分布为:

p(xky1:k1)=N(xkmk,Pk)p(\mathbf{x}_{k}|\mathbf{y}_{1:k-1}) =N(\mathbf{x}_{k}|\mathbf{m}_{k}^-,\mathbf{P}_{k}^-)

mk=Ak1mk1\mathbf{m}_{k}^-=\mathbf{A}_{k-1}\mathbf{m}_{k-1}

Pk=Ak1Pk1Ak1T+Qk1\mathbf{P}_{k}^{-}=\mathbf{A}_{k-1}\mathbf{P}_{k-1}\mathbf{A}_{k-1}^T+\mathbf{Q}_{k-1}

  1. 再次利用2.3节引理1可以推出给定观测 y1:k1\mathbf{y}_{1:k-1}xk\mathbf{x}_kyk\mathbf{y}_{k} 的联合分布为:

p(xk,yky1:k1)=p(ykxk)p(xky1:k1)=N(ykHkxk,Rk)N(xkmk,Pk)=N([xkyk]m,P)p(\mathbf{x}_k,\mathbf{y}_{k}|\mathbf{y}_{1:k-1}) \\ =p(\mathbf{y}_k|\mathbf{x}_{k})p(\mathbf{x}_{k}|\mathbf{y}_{1:k-1}) \\ = N(\mathbf{y}_{k}|\mathbf{H}_{k} \mathbf{x}_{k},\mathbf{R}_{k})N(\mathbf{x}_{k}|\mathbf{m}_{k}^- ,\mathbf{P}_{k}^-) \\ =N\left ( \begin{bmatrix} \mathbf{x}_{k}\\ \mathbf{y}_{k} \end{bmatrix}| \mathbf{m}^{''},\mathbf{P}^{''} \right )

m=[mkHkmk] \mathbf{m}^{''}=\left [ \begin{matrix} \mathbf{m}_k^-\\ \mathbf{H}_k \mathbf{m} _k^-\end{matrix} \right ]

P=[PkPk HkTHk PkHkPkHkT+Rk]\mathbf{P}^{''}=\left [ \begin{matrix} \mathbf{P}_{k}^- & \mathbf{P}_{k}^-\ \mathbf{H}_{k}^T\\ \mathbf{H}_{k}\ \mathbf{P}_{k}^-&\mathbf{H}_{k} \mathbf{P}_{k}^- \mathbf{H}_{k}^T+\mathbf{R}_{k} \end{matrix} \right ]

  1. 最后再利用2.3节引理2可以推出给定观测 y1:k\mathbf{y}_{1:k}xk\mathbf{x}_k 的条件分布为:

p(xkyk,y1:k1)=p(xky1:k)=N(xkmk,Pk)p(\mathbf{x}_k|\mathbf{y}_{k},\mathbf{y}_{1:k-1})=p(\mathbf{x}_k|\mathbf{y}_{1:k})=N(\mathbf{x}_k|\mathbf{m}_k,\mathbf{P}_k)

mk=mk+PkHkT(HkPkHkT+Rk)1(zkHkmk)\mathbf{m}_{k}=\mathbf{m}_{k}^{-}+\mathbf{P}_k^{'}\mathbf{H}_k^T(\mathbf{H}_k\mathbf{P}_k^{-}\mathbf{H}_k^T+\mathbf{R}_k)^{-1}(\mathbf{z}_{k}-\mathbf{H}_k\mathbf{m}_{k}^{-})

Pk=PkPkHkT(HkPkHkT+Rk)1HkPk\mathbf{P}_{k}=\mathbf{P}_{k}^{'}-\mathbf{P}_k^{'}\mathbf{H}_k^T(\mathbf{H}_k\mathbf{P}_k^{-}\mathbf{H}_k^T+\mathbf{R}_k)^{-1}\mathbf{H}_{k}\mathbf{P}_{k}^{'}

  • 后向递推公式的推导:
  1. 类似于前向递推公式的推导过程,利用2.3节引理1在给定观测 y1:k\mathbf{y}_{1:k} 时, xk\mathbf{x}_kxk+1\mathbf{x}_{k+1} 的联合分布为:
    p(xk,xk+1y1:k)=p(xk+1xk)p(xky1:k)=N(xk+1Akxk,Qk)N(xkmk,Pk)=N([xkxk+1]m~1,P~1)p(\mathbf{x}_k,\mathbf{x}_{k+1}|\mathbf{y}_{1:k}) =p(\mathbf{x}_{k+1}|\mathbf{x}_k)p(\mathbf{x}_{k}|\mathbf{y}_{1:k}) \\ = N(\mathbf{x}_{k+1}|\mathbf{A}_k \mathbf{x}_{k},\mathbf{Q}_k)N(\mathbf{x}_{k}|\mathbf{m}_k ,\mathbf{P}_k) \\ =N\left ( \begin{bmatrix} \mathbf{x}_{k}\\ \mathbf{x}_{k+1} \end{bmatrix}| \widetilde{\mathbf{m}}_1,\widetilde{\mathbf{P}}_1 \right )

m~1=[mkAkmk] \widetilde{\mathbf{m}}_1=\left [ \begin{matrix} \mathbf{m}_k\\ \mathbf{A}_k \mathbf{m} _k\end{matrix} \right ]

P~1=[PkPkAkTAkPkAkPkAkT+Qk]\widetilde{\mathbf{P}}_1=\left [ \begin{matrix} \mathbf{P}_k & \mathbf{P}_k \mathbf{A}_k^T\\ \mathbf{A}_k \mathbf{P}_k&\mathbf{A}_k \mathbf{P}_k \mathbf{A}_k^T+\mathbf{Q}_k \end{matrix} \right ]

  1. 考虑到系统状态的Markov性质有 p(xkxk+1,y1:T)=p(xkxk+1,y1:k)p(\mathbf{x}_k|\mathbf{x}_{k+1},\mathbf{y}_{1:T})=p(\mathbf{x}_k|\mathbf{x}_{k+1},\mathbf{y}_{1:k}) ,然后利用2.3节引理2有如下条件分布:

p(xkxk+1,y1:T)=p(xkxk+1,y1:k)=N(xkm~2,P~2)p(\mathbf{x}_k|\mathbf{x}_{k+1},\mathbf{y}_{1:T})=p(\mathbf{x}_k|\mathbf{x}_{k+1},\mathbf{y}_{1:k}) \\ = N(\mathbf{x}_{k}| \widetilde{\mathbf{m}}_2 ,\widetilde{\mathbf{P}}_2)

Gk=PkAkT(AkPkAkT+Qk)1\mathbf{G}_{k}=\mathbf{P}_k\mathbf{A}_k^T(\mathbf{A}_k\mathbf{P}_k\mathbf{A}_k^T+\mathbf{Q}_k)^{-1}

m~2=mk+Gk[mk+1Akmk]\widetilde{\mathbf{m}}_2=\mathbf{m}_{k}+\mathbf{G}_k[\mathbf{m}_{k+1}-\mathbf{A}_k\mathbf{m}_{k}]

P~2=PkGk(AkPkAkT+Qk)GkT\widetilde{\mathbf{P}}_2=\mathbf{P}_{k}-\mathbf{G}_k(\mathbf{A}_k\mathbf{P}_k\mathbf{A}_k^T+\mathbf{Q}_k)\mathbf{G}_k^T

  1. 因此在给定所有观测数据时,利用2.3节引理1可以推出 xk\mathbf{x}_kxk+1\mathbf{x}_{k+1} 的联合分布为:

p(xk,xk+1y1:T)=p(xkxk+1,y1:T)p(xk+1y1:T)=N(xkm~2,P~2)N(xk+1mk+1s,Pk+1s)=N([xkxk+1]m~3,P~3)p(\mathbf{x}_k,\mathbf{x}_{k+1}|\mathbf{y}_{1:T})=p(\mathbf{x}_k|\mathbf{x}_{k+1},\mathbf{y}_{1:T}) p(\mathbf{x}_{k+1}|\mathbf{y}_{1:T}) \\ =N(\mathbf{x}_{k}|\widetilde{\mathbf{m}}_2,\widetilde{\mathbf{P}}_2)N(\mathbf{x}_{k+1}|\mathbf{m}_{k+1} ^s,\mathbf{P}_{k+1}^s) \\ = N(\begin{bmatrix} \mathbf{x}_{k}\\ \mathbf{x}_{k+1} \end{bmatrix}|\widetilde{\mathbf{m}}_3,\widetilde{\mathbf{P}}_3)

m~3=[mk+1smk+Gk(mk+1sAkmk)] \widetilde{\mathbf{m}}_3=\left [ \begin{matrix} \mathbf{m}_{k+1}^s\\ \mathbf{m}_{k} +\mathbf{G}_k( \mathbf{m}_{k+1}^s-\mathbf{A}_k\mathbf{m}_k) \end{matrix} \right ]

P~3=[Pk+1sPk+1sGkTGkPk+1sGkPk+1sGkT+P~2]\widetilde{\mathbf{P}}_3=\left [ \begin{matrix} \mathbf{P}_{k+1}^s &\mathbf{P}_{k+1}^s \mathbf{G}_k^T\\ \mathbf{G}_k\mathbf{P}_{k+1}^s&\mathbf{G}_k \mathbf{P}_{k+1}^s \mathbf{G}_k^T+\widetilde{\mathbf{P}}_2 \end{matrix} \right ]

  1. 因此,利用2.3节引理2可以得到 xk\mathbf{x}_k 的边缘分布为

p(xky1:T)=N(xkmks,Pks)p(\mathbf{x}_{k}|\mathbf{y}_{1:T}) =N(\mathbf{x}_{k}|\mathbf{m}_k^s,\mathbf{P}_k^s)

mks=mk+Gk(mk+1sAkmk)\mathbf{m}_{k}^s=\mathbf{m}_{k}+\mathbf{G}_k(\mathbf{m}_{k+1}^s-\mathbf{A}_k\mathbf{m}_k)

Pks=Pk+Gk(Pk+1sAkPkAkTQk)GkT\mathbf{P}_{k}^s=\mathbf{P}_{k}+\mathbf{G}_k(\mathbf{P}_{k+1}^s-\mathbf{A}_k\mathbf{P}_k\mathbf{A}_k^T-\mathbf{Q}_k)\mathbf{G}_k^T

证毕。


4 实验

以一正弦信号的高斯随机走动为例,信号实际波形如下图所示:

在这里插入图片描述
由于传感器的测量存在一定的噪声,因此测量结果波动较大,与信号的实际波形存在一定的差距,如下图所示:

在这里插入图片描述
若直接将传感器的测量值作为信号的实际值,显然与预期存在一定差距,因此可以利用卡尔曼滤波方法或卡尔曼平滑方法处理观测结果,从而获得更平滑稳定的波形估计。

首先建立系统模型如下,状态转移方程和状态观测方程分别为:

xk=xk1+qk,qkN(0,Q)x_k=x_{k-1}+q_k,q_k \sim N(0,Q)

yk=xk+rk,rkN(0,R)y_k=x_{k}+r_k,r_k \sim N(0,R)

根据此模型,有 A=1A=1 , H=1H = 1 ,另外考虑到系统观测噪声较大,因此取 Q=0.05Q=0.05 , R=1R=1 。然后分别利用卡尔曼滤波算法卡尔曼平滑算法处理数据,得到如下结果:

在这里插入图片描述


5 结论

卡尔曼平滑算法其实就是卡尔曼滤波算法的加强版,包括了前向递推和后向递推两个步骤,其中前向递推的过程与卡尔曼滤波算法时一致的,而后向递推可以进一步减少估计结果的波动。算法的推导过程主要依赖于引理1和引理2的反复运用,利用贝叶斯概率理论实现系统状态的后验估计,与博文卡尔曼滤波系列一——标准卡尔曼滤波的推导过程有些不一样,不过结果是统一的。

根据实验结果可见,对于相同的观测数据,参数相同的两个算法的处理结果存在一定差异,其中卡尔曼平滑算法虽然实时性不如卡尔曼滤波算法,但其估计得到的信号波形更为平滑。而且仔细看可以看出,卡尔曼滤波算法相对于信号真值存在微小的相位滞后,而卡尔曼平滑算法的估算结果则保持较好的相位一致性,这在实际应用中有重要价值。通过计算两个算法处理结果与信号真值的均方误差,例如上述实验中,卡尔曼滤波算法的MSE为0.0078,而卡尔曼平滑算法的MSE伪0.0025,可见,平滑算法的估计精度更高,效果更好。

在实际应用中,如果信号长度较大,可以将信号按照时间先后分成若干个重叠的时段,然后对每一段分别使用平滑算法,这样可以得到更好地效果,同时也在一定程度上减少传感器的测量时间,降低算法处理时间,提高实时性。


6 参考文献

[1] Simo Srkk. Bayesian Filtering and Smoothing.


原创性声明:本文属于作者原创性文章,小弟码字辛苦,转载还请注明出处。谢谢~

代码下载请到本博文实验程序

如果有哪些地方表述的不够得体和清晰,有存在的任何问题,亦或者程序存在任何考虑不周和漏洞,欢迎评论和指正,谢谢各路大佬。

有需要相关技术支持的可咨询QQ:297461921

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章