首先看了DR_CAN老师的视频,做了一个简单的笔记,按照思路编写了样本代码,这里主要使用卡尔曼滤波进行数据融合。
视频地址: https://www.bilibili.com/video/bv 12 D4 y1 s7fu
数据集成Date Fusion
在此,从一例开始,用“两个名称”称呼同一物体,得到两个结果的第一个名称结果是30g,第二个名称结构是32g。
因为两者都不准确,所以有误差。 第一个被称为标准偏差是2g。第二个标准偏差是4g。 而且都符合正态分布,也叫清洁店员分布。
在数学上表述如下
第一个称呼
第二个称呼
接下来,我们来看看两个输出的概率分布; 第一个是服从正态分布,标准差为2g; 所以他在28g到32g之间的概率是68.4%。
二是服从正态分布,标准差为4g; 所以他在28g到36g之间的概率是68.4%。 相对于第一个,因为标准偏差很大,所以看起来又矮又胖。
现在,需要使用这两个结果,“估算真实值”。 怎么估算呢?
感觉上介于这两个称谓结果之间,且初始称谓偏差较小,真实结果接近初始称谓结果。
在数学上找到了最优值,采用了卡尔曼算法。 如果将估计值设为,则为
其中k是dbdzfj; 其范围为0到1,即[ 0,1 ]。
目的求出k,使得估计的基准最小,也就是说使估计的方差最小。
设想:估计值、估计值标准偏差、估计值的方差Var (。
估计值方差=
备注:红蓝两部分相互独立,可单独取出;
要求出估计值方差的最小值,需要导出k,并将其设为0。 要确定极值,请执行以下操作:
根据以上求出推测值的方差,进行导出如下。
也就是说:
整理后得到:
那么,在这里求k。 该k的值为估计值方差的最小
然后代入数据,
第一种称谓解释:称为30g,标准差为2g。
第二种称谓解释:称为32g,标准差为4g。
首先求出k值dbdzfj,
然后计算估计值,
最后更新估计的方差,
然后,估计值的标准偏差为1.79。
Python版的伪代码:
“”卡尔曼滤波器——数据融合“# dbdzfj=误差对应方差(除以数据1的误差数据2的误差)! EFKalman_gain(E1,e2 ) :returnE1/) E1E2) #估计值=数据1的估计系数* )数据2的测量值-数据1的估计值) defnow_estimated_value ) xxee k X2 ) :returnx1k(x2-x1 )更新估计误差=(1-dbdzfj )数据1的估计误差dbdzfj*数据2的估计误差defnow_estimated_error(k,e1,e2 ) 33336666
这篇文章只提供参考和学习。 谢谢你。