单片机ADC采样算法----限幅平均滤波法
限幅平均滤波法相当于“限幅滤波法”+“递推平均滤波法”,每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理。
下面看C代码的实现
#define A 200
#define N 20//返回两个整数差
unsigned int num_sub( unsigned int a, unsigned int b )
{return ( a >= b ? ( a - b ) : ( b - a ) );
}unsigned int filter6( void ) //采样正弦波 相位有延时
{static unsigned int value_buf[N];static unsigned int i = 0;unsigned int count;unsigned int new_value = 0;static unsigned int last_value = 0;int sum = 0;new_value = ReadVol_CH2();if( num_sub( new_value, last_value ) < A ){value_buf[i++] = new_value;last_value = new_value;}else{value_buf[i++] = last_value;}if( i == N ){i = 0;}for( count = 0; count < N; count++ ){sum += value_buf[count];}return ( unsigned int )( sum / N );
}
首先通过限幅滤波法对采样的数据进行筛选,对符合要求的数据,循环存储到数组中,最后对数组中的采样值取算数平均值。
void main( void )
{while( 1 ){val = ReadVol_CH2(); //读取AD采样值val1 = filte6();printf( "A%d\r\n", val );printf( "B%d\r\n", val1 );}
}
主程序中循环读取AD口的采样值,并将采样值通过限幅平均滤波法进行滤波,通过串口分别打印原始采样值和滤波后的值,并通过串口将数据打印来,并在串口波形软件上显示。
蓝色曲线为采样的原始数据波形图,橙色曲线为经过限幅平均滤波法滤波后的波形图。通过两组曲线可以看出,经过滤波算法后,可以有效的滤出系统中出现的脉冲干扰,使得采样数据更加平滑。
限幅平均滤波法融合了限幅滤波法和递推平均滤波法的两种滤波算法的优点 ,使采样结果更加准确,但是计算速度会变慢,也需要一定的空间来存储数据。
单片机ADC采样算法----限幅平均滤波法相关推荐
- 单片机ADC采样算法----中位值平均滤波法
中位值平均滤波法滤波法就是通过连续采样N个数据,然后对数据从小到大排序,然后去掉最大值和最小值,对剩余的N-2个值计算算数平均值.也就是中位值滤波和算数平均滤波的结合. 下面看C代码的实现 #defi ...
- 单片机ADC采样算法----消抖滤波法
消抖滤波法的实现步骤为:设置一个滤波计数器,将每次采样值与当前有效值比较,如果采样值等于当前有效值,则计数器清零.如果采样值不等于当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出),如 ...
- 单片机ADC采样算法----限幅消抖滤波法
限幅消抖滤波法相当于"限幅滤波法"+"消抖滤波法" . 下面直接看C代码的实现 #define A 200 #define N 20 //返回两个整数差 ...
- 单片机ADC采样算法----限幅滤波法
限幅滤波法就是通过软件来限制本次采样值的上次采样值的偏差,若本次采样值和上次采样值的偏差超过了设定的最大偏差值,则丢弃本次的采样值. 下面看C代码的实现 //返回两个整数差 unsigned int ...
- 单片机ADC采样算法----递推平均值采样法
在上一篇文章单片机ADC采样算法---平均值采样法中分析了平均值采样法的使用,上篇文章中的平均值采样法是连续采样100个数据,然后求平均值,这种方法存在一个问题,就是采集100个值之后,下一次又重新采 ...
- c语言adc采集取平均值,单片机ADC采样算法----递推平均值采样法
在上一篇文章单片机ADC采样算法---平均值采样法中分析了平均值采样法的使用,上篇文章中的平均值采样法是连续采样100个数据,然后求平均值,这种方法存在一个问题,就是采集100个值之后,下一次又重新采 ...
- 单片机ADC采样算法----加权递推平均滤波法
加权递推平均滤波法是对递推平均滤波法的改进,即不同时刻的数据加以不同的权.通常是,越接近现时刻的数据,权取得越大.给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低. 下面直接看C代码的实现 d ...
- 单片机ADC采样算法----中位值滤波法
中位值滤波法就是通过连续采样奇数个数据,然后对数据从小到大排序,取中间的值做为本次采样值. 下面看C代码的实现 #define M 11unsigned int filter2( void ) {un ...
- 单片机ADC采样算法----平均值采样法
单片机在模拟电路中使用的时候,经常需要用到AD功能,而通过单片机ADC采集回来的数据往往不能直接使用,在不同场合下需要对采集到的数据要通过不同的算法对数据进行处理,先来看看最简单的平均值采样法. 平均 ...
最新文章
- Numpy中的meshgrid()函数
- 自定义View开发时踩的坑
- Linux 备份系统重要服务的配置文件脚本
- 《系统集成项目管理》第十五章 信息(文档)和配置管理
- 【图像】imagededup照片去重(感知哈希,汉明距离)
- swift html转义,swift中webview的URL带中文或者特殊字符的处理
- bootstrap学习(二)页面
- 解决vlc-android播放http视频退出问题
- 护士资格证延续注册WEB服务调用失败_服务熔断
- ViewState的原理,应用场合,注意事项
- 团队计划(4.27)
- python类之间传参_没看懂这11 条,别说你精通 Python 装饰器
- v4l2接口,结构图
- 数字电子技术基础-2-逻辑函数的最小项与最大项
- 关于求余运算(余数为正)
- 263企业邮箱imap服务器,263企业邮箱支持IMAP邮箱搬家功能
- WPF渲染事件CompositionTarget.Rendering
- CC BY-SA 4.0知识共享许可协议
- HTML+CSS+JS实现鼠标点击特效富强民主文明方法
- 一些实用的安卓UI设计工具
热门文章
- Linux常用基本命令(rename,basename,dirname)
- 使用NPO依赖的一些类库文件介绍
- Atitit.eclipse git使用
- java使用内部类的好处及其初始化
- 【原】如何实现IE6下块级元素的内容自动收缩
- PowerShell 在 SharePoint 2010 自动化部署中的应用(2)-编译打包
- 研磨设计模式之 工厂方法模式-3
- C#语法之event关键字
- dll放在unity哪个文件夹下_程序丨如何将你的Unity代码整理到一个DLL中?
- mac docker mysql_Mac操作系统上使用Docker创建MySQL主从数据库