卡爾曼濾波器的數學推導

前言:這可能是網上最數學化的推導了,相較於其他的推導方法在數學上更加完備,這意味着對於其他的非線性濾波器如EKF或者信息濾波器IF很多其他地方都可以採用同樣的方法進行推導,一通百通。本文的卡爾曼濾波器的推導從最基礎的概率論中的貝葉斯準則和全概率公式推起,一步一步的完成卡爾曼濾波器,適合對卡爾曼有一定概念上的理解希望深入學習濾波器方法的同學。

卡爾曼濾波算法

μˉt=Atμt1+Btut \bar{\mu}_t = A_t \mu_{t-1} + B_t u_t
Σˉt=AtΣt1AtT+Rt \bar{\Sigma}_t = A_t \Sigma_{t-1} A_t^T + R_t
Kt=ΣˉtCtT(CtΣˉtCtT+Qt)1 K_t = \bar{\Sigma}_t C_t^T(C_t \bar{\Sigma}_t C_t^T + Q_t)^{-1}
μt=μˉt+Kt(ztCtμˉt) \mu_t = \bar{\mu}_t + K_t (z_t-C_t \bar{\mu}_t)
Σt=(IKtCt)Σˉt \Sigma_t = (I-K_t C_t)\bar{\Sigma}_t

推導過程:

先驗條件

貝葉斯準則:
p(xy,z)=p(yx,z)p(xz)p(yz) p(x|y,z)=\frac{p(y|x,z)p(x|z)}{p(y|z)}
全概率公式:
p(x)=p(xy)p(y)dy p(x) = \int p(x|y)p(y) dy
馬爾可夫性:認爲xt1x_{t-1}zt1z_{t-1}ut1u_{t-1}的最優估計

貝葉斯濾波器推導

p(xtz1:t,u1:t)=p(xtzt,z1:t1,u1:t)()=p(ztxt,z1:t1,u1:t)p(xtz1:t1,u1:t)p(ztz1:t1,u1:t)(xt)=ηp(ztxt,z1:t1,u1:t)p(xtz1:t1,u1:t)()=ηp(ztxt)p(xtz1:t1,u1:t)() p(x_t|z_{1:t},u_{1:t})=p(x_t|z_t,z_{1:t-1},u_{1:t}) (套用貝葉斯準則) \\ =\frac{p(z_t|x_t,z_{1:t-1},u_{1:t})p(x_t|z_{1:t-1},u_{1:t})}{p(z_t|z_{1:t-1},u_{1:t})}(分母與x_t無關)\\ =\eta p(z_t|x_t,z_{1:t-1},u_{1:t})p(x_t|z_{1:t-1},u_{1:t}) (馬爾可夫性)\\ =\eta p(z_t|x_t)p(x_t|z_{1:t-1},u_{1:t}) (區分先驗後驗) \\
對於先驗分佈p(xtz1:t1,u1:t)p(x_t|z_{1:t-1},u_{1:t})帶入全概率公式
bel(xt)=p(xtz1:t1,u1:t)=p(xtxt1,z1:t1,u1:t)p(xt1z1:t1,u1:t)dxt1 \overline{bel}(x_t) = p(x_t|z_{1:t-1},u_{1:t}) \\ = \int p(x_t|x_{t-1},z_{1:t-1},u_{1:t})p(x_{t-1}|z_{1:t-1},u_{1:t})d x_{t-1}
最終得到先驗和後驗公式

先驗:
bel(xt)=p(xtxt1,z1:t1,u1:t)p(xt1z1:t1,u1:t)dxt1 \overline{bel}(x_t) = \int p(x_t|x_{t-1},z_{1:t-1},u_{1:t})p(x_{t-1}|z_{1:t-1},u_{1:t})d x_{t-1}
後驗:
bel(xt)=ηp(ztxt)bel(xt) bel(x_t)=\eta p(z_t|x_t)\overline{bel}(x_t)

