还是将卡尔曼滤波核心思想钉在开头:

用测量值修正系统模型值,得到当前轮次的最优估计值。再将该最优估计值当作下一轮的系统模型输入,继续进行下一轮的最优估计,如此迭代进行。

上节,推导得到了状态空间方程,可以得到系统模型值了。目前核心思想中的【修正】这个概念还处于迷雾中,本节对此进行推导。
往下看之前,如果让你来原创,你会怎么用表达式将【测量值修正系统模型值】这句话的逻辑清晰地写出来?


修正

有差值才有【修正】,而差值是测量值和系统模型之间的差,是在被修正值的基础上加这个差值,因此这是一个关于测量值和系统模型值的逻辑。【修正】的逻辑应当是这样的:将测量值与模型值的差作为修正值,乘个系数后,叠加到模型值,这就是卡尔曼滤波的【修正】。这个系数,被称为卡尔曼增益。由于 z k ⃗ \vec{z_k} zk 是一个向量,因此这个系数是矩阵形式,将其记作 G \mathrm{G} G,将每轮次的卡尔曼增益记作 G k \mathrm{G_k} Gk,很明显这是一个对角矩阵。将这个逻辑写做数学表达式:
z k 估 ⃗ = z k 模 ⃗ + G k ∗ ( z k 测 ⃗ − z k 模 ⃗ ) \begin{aligned}\vec{z_{k估}}&=\vec{z_{k模}}+\mathrm{G_k}*(\vec{z_{k测}}-\vec{z_{k模}})\end{aligned} zk =zk +Gk(zk zk )
观察上式,等式右边的 z k 模 ⃗ \vec{z_{k模}} zk 在上节的状态空间方程里推导得到了, z k 测 ⃗ \vec{z_{k测}} zk 也可以根据上节的测量方程 y k 测 ⃗ = H ∗ z k 测 ⃗ \vec{y_{k测}}=\mathrm{H}*\vec{z_{k测}} yk =Hzk 得到,只有卡尔曼增益 G k \mathrm{G_k} Gk还不知道,我们要找到最佳的 G k \mathrm{G_k} Gk使得 z k 估 ⃗ \vec{z_{k估}} zk 最接近 z k 真 ⃗ \vec{z_{k真}} zk 。接下来对 G k \mathrm{G_k} Gk进行推导,推导完毕后,卡尔曼滤波就整个都可知了。

最优估计

卡尔曼滤波思想中要的是最优估计 z k 估 ⃗ \vec{z_{k估}} zk ,即估计值与真值的差值越接近零越好,当然真值的数值是无法知道的,但是我们上节建立了真值的数学模型。估计值与真值的差距记作 e k 估 ⃗ \vec{e_{k估}} ek ,可以用如下公式来表达:
e k 估 ⃗ = z k 真 ⃗ − z k 估 ⃗ \vec{e_{k估}}=\vec{z_{k真}}-\vec{z_{k估}} ek =zk zk
e k 估 ⃗ \vec{e_{k估}} ek 是一个向量,也就是说让这个向量的长度最小,即平方和最小。然而,真值里的噪声只是假定为正态分布,每轮次的具体数值是不可知的,因此直接用平方和最小的方法不可行。
还有另一种方法有着与平方和一样的表达式,那就是协方差矩阵的迹,协方差矩阵解决了噪声的数值问题,因为正态分布的协方差矩阵是可知的。于是,记 e k 估 ⃗ \vec{e_{k估}} ek 的协方差为 P k 估 \mathrm{P_{k估}} Pk,求 G k \mathrm{G_k} Gk使得 e k 估 ⃗ \vec{e_{k估}} ek 接近零的问题转为求 G k \mathrm{G_k} Gk使得 t r ( P k 估 ) tr(\mathrm{P_{k估}}) tr(Pk)最小的问题。
t r ( P k 估 ) tr(\mathrm{P_{k估}}) tr(Pk)表达式与平方和一样,是一个开口向上的二次方程,因此极值点必定是最小值点, d t r ( P k 估 ) d G k = 0 \frac{d tr(\mathrm{P_{k估}})}{d\mathrm{G_k}}=0 dGkdtr(Pk)=0时的 ( P k 估 , G k ) (\mathrm{P_{k估}},\mathrm{G_k}) (Pk,Gk)就是最优估计 z k 估 ⃗ \vec{z_{k估}} zk 要用到的值。

卡尔曼增益

