卡尔曼滤波(Kalman Filter)及其动态仿真

估计问题(Estimation)

首先看下什么是估计问题,现有一信号 x 1 ( t ) x_1(t) x1(t)和噪声 x 2 ( t ) x_2(t) x2(t),我们能观测到的是两者之和 y ( t ) = x 1 ( t ) + x 2 ( t ) y(t)=x_1(t)+x_2(t) y(t)=x1(t)+x2(t)假定我们观测到具体的数值 y ( t 0 ) ⋯ y ( t ) y(t_0)\cdots y(t) y(t0)y(t),期望从这些观测数据推测出 t 1 t_1 t1时刻的信号 x 1 ( t 1 ) x_1(t_1) x1(t1) t 1 t_1 t1 t t t时刻的关系有三种

t 1 t_1 t1 t t t的关系对应的问题
t 1 < t t_1<t t1<t平滑
t 1 = t t_1=t t1=t滤波
t 1 > t t_1>t t1>t预测

这三类关系对应的问题统称为估计问题。根据量测 y ( t 0 ) , y ( t 1 ) , ⋯ y ( t ) y(t_0),y(t_1),\cdots y(t) y(t0),y(t1),y(t) x 1 ( t 1 ) x_1(t_1) x1(t1)的估计记为 X 1 ( t 1 ∣ t ) X_1(t_1|t) X1(t1t),可以得到条件分布 Pr [ x 1 ( t 1 ) < ξ ∣ y ( t 0 ) , y ( t 1 ) , ⋯   , y ( t ) ] \text{Pr}[x_1(t_1)<\xi|y(t_0),y(t_1),\cdots ,y(t)] Pr[x1(t1)<ξy(t0),y(t1),,y(t)]

最小均方误差估计(Minimum Mean Square Error Estimator)

在先前的笔记中介绍了最小均方误差估计(可以翻阅参数估计(Parameter Estimation)),本节将其推广到向量形式。最小均方误差估计值为条件均值 E ( x ∣ z ) E(x|z) E(xz),其中 x x x为待估计量, z z z为观测量。求解条件均值,直接想法是求条件概率密度函数 p ( x ∣ z ) p(x|z) p(xz)。假定 x x x z z z满足联合正态分布,即
y = [ x z ] ∼ N { [ x ˉ z ˉ ] , [ P x x     P x z P z x     P z z ] } y=\bigg[\begin{aligned} &x \\ &z \end{aligned}\bigg] \sim \mathcal{N} \bigg\{ \bigg[\begin{aligned} &\bar{x} \\ &\bar{z} \end{aligned}\bigg], \bigg[\begin{aligned} &P_{xx}~~~P_{xz}\\ &P_{zx}~~~P_{zz}\end{aligned}\bigg]\bigg\} y=[xz]N{[xˉzˉ],[Pxx   PxzPzx   Pzz]}其中 x ˉ \bar{x} xˉ x x x的均值, z ˉ \bar{z} zˉ z z z的均值, P x x P_{xx} Pxx P z z P_{zz} Pzz为各自方差, P x z P_{xz} Pxz为协方差。联合变量满足 y ∼ N { y ˉ , P y y } y \sim N\{\bar{y},P_{yy}\} yN{yˉ,Pyy},可由贝叶斯公式得到条件概率密度函数 p ( x ∣ z ) = p ( x , z ) p ( z ) = p ( y ) p ( z ) p(x|z)=\dfrac{p(x,z)}{p(z)}=\dfrac{p(y)}{p(z)} p(xz)=p(z)p(x,z)=p(z)p(y)将概率密度函数代入得到 p ( x ∣ z ) = ∣ 2 π P y y ∣ − 1 / 2 exp { − 1 2 ( y − y ˉ ) ′ P y y − 1 ( y − y ˉ ) } ∣ 2 π P z z ∣ − 1 / 2 exp { − 1 2 ( z − z ˉ ) ′ P z z − 1 ( z − z ˉ ) } p(x|z)=\dfrac{|2\pi P_{yy}|^{-1/2}\text{exp}\{-\dfrac{1}{2}(y-\bar{y})'P_{yy}^{-1}(y-\bar{y})\}}{|2\pi P_{zz}|^{-1/2}\text{exp}\{-\dfrac{1}{2}(z-\bar{z})'P_{zz}^{-1}(z-\bar{z})\}} p(xz)=2πPzz1/2exp{21(zzˉ)Pzz1(zzˉ)}2πPyy1/2exp{21(yyˉ)Pyy1(yyˉ)}该条件概率密度函数仍遵从高斯形式,通过整理可以得到均值,具体推导步骤见文末附录一 E [ x ∣ z ] = x ˉ + P x z P z z − 1 ( z − z ˉ ) E[x|z]=\bar{x}+P_{xz}P_{zz}^{-1}(z-\bar{z}) E[xz]=xˉ+PxzPzz1(zzˉ)相应的条件协方差为 P x x ∣ z = P x x − P x z P z z − 1 P z x P_{xx|z}=P_{xx}-P_{xz}P_{zz}^{-1}P_{zx} Pxxz=PxxPxzPzz1Pzx可以看到,在该情况下的最小均方误差估计,与被估计量先验均值和量测先验均值有关。在此基础上推导最小均方误差的动态估计,即卡尔曼滤波(Kalman filter)