卡爾曼濾波器推導

根據貝葉斯濾波器帶入線性的模型,推導得到卡爾曼濾波器。

模型

預測方程:
xt=Atxt1+Btut+ϵt x_t=A_t x_{t-1} + B_t u_t + \epsilon_t
xt=(x1,tx2,txn,t)ut=(u1,tu2,tum,t) x_{t}=\left(\begin{array}{c} x_{1, t} \\ x_{2, t} \\ \vdots \\ x_{n, t} \end{array}\right) \boldsymbol{u}_{t}=\left(\begin{array}{c} u_{1, t} \\ u_{2, t} \\ \vdots \\ u_{m, t} \end{array}\right)

觀測方程:
zt=Ctxt+δt z_{t}=C_{t} x_{t}+\delta_{t}

預測

根據貝葉斯濾波器的先驗公式
bel(xt)=p(xtxt1,ut)N(xt;Atxt1+Btut,Rt)bel(xt1)N(xt1;μt1,Σt1)dxt1\overline{\mathrm{bel}}\left(x_{t}\right)=\int \underbrace{p\left(x_{t} | x_{t-1}, u_{t}\right)}_{\sim N\left(x_{t} ; A_{t} x_{t-1}+B_{t} u_{t}, R_{t}\right)} \underbrace{\mathrm{bel}\left(x_{t-1}\right)}_{\sim N\left(x_{t-1} ; \mu_{t-1}, \Sigma_{t-1}\right)} \mathrm{d} x_{t-1}
其中,t-1時刻bel(xt1)bel(x_{t-1})的概率分佈爲高斯分佈,均值爲μt1\mu_{t-1},方差爲Σt1\Sigma_{t-1}

bel(xt)=ηexp{12(xtAtxt1Btut)TRt1(xtAtxt1Btut)}exp{12(xt1μt1)TΣt11(xt1μt1)} \overline{bel}(x_t) = \eta \int exp \left \{ -\frac{1}{2} (x_t-A_t x_{t-1}-B_t u_t)^TR_{t}^{-1}(x_t-A_t x_{t-1}-B_t u_t)\right\}exp\left \{ -\frac{1}{2}(x_{t-1}-\mu_{t-1})^T \Sigma_{t-1}^{-1}(x_{t-1}-\mu_{t-1})\right\}
僅考慮指數部分,記爲bel(xt)=ηexp{Lt}dxt1\overline{bel}(x_t)=\eta \int exp\{-L_t \}dx_{t-1},其中
Lt=12(xtAtxt1Btut)TRt1(xtAtxt1Btut)+12(xt1μt1)TΣt11(xt1μt1) L_t = \frac{1}{2} (x_t-A_t x_{t-1}-B_t u_t)^TR_{t}^{-1}(x_t-A_t x_{t-1}-B_t u_t) + \frac{1}{2}(x_{t-1}-\mu_{t-1})^T \Sigma_{t-1}^{-1}(x_{t-1}-\mu_{t-1})
對於xt1x_{t-1}的積分的計算則考慮到概率分佈在整個空間中積分爲常數,由於LtL_t是關於$x_{t-1}的二次型,因此關於其的分佈爲高斯分佈。高斯分佈的計算只需要求一階導數爲零即可得到均值,求二階導數得到方差,因此求導如下:

