卡尔曼滤波 python,轻松理解卡尔曼滤波
本文主要为大家介绍卡尔曼滤波数据处理技巧的通俗理解和python实现。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。
00-1010学习前言什么是卡尔曼滤波器,卡尔曼滤波器是如何滤波的?卡尔曼滤波的例子和卡尔曼滤波的python代码实现
目录
很久没用arduino了。接下来我要用arduino和超声波做一个小实验。必须对读取的模拟量进行过滤。不然这个模拟量怎么用?
学习前言
我们先来看看百度百科的解释:卡尔曼滤波是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据包含了系统中噪声和干扰的影响,最优估计也可以看作是一个滤波过程。
重要的事情说三遍:
还不如不看!
还不如不看!
还不如不看!
其实我们没必要把卡尔曼滤波当成一件很复杂的事情。通俗来说,卡尔曼滤波算法只是一种滤波算法。它的作用是滤波,滤波的作用是减少噪声和干扰对数据测量的影响。
什么是卡尔曼滤波
接下来我用一句话来总结卡尔曼滤波的操作过程:
卡尔曼滤波是将历史数据、历史累积误差、当前测量数据和当前误差相结合的一种当前测量的最优预测值。
首先,我们要明白目前测量的最佳预测值是多少:
有两个重要的概念,即最优值和预测值:
这意味着:
1.卡尔曼滤波的结果不是实际测量的,而是公式计算出来的预测结果(并不是说预测结果不好,测量还是有误差的!);
2.它是最优的是因为卡尔曼滤波考虑的比较多,它结合了四个参数来预测当前的测量数据,所以效果更好。
接下来要理解历史数据、历史累计误差、当前实测数据、当前误差的概念。
我会通过例子告诉你这四样东西的概念。
卡尔曼滤波是怎么滤波的
假设我们在用超声波测量距离!现在是T时刻,我们需要用t-1时刻的距离来估计T时刻的距离。
假设t-1时超声波的实测最优预测值为50cm,t-1时的累计误差为3cm,而你自己预测的不确定性误差为4cm,那么t-1时的总误差为(32 42)1/2=5cm。
T时刻,超声波测得的实际值为53cm,测量误差为2cm。怎么才能相信上次的预测值和这次的实际值呢?因为两者都不准确,我们可以用误差来计算。
因此,我们结合历史数据、历史累积误差、当前测量数据和当前误差来计算:
所以目前的最优预测值是52.59。
卡尔曼滤波实例
将numpy作为np导入
将matplotlib.pyplot作为plt导入
# Q是本轮的心理估计误差。
Q=0.00001
# R是下一轮的测量误差。
R=0.1
# Accumulated_Error是上一轮的估计误差,是所有误差的累加。
累积误差=1
#初始旧值
卡尔曼_adc_old=0
范围=50
def卡尔曼(ADC_Value):
全局卡尔曼_adc_old
全局累计_误差
#当新值和旧值之间的差异过大时进行跟踪。
if(ABS(ADC _ Value-Kalman _ ADC _ old)/SCOPE 0.25):
Old_Input=ADC_Value*0.382卡尔曼_adc_old*0.618
else:
旧输入=卡尔曼模数转换器旧
#最后一轮的总误差=累积误差2估计误差2
old _ Error _ All=(Accumulated _ Error * * 2q * * 2)* *(1/2)
# R是这一轮的估计误差。
# H是以均方差计算的双方的置信度。
H=旧_错误_全部**2/(旧_错误_全部**2 R**2)
#旧值1.00001/(1.00001 0.1) *(新值-旧值)
卡尔曼_adc=旧输入H * (ADC值-旧输入)
#计算新的累积误差
累计_错误=((1-H)*旧_错误_全部**2)**(1/2)
#新值变成旧值
卡尔曼_adc_old=卡尔曼_adc
返回卡尔曼_adc
array=np.array([50]*200)
s=np.random.normal(0,5,200)
测试数组=数组s
plt.plot(测试数组)
adc=[]
对于范围(200):内的I
ADC . append(Kalman(test _ array[I]))
plt.plot(adc)
plt.plot(数组)
plt.show()
实验结果如下:
以上是对卡尔曼滤波数据处理技巧的大致了解,以及python实现的详细内容。更多关于python卡尔曼滤波数据处理的信息,请关注盛行IT软件开发工作室的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。