使用 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 的起始位置