Ltxt1=AtTRt1(xtAtxt1Btut)+Σt11(xt1μt1) \frac{\partial L_{t}}{\partial x_{t-1}}=-A_t^T R_t^{-1}(x_t-A_t x_{t-1}-B_t u_t) + \Sigma_{t-1}^{-1}(x_{t-1}-\mu_{t-1})
2Ltxt12=AtTRt1At+Σt11=:Ψt1 \frac{\partial^2 L_{t}}{\partial x_{t-1}^2}=A_t^T R_t^{-1}A_t + \Sigma_{t-1}^{-1} =: \Psi _{t}^{-1}
令一階導數爲零有
AtTRt1(xtAtxt1Btut)=Σt11(xt1μt1)AtTRt1xtAtTRt1Atxt1AtTRt1Btut=Σt11xt1Σt11μt1AtTRt1xtAtTRt1Btut+Σt11μt1=Σt11xt1+AtTRt1Atxt1xt1=AtTRt1xtAtTRt1Btut+Σt11μt1Σt11+AtTRt1At A_t^T R_t^{-1}(x_t-A_t x_{t-1}-B_t u_t) = \Sigma_{t-1}^{-1}(x_{t-1}-\mu_{t-1})\\ A_t^T R_t^{-1}x_t-A_t^T R_t^{-1} A_t x_{t-1}-A_t^T R_t^{-1} B_t u_t = \Sigma_{t-1}^{-1}x_{t-1}-\Sigma_{t-1}^{-1} \mu_{t-1}\\ A_t^T R_t^{-1}x_t-A_t^T R_t^{-1} B_t u_t +\Sigma_{t-1}^{-1} \mu_{t-1} = \Sigma_{t-1}^{-1}x_{t-1}+A_t^T R_t^{-1} A_t x_{t-1}\\ x_{t-1}= \frac{A_t^T R_t^{-1}x_t-A_t^T R_t^{-1} B_t u_t +\Sigma_{t-1}^{-1} \mu_{t-1}}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t}\\
定義二次型函數如下:

Lt(xt1,xt)=12(xt1AtTRt1xtAtTRt1Btut+Σt11μt1Σt11+AtTRt1At)TΨ1(xt1AtTRt1xtAtTRt1Btut+Σt11μt1Σt11+AtTRt1At) L_t(x_{t-1},x_t)=\frac{1}{2}(x_{t-1}-\frac{A_t^T R_t^{-1}x_t-A_t^T R_t^{-1} B_t u_t +\Sigma_{t-1}^{-1} \mu_{t-1}}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t})^T\Psi^{-1}(x_{t-1}-\frac{A_t^T R_t^{-1}x_t-A_t^T R_t^{-1} B_t u_t +\Sigma_{t-1}^{-1} \mu_{t-1}}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t})
det(2πΨt)12exp{Lt(xt,xt1)}dxt1=1det(2\pi\Psi_t)^{\frac{1}{2}}\int exp\{L_t(x_t,x_{t-1})\}dx_{t-1}=1,因此只要將原式轉換爲Lt=Lt(xt,xt1)+Lt(xt)L_t = L_t(x_t,x_{t-1}) + L_t(x_t)即可將積分去掉。
bel(xt)=ηexp{Lt}dxt1=ηexp{Lt(xt)Lt(xt,xt1)}dxt1=ηexp{Lt(xt)}exp{Lt(xt,xt1)}dxt1=ηexp{Lt(xt) \overline{bel}(x_t)=\eta \int exp\{-L_t \}dx_{t-1}\\ =\eta \int exp\{-L_t(x_t) -L_t(x_t,x_{t-1}) \}dx_{t-1}\\ =\eta exp\{-L_t(x_t) \}\int exp\{-L_t(x_t,x_{t-1}) \}dx_{t-1}\\ =\eta exp\{-L_t(x_t) \\
因此只需要考慮Lt(xt)L_t(x_t)的分佈即可,由於對於xtx_t是二次型,爲高斯分佈,可以採用求一階導數和二階導數的方法求得其均值和方差。
Lt(xt)=LtLt(xt,xt1)=12(xtAtxt1Btut)TRt1(xtAtxt1Btut)+12(xt1μt1)TΣt11(xt1μt1)12(xt1AtTRt1xtAtTRt1Btut+Σt11μt1Σt11+AtTRt1At)TΨ1(xt1AtTRt1xtAtTRt1Btut+Σt11μt1Σt11+AtTRt1At) L_t(x_t) = L_t - L_t(x_t,x_{t-1})\\ =\frac{1}{2} (x_t-A_t x_{t-1}-B_t u_t)^TR_{t}^{-1}(x_t-A_t x_{t-1}-B_t u_t) + \frac{1}{2}(x_{t-1}-\mu_{t-1})^T \Sigma_{t-1}^{-1}(x_{t-1}-\mu_{t-1}) - \frac{1}{2}(x_{t-1}-\frac{A_t^T R_t^{-1}x_t-A_t^T R_t^{-1} B_t u_t +\Sigma_{t-1}^{-1} \mu_{t-1}}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t})^T\Psi^{-1}(x_{t-1}-\frac{A_t^T R_t^{-1}x_t-A_t^T R_t^{-1} B_t u_t +\Sigma_{t-1}^{-1} \mu_{t-1}}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t})
由於該式子的化簡過於繁瑣,就不化簡直接求導數

