通俗理解"卡尔曼滤波"

        卡尔曼滤波是接触比较久的算法了,还记得第一次是在MPU6050知名陀螺仪中信息融合(就是滤波,写博客要用高端词汇,哈哈)! ,用到,写个博客也加深对以前知识的理解。

          在卡尔曼滤波中,真是人如其名,用的最多的地方就是信息融合(滤波),在下面我给出一个简单的例子叙说来引入今天的主角——卡尔曼滤波。

         理论上, 在使用卡尔曼滤波之前,首先要确保系统满足三个重要的假设:

          1. 被建模的系统是线性的

          2. 影响测量的噪声是白噪声

          3. 噪声本质上是高斯分布的

          现在我们假设有两个温度传感器,通过测量得到  x1 和 x2 温度值,由于传感器的优劣性,这些测量值有高斯不确定性,所以有均值\overline{X1}\overline{X2},以及标准差{\sigma1}{\sigma2},标准差其实在一定程度表明了两个传感器的采集数据的振幅大小。

          以温度为变量的概率分布为下面的高斯分布:

                                                         p_1(x) = \frac{1}{{\sigma}_i\sqrt{2{\pi}}} {\exp}(-\frac{(x-\overline{x_i})^2}{2{\sigma}_i}) (i = 1,2)

           假设具有这样两个高斯概率分布的测量,我们期望在同时给出两个温度测量值的条件下获得另一个温度值 x 的概率密度与 p(x) = p_1(x )p_2(x )成正比。这个乘积的结果也是一个高斯分布,可以按照下面的方式来计算这个新的分布的均值和标准差,由于有

                         p_{12}(x)   正比于  {\exp}(-\frac{(x-\overline{x_1})^2}{2{\sigma}_1}) {\exp}(-\frac{(x-\overline{x_2})^2}{2{\sigma}_2}) = {\exp}(-\frac{(x-\overline{x_1})^2}{2{\sigma}_1}-\frac{(x-\overline{x_2})^2}{2{\sigma}_2}) 

           并且高斯分布在平均值出最大,我们可以简单的计算的关于 x  的 p(x) 的导数来获得平均值,由于函数在其导数为 0  出值最大,所以有:

                                               \frac{dp_{12}}{dx}\mid_{\overline{x_{12}}} = -[\frac{(\overline{x}_{12}-\overline{x_1})}{{{\sigma}_1}^2}+\frac{(\overline{x}_{12}-\overline{x_2})}{{{\sigma}_2}^2}]p_{12}(\overline{x}_{12})

            由于概率分布函数p(x) 不会为 0  , 所以括号里的项必须等于 0 , 解这个等式后,可得到一个非常重要的关系式:

                                                 \overline{x}_{12} = (\frac{{\sigma}_2^2}{{\sigma}_1^2+{\sigma}_2^2})x_1 + (\frac{{\sigma}_1^2}{{\sigma}_1^2+{\sigma}_2^2})x_2

            于是,新分布的均值即为两个测量到的均值的加权组合,而权重则由两个测量相关的不确定性决定(也就是方差),可以看到,例如,如果第二个温度测量值的不确定性 {\sigma}_2 特别大,则新的均值与更确定的前期测量值 x_1 本质上是相同的。

            知道了新的均值 \overline{X}_{12} ,将其代入p_{12}(x)的表达式中进行整理,则不确定性{\sigma}_{12}^2,即为:

                                                               {\sigma}_{12}^2 = \frac{{\sigma}_1^2{\sigma}_2^2}{{\sigma}_1^2+{\sigma}_2^2}

           此时, \frac{{\sigma}_1^2}{{\sigma}_1^2+{\sigma}_2^2}  就是我们常说的卡尔曼增益 K ,只不过这里的维度是 1 罢了。

           好了,以上就是卡尔曼滤波的基本原理。

           再举一个简单的例子:如果在某一时刻,x1 是 25度,标准差是 1, x2 是30度,标准差是3,那么,最终的计算温度是 :

                                  温度  T = \frac{3^2}{1^2 + 3^2} 25 + \frac{1^2}{1^2 + 3^2} 30 = 22.5 + 3 = 25.5 ,最终经过卡尔曼滤波后的温度是 25.5度。

           可以看出,如果某一方测量值对应的方差比较大,说明这一方的数据波动幅度比较大,受信任度比较小,也就是系数比较小 ,对应上面的 \frac{1^2}{1^2 + 3^2} = 0.1。

           由于时间关系, 以上的原理推导可能不太完善,还请谅解。

           

发布了9 篇原创文章 · 获赞 4 · 访问量 1013

猜你喜欢

转载自blog.csdn.net/hello071375/article/details/91972141