1、简介

1.1 滤波是什么

所谓了滤波,就是从混合在一起的诸多信号中提取出所需要的信号。

1.2 信号的分类:

(1)确定性信号:可以表示为确定的时间函数,可确定其在任何时刻的量值。(具有确定的频谱)

(2)随机信号:不能用确定的数学关系来描述的,不能预测其任何瞬时值,其变化服从统计规律。(频率不确定,功率谱确定)

确定性信号的滤波:

可采用低通、高通、带通和带阻等模拟滤波器或者计算机通过算法实现--常规滤波。

随机信号的滤波:

根据有用信号和干扰信号的功率谱设计滤波器--维纳滤波(Wiener Filtering) 或者卡尔曼滤波(Kalman Filter)

随机信号的滤波也可以看做是估计问题。

1.3 kalman filter是什么

简单的说卡尔曼滤波器是一个“optical recursive data processing algorithm(最优化回归数据处理算法)”。从形式上,卡尔曼滤波器是5个公式。

对于解决大部分问题卡尔曼滤波器是最优、效率最高甚至是最有用的。他的广泛应用已经超过30年,包括机器人导航、控制、传感器数据融合,甚至在雷达系统及导弹追踪等方面,近年来更被用于计算机图像处理,例如头像识别,头像分割、图像边缘检测等等。

1.4 卡尔曼滤波器的特点:

(1)卡尔曼滤波器处理的对象是随机信号;

(2)被处理的信号无有用和干扰之分,滤波的目的是要估计出所有被处理的信号(区别于维纳滤波);

(3)系统的白噪声激励和测量噪声并不是需要滤除的对象,它们的统计特性是估计过程中需要利用的信息;(区别于最小二乘法)

(4)算法是递推的,且使用状态空间法在时域内设计滤波器,适用于对多维随机过程;

(5)被估计量既可以是平稳的,也可以是非平稳的;

(6)估计过程中,只需要考虑过程噪声和测量噪声及当前时刻系统状态的统计特性。(花费计算机计算资源少)

1.5 卡尔曼滤波分类:

现行系统的卡尔曼滤波方程;

1)线性离散系统  2)线性连续系统

非线性系统的卡尔曼滤波方程

1)扩展卡尔曼滤波器EKF  2)无迹卡尔曼滤波器UKF

1.6 卡尔曼滤波的基本思想:

卡尔曼滤波就是把统计学应用到了滤波算法上。其算法的核心思想是,根据当前的仪器"测量值" 和上一刻的 "预测量" 和 "误差",计算得到当前的最优量.  再预测下一刻的量, 

里面比较突出的是观点是. 把误差纳入计算, 而且分为预测误差和测量误差两种.通称为噪声.

 还有一个非常大的特点是,误差独立存在, 始终不受测量数据的影响.

在海图作业中,假设航海长需要知道当前时刻船的位置,航海长通常以上一时刻的船位基准,根据航向、航速和海流等一系列因素推算当前刻的船位置,观测和推算这两个船位一般不重合,无论是通过航向航速等因素计算出来的结果和当前时刻传感器对船位的测量结果都是不准确的,都会有误差,航海长需要通过分析和判断选择一个可靠的船位,作为船舰的下一个位置。当前准确位置变成一个根据计算估计出来的位置和传感器测量出来的位置获取真实位置的最优估计问题。

上面这种场景便是一个典型的卡尔曼滤波的应用场景,卡尔曼滤波的基本思想是:

以k-1时刻的最优估计

python 卡尔曼滤波实现对行人_协方差

为准,预测k时刻的状态变化量

python 卡尔曼滤波实现对行人_卡尔曼滤波_02

,同时又对该状态进行观测,得到观测变量

python 卡尔曼滤波实现对行人_最优估计_03

,再在预测和观测之间进行分析,或者说以观测量对预测量进行修正,从而得到k时刻的最优状态估计

python 卡尔曼滤波实现对行人_协方差_04

2、卡尔曼滤波器的基本方程:

2.1、无控制离散型卡尔曼滤波器的基本方程:

系统的状态方程:

python 卡尔曼滤波实现对行人_协方差_05

系统的测量方程:

python 卡尔曼滤波实现对行人_最优估计_06

这里:

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_07

为过程白噪声;

python 卡尔曼滤波实现对行人_卡尔曼滤波_08

位测量噪声;

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_09

为噪声驱动矩阵;

python 卡尔曼滤波实现对行人_最优估计_03

系统测量方程的输出量(即观测量),是可以实际测量的量;

如果

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_07


python 卡尔曼滤波实现对行人_卡尔曼滤波_08

满足

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_13

 

python 卡尔曼滤波实现对行人_最优估计_14

python 卡尔曼滤波实现对行人_最优估计_15

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_16

位过程噪声的协方差矩阵,表示

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_17

向量元素之间的相关关系,其为非负定阵;

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_18

为测量噪声的协方差,表示

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_19

向量元素之间的相关关系,其为正定阵;在实际应用中

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_07


python 卡尔曼滤波实现对行人_卡尔曼滤波_08

常假设为满足高斯分布,过程噪声

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_07

和测量噪声

python 卡尔曼滤波实现对行人_卡尔曼滤波_08

假设是相互独立的(之间没有关系,无相互影响)

意思是这些噪声在离散的状态上是没有关系的(互相独立的,每个时刻的噪声都是独立的)且服从高斯分布:

python 卡尔曼滤波实现对行人_协方差_24

~

python 卡尔曼滤波实现对行人_最优估计_25

python 卡尔曼滤波实现对行人_最优估计_26

~

python 卡尔曼滤波实现对行人_最优估计_27

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_28

python 卡尔曼滤波实现对行人_最优估计_29

python 卡尔曼滤波实现对行人_协方差_30

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_31

则无控制离散型卡尔曼滤波的基本方程为;

(1)对k时刻状态的预测方程:

python 卡尔曼滤波实现对行人_最优估计_32

                           (1-1)

(2)对k时刻预测的均方误差的预测方程:

python 卡尔曼滤波实现对行人_最优估计_33

               (1-2)

(3)滤波增益方程(权重):

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_34

                  (1-3)

(4)滤波估计方程(k时刻的最优估计值):

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_35

       (1-4)

(5)滤波均方误差更新矩阵(k时刻最优均方误差):

python 卡尔曼滤波实现对行人_协方差_36

                   (1-5)

参数解析:

1、

python 卡尔曼滤波实现对行人_最优估计_37

python 卡尔曼滤波实现对行人_协方差_38

: 分别表示 k-1 时刻和 k 时刻的后验状态估计值,是滤波的结果之一,即更新后的结果,也叫最优估计(估计的状态,根据理论,我们不可能知道每时刻状态的确切结果所以叫估计)。

2、

python 卡尔曼滤波实现对行人_卡尔曼滤波_39

: k 时刻的先验状态估计值,是滤波的中间计算结果,即根据上一时刻(k-1时刻)的最优估计预测的k时刻的结果,是预测方程的结果。

3、

python 卡尔曼滤波实现对行人_最优估计_40

python 卡尔曼滤波实现对行人_协方差_41

:分别表示 k-1 时刻和 k 时刻的后验估计协方差(即的协方差,表示状态的不确定度),是滤波的结果之一。

4、

python 卡尔曼滤波实现对行人_协方差_42

:k 时刻的先验估计协方差(

python 卡尔曼滤波实现对行人_卡尔曼滤波_39

的协方差),是滤波的中间计算结果。

5、

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_44

:是状态变量到测量(观测)的转换矩阵,表示将状态和观测连接起来的关系,卡尔曼滤波里为线性关系,它负责将 m 维的测量值转换到 n 维,使之符合状态变量的数学形式,是滤波的前提条件之一。

6、

python 卡尔曼滤波实现对行人_最优估计_03

:测量值(观测值),是滤波的输入。

7,

python 卡尔曼滤波实现对行人_卡尔曼滤波_46

:滤波增益矩阵,是滤波的中间计算结果,卡尔曼增益,或卡尔曼系数。

