线性 K a l m a n Kalman Kalman滤波器
考虑如下状态空间模型描述的动态系统:
x k = A x k − 1 + B u k − 1 + ω k − 1 x_k=Ax_{k-1}+Bu_{k-1}+\omega_{k-1} xk=Axk−1+Buk−1+ωk−1
y k = H x k + v k y_k=Hx_k+v_k yk=Hxk+vk
式中, k k k为离散时间,系统在时刻 k k k的状态向量为 x k ∈ R n x_k\in \mathbb{R}^n xk∈Rn;假设系统满足可观性要求, y k ∈ R n y_k\in \mathbb{R}^n yk∈Rn为对应状态的观测向量;随机信号 w k w_k wk和 v k v_k vk分别表示过程噪声和观测噪声。
假设1: w k w_{k} wk和 v k v_{k} vk是均值为零,方差阵各为 Q Q Q和 R R R的不相关白噪声,即 w k ∽ N ( 0 , Q ) w_{k}\backsim N(0,Q) wk∽N(0,Q), v k ∽ N ( 0 , R ) v_k \backsim N(0,R) vk∽N(0,R),实际过程中 Q Q Q和 R R R可能随着每次迭代计算而变化,这里假设为常数。
假设2:初始状态 x 0 x_0 x0不相关于 w k w_k wk和 v k v_k vk, E [ x 0 ] = μ 0 E[x_0]=\mu _0 E[x0]=μ0, E [ ( x 0 − μ 0 ) ( x 0 − μ 0 ) T ] = P 0 E[(x_0-\mu _0)(x_0-\mu _0)^T]=P_0 E[(x0−μ0)(x0−μ0)T]=P0
K a l m a n Kalman Kalman滤波器递推算法如下:
预测更新方程: { x ˉ k = A x k − 1 + B u k − 1 P ˉ k = A P k − 1 A T + Q \begin{cases}\bar{x}_k=Ax_{k-1}+Bu_{k-1}\\\bar{P}_k=AP_{k-1}A^T+Q\end{cases} {xˉk=Axk−1+Buk−1Pˉk=APk−1AT+Q
卡尔曼增益矩阵: K = P ˉ k H T ( H P ˉ k H T + R ) − 1 K=\bar{P}_{k}H^T(H\bar{P}_{k}H^T+R)^{-1} K=PˉkHT(HPˉkHT+R)−1
测量更新方程: { x k = x ˉ k + K ( y k − H x ˉ k ) P k = ( I − K H ) P ˉ k \begin{cases}x_k=\bar{x}_k+K(y_{k}-H\bar{x}_k)\\P_{k}=(I-KH)\bar{P}_k\end{cases} {xk=xˉk+K(yk−Hxˉk)Pk=(I−KH)Pˉk
R Q P R\,Q\,P RQP不同取值对状态估计的影响
假设一个系统模型为:
x 1 ( k + 1 ) = x 1 ( k ) + x 2 ( k ) + w ( k ) x 2 ( k + 1 ) = x 2 ( k ) + w ( k ) \begin{aligned} x_1(k+1) &= x_1(k)+x_2(k)+w(k) \\ x_2(k+1) &= x_2(k)+w(k) \end{aligned} x1(k+1)x2(k+1)=x1(k)+x2(k)+w(k)=x2(k)+w(k)
观测模型为:
y 1 ( k + 1 ) = x 1 ( k + 1 ) + v 1 ( k + 1 ) y 2 ( k + 1 ) = x 2 ( k + 1 ) + v 2 ( k + 1 ) \begin{aligned} y_1(k+1) &= x_1(k+1)+v_1(k+1) \\ y_2(k+1) &= x_2(k+1)+v_2(k+1) \end{aligned} y1(k+1)y2(k+1)=x1(k+1)+v1(k+1)=x2(k+1)+v2(k+1)
将上述模型写成卡尔曼滤波器的公式表示形式:
{ [ x 1 ( k + 1 ) x 2 ( k + 1 ) ] = [ 1 1 0 1 ] [ x 1 ( k ) x 2 ( k ) ] + w ( k ) 观测方程 [ y 1 ( k + 1 ) y 2 ( k + 1 ) ] = [ 1 0 0 1 ] [ x 1 ( k + 1 ) x 2 ( k + 1 ) ] + [ v 1 ( k + 1 ) v 2 ( k + 1 ) ] 测量方程 \begin{cases}\left[ \begin{matrix} x_{1}(k+1)\\x_{2}(k+1)\end{matrix}\right]=\left[\begin{matrix}1&1\\0&1\end{matrix}\right]\left[\begin{matrix}x_{1}(k)\\x_2(k)\end{matrix}\right]+w(k)&\text{观测方程}\\\\\left[ \begin{matrix} y_{1}(k+1)\\y_{2}(k+1)\end{matrix}\right]=\left[\begin{matrix}1&0\\0&1\end{matrix}\right]\left[\begin{matrix}x_{1}(k+1)\\x_2(k+1)\end{matrix}\right]+\left[\begin{matrix}v_1(k+1)\\v_2(k+1)\end{matrix}\right]&\text{测量方程}\end{cases} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧[x1(k+1)x2(k+1)]=[1011][x1(k)x2(k)]+w(k)[y1(k+1)y2(k+1)]=[1001][x1(k+1)x2(k+1)]+[v1(k+1)v2(k+1)]观测方程测量方程
w v 1 v 2 w \,v_1\,v_2 wv1v2为相互独立的零均值白高斯序列。
A = [ 1 1 0 1 ] A=\left[\begin{matrix}1&1\\0&1\end{matrix}\right] A=[1011] H = [ 1 0 0 1 ] H=\left[\begin{matrix}1&0\\0&1\end{matrix}\right] H=[1001]
预测更新方程: { x ˉ k = A x k − 1 P ˉ k = A P k − 1 A T + Q \begin{cases}\bar{x}_k=Ax_{k-1}\\\bar{P}_k=AP_{k-1}A^T+Q\end{cases} {xˉk=Axk−1Pˉk=APk−1AT+Q
卡尔曼增益矩阵: K = P ˉ k H T ( H P ˉ k H T + R ) − 1 K=\bar{P}_{k}H^T(H\bar{P}_{k}H^T+R)^{-1} K=PˉkHT(HPˉkHT+R)−1
测量更新方程: { x k = x ˉ k + K ( y k − H x ˉ k ) P = ( I − K H ) P ˉ k \begin{cases}x_k=\bar{x}_k+K(y_{k}-H\bar{x}_k)\\P=(I-KH)\bar{P}_k\end{cases} {xk=xˉk+K(yk−Hxˉk)P=(I−KH)Pˉk
结合 K a l m a n Kalman Kalman算法和仿真结果分析:
当 R R R趋于0时, lim R → 0 K = H − 1 \lim_{R \to 0}K=H^{-1} limR→0K=H−1,测量噪声 v = 0 v=0 v=0,系统表现为完全取测量值作为状态的后验估计,而系统的先验状态估计被完全抛弃;当 P ˉ k = 0 \bar{P}_k=0 Pˉk=0时, Q = 0 Q=0 Q=0,此时系统完全抛弃测量值,取先验估计值。
过程噪声 Q Q Q对滤波效果的影响:
Q Q Q为对模型的信任度。 Q Q Q越大滤波后的曲线跟测量曲线跟的越紧密,滤波后稳态误差越大,但误差收敛速度会加快; Q Q Q值越小滤波效果越明显稳态误差越小,相应的误差收敛速度会变慢。
测量噪声 R R R对滤波效果的影响:
R R R决定稳态噪声。 R R R越小初始增益越大收敛越快,但是稳态容易引入噪声; R R R越大对噪声越不敏感,即滤波后的数据跳动越小,但 R R R越大卡尔曼滤波输出误差收敛越慢。
协方差矩阵 P P P对滤波效果的影响:
P P P决定初始增益的大小,影响初始时刻的收敛效果,不影响稳态误差。