P k 估 \mathrm{P_{k估}} Pk还不知道,先把它搞出来再算卡尔曼增益 G k \mathrm{G_k} Gk
根据协方差定义的公式,
P k 估 = E [ e k 估 ⃗ ∗ e k 估 ⃗ T ] = E [ ( z k 真 ⃗ − z k 估 ⃗ ) ∗ ( z k 真 ⃗ − z k 估 ⃗ ) T ] \begin{aligned}\mathrm{P_{k估}}&=E[\vec{e_{k估}}*\vec{e_{k估}}^T]\\ &=E[(\vec{z_{k真}}-\vec{z_{k估}})*(\vec{z_{k真}}-\vec{z_{k估}})^T]\end{aligned} Pk=E[ek ek T]=E[(zk zk )(zk zk )T]

展开一下 ( z k 真 ⃗ − z k 估 ⃗ ) (\vec{z_{k真}}-\vec{z_{k估}}) (zk zk ),注意一下对测量值的处理:
z k 真 ⃗ − z k 估 ⃗ = z k 真 ⃗ − ( z k 模 ⃗ + G k ∗ ( H − 1 ∗ y k 测 − z k 模 ⃗ ) ) = z k 真 ⃗ − ( z k 模 ⃗ + G k ∗ ( H − 1 ∗ ( H ∗ z k 真 ⃗ + v k ⃗ ) − z k 模 ⃗ ) ) = z k 真 ⃗ − z k 模 ⃗ − G k ∗ z k 真 ⃗ + G k ∗ z k 模 ⃗ − G k ∗ H − 1 ∗ v k ⃗ \begin{aligned}\vec{z_{k真}}-\vec{z_{k估}}&=\vec{z_{k真}}-(\vec{z_{k模}}+\mathrm{G_k}*(\mathrm{H}^{-1}*y_{k测}-\vec{z_{k模}}))\\&=\vec{z_{k真}}-(\vec{z_{k模}}+\mathrm{G_k}*(\mathrm{H}^{-1}*(\mathrm{H}*\vec{z_{k真}}+\vec{v_k})-\vec{z_{k模}}))\\&=\vec{z_{k真}}-\vec{z_{k模}}-\mathrm{G_k}*\vec{z_{k真}}+\mathrm{G_k}*\vec{z_{k模}}-\mathrm{G_k}*\mathrm{H}^{-1}*\vec{v_k}\end{aligned} zk zk =zk (zk +Gk(H1ykzk ))=zk (zk +Gk(H1(Hzk +vk )zk ))=zk zk Gkzk +Gkzk GkH1vk 发现可以合并化简,因为 z k 真 ⃗ − z k 模 ⃗ = e k 模 ⃗ \vec{z_{k真}}-\vec{z_{k模}}=\vec{e_{k模}} zk zk =ek ,所以继续化简为:
z k 真 ⃗ − z k 估 ⃗ = ( I − G k ) e k 模 ⃗ − G k ∗ H − 1 ∗ v k ⃗ \vec{z_{k真}}-\vec{z_{k估}}=(\mathrm{I}-\mathrm{G_k})\vec{e_{k模}}-\mathrm{G_k}*\mathrm{H}^{-1}*\vec{v_k} zk zk =(IGk)ek GkH1vk

P k 估 \mathrm{P_{k估}} Pk可以继续展开了:
P k 估 = E [ ( ( I − G k ) e k 模 ⃗ − G k ∗ H − 1 ∗ v k ⃗ ) ∗ ( ( I − G k ) e k 模 ⃗ − G k ∗ H − 1 ∗ v k ⃗ ) T ] \begin{aligned}\mathrm{P_{k估}}&=E[((\mathrm{I}-\mathrm{G_k})\vec{e_{k模}}-\mathrm{G_k}*\mathrm{H}^{-1}*\vec{v_k})*((\mathrm{I}-\mathrm{G_k})\vec{e_{k模}}-\mathrm{G_k}*\mathrm{H}^{-1}*\vec{v_k})^T]\end{aligned} Pk=E[((IGk)ek GkH1vk )((IGk)ek GkH1vk )T]
将转置操作分配到括号里:

P k 估 = E [ ( ( I − G k ) e k 模 ⃗ − G k H − 1 v k ⃗ ) ( e k 模 ⃗ T ( I − G k ) T − v k ⃗ T ( G k H − 1 ) T ) ] \begin{aligned}\mathrm{P_{k估}}&=E[((\mathrm{I}-\mathrm{G_k})\vec{e_{k模}}-\mathrm{G_k}\mathrm{H}^{-1}\vec{v_k})(\vec{e_{k模}}^T(\mathrm{I}-\mathrm{G_k})^T-\vec{v_k}^T(\mathrm{G_k}\mathrm{H}^{-1})^T)]\end{aligned} Pk=E[((IGk)ek GkH1vk )(ek T(IGk)Tvk T(GkH1)T)]
接下来将括号乘开。这里有两点有助于化简:噪声 v k ⃗ \vec{v_k} vk 的期望是零,又与 e k 模 ⃗ \vec{e_{k模}} ek 相互独立,所以 v k ⃗ \vec{v_k} vk e k 模 ⃗ \vec{e_{k模}} ek 搭边的项都是零; I , G k , H \mathrm{I},\mathrm{G_k},\mathrm{H} I,Gk,H是对角矩阵,转置等于本身,而且左乘右乘没区别。乘开后可以得到以下结果:
P k 估 = E [ ( I − G k ) 2 e k 模 ⃗ e k 模 ⃗ T + G k 2 ( H − 1 ) 2 v k ⃗ v k ⃗ T ] \begin{aligned}\mathrm{P_{k估}}&=E[(\mathrm{I}-\mathrm{G_k})^2\vec{e_{k模}}\vec{e_{k模}}^T+\mathrm{G_k}^2(\mathrm{H}^{-1})^2\vec{v_k}\vec{v_k}^T]\end{aligned} Pk=E[(IGk)2ek ek T+Gk2(H1)2vk vk T]
再把期望分配到括号里:
P k 估 = ( I − G k ) 2 E [ e k 模 ⃗ e k 模 ⃗ T ] + G k 2 ( H − 1 ) 2 E [ v k ⃗ v k ⃗ T ] \begin{aligned}\mathrm{P_{k估}}&=(\mathrm{I}-\mathrm{G_k})^2E[\vec{e_{k模}}\vec{e_{k模}}^T]+\mathrm{G_k}^2(\mathrm{H}^{-1})^2E[\vec{v_k}\vec{v_k}^T]\end{aligned} Pk=(IGk)2E[ek ek T]+Gk2(H1)2E[vk vk T]
E [ e k 模 ⃗ e k 模 ⃗ T ] E[\vec{e_{k模}}\vec{e_{k模}}^T] E[ek ek T]是一个协方差矩阵,这里记作 P k 模 \mathrm{P_{k模}} Pk,这个协方差矩阵的值现在还未知。 E [ v k ⃗ v k ⃗ T ] E[\vec{v_k}\vec{v_k}^T] E[vk vk T]是一个测量噪声的协方差矩阵,是人为假定的常数,是已知的,记做 R \mathrm{R} R。再化简为:
P k 估 = ( I − G k ) 2 P k 模 + G k 2 ( H − 1 ) 2 R \begin{aligned}\mathrm{P_{k估}}&=(\mathrm{I}-\mathrm{G_k})^2\mathrm{P_{k模}}+\mathrm{G_k}^2(\mathrm{H}^{-1})^2\mathrm{R}\end{aligned} Pk=(IGk)2Pk+Gk2(H1)2R
接下来就可以求 t r ( P k 估 ) tr(\mathrm{P_{k估}}) tr(Pk)关于 G k \mathrm{G_k} Gk的导数,从而算出极值点了。这里用到了链式求导法则和矩阵求导: d t r ( A B ) d A = B T \frac{dtr(\mathrm{A}\mathrm{B})}{d\mathrm{A}}=\mathrm{B}^T dAdtr(AB)=BT。注意两点:协方差矩阵是斜对角对称矩阵,其转置等于本身;对角阵左乘和右乘是一样的。计算 t r ( P k 估 ) tr(\mathrm{P_{k估}}) tr(Pk)的极值点:
d t r ( P k 估 ) d G k = − 2 ( I − G k ) P k 模 + 2 G k ( H − 1 ) 2 R = 0 \frac{dtr(\mathrm{P_{k估}})}{d\mathrm{G_k}}=-2(\mathrm{I}-\mathrm{G_k})\mathrm{P_{k模}}+2\mathrm{G_k}(\mathrm{H}^{-1})^2\mathrm{R}=0 dGkdtr(Pk)=2(IGk)Pk+2Gk(H1)2R=0
得出卡尔曼增益 G k \mathrm{G_k} Gk等于:
G k = P k 模 P k 模 + ( H − 1 ) 2 R \mathrm{G_k}=\frac{\mathrm{P_{k模}}}{\mathrm{P_{k模}}+(\mathrm{H}^{-1})^2\mathrm{R}} Gk=Pk+(H1)2RPk


注意 P k 模 \mathrm{P_{k模}} Pk现在还没推导出来,在下节进行推导。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