卡尔曼滤波中,噪声非“白”及防止发散的方法

这是关于卡尔曼滤波系列的第三篇笔记。笔记内容不按照算法学习的顺序来,所以这不是一个教程,而是对待某一特定问题的解决方法探讨。
所有笔记放在卡尔曼专栏里面。欢迎私信或email:[email protected]讨论。

噪声非“白”的应对措施

在卡尔曼滤波的使用条件里,明确说明了噪声是白噪声、互不相关时才能达到预定的滤波效果。如果噪声不是白噪声呢?那就要采取一定的措施了。具体的,需要分两类情况:状态噪声有色、观测噪声有色。

状态噪声有色

此时一般考虑将状态量增维,一个最常用的噪声白化的方法。有一个例子,一看就明白,但是公式打起来太麻烦了,先用照片,后面再手打。
卡尔曼滤波中,噪声非“白”及防止发散的方法_第1张图片

观测噪声有色

当观测噪声有色时,如果再用增维的方法将观测量增维,最后会形成 Z k = ( H k I ) X k a Z_k=(H_k I)X_k^a Zk=(HkI)Xka的形式,即在形式是不存在观测噪声的量了,也就是说R为0 ,将会导致增益K求不出来(详细的去看K的求解步骤)。所以将观测量增维是行不通的。
我一般遇到这种情况就不去管它了,反正观测量的噪声一般都很接近白噪声。如果真的想解决,参考各种噪声白化的方法,提前处理一下观测值吧。

防止滤波发散的方法

滤波时往往因为一些原因,会导致结果发散,通常原因分为两种:模型有误差、计算有误差。

模型有误差

模型有误差时可以通过加大当前观测值的占比来解决。常见方法有:衰减记忆法(通过改变P来间接改变Q和R,使滤波时越旧的数据所占权重越低,强迫系统更看重新的数据)、限定记忆法(正常的KF对观测量的记忆是无限的,此方法使系统只记住最近的几个观测量,以提高当前测量值的权重占比)。

计算有误差

计算误差通常用为每一步小误差的累积导致的,这些误差本身很小,其实没什么,但累积起来以后容易使P失去非负定性,影响K的求取。
常见的迫使P非负定方法有:平方根滤波和UD分解法。平方根滤波法把P拆成 Δ Δ T \Delta \Delta^T ΔΔT其中 Δ \Delta Δ是上三角矩阵或下三角矩阵;UD分解法把P拆成 U D U T UDU^T UDUT。每次迭代时不直接改变P,使P经过间接计算后一定是非负定的。

你可能感兴趣的:(卡尔曼专题,线性代数,kalman,卡尔曼滤波算法,白噪声)