卡尔曼滤波确定初值x0与p0?——KF第二篇笔记

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

初值 x 0 x_0 x0 P 0 P_0 P0

这里说的初值,仅包括状态量的初值 x 0 x_0 x0和协方差矩阵 P 0 P_0 P0,R和Q其实严格来说不算是初值,关于R和Q的取值在这里:https://blog.csdn.net/callmeup/article/details/121489224
这里的初值指的是:x0-和P0-
三种取值方法:真值、期望、随机.

真值

这是一个非常理想的角度,但是真值几乎没有办法取到,如果特定的系统真的可以取得真值,那不用看下面的了,取真值总没错。
甚至还有一个重要的概念:初值取真值的话,滤波过程是无偏

期望

对于有些系统,可能x和P的初值不知道,但是根据之前的状态,大致可以知道期望,即使有一点偏差也无所谓,因为知道一个带有少量偏差的期望来滤波,偏差总不会太大。对于期望需要稍加处理:
设x的期望为 m x 0 m_{x_0} mx0(向量),P的期望为 C x 0 C_{x_0} Cx0(矩阵),则如果拿到了第一次的测量值,可以这样修正:
x = m x 0 + C x 0 H 0 T ( H 0 C x 0 H 0 T + R 0 ) − 1 ( z 0 − H 0 m x 0 ) P 0 = C x 0 − C x 0 H 0 T ( H 0 C x 0 H 0 T + R 0 ) − 1 H 0 C x 0 x=m_{x_0}+C_{x_0}H_0^T(H_0C_{x_0}H_0^T+R_0)^{-1}(z_0-H_0m_{x_0})\\ P_0 = C_{x_0}-C_{x_0}H_0^T(H_0C_{x_0}H_0^T+R_0)^{-1}H_0C_{x_0} x=mx0+Cx0H0T(H0Cx0H0T+R0)1(z0H0mx0)P0=Cx0Cx0H0T(H0Cx0H0T+R0)1H0Cx0
如果前面的期望绝对准确,整个估计也是无偏的。

随机

虽说前面两个好,但我还真没实际遇到过,只是在有些时候需要减少噪声、验证算法内容,才会临时把真值作为初值,更为普遍的做法也是最“简单”的方法:随机取值。
关于随机取值我的理解是:如果知道初值的大致区间,在这个区间内随机取,基于卡尔曼滤波的强大能力,一般情况下都不会发散的。此时我一般会把P取大一点,虽然初值有偏,但慢慢迭代,没多久系统就会让偏差急剧缩小。
总的来说,KF对初值还是很友好的。

你可能感兴趣的:(卡尔曼专题,matlab,kalman,卡尔曼调参,算法,滤波初值)