限幅滤波法就是通过软件来限制本次采样值的上次采样值的偏差,若本次采样值和上次采样值的偏差超过了设定的最大偏差值,则丢弃本次的采样值。

下面看C代码的实现

//返回两个整数差
unsigned int num_sub( unsigned int a, unsigned int b )
{return ( a >= b ? ( a - b ) : ( b - a ) );
}#define A 200                    //允许最大误差值unsigned int  filter1( void )
{static unsigned int  value;unsigned int  new_value;new_value = ReadVol_CH2();if( num_sub( new_value, value ) > A ){return value;}value = new_value;return new_value;
}

A为连续两次采样的最大误差值,若两次采样值的差超过了允许最大误差,则丢弃本次采样值。若误差小于允许最小误差,则认为本次采样值有效。

void main( void )
{while( 1 ){val = ReadVol_CH2();            //读取AD采样值val1 =  filter1();printf( "A%d\r\n", val );printf( "B%d\r\n", val1 );}
}

主程序中循环读取AD口的采样值,并将采样值通过限幅滤波算法进行滤波,通过串口分别打印原始采样值和滤波后的值,并通过串口将数据打印来,并在串口波形软件上显示。

蓝色曲线为采样的原始数据波形图,橙色曲线为经过限幅滤波算法滤波后的波形图。通过两组曲线可以看出,经过限幅滤波算法后,将原始曲线中的尖峰数据滤除掉了,使得采样数据更加平滑。

限幅滤波法可以滤除偶然因素引起的脉冲干扰,但是要求对系统的采样数据范围要有准确的判断,否则如果允许误差值设置不合理,可能会将系统中正常的数据滤掉。

单片机ADC采样算法----限幅滤波法相关推荐

  1. 单片机ADC采样算法----中位值滤波法

    中位值滤波法就是通过连续采样奇数个数据,然后对数据从小到大排序,取中间的值做为本次采样值. 下面看C代码的实现 #define M 11unsigned int filter2( void ) {un ...

  2. 单片机ADC采样算法----限幅消抖滤波法

    限幅消抖滤波法相当于"限幅滤波法"+"消抖滤波法"    . 下面直接看C代码的实现 #define A 200 #define N 20 //返回两个整数差 ...

  3. 单片机ADC采样算法----限幅平均滤波法

    限幅平均滤波法相当于"限幅滤波法"+"递推平均滤波法",每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理. 下面看C代码的实现 #define ...

  4. 单片机ADC采样算法----递推平均值采样法

    在上一篇文章单片机ADC采样算法---平均值采样法中分析了平均值采样法的使用,上篇文章中的平均值采样法是连续采样100个数据,然后求平均值,这种方法存在一个问题,就是采集100个值之后,下一次又重新采 ...

  5. c语言adc采集取平均值,单片机ADC采样算法----递推平均值采样法

    在上一篇文章单片机ADC采样算法---平均值采样法中分析了平均值采样法的使用,上篇文章中的平均值采样法是连续采样100个数据,然后求平均值,这种方法存在一个问题,就是采集100个值之后,下一次又重新采 ...

  6. 单片机ADC采样算法----消抖滤波法

    消抖滤波法的实现步骤为:设置一个滤波计数器,将每次采样值与当前有效值比较,如果采样值等于当前有效值,则计数器清零.如果采样值不等于当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出),如 ...

  7. 单片机ADC采样算法----加权递推平均滤波法

    加权递推平均滤波法是对递推平均滤波法的改进,即不同时刻的数据加以不同的权.通常是,越接近现时刻的数据,权取得越大.给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低. 下面直接看C代码的实现 d ...

  8. 单片机ADC采样算法----中位值平均滤波法

    中位值平均滤波法滤波法就是通过连续采样N个数据,然后对数据从小到大排序,然后去掉最大值和最小值,对剩余的N-2个值计算算数平均值.也就是中位值滤波和算数平均滤波的结合. 下面看C代码的实现 #defi ...

  9. 单片机ADC采样算法----一阶低通滤波

    关于低通滤波,先看一下百度百科上的定义. 算法实现的公式如下:  y(n) = q*x(n) + (1-q)*y(n-1)     其中Y(n)为输出,x(n)为输入,y(n-1)为上一次输出值,其中 ...

最新文章

  1. qlabel 边加载边更新_盘点十四款国产进口边三轮,挎斗子摩托车,售价从1万至60多万...
  2. 白话:服务降级与熔断的区别
  3. 四川网络推广介绍什么样的网站架构更能吸引蜘蛛爬行抓取?
  4. 【ArcGIS遇上Python】ArcGIS Python批处理入门到精通实用教程目录
  5. MUI调用原生自定义方法实现计算缓存与清空缓存
  6. uboot 的 bootcmd 和bootargs参数详解
  7. 《ArcGIS Runtime SDK for Android开发笔记》——(15)、要素绘制Drawtools3.0工具DEMO
  8. Excel 二次开发系列(3): 创建Excel二次开发环境
  9. LINUX 编译安装 PHP 环境
  10. cat3 utp是不是网线_网线UTP-CAT5、UTP-CAT5e、UTP-cat6产品简介讲解
  11. 基于自适应惯性权重的樽海鞘群算法
  12. py文件转换成exe格式
  13. python+request 哔哩哔哩视频下载
  14. Windows 10 应用创建模糊背景窗口的三种方法
  15. 项目管理知识体系指南(七)项目质量管理
  16. jvm 面试之参数实战
  17. 教育类型网站用户体验分析——以UMU学习平台、学生安全教育平台、师路南通为例...
  18. 陕西万德软件有限公司
  19. JSONObject使用方法
  20. mac上的PCB设计软件现状

热门文章

  1. TFTP服务器在Cisco设备上的应用(上传、下载IOS)
  2. (python)数据结构------列表
  3. Java_基础—用LinkedList模拟栈数据结构的集合并测试
  4. 1、ClassLoader.getResourceAsStream() 与Class.getResourceAsStream()的区别
  5. Cognos访问权限之让拒绝更友善
  6. 单链表的插入操作的实现(0952)SUWST-OJ
  7. IE下get传中文乱码的问题完美解决方案
  8. Android Debug Bridge 技术实现原理
  9. Windows编程革命简史
  10. LFS安装过程记录(1)-准备工作