8、

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_47

:状态转移矩阵,实际上是对目标状态转换的一种猜想模型。例如在机动目标跟踪中, 状态转移矩阵常常用来对目标的运动建模,其模型可能为匀速直线运动或者匀加速运动。当状态转移矩阵不符合目标的状态转换模型时,滤波会很快发散。

9、

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_16

:过程激励噪声

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_17

的协方差(系统过程的协方差),表示

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_17

 向量元素之间的相关关系。该参数被用来表示状态转换矩阵与实际过程之间的误差。因为我们无法直接观测到过程信号, 所以 Q 的取值是很难确定的。是卡尔曼滤波器用于估计离散时间过程的状态变量,也叫预测模型本身带来的噪声。状态转移协方差矩阵

10、

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_18

 :测量噪声

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_19

的协方差,表示

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_19

向量元素之间的相关关系。滤波器实际实现时,测量噪声协方差 R一般可以观测得到,是滤波器的已知条件。

11、

python 卡尔曼滤波实现对行人_最优估计_54

:实际观测和预测观测的残差,和卡尔曼增益一起修正先验(预测),得到后验。

2.2、带有控制的离散型卡尔曼滤波基本方程

系统的状态方程:

python 卡尔曼滤波实现对行人_协方差_55

系统的测量方程:

python 卡尔曼滤波实现对行人_最优估计_06

参数解析:

1、

python 卡尔曼滤波实现对行人_协方差_57

表示系统的控制输入;

2、

python 卡尔曼滤波实现对行人_卡尔曼滤波_58

是系统参数,表示系统控制输入k-1时刻到k时刻,系统输入转化为状态的转换矩阵;

如果

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_07


python 卡尔曼滤波实现对行人_卡尔曼滤波_08

满足

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_13

python 卡尔曼滤波实现对行人_最优估计_14

python 卡尔曼滤波实现对行人_最优估计_15

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_16

位过程噪声的协方差,其为非负定阵;

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_18

为测量噪声的协方差,其为正定阵;

则带控制离散型卡尔曼滤波的基本方程为;

(1)对k时刻状态的预测方程:

python 卡尔曼滤波实现对行人_最优估计_66

                           (2-1)

(2)对k时刻预测的均方误差的预测方程:

python 卡尔曼滤波实现对行人_卡尔曼滤波_67

               (2-2)

(3)滤波增益方程(权重):

python 卡尔曼滤波实现对行人_协方差_68

                  (2-3)

(4)滤波估计方程(k时刻的最有估计值):

python 卡尔曼滤波实现对行人_协方差_69

        (2-4)

(5)滤波均方误差更新矩阵(k时刻最优均方误差):

python 卡尔曼滤波实现对行人_协方差_36

                   (2-5)

 

2.3、线性离散型卡尔曼滤波方程的一般形式:

系统的状态方程:

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_71

系统的测量方程:

python 卡尔曼滤波实现对行人_最优估计_06

如果

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_07


python 卡尔曼滤波实现对行人_卡尔曼滤波_08

满足

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_13

python 卡尔曼滤波实现对行人_最优估计_14

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_77

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_16

位过程噪声的协方差,其为非负定阵;

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_18

为测量噪声的协方差,其为正定阵;

引入矩阵

python 卡尔曼滤波实现对行人_卡尔曼滤波_80

,对状态方程进行等效变换:

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_81

python 卡尔曼滤波实现对行人_卡尔曼滤波_82

其中:

python 卡尔曼滤波实现对行人_协方差_83

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_84

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_85

python 卡尔曼滤波实现对行人_最优估计_14

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_87

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_16

位过程噪声的协方差,其为非负定阵;

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_18

为测量噪声的协方差,其为正定阵;

则线性离散型卡尔曼滤波器的一般形式基本方程为;

(1)对k时刻状态的预测方程:

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_90

                           (3-1)

(2)对k时刻协方差的预测方程:

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_91

               (3-2)

(3)滤波增益方程(权重):

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_34

                  (3-3)

(4)滤波估计方程(k时刻的最有估计值):

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_93

        (3-4)