卡尔曼滤波(Kalman Filter)

状态估计是针对动态系统而言的,状态的演变过程由状态转移方程描述。用 x ( k ) x(k) x(k)表示在 k k k时刻下的系统状态, F F F用来描述 k + 1 k+1 k+1时刻和 k k k时刻状态之间的关系,被称为状态转移矩阵。不考虑状态过程噪声时候,状态转移方程可以写作 x ( k + 1 ) = F x ( k ) x(k+1)=Fx(k) x(k+1)=Fx(k)区别于静态的参数估计,动态系统的待估计量是按照一定规律进行变化的。观测量和状态之间的关系用转移矩阵 H H H来描述 z ( k + 1 ) = H x ( k + 1 ) + w ( k + 1 ) z(k+1)=Hx(k+1)+w(k+1) z(k+1)=Hx(k+1)+w(k+1)其中 w ( k + 1 ) w(k+1) w(k+1)为传感器的测量噪声,假定其为零均值,方差为 R ( k + 1 ) R(k+1) R(k+1)的高斯白噪声。我们要估计 k + 1 k+1 k+1时候的状态 x ( k + 1 ) x(k+1) x(k+1),根据我们已经获得的量测数据集合 z k + 1 = { z 1 , z 2 , ⋯   , z k + 1 } z^{k+1}=\{z_1,z_2,\cdots,z_{k+1}\} zk+1={z1,z2,,zk+1}。假定在 k k k时刻,已经得到了状态最小均方误差估计值 x ^ k ∣ k = E [ x ( k ) ∣ z k ] \hat{x}_{k|k}=E[x(k)|z^{k}] x^kk=E[x(k)zk]按照上一节所介绍的静态参数最小均方误差估计,推导Kalman滤波过程

  1. 求解 x ˉ → \bar{x}\to xˉ k + 1 k+1 k+1时刻的先验状态均值 x ^ k + 1 ∣ k = E [ x ( k + 1 ) ∣ z k ] \hat{x}_{k+1|k}=E[x(k+1)|z^k] x^k+1k=E[x(k+1)zk]代入状态转移方程得到 x ^ k + 1 ∣ k = E [ F x ( k ) ∣ z k ] = F x ^ k ∣ k \hat{x}_{k+1|k}=E[Fx(k)|z^k]=F\hat{x}_{k|k} x^k+1k=E[Fx(k)zk]=Fx^kk
  2. 求解 z ˉ → \bar{z}\to zˉ k + 1 k+1 k+1时刻的均值 z ^ k + 1 ∣ k = E [ z ( k + 1 ) ∣ z k ] \hat{z}_{k+1|k}=E[z(k+1)|z^k] z^k+1k=E[z(k+1)zk] 代入量测方程,因量测噪声为零均值所以有 z ^ k + 1 ∣ k = E [ H x ( k + 1 ) + w ( k + 1 ) ∣ z k ] = H x ^ k + 1 ∣ k \hat{z}_{k+1|k}=E[Hx(k+1)+w(k+1)|z^k]=H\hat{x}_{k+1|k} z^k+1k=E[Hx(k+1)+w(k+1)zk]=Hx^k+1k
  3. 求解方差和协方差项
    P x x → P k + 1 ∣ k = E [ x ~ k + 1 ∣ k x ~ k + 1 ∣ k ′ ∣ z k ] = E [ ( x ( k + 1 ) − x ^ k + 1 ∣ k ) ( ( x ( k + 1 ) − x ^ k + 1 ∣ k ) ′ ∣ z k ] = E [ ( F x ( k ) − F x ^ k ∣ k ) ( F x ( k ) − F x ^ k ∣ k ) ′ ∣ z k ] = E [ F x ~ k ∣ k x ~ k ∣ k ′ F ′ ∣ z k ] = F P k ∣ k F ′ \begin{aligned}P_{xx}&\to P_{k+1|k}=E[\tilde{x}_{k+1|k}\tilde{x}_{k+1|k}'|z^k]\\&=E[(x(k+1)-\hat{x}_{k+1|k})((x(k+1)-\hat{x}_{k+1|k})'|z^k]\\&=E[(Fx(k)-F\hat{x}_{k|k})(Fx(k)-F\hat{x}_{k|k})'|z^k]\\&=E[F\tilde{x}_{k|k}\tilde{x}_{k|k}'F'|z^k]\\&=FP_{k|k}F'\end{aligned} PxxPk+1k=E[x~k+1kx~k+1kzk]=E[(x(k+1)x^k+1k)((x(k+1)x^k+1k)zk]=E[(Fx(k)Fx^kk)(Fx(k)Fx^kk)zk]=E[Fx~kkx~kkFzk]=FPkkF P x z → E [ ( x ( k + 1 ) − x ^ k + 1 ∣ k ) ( ( z ( k + 1 ) − z ^ k + 1 ∣ k ) ′ ∣ z k ] = E [ x ~ k + 1 ∣ k ( H x ( k + 1 ) + w ( k + 1 ) − H x ^ k + 1 ∣ k ) ′ ∣ z k ] = E [ x ~ k + 1 ∣ k x ~ k + 1 ∣ k ′ H ′ ∣ z k ] = P k + 1 ∣ k H ′ \begin{aligned}P_{xz}&\to E[(x(k+1)-\hat{x}_{k+1|k})((z(k+1)-\hat{z}_{k+1|k})'|z^k]\\&=E[\tilde{x}_{k+1|k}(Hx(k+1)+w(k+1)-H\hat{x}_{k+1|k})'|z^k]\\&=E[\tilde{x}_{k+1|k}\tilde{x}_{k+1|k}'H'|z^k]\\&=P_{k+1|k}H'\end{aligned} PxzE[(x(k+1)x^k+1k)((z(k+1)z^k+1k)zk]=E[x~k+1k(Hx(k+1)+w(k+1)Hx^k+1k)zk]=E[x~k+1kx~k+1kHzk]=Pk+1kH P z z → S k + 1 = E [ ( z ( k + 1 ) − z ^ k + 1 ∣ k ) ( ( z ( k + 1 ) − z ^ k + 1 ∣ k ) ′ ∣ z k ] = E [ ( H x ~ k + 1 ∣ k + w ( k + 1 ) ) ( H x ~ k + 1 ∣ k + w ( k + 1 ) ) ′ ∣ z k ] = H P k + 1 ∣ k H ′ + R ( k + 1 ) \begin{aligned}P_{zz}&\to S_{k+1}\\&= E[(z(k+1)-\hat{z}_{k+1|k})((z(k+1)-\hat{z}_{k+1|k})'|z^k]\\&=E[(H\tilde{x}_{k+1|k}+w(k+1))(H\tilde{x}_{k+1|k}+w(k+1))'|z^k]\\&=HP_{k+1|k}H'+R(k+1)\end{aligned} PzzSk+1=E[(z(k+1)z^k+1k)((z(k+1)z^k+1k)zk]=E[(Hx~k+1k+w(k+1))(Hx~k+1k+w(k+1))zk]=HPk+1kH+R(k+1)
  4. 代入最小均方误差估计计算公式 x ^ k + 1 ∣ k + 1 = x ^ k + 1 ∣ k + P k + 1 ∣ k H ′ S k + 1 − 1 ( z k + 1 − z ^ k + 1 ∣ k ) \hat{x}_{k+1|k+1}=\hat{x}_{k+1|k}+P_{k+1|k}H'S_{k+1}^{-1}(z_{k+1}-\hat{z}_{k+1|k}) x^k+1k+1=x^k+1k+Pk+1kHSk+11(zk+1z^k+1k) P k + 1 ∣ k + 1 = P k + 1 ∣ k − P k + 1 ∣ k H ′ S k + 1 − 1 H P k + 1 ∣ k P_{k+1|k+1}=P_{k+1|k}-P_{k+1|k}H'S_{k+1}^{-1}HP_{k+1|k} Pk+1k+1=Pk+1kPk+1kHSk+11HPk+1k

理解Kalman滤波

卡尔曼滤波做了一件什么样的事呢?实质是两个分布的融合

从信号统计特性去看整个滤波过程会有所发现。现有两种概率分布,一是根据数学建模得到的概率分布,二是量测的概率分布,Kalman滤波器将这两种分布经过最优整合得到估计结果,即输出概率分布的均值。采取的最优便是第二节中提到的线性最小均方误差准则。不难发现,整个滤波过程中只用到了噪声统计特性的一阶矩和二阶矩,因此适用于非平稳的信号估计

在这里推荐Matlab官方讲解Kalman滤波的视频,个人认为其对卡尔曼滤波的讲解较为深刻。

另有一篇IEEE 文献用更为直观的方式推导了Kalman滤波,用到高斯概率密度函数的乘积是高斯分布形式。

Kalman滤波仿真

旨在通过一简单例子,探索下Kalman滤波到底干了啥?

仿真场景:现有一小车沿着水平的道路直线匀速行驶,传感器每隔一段时间 T T T便采集下其位置,但传感器并不精确,存在测量噪声。后端采集得到一批带有噪声的位置数据,想通过Kalman滤波提高对小车状态估计精度。这里为了从统计角度分析Kalman滤波过程,进行了1000次的蒙特卡洛仿真。

仿真代码已上传资源(有需求者可点击此下载

对蒙特卡洛仿真采集到的位置数据绘制直方图,可以看到测量位置满足高斯分布,从量测方程可知分布的均值为该时刻位置

上一节所说的两个分布的融合,在卡尔曼滤波过程中,绘制了量测的预测和量测动态统计特性图

最后给出均方根误差曲线,表明卡尔曼滤波能有效地进行状态估计

附录一

p ( x ∣ z ) = ∣ 2 π P y y ∣ − 1 / 2 exp { − 1 2 ( y − y ˉ ) ′ P y y − 1 ( y − y ˉ ) } ∣ 2 π P z z ∣ − 1 / 2 exp { − 1 2 ( z − z ˉ ) ′ P z z − 1 ( z − z ˉ ) } = ∣ 2 π P y y ∣ − 1 / 2 ∣ 2 π P z z ∣ − 1 / 2 exp { − 1 2 q } \begin{aligned} p(x|z)&=\dfrac{|2\pi P_{yy}|^{-1/2}\text{exp}\{-\dfrac{1}{2}(y-\bar{y})'P_{yy}^{-1}(y-\bar{y})\}}{|2\pi P_{zz}|^{-1/2}\text{exp}\{-\dfrac{1}{2}(z-\bar{z})'P_{zz}^{-1}(z-\bar{z})\}}\\ &=\dfrac{|2\pi P_{yy}|^{-1/2}}{|2\pi P_{zz}|^{-1/2}}\text{exp}\{-\dfrac{1}{2}q\}\end{aligned} p(xz)=2πPzz1/2exp{21(zzˉ)Pzz1(zzˉ)}2πPyy1/2exp{21(yyˉ)Pyy1(yyˉ)}=2πPzz1/22πPyy1/2exp{21q}其中 q = ( y − y ˉ ) ′ P y y − 1 ( y − y ˉ ) − ( z − z ˉ ) ′ P z z − 1 ( z − z ˉ ) q=(y-\bar{y})'P_{yy}^{-1}(y-\bar{y})-(z-\bar{z})'P_{zz}^{-1}(z-\bar{z}) q=(yyˉ)Pyy1(yyˉ)(zzˉ)Pzz1(zzˉ)我们关心的是指数项里的均值,将其整理为 ( v − v ˉ ) ′ P v v − 1 ( v − v ˉ ) (v-\bar{v})'P_{vv}^{-1}(v-\bar{v}) (vvˉ)Pvv1(vvˉ)的形式,首先求 P y y − 1 P_{yy}^{-1} Pyy1
已知 P y y = [ P x x     P x z P z x     P z z ] P_{yy}=\bigg[\begin{aligned} &P_{xx}~~~P_{xz}\\ &P_{zx}~~~P_{zz}\end{aligned}\bigg] Pyy=[Pxx   PxzPzx   Pzz]假设 P y y − 1 = [ T x x     T x z T z x     T z z ] P_{yy}^{-1}=\bigg[\begin{aligned} &T_{xx}~~~T_{xz}\\ &T_{zx}~~~T_{zz}\end{aligned}\bigg] Pyy1=[Txx   TxzTzx   Tzz]对分块矩阵求逆得到以下关系 T x x − 1 = P x x − P x z P z z − 1 P z x ,     P z z − 1 = T z z − T z x T x x − 1 T x z ,     T x x − 1 T x z = − P x z P z z − 1 T_{xx}^{-1}=P_{xx}-P_{xz}P_{zz}^{-1}P_{zx},~~~P_{zz}^{-1}=T_{zz}-T_{zx}T_{xx}^{-1}T_{xz},~~~T_{xx}^{-1}T_{xz}=-P_{xz}P_{zz}^{-1} Txx1=PxxPxzPzz1Pzx,   Pzz1=TzzTzxTxx1Txz,   Txx1Txz=PxzPzz1 ξ = z − z ˉ ,   ϵ = y − y ˉ = [ η ξ ] \xi=z-\bar{z},~\epsilon=y-\bar{y}=\bigg[ \begin{aligned}&\eta \\ &\xi\end{aligned} \bigg] ξ=zzˉ, ϵ=yyˉ=[ηξ] q q q可整理为 q = ϵ ′ P y y − 1 ϵ − ξ ′ P z z − 1 ξ = η ′ T x x η + ξ ′ T z x η + η ′ T x z ξ + ξ ′ T z z ξ − ξ ′ P z z − 1 ξ = ( η + T x x − 1 T x z ξ ) ′ T x x ( η + T x x − 1 T x z ξ ) + ξ ′ ( T z z − T z x T x x − 1 T x z ) ξ − ξ ′ P z z − 1 ξ = ( η + T x x − 1 T x z ξ ) ′ T x x ( η + T x x − 1 T x z ξ ) \begin{aligned}q&=\epsilon' P_{yy}^{-1} \epsilon - \xi' P_{zz}^{-1} \xi\\ &=\eta'T_{xx}\eta+\xi'T_{zx}\eta+\eta'T_{xz}\xi+\xi' T_{zz}\xi- \xi' P_{zz}^{-1}\xi\\&=(\eta+T_{xx}^{-1}T_{xz}\xi)'T_{xx}(\eta+T_{xx}^{-1}T_{xz}\xi)+\xi'(T_{zz}-T_{zx}T_{xx}^{-1}T_{xz})\xi-\xi' P_{zz}^{-1}\xi\\&=(\eta+T_{xx}^{-1}T_{xz}\xi)'T_{xx}(\eta+T_{xx}^{-1}T_{xz}\xi)\end{aligned} q=ϵPyy1ϵξPzz1ξ=ηTxxη+ξTzxη+ηTxzξ+ξTzzξξPzz1ξ=(η+Txx1Txzξ)Txx(η+Txx1Txzξ)+ξ(TzzTzxTxx1Txz)ξξPzz1ξ=(η+Txx1Txzξ)Txx(η+Txx1Txzξ)其中 η + T x x − 1 T x z ξ = x − x ˉ − P x z P z z − 1 ( z − z ˉ ) \eta+T_{xx}^{-1}T_{xz}\xi=x-\bar{x}-P_{xz}P_{zz}^{-1}(z-\bar{z}) η+Txx1Txzξ=xxˉPxzPzz1(zzˉ)条件均值为 E [ x ∣ z ] = x ˉ + P x z P z z − 1 ( z − z ˉ ) E[x|z]=\bar{x}+P_{xz}P_{zz}^{-1}(z-\bar{z}) E[xz]=xˉ+PxzPzz1(zzˉ)相应的条件方差等于 T x x T_{xx} Txx P x x ∣ z = P x x − P x z P z z − 1 P z x P_{xx|z}=P_{xx}-P_{xz}P_{zz}^{-1}P_{zx} Pxxz=PxxPxzPzz1Pzx

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

朽木为萤

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

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

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

打赏作者

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

抵扣说明:

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

余额充值