【状态估计】线性高斯系统的状态估计——离散时间的递归滤波

前两篇文章介绍了离散时间的批量估计、离散时间的递归平滑,本文着重介绍离散时间的递归滤波。

前两篇位置:【状态估计】线性高斯系统的状态估计——离散时间的批量估计、【状态估计】线性高斯系统的状态估计——离散时间的递归平滑。


离散时间的递归滤波算法

批量优化的方案及其对应的平滑算法方案,是LG问题下能找到的最好的方法了。它利用了所有能用的数据,来估计所有时刻的状态。不过这个方法有一个致命的问题:无法在线运行,因为它需要用未来时刻的信息估计过去的状态。为了在实时场合下使用,当前时刻的状态只能由它之前时间的信息决定,而卡尔曼滤波则是对这样一个问题的传统解决方案

之前讲述了如何从Cholesky分解推导出卡尔曼滤波,实际上并不需要这么复杂,接下来介绍几种推导卡尔曼滤波的方法。

通过MAP推导卡尔曼滤波

假设已经有了 k − 1 k-1 k1时刻的前向估计:

{ x ^ k − 1 , P ^ k − 1 } \{\hat x_{k-1},\hat P_{k-1}\} {x^k1,P^k1}

这两个量是根据初始时刻到 k − 1 k-1 k1时刻的数据推导出来的。目标是计算:

{ x ^ k , P ^ k } \{\hat x_k,\hat P_k\} {x^k,P^k}

其中,需要用到直到 k k k时刻的数据。实际上没有必要再从初始时刻开始,而是简单地用 k − 1 k-1 k1时刻的状态,以及 k k k时刻的 v k v_k vk y k y_k yk就能估计出 k k k时刻的状态了:

{ x ^ k − 1 , P ^ k − 1 , v k , y k } − − > { x ^ k , P ^ k } \{\hat x_{k-1},\hat P_{k-1},v_k,y_k\}-->\{\hat x_k,\hat P_k\} {x^k1,P^k1,vk,yk}>{x^k,P^k}

为了推导这个过程,定义:

z = [ x ^ k − 1 v k y k ] z=\begin{bmatrix}\hat x_{k-1}\\v_k\\y_k\end{bmatrix} z= x^k1vkyk

H = [ 1 − A k − 1 1 C k ] H=\begin{bmatrix}1\\-A_{k-1}&1\\&C_k\end{bmatrix} H= 1Ak11Ck

W = [ P ^ k − 1 Q k R k ] W=\begin{bmatrix}\hat P_{k-1}\\&Q_k\\&&R_k\end{bmatrix} W= P^k1QkRk