一階導數:
Lt(xt)xt=Rt1(xtAtxt1Btut)+Rt1AtΣt11+AtTRt1AtΨ1(xt1AtTRt1xtAtTRt1Btut+Σt11μt1Σt11+AtTRt1At)=Rt1(xtAtxt1Btut)+Rt1AtΣt11+AtTRt1At(AtTRt1At+Σt11)(xt1AtTRt1xtAtTRt1Btut+Σt11μt1Σt11+AtTRt1At)=Rt1(xtAtxt1Btut)+Rt1At(xt1AtTRt1xtAtTRt1Btut+Σt11μt1Σt11+AtTRt1At)=Rt1(xtBtut)Rt1AtAtTRt1xtAtTRt1Btut+Σt11μt1Σt11+AtTRt1At=Rt1(xtBtut)Rt1AtAtTRt1(xtBtut)+Σt11μt1Σt11+AtTRt1At=[Rt1Rt1AtTAtRt1Σt11+AtTRt1At](xtBtut)Rt1AtΣt11μt1Σt11+AtTRt1At()=(Rt+AtΣt1AtT)1(xtBtut)Rt1AtΣt11μt1Σt11+AtTRt1At\frac{\partial L_t(x_t)}{\partial x_t} = R_t^{-1} (x_t-A_t x_{t-1}-B_t u_t) + \frac{ R_t^{-1}A_t}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t} \Psi^{-1} (x_{t-1}-\frac{A_t^T R_t^{-1}x_t-A_t^T R_t^{-1} B_t u_t +\Sigma_{t-1}^{-1} \mu_{t-1}}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t})\\ =R_t^{-1} (x_t-A_t x_{t-1}-B_t u_t) + \frac{ R_t^{-1}A_t}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t} (A_t^T R_t^{-1}A_t + \Sigma_{t-1}^{-1}) (x_{t-1}-\frac{A_t^T R_t^{-1}x_t-A_t^T R_t^{-1} B_t u_t +\Sigma_{t-1}^{-1} \mu_{t-1}}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t})\\ =R_t^{-1} (x_t-A_t x_{t-1}-B_t u_t) + R_t^{-1} A_t (x_{t-1}-\frac{A_t^T R_t^{-1}x_t-A_t^T R_t^{-1} B_t u_t +\Sigma_{t-1}^{-1} \mu_{t-1}}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t})\\ =R_t^{-1} (x_t-B_t u_t) -R_t^{-1} A_t \frac{A_t^T R_t^{-1}x_t-A_t^T R_t^{-1} B_t u_t +\Sigma_{t-1}^{-1} \mu_{t-1}}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t}\\ =R_t^{-1} (x_t-B_t u_t) -R_t^{-1} A_t \frac{A_t^T R_t^{-1}(x_t- B_t u_t) +\Sigma_{t-1}^{-1} \mu_{t-1}}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t}\\ =[R_t^{-1} -R_t^{-1} A_t^T \frac{A_t R_t^{-1} }{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t}](x_t- B_t u_t)- R_t^{-1} A_t\frac{\Sigma_{t-1}^{-1} \mu_{t-1}}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t}(求逆定理)\\ =(R_t + A_t \Sigma_{t-1}A_t^T)^{-1}(x_t- B_t u_t)- R_t^{-1} A_t \frac{\Sigma_{t-1}^{-1} \mu_{t-1}}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t}\\

