在常用滤波算法中,消抖滤波法是一种针对数字信号处理中的抖动问题设计的滤波方法,主要用于消除因信号不稳定或干扰引起的数值快速波动,通过设置一个计数器来累计采样值与当前有效值的不一致次数,当计数器达到一定上限时,才将新的采样值认定为有效值,从而避免系统因短暂干扰而产生误动作。
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()函数进行延时,然后重新获取采样值。
本文凡亿教育原创文章,转载请注明来源!
暂无评论