对于随机干扰 , 限幅滤波是一种有效的方法;
基本方法:比较相邻n 和 n - 1时刻的两个采样值y(n)和 y(n – 1),根据经验确定两次采样允许的最大偏差。如果两次 采样值的差值超过最大偏差范围 ,认为发生可随机干扰 ,并认为后一次采样值y(n)为非法值 ,应予删除 ,删除y(n)后 ,可用y(n – 1) 代替y(n);若未超过所允许的最大偏差范围 ,则认为本次采样值有效。
下面是限幅滤波程序:(DELAT_MAX值可根据实际情况调整,effective_value为有效值 , new_value 为当前采样值滤波程序返回有效的实际值 )
#include <stdio.h>
// 声明最大误差
#define DELAT_MAX 10
// 定义滤波数据类型
typedef int filter_type;
// 函数声明
filter_type filter(filter_type effective_value, filter_type new_value, filter_type delat_max);
// 限幅滤波函数
filter_type filter(filter_type effective_value, filter_type new_value, filter_type delat_max)
{
if ( ( new_value - effective_value > delat_max ) || ( effective_value - new_value > delat_max ))
return effective_value;
return new_value;
}
// 打印测试
void main()
{
filter_type a = 8;
filter_type b = -3;
filter_type c;
c = filter(a, b, DELAT_MAX);
printf("%d", c);
}
输出结果: