前言
我们在博客卡尔曼滤波详细推导中以匀速行驶的小车以及引入加速度之后的非匀速行驶小车为例,介绍了卡尔曼滤波的推导过程,总结了五条公式用于卡尔曼滤波过程中的预测和更新,并讨论了卡尔曼增益 K在其中的作用。
但是,我们实际生活中所遇到的问题并不一定都能够通过一个简单的线性模型进行描述,而更多的是非线性模型。那么此时如果我们还是想通过卡尔曼滤波算法来优化估算状态量该怎么做呢?这就引入了扩展卡尔曼滤波。
扩展卡尔曼滤波能够应用于非线性高斯系统
线性化
现在我们考虑另外一个稍微复杂一些的非线性系统:
当状态转换函数 f ( x t − 1 , u t ) 或者观测函数 g ( x t )不为线性时,其高斯分布的特性就不能得到保证从而导致卡尔曼滤波可能不收敛。因此,我们使用扩展卡尔曼滤波进行处理,它把非线性函数在当前估算专题的平均值附近进行线性化(每两个相邻时刻的过程中都进行局部线性化),然后将得到的雅克比矩阵用于预测和更新卡尔曼滤波器的状态。
计算雅克比矩阵:
则线性化后的系统变为:
接着再对应改变卡尔曼滤波中的公式就得到了相应的扩展卡尔曼滤波。
当然上述过程也有一个使用条件,即非线性化系统能够通过线性化进行很好的近似(函数可导,且能较好的线性近似)。
存在问题
当非线性化系统能够通过线性化进行很好的近似时,扩展卡尔曼滤波是一个较好的解决方案。但是其也存在下述问题:
当函数过于复杂时,难以计算函数导数的解析形式。
以数值的形式进行求导则需要较高的计算成本。
扩展卡尔曼滤波器不适用于具有不连续模型的系统。(因为若函数不连续,则不可导,也就不存在雅克比矩阵,即不能进行线性化)
高度非线性系统的线性化效果不好。(存在非线性函数不能通过线性化进行很好的近似表达)
其他改进方法
无迹卡尔曼滤波
无迹卡尔曼滤波(unscented Kalman Filters, UKF)不同于扩展卡尔曼滤波,它不通过线性化操作来近似非线性函数,而是去近似概率分布。
如上图所示,无迹卡尔曼滤波选取若干个Sigma点(一组最小的采样点,围绕均值两侧均匀分布),让这些点的均值和协方差与该分布相同。接着,使用系统中的非线性函数进行计算,得到一组新的值。
计算经过非线性变换后的输出点的均值和方差,构建一个新的高斯分布(经验高斯分布),并以其来计算更新的状态值。
线性卡尔曼滤波器算法中在预测步骤中使用状态转移函数计算误差协方差 P P P,然后使用测量值进行更新。而无迹卡尔曼滤波是以新的估计的高斯分布进行获取对应的均值和方差。
粒子滤波
与无迹卡尔曼滤波使用相似原理的另外一种方法是粒子滤波器,其使用的样本点称为“粒子”。其具有一个显著的优势是粒子滤波器可以通过大量的粒子来近似任意分布,而不局限与高斯分布。
对我们所提及到的各种方法对应的特性,描述如下:
再次推荐一下这个matlab官方的学习视频,很不错,通俗易懂,感兴趣的可以去看一下:如何通俗并尽可能详细地解释卡尔曼滤波?
码字不易,若有转载还请注明出处!