卡尔曼滤波核心原理是根据系统的估算及协方差、测量值及协方差推算出最优的估计值及协方差。在非线性模型中,扩展卡尔曼滤波丢弃了高阶项,当状态向量复杂时候,求雅克比矩阵难度也会上升。而UKF类似于将高斯分布中的均值,方差通过非线性方程处理后,去匹配预测方程的非线性变换。
假设初始状态满足高斯分布,如X ∼ N(µ, σ^2 ),如经过非线性状态转移方程以后,如何求变换过后的期望和方差呢?
UKF认为:每一个状态(期望和方差),都可以用几个关键点(Sigma点)来表示,当作用于非线性函数f(x)时,只需要将Sigma点作用于非线性函数f(x)得到即可,通过新得到的(关键点)可以计算新的分布状态。
通过上面的介绍,出现几个问题:
- 关键点怎么找
- 找到关键点后如何求出新的状态xk+1,Pk+1
1.关键点怎么找
关键点的意义在于能够充分刻画原状态的分布情况:
其中为当前分布的均值,为尺度参数,一般采用经验值λ=3−nx,调整其值可以提高逼近精度,为变量的维度。用这一组采样点可以近似地表示变量的高斯分布。
2.求新的状态xk+1,Pk+1
通过上面步骤选取了对应的点,又因为已知状态转移公式(这个必须知道,例如车辆运动学公式),因为Kalman只适用于线性状态转移,而一般模型都是非线性的,想使用Kalman必须转化成线性,UKF就是要解决这个问题。
通过状态转移得到新的点,下面计算新的状态:
- 计算函数映射后的均值和方差
均值计算方式: ,其中 是新计算出的点,为每个点的权重。
方差计算方式:,是新点集的均值,为每个点的权重。
2. 计算权重和:
:在i==0时: , 在i!=0时:=
:在i==0时: , 在i!=0时: =
其中 第一步中使用过的尺度参数,的取值一般在区间内;为状态分布参数,对高斯分布的变量,最优,如果状态变量是标量的话,则最优。
- 对非线性函数的概率密度分布进行近似,而不是对非线性函数做近似,算法实现不受模型复杂度的影响;
- 所得到的的非线性函数的统计量的准确性可以达到三阶,而之前EKF的准确性只能达到一阶;
- 无需计算Jacobi矩阵,这样就能处理不可导的非线性函数。
上面讲到UKF如何解决最关键的协方差矩阵的传递,下面介绍UKF的全过程
简化UKF滤波算法的流程为:
(1)初始化
(2)状态估计
①计算Sigma点
②时间传播方程
③状态更新方程
以上就是简化UKF滤波算法的全部过程。
扩维UKF滤波算法(噪声隐含)
系统的状态转移方程和观测方程为
,
,
此时需要对状态变量进行扩展,得到增广状态向量
增广状态的均值和协方差矩阵分别为
其中,分别表示状态噪声和观测噪声的维度。
扩维UKF滤波算法的流程为:
(1)初始化:
(2)状态估计
①计算Sigma点
表示增广状态的维度。
②时间传播方程
③状态更新方程
以上就是扩维UKF滤波算法的全部过程,简化UKF算法的Sigma点数为,而扩维UKF算法的Sigma点数为。可见,处理加性噪声的简化UKF的Sigma点较处理隐含噪声的扩维UKF要少许多,因此计算量也要更少。