当前位置:网站首页>卡尔曼滤波-1

卡尔曼滤波-1

2022-07-06 20:23:00 wmzjzwlzs

转自:卡尔曼滤波(kalman filter)和均值滤波有什么关系? - 知乎

看了一篇文章《傻瓜也能懂的卡尔曼滤波器(翻译自外网博客)》,发现评论里很多人说看不懂,决定写一篇真傻瓜也能懂的卡尔曼滤波。

文章先从简单的平均值开始,问题从简单到复杂,最后引入卡尔曼滤波。

一、平均值

举个例子:如下图,有一个滑块在一根杆上,杆一端有一个测距激光头,现在要测量滑块的位置。

[激光头]->_______[滑块]__________

三次测量值:1米、0.9米、1.2米

显然取平均值(1+0.9+1.2)/3=1.033米更准确。

二、加权平均值

假设有两个激光头:

[两激光头]=》________[滑块]_________

两个激光头同时测出:1.1米和1.5米

平均值1.3米更准确吗?不一定,如果两个激光头的测量精度一样,那平均值1.3米就是更准确的。

如果它们测量精度不一样,比如激光头1测量误差方差为0.01,激光头2误差方差为0.1,那么单独激光头1的测量值1.1米比平均值1.3米更准确,因为激光头2实在太差了,可以计算一下平均值的方差

 平均值的方差比激光头1的误差方差更大了,显然平均值不好。但是激光头2的测量值完全没用吗?可以换一种计算平均值的方法,叫做加权平均值

 显然用0.9和0.1做加权平均,方差变小了,加权平均值比两个测量值都更准确。那加权平均值的两个权值取多少最好呢?可以假设  的权值为a,则  的权值为(1-a),代进去计算

 这是关于a的二次函数, 时加权平均值方差取得最小值(高中数学的二次函数极值问题),也就是  的加权系数之比等于它们的方差之比的倒数。

 

三、卡尔曼滤波

现在滑块不是静止的了,是运动的,假设匀速运动,1米/秒,激光头每秒测量一次

  表示n时刻滑块位置,  表示n时刻激光头测量值,  表示测量误差。显然现在不能对激光头多次测量值求平均或者加权平均了,因为滑块是运动的。怎么办呢?最简单的办法就是直接将  作为结果,也就是  的估计值 ,但是这不是最好的,因为滑块的运动方程没有用上。那就按最简单的求平均值的方式用上

 这样计算是不是比直接用测量值作为结果更好呢,可以计算一下他们的估计值方差

 显然这种求平均值的方法估计值方差更小,当n趋于无穷大时  。还可以改变一下估计值的初值,比如以0作为初值

同样计算一下可以发现,n趋于无穷大时,估计值方差  还是  ,也就是只要迭代次数足够,误差与初值无关,都收敛于同一个值。

其实上面的平均值还不是最优的,你可以试一下计算每一步的加权平均值,两个权值之比同样是方差之比的倒数。同样你会发现,估计值方差会收敛,收敛值与初值选择无关。

到这里发现没有,上面的结果很像卡尔曼滤波了,其实这就是卡尔曼滤波了,只不过状态转移方程和测量方程特别简单。把状态方程和测量方程换成标准的方程,同样地像上面那样,每一步迭代用最佳加权系数计算加权平均值,你就会发现这就是标准的卡尔曼滤波了,只要记住最佳加权系数之比等于方差之比的倒数。也就是说,卡尔曼滤波其实就是选择了最佳加权系数的加权平均。

上面说的状态方程和测量方程都是一维的,如果它们都是多维的会怎样呢?多维的方程组就需要用最小二乘法求解。一维的最小二乘解就是平均值,多维的最小二乘解可以理解为多维的平均值,而加权最小二乘解就是加权平均值。所以对于多维的状态方程和测量方程,在每一步迭代用加权最小二乘法计算状态估计值就可以了。

结论:卡尔曼滤波本质就是选择了最佳加权系数的加权平均;加权最小二乘法就是求多维加权平均。

理解这样有什么用?我发现有很多人一看到滤波有关的问题,就想去折腾看上去很高级的卡尔曼滤波,其实没必要,如果用平均值或者加权平均值(多维对应最小二乘法或者加权最小二乘法)能把所有测量值都包含了,一般就没必要折腾卡尔曼滤波了,本质上都是一样的,除非用卡尔曼滤波能引入额外的比较准确的观测值。

原网站

版权声明
本文为[wmzjzwlzs]所创,转载请带上原文链接,感谢
https://blog.csdn.net/wmzjzwlzs/article/details/125591182