卡尔曼滤波是最优线性估计器,然而现实世界中被估计过程和对过程的测量绝大多数都是非线性的,这个时候就要用到EKF。
EKF的思想是使用泰勒展开来对当前的估计状态进行局部线性化。假设过程有一个状态向量 x ∈ R n x\in R^{n} x∈Rn,有一个测量量 z ∈ R m z\in R^{m} z∈Rm该过程可用如下的非线性方程表示:
x k = f ( x k − 1 , u k , w k − 1 ) ( 1 ) z k = h ( x k , v k ) ( 2 ) x_{k} = f(x_{k-1},u_{k},w_{k-1})\space(1) \newline z_{k} = h(x_{k},v_{k})\space (2) xk=f(xk−1,uk,wk−1) (1)zk=h(xk,vk) (2)
其中:
- w k , v k w_{k},v_{k} wk,vk分别代表过程噪声和测量噪声。
- f , h f,h f,h均为非线性函数
实际上,没有人能够知道噪声 w k , v k w_{k},v_{k} wk,vk在每一个时间点上的值究竟是什么,所以我们将状态和测量向量近似如下:
x ~ k = f ( x ^ k − 1 , u k , 0 ) ( 3 ) z ~ k = h ( x ~ k , 0 ) ( 4 ) \tilde{x}_{k} = f(\hat{x}_{k-1},u_{k},0)\space (3) \newline \tilde{z}_{k} = h(\tilde{x}_{k},0)\space (4) x~k=f(x^k−1,uk,0) (3)z~k=h(x~k,0) (4)
其中:
- x ^ k \hat{x}_{k} x^k是状态的后验估计
我们对方程(3)和(4)在 x k − 1 x_{k-1} xk−1处使用泰勒展开,并忽略其二阶及二阶以上的导数,可得如下方程:
x k ≈ x ~ k + A (