本章我们将研究如何处理现实世界中的系统——这些系统往往不是线性高斯的。可以说非线性非高斯(nonlinear non-Gaussian, NLNG)系统的状态估计仍然是一个非常热门的研究课题。限于篇幅,本章仅对一些常见的处理非线性和或非高高斯系统的方法进行讲解。
首先,针对递归滤波问题,我们将介绍一种称为贝叶斯滤波的通用理论框架。我们熟知的扩展卡尔曼滤波、sigmapoint卡尔曼滤波和粒子滤波都可以看作是贝叶斯滤波的的近似。然后,我们再探讨非线性非高斯系统的批量估计问题。
当然,全部的这部分内容比较多,这里将会分为两篇文章进行论述。本文主要讨论的是:离散时间的递归估计。
离散时间的递归估计问题
问题定义
和线性高斯系统的状态估计一样,需要为估计器定义一系列的运动和观测模型。假设讨论的是离散时间情况下的时不变系统,但该系统中包含了非线性方程。定义以下运动和观测模型:
运动方程: k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K
x k = f ( x k − 1 , v k , w k ) x_k=f(x_{k-1},v_k,w_k) xk=f(xk−1,vk,wk)
观测方程: k = 0 , 1 , 2 , . . . , K k=0,1,2,...,K k=0,1,2,...,K
y k = g ( x k , n k ) y_k=g(x_k,n_k) yk=g(xk,nk)
其中, k k k为时间下标。函数 f ( ) f() f()为非线性的运动模型,函数 g ( ) g() g()为非线性的观测模型。其余变量的含义和线性高斯系统的约定一致,不同的是,并没有假设任何随机变量是高斯的。
下图描述的是系统随时间演变的图模型。从这张图上,可以观察到该系统一个非常重要的性质——马尔可夫性。
当一个随机过程在给定现在状态及所有过去状态的情况下,其未来状态的条件概率分布仅依赖于当前状态;换句话说,在给定现在状态时,未来状态与过去状态是条件独立的,那么此随机过程称为马尔可夫过程。
这里的系统就是马尔可夫过程。一旦知道 x k − 1 x_{k-1} xk−1,在不需要知道任何其他过去状态的情况下,就可以向前地推地计算 x k x_k xk。
贝叶斯滤波
线性高斯系统中,从批量式估计开始,接着是递归卡尔曼滤波器。本文中,则从递归滤波器,贝叶斯滤波开始,最后再回归到批量式方法。
贝叶斯滤波仅使用过去以及当前的测量,构造一个完整的PDF来刻画当前状态,即:
p ( x k ∣ x 0 , v 1 : k , y 0 : k ) p(x_k|x_{0},v_{1:k},y_{0:k}) p(xk∣x0,v1:k,y0:k)
回忆批量式LG系统中,可以将其分解成前向递归和后向递归:
p ( x k ∣ x 0 , v 1 : k , y 0 : k ) = η p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) p ( x k ∣ v k + 1 : K , y k + 1 , K ) p(x_k|x_{0},v_{1:k},y_{0:k})=\eta p(x_k|\check x_0,v_{1:k},y_{0:k})p(x_k|v_{k+1:K},y_{k+1,K}) p(xk∣x0,v1:k,y0:k)=ηp(xk∣xˇ0,v1:k,y0:k)p(xk∣vk+1:K,yk+1,K)
因此,关注于将前向部分转换为递归滤波器。
由于所有的观测是独立的,可以将最新的观测分解出来:
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) = η p ( y k ∣ x k ) p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) p(x_k|\check x_0,v_{1:k},y_{0:k})=\eta p(y_k|x_k)p(x_k|\check x_0,v_{1:k},y_{0:k-1}) p(xk∣xˇ0,v1:k,y0:k)=ηp(yk∣xk)p(xk∣xˇ0,v1:k,y0:k−1)
这里用了贝叶斯公式调整了依赖关系。现在将注意力转向第二个因子,引入隐藏状态 x k − 1 x_{k-1} xk−1,并对其进行积分:
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = ∫ p ( x k , x k − 1 ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) d x k − 1 = ∫ p ( x k ∣ x k − 1 , x ˇ 0 , v 1 : k , y 0 : k − 1 ) p ( x k − 1 ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) d x k − 1 \begin{aligned}p(x_k|\check x_0,v_{1:k},y_{0:k-1})&=\int p(x_k,x_{k-1}|\check x_0,v_{1:k},y_{0:k-1})dx_{k-1} \\ &=\int p(x_k|x_{k-1},\check x_0,v_{1:k},y_{0:k-1})p(x_{k-1}|\check x_0,v_{1:k},y_{0:k-1})dx_{k-1}\end{aligned} p(xk∣xˇ0,v1:k,y0:k−1)=∫p(xk,xk−1∣xˇ0,v1:k,y0:k−1)dxk−1=∫p(xk∣xk−1,xˇ0,v1:k,y0:k−1)p(xk−1∣xˇ0,v1:k,y0:k−1)dxk−1
隐藏状态的引入可以看成是边缘化的相反操作。
到这里,还没有引入任何的近似,下一步的操作非常微妙,它是递归式估计中存在许多局限性的原因。由于马尔可夫性,因此:
p ( x k ∣ x k − 1 , x ˇ 0 , v 1 : k , y 0 : k − 1 ) = p ( x k ∣ x k − 1 , v k ) p ( x k − 1 ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = p ( x k − 1 ∣ x ˇ 0 , v 1 : k − 1 , y 0 : k − 1 ) \begin{aligned}p(x_k|x_{k-1},\check x_0,v_{1:k},y_{0:k-1})&=p(x_k|x_{k-1},v_k) \\ p(x_{k-1}|\check x_0,v_{1:k},y_{0:k-1})&=p(x_{k-1}|\check x_0,v_{1:k-1},y_{0:k-1})\end{aligned} p(xk∣xk−1,xˇ0,v1:k,y0:k−1)p(xk−1∣xˇ0,v1:k,y0:k−1)=p(xk∣xk−1,vk)=p(xk−1∣xˇ0,v1:k−1,y0:k−1)
因此:
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) = η p ( y k ∣ x k ) p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = η p ( y k ∣ x k ) ∫ p ( x k ∣ x k − 1 , v k ) p ( x k − 1 ∣ x ˇ 0 , v 1 : k − 1 , y 0 : k − 1 ) d x k − 1 \begin{aligned}p(x_k|\check x_0,v_{1:k},y_{0:k})&=\eta p(y_k|x_k)p(x_k|\check x_0,v_{1:k},y_{0:k-1}) \\ &=\eta p(y_k|x_k) \int p(x_k|x_{k-1},v_k)p(x_{k-1}|\check x_0,v_{1:k-1},y_{0:k-1})dx_{k-1}\end{aligned} p(xk∣xˇ0,v1:k,y0:k)=ηp(yk∣xk)p(xk∣xˇ0,v1:k,y0:k−1)=ηp(yk∣xk)∫p(xk∣xk−1,vk)p(xk−1∣xˇ0,v1:k−1,y0:k−1)dxk−1
可以看出: p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) p(x_k|\check x_0,v_{1:k},y_{0:k}) p(xk∣xˇ0,v1:k,y0:k)是后验置信度, p ( y k ∣ x k ) p(y_k|x_k) p(yk∣xk)利用 g ( ) g() g()进行更新, p ( x k ∣ x k − 1 , v k ) p(x_k|x_{k-1},v_k) p(xk∣xk−1,vk)利用 f ( ) f() f()进行预测, p ( x k − 1 ∣ x ˇ 0 , v 1 : k − 1 , y 0 : k − 1 ) p(x_{k-1}|\check x_0,v_{1:k-1},y_{0:k-1}) p(xk−1∣xˇ0,v1:k−1,y0:k−1)是先验置信度。此式具有预测——校正的形式。
在预测阶段,先验置信度通过输入 v k v_k vk和运动模型 f ( ) f() f()在时间上进行前向传播;在校正阶段,则通过观测 y k y_k yk和观测模型 g ( ) g() g()来更新预测估计状态,并得到后验置信度。
贝叶斯滤波虽然精确,但也仅仅是一个精美的数学产物:除了线性高斯的情况外,在实际中它基本上不可能实现。主要原因有两个:
-
概率密度函数存在于无限维的空间中,因此需要无限的存储空间/参数来完全表示置信度。为了克服这种问题,需要将这个置信度大致地表示出来:一种是将该函数近似为高斯(即只关心一阶矩和二阶矩),另一种是使用有限数量的随机样本来近似;
-
贝叶斯滤波器的积分在计算上十分耗时,因此需要无限的计算资源来计算它。为了克服这种问题,必须对积分进行近似:一种是对运动和观测模型进行线性化,另一种是使用蒙特卡罗积分。
扩展卡尔曼滤波
如果将置信度和噪声限制为高斯分布,并且对运动模型和观测模型进行线性化,计算贝叶斯滤波中的积分(以及归一化积),将得到著名的扩展卡尔曼滤波(EKF)。
为了推导EKF,首先将 x k x_k xk的置信度函数限制为高斯分布:
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) = N ( x ^ k , P ^ k ) p(x_k|\check x_0,v_{1:k},y_{0:k})=N(\hat x_k,\hat P_k) p(xk∣xˇ0,v1:k,y0:k)=N(x^k,P^k)
其中, x ^ k \hat x_k x^k为均值, P ^ k \hat P_k P^k为协方差。接下来,假设噪声变量 w k w_k wk和 n k n_k nk也是高斯的:
w k ∼ N ( 0 , Q k ) n k ∼ N ( 0 , R k ) \begin{aligned}w_k&\sim N(0,Q_k) \\ n_k&\sim N(0,R_k)\end{aligned} wknk∼N(0,Qk)∼N(0,Rk)
请注意,高斯PDF经过非线性函数变换后,可能变成非高斯的。对于噪声变量而言,这种情况也是存在的。换句话说,非线性运动和观测模型可能会对 w k w_k wk和 n k n_k nk造成影响。它们不一定是在非线性函数后以加法的形式存在,即:
x k = f ( x k − 1 , v k ) + w k y k = g ( x k ) + n k \begin{aligned}x_k&=f(x_{k-1},v_k)+w_k \\ y_k&=g(x_k)+n_k\end{aligned} xkyk=f(xk−1,vk)+wk=g(xk)+nk
而是包含在非线性函数之内,即:
x k = f ( x k − 1 , v k , w k ) y k = g ( x k , n k ) \begin{aligned}x_k&=f(x_{k-1},v_k,w_k) \\ y_k&=g(x_k,n_k)\end{aligned} xkyk=f(xk−1,vk,wk)=g(xk,nk)
然而,可以通过线性化将其恢复为加性噪声的形式。
由于 g ( ) g() g()和 f ( ) f() f()的非线性特征,无法计算得到贝叶斯滤波中积分的闭式解,转而使用线性化的方法,在当前状态估计的均值处展开,对运动和观测模型进行线性化。
f ( x k − 1 , v k , w k ) ≈ x ˇ k + F k − 1 ( x k − 1 − x ^ k − 1 ) + w k ′ g ( x k , n k ) ≈ y ˇ k + G k ( x k − x ˇ k ) + n k ′ \begin{aligned}f(x_{k-1},v_k,w_k)&\approx \check x_k+F_{k-1}(x_{k-1}-\hat x_{k-1})+w_k^{'} \\ g(x_k,n_k)&\approx \check y_k+G_k(x_k-\check x_k)+n_k^{'}\end{aligned} f(xk−1,vk,wk)g(xk,nk)≈xˇk+Fk−1(xk−1−x^k−1)+wk′≈yˇk+Gk(xk−xˇk)+nk′
其中,
x ˇ k = f ( x ^ k − 1 , v k , 0 ) F k − 1 = ∂ f ( x k − 1 , v k , w k ) ∂ x k − 1 ∣ x ^ k − 1 , v k , 0 w k ′ = w k ∂ f ( x k − 1 , v k , w k ) ∂ w k ∣ x ^ k − 1 , v k , 0 \begin{aligned}\check x_k&=f(\hat x_{k-1},v_k,0) \\ F_{k-1}&=\frac{\partial f(x_{k-1},v_k,w_k)}{\partial x_{k-1}}|_{\hat x_{k-1},v_k,0} \\ w_k^{'}&=w_k\frac{\partial f(x_{k-1},v_k,w_k)}{\partial w_{k}}|_{\hat x_{k-1},v_k,0}\end{aligned} xˇkFk−1wk′=f(x^k−1,vk,0)=∂xk−1∂f(xk−1,vk,wk)∣x^k−1,vk,0=wk∂wk∂f(xk−1,vk,wk)∣x^k−1,vk,0
y ˇ k = g ( x ˇ k , 0 ) G k = ∂ g ( x k , n k ) ∂ x k ∣ x ˇ k , 0 n k ′ = n k ∂ g ( x k , n k ) ∂ n k ∣ x ˇ k , 0 \begin{aligned}\check y_k&=g(\check x_k,0) \\ G_k&=\frac{\partial g(x_k,n_k)}{\partial x_k}|_{\check x_k,0} \\ n_k^{'}&=n_k\frac{\partial g(x_k,n_k)}{\partial n_k}|_{\check x_k,0}\end{aligned} yˇkGknk′=g(xˇk,0)=∂xk∂g(xk,nk)∣xˇk,0=nk∂nk∂g(xk,nk)∣xˇk,0
给定过去的状态和最新输入,则当前状态 x k x_k xk的统计学特性为:
x k ≈ x ˇ k + F k − 1 ( x k − 1 − x ^ k − 1 ) + w k ′ E [ x k ] ≈ x ˇ k + F k − 1 ( x k − 1 − x ^ k − 1 ) + E [ w k ′ ] E [ ( x k − E [ x k ] ) ( x k − E [ x k ] ) T ] ≈ E [ w k ′ ( w k ′ ) T ] p ( x k ∣ x k − 1 , v k ) ≈ N ( x ˇ k + F k − 1 ( x k − 1 − x ^ k − 1 ) , Q k ′ ) \begin{aligned}x_k&\approx \check x_k+F_{k-1}(x_{k-1}-\hat x_{k-1})+w_k^{'} \\ E[x_k]&\approx \check x_k+F_{k-1}(x_{k-1}-\hat x_{k-1})+E[w_k^{'}] \\ E[(x_k-E[x_k])(x_k-E[x_k])^T]&\approx E[w_k^{'}(w_k^{'})^T] \\ p(x_k|x_{k-1},v_k)&\approx N(\check x_k+F_{k-1}(x_{k-1}-\hat x_{k-1}),Q_k^{'})\end{aligned} xkE[xk]E[(xk−E[xk])(xk−E[xk])T]p(xk∣xk−1,vk)≈xˇk+Fk−1(xk−1−x^k−1)+wk′≈xˇk+Fk−1(xk−1−x^k−1)+E[wk′]≈E[wk′(wk′)T]≈N(xˇk+Fk−1(xk−1−x^k−1),Qk′)
给定当前状态,则当前观测 y k y_k yk的统计学特性为:
y k ≈ y ˇ k + G k ( x k − x ˇ k ) + n k ′ E [ y k ] ≈ y ˇ k + G k ( x k − x ˇ k ) + E [ n k ′ E [ ( y k − E [ y k ] ) ( y k − E [ y k ] ) T ] ≈ E [ n k ′ ( n k ′ ) T ] p ( y k ∣ x k ) ≈ N ( y ˇ k + G k ( x k − x ˇ k ) , R k ′ ) \begin{aligned}y_k&\approx \check y_k+G_k(x_k-\check x_k)+n_k^{'} \\ E[y_k]&\approx \check y_k+G_k(x_k-\check x_k)+E[n_k^{'} \\ E[(y_k-E[y_k])(y_k-E[y_k])^T]&\approx E[n_k^{'}(n_k^{'})^T] \\ p(y_k|x_k)&\approx N(\check y_k+G_k(x_k-\check x_k),R_k^{'})\end{aligned} ykE[yk]E[(yk−E[yk])(yk−E[yk])T]p(yk∣xk)≈yˇk+Gk(xk−xˇk)+nk′≈yˇk+Gk(xk−xˇk)+E[nk′≈E[nk′(nk′)T]≈N(yˇk+Gk(xk−xˇk),Rk′)
将上面的等式代入被贝叶斯滤波中,则可以得到:
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) = η p ( y k ∣ x k ) ∫ p ( x k ∣ x k − 1 , v k ) p ( x k − 1 ∣ x ˇ 0 , v 1 : k − 1 , y 0 : k − 1 ) d x k − 1 p(x_k|\check x_0,v_{1:k},y_{0:k})=\eta p(y_k|x_k) \int p(x_k|x_{k-1},v_k)p(x_{k-1}|\check x_0,v_{1:k-1},y_{0:k-1})dx_{k-1} p(xk∣xˇ0,v1:k,y0:k)=ηp(yk∣xk)∫p(xk∣xk−1,vk)p(xk−1∣xˇ0,v1:k−1,y0:k−1)dxk−1
则:
N ( x ^ k , P ^ k ) = η N ( y ˇ k + G k ( x k − x ˇ k ) , R k ′ ) × ∫ N ( x ˇ k + F k − 1 ( x k − 1 − x ^ k − 1 ) , Q k ′ ) N ( x ^ k − 1 , P ^ k − 1 ) d x k − 1 N(\hat x_k,\hat P_k)=\eta N(\check y_k+G_k(x_k-\check x_k),R_k^{'}) \times \int N(\check x_k+F_{k-1}(x_{k-1}-\hat x_{k-1}),Q_k^{'})N(\hat x_{k-1},\hat P_{k-1})dx_{k-1} N(x^k,P^k)=ηN(yˇk+Gk(xk−xˇk),Rk′)×∫N(xˇk+Fk−1(xk−1−x^k−1),Qk′)N(x^k−1,P^k−1)dxk−1
利用将服从高斯分布的变量传入非线性函数的线性化之后,其积分仍然是高斯的:
N ( x ^ k , P ^ k ) = η N ( y ˇ k + G k ( x k − x ˇ k ) , R k ′ ) × N ( x ˇ k , F k − 1 P ^ k − 1 F k − 1 T + Q k ′ ) N(\hat x_k,\hat P_k)=\eta N(\check y_k+G_k(x_k-\check x_k),R_k^{'}) \times N(\check x_k,F_{k-1}\hat P_{k-1}F_{k-1}^T+Q_k^{'}) N(x^k,P^k)=ηN(yˇk+Gk(xk−xˇk),Rk′)×N(xˇk,Fk−1P^k−1Fk−1T+Qk′)
现在只剩下两个高斯PDF的归一化积,经过一系列的代数化简,可以得到:
N ( x ^ k , P ^ k ) = N ( x ˇ k + K k ( y k − y ˇ k ) , ( 1 − K k G k ) ( F k − 1 P ^ k − 1 F k − 1 T + Q k ′ ) ) N(\hat x_k,\hat P_k)=N(\check x_k+K_k(y_k-\check y_k),(1-K_kG_k)(F_{k-1}\hat P_{k-1}F_{k-1}^T+Q_k^{'})) N(x^k,P^k)=N(xˇk+Kk(yk−yˇk),(1−KkGk)(Fk−1P^k−1Fk−1T+Qk′))
对比左右两侧:
预测:
x ˇ k = f ( x ^ k − 1 , v k , 0 ) P ˇ k = F k − 1 P ^ k − 1 F k − 1 T + Q k ′ \begin{aligned}\check x_k&=f(\hat x_{k-1},v_k,0) \\ \check P_k&=F_{k-1}\hat P_{k-1}F_{k-1}^T+Q_k^{'}\end{aligned} xˇkPˇk=f(x^k−1,vk,0)=Fk−1P^k−1Fk−1T+Qk′
卡尔曼增益:
K k = P ˇ k G k T ( G k P ˇ k G k T + R k ′ ) − 1 K_k=\check P_kG_k^T(G_k\check P_kG_k^T+R_k^{'})^{-1} Kk=PˇkGkT(GkPˇkGkT+Rk′)−1
更新:
x ^ k = x ˇ k + K k ( y k − g ( x ˇ k , 0 ) ) P ^ k = ( 1 − K k G k ) P ˇ k \begin{aligned}\hat x_k&=\check x_k+K_k(y_k-g(\check x_k,0)) \\ \hat P_k&=(1-K_kG_k)\check P_k\end{aligned} x^kP^k=xˇk+Kk(yk−g(xˇk,0))=(1−KkGk)Pˇk
这就是EKF的经典递归方程,可以从 { x ^ k − 1 , P ^ k − 1 } \{\hat x_{k-1},\hat P_{k-1}\} {x^k−1,P^k−1}计算出 { x ^ k , P ^ k } \{\hat x_k,\hat P_k\} {x^k,P^k}。这与线性高斯的主要区别:
-
通过非线性的运动和观测模型来传递估计的均值;
-
噪声协方差 Q k ′ Q_k^{'} Qk′和 R k ′ R_k^{'} Rk′中包含了雅可比矩阵,这是因为允许噪声应用于非线性模型中。
需要注意的是,EKF并不能保证在所有的非线性系统中能够充分发挥作用。EKF的主要问题在于,其线性化的工作点是估计状态的均值,而不是真实状态。这一点微小的差异可能导致EKF在某些情况下快速地发散。有时EKF的估计虽然没有什么明显异常,但常常是有偏或不一致的,更经常是两者都有。
广义高斯滤波
贝叶斯滤波的迷人之处在于它具有精确的表达,可以采用不同的近似形式和处理,推导出一些可实现的滤波器。不过假设估计的状态是高斯的,就存在更清晰的推导方式。
一般来说,先从 k − 1 k-1 k−1时刻的高斯先验开始:
p ( x k − 1 ∣ x ˇ 0 , v 1 : k − 1 , y 0 : k − 1 ) = N ( x ^ k − 1 , P ^ k − 1 ) p(x_{k-1}|\check x_0,v_{1:k-1},y_{0:k-1})=N(\hat x_{k-1},\hat P_{k-1}) p(xk−1∣xˇ0,v1:k−1,y0:k−1)=N(x^k−1,P^k−1)
通过非线性运动模型 f ( ) f() f()在时间上向前传递,得到 k k k时刻的高斯先验:
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = N ( x ˇ k , P ˇ k ) p(x_k|\check x_0,v_{1:k},y_{0:k-1})=N(\check x_k,\check P_k) p(xk∣xˇ0,v1:k,y0:k−1)=N(xˇk,Pˇk)
这是预测步骤,结合了最新的输入 v k v_k vk。
对于校正步骤,写出在时刻 k k k的状态和最新测量的联合高斯分布:
p ( x k , y k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = N ( [ μ x , k μ y , k ] , [ Σ x x , k Σ x y , k Σ y x , k Σ y y , k ] ) p(x_k,y_k|\check x_0,v_{1:k},y_{0:k-1})=N(\begin{bmatrix}\mu_{x,k}\\\mu_{y,k}\end{bmatrix},\begin{bmatrix}\Sigma_{xx,k}&\Sigma_{xy,k}\\\Sigma_{yx,k}&\Sigma_{yy,k}\end{bmatrix}) p(xk,yk∣xˇ0,v1:k,y0:k−1)=N([μx,kμy,k],[Σxx,kΣyx,kΣxy,kΣyy,k])
然后得到 x k x_k xk的条件高斯密度函数(即后验概率):
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) = N ( μ x , k + Σ x y , k Σ y y , k − 1 ( y k − μ y , k ) , Σ x x , k − Σ x y , k Σ y y , k − 1 Σ y x , k ) p(x_k|\check x_0,v_{1:k},y_{0:k})=N(\mu_{x,k}+\Sigma_{xy,k}\Sigma_{yy,k}^{-1}(y_k-\mu_{y,k}),\Sigma_{xx,k}-\Sigma_{xy,k}\Sigma_{yy,k}^{-1}\Sigma_{yx,k}) p(xk∣xˇ0,v1:k,y0:k)=N(μx,k+Σxy,kΣyy,k−1(yk−μy,k),Σxx,k−Σxy,kΣyy,k−1Σyx,k)
其中, μ y , k \mu_{y,k} μy,k通过非线性观测模型 g ( ) g() g()来计算。这里,可以写出广义高斯滤波中校正步骤的方程:
K k = Σ x y , k Σ y y , k − 1 x ^ k = x ˇ k + K k ( y k − μ y , k ) P ^ k = P ˇ k − K k Σ x y , k T \begin{aligned}K_k&=\Sigma_{xy,k}\Sigma_{yy,k}^{-1} \\ \hat x_k&=\check x_k+K_k(y_k-\mu_{y,k}) \\ \hat P_k&=\check P_k-K_k\Sigma_{xy,k}^T\end{aligned} Kkx^kP^k=Σxy,kΣyy,k−1=xˇk+Kk(yk−μy,k)=Pˇk−KkΣxy,kT
其中,令 μ x , k = x ˇ k \mu_{x,k}=\check x_k μx,k=xˇk, Σ x x , k = P ˇ k \Sigma_{xx,k}=\check P_k Σxx,k=Pˇk, K k K_k Kk为卡尔曼增益。然而,除非运动和观测模型是线性的,否则无法计算所需的剩余的变量: μ y , k \mu_{y,k} μy,k, Σ y y , k \Sigma_{yy,k} Σyy,k和 Σ x y , k \Sigma_{xy,k} Σxy,k。这是因为将高斯PDF代入非线性函数中通常会成为非高斯的。因此,在这个截断需要考虑对齐进行近似。
迭代扩展卡尔曼滤波
基于EKF的内容,接下来完成**迭代扩展卡尔曼滤波(IEKF)**的推导。其中预测步骤相当直接,与EKF基本相同,因此不再赘述。但需要注意的是,在 k k k时刻的先验为:
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = N ( x ˇ k , P ˇ k ) p(x_k|\check x_0,v_{1:k},y_{0:k-1})=N(\check x_k,\check P_k) p(xk∣xˇ0,v1:k,y0:k−1)=N(xˇk,Pˇk)
包含了 v k v_k vk。
校正步骤则会更有意思一些。非线性观测模型为:
y k = g ( x k , n k ) y_k=g(x_k,n_k) yk=g(xk,nk)
对其中任意一个点 x o p , k x_{op,k} xop,k进行线性化,可得:
g ( x k , n k ) ≈ y o p , k + G k ( x k − x o p , k ) + n k ′ g(x_k,n_k)\approx y_{op,k}+G_k(x_k-x_{op,k})+n_k^{'} g(xk,nk)≈yop,k+Gk(xk−xop,k)+nk′
其中:
y o p , k = g ( x o p , k , 0 ) G k = ∂ g ( x k , n k ) ∂ x k ∣ x o p , k , 0 n k ′ = n k ∂ g ( x k , n k ) ∂ n k ∣ x o p , k , 0 \begin{aligned}y_{op,k}&=g(x_{op,k},0) \\ G_k&=\frac{\partial g(x_k,n_k)}{\partial x_k}|_{x_{op,k},0} \\ n_k^{'}&=n_k\frac{\partial g(x_k,n_k)}{\partial n_k}|_{x_{op,k},0}\end{aligned} yop,kGknk′=g(xop,k,0)=∂xk∂g(xk,nk)∣xop,k,0=nk∂nk∂g(xk,nk)∣xop,k,0
注意,观测模型和雅可比矩阵均在 x o p , k x_{op,k} xop,k处计算。
使用上面这种线性化的模型,可以将时刻 k k k处的状态和测量的联合概率近似为高斯分布:
p ( x k , y k ∣ x ˇ 0 , v 1 : k , y 0 : k ) ≈ N ( [ μ x , k μ y , k ] , [ Σ x x , k Σ x y , k Σ y x , k Σ y y , k ] ) = N ( [ x ˇ k y o p , k + G k ( x ˇ k − x o p , k ) ] , [ P ˇ k P ˇ k G k T G k P ˇ k G k P ˇ k G k T + R k ′ ] ) \begin{aligned}p(x_k,y_k|\check x_0,v_{1:k},y_{0:k})&\approx N(\begin{bmatrix}\mu_{x,k}\\\mu_{y,k}\end{bmatrix},\begin{bmatrix}\Sigma_{xx,k}&\Sigma_{xy,k}\\\Sigma_{yx,k}&\Sigma_{yy,k}\end{bmatrix}) \\ &=N(\begin{bmatrix}\check x_k\\y_{op,k}+G_k(\check x_k-x_{op,k})\end{bmatrix},\begin{bmatrix}\check P_k&\check P_kG_k^T\\G_k\check P_k&G_k\check P_kG_k^T+R_k^{'}\end{bmatrix})\end{aligned} p(xk,yk∣xˇ0,v1:k,y0:k)≈N([μx,kμy,k],[Σxx,kΣyx,kΣxy,kΣyy,k])=N([xˇkyop,k+Gk(xˇk−xop,k)],[PˇkGkPˇkPˇkGkTGkPˇkGkT+Rk′])
如果测量值 y k y_k yk一致,可以得到 x k x_k xk的条件高斯密度函数(即后验概率):
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) = N ( μ x , k + Σ x y , k Σ y y , k − 1 ( y k − μ y , k ) , Σ x x , k − Σ x y , k Σ y y , k − 1 Σ y x , k ) p(x_k|\check x_0,v_{1:k},y_{0:k})=N(\mu_{x,k}+\Sigma_{xy,k}\Sigma_{yy,k}^{-1}(y_k-\mu_{y,k}),\Sigma_{xx,k}-\Sigma_{xy,k}\Sigma_{yy,k}^{-1}\Sigma_{yx,k}) p(xk∣xˇ0,v1:k,y0:k)=N(μx,k+Σxy,kΣyy,k−1(yk−μy,k),Σxx,k−Σxy,kΣyy,k−1Σyx,k)
那么,校正步骤的方程:
K k = Σ x y , k Σ y y , k − 1 x ^ k = x ˇ k + K k ( y k − μ y , k ) P ^ k = P ˇ k − K k Σ x y , k T \begin{aligned}K_k&=\Sigma_{xy,k}\Sigma_{yy,k}^{-1} \\ \hat x_k&=\check x_k+K_k(y_k-\mu_{y,k}) \\ \hat P_k&=\check P_k-K_k\Sigma_{xy,k}^T\end{aligned} Kkx^kP^k=Σxy,kΣyy,k−1=xˇk+Kk(yk−μy,k)=Pˇk−KkΣxy,kT
将矩 μ y , k \mu_{y,k} μy,k、 Σ y y , k \Sigma_{yy,k} Σyy,k和 Σ x y , k \Sigma_{xy,k} Σxy,k代入,可以得到:
K k = P ˇ k G k T ( G k P ˇ k G k T + R k ′ ) − 1 x ^ k = x ˇ k + K k ( y k − y o p , k − G k ( x ˇ k − x o p , k ) ) P ^ k = ( 1 − K k G k ) P ˇ k \begin{aligned}K_k&=\check P_kG_k^T(G_k\check P_kG_k^T+R_k^{'})^{-1} \\\hat x_k&=\check x_k+K_k(y_k-y_{op,k}-G_k(\check x_k-x_{op,k})) \\ \hat P_k&=(1-K_kG_k)\check P_k\end{aligned} Kkx^kP^k=PˇkGkT(GkPˇkGkT+Rk′)−1=xˇk+Kk(yk−yop,k−Gk(xˇk−xop,k))=(1−KkGk)Pˇk
这些方程中的卡尔曼增益和校正方程和EKF的非常相似:唯一的区别在于线性化的工作点。如果将线性化的工作点设置为预测先验的均值,即 x o p , k = x ˇ k x_{op,k}=\check x_k xop,k=xˇk,那么两者是完全相同的。
然而,当迭代地进行校正步骤的计算,并且在每一次迭代中将工作点设置为上一次迭代的后验均值,将会得到更好的结果:
x o p , k ⟵ x ^ k x_{op,k}\longleftarrow \hat x_k xop,k⟵x^k
在第一次迭代中,令 x o p , k = x ˇ k x_{op,k}=\check x_k xop,k=xˇk。这使得能够对更好的估计进行线性化,从而改进每次迭代的近似程度。在迭代的过程中,若 x o p , k x_{op,k} xop,k的改变足够小的时候就终止迭代。
从MAP角度看IEKF
一个重要的问题:EKF、IEKF和全贝叶斯后验之间的关系是什么?
可以发现,IEKF对应于全后验概率的(局部)极大值;换句话说,它是一个MAP估计。另一方面,由于EKF的校正部分没有迭代,它可能远离局部最大值;实际上很难说清楚它与全后验概率的关系。
其他将PDF传入非线性函数的方法
在推导EKF和IEKF时,通过在非线性模型的工作点处进行线性化的方式将PDF传递进非线性函数中。这当然是一种可行的方法,但还存在其他的方法。通常的方法有:蒙特卡罗方法(暴力的)、线性化方法(EKF,IEKF采用的)、sigma point无迹变换。
蒙特卡罗方法
蒙特卡罗方法本质上是一种暴力的方法。根据输入的概率密度采集大量样本,接着通过非线性函数将每一个样本精确地进行转换,最后从转换的样本中构建输出的概率密度。
笼统地说,大数定律确保了当样本数量接近无穷大时,这种做法将会使结果收敛到正确的值。
这种方法明显存在的问题就是,它可能非常低效,特别是在高维问题上。除了这个明显的缺点,这个方法也存在着一些优点:
-
适用于任何PDF,而不仅仅是高斯分布;
-
可以处理任何类型的非线性函数,不要求可微,连续,甚至不需要知道其数学形式;
-
这是一个任意时间的算法,即计算时间可以随要求进行调整,只需要调整采样点数量。
另一个值得一提的地方是,输出概率密度的均值,和输入概率密度的均值通过非线性变换后的值,是不同的。
线性化方法
通过非线性函数传递高斯PDF最常见的方法就是线性化,严格地说,均值实际上是通过非线性函数精确地传递的,而协方差则是近似地通过非线性函数的线性化版本。通常,线性化过程的工作点是PDF的均值。这个过程是非常不准确的,原因如下:
-
通过非线性函数的高斯PDF的结果不会是另一个高斯PDF,线性化方法只保留了后验PDF的均值和协方差,丢弃了高阶矩,是一种近似;
-
简单地将先验PDF的均值经过非线性变换来逼近真实输出PDF的均值;
-
通过线性化非线性函数来近似真实输出PDF的协方差;
-
线性化的工作点通常不是先验PDF的真实均值,而是对输入PDF均值的估计。
线性化另一个缺点是,必须解析/数值地计算非线性函数的雅可比矩阵。
尽管有着种种近似和缺点,但是如果函数只是轻微的非线性,并且输入是高斯的,那么线性化方法可以说是一种简单易懂并且易于实现的方法。线性化方法的一个优点是:线性化的操作实际上是可逆的(如果非线性函数是局部可逆的)。也就是说,可以将输出PDF通过非线性函数的逆来精确地恢复输入PDF。但是这对其它通过非线性函数传递PDF的方法来说,并不都成立,因为它们并不像线性化方法那样做出相同的近似。
sigma point变换
从某种意义上说,当输入概率密度大致为高斯时,sigma point或无迹变换是蒙特卡罗方法和线性化方法的折中。它比线性化方法更准确,除了计算开销稍大一些。蒙特卡罗仍然是最准确的方法,但在大多数情况下,其计算开销令人望而生畏。
sigmapoint变换是一系列的变换方法。一般来说,任何一个sigma point变换的版本,都是在输入概率密度均值的基础版本上添加一个附加样本。
对称采样策略的sigma point变换,具体步骤如下:
- 根据输入概率密度 N ( μ x , Σ x x ) N(\mu_x,\Sigma_{xx}) N(μx,Σxx)计算出 2 L + 1 2L+1 2L+1个sigma point:
L L T = Σ x x x 0 = μ x x i = μ x + l + κ L c o l i x i + L = μ x − l + κ L c o l i \begin{aligned}LL^T&=\Sigma_{xx} \\ x_0&=\mu_x \\ x_i&=\mu_x+\sqrt{l+\kappa}L_{col_i} \\ x_{i+L}&=\mu_x-\sqrt{l+\kappa}L_{col_i}\end{aligned} LLTx0xixi+L=Σxx=μx=μx+l+κLcoli=μx−l+κLcoli
其中, l = d i m ( μ x ) l=dim(\mu_x) l=dim(μx), i = 1 , 2 , . . . , l i=1,2,...,l i=1,2,...,l。 κ \kappa κ是比例系数,用以调节sigma点的分散情况,它的选取仅影响三阶及以上的高阶矩带来的偏差;对于高斯分布,影响四阶及以上的高阶矩。
μ x = ∑ i = 0 2 L w i x i Σ x x = ∑ i = 0 2 L w i ( x i − μ x ) ( x i − μ x ) T \begin{aligned}\mu_x&=\sum_{i=0}^{2L}w_ix_i \\ \Sigma_{xx}&=\sum_{i=0}^{2L}w_i(x_i-\mu_x)(x_i-\mu_x)^T\end{aligned} μxΣxx=i=0∑2Lwixi=i=0∑2Lwi(xi−μx)(xi−μx)T
其中,
w 0 = κ l + κ w i = 1 2 ( l + κ ) \begin{aligned}w_0&=\frac{\kappa}{l+\kappa} \\ w_i&=\frac{1}{2(l+\kappa)}\end{aligned} w0wi=l+κκ=2(l+κ)1
其中, i = 1 , 2 , . . . , 2 l i=1,2,...,2l i=1,2,...,2l。
- 把每个sigma point单独代入非线性函数 g ( ) g() g()中:
y i = g ( x i ) y_i=g(x_i) yi=g(xi)
- 输出概率的均值 μ y \mu_y μy、协方差 Σ y y \Sigma_{yy} Σyy通过下面的式子计算:
μ y = ∑ i = 0 2 L w i y i Σ y y = ∑ i = 0 2 L w i ( y i − μ y ) ( y i − μ y ) T \begin{aligned}\mu_y&=\sum_{i=0}^{2L}w_iy_i \\ \Sigma_{yy}&=\sum_{i=0}^{2L}w_i(y_i-\mu_y)(y_i-\mu_y)^T\end{aligned} μyΣyy=i=0∑2Lwiyi=i=0∑2Lwi(yi−μy)(yi−μy)T
- 最终得到输出概率密度 N ( μ y , Σ y y ) N(\mu_y,\Sigma_{yy}) N(μy,Σyy)。
一般来说, l + κ = 3 l+\kappa=3 l+κ=3。
由于 κ \kappa κ的取值可正可负,当 l > 3 l>3 l>3时, κ \kappa κ的取值为负,此时就无法确保协方差矩阵的半正定性。当然,在实际应用中, κ \kappa κ的选取并不一定要满足 l + κ = 3 l+\kappa=3 l+κ=3这个条件,只是这样的话,对称采样对后验分布的捕捉精度会略微下降。
但不管如何,对称采样下的sigma点对任意非线性状态后验分布的近似精度可达泰勒2阶,对高斯分布可达3阶。当满足 l + κ = 3 l+\kappa=3 l+κ=3时,对高斯分布可达4阶。
对称采样过程中,随着 l l l的增加,sigma点到中心的距离会越来越远,产生了采样的非局部效应,即sigma采样点所携带的均值特征越来越少,从而导致无法准确计算后验分布。另外,如果 κ \kappa κ为负,则会导致无法确保协方差的半正定性。为了消除采样的非局部效应,理论上 L + κ L+\kappa L+κ的取值越小越好。
以二维高斯PDF为例,最终获取到的sigma point大致为:
为了使对 κ \kappa κ的选取不受过多的限制,可以选择比例修正对称采样策略的sigma point变换。与对称采样的差别主要体现在采样上:
L L T = Σ x x x 0 = μ x x i = μ x + l + λ L c o l i x i + L = μ x − l + λ L c o l i \begin{aligned}LL^T&=\Sigma_{xx} \\x_0&=\mu_x \\ x_i&=\mu_x+\sqrt{l+\lambda}L_{col_i} \\ x_{i+L}&=\mu_x-\sqrt{l+\lambda}L_{col_i}\end{aligned} LLTx0xixi+L=Σxx=μx=μx+l+λLcoli=μx−l+λLcoli
其中, l = d i m ( μ x ) l=dim(\mu_x) l=dim(μx), i = 1 , 2 , . . . , l i=1,2,...,l i=1,2,...,l。
μ x = ∑ i = 0 2 L w i m x i Σ x x = ∑ i = 0 2 L w i c ( x i − μ x ) ( x i − μ x ) T \begin{aligned}\mu_x&=\sum_{i=0}^{2L}w_i^mx_i \\ \Sigma_{xx}&=\sum_{i=0}^{2L}w_i^c(x_i-\mu_x)(x_i-\mu_x)^T\end{aligned} μxΣxx=i=0∑2Lwimxi=i=0∑2Lwic(xi−μx)(xi−μx)T
其中,
w 0 m = λ l + λ w i m = 1 2 ( l + λ ) w 0 c = λ l + λ + 1 + β − α 2 w i c = 1 2 ( l + λ ) \begin{aligned}w_0^m&=\frac{\lambda}{l+\lambda} \\ w_i^m&=\frac{1}{2(l+\lambda)} \\ w_0^c&=\frac{\lambda}{l+\lambda}+1+\beta-\alpha^2 \\ w_i^c&=\frac{1}{2(l+\lambda)}\end{aligned} w0mwimw0cwic=l+λλ=2(l+λ)1=l+λλ+1+β−α2=2(l+λ)1
其中, i = 1 , 2 , . . . , 2 l i=1,2,...,2l i=1,2,...,2l, λ = α 2 ( L + κ ) − l \lambda=\alpha^{2}(L+\kappa)-l λ=α2(L+κ)−l。 κ \kappa κ仍为比例参数。
一般情况下, l + κ = 3 l+\kappa=3 l+κ=3,但需要确保协方差矩阵的半正定性。 α \alpha α是正值的比例缩放因子, 1 ≤ α ≤ 1 1\le\alpha\le1 1≤α≤1,它的取值会影响sigma点的分散程度,从而影响后验分布的捕捉精度。当系统非线性程度严重时, α \alpha α可以取一个非常小的正值,以避免采样点的非局域效应的影响。 β \beta β是一个非负的权系数,它的取值会影响协方差的近似精度。对于高斯分布, β \beta β的最佳选择是 β = 2 \beta=2 β=2。
这样的好处是,在对称采样中,对于 l > 3 l>3 l>3时,为了保证协方差矩阵的半正定性, κ \kappa κ不能为负,但是 κ > 0 \kappa>0 κ>0时,sigma点就变得分散,影响采样的非局部效应。而比例修正对称采样, α 2 ( l + κ ) \alpha^2(l+\kappa) α2(l+κ)多乘了一个 α 2 \alpha^2 α2系数,此时可以使得sigma点变得聚集,提高后验分布的精度。
相比于线性化方法,这种方法具有许多优点:
-
通过对输入密度进行近似,避免了线性化方法中非线性函数的雅可比矩阵(解析或数值)的计算;
-
仅使用标准线性代数运算(Cholesky分解、外积、矩阵求和);
-
不要求非线性函数光滑和可微,计算代价和线性化方法差不多。
粒子滤波
采集大量的样本就可以近似地描述PDF,再将每个样本代入非线性函数中进行重新组合,可以获得PDF转换后的近似值。
粒子滤波是唯一一种能够处理非高斯噪声、非线性观测模型和运动模型的实用技术。其实用之处在于它很容易实现:甚至不需要知道 f ( ) f() f()和 g ( ) g() g()的解析表达式,也不需要求得它们的偏导。
粒子滤波器有很多版本,我们介绍一个基础版本,然后指出从哪些地方可以推出一些变化。这里采用的方法是重要性采样(sample importance resampling)。主要步骤如下:
- 从由先验和运动噪声的联合概率密度中抽取 M M M个样本:
[ x ^ k − 1 , m w k , m ] ⟵ p ( x k − 1 ∣ x ˇ 0 , v 1 : k , y 1 : k − 1 ) p ( w k ) \begin{bmatrix}\hat x_{k-1,m}\\w_{k,m}\end{bmatrix}\longleftarrow p(x_{k-1}|\check x_0,v_{1:k},y_{1:k-1})p(w_k) [x^k−1,mwk,m]⟵p(xk−1∣xˇ0,v1:k,y1:k−1)p(wk)
其中, m m m为唯一的粒子序号。实际上,可以根据联合概率密度的每个因子分开来抽样。
- 使用 v k v_k vk得到后验PDF的预测。这可以将每个先验粒子和噪声样本代入非线性运动模型:
x ˇ k , m = f ( x ^ k − 1 , m , v k , w k , m ) \check x_{k,m}=f(\hat x_{k-1,m},v_k,w_{k,m}) xˇk,m=f(x^k−1,m,vk,wk,m)
这些新的预测粒子共同近似刻画了概率密度 p ( x k ∣ x ˇ 0 , v 1 : k , y 1 : k − 1 ) p(x_k|\check x_0,v_{1:k},y_{1:k-1}) p(xk∣xˇ0,v1:k,y1:k−1)。
- 结合 y k y_k yk对后验概率进行校正,主要分两步:
- 根据每个粒子的期望后验和预测后验的收敛程度,对每个粒子赋予权重 w k , m w_{k,m} wk,m:
w k , m = p ( x ˇ k , m ∣ x ˇ 0 , v 1 : k , y 1 : k ) p ( x ˇ k , m ∣ x ˇ 0 , v 1 : k , y 1 : k − 1 ) = η p ( y k ∣ x ˇ k , m ) w_{k,m}=\frac{p(\check x_{k,m}|\check x_0,v_{1:k},y_{1:k})}{p(\check x_{k,m}|\check x_0,v_{1:k},y_{1:k-1})}=\eta p(y_k|\check x_{k,m}) wk,m=p(xˇk,m∣xˇ0,v1:k,y1:k−1)p(xˇk,m∣xˇ0,v1:k,y1:k)=ηp(yk∣xˇk,m)
其中, η \eta η为归一化系数。在实际中,通常使用非线性模型来模拟期望的传感器读数 y ˇ k , m \check y_{k,m} yˇk,m:
y ˇ k , m = g ( x ˇ k , m , 0 ) \check y_{k,m}=g(\check x_{k,m},0) yˇk,m=g(xˇk,m,0)
接着假设 p ( y k ∣ x ˇ k , m ) = p ( y k ∣ y ˇ k , m ) p(y_k|\check x_{k,m})=p(y_k|\check y_{k,m}) p(yk∣xˇk,m)=p(yk∣yˇk,m),其中等式右边的概率密度已知(比如高斯分布)。
- 根据赋予的权重,对每个粒子进行重要性采样:
x ^ k , m ⟵ { x ˇ k , m , w k , m } \hat x_{k,m}\longleftarrow \{\check x_{k,m},w_{k,m}\} x^k,m⟵{xˇk,m,wk,m}
sigma point卡尔曼滤波
UKF就是在非线性的运动和观测模型中,使用sigma point变换来传递PDF。sigma point变换上面提到了两种:对称采样策略、比例修正对称采样策略。这里以对称采样策略为例。
预测步骤是sigma point变换的直接应用,因为这一步只是将先验通过运动模型向前进行传递。即:将先验置信度 { x ^ k − 1 , P ^ k − 1 } \{\hat x_{k-1},\hat P_{k-1}\} {x^k−1,P^k−1}转换为 { x ˇ k , P ˇ k } \{\check x_k,\check P_k\} {xˇk,Pˇk}:
- 先验置信度和运动噪声都有不确定性,将它们按以下方式堆叠在一起:
μ z = [ x ^ k − 1 0 ] Σ z z = [ P ^ k − 1 0 0 Q k ] \begin{aligned}\mu_z&=\begin{bmatrix}\hat x_{k-1}\\0\end{bmatrix} \\ \Sigma_{zz}&=\begin{bmatrix}\hat P_{k-1}&0\\0&Q_k\end{bmatrix}\end{aligned} μzΣzz=[x^k−10]=[P^k−100Qk]
可以看到 { μ z , Σ z z } \{\mu_z,\Sigma_{zz}\} {μz,Σzz}仍然是高斯形式。
- 将 { μ z , Σ z z } \{\mu_z,\Sigma_{zz}\} {μz,Σzz}转化为sigma point表示:
L L T = Σ z z z 0 = μ z z i = μ z + l + κ L c o l i z i + L = μ z − l + κ L c o l i \begin{aligned}LL^T&=\Sigma_{zz} \\ z_0&=\mu_z \\ z_i&=\mu_z+\sqrt{l+\kappa}L_{col_i} \\ z_{i+L}&=\mu_z-\sqrt{l+\kappa}L_{col_i}\end{aligned} LLTz0zizi+L=Σzz=μz=μz+l+κLcoli=μz−l+κLcoli
其中, l = d i m ( μ z ) l=dim(\mu_z) l=dim(μz), i = 1 , 2 , . . . , l i=1,2,...,l i=1,2,...,l。
- 对每个sigma point展开为状态和运动噪声的形式:
z i = [ x ^ k − 1 , i w k , i ] z_i=\begin{bmatrix}\hat x_{k-1,i}\\w_{k,i}\end{bmatrix} zi=[x^k−1,iwk,i]
接着将每个sigma point带入非线性运动模型进行精确求解:
x ˇ k , i = f ( x ^ k − 1 , i , v k , w k , i ) \check x_{k,i}=f(\hat x_{k-1,i},v_k,w_{k,i}) xˇk,i=f(x^k−1,i,vk,wk,i)
其中, i = 0 , 1 , . . . , 2 l i=0,1,...,2l i=0,1,...,2l。
- 将转换后的sigma point重新组合成预测置信度:
x ˇ k = ∑ i = 0 2 L w i x ˇ k , i P ˇ k = ∑ i = 0 2 L w i ( x ˇ k , i − x ˇ k ) ( x ˇ k , i − x ˇ k ) T \begin{aligned}\check x_k&=\sum_{i=0}^{2L}w_i\check x_{k,i} \\ \check P_k&=\sum_{i=0}^{2L}w_i(\check x_{k,i}-\check x_k)(\check x_{k,i}-\check x_k)^T\end{aligned} xˇkPˇk=i=0∑2Lwixˇk,i=i=0∑2Lwi(xˇk,i−xˇk)(xˇk,i−xˇk)T
其中,
w 0 = κ l + κ w i = 1 2 ( l + κ ) \begin{aligned}w_0&=\frac{\kappa}{l+\kappa} \\ w_i&=\frac{1}{2(l+\kappa)}\end{aligned} w0wi=l+κκ=2(l+κ)1
其中, i = 1 , 2 , . . . , 2 l i=1,2,...,2l i=1,2,...,2l。
校正部分稍微复杂一些。广义高斯滤波中校正步骤的方程:
K k = Σ x y , k Σ y y , k − 1 x ^ k = x ˇ k + K k ( y k − μ y , k ) P ^ k = P ˇ k − K k Σ x y , k T \begin{aligned}K_k&=\Sigma_{xy,k}\Sigma_{yy,k}^{-1} \\ \hat x_k&=\check x_k+K_k(y_k-\mu_{y,k}) \\ \hat P_k&=\check P_k-K_k\Sigma_{xy,k}^T\end{aligned} Kkx^kP^k=Σxy,kΣyy,k−1=xˇk+Kk(yk−μy,k)=Pˇk−KkΣxy,kT
使用sigma point可以得到更优的 μ y , k \mu_{y,k} μy,k、 Σ y y , k \Sigma_{yy,k} Σyy,k和 Σ x y , k \Sigma_{xy,k} Σxy,k的估计:
- 预测置信度和观测噪声都不确定,将他们按以下方式堆叠在一起:
μ z = [ x ˇ k 0 ] Σ z z = [ P ˇ k 0 0 R k ] \begin{aligned}\mu_z&=\begin{bmatrix}\check x_{k}\\0\end{bmatrix} \\ \Sigma_{zz}&=\begin{bmatrix}\check P_{k}&0\\0&R_k\end{bmatrix}\end{aligned} μzΣzz=[xˇk0]=[Pˇk00Rk]
可以看到 { μ z , Σ z z } \{\mu_z,\Sigma_{zz}\} {μz,Σzz}仍然是高斯形式。
- 将 { μ z , Σ z z } \{\mu_z,\Sigma_{zz}\} {μz,Σzz}转化为sigma point表示:
L L T = Σ z z z 0 = μ z z i = μ z + l + κ L c o l i z i + L = μ z − l + κ L c o l i \begin{aligned}LL^T&=\Sigma_{zz} \\ z_0&=\mu_z \\ z_i&=\mu_z+\sqrt{l+\kappa}L_{col_i} \\ z_{i+L}&=\mu_z-\sqrt{l+\kappa}L_{col_i}\end{aligned} LLTz0zizi+L=Σzz=μz=μz+l+κLcoli=μz−l+κLcoli
其中, l = d i m ( μ z ) l=dim(\mu_z) l=dim(μz), i = 1 , 2 , . . . , l i=1,2,...,l i=1,2,...,l。
- 对每个sigma point展开为状态和运动噪声的形式:
z i = [ x ˇ k , i n k , i ] z_i=\begin{bmatrix}\check x_{k,i}\\n_{k,i}\end{bmatrix} zi=[xˇk,ink,i]
接着将每个sigma point带入非线性运动模型进行精确求解:
y ˇ k , i = g ( x ˇ k , i , n k , i ) \check y_{k,i}=g(\check x_{k,i},n_{k,i}) yˇk,i=g(xˇk,i,nk,i)
其中, i = 0 , 1 , . . . , 2 l i=0,1,...,2l i=0,1,...,2l。
- 将转换后的sigma point重新组合成最终的结果:
μ y , k = ∑ i = 0 2 L w i y ˇ k , i Σ y y , k = ∑ i = 0 2 L w i ( y ˇ k , i − μ y , k ) ( y ˇ k , i − μ y , k ) T Σ x y , k = ∑ i = 0 2 L w i ( x ˇ k , i − x ˇ k ) ( y ˇ k , i − μ y , k ) T \begin{aligned}\mu_{y,k}&=\sum_{i=0}^{2L}w_i\check y_{k,i} \\ \Sigma_{yy,k}&=\sum_{i=0}^{2L}w_i(\check y_{k,i}-\mu_{y,k})(\check y_{k,i}-\mu_{y,k})^T \\ \Sigma_{xy,k}&=\sum_{i=0}^{2L}w_i(\check x_{k,i}-\check x_k)(\check y_{k,i}-\mu_{y,k})^T\end{aligned} μy,kΣyy,kΣxy,k=i=0∑2Lwiyˇk,i=i=0∑2Lwi(yˇk,i−μy,k)(yˇk,i−μy,k)T=i=0∑2Lwi(xˇk,i−xˇk)(yˇk,i−μy,k)T
其中,
w 0 = κ l + κ w i = 1 2 ( l + κ ) \begin{aligned}w_0&=\frac{\kappa}{l+\kappa} \\ w_i&=\frac{1}{2(l+\kappa)}\end{aligned} w0wi=l+κκ=2(l+κ)1
其中, i = 1 , 2 , . . . , 2 l i=1,2,...,2l i=1,2,...,2l。
UKF的两个优点是:
-
不需要任何解析形式的导数;
-
仅使用了基本的线性代数运算。
滤波器分类
总结一下递归式非线性系统状态估计的几种方法。
贝叶斯滤波位于分类的最顶层。用高斯分布估计PDF就是高斯滤波,用大量随机样本估计PDF就是粒子滤波。在高斯滤波中,在线性化运动和测量模型中传递PDF就是EKF,对PDF进行确定性采样,在非线性运动和测量模型中传递就是UKF。
另外,迭代在滤波方法中作用也很明显。若没有选代,EKF和UKF都很难与全贝叶斯后验概率联系起来。然而,IEKF方法收敛于MAP的解(即模),而IUKF方法则收敛于全后验概率的均值。