本文用于记录阅读完《匠人手记:一个单片机工作者的实践与思考》一阶滤波算法的记录和心得。

一阶滤波算法公式:Yn(本次滤波值)=aXn(新采样值)+(1-a)(上一次滤波值)。
a表示滤波系数(在0~1范围之内),此公式用于表达将新采样值与上一次滤波值做一个权重分配,如:a=0.4,那么本次滤波值就会等于新采样值的0.4+上一次滤波值的0.6,如果新采样值猛然突变,那么因为权重的分配,就会降低本次滤波值受到新采样值的突变影响,因为受到权重的限制。

//---------------------------------
//单字节一阶滤波程序
//入口:     NewData = 新采样值
//          OldData = 上次滤波值
//          K       = 滤波系数(0~255)代表采样值在滤波值中占的权重
//出口:     本次滤波值
//公式原型:Yn(本次滤波值)=a*Xn(新采样值)+(1-a)*Yn(上一次滤波值)
//公式变形:当新采样值<上次滤波结果时:滤波结果=上次滤波结果-(上次滤波结果-新采样值)*一阶滤波系数/256
//         当新采样值>上次滤波结果时:滤波结果=上次滤波结果+(上次滤波结果-新采样值)*一阶滤波系数/256uint8_t Filter_1st(uint8_t NewData, uint8_t OldData)
{static k = 0;           //滤波系数,可以在初始化时赋值一个最初系数,在0~255之间uint32_t result;        //使用uint32_t的目的是因为后续要将值*256if (NewData < OldData) {result = OldData - NewData;result = result * k;result = result + 128;          //进行四舍五入,因为128/256=0.5result = result / 256;result = OldData - result;} else if (NewData > OldData){result = NewData - OldData;result = result * k;result = result + 128;          //进行四舍五入,因为128/256=0.5result = result / 256;result = OldData + result;} else result = OldData;return ((uint8_t) result);
}

滤波系数=20

滤波系数较小时,一阶滤波算法可以滤除一些偶然的干扰,滤波结果平稳,但是灵敏度比较低,当数据进行突变时,数据需要多次采集之后才能跟得上变化。
②滤波系数等于中间值128

平稳度和灵敏度都比较一般,滤波结果比采样结果更平滑一些,但是不能消除干扰。
③滤波系数最大256

几乎跟采样数据一样,并无滤波效果。

一阶静态滤波算法(滤波系数不变)的不足:
1.无法兼顾平稳度和灵敏度,只能舍弃其一,我们希望:在数据快速变化时,滤波结果能快速反应(灵敏度优先);而数据趋于稳定时,在一个固定的点进行上下波动时,滤波结果能趋于平稳(平稳度优先)。
2.舍弃小数带来微弱误差,如:本次采样值=25,上次滤波结果=24,滤波系数=10,根据算法本次滤波结果=(2510+24(256-10))/256=24.0390625,进行四舍五入则会得到24,如果一直采样到25,那么滤波值会一直偏差。

改进方法:动态改变滤波系数
需要实现效果:
①当数据快速变化时,滤波结果能及时跟进变化,并且变化越快,灵敏度越高(灵敏度优先)。
②当数据趋于稳定后,在一个范围波内振荡时,滤波结果能趋于稳定(平稳度优先)。
③当数据稳定后,滤波结果能逼近于采样值,消除舍弃小数带来的误差。

如何做到:
改变系数之前需要做的准备:
①数据变化是否朝着同一个方向变化(如连续采集的两个值都大于上次滤波值,视为变化方向一致,判断是否为同一方向的次数可视情况而定)。
②数据变化是否较快(判断采样值和上次滤波值之间的差值)
调整系数的原则:
①当两次数据变化方向不一致时,说明有抖动,将滤波系数清0,忽略本次采样值。
②当数据持续向一个方向变化时,逐渐提高滤波系数,提高新采样值的权值。
③当数据变化较快(差值>消抖计数加速反应阈值时)时,加快滤波系数的变化,即突变的非常厉害时。


以上纯属个人见解,有误之处还望大家指正。

