凡亿教育-苏苏
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | 消抖滤波法是什么?(附源代码)
消抖滤波法是什么?(附源代码)

在常用滤波算法中,消抖滤波法是一种针对数字信号处理中的抖动问题设计的滤波方法,主要用于消除因信号不稳定或干扰引起的数值快速波动,通过设置一个计数器来累计采样值与当前有效值的不一致次数,当计数器达到一定上限时,才将新的采样值认定为有效值,从而避免系统因短暂干扰而产生误动作。

image.png

1、消抖滤波法的原理

消抖滤波法的核心在于:

设置一个滤波计数器。

每次采样时,将采样值与当前有效值进行比较。

如果采样值与当前有效值相等,计数器清零。

如果采样值与当前有效值不相等,计数器加一。

当计数器达到预设上限N时,将新的采样值认定为有效值,并重置计数器。

2、消抖滤波法的示例代码

#include

#include


// 预设的计数器上限

#define N 12


// 模拟获取AD采样值的函数(需用户实现)

extern char get_ad();


// 假设有一个全局变量存储当前有效值

extern char value;


// 简单的延时函数(需用户实现)

void delay();


// 消抖滤波函数

char filter() {

    char count = 0;

    char new_value;


    // 获取首次采样值

    new_value = get_ad();


    // 循环比较采样值与当前有效值

    while (value != new_value) {

        count++; // 不相等时计数器加一

        if (count >= N) { // 达到上限,认定新值为有效值

            value = new_value; // 更新有效值

            count = 0; // 重置计数器

            return value; // 返回新的有效值

        }

        delay(); // 延时后再次采样

        new_value = get_ad(); // 获取新的采样值

    }


    // 如果循环结束仍未达到上限,则返回当前有效值(理论上不会到这里)

    return value;

}


// 注意:get_ad()、value、delay()函数需用户根据具体硬件和软件环境实现。

3、代码说明

  • 预设上限N:定义计数器上限为12,根据实际应用调整。

  • 获取采样值:通过get_ad()函数获取模拟信号的采样值。

  • 比较与计数:在while循环中比较采样值与当前有效值,如果不相等则计数器加一。

  • 判断上限:当计数器达到上限时,更新当前有效值并重置计数器。

  • 延时与重试:在每次比较后调用delay()函数进行延时,然后重新获取采样值。


本文凡亿教育原创文章,转载请注明来源!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论