卡尔曼滤波

基本思想
用前一个状态的估计值和当前观测数据估计当前状态变量的值。
pic1
其中:

  • 状态变量 x k x_k xk
  • 前一时刻的状态变量 x k − 1 x_{k-1} xk1
  • 第k步状态变量之间增益矩阵的取值 A k A_k Ak
  • 第k步状态变量和输出信号之间的增益 C k C_k Ck
  • 量测噪声 v k v_k vk
  • 过程噪声 w k − 1 w_{k-1} wk1
  • 当前的观测值 y k y_k yk

状态方程: x k = A k − 1 x k − + w k − 1 x_k=A_{k-1}x_{k-}+w_{k-1} xk=Ak1xk+wk1
量测方程: y k = C k x k + v k y_k = C_{k}x_k+v_{k} yk=Ckxk+vk

下一个时刻的观测数据 y k y_k yk由前一个状态变量决定,所以前一个状态变量是否估算准确十分关键。
为了使前一个状态估算准确,使用当前的观测值与实际值的误差去校正前一个状态变量。考虑k-1时刻的过程噪声 w k − 1 w_{k-1} wk1 和量测噪声 v k v_k vk
{ x ^ k ′ = A k − 1 x k − y ^ k ′ = C k x k \left\{\begin{array}{l} \hat x_k'=A_{k-1}x_{k-}\\ \hat y_k' = C_{k}x_k \end{array}\right. {x^k=Ak1xky^k=Ckxk
用数学的语言去描述就是:
x ^ k = A k x ^ k − 1 + H k ( y k − y ^ k ′ ) = A k x ^ k − 1 + H k ( y k − C k x k ) = A k x ^ k − 1 + H k ( y k − C k A k x ^ k − 1 ) \begin{aligned} \hat x_k &= \mathbf A_k \hat x_{k-1}+\mathbf H_k(y_k-\hat y_k') \\ &= \mathbf A_k\hat x_{k-1}+\mathbf H_k(y_k-\mathbf C_{k}x_k) \\ &= \mathbf A_k\hat x_{k-1}+\mathbf H_k(y_k-\mathbf C_{k}\mathbf A_k\hat x_{k-1}) \end{aligned} x^k=Akx^k1+Hk(yky^k)=Akx^k1+Hk(ykCkxk)=Akx^k1+Hk(ykCkAkx^k1) H k \mathbf H_k Hk为增益矩阵
注意,这里没有考虑k-1时刻的过程噪声 w k − 1 w_{k-1} wk1 和量测噪声 v k v_k vk
这时,经过校正的当前状态的误差 x ~ = x k − x ^ k \tilde{x} = x_k - \hat{x}_k x~=xkx^k
经过校正的当前状态的均方值 P k = E [ ( x k − x ^ k ) ( x k − x ^ k ) T ] P_k=E[(x_k-\hat x_k)(x_k-\hat x_k)^T] Pk=E[(xkx^k)(xkx^k)T]
未经过校正的当前状态的均方值 P k ′ = E [ ( x k − x ^ k ′ ) ( x k − x ^ k ′ ) T ] P_k'=E[(x_k-\hat x_k')(x_k-\hat x_k')^T] Pk=E[(xkx^k)(xkx^k)T]
卡尔曼滤波要求状态变量的估计误差的均方值( P k P_{k} Pk对角线元素)为最小, 因此卡尔曼滤波的关键就是要得到Pk与Hk的关系式,即通过选择合适的 H k \mathbf H_k Hk,使 P k P_{k} Pk取得最小值。
经过一系列的推导,得到卡尔曼滤波的推导式:
{ x ^ k = A k x ^ k − 1 + H k ( y k − C k A k x ^ k − 1 ) H k = P k ′ C k T ( C k P k ′ C k T + R k ) − 1 P k ′ = A k P k − 1 A k T + Q k − 1 P k = ( I − H k C k ) P k ′ \left\{\begin{array}{l} \hat{x}_{k}=A_{k} \hat{x}_{k-1}+\mathbf H_{k}\left(y_{k}-\mathbf C_{k} \mathbf A_{k} \hat{x}_{k-1}\right) \\ H_{k}=P_{k}^{\prime} \mathbf C_{k}^{\mathrm{T}}\left(\mathbf C_{k} P_{k}^{\prime} \mathbf C_{k}^{\mathrm{T}}+R_{k}\right)^{-1} \\ P_{k}^{\prime}=\mathbf A_{k} P_{k-1} \mathbf A_{k}^{\mathrm{T}}+Q_{k-1} \\ P_{k}=\left(\mathbf I-\mathbf H_{k} \mathbf C_{k}\right) P_{k}^{\prime} \end{array}\right. x^k=Akx^k1+Hk(ykCkAkx^k1)Hk=PkCkT(CkPkCkT+Rk)1Pk=AkPk1AkT+Qk1Pk=(IHkCk)Pk
其中 Q k Q_k Qk为过程噪声的方差, R k R_k Rk量测噪声的方差

递推流程:
利用 k − 1 k-1 k1时刻的状态变量 x ^ k − 1 \hat{x}_{k-1} x^k1与经过校正后的状态变量的估计误差均方值 P k ′ P_{k}' Pk代入 P k ′ = A k P k − 1 A k T + Q k − 1 P_{k}^{\prime}=\mathbf A_{k} P_{k-1} \mathbf A_{k}^{\mathrm{T}}+Q_{k-1} Pk=AkPk1AkT+Qk1
得到 P k ′ P_{k}' Pk, 代入 H k = P k ′ C k T ( C k P k ′ C k T + R k ) − 1 \mathbf H_{k}=P_{k}^{\prime} \mathbf C_{k}^{\mathrm{T}}\left(\mathbf C_{k} P_{k}^{\prime} \mathbf C_{k}^{\mathrm{T}}+R_{k}\right)^{-1} Hk=PkCkT(CkPkCkT+Rk)1
得到 H k \mathbf H_{k} Hk,将其代入
P k = ( I − H k C k ) P k ′ P_{k}=\left(\mathbf I-\mathbf H_{k} \mathbf C_{k}\right) P_{k}^{\prime} Pk=(IHkCk)Pk
x ^ k = A k x ^ k − 1 + H k ( y k − C k A k x ^ k − 1 ) \hat{x}_{k}=A_{k} \hat{x}_{k-1}+\mathbf H_{k}\left(y_{k}-\mathbf C_{k} \mathbf A_{k} \hat{x}_{k-1}\right) x^k=Akx^k1+Hk(ykCkAkx^k1)
最终得到 x ^ k \hat{x}_{k} x^k P k P_{k} Pk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值