单片机滤波算法之一阶滤波相关推荐

  1. matlab中基于十字形窗口的滤波算法,#215;字形滤波窗口在Matlab自适应中值滤波算法中的应用 - 21ic中国电子网...

    由于种种原因,图像在生成.传输.变换等过程中往往会受到各种噪声的污染,从而导致图像质量退化.噪声信号的滤波是图像处理的基本任务之一,主要有线性滤波和非线性滤波两种方法.线性滤波方法一般具有低通特性,而 ...

  2. java 滤波算法_双边滤波算法

    1.原理 高斯滤波是以距离为权重,设计滤波模板作为滤波系数,只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息. 高斯滤波的缺陷如下图所示:平坦区域正常滤波,图像细节没有变化,而在突变的 ...

  3. c语言双边滤波算法,快速双边滤波 附完整C代码

    很早之前写过<双边滤波算法的简易实现bilateralFilter>. 当时学习参考的代码来自cuda的样例. 相关代码可以参阅: https://github.com/johng12/c ...

  4. C 语言实现的滑动平均滤波算法,滑动平均滤波算法(递推平均滤波法)

    /// ///滑动平均滤波算法(递推平均滤波法) /// /// /// GN为数组value_buf[]的元素个数,该函数主要被调用,利用参数的数组传值 /// private const int ...

  5. 【老生谈算法】matlab实现线性平滑滤波算法——线性平滑滤波算法

    matlab线性平滑滤波程序 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]免疫算法+matlab程序.docx 2.算法详 ...

  6. 一阶RC低通滤波算法原理与实现

    文章目录 1. 一阶低通滤波算法原理 2. 一阶滤波算法的特点 3. 基本算法的例程 4. 优化:减少乘.除的运算次数以提高运算速度 5. 改进:动态调整滤波系数 动态调整滤波例程 本文整理自网络,参 ...

  7. 滑动平均滤波_单片机数字滤波算法如何实现?(附代码)

    关注.星标公众号,直达精彩内容ID:技术让梦想更伟大整理:李肖遥 单片机主要作用是控制外围的器件,并实现一定的通信和数据处理.但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进 ...

  8. c语言滤出是个最小值,经典滤波算法及C语言程序

    <经典滤波算法及C语言程序>由会员分享,可在线阅读,更多相关<经典滤波算法及C语言程序(9页珍藏版)>请在人人文库网上搜索. 1.经典的滤波算法经典的滤波算法 可以用用可以用用 ...

  9. 自动驾驶 - 滤波算法

    自动驾驶 - 滤波算法 目前比较常用的滤波算法有: 平均值滤波算法 中位值滤波算法 一阶滤波算法 卡尔曼滤波算法 1. 平均值滤波算法 1.1. 算法介绍 平均值滤波算法是比较常用,也比较简单的滤波算 ...

最新文章

  1. centos7.4.3 部署python-pcl亲测可用(采坑记)
  2. html action get post请求参数乱码,input type=text 发送请求参数,中文乱码问题
  3. win10 详细配置JAVA环境变量(最详细),操作步骤如下:
  4. JVM_垃圾收集器与内存分配策略01
  5. 新东方雅思词汇---6.1、oppose
  6. C/C++ 文件读取操作 竞赛篇
  7. Acrobat Pro DC 2021 for Mac(pdf编辑器)中文版
  8. 区块链 Fisco bcos 智能合约(13)-Solidity的设计模式
  9. 姜启源《数学建模》学习笔记 第一周
  10. 瑞利信道的多普勒谱的原理与MATLAB仿真
  11. MTK7620A FLASH W25Q256学习
  12. TIMESTEN安装配置指南-中文版
  13. AV1 解码器 dav1d
  14. NCURSES程序设计之魔数方阵
  15. 广发卡知识知多少?不懂来看,不然吃亏了!
  16. Loongson_2F/ 3A【tftp+u盘】方式安装系统(开机不认u盘)
  17. ios html加载css样式,iOS加载HTML, CSS代码
  18. Linux中 ps命令详解
  19. 使用dba_waiters检查锁等待
  20. 热搜排序 半衰期的应用

热门文章

  1. 直播时代:对直播平台和主播的监管更严格
  2. 交换机与路由器技术-10-交换机密码恢复
  3. 手机网站和电脑网站设计是需注意的区别
  4. 关于PHP发送邮箱验证码功能介绍
  5. 软考高项:项目质量管理真题及答案
  6. doc后缀/Excel 文件导出
  7. 智能终端信息安全概念(八):硬件安全技术—芯片自主化与安全硬件架构
  8. 中国的Mr.internet 阿里巴巴CEO 马云(来源:morris)
  9. java入门自学书籍,HR的话扎心了
  10. JavaScript中的自执行函数和闭包实现过程