二階導數:
2Lt(xt)xt2=(Rt+AtΣt1AtT)1 \frac{\partial^2 L_t(x_t)}{\partial x_t^2}=(R_t + A_t \Sigma_{t-1}A_t^T)^{-1}

當一階導數爲零時
0=(Rt+AtΣt1AtT)1(xtBtut)Rt1AtΣt11μt1Σt11+AtTRt1At(Rt+AtΣt1AtT)1(xtBtut)=Rt1AtΣt11μt1Σt11+AtTRt1At(xtBtut)=(Rt+AtΣt1AtT)Rt1At(Σt11+AtTRt1At)1Σt11μt1(xtBtut)=(Rt+AtΣt1AtT)Rt1At(I+Σt1AtTRt1At)1μt1(xtBtut)=(At+AtΣt1AtTRt1At)(I+Σt1AtTRt1At)1μt1(xtBtut)=At(I+Σt1AtTRt1At)(I+Σt1AtTRt1At)1μt1(xtBtut)=Atμt1xt=Atμt1+Btut 0=(R_t + A_t \Sigma_{t-1}A_t^T)^{-1}(x_t- B_t u_t)- R_t^{-1} A_t \frac{\Sigma_{t-1}^{-1} \mu_{t-1}}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t}\\ (R_t + A_t \Sigma_{t-1}A_t^T)^{-1}(x_t- B_t u_t)= R_t^{-1} A_t \frac{\Sigma_{t-1}^{-1} \mu_{t-1}}{\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t}\\ (x_t- B_t u_t)= (R_t + A_t \Sigma_{t-1}A_t^T) R_t^{-1} A_t (\Sigma_{t-1}^{-1}+A_t^T R_t^{-1} A_t )^{-1}\Sigma_{t-1}^{-1} \mu_{t-1}\\ (x_t- B_t u_t)= (R_t + A_t \Sigma_{t-1}A_t^T) R_t^{-1} A_t(I+\Sigma_{t-1} A_t^T R_t^{-1} A_t )^{-1}\mu_{t-1}\\ (x_t- B_t u_t)= ( A_t + A_t \Sigma_{t-1}A_t^T R_t^{-1} A_t) (I+\Sigma_{t-1} A_t^T R_t^{-1} A_t )^{-1}\mu_{t-1}\\ (x_t- B_t u_t)= A_t ( I + \Sigma_{t-1}A_t^T R_t^{-1} A_t) (I+\Sigma_{t-1} A_t^T R_t^{-1} A_t )^{-1}\mu_{t-1}\\ (x_t- B_t u_t)= A_t \mu_{t-1}\\ x_t= A_t \mu_{t-1} + B_t u_t\\

後驗

根據貝葉斯濾波器的後驗公式
bel(xt)=ηp(ztxt)N(zt:Ctxt,Qt)bel(xt)N(xt:μˉt,Σˉt) \operatorname{bel}\left(x_{t}\right)=\eta \underbrace{p\left(z_{t} | x_{t}\right)}_{\sim \mathcal{N}\left(z_{t}: C_{t} x_{t}, Q_{t}\right)} \underbrace{\overline{\operatorname{bel}}\left(x_{t}\right)}_{\sim \mathcal{N}\left(x_{t}: \bar{\mu}_{t}, \bar{\Sigma}_{t}\right)}