(5)滤波均方误差更新矩阵(k时刻最优均方误差):

python 卡尔曼滤波实现对行人_协方差_36

                   (3-5)

Kalman滤波是一种递归过程,主要有两个更新过程:时间更新和观测更新,其中时间更新主要包括状态预测和协方差预测,主要是对系统的预测,而观测更新主要包括计算卡尔曼增益、状态更新和协方差更新,因此整个递归过程上面五个方面的计算:1)状态预测;2)协方差预测;3)卡尔曼增益;4)状态更新;5)协方差更新;

1、式(3-1)即线性随机差分方程(Linear Stochastic Difference equation),其利用k-1时刻系统状态最优估计

python 卡尔曼滤波实现对行人_协方差

给出当前k时刻系统状态的估计值

python 卡尔曼滤波实现对行人_卡尔曼滤波_96


python 卡尔曼滤波实现对行人_协方差


python 卡尔曼滤波实现对行人_卡尔曼滤波_96

都是n*1矩阵,

python 卡尔曼滤波实现对行人_卡尔曼滤波_99

是k-1时刻到k时刻的系统转换矩阵,大小位n*n矩阵,

python 卡尔曼滤波实现对行人_卡尔曼滤波_100

是系统输入,大小为m*1,

python 卡尔曼滤波实现对行人_卡尔曼滤波_101

位将输入转化为系统状态的矩阵,大小为n*m,线性随机差分方程假设上一状态与当前状态有某种线性关系,比如恒温环境的温度,匀速运动的速度等,但是因为现实环境的复杂,这种线性关系不是完全平滑的,也就是会有一些扰动,式中用

python 卡尔曼滤波实现对行人_卡尔曼滤波_102

表示扰动,该扰动是系统过程噪声,主要是从上一状态进入到当前状态时外界因素的干扰,通常假定服从高斯白噪声分布。这一公式的主要含义是:

python 卡尔曼滤波实现对行人_协方差

是上一状态的最优结果,

python 卡尔曼滤波实现对行人_卡尔曼滤波_39

是利用上一状态预测得到的结果,

python 卡尔曼滤波实现对行人_卡尔曼滤波_105

是上一时刻的观测结果,这公式主要预测当前时刻系统状态结果。

2、式(3-2)

协方差预测:

python 卡尔曼滤波实现对行人_协方差_106

是上一状态

python 卡尔曼滤波实现对行人_协方差

对应的协方差,

python 卡尔曼滤波实现对行人_协方差_42


python 卡尔曼滤波实现对行人_协方差_04

时刻对应的协方差的预测值,

python 卡尔曼滤波实现对行人_协方差_110

是系统过程噪声(假设为高斯白噪声)的协方差矩阵;

这个公式主要含义:对系统结果对应的协方差进行更新;

3、式(3-3)

python 卡尔曼滤波实现对行人_最优估计_111

为观测矩阵,

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_18

为测量噪声(同样假设为高斯白噪声)对应的协方差矩阵;主要含义:用于状态更新和协方差更新中,因为前两个预测我们得到了当前状态的预测结果,然后再得到当前状态的观测值,通过预测值和观测值,获得卡尔曼增益

python 卡尔曼滤波实现对行人_卡尔曼滤波_46

4、式(3-4)

主要含义:利用当前状态的观测值和预测值,及增益,计算k时刻下的当前状态的最优状态估计

python 卡尔曼滤波实现对行人_协方差_38

,也就是状态更新。

5、式(3-5)

其中,

python 卡尔曼滤波实现对行人_协方差_115

为单位矩阵;主要含义:前面已经更新了状态,为了保证递推下去,还要更新当前状态对应的协方差矩阵,用于下一轮计算的公式(3-2)中的

python 卡尔曼滤波实现对行人_协方差_106


2.4、离散型卡尔曼滤波基本方程使用要点:

(1) 滤波初值的选择

卡尔曼滤波是一种递推算法,启动时必须先给初值

python 卡尔曼滤波实现对行人_最优估计_117

;情况一:一般情况下,取

