我的编程空间,编程开发者的网络收藏夹
学习永远不晚

卡尔曼滤波数据处理技巧通俗理解及python实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

卡尔曼滤波数据处理技巧通俗理解及python实现

学习前言

好久没用过arduino了,接下去要用arduino和超声波做个小实验,对于读取的模拟量肯定要进行滤波呀,不然这模拟量咋咋呼呼的怎么用

什么是卡尔曼滤波

先看看百度百科解释哈:卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。

重要的事说三遍:

还不如不看!

还不如不看!!

还不如不看!!!

其实大家并不需要把卡尔曼滤波当作一种很复杂的东西,用通俗的话来讲,卡尔曼滤波算法只是一种 滤波算法,它的功能就是 滤波,滤波的作用就是减少噪声与干扰对数据测量的影响。

卡尔曼滤波是怎么滤波的

接下来我会用一句话概括卡尔曼滤波的操作过程:

卡尔曼滤波是一种通过 历史数据、历史积累误差、当前测量数据与当前误差 联合计算出的当前被测量的最优预测值。

首先大家要先理解什么是当前被测量的最优预测值:

里面有两个重要的概念,分别是 最优 和 预测值 :

这意味着:

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。

卡尔曼滤波的python代码实现

import numpy as np
import matplotlib.pyplot as plt
# Q为这一轮的心里的预估误差
Q = 0.00001
# R为下一轮的测量误差
R = 0.1
# Accumulated_Error为上一轮的估计误差,具体呈现为所有误差的累计
Accumulated_Error = 1
# 初始旧值
kalman_adc_old = 0
SCOPE = 50
def kalman(ADC_Value):
    global kalman_adc_old
    global Accumulated_Error
    # 新的值相比旧的值差太大时进行跟踪
    if (abs(ADC_Value-kalman_adc_old)/SCOPE > 0.25):
        Old_Input = ADC_Value*0.382 + kalman_adc_old*0.618
    else:
        Old_Input = kalman_adc_old
    # 上一轮的 总误差=累计误差^2+预估误差^2
    Old_Error_All = (Accumulated_Error**2 + Q**2)**(1/2)
    # R为这一轮的预估误差
    # H为利用均方差计算出来的双方的相信度
    H = Old_Error_All**2/(Old_Error_All**2 + R**2)
    # 旧值 + 1.00001/(1.00001+0.1) * (新值-旧值)
    kalman_adc = Old_Input + H * (ADC_Value - Old_Input)
    # 计算新的累计误差
    Accumulated_Error = ((1 - H)*Old_Error_All**2)**(1/2)
    # 新值变为旧值
    kalman_adc_old = kalman_adc
    return kalman_adc
array = np.array([50]*200)
s = np.random.normal(0, 5, 200)
test_array = array + s
plt.plot(test_array)
adc=[]
for i in range(200):
    adc.append(kalman(test_array[i]))
plt.plot(adc)   
plt.plot(array)   
plt.show()

实验结果为:

以上就是卡尔曼滤波数据处理技巧通俗理解及python实现的详细内容,更多关于python卡尔曼滤波数据处理的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

卡尔曼滤波数据处理技巧通俗理解及python实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python怎么实现卡尔曼滤波数据处理

这篇文章主要介绍“python怎么实现卡尔曼滤波数据处理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python怎么实现卡尔曼滤波数据处理”文章能帮助大家解决问题。什么是卡尔曼滤波先看看百度百科解
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录