常见滤波算法(PythonC版本)

简介

受限于MCU自身的ADC外设缺陷,精度和稳定性通常较差,很多场景下需要用滤波算法进行补偿。滤波的主要目的是减少噪声与干扰对数据的影响,让数据更加接近真实值。

一阶低通滤波算

一阶低通滤波是一种信号处理技术,用于去除信号中高频部分,保留低频部分。在滤波过程中,一阶低通滤波器会使得高于某个截止频率的信号被衰减,而低于截止频率的信号则会被保留。这有助于减少噪音或者不需要的信号成分,从而提高信号的质量。

典型案例:蓝牙耳机、音响

Python实现

import numpy as np
import matplotlib.pyplot as plt
# 生成示例数据
sensor_data = np.random.randn(200) # 正态分布随机数据
# 定义低通滤波函数
def low_pass_filter(data,cutoff_freq):filtered_data = np.copy(data)for i in range(1,len(data)):filtered_data[i] = (1-cutoff_freq)*filtered_data[i-1]+cutoff_freq*data[i]return filtered_data
# 设置截止频率
cutoff_freq = 0.2
# 应用低通滤波
filter_sensor_data = low_pass_filter(sensor_data,cutoff_freq)
# 绘制原始数据和滤波后数据
plt.figure(figsize=(10,6))
plt.plot(sensor_data)
plt.plot(filter_sensor_data)
plt.show()

C实现

均值滤波

说明:连续取N个采样值进行算术平均运算达到降噪目的;

N值较大时:信号平滑度较高,但灵敏度较低

N值较小时:信号平滑度较低,但灵敏度较高

优点:试用于对一般具有随机干扰的信号进行滤波。这种信号的特点是有一个平均值,信号在某一数值范围附近上下波动。

缺点:测量速度较慢或要求数据计算较快的实时控制不适用。

典型案例:电子秤...

Python实现

C实现

滑动平均滤波

把连续取N个采样值看成一个队列,队列的长度固定为N。每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则)。把队列中的N个数据进行算术平均运算,就可获得新的滤波结果。

N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4

优点:对周期性干扰有良好的抑制作用,平滑度高;试用于高频振荡的系统

缺点:灵敏度低;对偶然出现的脉冲性干扰的抑制作用较差,不适于脉冲干扰较严重的场合比较浪费RAM(改进方法,减去的不是队首的值,而是上一次得到的平均值)

典型应用:汽车上剩余可行驶里程预估

Python实现

C实现

中值滤波

说明:连续采样N次(N取奇数)把N次采样值按大小排列取中间值为本次有效值

优点:能有效克服因偶然因素引起的波动干扰;对温度、液位等变化缓慢的被测参数有良好的滤波效果

缺点:对流量,速度等快速变化的参数不宜。

典型应用:冒泡算法、电子秤....

Python实现

C实现

卡尔曼滤波

​​​​​​​

说明:根据当前的仪器"测量值" 和上一刻的 “预测量” 和 “误差”,计算得到当前的最优量,再预测下一刻的量。里面比较突出的是观点是:把误差纳入计算,而且分为预测误差和测量误差两种,通称为噪声。还有一个非常大的特点是:误差独立存在,始终不受测量数据的影响。

优点:巧妙的融合了观测数据与估计数据,对误差进行闭环管理,将误差限定在一定范围。适用性范围很广,时效性和效果都很优秀。

缺点:需要调参,参数的大小对滤波的效果影响较大。

典型应用:卫星轨迹预测、火箭发射、无人机与机器人运动控制....

Python实现

C实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/588607.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

this.$route.back()时的组件缓存

1.this.$route.back()回到上一个路径会重新加载 跳转时,前一个路由的内容会被销毁,当回来时,重新创建树,组件内有保存了距离,没有一开始是0. 2.keep-alive写在router-view上面,这个地方所代表的路由会被保存,因此可以写在上面,保存,当返回时,如果是这个路由,里面的内容是一样…

