无损卡尔曼滤波又称无迹卡尔曼滤波(Unscented Kalman Filter,UKF),是无损变换(Unscented Transform,UT)与标准卡尔曼滤波体系的结合,通过UT变换使非线性系统方程适用于线性假设下的标准卡尔曼体系。
与EKF不同的是,UKF是通过无损变换使非线性系统方程适用于线性假设下的标准Kalman滤波体系,而不是像EKF那样,必须通过线性化非线性函数实现递推滤波。
UKF的基本思想是卡尔曼滤波与无损变换,它能有效地克服EKF估计精度低、稳定性差的问题,因为不用忽略高阶项,所以对于非线性分布统计量的计算精度高。
离散系统的状态转移方程和观测方程为
不管条件密度函数的特性如何,最小均方误差估计就是条件均值,其中表示期望的计算。
非线性系统的状态估计分成一步预测和测量修正两个步骤:
(1)一步预测
根据所有过去时刻的观测信息对状态做最小均方误差做预测,其协方差矩阵为
(2)观测修正
引入卡尔曼增益,利用实际观测值与预测的观测值的差异,对预测值进行修正
其中,和的计算公式分别为
其中表示第次观测向量的值,表示前次观测向量的值的集合。那么估计值与真实值的误差协方差矩阵为
一般来说,近似非线性函数的概率密度分布比近似非线性函数本身更加容易,因此便有了粒子滤波PF和无迹卡尔曼滤波UKF。粒子滤波通过使用参考分布,随机产生大量粒子,用粒子的分布近似为状态的后验概率密度函数,进而计算得到系统状态的估计,他的主要缺点为粒子数越大计算量就越大,而减少粒子数又会导致整体估计性能下降。而无迹卡尔曼滤波则利用UT变换的思想,使得非线性系统能够适用于线性假设下的卡尔曼滤波体系,其采样形式为确定性采样,在粒子数相对PF较少的情况下,获得较高的逼近精度。
UT变换是用固定数量的参数去近似一个高斯分布,其实现原理为:在原先分布中按某一规则取一些点,使这些点的均值为协方差状态分布与原状态分布的均值和协方差相等;将这些点代入非线性函数中,相应得到非线性函数值点集,通过这些点集可求取变换的均值和协方差。UT变换的实现一般分为以下三个步骤:
(1)构造Sigma点集
根据随机变量的统计量均值和协方差(如果是标量,则为方差),构造Sigma点集
其中为尺度参数,调整其值可以提高逼近精度,为变量的维度。用这一组采样点可以近似地表示变量的高斯分布。
(2)对Sigma点集做非线性变换
经过变换后的Sigma点集即可近似地表示的分布。
(3)计算函数映射后的均值和方差
对变换后的Sigma点集做加权处理,从而得到输出量的均值和方差
权重和的计算如下:
其中参数为第二个尺度参数,通常设置为或;的取值一般在区间内;为状态分布参数,对高斯分布的变量,最优,如果状态变量是标量的话,则最优。
以上就是UT变化的三个步骤,其变换的示意图大致如下图所示:
算法的实现流程原理图如下图所示,图中参数与相当于本博文中的,希望读者不要误解:
UT变换具有以下特点:
那么如何把UT变化应用到卡尔曼滤波框架中呢?笔者将在下一节给出。
UKF=UT+KF,算法的实现分成两步走:
(1)状态的时间更新
选定状态的个Sigma点;
利用UT变换计算后验均值和方差;
(2)状态的观测更新
利用标准的卡尔曼滤波体系更新,但使用的公式有所差异。
根据系统的噪声的存在方式,将其分为加性噪声和隐含噪声,对于两种噪声,UKF滤波的处理方式分为两种,分别是简化的UKF和扩维的UKF,这里仍然假设噪声是高斯分布的。
系统的状态转移方程和观测方程为
,
,
简化UKF滤波算法的流程为:
(1)初始化
(2)状态估计
①计算Sigma点
②时间传播方程
③状态更新方程
以上就是简化UKF滤波算法的全部过程。
系统的状态转移方程和观测方程为
,
,
此时需要对状态变量进行扩展,得到增广状态向量
增广状态的均值和协方差矩阵分别为
其中,分别表示状态噪声和观测噪声的维度。
扩维UKF滤波算法的流程为:
(1)初始化
(2)状态估计
①计算Sigma点
表示增广状态的维度。
②时间传播方程
③状态更新方程
以上就是扩维UKF滤波算法的全部过程。
根据以上两个小节的内容,简化UKF算法的Sigma点数为,而扩维UKF算法的Sigma点数为。可见,处理加性噪声的简化UKF的Sigma点较处理隐含噪声的扩维UKF要少许多,因此计算量也要更少。
现在我们假设在海上有一艘正在做匀速直线运动的船只,其相对于传感器的横纵坐标为为隐藏状态,无法直接获得,而传感器可以测量得到船只相对于传感器的距离和角度,传感器采样的时间间隔为,则:
状态向量,观测向量
状态转移方程和观测方程为:
这里给定距离传感器的噪声均值为,方差为;角度传感器的噪声均值为,方差为(单位弧度);
采样时间点为个,,,;
船只的初始状态为,四个状态量的噪声的方差分别为。仿真结果如下:
从仿真结果可以看出,UKF在这种情形下的滤波效果还是不错的,相比于PF滤波,UKF能更快地跟踪到目标,即收敛速度更快,而且计算的速度几乎跟EKF是一个量级的。但是在实际应用中,对于船只运动的状态转移噪声的均值和协方差矩阵,以及传感器的观测噪声的均值和协方差矩阵,往往都是未知的,有很多情况都只有观测值而已,这样的情形下,就有必要利用观测值对噪声的统计量参数做出适当的估计(学习)。
利用EM算法和极大后验概率估计(MAP),对未知的噪声参数做出估计,再利用估计出的参数去递推卡尔曼滤波的解。本文对EM算法在卡尔曼滤波框架中的推导暂时先不给出,之后可能会补充,这里就先给出一种Adaptive-UKF算法的公式。
,
,
利用递推的方法:
其中,
的取值一般为。
初始的,,和可以设置为任意较小值,然后每做完一轮UKF滤波,就可以更新一次参数,用于下一轮的UKF滤波。利用以上的Adaptive-UKF算法对船只的运动做滤波跟踪,得到的效果如下图所示:
相比于没有做参数估计的UKF滤波,可以看出,Adaptive-UKF在估计误差上与UKF滤波相差不大,而且,它并不需要指定状态转移噪声和观测噪声的参数,将更有利于在实际中的应用。
从整体上看,UKF滤波算法是一个比较优秀的信号滤波与跟踪算法,通过把UT变换应用到卡尔曼滤波框架中,使得不需要计算Jacobi矩阵,不必对非线性函数做任何形式的逼近,即使系统函数不连续,也可以获得不错的滤波性能。而且,UKF对于随机状态的分布不一定要求是高斯分布的,因此UKF具有非常广泛的应用。
UKF与EKF的重要差异是EKF是对高度复杂非线性系统模型函数进行泰勒展开,对展开式进行一阶线性截断处理,这样便可将模型转化为计算机处理的线性问题,然后进行卡尔曼滤波,因此EKF是一种次优滤波,但由于考虑了泰勒级数的展开,因此大大增加了运算量。与对非线性函数的近似相比,高斯分布的近似要简单得多。UKF能获得精确到三阶矩均值和协方差,具有更高的滤波精度,而其计算量仍然与EKF同阶,并且该方法直接使用系统的非线性模型,不需对非线性系统线性化,也不需要像二次滤波那样计算Hession和Jacobi矩阵,提高了运算速度,对线性系统两个具有相同的估计性能。总体来说,对非线性系统,UKF具有更高的滤波精度和稳定性。
[1] S. Peng, C. Chen, H. Shi and Z. Yao, "State of Charge Estimation of Battery Energy Storage Systems Based on Adaptive Unscented Kalman Filter With a Noise Statistics Estimator," in IEEE Access, vol. 5, pp. 13202-13212, 2017.
[2] 卡尔曼滤波系列——(一)标准卡尔曼滤波.
[3] 卡尔曼滤波系列——(二)扩展卡尔曼滤波.
[4] 卡尔曼滤波系列——(三)粒子滤波(重写)
[5] https://max.book118.com/html/2017/0502/103920556.shtm.
原创性声明:本文属于作者原创性文章,小弟码字辛苦,转载还请注明出处。谢谢~
如果有哪些地方表述的不够得体和清晰,有存在的任何问题,亦或者程序存在任何考虑不周和漏洞,欢迎评论和指正,谢谢各路大佬。
需要代码和有需要相关技术支持的可咨询QQ:297461921