簡化表示爲bel(xt)=ηexp{Jt}bel(x_t)=\eta exp\{-J_t\},其中
Jt=12(ztCtxt)TQ1(ztCtxt)+12(xtμt)TΣt1(xtμt) J_t=\frac{1}{2}(z_t-C_tx_t)^TQ^{-1}(z_t-C_tx_t) + \frac{1}{2}(x_t-\overline{\mu}_t)^T\overline{\Sigma}_t^{-1}(x_t-\overline{\mu}_t)

由於依舊是xtx_t的二次型,即滿足高斯分佈,同樣可以採用求一階導數和二階導數的方法求均值和方差。

一階導數:
Jxt=CtTQt1(ztCtxt)+Σt1(xtμt) \frac{\partial J}{\partial x_t} = -C_t^T Q_t^{-1}(z_t-C_tx_t) + \overline{\Sigma}_t^{-1}(x_t-\overline{\mu}_t)

二階導數:

2Jxt2=CtTQt1Ct+Σt1 \frac{\partial^2 J}{\partial x_t^2} = C_t^T Q_t^{-1}C_t+ \overline{\Sigma}_t^{-1}

因此,Σt=(CtTQt1Ct+Σt1)1\Sigma_t = (C_t^T Q_t^{-1}C_t+ \overline{\Sigma}_t^{-1})^{-1}

令一階導數爲零
0=CtTQt1(ztCtxt)+Σt1(xtμt)CtTQt1(ztCtxt)=Σt1(xtμt)CtTQt1ztCtTQt1Ctxt=Σt1xtΣt1μt(CtTQt1Ct+Σt1)xt=CtTQt1zt+Σt1μtxt=(CtTQt1Ct+Σt1)1CtTQt1zt+(CtTQt1Ct+Σt1)1Σt1μt 0 = -C_t^T Q_t^{-1}(z_t-C_tx_t) + \overline{\Sigma}_t^{-1}(x_t-\overline{\mu}_t)\\ C_t^T Q_t^{-1}(z_t-C_tx_t) = \overline{\Sigma}_t^{-1}(x_t-\overline{\mu}_t)\\ C_t^T Q_t^{-1}z_t-C_t^T Q_t^{-1} C_tx_t = \overline{\Sigma}_t^{-1}x_t-\overline{\Sigma}_t^{-1} \overline{\mu}_t\\ (C_t^T Q_t^{-1} C_t + \overline{\Sigma}_t^{-1})x_t = C_t^T Q_t^{-1}z_t + \overline{\Sigma}_t^{-1} \overline{\mu}_t\\ x_t = (C_t^T Q_t^{-1} C_t + \overline{\Sigma}_t^{-1})^{-1}C_t^T Q_t^{-1}z_t + (C_t^T Q_t^{-1} C_t + \overline{\Sigma}_t^{-1})^{-1} \overline{\Sigma}_t^{-1} \overline{\mu}_t\\
xt=μt+Kk(ztCtμt)x_t = \overline{\mu}_t +K_k(z_t-C_t\overline{\mu}_t),整理得
Kk=CtTQt1(CtTQt1Ct+Σt1)1 K_k = C_t^T Q_t^{-1}(C_t^T Q_t^{-1} C_t + \overline{\Sigma}_t^{-1})^{-1}
最後將Σt\Sigma_t也用KkK_k來表達,

Σt=(CtTQt1Ct+Σt1)1Σt=(ICtTQt1(CtTQt1Ct+Σt1)1Ct)ΣtΣt=(IKkCt)Σt \Sigma_t = (C_t^T Q_t^{-1}C_t+ \overline{\Sigma}_t^{-1})^{-1}\\ \Sigma_t = (I - C_t^T Q_t^{-1}(C_t^T Q_t^{-1} C_t + \overline{\Sigma}_t^{-1})^{-1}C_t )\overline{\Sigma}_t\\ \Sigma_t = (I - K_kC_t )\overline{\Sigma}_t\\
綜上,卡爾曼濾波器的五個公式便推導完畢了。

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