使用Apache卡尔曼滤波器时,正确设置测量噪声矩阵

时间:2018-06-11 09:46:09

标签: java kalman-filter

在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 个答案:

答案 0 :(得分:0)

事实证明,这是Apache的Kalman过滤器库(org.apache.commons:commons-math3的先前版本中的错误。升级到最新版本(3.6.1)即可解决此问题。