(经典、扩展、开关)卡尔曼滤波

本文详细介绍了卡尔曼滤波的三种变体:经典卡尔曼滤波(KF)、扩展卡尔曼滤波(EKF)和开关卡尔曼滤波(SKF)。KF适用于线性系统,EKF处理非线性动态模型,而SKF则在多模型切换场景下应用。文中给出了每种滤波器的状态预测和更新公式,以及在实际计算中的关键步骤,如雅各比矩阵的使用和贝叶斯概率的计算。

项目说明

本文将对三种卡尔曼滤波算法(经典卡尔曼滤波KF,扩展卡尔曼滤波EKF以及开关卡尔曼滤波SKF)的预测及更新过程进行汇总记录,不涉及具体公式推导过程。

经典卡尔曼滤波KF

经典卡尔曼滤波KF动态模型如下:
Xt=AXt−1+Wt(1)X_t=AX_{t-1}+W_t \tag{1}Xt=AXt1+Wt(1)
Yt=HXt+Vt(2)Y_t=HX_{t}+V_t \tag{2}Yt=HXt+Vt(2)
其中

  • XtX_tXtttt时刻的n×1n\times 1n×1系统状态矢量,nnn是状态变量个数;
  • Xt−1X_{t-1}Xt1t−1t-1t1时刻系统状态矢量;
  • AAAt−1t-1t1时刻至ttt时刻的n×nn\times nn×n维状态转移矩阵;
  • WtW_tWtttt时刻的n×1n\times 1n×1维过程激励噪声;
  • YtY_tYtttt时刻的状态测量值;
  • HHH1×n1\times n1×n维测量矩阵;
  • VtV_tVtttt时刻的测量噪声。

预测过程

状态预测:
Xt^=AXt−1(3)\hat{X_t}=AX_{t-1} \tag{3}Xt^=AXt1(3)
协方差预测:
Pt^=APt−1AT+Q(4)\hat{P_t}=AP_{t-1}A^T+Q \tag{4}Pt^=APt1AT+Q(4)
式中,Xt^\hat{X_t}Xt^表示ttt时刻先验状态估计值,这是算法根据前次迭代结果(即上一次循环的后验估计值)做出的不可靠估计;Pt^\hat{P_t}Pt^表示ttt时刻的先验估计协方差,只要确定了初始的协方差P0P_0P0,此协方差矩阵后续时刻的值都能递推出来,且只要初始协方差P0≠0P_0\neq0P0=0,它的取值对滤波效果影响很小,都能很快收敛。

更新过程

卡尔曼增益:
Kt=Pt^HT(HPt^HT+R)−1(5)K_t=\hat{P_t}H^T(H\hat{P_t}H^T+R)^{-1} \tag{5}Kt=Pt^HT(HPt^HT+R)1(5)
状态更新:
Xt=Xt^+Kt(Yt−HXt^)(6)X_t=\hat{X_t}+K_t(Y_t-H\hat{X_t}) \tag{6}Xt=Xt^+Kt(YtHXt^)(6)
协方差更新:
Pt=(I−KtH)Pk^(7)P_t=(I-K_tH)\hat{P_k} \tag{7}Pt=(IKtH)Pk^(7)
KtK_tKt表示卡尔曼增益,由公式可知其也能在滤波前预先递推计算出来,对卡尔曼增益的确定是建立滤波模型的关键步骤之一,它能显著影响滤波的结果;XtX_tXtXt−1X_{t-1}Xt1表示ttt时刻、t−1t-1t1时刻的后验状态估计值,也就是要输出的该时刻最优估计值,这个值是卡尔曼滤波的结果;PtP_tPtPt−1P_{t-1}Pt1表示ttt时刻、t−1t-1t1时刻的后验估计协方差。

扩展卡尔曼滤波EKF

扩展卡尔曼滤波EKF动态模型如下:
Xt=f(Xt−1)+Wt(8)X_t=f(X_{t-1})+W_t \tag{8}Xt=f(Xt1)+Wt(8)
Yt=h(Xt)+Vt(9)Y_t=h(X_{t})+V_t \tag{9}Yt=h(Xt)+Vt(9)

预测过程

状态预测:
Xt^=f(Xt−1)(10)\hat{X_t}=f(X_{t-1}) \tag{10}Xt^=f(Xt1)(10)
协方差预测:
Pt^=Ft−1Pt−1Ft−1T+Q(11)\hat{P_t}=F_{t-1}P_{t-1}F_{t-1}^T+Q \tag{11}Pt^=Ft1Pt1Ft1T+Q(11)

更新过程

