卡爾曼濾波系列——(六)卡爾曼平滑

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

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