卡尔曼滤波中的噪声协方差矩阵(R和Q)应该怎么取值,和噪声分布之间的关系是什么?

关注者
413
被浏览
358,922

9 个回答

我的理解是:理论+试错调参

一、理论:

首先,PQR都是矩阵,看到矩阵,不能只是看到一个方块,要知道causality,也就是里面对应元素的意思。协方差矩阵,每个元素都是某两个值的协方差,协方差公式为

协方差(2维)
协方差矩阵(n维)

那么,是谁和谁的协方差呢?p_{ij},就是第i个状态量与第j个状态量的协方差。那么你可以看出来,协方差矩阵P应该是对称的。如果某两个变量是不相关的,那么协方差为0。一般只需要设置P0,剩下的都是自动算的。在设置噪声矩阵的时候,我们通常假设数据的噪声相互之间是独立的,那就只设置对角线上的元素,自己和自己的协方差(也就是“方差”),这时候就只需要考虑数据自己本身的特性了。

P0 = Var⟨X0⟩ P的初值就是代表你对你估计的X0有多不确定。P0为0的时候就是说你对你给初值有着坚不可摧的信心。一般来说宁可设成单位阵都不会设成0的。

卡尔马滤波算法假设所有噪声都是零均值的白噪声,那么Q和R中的元素就是白噪声的方差。即:

Xk+1 = f(X^ k) + wk, wk ∼ N(0; Qk)

Zk+1 = h(X^ k+1/k) + vk, vk ∼ N(0; Rk)

Q代表建模误差,跟你计算机舍入误差(比如说用了浮点,那么会引入1e-7的误差项)、模型的线性化程度、离散化引入误差有关系;如果你还有输入u的话,输入的误差也会考虑到这里。

R的选取与传感器的特性有关,具体到应用中,比如导航系统,我的GPS传感器传下来的位置p会在真值附近有个方差为±3m的噪声,那么R中对应p的那个元素就该是3。

如果P0、Q、R无法精确获得,只知道可能的取值范围,则采用可能的较大值(保守)。如果不确切知道Q、R、P0的准确先验信息,应适当增大Q的取值,以增大对实时量测值的利用权重,俗称调谐。但是调谐存在盲目性,无法知道Q要调到多大才行。
——《卡尔曼滤波与组合导航原理》秦永元


二、调参

关于PQR的关系,看公式就一目了然:

这俩公式本质上就是K= (Pk+Q) / (Pk+Q+R)

Q和R分别代表对预测值和测量值的置信度(反比),通过影响卡尔曼增益K的值,影响预测值和测量值的权重。越大的R代表越不相信测量值。

而参数的选择其实和需求有关系,基于不同的准确度、动态性能、平滑度等会有不同的取舍。

《Fundamentals Of Kalman Filtering:A Practical Approach》Paul Zarchan 是一本注重实践操作,饱含干货的好书,可以借鉴。

调参手段,就是固定其中一个调另一个。

那么,怎么判断你调的效果变好了呢?

1、如果你在做仿真,知道真值是多少,那么只要看估计出来的值是不是更精确了就好;如果你加的是随机噪声,可能还要用到Monte Carlo判据。协方差矩阵对角线元素开根号其实就是标准差“1σ”, 若KF正确工作,则66%的误差点应落在±1σ界限以内。 就像下面这个图。Theory那俩条线就是σ在逐渐收敛,然后虚线那些是误差,误差的跳动范围大概就在两条边界线之间。(图来自Paul Zarchan的书)

2、再荐一本书:《Optimal State Estimation Kalman-H-and Nonlinear Approaches》与上面提到的Paul的书不同,这本书注重理论,推导清晰严谨,也有很多直觉解释,对新手友好。此书中提到还有一个判断方法: 如果KF正常工作,残差(innovation)应该是一个均值为0、方差为(HPH+R)、白色的变量。 当KF工作的时候,记录innovation的值,验证一下是否符合这些性质,如果不如预期,就说明有问题了,可以据此调参。