卡尔曼增益:
Kt=Pt^HtT(HtPt^HtT+R)−1(12)K_t=\hat{P_t}H_t^T(H_t\hat{P_t}H_t^T+R)^{-1} \tag{12}Kt=Pt^HtT(HtPt^HtT+R)1(12)
状态更新:
Xt=Xt^+Kt(Yt−h(Xt^))(13)X_t=\hat{X_t}+K_t(Y_t-h(\hat{X_t})) \tag{13}Xt=Xt^+Kt(Yth(Xt^))(13)
协方差更新:
Pt=(I−KtHt)Pt^(14)P_t=(I-K_tH_t)\hat{P_t} \tag{14}Pt=(IKtHt)Pt^(14)
这里需要引入雅各比矩阵,雅各比矩阵就是方程矩阵对每一个变量的偏导数,举例来说,雅各比矩阵是该函数的所有分量(mmm个)对向量xxx的所有分量(nnn个)的一阶偏导数组成的矩阵。
J=∂f∂x=[∂f∂x1⋯∂f∂xn]=[∂f1∂x1⋯∂f1∂xn⋮⋱⋮∂fm∂x1⋯∂fm∂xn](15)J=\frac{\partial{\bf{f}}}{\partial{\bf{x}}}=[\frac{\partial{\bf{f}}}{\partial{x_1}} \cdots \frac{\partial{\bf{f}}}{\partial{x_n}}]=\begin{bmatrix} \frac{\partial{f_1}}{\partial{x_1}} & \cdots & \frac{\partial{f_1}}{\partial{x_n}} \\ \vdots & \ddots & \vdots \\ \frac{\partial{f_m}}{\partial{x_1}} & \cdots & \frac{\partial{f_m}}{\partial{x_n}}\end{bmatrix} \tag{15}J=xf=[x1fxnf]=x1f1x1fmxnf1xnfm(15)
公式(11)中,Ft−1F_{t-1}Ft1表示∂f∂X∣Xt−1\frac{\partial{f}}{\partial{X}}|_{X_{t-1}}XfXt1HtH_tHt表示∂h∂X∣Xt\frac{\partial{h}}{\partial{X}}|_{X_{t}}XhXt

开关卡尔曼滤波SKF

应用扩展卡尔曼滤波SKF时,首先分析系统各种可能存在的状态,并针对每种状态建立相应的卡尔曼滤波器。随后通过计算每时刻各状态的概率,进而分析出该时刻系统最可能所处的状态。开关卡尔曼滤波的计算过程如下:

依据贝叶斯估计理论,对于一个由lll个卡尔曼滤波器描述的动态系统,模型变换概率
Sti∣j=ZijSt−1i∑i=1lZijSt−1i(16)S_t^{i|j}=\frac{Z_{ij}S^i_{t-1}}{\sum^l_{i=1}Z_{ij}S^i_{t-1}} \tag{16}Stij=i=1lZijSt1iZijSt1i(16)
式中,Sti∣jS_t^{i|j}Stij表示模型从t−1t-1t1时刻的模型iii(状态iii)变换到ttt时刻的模型jjj(状态jjj)的概率;St−1iS_{t-1}^iSt1i表示t−1t-1t1时刻系统是模型iii(状态iii)的概率;ZijZ_{ij}Zij表示模型转移矩阵。

加权状态估计:
X~t−1j=∑i=1lSti∣jXt−1i(17)\tilde{X}_{t-1}^j=\sum^l_{i=1}S_t^{i|j}X_{t-1}^i \tag{17}X~t1j=i=1lStijXt1i(17)
加权协方差估计:
P~t−1j=∑i=1lSti∣j{Pt−1i+[Xt−1i−Xt−1j][Xt−1i−Xt−1j]T}(18)\tilde{P}_{t-1}^j=\sum^l_{i=1}S_t^{i|j}\{P_{t-1}^i+[X_{t-1}^i-X_{t-1}^j][X_{t-1}^i-X_{t-1}^j]^T\} \tag{18}P~t1j=i=1lStij{Pt1i+[Xt1iXt1j][Xt1iXt1j]T}(18)
式中,Xt−1iX_{t-1}^iXt1i表示t−1t-1t1时刻模型iii的后验状态估计值;Pt−1iP_{t-1}^iPt1i表示t−1t-1t1时刻模型iii的后验估计协方差。将式(17)、(18)计算的加权状态和协方差代入到经典卡尔曼滤波算法中的式(3)-(7)中,可得每个模型对应的最优状态估计X^t−1j\hat{X}_{t-1}^jX^t1j和协方差估计P^t−1j\hat{P}_{t-1}^jP^t1j

每个滤波器模型的似然估计计算如下:
Lki=N(Vti;0,Cti)(19)L_k^i=N(V_t^i; 0, C_t^i) \tag{19}Lki=N(Vti;0,Cti)(19)
其中测量残差:
Vt=Yt−HX^t(20)V_t=Y_t-H\hat{X}_t \tag{20}Vt=YtHX^t(20)
残差协方差:
Ct=HP^tHT+R(21)C_t=H\hat{P}_tH^T+R \tag{21}Ct=HP^tHT+R(21)
ttt时刻每个模型的概率:
Sti=Lti∑i=1lZijSt−1i∑i=1l(Lki∑i=1lZijSt−1i)(22)S_t^i=\frac{L_t^i\sum_{i=1}^lZ_{ij}S_{t-1}^i}{\sum_{i=1}^l(L_k^i\sum_{i=1}^lZ_{ij}S_{t-1}^i)} \tag{22}Sti=i=1l(Lkii=1lZijSt1i)Ltii=1lZijSt1i(22)
更新的加权状态和协方差计算如下:
Xt=∑i=1lStiXti(23)X_t=\sum_{i=1}^lS_t^iX_t^i \tag{23}Xt=i=1lStiXti(23)
Pt=∑i=1lSti{Pti[Xti−Xt][Xti−Xt]T}(24)P_t=\sum_{i=1}^lS_t^i\{P_t^i[X_t^i-X_t][X_t^i-X_t]^T\} \tag{24}Pt=i=1lSti{Pti[XtiXt][XtiXt]T}(24)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cofisher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值