使用 Apache Kalman 滤波器时正确设置测量噪声矩阵

Posted

技术标签:

【中文标题】使用 Apache Kalman 滤波器时正确设置测量噪声矩阵【英文标题】:Correctly setting the measurement noise matrix when using the Apache Kalman filter 【发布时间】:2018-06-11 09:46:08 【问题描述】:

在来自 Apache 的卡尔曼滤波器代码的 KalmanFilter.java 中,我发现了这行我无法解释:

 else if (measNoise.getRowDimension() != this.measurementMatrix.getRowDimension() || measNoise.getColumnDimension() != 1) 
                throw new MatrixDimensionMismatchException(measNoise.getRowDimension(), measNoise.getColumnDimension(), this.measurementMatrix.getRowDimension(), 1);
            

显然,测量噪声应该是N x 1 矩阵,而measurementMatrix 应该是N x ? 大小矩阵 不过,我也发现:

RealMatrix s = this.measurementMatrix.multiply(this.errorCovariance).multiply(this.measurementMatrixT).add(this.measurementModel.getMeasurementNoise());

所以this.measurementMatrix.multiply(this.errorCovariance).multiply(this.measurementMatrixT) 部分将产生一个N x N 矩阵,它不能添加到N x 1 矩阵中。我哪里做错了?

【问题讨论】:

【参考方案1】:

原来这是 Apache 的卡尔曼滤波器库 (org.apache.commons:commons-math3) 以前版本中的一个错误。升级到最新版本 (3.6.1) 解决了这个问题。

【讨论】:

以上是关于使用 Apache Kalman 滤波器时正确设置测量噪声矩阵的主要内容,如果未能解决你的问题,请参考以下文章

. 细说Kalman滤波:The Kalman Filter

指定 Apache Commons Kalman Filter 2D Positioning Estimation 的起始位置

Kalman滤波器原理和实现

kalman滤波器公式的推导

用于鼠标位置的 Python Kalman 滤波器未按预期工作

Kalman滤波