我们上篇提到的卡尔曼滤波是用于线性系统,是在假设高斯和线性动作(预测)和观测模型下进行的,但是现实中并不是这样的。
高斯分布在非线性系统中的传递结果将不再是高斯分布,通过局部线性来解决非线性的问题。
将非线性的运动方程和观测方程进行以切线代替的方式来线性化。其实就是在均值处进行一阶泰勒展开。
1,扩展kalmanfilter(也称为线性化卡尔曼滤波):
是一个简单的非线性近似滤波算法,指运动或观测方程不是线性的情况。为了简化计算,EKF通过一阶泰勒分解线性化运动/观测方程。KF与EKF具有相同的算法结构,都是以高斯形式描述后验概率密度的,都是通过计算贝叶斯递推公式得到的。最大的不同之处在于,计算方差时,EKF的状态转移矩阵(上一时刻的状态信息k-1|k-1)和观测矩阵(一步预测k|k-1)都是状态信息的雅克比矩阵。
对于EKF,我们选择上一个最优状态估计(即近似平均值)进行线性化。
假设有n维输入,m维输出,则雅克比矩阵维度是m*n。
有了雅克比矩阵之后,就可以使用KF的步骤进行计算了。
还是以之前的小车作为例子应用一下EKF,不过这次测量的方式不再通过GPS直接测量小车位置,而是通过与附近建筑物的角度判断小车的位置。(运动方程有点问题,见上一篇)
EKF存在的主要问题如下:
1. 运动及观察模型用泰勒级数的一阶或二阶展开近似成线性模型,忽略了高阶项,不可避免的引入线性误差,甚至导致滤波器发散。有如下误差补偿方法:
泰勒近似使得状态预测必然存在误差:
A) 补偿状态预测中的误差,附加“人为过程噪声”,即通过增大过程噪声协方差来实现这一点。
B) 扩大状态预测协方差矩阵,用标量加权因子φ>1乘状态预测协方差矩阵
C) 利用对角矩阵φ=diag(sqrt(φi)), φi>1来乘以状态预测协方差矩阵
其实无论增大过程噪声协方差还是状态预测协方差矩阵,都是为了增大kalman增益,即状态预测是不准的,我要减小一步状态预测在状态更新中的权重。
2. 雅克比矩阵(一阶)及海塞矩阵(二阶)计算困难。二阶EKF的性能要好于一阶的,而二阶以上的性能相比于二阶并没有太大的提高,所以超过二阶以上的EKF一般不采用。但二阶EKF的性能虽好,但计算量大,一般情况下不用
下面是一篇博客里的EKF推导过程,链接见片尾参考。