卡尔曼滤波是接触比较久的算法了,还记得第一次是在MPU6050知名陀螺仪中信息融合(就是滤波,写博客要用高端词汇,哈哈)! ,用到,写个博客也加深对以前知识的理解。
在卡尔曼滤波中,真是人如其名,用的最多的地方就是信息融合(滤波),在下面我给出一个简单的例子叙说来引入今天的主角——卡尔曼滤波。
理论上, 在使用卡尔曼滤波之前,首先要确保系统满足三个重要的假设:
1. 被建模的系统是线性的
2. 影响测量的噪声是白噪声
3. 噪声本质上是高斯分布的
现在我们假设有两个温度传感器,通过测量得到 x1 和 x2 温度值,由于传感器的优劣性,这些测量值有高斯不确定性,所以有均值和,以及标准差和,标准差其实在一定程度表明了两个传感器的采集数据的振幅大小。
以温度为变量的概率分布为下面的高斯分布:
假设具有这样两个高斯概率分布的测量,我们期望在同时给出两个温度测量值的条件下获得另一个温度值 x 的概率密度与 成正比。这个乘积的结果也是一个高斯分布,可以按照下面的方式来计算这个新的分布的均值和标准差,由于有
正比于
并且高斯分布在平均值出最大,我们可以简单的计算的关于 x 的 p(x) 的导数来获得平均值,由于函数在其导数为 0 出值最大,所以有:
由于概率分布函数p(x) 不会为 0 , 所以括号里的项必须等于 0 , 解这个等式后,可得到一个非常重要的关系式:
于是,新分布的均值即为两个测量到的均值的加权组合,而权重则由两个测量相关的不确定性决定(也就是方差),可以看到,例如,如果第二个温度测量值的不确定性 特别大,则新的均值与更确定的前期测量值 本质上是相同的。
知道了新的均值 ,将其代入的表达式中进行整理,则不确定性,即为:
此时, 就是我们常说的卡尔曼增益 K ,只不过这里的维度是 1 罢了。
好了,以上就是卡尔曼滤波的基本原理。
再举一个简单的例子:如果在某一时刻,x1 是 25度,标准差是 1, x2 是30度,标准差是3,那么,最终的计算温度是 :
温度 ,最终经过卡尔曼滤波后的温度是 25.5度。
可以看出,如果某一方测量值对应的方差比较大,说明这一方的数据波动幅度比较大,受信任度比较小,也就是系数比较小 ,对应上面的 = 0.1。
由于时间关系, 以上的原理推导可能不太完善,还请谅解。