x ^ = [ x ^ k − 1 ′ x ^ k ] \hat x=\begin{bmatrix}\hat x_{k-1}^{'}\\\hat x_k\end{bmatrix} x^=[x^k1x^k]

其中, x ^ k − 1 ′ \hat x_{k-1}^{'} x^k1表示使用了直到 k k k时刻的数据计算的 k − 1 k-1 k1时刻的状态估计,而 x ^ k − 1 \hat x_{k-1} x^k1表示使用了直到 k − 1 k-1 k1时刻的数据计算的 k − 1 k-1 k1时刻的状态估计,两者之间相差一个 k k k时刻的后向估计。

通常MAP的最优解 x ^ \hat x x^写成:

( H T W − 1 H ) x ^ = H T W − 1 z (H^TW^{-1}H)\hat x=H^TW^{-1}z (HTW1H)x^=HTW1z

将上面的定义代入:

[ P ^ k − 1 − 1 + A k − 1 T Q k − 1 A k − 1 − A k − 1 T Q k − 1 − Q k − 1 A k − 1 Q k − 1 + C k T R k − 1 C k ] [ x ^ k − 1 ′ x ^ k ] = [ P ^ k − 1 − 1 x ^ k − 1 − A k − 1 T Q k − 1 v k Q k − 1 v k + C k T R k − 1 y k ] \begin{bmatrix}\hat P_{k-1}^{-1}+A_{k-1}^TQ_k^{-1}A_{k-1}&-A_{k-1}^TQ_k^{-1}\\-Q_k^{-1}A_{k-1}&Q_k^{-1}+C_k^TR_k^{-1}C_k\end{bmatrix}\begin{bmatrix}\hat x_{k-1}^{'}\\\hat x_k\end{bmatrix}=\begin{bmatrix}\hat P_{k-1}^{-1}\hat x_{k-1}-A_{k-1}^TQ_k^{-1}v_k\\Q_k^{-1}v_k+C^T_kR_k^{-1}y_k\end{bmatrix} [P^k11+Ak1TQk1Ak1Qk1Ak1Ak1TQk1Qk1+CkTRk1Ck][x^k1x^k]=[P^k11x^k1Ak1TQk1vkQk1vk+CkTRk1yk]

由于并不关心 x ^ k − 1 ′ \hat x_{k-1}^{'} x^k1的实际值,因此可以将它边缘化,等式两侧左乘:

[ 1 0 Q k − 1 A k − 1 ( P ^ k − 1 − 1 + A k − 1 T Q k − 1 A k − 1 ) − 1 1 ] \begin{bmatrix}1&0\\Q_k^{-1}A_{k-1}(\hat P_{k-1}^{-1}+A_{k-1}^TQ_k^{-1}A_{k-1})^{-1}&1\end{bmatrix} [1Qk1Ak1(P^k11+Ak1TQk1Ak1)101]

这是一元线性方程的行操作,于是变成:

[ P ^ k − 1 − 1 + A k − 1 T Q k − 1 A k − 1 − A k − 1 T Q k − 1 0 Q k − 1 − Q k − 1 A k − 1 ( P ^ k − 1 − 1 + A k − 1 T Q k − 1 A k − 1 ) − 1 A k − 1 T Q k − 1 + C k T R k − 1 C k ] [ x ^ k − 1 ′ x ^ k ] = [ P ^ k − 1 − 1 x ^ k − 1 − A k − 1 T Q k − 1 v k Q k − 1 A k − 1 ( P ^ k − 1 − 1 + A k − 1 T Q k − 1 A k − 1 ) − 1 ( P ^ k − 1 − 1 x ^ k − 1 − A k − 1 T Q k − 1 v k ) + Q k − 1 v k + C k T R k − 1 y k ] \begin{bmatrix}\hat P_{k-1}^{-1}+A_{k-1}^TQ_k^{-1}A_{k-1}&-A_{k-1}^TQ_k^{-1}\\0&Q_k^{-1}-Q_k^{-1}A_{k-1}(\hat P_{k-1}^{-1}+A_{k-1}^TQ_k^{-1}A_{k-1})^{-1}A_{k-1}^TQ_k^{-1}+C_k^TR_k^{-1}C_k\end{bmatrix}\begin{bmatrix}\hat x_{k-1}^{'}\\\hat x_k\end{bmatrix}=\begin{bmatrix}\hat P_{k-1}^{-1}\hat x_{k-1}-A_{k-1}^TQ_k^{-1}v_k\\Q_k^{-1}A_{k-1}(\hat P_{k-1}^{-1}+A_{k-1}^TQ_k^{-1}A_{k-1})^{-1}(\hat P_{k-1}^{-1}\hat x_{k-1}-A_{k-1}^TQ_k^{-1}v_k)+Q_k^{-1}v_k+C_k^TR_k^{-1}y_k\end{bmatrix} [P^k11+Ak1TQk1Ak10Ak1TQk1Qk1Qk1Ak1(P^k11+Ak1TQk1Ak1)1Ak1TQk1+CkTRk1Ck][x^k1x^k]=[P^k11x^k1Ak1TQk1vkQk1Ak1(P^k11+Ak1TQk1Ak1)1(P^k11x^k1Ak1TQk1vk)+Qk1vk+CkTRk1yk]

因此,只需要关注 x ^ k \hat x_k x^k

( Q k − 1 − Q k − 1 A k − 1 ( P ^ k − 1 − 1 + A k − 1 T Q k − 1 A k − 1 ) − 1 A k − 1 T Q k − 1 + C k T R k − 1 C k ) x ^ k = Q k − 1 A k − 1 ( P ^ k − 1 − 1 + A k − 1 T Q k − 1 A k − 1 ) − 1 ( P ^ k − 1 − 1 x ^ k − 1 − A k − 1 T Q k − 1 v k ) + Q k − 1 v k + C k T R k − 1 y k (Q_k^{-1}-Q_k^{-1}A_{k-1}(\hat P_{k-1}^{-1}+A_{k-1}^TQ_k^{-1}A_{k-1})^{-1}A_{k-1}^TQ_k^{-1}+C_k^TR_k^{-1}C_k)\hat x_k=Q_k^{-1}A_{k-1}(\hat P_{k-1}^{-1}+A_{k-1}^TQ_k^{-1}A_{k-1})^{-1}(\hat P_{k-1}^{-1}\hat x_{k-1}-A_{k-1}^TQ_k^{-1}v_k)+Q_k^{-1}v_k+C_k^TR_k^{-1}y_k (Qk1Qk1Ak1(P^k11+Ak1TQk1Ak1)1Ak1TQk1+CkTRk1Ck)x^k=Qk1Ak1(P^k11+Ak1TQk1Ak1)1(P^k11x^k1Ak1TQk1vk)+Qk1vk+CkTRk1yk

根据SMW恒等式:

Q k − 1 − Q k − 1 A k − 1 ( P ^ k − 1 − 1 + A k − 1 T Q k − 1 A k − 1 ) − 1 A k − 1 T Q k − 1 = ( Q k + A k − 1 P ^ k − 1 A k − 1 T ) − 1 Q_k^{-1}-Q_k^{-1}A_{k-1}(\hat P_{k-1}^{-1}+A_{k-1}^TQ_k^{-1}A_{k-1})^{-1}A_{k-1}^TQ_k^{-1}=(Q_k+A_{k-1}\hat P_{k-1}A_{k-1}^T)^{-1} Qk1Qk1Ak1(P^k11+Ak1TQk1Ak1)1Ak1TQk1=(Qk+Ak1P^k1Ak1T)1

定义:

P ˇ k = Q k + A k − 1 P ^ k − 1 A k − 1 T \check P_k=Q_k+A_{k-1}\hat P_{k-1}A_{k-1}^T Pˇk=Qk+Ak1P^k1Ak1T

P ^ k = ( P ˇ k − 1 + C k T R k − 1 C k ) − 1 \hat P_k=(\check P_k^{-1}+C_k^TR_k^{-1}C_k)^{-1} P^k=(Pˇk1+CkTRk1Ck)1

原式可化简为:

P ^ k − 1 x ^ k = Q k − 1 A k − 1 ( P ^ k − 1 − 1 + A k − 1 T Q k − 1 A k − 1 ) − 1 ( P ^ k − 1 − 1 x ^ k − 1 − A k − 1 T Q k − 1 v k ) + Q k − 1 v k + C k T R k − 1 y k = Q k − 1 A k − 1 ( P ^ k − 1 − 1 + A k − 1 T Q k − 1 A k − 1 ) − 1 P ^ k − 1 − 1 x ^ k − 1 + ( Q k − 1 − Q k − 1 A k − 1 ( P ^ k − 1 − 1 + A k − 1 T Q k − 1 A k − 1 ) − 1 A k − 1 T Q k − 1 ) v k + C k T R k − 1 y k = P ˇ k − 1 A k − 1 x ^ k − 1 + P ˇ k − 1 v k + C k T R k − 1 y k = P ˇ k − 1 ( A k − 1 x ^ k − 1 + v k ) + C k T R k − 1 y k = P ˇ k − 1 x ˇ k + C k T R k − 1 y k \begin{aligned}\hat P_k^{-1}\hat x_k&=Q_k^{-1}A_{k-1}(\hat P_{k-1}^{-1}+A_{k-1}^TQ_k^{-1}A_{k-1})^{-1}(\hat P_{k-1}^{-1}\hat x_{k-1}-A_{k-1}^TQ_k^{-1}v_k)+Q_k^{-1}v_k+C_k^TR_k^{-1}y_k \\&=Q_k^{-1}A_{k-1}(\hat P_{k-1}^{-1}+A_{k-1}^TQ_k^{-1}A_{k-1})^{-1}\hat P_{k-1}^{-1}\hat x_{k-1}+(Q_k^{-1}-Q_k^{-1}A_{k-1}(\hat P_{k-1}^{-1}+A_{k-1}^TQ_k^{-1}A_{k-1})^{-1}A_{k-1}^TQ_k^{-1})v_k+C_k^TR_k^{-1}y_k \\&=\check P_k^{-1}A_{k-1}\hat x_{k-1}+\check P_k^{-1}v_k+C_k^TR_k^{-1}y_k \\ &=\check P_k^{-1}(A_{k-1}\hat x_{k-1}+v_k)+C_k^TR_k^{-1}y_k \\ &=\check P_k^{-1}\check x_k+C_k^TR_k^{-1}y_k\end{aligned} P^k1x^k=Qk1Ak1(P^k11+Ak1TQk1Ak1)1(P^k11x^k1Ak1TQk1vk)+Qk1vk+CkTRk1yk=Qk1Ak1(P^k11+Ak1TQk1Ak1)1P^k11x^k1+(Qk1Qk1Ak1(P^k11+Ak1TQk1Ak1)1Ak1TQk1)vk+CkTRk1yk=Pˇk1Ak1x^k1+Pˇk1vk+CkTRk1yk=Pˇk1(Ak1x^k1+vk)+CkTRk1yk=Pˇk1xˇk+CkTRk1yk

梳理一下整个过程:

预测:

x ˇ k = A k − 1 x ^ k − 1 + v k P ˇ k = A k − 1 P ^ k − 1 A k − 1 T + Q k \begin{aligned}\check x_k&=A_{k-1}\hat x_{k-1}+v_k \\ \check P_k&=A_{k-1}\hat P_{k-1}A_{k-1}^T+Q_k\end{aligned} xˇkPˇk=Ak1x^k1+vk=Ak1P^k1Ak1T+Qk

更新:

P ^ k = ( P ˇ k − 1 + C k T R k − 1 C k ) − 1 P ^ k − 1 x ^ k = P ˇ k − 1 x ˇ k + C k T R k − 1 y k \begin{aligned}\hat P_k&=(\check P_k^{-1}+C_k^TR_k^{-1}C_k)^{-1} \\ \hat P_k^{-1}\hat x_k&=\check P_k^{-1}\check x_k+C_k^TR_k^{-1}y_k\end{aligned} P^kP^k1x^k=(Pˇk1+CkTRk1Ck)1=Pˇk1xˇk+CkTRk1yk

这是逆协方差形式(信息形式)的卡尔曼滤波。为了得到经典形式的卡尔曼滤波,需要定义卡尔曼增益 K k K_k Kk

K k = P ^ k C k T R k − 1 K_k=\hat P_kC_k^TR_k^{-1} Kk=P^kCkTRk1

经过化简,更新:

K k = P ˇ k C k T ( C k P ˇ k C k T + R k ) − 1 P ^ k = ( 1 − K k C k ) P ˇ k x ^ k = x ˇ k + K k ( y k − C k x ˇ k ) \begin{aligned}K_k&=\check P_kC_k^T(C_k\check P_kC_k^T+R_k)^{-1} \\ \hat P_k&=(1-K_kC_k)\check P_k \\\hat x_k&=\check x_k+K_k(y_k-C_k\check x_k)\end{aligned} KkP^kx^k=PˇkCkT(CkPˇkCkT+Rk)1=(1KkCk)Pˇk=xˇk+Kk(ykCkxˇk)

其中, y k − C k x ˇ k y_k-C_k\check x_k ykCkxˇk称为更新量,指的是实际与期望观测量的误差,而卡尔曼增益则是这部分更新量对估计值的权重。

通过贝叶斯推断推导卡尔曼滤波

使用贝叶斯推断方法还能够以更简洁的方式推出卡尔曼滤波。假设 k − 1 k-1 k1时刻的高斯先验为:

p ( x k − 1 ∣ x ˇ 0 , v 1 : k − 1 , y 0 : k − 1 ) = N ( x ^ k − 1 , P ^ k − 1 ) p(x_{k-1}|\check x_0,v_{1:k-1},y_{0:k-1})=N(\hat x_{k-1},\hat P_{k-1}) p(xk1xˇ0,v1:k1,y0:k1)=N(x^k1,P^k1)

首先,对于预测部份,考虑最近时刻的输入 v k v_{k} vk,来计算 k k k时刻的先验:

p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = N ( x ˇ k , P ˇ k ) p(x_k|\check x_0,v_{1:k},y_{0:k-1})=N(\check x_k,\check P_k) p(xkxˇ0,v1:k,y0:k1)=N(xˇk,Pˇk)

其中:

x ˇ k = E [ x k ] = E [ A k − 1 x k − 1 + v k + w k ] = A k − 1 x ^ k − 1 + v k \check x_k=E[x_k]=E[A_{k-1}x_{k-1}+v_k+w_k]=A_{k-1}\hat x_{k-1}+v_k xˇk=E[xk]=E[Ak1xk1+vk+wk]=Ak1x^k1+vk

P ˇ k = E [ ( x k − E [ x k ] ) ( x k − E [ x k ] ) T ] = A k − 1 E [ ( x k − 1 − x ^ k − 1 ) ( x k − 1 − x ^ k − 1 ) T ] A k − 1 T + E [ w k w k t ] = A k − 1 P ^ k − 1 A k − 1 T + Q k \begin{aligned}\check P_k&=E[(x_k-E[x_k])(x_k-E[x_k])^T]\\&=A_{k-1}E[(x_{k-1}-\hat x_{k-1})(x_{k-1}-\hat x_{k-1})^T]A_{k-1}^T+E[w_kw_k^t]\\&=A_{k-1}\hat P_{k-1}A_{k-1}^T+Q_k\end{aligned} Pˇk=E[(xkE[xk])(xkE[xk])T]=Ak1E[(xk1x^k1)(xk1x^k1)T]Ak1T+E[wkwkt]=Ak1P^k1Ak1T+Qk

然后,对于更新部分,将状态与最新一次测量(即 k k k时刻)写成联合高斯分布的形式

p ( x k , y k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = N ( [ μ x μ y ] , [ Σ x x Σ x y Σ y x Σ y y ] ) = N ( [ x ˇ k C k x ˇ k ] , [ P ˇ k P ˇ k C k T C k P ˇ k C k P ˇ k C k T + R k ] ) p(x_k,y_k|\check x_0,v_{1:k},y_{0:k-1})=N(\begin{bmatrix}\mu_x\\\mu_y\end{bmatrix},\begin{bmatrix}\Sigma_{xx}&\Sigma_{xy}\\\Sigma_{yx}&\Sigma_{yy}\end{bmatrix})=N(\begin{bmatrix}\check x_k\\C_k\check x_k\end{bmatrix},\begin{bmatrix}\check P_k&\check P_kC_k^T\\C_k\check P_k&C_k\check P_kC_k^T+R_k\end{bmatrix}) p(xk,ykxˇ0,v1:k,y0:k1)=N([μxμy],[ΣxxΣyxΣxyΣyy])=N([xˇkCkxˇk],[PˇkCkPˇkPˇkCkTCkPˇkCkT+Rk])

根据高斯推断,可以得到:

p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) = N ( μ x + Σ x y Σ y y − 1 ( y k − μ y ) , Σ x x − Σ x y Σ y y − 1 Σ y x ) p(x_k|\check x_0,v_{1:k},y_{0:k})=N(\mu_x+\Sigma_{xy}\Sigma_{yy}^{-1}(y_k-\mu_y),\Sigma_{xx}-\Sigma_{xy}\Sigma_{yy}^{-1}\Sigma_{yx}) p(xkxˇ0,v1:k,y0:k)=N(μx+ΣxyΣyy1(ykμy),ΣxxΣxyΣyy1Σyx)

代入之前的结果,有:

K k = P ˇ k C k T ( C k P ˇ k C k T + R k ) − 1 P ^ k = ( 1 − K k C k ) P ˇ k x ^ k = x ˇ k + K k ( y k − C k x ˇ k ) \begin{aligned}K_k&=\check P_kC_k^T(C_k\check P_kC_k^T+R_k)^{-1} \\ \hat P_k&=(1-K_kC_k)\check P_k \\ \hat x_k&=\check x_k+K_k(y_k-C_k\check x_k)\end{aligned} KkP^kx^k=PˇkCkT(CkPˇkCkT+Rk)1=(1KkCk)Pˇk=xˇk+Kk(ykCkxˇk)

这与MAP给出的更新步骤的方程是完全一致的。

重申一遍,这件事情的根本在于使用了线性模型,且噪声和先验也都是高斯的。在这些条件下,后验概率也是高斯的,于是它的均值和模正巧是一样的。然而在使用非线性模型之后就不能保证这个性质了

从增益最优化的角度来看卡尔曼滤波

通常来说,卡尔曼滤波是线性高斯系统下的最优解。因此,也可以从其他的角度来看卡尔曼滤波的最优特性。下面介绍其中的一个:

假设有一个估计器,形式如下:

x ^ k = x ˇ k + K k ( y k − C k x ˇ k ) \hat x_k=\check x_k+K_k(y_k-C_k\check x_k) x^k=xˇk+Kk(ykCkxˇk)

但是此时并不知道如何选取 K k K_k Kk的值,才能正确地衡量修正部分的权重。如果定义状态的误差为(估计值 - 真值):

e ^ k = x ^ k − x k \hat e_k=\hat x_k-x_k e^k=x^kxk

那么有:

P ^ k = E [ e ^ k e ^ k T ] = E [ ( x ^ k − x k ) ( x ^ k − x k ) T ] = E [ ( x ˇ k + K k ( C k x k + n k − C k x ˇ k ) − x k ) ( x ˇ k + K k ( C k x k + n k − C k x ˇ k ) − x k ) T ] = E [ ( ( 1 − K k C k ) ( x ˇ k − x k ) + K k n k ) ( ( 1 − K k C k ) ( x ˇ k − x k ) + K k n k ) T ] = ( 1 − K k C k ) E [ ( x ˇ k − x k ) ( x ˇ k − x k ) T ] ( 1 − K k C k ) T + K k E [ C k C k T ] K k T = ( 1 − K k C k ) P ˇ k ( 1 − K k C k ) T + K k R k K k T = P ˇ k − K k C k P ˇ k − P ˇ k C k T K k T + K k ( C k P ˇ k C k T + R k ) K k T \begin{aligned}\hat P_k&=E[\hat e_k\hat e_k^T]\\&=E[(\hat x_k-x_k)(\hat x_k-x_k)^T]\\&=E[(\check x_k+K_k(C_kx_k+n_k-C_k\check x_k)-x_k)(\check x_k+K_k(C_kx_k+n_k-C_k\check x_k)-x_k)^T]\\&=E[((1-K_kC_k)(\check x_k-x_k)+K_kn_k)((1-K_kC_k)(\check x_k-x_k)+K_kn_k)^T]\\&=(1-K_kC_k)E[(\check x_k-x_k)(\check x_k-x_k)^T](1-K_kC_k)^T+K_kE[C_kC_k^T]K_k^T\\&=(1-K_kC_k)\check P_k(1-K_kC_k)^T+K_kR_kK_k^T \\ &=\check P_k-K_kC_k\check P_k-\check P_kC_k^TK_k^T+K_k(C_k\check P_kC_k^T+R_k)K_k^T\end{aligned} P^k=E[e^ke^kT]=E[(x^kxk)(x^kxk)T]=E[(xˇk+Kk(Ckxk+nkCkxˇk)xk)(xˇk+Kk(Ckxk+nkCkxˇk)xk)T]=E[((1KkCk)(xˇkxk)+Kknk)((1KkCk)(xˇkxk)+Kknk)T]=(1KkCk)E[(xˇkxk)(xˇkxk)T](1KkCk)T+KkE[CkCkT]KkT=(1KkCk)Pˇk(1KkCk)T+KkRkKkT=PˇkKkCkPˇkPˇkCkTKkT+Kk(CkPˇkCkT+Rk)KkT

接下来最小均方差开始正式登场了。由于协方差矩阵的对角线元素就是方差,这样一来,把协方差矩阵的对角线元素求和,用 t r tr tr来表示这种算子,它的学名叫矩阵的迹。

于是,可以由它定义出一个代价函数:

J ( K k ) = t r ( E [ e ^ k e ^ k T ] ) = t r ( P ˇ k ) − 2 t r ( K k C k P ˇ k ) + t r ( K k ( C k P ˇ k C k T + R k ) K k T ) \begin{aligned}J(K_k)&=tr(E[\hat e_k\hat e_k^T])\\&=tr(\check P_k)-2tr(K_kC_k\check P_k)+tr(K_k(C_k\check P_kC_k^T+R_k)K_k^T)\end{aligned} J(Kk)=tr(E[e^ke^kT])=tr(Pˇk)2tr(KkCkPˇk)+tr(Kk(CkPˇkCkT+Rk)KkT)

最小均方差就是使得 J ( K k ) J(K_k) J(Kk)最小,对未知量 K k K_k Kk求导,令导函数等于0:

d J ( K k ) d K k = − 2 ( C k P ˇ k ) T + 2 K k ( C k P ˇ k C k T + R k ) \frac{dJ(K_k)}{dK_k}=-2(C_k\check P_k)^T+2K_k(C_k\check P_kC_k^T+R_k) dKkdJ(Kk)=2(CkPˇk)T+2Kk(CkPˇkCkT+Rk)

因此:

K k = P ˇ k C k T ( C k P ˇ k C k T + R k ) − 1 K_k=\check P_kC_k^T(C_k\check P_kC_k^T+R_k)^{-1} Kk=PˇkCkT(CkPˇkCkT+Rk)1

这正是卡尔曼增益的通常表达式。

关于卡尔曼滤波的讨论

以下是卡尔曼滤波的要点:

  1. 对于高斯噪声的线性系统,卡尔曼滤波器是最优线性无偏估计
  2. 必须有初始状态: { x ˇ 0 , P ˇ 0 } \{\check x_0,\check P_0\} {xˇ0,Pˇ0}
  3. 协方差部分与均值部分可以独立地递推。有时甚至可以计算一个固定的 K k K_k Kk,用于所有时刻的均值修正,这种做法称为固定状态的卡尔曼滤波。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/38857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ollama将模型永远加载在显存里

问题解析 我们在使用ollma部署大语言模型的时候,如果部署的模型尺寸较大,往往在第一次加载的时候需要花费大量的时间加载模型;等加载完成后,如果长时间不调用模型,我们会发现模型已经被释放掉了,又要重新加载,导致体验感极差. 这是为什么呢?因为在没被调用时,ollama默认在显…

Steam夏促怎么注册 Steam夏促账号注册教程

随着夏日的炙热渐渐充斥着每一个角落,Steam平台也赶来添热闹,推出了一系列让人眼前一亮的夏季促销活动。如果你也是游戏爱好者,我们肯定不能错过这次的steam夏促。正直本次夏日促销有着很多的游戏迎来史低和新史低,有各种各样的游…

20240703在飞凌OK3588-C开发板上刷Rockchip原厂的Buildroot20220811

20240703在飞凌OK3588-C开发板上刷Rockchip原厂的Buildroot20220811 2024/7/3 18:25 详细的刷机LOG: [BEGIN] 2024/7/3 18:18:49 rootRK3588:/# DDR Version V1.07 20220412 LPDDR4X, 2112MHz channel[0] BW16 Col10 Bk8 CS0 Row16 CS1 Row16 CS2 Die BW16 Size204…

TP8/6 更改后台入口地址admin改为myadmin 隐藏真实后台网址

原来www.xxx.com/admin 改后www.xxx.com/myadmin config/app.php // 应用映射(自动多应用模式有效)app_map > [admintest>admin],

JavaScript 实用技巧(二)

JavaScript 实用技巧:提升你的编程效率 JavaScript 是一种广泛使用和极具表现力的编程语言。为了帮助你更高效地编写代码,本文将介绍一些实用的 JavaScript 技巧。掌握这些技巧将有助于提高你的编程速度和代码质量。 1. 交换变量的值 不需要使用临时变…

为何同一PDF文档用不同软件打印效果不同?

通过扫描仪生成的同一PDF文档,同样的设置,为什么别的电脑打出来是白底我的打出来有灰色格子背景?这种情况通常是由于PDF阅读软件的不同造成的差异。 ### 可能的原因和解决方法: 1. **PDF阅读软件的不同**: - **解决方…

Vue3轻松创建交互式仪表盘

本文由ScriptEcho平台提供技术支持 项目地址:传送门 基于 Plotly.js 的 Vue 仪表盘组件 应用场景介绍 仪表盘是一种交互式可视化工具,用于监控和分析关键指标。它广泛应用于各种行业,例如金融、医疗保健和制造业。 代码基本功能介绍 本…

FFmpeg 命令行 音视频格式转换

📚:FFmpeg 提供了丰富的命令行选项和功能,可以用来处理音视频文件、流媒体等,掌握命令行的使用,可以有效提高工作效率。 目录 一、视频转换和格式转换 🔵 将视频文件转换为另一种格式 🔵 指定…

12个惊艳的可视化大屏:解锁数据之美,洞见未来趋势

在数字化转型的浪潮中,可视化大屏以其独特的魅力和强大的功能,成为了企业展示数据、洞察趋势的重要窗口。我们将一同探索12个惊艳的可视化大屏案例,感受数据之美,洞见未来趋势。 可视化大屏,作为数据可视化的高级形态…

vue3绘制广东深圳地图使用echarts

<!-- 饼图 --> <template><el-card><template #header> 地级市分类图 </template><div :id"id" :class"className" :style"{ height, width }"></div></el-card> </template><script …

彻底学会Gradle插件版本和Gradle版本及对应关系

看完这篇&#xff0c;保你彻底学会Gradle插件版本和Gradle版本及对应关系&#xff0c;超详细超全的对应关系表 需要知道Gradle插件版本和Gradle版本的对应关系&#xff0c;其实就是需要知道Gradle插件版本对应所需的gradle最低版本&#xff0c;详细对应关系如下表格&#xff0…

Lua、AB包热更新总结

1.AB包热更新 &#xff08;1&#xff09;AB包是一种特定的压缩文件&#xff0c;可以放模型贴图音效等等 &#xff08;2&#xff09;Resources目录下打包时只读 无法修改&#xff1b;而AB包存储的位置是自定义的&#xff0c;能够动态更新&#xff0c;同时可以决定资源包初始的大…

0703_ARM7

练习&#xff1a; 封装exti&#xff0c;cic初始化函数 //EXTI初始化 void hal_key_exti_init(int id,int exticr,int mode){//获取偏移地址int address_offset (id%4)*8;//获取寄存器编号int re_ser (id/4)1;//printf("address_offset%d,re_ser%d\n",address_o…

Excel中按列的首行字母顺序,重新排列(VBA脚本)

排序前 要求对4列数据按照第一行abcd的顺序排列 VB脚本如下&#xff1a; 要使用这个脚本&#xff0c;请按照以下步骤操作&#xff1a; 打开Excel&#xff0c;然后按下 Alt F11 打开VBA编辑器。在VBA编辑器中&#xff0c;选择“插入” > “模块”&#xff0c;在打开的模块…

【Python机器学习】算法链与管道——构建管道

目录 1、首先&#xff0c;我们构建一个由步骤列表组成的管道对象。 2、向任何其他scikit-learn估计器一样来拟合这个管道 3、调用pipe.score 我们来看下如何使用Pipeline类来表示在使用MinMaxScaler缩放数据后&#xff0c;再训练一个SVM的工作流程&#xff08;暂时不用网格搜…

常用的限流工具Guava RateLimiter 或Redisson RRateLimiter

在分布式系统和高并发场景中&#xff0c;限流是一个非常常见且重要的需求。以下是一些常用的限流工具和库&#xff0c;包括它们的特点和使用场景&#xff1a; 1. Guava RateLimiter Google 的 Guava 库中的 RateLimiter 是一个简单且高效的限流工具&#xff0c;适用于单节点应…

MySQL数据库设计作业 ——《网上书店系统》数据库设计实验报告

数据库设计作业——《网上书店系统》数据库设计 一、功能需求 普通用户&#xff1a;可以进行最基础的登陆操作&#xff0c;可浏览图书、按类别查询图书、查看 图书的详细信息&#xff0c;还可以注册成为会员。会员&#xff1a;需要填写详细信息&#xff08;真实姓名、性别、手…

什么是yum源?如何对其进行配置?

哈喽&#xff0c;大家好呀&#xff01;这里是码农后端。今天来聊一聊Linux下的yum源及其配置相关的内容。简单来说&#xff0c;yum源就相当于一个管理软件的工具&#xff0c;可以想象成一个很大的仓库&#xff0c;里面存放着各种我们所需要的软件包及其依赖。 一、Linux下软件包…

VRPTW(MATLAB):北极海鹦优化(APO)算法求解带时间窗的车辆路径问题VRPTW(提供MATLAB代码)

详细介绍 VRPTW&#xff08;MATLAB&#xff09;&#xff1a;北极海鹦优化&#xff08;Arctic puffin optimization&#xff0c;APO&#xff09;算法求解带时间窗的车辆路径问题VRPTW&#xff08;提供MATLAB代码&#xff09;-CSDN博客 ********************************求解结果…

电源管理芯片PMIC的安全策略

1.概述 PMIC作为系统的电源管理模块&#xff0c;其输入电压一般会比较高&#xff0c;为保证芯片自身的安全&#xff0c;PMIC芯片会有独立的安全域&#xff0c;和功能域完全隔离&#xff0c;拥有独立的电压和电流输入&#xff0c;独立的晶振模块&#xff0c;内部运行监控状态机…