当前位置:网站首页>深入理解卡尔曼滤波器(3):多维卡尔曼滤波器
深入理解卡尔曼滤波器(3):多维卡尔曼滤波器
2022-07-17 05:11:00 【DeepDriving】
深入理解卡尔曼滤波器(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=xn−1+x˙n−1Δt+21x¨n−1Δt2yn=yn−1+y˙n−1Δt+21y¨n−1Δt2zn=zn−1+z˙n−1Δt+21z¨n−1Δt2x˙n=x˙n−1+x¨n−1Δty˙n=y˙n−1+y¨n−1Δtz˙n=z˙n−1+z¨n−1Δtx¨n=x¨n−1y¨n=y¨n−1z¨n=z¨n−1
在实际应用中,我们通常会使用矩阵的方式来描述多维数据处理的过程。接下来,我们将用矩阵的方式来介绍多维卡尔曼滤波器的几个方程。
状态外推方程
状态外推方程的作用是在当前时刻 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,n−Fμxn,n−Gu^n,n)(Fx^n,n+Gu^n,n−Fμxn,n−Gu^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,n−1+Kn(zn−Hx^n,n−1)
其中 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,n−1是在 n − 1 n-1 n−1时刻预测的系统状态向量; 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) (zn−Hx^n,n−1)为
( 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] (zn−Hx^n,n−1)=⎣⎡z1z3z5⎦⎤−⎣⎡100000010000001⎦⎤⎣⎢⎢⎢⎢⎡x^1x^2x^3x^4x^5⎦⎥⎥⎥⎥⎤=⎣⎡(z1−x^1)(z3−x^3)(z5−x^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=(I−KnH)Pn,n−1(I−KnH)T+KnRnKnT
其中, P n , n \boldsymbol{P_{n,n} } Pn,n为当前状态估计值的协方差矩阵; P n , n − 1 \boldsymbol{P_{n,n-1} } Pn,n−1是当前状态的先验估计(基于前一个状态的预测)的协方差矩阵; 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,n−1+Kn(zn−Hx^n,n−1) | 状态更新方程 |
| 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((xn−x^n,n)(xn−x^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=xn−x^n,n=xn−x^n,n−1−Kn(zn−Hx^n,n−1)=xn−x^n,n−1−Kn(Hxn+vn−Hx^n,n−1)=xn−x^n,n−1−KnHxn−Knvn+KnHx^n,n−1=xn−x^n,n−1−KnH(xn−x^n,n−1)−Knvn=(I−KnH)(xn−x^n,n−1)−Knvn
再由上式来推导估计值的协方差矩阵 P n , n \boldsymbol{P_{n,n}} Pn,n

( x n − x ^ n , n − 1 ) (\boldsymbol{ x_{n} - \hat{x}_{n,n-1}}) (xn−x^n,n−1)是先验估计与真实值之间的误差,它与当前时刻的测量噪声 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((I−KnH)(xn−x^n,n−1)(Knvn)T)=0E(Knvn(xn−x^n,n−1)T(I−KnH)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((I−KnH)(xn−x^n,n−1)(xn−x^n,n−1)T(I−KnH)T)+E(KnvnvnTKnT)=(I−KnH)E((xn−x^n,n−1)(xn−x^n,n−1)T)(I−KnH)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((xn−x^n,n−1)(xn−x^n,n−1)T)=Pn,n−1E(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=(I−KnH)Pn,n−1(I−KnH)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,n−1HT(HPn,n−1HT+Rn)−1
其中, K n \boldsymbol{K_{n}} Kn为卡尔曼增益; P n , n − 1 \boldsymbol{P_{n,n-1} } Pn,n−1是当前状态的先验估计(基于前一个状态的预测)的协方差矩阵; 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=(I−KnH)Pn,n−1(I−KnH)T+KnRnKnT=(I−KnH)Pn,n−1(I−(KnH)T)+KnRnKnT=(I−KnH)Pn,n−1(I−HTKnT)+KnRnKnT=(Pn,n−1−KnHPn,n−1)(I−HTKnT)+KnRnKnT=Pn,n−1−Pn,n−1HTKnT−KnHPn,n−1+KnHPn,n−1HTKnT+KnRnKnT=Pn,n−1−Pn,n−1HTKnT−KnHPn,n−1+Kn(HPn,n−1HT+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,n−1)−tr(Pn,n−1HTKnT)−tr(KnHPn,n−1)+tr(Kn(HPn,n−1HT+Rn)KnT)=tr(Pn,n−1)−2tr(KnHPn,n−1)+tr(Kn(HPn,n−1HT+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,n−1))−dKnd(2tr(KnHPn,n−1))+dKnd(tr(Kn(HPn,n−1HT+Rn)KnT))=0−2(HPn,n−1)T+2Kn(HPn,n−1HT+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,n−1)T=Kn(HPn,n−1HT+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,n−1)T(HPn,n−1HT+Rn)−1=Pn,n−1THT(HPn,n−1HT+Rn)−1=Pn,n−1HT(HPn,n−1HT+Rn)−1
因为协方差矩阵是对称矩阵,所以 P n , n − 1 T = P n , n − 1 \boldsymbol{ P_{n,n-1}^{T}} = \boldsymbol{ P_{n,n-1}} Pn,n−1T=Pn,n−1。
边栏推荐
- Transform the inriapearson data set into Yolo training format and visualize it
- 多模态融合方法总结
- CV-Model【1】:Mnist
- CV学习笔记【1】:transforms
- Contrastive learning for image semantic segmentation (two articles)
- 12. Ads layer construction of data warehouse construction
- Pointnet++代码详解(七):PointNetSetAbstractionMsg层
- Opencv reads the image under the Chinese path and converts its format without changing the color
- Face detection based on OpenCV and face interception
- 尝试解决YOLOv5推理rtsp有延迟的一些方法
猜你喜欢

C语言——冒泡排序

A Survey of Robust LiDAR-based 3D Object Detection Methods for Autonomous Driving(激光雷达3D目标检测方法)论文笔记

软件过程与管理复习(六)

Wxml template syntax in wechat applet

基于bert的情感分类

Geo_CNN(Tensorflow版本)

Use of MySQL

Pointnet++ code explanation (I): farthest_ point_ Sample function

Time complexity and space complexity of the model

seq2seq (中英对照翻译)Attention
随机推荐
Simple application of COAP in andorid
Pointnet++ code explanation (VII): pointnetsetabstractionmsg layer
Run yolov5 process record based on mindspire
运行基于MindSpore的yolov5流程记录
Aperçu de l'apprentissage auto - supervisé
OpenCV读取中文路径下的图片,并对其格式转化不改变颜色
PyTorch学习笔记【1】:使用张量表征真实数据
Kotlin scope function
MySQL comma separated data for branches
Use of MySQL
C语言实现迭代实现二分查找
基于bert的情感分类
MySQL queries the data of the current day, this week, this month and last month
C语言——冒泡排序
widerperson数据集转化为YOLOv5训练格式,并加入到crowdhuman中
JNI practical notes
DEEP JOINT TRANSMISSION-RECOGNITION FOR POWER-CONSTRAINED IOT DEVICES
Seq2seq (Chinese English translation) attention
Pointnet++ code explanation (V): Sample_ and_ Group function and samle_ and_ group_ All function
CV-Model【1】:Mnist