常见的几种AD滤波算法

限幅滤波法

限幅滤波法又称程序判断滤波法 。该方法根据经验判断,确定两次采样允许的最大偏差值(设为 A)每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效;如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。

实例程序:

/* A值可根据实际情况调整value 为有效值,new_value 为当前采样值滤波程序返回有效的实际值 */#define A 10char value;char filter(void){ char new_value; new_value = get_ad(); if (( new_value - value > A) || (value - new_value > A) return value; return new_value;}

优点:

能有效克服因偶然因素引起的脉冲干扰。

缺点:

无法抑制那种周期性的干扰,平滑度差 。

中位值滤波法

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

实例程序:

/* N 值可根据实际情况调整排序采用冒泡法*/#define N 11char filter(void){    char value_buf[N];    char count,i,j,temp;    for (count=0; count<N; count++)    {        value_buf[count] = get_ad();        delay();    }    for (j=0;j<N-1;j++)    {        for (i=0;i<N-j;i++)        {            if (value_buf[i] > value_buf[i+1])            {                temp = value_buf[i];                value_buf[i] = value_buf[i+1];                value_buf[i+1] = temp;            }        }    }    return value_buf[(N-1)/2];}

优点:

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

缺点:

对流量、速度等快速变化的参数不宜。

算术平均滤波法

连续取 N 个采样值进行算术平均运算。 N 值较大时:信号平滑度较高,但灵敏度较低。N 值较小时:信号平滑度较低,但灵敏度较高。

实例程序:

#define N 12char filter(void){ int sum = 0; for (count=0; count<N; count++) { sum + = get_ad(); delay(); } return (char)(sum/N);}

优点:

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

缺点:

对于测量速度较慢或要求数据计算速度较快的实时控制不适用,比较浪费 RAM 。

中位值平均滤波法

相当于“中位值滤波法”+“算术平均滤波法”连续采样 N 个数据,去掉一个最大值和一个最小值然后计 算 N-2 个数据的算术平均值。

实例程序:

#define N 12char filter(void){    char count,i,j;    char value_buf[N];    int sum=0;        for (count=0;count<N;count++)    {        value_buf[count] = get_ad();        delay();    }    for (j=0;j<N-1;j++)    {        for (i=0;i<N-j;i++)        {            if ( value_buf[i]>value_buf[i+1] )            {                temp = value_buf[i];                value_buf[i] = value_buf[i+1];                value_buf[i+1] = temp;            }        }    }    for(count=1;count<N-1;count++)        sum += value[count];            return (char)(sum/(N-2));}

优点:

融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。

缺点:

测量速度较慢,和算术平均滤波法一样比较浪费 RAM 。

End:以上就是本次的分享。滤波算法有很多种,本文分享的是几种较为简单但却实用的。如有错误,欢迎指出!

(0)

相关推荐

  • 用STC89C52连接Phyphox(多数据协同)

    用STC89C52连接Phyphox(多数据协同) 这一篇笔记,尽管是使用51单片机实现的,但从原理以及未来的实用性上看,显然适用于Arduino.ESP32以及8266等其他常见单片机,集成蓝牙与不 ...

  • 嵌入式开发C语言编程的那些编程思路与技巧

    原创嵌入式小萧2020-11-07 14:17:42 在嵌入式开发中使用得比较多的编程语言一般都是C语言.在使用C语言开发的初期有时自己想要实现一个功能的时候就算自己已经有了大概的思路,但真正去设计时 ...

  • Excel计数函数:从COUNT 到COUNTIFS

    今天,小编为大家介绍另一个类别的函数,即:计数函数的使用方法,计数函数和求和函数的类别一样,同样有着计数.单条件计数以及多条件计数之分,快跟着小编一起去看看吧: 一.COUNT():计数函数 参数:C ...

  • 【精品博文】Itop4412学习笔记(2)

    今天学习的是文件IO的操作,需要记录的点: 1.库函数头文件 在所有Linux系统中,对文件的操作都只需包含下面四个头文件即可: #include <unistd.h>     #incl ...

  • 十大滤波算法

    5.中位值平均滤波法(又称防脉冲干扰平均滤波法) [pre lang="arduino" line="1"]/* A.名称:中位值平均滤波法(又称防脉冲干扰平均 ...

  • 面试常见的四种算法思想,全在这里了

    贪心算法有很多经典的应用,比如霍夫曼编码(Huffman Coding).Prim 和 Kruskal 最小生成树算法.还有 Dijkstra 单源最短路径算法.第一步,当我们看到这类问题的时候,首先 ...

  • 11种经典软件滤波算法及其波形效果图(附C语言程序)

    经典软件数据滤波算法 (后页附带C语言程序) 注意注意注意:(图像中红线都是经过滤波的) 1.限幅滤波法(又称程序判断滤波法) A.方法: 根据经验判断,确定两次采样允许的最大偏差值(设为 A) 每次 ...

  • 常见的10种病最怕的中成用药,中医医师医...

    常见的10种病最怕的中成用药,中医医师医师都在用,建议收藏备用! 1.子宫肌瘤--"最怕"--宫瘤消颗粒 2.口疮--"最怕"--知柏地黄丸 3.颈椎病--&q ...

  • 湿热体质常见的10种疾病,对应的用药大全...

    湿热体质常见的10种疾病,对应的用药大全,建议收藏备用   1,胆结石➟➟利胆排石片 成分:金钱草.茵陈.黄芩.木香.郁金.大黄.槟榔.枳实(麸炒).芒硝.厚朴(姜炙). 功效:清热利湿,利胆排石. ...

  • 大豆油危害最大,花生油、橄榄油……常见的4种油,哪种更健康

    问:世界上最不干净的油是什么? 答:地沟油.反式脂肪 问:除了这2种呢? 答题者挠挠头,一脸懵逼,答:除了这2种油,应该没有了吧? 其实,还有一种油,对身体的危害也很大. 一.大豆油的危害比糖还可怕 ...

  • 组织常见的5种“敬业”员工类型

    进步型的组织越来越关注于改进他们的人才管理策略,以有效地管理多世代人聚合在一起的员工,从而在数字化时代保持竞争力.这个举措的一个重要方面是组织拥有更多敬业的员工,确保员工在保持绩效方面的内在动力是超越 ...

  • 【眩晕!中医常见眩晕6种类型,治疗眩晕常...

    [眩晕!中医常见眩晕6种类型,治疗眩晕常用中成药方]欢迎分享收藏! 中医认为眩是眼花,晕是头晕.二者常同时并见.故统称为'眩晕'.轻者闭目即止:重者如坐车船,旋转不定,也常伴有恶心.呕吐.汗出等. 1 ...

  • 95码号、106码号申请时常见的几种错误

    每天,我们都能收到不少短信,来自银行的通知.物流的提醒.商家店铺的促销.发送的号码,一开始是常见的手机号码,慢慢的越来越多地变成106开头或95开头的号码.这类码号具有较高的含金量和良好的识别率,也是 ...

  • 妇科病常见的三种舌苔:薄苔,厚苔和热苔,...

    妇科病常见的三种舌苔:薄苔,厚苔和热苔,你属于哪种?   第一种:薄苔(能看到舌质):可见于正常人.或者病情清浅的人,多出现虚,脾虚,胃虚,肾虚,气血虚 第二种:厚腻苔(不能看到舌质):里证,或者有痰 ...