在实际生产中,相邻两次采样值之间的变化都有一个合理的限度。如果相邻两次采样值之间的变化为超过预定的范围,说明该采样值未收到明显干扰,可以采信。如果相邻两次采样值之间的变化超过预定范围,说明采样值收到明显干扰,不能采信。对于不可信得采样数据,必须输出一个合理的替代数据,以保证采样序列的连续性和完整性。

一、采用前一个数值替代

  在要求不高的场合,可以用前一个采样数据来替代。这种由程序进行简单判断的数字滤波算法称为“程序判断滤波”,也称“限幅滤波”。相应程序如下:

#define D 10                     //相邻两次采样之间最大允许变化值
int history;                        //上次采样值
int filter()
{int new;new=SampleADC();              //进行一次采样if((new-history>D)||(history-new>D))//与前一次采样值比较   new=history;                       //如果超过允许范围,以前一次数据为准history=new;                     //刷新上次采样值return new;                            //返回本次有效值}

二、采用预测数值替代

  当被检测物理量处于明显变化阶段时,相邻两个采样值之间的差别也比较明显,这时采用前一个采样值替代当前采样值就会存在较大误差。因此可以利用被检测物理量的变化趋势来进行预测,选择一个更加合理的数据来替代当前受干扰的采样值,使得替代误差大大减小。
为了掌握被检测物理量的变化趋势,至少需要 两次以上的采样记录。如果采用最简单的线性预测算法,只要两个历史采样值就可以了。线性预测算法的含义为“当前采样值的变化趋势与前一次采样值的变化趋势相同”,即采样值在短期内保持相同的上升或下降趋势。设相邻3次采样值依次为x0,x1和x2,则有:
    x2-x1=x1-x0
由此可得:
    x2=2x1-x0
  即由两个历史采样值x0和x1可以预测当前采样值x2,用这个预测值来替代受干扰的当前采样值会更加合理。改进的程序如下:

#define D 10
int history[2];
int filter()
{int new;new=SampleADC();if((new-history[1]>D)||(history[1]-new>D)){new=2*history[1]-history[0];if(new<0)new=0;if(new>4095)new=4095;}history[0]=history[1];history[1]=new;retuen new;
}

  程序判断滤波的关键是合理确定采样周期和相邻两次采样值得最大允许变化值。
  程序判断滤波本质上是低通滤波,由于毛刺型突发干扰为高频干扰,故可以被很好地滤除。另一方面,程序判断滤波采用限幅手段来达到滤波目的,对于幅度比较小的噪声干扰无能为力,即不能滤除随机干扰,因此只能用于对精度要求不是很高的场合。

数字滤波算法——程序判断滤波相关推荐

  1. 算术平均值滤波matlab程序,基于S7-1200 AD采样的高效数字滤波算法的设计与实践...

    在工业控制中,常常会伴随大量的模拟量数据采样.模拟量采样时,由于待采量本身.传感器和传输过程中的外界干扰,特别是非稳态干扰信号等因素的影响,采样值中通常含有各种周期性和非周期性的噪声和干扰.为得到稳定 ...

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

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

  3. 红外测距传感器GP2D12与STM32单片机程序,滤波算法

    红外测距传感器GP2D12与STM32单片机程序,滤波算法,设计步骤和代码流程清晰非常实用. 是机器人中最常用的红外测距传感器. 程序源码注释详细,非常适合单片机开发人员. ID:7887031794 ...

  4. 单片机的几种数字滤波算法

    关注.星标公众号,直达精彩内容 单片机主要作用是控制外围的器件,并实现一定的通信和数据处理. 但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算. 下面主要是介绍如 ...

  5. 单片机数字滤波算法如何实现?(附代码)

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

  6. 经典算法题 -- 判断单链表是否成环及寻找成环节点

    引言 判断单链表是否成环是一个计算机领域的经典算法问题 如何通过程序判断传入的链表是否存在环,并且求出环长度.成环点等问题 下面就是一个存在环的单链表 基本算法 -- hash 最简单的方法是创建一个 ...

  7. 判断玫瑰花数c语言程序设计教程课后答案,编写程序判断某个四位整数是否为玫瑰花数(用自定义函数)...

    用C语言编写判断输入的某个数m是否为素数 //判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是不是素数!#include#includemain(){i ...

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

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

  9. 用c语言程序判断谁是小偷

    用c语言程序判断谁是小偷 题目: 警察局抓了a,b,c,d四名偷窃嫌疑犯,当中只有一个是小偷,审问结果如下: a说:"我不是小偷." b说:"c是小偷." c说 ...

  10. 《C语言程序设计》(谭浩强第五版) 第2章 算法——程序的灵魂

    <C语言程序设计>(谭浩强第五版) 第2章 算法--程序的灵魂 习题解析与答案 你也可以上程序咖(https://meta.chengxuka.com),打开大学幕题板块,不但有答案,讲解 ...

最新文章

  1. nvm卸载node_nvm-node版本管理工具
  2. 轨道阱 matlab,赛默飞四极杆-轨道阱液质联用仪核心参数详解
  3. 文件结束[置顶] javaweb框架--自定义标签与freemaker结合
  4. vue单向数据流与双向绑定两者区别
  5. vue之slot用法
  6. sharepoint2010网站根据权限隐藏ribbon
  7. matlab 小波变换_连续小波变换实现方法的总结及其程序详解
  8. 上海正在夺回互联网 “失落的十年”
  9. python redis连接池最大连接数_python redis之连接池的原理
  10. springboot怎么返回404_自定义SpringBoot REST API 404返回信息
  11. (转)ARM Linux启动过程分析
  12. centos7 install pip
  13. java左移负数位_java的左移运算符和右移运算符
  14. 在线教你图像分辨率怎么调整?
  15. WinRAR 设置默认密码
  16. 浏览器内核控制Meta标签说明文档(360浏览器默认极速模式)
  17. 【史上最最最高仿】V2EX论坛源码—React + Golang开源库,求高手拍砖提建议~
  18. (16)全民小视频引流脚本模块化开发10-发送图片私信By飞云脚本学院
  19. XBL绑定组建的实例
  20. 从概率角度来确定临界点问题

热门文章

  1. Ubuntu 配置固定IP方法
  2. ARCGIS坐标和CAD坐标显示,以及坐标之间的转换
  3. 360安全浏览器强制使用极速模式打开
  4. 用python手把手教你玩跳一跳小游戏,直接打出高分
  5. Yate架构分析概要
  6. 3D建模操作详细步骤
  7. 大数据给人们生活带来的改变_大数据给我们的生活带来了哪些改变?
  8. vue3+TDesign实现表格序号递增(t-table)
  9. 北京租房住起来舒服的地方(小区)有哪些?
  10. 解决文件不显示后缀名的问题