python 卡尔曼滤波实现对行人_协方差_118

,卡尔曼滤波是无偏的,即滤波稳定,但是实际上这样的初值很难得到;

情况二:如果系统是一致完全随机可控和一致完全随机可观测的,则卡尔曼滤波器一定是一致渐进稳定的,此时随意的选取滤波初值不影响最终估计值(大多数情况下)。

(2)估计均方误差的等价形式及选用

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_119

 ;                 (1)

python 卡尔曼滤波实现对行人_协方差_120

          (2)

python 卡尔曼滤波实现对行人_卡尔曼滤波_121

               (3)

公式(1)形式简单,计算量小,但是累积误差容易使协方差矩阵失去非负正定性甚至对称性,所以实际中常使用公式(2);

如果在滤波初值对估计量的统计特性缺乏了解,选取滤波初值随意,则宜采用公式(3).

(3)卡尔曼滤波的基本方程只适用于系统方程和测量方程均为离散的情况,但实际的物理系统一般都是连续的,动力学特性用连续微分方程来描述,所以在使用基本方程之前,需要对系统方程和测量方程进行离散化处理。连续系统的离散化处理包括对过程白噪声的等效离散化处理。

 

3、连续系统的卡尔曼滤波基本方程

通过对实际的物理系统进行分析后得到的系统模型一般为连续型的。连续型卡尔曼滤波方程可在离散型卡尔曼滤波器基本方程基础上推导出来,基本思路:将连续系统离散化,应用离散型卡尔曼滤波器的基本方程和导数概念推导出连续型滤波方程。

采用递推算法是离散型卡尔曼滤波的最大优点,算法可由计算机执行,不必存储时间过程中的大量测量信息,连续型卡尔曼滤波则根据连续时间过程中的测量值,采用求解矩阵微分方程的方法估计系统状态变量的时间连续值,因此算法失去了递推性。

连续系统的状态空间表达式为:

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_122

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_123

其中:

python 卡尔曼滤波实现对行人_协方差_124

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_125

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_126

Q(t)为非负定矩阵;R(t)为正定矩阵

与连续系统模型等效的离散系统的数学模型:

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_127

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_128

其中:

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_129

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_130

python 卡尔曼滤波实现对行人_卡尔曼滤波_131

python 卡尔曼滤波实现对行人_最优估计_132

是零均值分段常值白噪声过程,其协方差为:

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_133

python 卡尔曼滤波实现对行人_协方差_134

进入矩阵J来除去过程噪声与测量噪声的相关性

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_135

(1)状态的一步预测方程:

python 卡尔曼滤波实现对行人_协方差_136

(2)协方差预测方程:

python 卡尔曼滤波实现对行人_最优估计_137

(3)滤波增益方程(权重):

python 卡尔曼滤波实现对行人_卡尔曼滤波_138

(4)滤波估计方程(K时刻的最优值):

python 卡尔曼滤波实现对行人_卡尔曼滤波_139

将其变形求极限

python 卡尔曼滤波实现对行人_卡尔曼滤波_140

python 卡尔曼滤波实现对行人_协方差_141

(5)滤波协方差更新矩阵(K时刻的最优协方差误差):

python 卡尔曼滤波实现对行人_协方差_142

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_143

普通卡尔曼滤波是在线性高斯情况下利用最小均方误差获得目标的动态估计,适用于过程和测量都属于线性系统,且误差符合高斯分布的系统,但是实际上很多系统都存在一定的非线性,表现在过程方程(状态方程)是非线性的,或者观测与状态之间的关系(测量方程)是非线性的。这种情况下就不能使用一般的卡尔曼滤波了,解决的方法是将非线性关系线性近似,将其转化为线性问题。

对于非线性问题线性化常用的两个途径:

(1)将非线性环节线性化,对高阶项采用忽略或者逼近措施;(EKF)

(2)用采样方法近似非线性分布;(UKF)

4、扩展卡尔曼滤波器(EKF)

非线性系统模型:

python 卡尔曼滤波实现对行人_最优估计_144

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_145

其中:

python 卡尔曼滤波实现对行人_协方差_124

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_125

python 卡尔曼滤波实现对行人_卡尔曼滤波_148

假设在t时刻已经获得系统状态x的滤波估计

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_149

,将

python 卡尔曼滤波实现对行人_卡尔曼滤波_150


python 卡尔曼滤波实现对行人_最优估计_151


python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_149

附近线性化,即非线性系统将随时在新估计的结果附近进行线性化。将

python 卡尔曼滤波实现对行人_卡尔曼滤波_150


python 卡尔曼滤波实现对行人_最优估计_151


python 卡尔曼滤波实现对行人_协方差_155

附近展开成泰勒级数,忽略二阶以上的高阶项,则获得线性化方程为:

python 卡尔曼滤波实现对行人_最优估计_156

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_157

将其变形,取

python 卡尔曼滤波实现对行人_卡尔曼滤波_158

python 卡尔曼滤波实现对行人_最优估计_159

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_160

非线性系统线性化后的系统状态空间表达式为:

python 卡尔曼滤波实现对行人_最优估计_161

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_162

EKF基本方程:

(1)系统模型;

系统模型:

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_163

测量模型:

python 卡尔曼滤波实现对行人_协方差_164

初始化条件:

python 卡尔曼滤波实现对行人_最优估计_165

其他条件:

python 卡尔曼滤波实现对行人_卡尔曼滤波_148

状态估计方程:

python 卡尔曼滤波实现对行人_最优估计_167

误差协方差:

python 卡尔曼滤波实现对行人_卡尔曼滤波_168

增益矩阵:

python 卡尔曼滤波实现对行人_协方差_169

EKF的不足

(1)当非线性函数的Taylor展开式的高阶项无法忽略时,线性化会使系统产生较大的误差,甚至于滤波器难以稳定;

(2)在许多实际问题中很难得到非线性函数的雅克比矩阵求导;

(3)EKF需要求导,所以必须清楚了解非线性函数的具体形式,无法做到黑盒封装,从而难以模块化应用。

 

5、无迹卡尔曼滤波

由于近似非线性函数的概率密度分布比近似非线性函数更容易,使用采样方法近似非线性分布,来解决非线性问题的途径在最近得到人们的广泛关注。

UKF是一大类采用采用策略逼近非线性分布的方法,UKF以Unscented Transform(UT,无迹变换)为基础,采用卡尔曼滤波框架,具体的采样形式为确定性采样。

UT变换采用确定性采样策略,用多个粒子点逼近函数的概率密度分布,从而获得更高阶次的均值与方差。

无迹变换(UT)

核心思想:近似一种概率分布比近似任意一个非线性函数或非线性变换要容易。

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_170

变换原理:基于当前状态

python 卡尔曼滤波实现对行人_最优估计_171

的均值

python 卡尔曼滤波实现对行人_卡尔曼滤波_172

和方差

python 卡尔曼滤波实现对行人_卡尔曼滤波_173

,构造一组固定数目的采样点,利用这组采样点的样本均值和样本方差逼近非线性变化

python 卡尔曼滤波实现对行人_协方差_174

的均值

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_175

和方差

python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_176

UT变换的具体过程(三步):

(1)取点:根据输入变量

python 卡尔曼滤波实现对行人_最优估计_171

的统计量均值

python 卡尔曼滤波实现对行人_卡尔曼滤波_172

和方差

python 卡尔曼滤波实现对行人_卡尔曼滤波_173

,选择一种

python 卡尔曼滤波实现对行人_卡尔曼滤波_180

点采样策略,得到输入变量的

python 卡尔曼滤波实现对行人_卡尔曼滤波_180


python 卡尔曼滤波实现对行人_python 卡尔曼滤波实现对行人_182

,L以及对应权值

python 卡尔曼滤波实现对行人_协方差_183


python 卡尔曼滤波实现对行人_协方差_184

;(2)点点非线性变换:对所采样个的输入变量

python 卡尔曼滤波实现对行人_卡尔曼滤波_180

点集

python 卡尔曼滤波实现对行人_协方差_186