基于Scala开发Spark ML的ALS推荐模型实战

推荐系统,广泛应用到电商,营销行业。本文通过Scala,开发Spark ML的ALS算法训练推荐模型,用于电影评分预测推荐。 算法简介 ALS算法是Spark ML中实现协同过滤的矩阵分解方法。 ALS,即交替最小二乘法(Alte…

了解与生成火焰图

目录 一、如何看懂火焰图 1、基本特征 2、基本分类 二、如何生成火焰图 1、捕获调用栈 2、折叠栈 3、转换为 svg 格式 4、展示 svg 一、如何看懂火焰图 1、基本特征 (1)纵轴:即每一列代表一个调用栈,每一个格子代表一个函…

云计算对象存储服务

对象存储服务(OSS)中的存储桶(Bucket)叫做‘OBS桶 存储桶(Bucket):存储桶式对象存储服务中用于存储对象的基本容器,类似于文件系统中的文件夹。每个存储桶具有唯一的名称,并且可以在桶中存储任…

15.Python访问数据库

如果数据量较少,则我们可以将数据保存到文件中;如果数据量较 大,则我们可以将数据保存到数据库中。 1 SQLite数据库 SQLite是嵌入式系统使用的关系数据库,目前的主流版本是SQLite 3。SQLite是开源的,采用C语言编写而…

新版Pubmed初识

PubMed基本检索操作指南。 PubMed和MEDLINE MEDLINE是美国国立医学图书馆(The National Library of Medicine,NLM)开发的国际性综合生物医学信息书目数据库,是当前国际上最权威的生物医学文献数据库。内容包括美国医学索引&…

c#仿ppt案例

画曲线 namespace ppt2024 {public partial class Form1 : Form{public Form1(){InitializeComponent();}//存放所有点的位置信息List<Point> lstPosition new List<Point>();//控制开始画的时机bool isDrawing false;//鼠标点击开始画private void Form1_MouseD…

两数之和-考察哈希表的运用

题目 给定一个整数数组 n u m s nums nums和一个整数目标值 t a r g e t target target&#xff0c;请你在该数组中找出和为目标值 t a r g e t target target的那 两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同…

04-03 周三 使用印象笔记API批量更新笔记标题

04-03 周三 使用印象笔记API批量更新笔记标题 时间版本修改人描述2024年4月3日11:13:50V0.1宋全恒新建文档 简介 安利印象笔记 在阅读这篇博客之前&#xff0c;首先给大家案例一下印象笔记这个应用&#xff0c;楼主之前使用onenote来记录自己的生活的&#xff0c;也记录了许多…

Android 自定义View 测量控件宽高、自定义viewgroup测量

1、View生命周期以及View层级 1.1、View生命周期 View的主要生命周期如下所示&#xff0c; 包括创建、测量&#xff08;onMeasure&#xff09;、布局&#xff08;onLayout&#xff09;、绘制&#xff08;onDraw&#xff09;以及销毁等流程。 自定义View主要涉及到onMeasure、…

揭秘糖尿病患者稳定控制血糖的关键!

患者在就诊之前一直使用的二甲双胍和达格列净这两种降糖药物&#xff0c;这两种药对于控制血糖是有一定效果的。北京崇文门医院朱学敏主任的建议是继续服用&#xff0c;然后患者空腹血糖在7-8mmol/L左右&#xff0c;餐后血糖稍高&#xff0c;达到9-10mmol/L&#xff0c;但总体上…

怎么把图片改大小尺寸?简单的图片处理技巧分享

图片改变大小尺寸可以通过图像处理软件或在线工具来实现&#xff0c;图片改大小可以有多种作用&#xff1a;首先&#xff0c;改变图片的大小可以使其适应不同的显示设备&#xff0c;如手机、平板电脑或电脑屏幕。这样可以确保图片在不同设备上显示时不会失真或变形;其次&#x…