消抖滤波算法
- 应用场景
对于变化缓慢的被测参数有较好的滤波效果, 可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动。
- 原理分析
设置一个滤波计数器,将每次采样值与当前有效值比较:如果采样值=当前有效值,则计数器清零;如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出);如果计数器溢出,则将本次值替换当前有效值,并清计数器。
- 参考代码
#define N 12
typedef int filter_type;
filter_type filter( filter_type new_value)
{
filter_type count = 0;
filter_type value = 0;
filter_type new_value = Read(); /*读取采样值*/
while( value != new_value )
{
count++;
if( count >= N )
{
value = new_value;
return new_value;
}
new_value = Read();
}
return value;
}
- 补充说明
优点:
对于变化缓慢的被测参数有较好的滤波效果, 可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动。缺点:
对于快速变化的参数不宜 如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统。