深入理解卡尔曼滤波器(3):多维卡尔曼滤波器

深入理解卡尔曼滤波器(3):多维卡尔曼滤波器

在这里插入图片描述

声明: 本文图文均来源于https://www.kalmanfilter.net/,如有侵权请联系删除。

本文由微信公众号【DeepDriving】整理,由于全文内容较多所以分成3部分发出来。关注公众号【DeepDriving】,后台回复关键字【卡尔曼滤波器】可获取全文PDF。

多维卡尔曼滤波器

前面介绍了一维卡尔曼滤波器,相信大家已经对卡尔曼滤波器有了一定的认识,但是在实际应用中,我们通常需要处理有多维状态数据的系统。比如,对于一个三维空间中的飞机,我们需要一个9维向量来描述其位置、速度和加速度:

[ x y z x ˙ y ˙ z ˙ x ¨ y ¨ z ¨ ] T \begin{bmatrix} x & y & z & \dot{x} & \dot{y} & \dot{z} & \ddot{x} & \ddot{y} & \ddot{z} \end{bmatrix}^{T} [xyzx˙y˙z˙x¨y¨z¨]T

在这里插入图片描述

假设我们采用恒加速度(constant acceleration)动态模型,那么在 n n n时刻飞机的状态可以写为

{ x n = x n − 1 + x ˙ n − 1 Δ t + 1 2 x ¨ n − 1 Δ t 2 y n = y n − 1 + y ˙ n − 1 Δ t + 1 2 y ¨ n − 1 Δ t 2 z n = z n − 1 + z ˙ n − 1 Δ t + 1 2 z ¨ n − 1 Δ t 2 x ˙ n = x ˙ n − 1 + x ¨ n − 1 Δ t y ˙ n = y ˙ n − 1 + y ¨ n − 1 Δ t z ˙ n = z ˙ n − 1 + z ¨ n − 1 Δ t x ¨ n = x ¨ n − 1 y ¨ n = y ¨ n − 1 z ¨ n = z ¨ n − 1 \begin{cases} x_{n} = x_{n-1} + \dot{x}_{n-1} \Delta t+ \frac{1}{2}\ddot{x}_{n-1} \Delta t^{2}\\ y_{n} = y_{n-1} + \dot{y}_{n-1} \Delta t+ \frac{1}{2}\ddot{y}_{n-1} \Delta t^{2}\\ z_{n} = z_{n-1} + \dot{z}_{n-1} \Delta t+ \frac{1}{2}\ddot{z}_{n-1} \Delta t^{2}\\ \dot{x}_{n} = \dot{x}_{n-1} + \ddot{x}_{n-1} \Delta t\\ \dot{y}_{n} = \dot{y}_{n-1} + \ddot{y}_{n-1} \Delta t\\ \dot{z}_{n} = \dot{z}_{n-1} + \ddot{z}_{n-1} \Delta t\\ \ddot{x}_{n} = \ddot{x}_{n-1}\\ \ddot{y}_{n} = \ddot{y}_{n-1}\\ \ddot{z}_{n} = \ddot{z}_{n-1}\\ \end{cases} xn=xn1+x˙n1Δt+21x¨n1Δt2yn=yn1+y˙n1Δt+21y¨n1Δt2zn=zn1+z˙n1Δt+21z¨n1Δt2x˙n=x˙n1+x¨n1Δty˙n=y˙n1+y¨n1Δtz˙n=z˙n1+z¨n1Δtx¨n=x¨n1y¨n=y¨n1z¨n=z¨n1

在实际应用中,我们通常会使用矩阵的方式来描述多维数据处理的过程。接下来,我们将用矩阵的方式来介绍多维卡尔曼滤波器的几个方程。

状态外推方程

状态外推方程的作用是在当前时刻 n n n基于现有的知识去预测 n + 1 n+1 n+1时刻系统的状态,所以也叫状态预测方程或者状态转移方程,其矩阵形式的公式如下:

x ^ n + 1 , n = F x ^ n , n + G u n + w n \boldsymbol{\hat{x}_{n+1,n}=F\hat{x}_{n,n}+Gu_{n}+w_{n}} x^n+1,n=Fx^n,n+Gun+wn

其中, x ^ n + 1 , n \boldsymbol{\hat{x}_{n+1,n}} x^n+1,n是预测的 n + 1 n+1 n+1时刻的系统状态向量; x ^ n , n \boldsymbol{\hat{x}_{n,n}} x^n,n是估计的 n n n时刻的系统状态向量; u n \boldsymbol{u_{n}} un是控制变量(输入变量),对系统来说是一个可测量的(确定性的)输入; w n \boldsymbol{w_{n}} wn是过程噪声,是会影响系统状态的不可测量的输入量; F \boldsymbol{F} F是状态转移矩阵; G \boldsymbol{G} G是控制矩阵,也叫输入转移矩阵,用于将控制变量映射为状态变量。

以前面的飞机为例,用状态向量 x n ^ \hat{x_{n}} xn^描述其在三维空间中的位置、速度和加速度

x ^ n = [ x ^ n y ^ n z ^ n x ˙ ^ n y ˙ ^ n z ˙ ^ n x ¨ ^ n y ¨ ^ n z ¨ ^ n ] T \boldsymbol{\hat{x}_{n}}= \begin{bmatrix} \hat{x}_{n} & \hat{y}_{n} & \hat{z}_{n} & \hat{\dot{x}}_{n} & \hat{\dot{y}}_{n} & \hat{\dot{z}}_{n} & \hat{\ddot{x}}_{n} & \hat{\ddot{y}}_{n} & \hat{\ddot{z}}_{n} \end{bmatrix}^{T} x^n=[x^ny^nz^nx˙^ny˙^nz˙^nx¨^ny¨^nz¨^n]T

假如采用恒加速模型,如果不考虑有控制变量输入,那么状态外推方程为

x ^ n + 1 , n = F x ^ n , n \boldsymbol{\hat{x}_{n+1,n}=F\hat{x}_{n,n}} x^n+1,n=Fx^n,n

状态转移方程为

F = [ 1 0 0 Δ t 0 0 0.5 Δ t 2 0 0 0 1 0 0 Δ t 0 0 0.5 Δ t 2 0 0 0 1 0 0 Δ t 0 0 0.5 Δ t 2 0 0 0 1 0 0 Δ t 0 0 0 0 0 0 1 0 0 Δ t 0 0 0 0 0 0 1 0 0 Δ t 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 ] \boldsymbol{F}= \left[ \begin{matrix} 1 & 0 & 0 & \Delta t & 0 & 0 & 0.5\Delta t^{2} & 0 & 0 \\ 0 & 1 & 0 & 0 & \Delta t & 0 & 0 & 0.5\Delta t^{2} & 0 \\ 0 & 0 & 1 & 0 & 0 & \Delta t & 0 & 0 & 0.5\Delta t^{2} \\ 0 & 0 & 0 & 1 & 0 & 0 & \Delta t & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & \Delta t & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & \Delta t \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ \end{matrix} \right] F= 100000000010000000001000000Δt001000000Δt001000000Δt0010000.5Δt200Δt0010000.5Δt200Δt0010000.5Δt200Δt001

那么

[ x ^ n + 1 , n y ^ n + 1 , n z ^ n + 1 , n x ˙ ^ n + 1 , n y ˙ ^ n + 1 , n z ˙ ^ n + 1 , n x ¨ ^ n + 1 , n y ¨ ^ n + 1 , n z ¨ ^ n + 1 , n ] = [ 1 0 0 Δ t 0 0 0.5 Δ t 2 0 0 0 1 0 0 Δ t 0 0 0.5 Δ t 2 0 0 0 1 0 0 Δ t 0 0 0.5 Δ t 2 0 0 0 1 0 0 Δ t 0 0 0 0 0 0 1 0 0 Δ t 0 0 0 0 0 0 1 0 0 Δ t 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 ] [ x ^ n , n y ^ n , n z ^ n , n x ˙ ^ n , n y ˙ ^ n , n z ˙ ^ n , n x ¨ ^ n , n y ¨ ^ n , n z ¨ ^ n , n ] \left[ \begin{matrix} \hat{x}_{n+1,n}\\ \hat{y}_{n+1,n}\\ \hat{z}_{n+1,n}\\ \hat{\dot{x}}_{n+1,n}\\ \hat{\dot{y}}_{n+1,n}\\ \hat{\dot{z}}_{n+1,n}\\ \hat{\ddot{x}}_{n+1,n}\\ \hat{\ddot{y}}_{n+1,n}\\ \hat{\ddot{z}}_{n+1,n}\\ \end{matrix} \right] = \left[ \begin{matrix} 1 & 0 & 0 & \Delta t & 0 & 0 & 0.5\Delta t^{2} & 0 & 0 \\ 0 & 1 & 0 & 0 & \Delta t & 0 & 0 & 0.5\Delta t^{2} & 0 \\ 0 & 0 & 1 & 0 & 0 & \Delta t & 0 & 0 & 0.5\Delta t^{2} \\ 0 & 0 & 0 & 1 & 0 & 0 & \Delta t & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & \Delta t & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & \Delta t \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ \end{matrix} \right] \left[ \begin{matrix} \hat{x}_{n,n}\\ \hat{y}_{n,n}\\ \hat{z}_{n,n}\\ \hat{\dot{x}}_{n,n}\\ \hat{\dot{y}}_{n,n}\\ \hat{\dot{z}}_{n,n}\\ \hat{\ddot{x}}_{n,n}\\ \hat{\ddot{y}}_{n,n}\\ \hat{\ddot{z}}_{n,n}\\ \end{matrix} \right] x^n+1,ny^n+1,nz^n+1,nx˙^n+1,ny˙^n+1,nz˙^n+1,nx¨^n+1,ny¨^n+1,nz¨^n+1,n = 100000000010000000001000000Δt001000000Δt001000000Δt0010000.5Δt200Δt0010000.5Δt200Δt0010000.5Δt200Δt001 x^n,ny^n,nz^n,nx˙^n,ny˙^n,nz˙^n,nx¨^n,ny¨^n,nz¨^n,n

算得结果

{ x ^ n + 1 , n = x ^ n , n + x ˙ ^ n , n Δ t + 1 2 x ¨ ^ n , n Δ t 2 y ^ n + 1 , n = y ^ n , n + y ˙ ^ n , n Δ t + 1 2 y ¨ ^ n , n Δ t 2 z ^ n + 1 , n = z ^ n , n + z ˙ ^ n , n Δ t + 1 2 z ¨ ^ n , n Δ t 2 x ˙ ^ n + 1 , n = x ˙ ^ n , n + x ¨ ^ n , n Δ t y ˙ ^ n + 1 , n = y ˙ ^ n , n + y ¨ ^ n , n Δ t z ˙ ^ n + 1 , n = z ˙ ^ n , n + z ¨ ^ n , n Δ t x ¨ ^ n + 1 , n = x ¨ ^ n , n y ¨ ^ n + 1 , n = y ¨ ^ n , n z ¨ ^ n + 1 , n = z ¨ ^ n , n \begin{cases} \hat{x}_{n+1,n} = \hat{x}_{n,n} + \hat{\dot{x}}_{n,n} \Delta t+ \frac{1}{2}\hat{\ddot{x}}_{n,n} \Delta t^{2} \\ \hat{y}_{n+1,n} = \hat{y}_{n,n} + \hat{\dot{y}}_{n,n} \Delta t+ \frac{1}{2}\hat{\ddot{y}}_{n,n} \Delta t^{2} \\ \hat{z}_{n+1,n} = \hat{z}_{n,n} + \hat{\dot{z}}_{n,n} \Delta t+ \frac{1}{2}\hat{\ddot{z}}_{n,n} \Delta t^{2} \\ \hat{\dot{x}}_{n+1,n} = \hat{\dot{x}}_{n,n} + \hat{\ddot{x}}_{n,n} \Delta t \\ \hat{\dot{y}}_{n+1,n} = \hat{\dot{y}}_{n,n} + \hat{\ddot{y}}_{n,n} \Delta t \\ \hat{\dot{z}}_{n+1,n} = \hat{\dot{z}}_{n,n} + \hat{\ddot{z}}_{n,n} \Delta t \\ \hat{\ddot{x}}_{n+1,n} = \hat{\ddot{x}}_{n,n} \\ \hat{\ddot{y}}_{n+1,n} = \hat{\ddot{y}}_{n,n} \\ \hat{\ddot{z}}_{n+1,n} = \hat{\ddot{z}}_{n,n} \\ \end{cases} x^n+1,n=x^n,n+x˙^n,nΔt+21x¨^n,nΔt2y^n+1,n=y^n,n+y˙^n,nΔt+21y¨^n,nΔt2z^n+1,n=z^n,n+z˙^n,nΔt+21z¨^n,nΔt2x˙^n+1,n=x˙^n,n+x¨^n,nΔty˙^n+1,n=y˙^n,n+y¨^n,nΔtz˙^n+1,n=z˙^n,n+z¨^n,nΔtx¨^n+1,n=x¨^n,ny¨^n+1,n=y¨^n,nz¨^n+1,n=z¨^n,n

假如我们有加速度传感器可以提供飞机的加速度信息作为系统的输入,所提供的加速度测量值 u n \boldsymbol{u_{n}} un

u n = [ x ¨ n y ¨ n z ¨ n ] \boldsymbol{u_{n}}= \left[ \begin{matrix} \ddot{x}_{n}\\ \ddot{y}_{n}\\ \ddot{z}_{n}\\ \end{matrix} \right] un= x¨ny¨nz¨n

那么状态外推方程为

x ^ n + 1 , n = F x ^ n , n + G u n , n \boldsymbol{\hat{x}_{n+1,n}=F\hat{x}_{n,n}+Gu_{n,n}} x^n+1,n=Fx^n,n+Gun,n

转移矩阵 F \boldsymbol{F} F和控制矩阵 G \boldsymbol{G} G分别如下:

F = [ 1 0 0 Δ t 0 0 0 1 0 0 Δ t 0 0 0 1 0 0 Δ t 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 ] \boldsymbol{F}= \left[ \begin{matrix} 1 & 0 & 0 & \Delta t & 0 & 0\\ 0 & 1 & 0 & 0 & \Delta t & 0\\ 0 & 0 & 1 & 0 & 0 & \Delta t\\ 0 & 0 & 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 0 & 0 & 1\\ \end{matrix} \right] F= 100000010000001000Δt001000Δt001000Δt001

G = [ 0.5 Δ t 2 0 0 0 0.5 Δ t 2 0 0 0 0.5 Δ t 2 Δ t 0 0 0 Δ t 0 0 0 Δ t ] \boldsymbol{G}= \left[ \begin{matrix} 0.5\Delta t^{2} & 0 & 0 \\ 0 & 0.5\Delta t^{2} & 0 \\ 0 & 0 & 0.5\Delta t^{2} \\ \Delta t & 0 & 0 \\ 0 & \Delta t & 0 \\ 0 & 0 & \Delta t \\ \end{matrix} \right] G= 0.5Δt200Δt0000.5Δt200Δt0000.5Δt200Δt

那么

[ x ^ n + 1 , n y ^ n + 1 , n z ^ n + 1 , n x ˙ ^ n + 1 , n y ˙ ^ n + 1 , n z ˙ ^ n + 1 , n ] = [ 1 0 0 Δ t 0 0 0 1 0 0 Δ t 0 0 0 1 0 0 Δ t 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 ] [ x ^ n , n y ^ n , n z ^ n , n x ˙ ^ n , n y ˙ ^ n , n z ˙ ^ n , n ] + [ 0.5 Δ t 2 0 0 0 0.5 Δ t 2 0 0 0 0.5 Δ t 2 Δ t 0 0 0 Δ t 0 0 0 Δ t ] [ x ¨ n y ¨ n z ¨ n ] \left[ \begin{matrix} \hat{x}_{n+1,n}\\ \hat{y}_{n+1,n}\\ \hat{z}_{n+1,n}\\ \hat{\dot{x}}_{n+1,n}\\ \hat{\dot{y}}_{n+1,n}\\ \hat{\dot{z}}_{n+1,n}\\ \end{matrix} \right] = \left[ \begin{matrix} 1 & 0 & 0 & \Delta t & 0 & 0\\ 0 & 1 & 0 & 0 & \Delta t & 0\\ 0 & 0 & 1 & 0 & 0 & \Delta t\\ 0 & 0 & 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 0 & 0 & 1\\ \end{matrix} \right] \left[ \begin{matrix} \hat{x}_{n,n}\\ \hat{y}_{n,n}\\ \hat{z}_{n,n}\\ \hat{\dot{x}}_{n,n}\\ \hat{\dot{y}}_{n,n}\\ \hat{\dot{z}}_{n,n}\\ \end{matrix} \right] + \left[ \begin{matrix} 0.5\Delta t^{2} & 0 & 0 \\ 0 & 0.5\Delta t^{2} & 0 \\ 0 & 0 & 0.5\Delta t^{2} \\ \Delta t & 0 & 0 \\ 0 & \Delta t & 0 \\ 0 & 0 & \Delta t \\ \end{matrix} \right] \left[ \begin{matrix} \ddot{x}_{n}\\ \ddot{y}_{n}\\ \ddot{z}_{n}\\ \end{matrix} \right] x^n+1,ny^n+1,nz^n+1,nx˙^n+1,ny˙^n+1,nz˙^n+1,n = 100000010000001000Δt001000Δt001000Δt001 x^n,ny^n,nz^n,nx˙^n,ny˙^n,nz˙^n,n + 0.5Δt200Δt0000.5Δt200Δt0000.5Δt200Δt x¨ny¨nz¨n

协方差外推方程

协方差外推方程如下:

P n + 1 , n = F P n , n F T + Q \boldsymbol{P_{n+1,n} = FP_{n,n}F^{T} + Q} Pn+1,n=FPn,nFT+Q

其中, P n , n \boldsymbol{P_{n,n}} Pn,n描述了当前估计值的不确定度,是当前系统状态的协方差矩阵; P n + 1 , n \boldsymbol{P_{n+1,n}} Pn+1,n描述了当前预测值的不确定度,是预测的系统状态的协方差矩阵; F \boldsymbol{F} F是状态转移矩阵; Q \boldsymbol{Q} Q是过程噪声协方差矩阵。

现在我们从头来推导一下这个方程。

假设过程噪声为零( Q = 0 \boldsymbol{Q}=0 Q=0),那么

P n + 1 , n = F P n , n F T \boldsymbol{P_{n+1,n} = FP_{n,n}F^{T}} Pn+1,n=FPn,nFT

由前面的背景知识我们知道系统状态向量 x \boldsymbol{x} x的协方差矩阵为

C O V ( x ) = E ( ( x − μ x ) ( x − μ x ) T ) COV(\boldsymbol{x}) = E \left( \left( \boldsymbol{x - \mu_{x}} \right) \left( \boldsymbol{x - \mu_{x}} \right)^{T} \right) COV(x)=E((xμx)(xμx)T)

因此

P n , n = E ( ( x ^ n , n − μ x n , n ) ( x ^ n , n − μ x n , n ) T ) \boldsymbol{P_{n,n}} = E \left( \left( \boldsymbol{\hat{x}_{n,n} - \mu_{x_{n,n}}} \right) \left( \boldsymbol{\hat{x}_{n,n} - \mu_{x_{n,n}}} \right)^{T} \right) Pn,n=E((x^n,nμxn,n)(x^n,nμxn,n)T)

根据状态外推方程

x ^ n + 1 , n = F x ^ n , n + G u ^ n , n \boldsymbol{\hat{x}_{n+1,n}=F\hat{x}_{n,n}+G\hat{u}_{n,n}} x^n+1,n=Fx^n,n+Gu^n,n

可得

P n + 1 , n = E ( ( x ^ n + 1 , n − μ x n + 1 , n ) ( x ^ n + 1 , n − μ x n + 1 , n ) T ) = E ( ( F x ^ n , n + G u ^ n , n − F μ x n , n − G u ^ n , n ) ( F x ^ n , n + G u ^ n , n − F μ x n , n − G u ^ n , n ) T ) = E ( F ( x ^ n , n − μ x n , n ) ( F ( x ^ n , n − μ x n , n ) ) T ) = E ( F ( x ^ n , n − μ x n , n ) ( x ^ n , n − μ x n , n ) T F T ) = F E ( ( x ^ n , n − μ x n , n ) ( x ^ n , n − μ x n , n ) T ) F T = F P n , n F T \boldsymbol{P_{n+1,n}} = E \left( \left( \boldsymbol{\hat{x}_{n+1,n} - \mu_{x_{n+1,n}}} \right) \left( \boldsymbol{\hat{x}_{n+1,n} - \mu_{x_{n+1,n}}} \right)^{T} \right) \\ = E \left( \left( \boldsymbol{F\hat{x}_{n,n} + G\hat{u}_{n,n} - F\mu_{x_{n,n}} - G\hat{u}_{n,n}} \right) \left( \boldsymbol{F\hat{x}_{n,n} + G\hat{u}_{n,n} - F\mu_{x_{n,n}} - G\hat{u}_{n,n}} \right)^{T} \right) \\ = E \left( \boldsymbol{F} \left( \boldsymbol{\hat{x}_{n,n} - \mu_{x_{n,n}}} \right) \left( \boldsymbol{F} \left( \boldsymbol{\hat{x}_{n,n} - \mu_{x_{n,n}}} \right) \right)^{T} \right) \\ = E \left(\boldsymbol{F} \left( \boldsymbol{\hat{x}_{n,n} - \mu_{x_{n,n}}} \right) \left( \boldsymbol{\hat{x}_{n,n} - \mu_{x_{n,n}}} \right)^{T} \boldsymbol{F^{T}} \right) \\ = \boldsymbol{F} E \left( \left( \boldsymbol{\hat{x}_{n,n} - \mu_{x_{n,n}}} \right) \left( \boldsymbol{\hat{x}_{n,n} - \mu_{x_{n,n}}} \right)^{T} \right) \boldsymbol{F^{T}} \\ = \boldsymbol{F P_{n,n} F^{T}} Pn+1,n=E((x^n+1,nμxn+1,n)(x^n+1,nμxn+1,n)T)=E((Fx^n,n+Gu^n,nFμxn,nGu^n,n)(Fx^n,n+Gu^n,nFμxn,nGu^n,n)T)=E(F(x^n,nμxn,n)(F(x^n,nμxn,n))T)=E(F(x^n,nμxn,n)(x^n,nμxn,n)TFT)=FE((x^n,nμxn,n)(x^n,nμxn,n)T)FT=FPn,nFT

该如何构建过程噪声协方差矩阵 Q \boldsymbol{Q} Q呢?

假设系统的状态为位置、速度和加速度,分别用 x x x v v v a a a来表示。对于恒速模型来说,过程噪声的协方差矩阵为

Q = [ V ( x ) C O V ( x , v ) C O V ( v , x ) V ( v ) ] \boldsymbol{Q} = \left[ \begin{matrix} V(x) & COV(x,v) \\ COV(v,x) & V(v) \\ \end{matrix} \right] Q=[V(x)COV(v,x)COV(x,v)V(v)]

我们将用随机加速度方差 σ a 2 \sigma^{2}_{a} σa2来表示位置、速度的方差和协方差。由前面的背景知识可以知道

V ( v ) = σ v 2 = E ( v 2 ) − μ v 2 = E ( ( a Δ t ) 2 ) − ( μ a Δ t ) 2 = Δ t 2 ( E ( a 2 ) − μ a 2 ) = Δ t 2 σ a 2 V(v) = \sigma^{2}_{v} = E\left(v^{2}\right) - \mu_{v}^{2} = E \left( \left( a\Delta t\right)^{2}\right) - \left(\mu_{a}\Delta t\right)^{2} = \Delta t^{2}\left( E\left(a^{2}\right) - \mu_{a}^{2} \right) = \Delta t^{2}\sigma^{2}_{a} V(v)=σv2=E(v2)μv2=E((aΔt)2)(μaΔt)2=Δt2(E(a2)μa2)=Δt2σa2

V ( x ) = σ x 2 = E ( x 2 ) − μ x 2 = E ( ( 1 2 a Δ t 2 ) 2 ) − ( 1 2 μ a Δ t 2 ) 2 = Δ t 4 4 ( E ( a 2 ) − μ a 2 ) = Δ t 4 4 σ a 2 V(x) = \sigma^{2}_{x} = E\left(x^{2}\right) - \mu_{x}^{2} = E \left( \left( \frac{1}{2}a\Delta t^{2}\right)^{2}\right) - \left(\frac{1}{2}\mu_{a}\Delta t^{2}\right)^{2} = \frac{\Delta t^{4}}{4}\left( E\left(a^{2}\right) - \mu_{a}^{2} \right) = \frac{\Delta t^{4}}{4}\sigma^{2}_{a} V(x)=σx2=E(x2)μx2=E((21aΔt2)2)(21μaΔt2)2=4Δt4(E(a2)μa2)=4Δt4σa2

C O V ( x , v ) = C O V ( v , x ) = E ( x v ) − μ x μ v = E ( 1 2 a Δ t 2 a Δ t ) − ( 1 2 μ a Δ t 2 μ a Δ t ) = Δ t 3 2 ( E ( a 2 ) − μ a 2 ) = Δ t 3 2 σ a 2 COV(x,v) = COV(v,x) = E\left(xv\right) - \mu_{x}\mu_{v} = E\left( \frac{1}{2}a\Delta t^{2}a\Delta t\right) - \left( \frac{1}{2}\mu_{a}\Delta t^{2}\mu_{a}\Delta t\right) = \frac{\Delta t^{3}}{2}\left( E\left(a^{2}\right) - \mu_{a}^{2} \right) = \frac{\Delta t^{3}}{2}\sigma^{2}_{a} COV(x,v)=COV(v,x)=E(xv)μxμv=E(21aΔt2aΔt)(21μaΔt2μaΔt)=2Δt3(E(a2)μa2)=2Δt3σa2

那么

Q = σ a 2 [ Δ t 4 4 Δ t 3 2 Δ t 3 2 Δ t 2 ] \boldsymbol{Q} = \sigma^{2}_{a} \left[ \begin{matrix} \frac{\Delta t^{4}}{4} & \frac{\Delta t^{3}}{2} \\ \frac{\Delta t^{3}}{2} & \Delta t^{2} \\ \end{matrix} \right] Q=σa2[4Δt42Δt32Δt3Δt2]

这样求矩阵 Q \boldsymbol{Q} Q比较麻烦,我们可以通过下面的方式快速求出来。

如果动态模型不包含控制输入,那么我们可以直接通过状态转移矩阵将加速度的随机方差 σ a 2 \sigma^{2}_{a} σa2映射到动态模型中。定义矩阵 Q a \boldsymbol{Q}_{a} Qa为:

Q a = [ 0 0 0 0 0 0 0 0 1 ] σ a 2 \boldsymbol{Q}_{a} = \left[ \begin{matrix} 0 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & 1 \\ \end{matrix} \right] \sigma^{2}_{a} Qa= 000000001 σa2

那么过程噪声协方差矩阵 Q \boldsymbol{Q} Q可由下面的公式得到

Q = F Q a F T \boldsymbol{Q} = \boldsymbol{F}\boldsymbol{Q}_{a}\boldsymbol{F^{T}} Q=FQaFT

由运动模型可知状态转移矩阵为

F = [ 1 Δ t Δ t 2 2 0 1 Δ t 0 0 1 ] \boldsymbol{F} = \left[ \begin{matrix} 1 & \Delta t & \frac{\Delta t^{2}}{2} \\ 0 & 1 & \Delta t \\ 0 & 0 & 1 \\ \end{matrix} \right] F= 100Δt102Δt2Δt1


在这里插入图片描述

如果动态模型包含控制输入,那么过程噪声协方差矩阵 Q \boldsymbol{Q} Q可由下面的公式得到:

Q = G σ a 2 G T \boldsymbol{Q} = \boldsymbol{G}\sigma^{2}_{a}\boldsymbol{G^{T}} Q=Gσa2GT

其中 G \boldsymbol{G} G为控制矩阵(或者叫输入转移矩阵)。由运动模型可知

G = [ Δ t 2 2 Δ t ] \boldsymbol{G} = \left[ \begin{matrix} \frac{\Delta t^{2}}{2} \\ \Delta t \\ \end{matrix} \right] G=[2Δt2Δt]

那么

Q = G σ a 2 G T = σ a 2 G G T = σ a 2 [ Δ t 2 2 Δ t ] [ Δ t 2 2 Δ t ] = σ a 2 [ Δ t 4 4 Δ t 3 2 Δ t 3 2 Δ t 2 ] \boldsymbol{Q} = \boldsymbol{G}\sigma^{2}_{a}\boldsymbol{G^{T}} = \sigma^{2}_{a}\boldsymbol{G}\boldsymbol{G^{T}} = \sigma^{2}_{a} \left[ \begin{matrix} \frac{\Delta t^{2}}{2} \\ \Delta t \\ \end{matrix} \right] \left[ \begin{matrix} \frac{\Delta t^{2}}{2} & \Delta t \\ \end{matrix} \right] = \sigma^{2}_{a} \left[ \begin{matrix} \frac{\Delta t^{4}}{4} & \frac{\Delta t^{3}}{2} \\ \frac{\Delta t^{3}}{2} & \Delta t^{2} \\ \end{matrix} \right] Q=Gσa2GT=σa2GGT=σa2[2Δt2Δt][2Δt2Δt]=σa2[4Δt42Δt32Δt3Δt2]

状态更新方程

状态更新方程的表达式如下所示:

x ^ n , n = x ^ n , n − 1 + K n ( z n − H x ^ n , n − 1 ) \boldsymbol{\hat{x}_{n,n} = \hat{x}_{n,n-1} + K_{n} ( z_{n} - H \hat{x}_{n,n-1} )} x^n,n=x^n,n1+Kn(znHx^n,n1)

其中 x ^ n , n \boldsymbol{\hat{x}_{n,n}} x^n,n n n n时刻估计的系统状态向量; x ^ n , n − 1 \boldsymbol{\hat{x}_{n,n-1}} x^n,n1是在 n − 1 n-1 n1时刻预测的系统状态向量; K n \boldsymbol{K_{n}} Kn是卡尔曼增益; z n \boldsymbol{z_{n}} zn是测量值; H H H为观测矩阵。

在前面测量金条重量的例子中我们已经介绍了状态更新方程,在这里就不做更多介绍了。在多维的情况下,我们需要注意的是矩阵的维度。举个例子,假如系统的状态是一个5维的向量,但是只有第1、3、5维是可测量的:

x ( n ) = [ x 1 x 2 x 3 x 4 x 5 ] z ( n ) = [ z 1 z 3 z 5 ] \boldsymbol{x(n)} = \left[ \begin{matrix} x_{1}\\ x_{2}\\ x_{3}\\ x_{4}\\ x_{5}\\ \end{matrix} \right] \boldsymbol{z(n)} =\left[ \begin{matrix} z_{1}\\ z_{3}\\ z_{5}\\ \end{matrix} \right] x(n)= x1x2x3x4x5 z(n)= z1z3z5

那么观测矩阵应该是一个 3 × 5 3 \times 5 3×5的矩阵:

H = [ 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 ] \boldsymbol{H}= \left[ \begin{matrix} 1 & 0 & 0 & 0 & 0\\ 0 & 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0 & 1\\ \end{matrix} \right] H= 100000010000001

那么观测残差 ( z n − H x ^ n , n − 1 ) \left( \boldsymbol{ z_{n} - H \hat{x}_{n,n-1}} \right) (znHx^n,n1)

( z n − H x ^ n , n − 1 ) = [ z 1 z 3 z 5 ] − [ 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 ] [ x ^ 1 x ^ 2 x ^ 3 x ^ 4 x ^ 5 ] = [ ( z 1 − x ^ 1 ) ( z 3 − x ^ 3 ) ( z 5 − x ^ 5 ) ] \left( \boldsymbol{ z_{n} - H \hat{x}_{n,n-1}} \right) = \left[ \begin{matrix} z_{1}\\ z_{3}\\ z_{5}\\ \end{matrix} \right] - \left[ \begin{matrix} 1 & 0 & 0 & 0 & 0\\ 0 & 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0 & 1\\ \end{matrix} \right] \left[ \begin{matrix} \hat{x}_{1}\\ \hat{x}_{2}\\ \hat{x}_{3}\\ \hat{x}_{4}\\ \hat{x}_{5}\\ \end{matrix} \right] = \left[ \begin{matrix} (z_{1} - \hat{x}_{1})\\ (z_{3} - \hat{x}_{3})\\ (z_{5} - \hat{x}_{5})\\ \end{matrix} \right] (znHx^n,n1)= z1z3z5 100000010000001 x^1x^2x^3x^4x^5 = (z1x^1)(z3x^3)(z5x^5)

此时卡尔曼增益的维度应该是 5 × 3 5 \times 3 5×3

协方差更新方程

协方差更新方程的表达式如下:

P n , n = ( I − K n H ) P n , n − 1 ( I − K n H ) T + K n R n K n T \boldsymbol{ P_{n,n} = \left( I - K_{n}H \right) P_{n,n-1} \left( I - K_{n}H \right)^{T} + K_{n}R_{n}K_{n}^{T} } Pn,n=(IKnH)Pn,n1(IKnH)T+KnRnKnT

其中, P n , n \boldsymbol{P_{n,n} } Pn,n为当前状态估计值的协方差矩阵; P n , n − 1 \boldsymbol{P_{n,n-1} } Pn,n1是当前状态的先验估计(基于前一个状态的预测)的协方差矩阵; K n \boldsymbol{K_{n}} Kn为卡尔曼增益; H H H为观测矩阵; R n R_{n} Rn为测量噪声的协方差矩阵。

接下来,我们将对这个公式进行详细推导。推导过程中会用到下面几个公式:

方程说明
x ^ n , n = x ^ n , n − 1 + K n ( z n − H x ^ n , n − 1 ) \boldsymbol{\hat{x}_{n,n} = \hat{x}_{n,n-1} + K_{n} ( z_{n} - H \hat{x}_{n,n-1} )} x^n,n=x^n,n1+Kn(znHx^n,n1)状态更新方程
z n = H x n + v n \boldsymbol{z_{n} = Hx_{n} + v_{n}} zn=Hxn+vn测量方程, v n \boldsymbol{v_{n}} vn为测量噪声
P n , n = E ( e n e n T ) = E ( ( x n − x ^ n , n ) ( x n − x ^ n , n ) T ) \boldsymbol{P_{n,n}} = E\left( \boldsymbol{e_{n}e_{n}^{T}} \right) = E\left( \left( \boldsymbol{x_{n} - \hat{x}_{n,n}} \right) \left( \boldsymbol{x_{n} - \hat{x}_{n,n}} \right)^{T} \right) Pn,n=E(enenT)=E((xnx^n,n)(xnx^n,n)T)状态协方差矩阵
R n = E ( v n v n T ) \boldsymbol{R_{n}} = E\left( \boldsymbol{v_{n}v_{n}^{T}} \right) Rn=E(vnvnT)测量噪声协方差矩阵

对于每一个估计,估计误差 e n \boldsymbol{e_{n}} en

e n = x n − x ^ n , n = x n − x ^ n , n − 1 − K n ( z n − H x ^ n , n − 1 ) = x n − x ^ n , n − 1 − K n ( H x n + v n − H x ^ n , n − 1 ) = x n − x ^ n , n − 1 − K n H x n − K n v n + K n H x ^ n , n − 1 = x n − x ^ n , n − 1 − K n H ( x n − x ^ n , n − 1 ) − K n v n = ( I − K n H ) ( x n − x ^ n , n − 1 ) − K n v n \boldsymbol{e_{n}} = \boldsymbol{x_{n} - \hat{x}_{n,n}} \\ = \boldsymbol{x_{n} - \hat{x}_{n,n-1} - K_{n} \left( z_{n} - H \hat{x}_{n,n-1} \right)} \\ = \boldsymbol{x_{n} - \hat{x}_{n,n-1} - K_{n} \left( Hx_{n} + v_{n} - H \hat{x}_{n,n-1} \right)} \\ = \boldsymbol{x_{n} - \hat{x}_{n,n-1} - K_{n}Hx_{n} - K_{n}v_{n} + K_{n}H \hat{x}_{n,n-1}} \\ = \boldsymbol{x_{n} - \hat{x}_{n,n-1} - K_{n}H\left( x_{n} - \hat{x}_{n,n-1} \right) - K_{n}v_{n}} \\ = \boldsymbol{ \left( I - K_{n}H \right) \left( x_{n} - \hat{x}_{n,n-1} \right) - K_{n}v_{n}} en=xnx^n,n=xnx^n,n1Kn(znHx^n,n1)=xnx^n,n1Kn(Hxn+vnHx^n,n1)=xnx^n,n1KnHxnKnvn+KnHx^n,n1=xnx^n,n1KnH(xnx^n,n1)Knvn=(IKnH)(xnx^n,n1)Knvn

再由上式来推导估计值的协方差矩阵 P n , n \boldsymbol{P_{n,n}} Pn,n

在这里插入图片描述

( x n − x ^ n , n − 1 ) (\boldsymbol{ x_{n} - \hat{x}_{n,n-1}}) (xnx^n,n1)是先验估计与真实值之间的误差,它与当前时刻的测量噪声 v n \boldsymbol{ v_{n} } vn是不相关的。有前面的背景知识我们知道,两个相互独立变量乘积的期望值为零,所以

E ( ( I − K n H ) ( x n − x ^ n , n − 1 ) ( K n v n ) T ) = 0 E ( K n v n ( x n − x ^ n , n − 1 ) T ( I − K n H ) T ) = 0 {E \left( \boldsymbol{ \left( I - K_{n}H \right) \left( x_{n} - \hat{x}_{n,n-1} \right) \left( K_{n}v_{n} \right)^{T} }\right) = 0} \\ {E \left( \boldsymbol{ K_{n}v_{n} \left( x_{n} - \hat{x}_{n,n-1} \right)^{T} \left( I - K_{n}H \right)^{T} }\right) = 0} E((IKnH)(xnx^n,n1)(Knvn)T)=0E(Knvn(xnx^n,n1)T(IKnH)T)=0

那么

P n , n = E ( ( I − K n H ) ( x n − x ^ n , n − 1 ) ( x n − x ^ n , n − 1 ) T ( I − K n H ) T ) + E ( K n v n v n T K n T ) = ( I − K n H ) E ( ( x n − x ^ n , n − 1 ) ( x n − x ^ n , n − 1 ) T ) ( I − K n H ) T + K n E ( v n v n T ) K n T \boldsymbol{P_{n,n}} = E \left( \boldsymbol{ \left( I - K_{n}H \right) \left( x_{n} - \hat{x}_{n,n-1} \right) \left( x_{n} - \hat{x}_{n,n-1} \right)^{T} \left( I - K_{n}H \right)^{T} }\right) + E \left({\boldsymbol{ K_{n}v_{n} v_{n}^{T} K_{n}^{T} }}\right) \\ = \boldsymbol{ \left( I - K_{n}H \right)} {E \left( \boldsymbol{ \left( x_{n} - \hat{x}_{n,n-1} \right) \left( x_{n} - \hat{x}_{n,n-1} \right)^{T} }\right)} \boldsymbol{ \left( I - K_{n}H \right)^{T}} + \boldsymbol{K_{n}} { E \left( \boldsymbol{ v_{n} v_{n}^{T} }\right) } \boldsymbol{ K_{n}^{T} } \\ Pn,n=E((IKnH)(xnx^n,n1)(xnx^n,n1)T(IKnH)T)+E(KnvnvnTKnT)=(IKnH)E((xnx^n,n1)(xnx^n,n1)T)(IKnH)T+KnE(vnvnT)KnT

E ( ( x n − x ^ n , n − 1 ) ( x n − x ^ n , n − 1 ) T ) = P n , n − 1 E ( v n v n T ) = R n {E \left( \boldsymbol{ \left( x_{n} - \hat{x}_{n,n-1} \right) \left( x_{n} - \hat{x}_{n,n-1} \right)^{T} }\right) = \boldsymbol{P_{n,n-1}}} \\ { E \left( \boldsymbol{ v_{n} v_{n}^{T} }\right) = \boldsymbol{R_{n}}} E((xnx^n,n1)(xnx^n,n1)T)=Pn,n1E(vnvnT)=Rn

可得

P n , n = ( I − K n H ) P n , n − 1 ( I − K n H ) T + K n R n K n T \boldsymbol{P_{n,n}} = \boldsymbol{ \left( I - K_{n}H \right)} {\boldsymbol{ P_{n,n-1}} } \boldsymbol{ \left( I - K_{n}H \right)^{T}} + \boldsymbol{K_{n}} { \boldsymbol{ R_{n} } } \boldsymbol{ K_{n}^{T} } Pn,n=(IKnH)Pn,n1(IKnH)T+KnRnKnT

好了,终于把这个公式推导完了。

卡尔曼增益

卡尔曼增益的表达式如下:

K n = P n , n − 1 H T ( H P n , n − 1 H T + R n ) − 1 \boldsymbol{ K_{n} = P_{n,n-1}H^{T}\left( HP_{n,n-1}H^{T} + R_{n} \right)^{-1} } Kn=Pn,n1HT(HPn,n1HT+Rn)1

其中, K n \boldsymbol{K_{n}} Kn为卡尔曼增益; P n , n − 1 \boldsymbol{P_{n,n-1} } Pn,n1是当前状态的先验估计(基于前一个状态的预测)的协方差矩阵; H \boldsymbol{H} H为观测矩阵; R n \boldsymbol{R_{n}} Rn为测量噪声的协方差矩阵。

在开始推导卡尔曼增益之前,让我们先对协方差更新公式再做一些变换:

P n , n = ( I − K n H ) P n , n − 1 ( I − K n H ) T + K n R n K n T = ( I − K n H ) P n , n − 1 ( I − ( K n H ) T ) + K n R n K n T = ( I − K n H ) P n , n − 1 ( I − H T K n T ) + K n R n K n T = ( P n , n − 1 − K n H P n , n − 1 ) ( I − H T K n T ) + K n R n K n T = P n , n − 1 − P n , n − 1 H T K n T − K n H P n , n − 1 + K n H P n , n − 1 H T K n T + K n R n K n T = P n , n − 1 − P n , n − 1 H T K n T − K n H P n , n − 1 + K n ( H P n , n − 1 H T + R n ) K n T \boldsymbol{P_{n,n}} = \boldsymbol{ \left( I - K_{n}H \right)} \boldsymbol{ P_{n,n-1}} {\boldsymbol{ \left( I - K_{n}H \right)^{T}}} + \boldsymbol{K_{n}} \boldsymbol{ R_{n} } \boldsymbol{ K_{n}^{T} } \\ = \boldsymbol{ \left( I - K_{n}H \right)} \boldsymbol{ P_{n,n-1}} {\boldsymbol{ \left( I - \left( K_{n}H \right)^{T}\right)}} + \boldsymbol{K_{n}} \boldsymbol{ R_{n} } \boldsymbol{ K_{n}^{T} } \\ = {\boldsymbol{ \left( I - K_{n}H \right)} \boldsymbol{ P_{n,n-1}}} {\boldsymbol{ \left( I - H^{T}K_{n}^{T}\right)}} + \boldsymbol{K_{n}} \boldsymbol{ R_{n} } \boldsymbol{ K_{n}^{T} } \\ = {\boldsymbol{ \left( P_{n,n-1} - K_{n}H P_{n,n-1} \right)}} \boldsymbol{ \left( I - H^{T}K_{n}^{T}\right)} + \boldsymbol{K_{n}} \boldsymbol{ R_{n} } \boldsymbol{ K_{n}^{T} } \\ = \boldsymbol{ P_{n,n-1} - P_{n,n-1}H^{T}K_{n}^{T} - K_{n}H P_{n,n-1}} + {\boldsymbol{K_{n}H P_{n,n-1}H^{T}K_{n}^{T} + K_{n} R_{n} K_{n}^{T} } } \\ = \boldsymbol{ P_{n,n-1} - P_{n,n-1}H^{T}K_{n}^{T} - K_{n}H P_{n,n-1}} + {\boldsymbol{K_{n} \left( H P_{n,n-1}H^{T} + R_{n} \right) K_{n}^{T} } } Pn,n=(IKnH)Pn,n1(IKnH)T+KnRnKnT=(IKnH)Pn,n1(I(KnH)T)+KnRnKnT=(IKnH)Pn,n1(IHTKnT)+KnRnKnT=(Pn,n1KnHPn,n1)(IHTKnT)+KnRnKnT=Pn,n1Pn,n1HTKnTKnHPn,n1+KnHPn,n1HTKnT+KnRnKnT=Pn,n1Pn,n1HTKnTKnHPn,n1+Kn(HPn,n1HT+Rn)KnT

卡尔曼滤波器是最优滤波器,因此我们需要寻求能最小化估计方差的卡尔曼增益。为了最小化估计方差,我们需要最小化状态协方差矩阵 P n , n \boldsymbol{P_{n,n}} Pn,n的主对角线,也就是最小化它的迹 t r ( P n , n ) tr(\boldsymbol{P_{n,n}}) tr(Pn,n)。为了求得 t r ( P n , n ) tr(\boldsymbol{P_{n,n}}) tr(Pn,n)的极小值,我们需要求迹 t r ( P n , n ) tr(\boldsymbol{P_{n,n}}) tr(Pn,n)关于卡尔曼增益 K n \boldsymbol{K_{n}} Kn的导数,并设导数为零。

t r ( P n , n ) = t r ( P n , n − 1 ) − t r ( P n , n − 1 H T K n T ) − t r ( K n H P n , n − 1 ) + t r ( K n ( H P n , n − 1 H T + R n ) K n T ) = t r ( P n , n − 1 ) − 2 t r ( K n H P n , n − 1 ) + t r ( K n ( H P n , n − 1 H T + R n ) K n T ) tr\left( \boldsymbol{P_{n,n}} \right) = tr\left( \boldsymbol{P_{n,n-1}}\right) - {tr\left( \boldsymbol{ P_{n,n-1}H^{T}K_{n}^{T} }\right) - tr\left( \boldsymbol{ K_{n}H P_{n,n-1} }\right)} + tr\left(\boldsymbol{K_{n} \left( H P_{n,n-1}H^{T} + R_{n} \right) K_{n}^{T} } \right) \\ = tr\left( \boldsymbol{P_{n,n-1}}\right) - { 2tr\left( \boldsymbol{ K_{n}H P_{n,n-1} }\right)} + tr\left(\boldsymbol{K_{n} \left( H P_{n,n-1}H^{T} + R_{n} \right) K_{n}^{T} } \right) tr(Pn,n)=tr(Pn,n1)tr(Pn,n1HTKnT)tr(KnHPn,n1)+tr(Kn(HPn,n1HT+Rn)KnT)=tr(Pn,n1)2tr(KnHPn,n1)+tr(Kn(HPn,n1HT+Rn)KnT)

求导数并令其为零:

d ( t r ( P n , n ) ) d K n = d ( t r ( P n , n − 1 ) ) d K n − d ( 2 t r ( K n H P n , n − 1 ) ) d K n + d ( t r ( K n ( H P n , n − 1 H T + R n ) K n T ) ) d K n = 0 − 2 ( H P n , n − 1 ) T + 2 K n ( H P n , n − 1 H T + R n ) = 0 \frac{d\left( tr\left( \boldsymbol{P_{n,n}} \right) \right)}{d\boldsymbol{K_{n}}} = {\frac{d\left( tr\left( \boldsymbol{P_{n,n-1}}\right) \right)}{d\boldsymbol{K_{n}}}} - { \frac{d\left( 2tr\left( \boldsymbol{ K_{n}H P_{n,n-1} }\right) \right) }{d\boldsymbol{K_{n}}} } + {\frac{ d\left( tr\left(\boldsymbol{K_{n} \left( H P_{n,n-1}H^{T} + R_{n} \right) K_{n}^{T} } \right) \right) }{d\boldsymbol{K_{n}}}} \\ = {0} - { 2 \left( \boldsymbol{ H P_{n,n-1} }\right)^{T} } + {\boldsymbol{2K_{n} \left( H P_{n,n-1}H^{T} + R_{n} \right) } } \\ = 0 dKnd(tr(Pn,n))=dKnd(tr(Pn,n1))dKnd(2tr(KnHPn,n1))+dKnd(tr(Kn(HPn,n1HT+Rn)KnT))=02(HPn,n1)T+2Kn(HPn,n1HT+Rn)=0

这里用到了两个计算公式:
d d A ( t r ( A B ) ) = B T d d A ( t r ( A B A T ) ) = 2 A B {\frac{d}{d\boldsymbol{A}} \left( tr\left( \boldsymbol{AB} \right) \right) = \boldsymbol{B}^{T} } \\ {\frac{d}{d\boldsymbol{A}} \left( tr\left( \boldsymbol{ABA^{T}} \right) \right) = 2\boldsymbol{AB} } dAd(tr(AB))=BTdAd(tr(ABAT))=2AB

由上面的导数为零,可得

( H P n , n − 1 ) T = K n ( H P n , n − 1 H T + R n ) { \left( \boldsymbol{ H P_{n,n-1} }\right)^{T} } = {\boldsymbol{K_{n} \left( H P_{n,n-1}H^{T} + R_{n} \right) } } (HPn,n1)T=Kn(HPn,n1HT+Rn)

因此可求得卡尔曼增益 K n \boldsymbol{K_{n}} Kn

K n = ( H P n , n − 1 ) T ( H P n , n − 1 H T + R n ) − 1 = P n , n − 1 T H T ( H P n , n − 1 H T + R n ) − 1 = P n , n − 1 H T ( H P n , n − 1 H T + R n ) − 1 \boldsymbol{K_{n}} = \left( \boldsymbol{ H P_{n,n-1} }\right)^{T} \boldsymbol{\left( H P_{n,n-1}H^{T} + R_{n} \right)^{-1} } \\ = \boldsymbol{ P_{n,n-1}^{T} H^{T} } \boldsymbol{\left( H P_{n,n-1}H^{T} + R_{n} \right)^{-1} } \\ = \boldsymbol{ P_{n,n-1} H^{T} } \boldsymbol{\left( H P_{n,n-1}H^{T} + R_{n} \right)^{-1} } Kn=(HPn,n1)T(HPn,n1HT+Rn)1=Pn,n1THT(HPn,n1HT+Rn)1=Pn,n1HT(HPn,n1HT+Rn)1

因为协方差矩阵是对称矩阵,所以 P n , n − 1 T = P n , n − 1 \boldsymbol{ P_{n,n-1}^{T}} = \boldsymbol{ P_{n,n-1}} Pn,n1T=Pn,n1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DeepDriving

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

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

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

打赏作者

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

抵扣说明:

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

余额充值