算术平均滤波适用于对一般具有随机干扰的信号进行滤波。这种信号的特点是有一个平均
值,信号在某一数值范围附近做上下波动,在这种情况下仅取一个采样值做依据显然是不
准确的。算术平均滤波对信号的平滑程序完全取决于 N,当 N 较大时,平滑度高,但灵敏
度低;当 N 较小时,平滑度低,但灵敏度高,应视具体情况选取 N,以便既少占用计算时
间,又达到最好的效果。
1.3加权平均滤波
在算术平均滤波和移动平均滤波中,N 次采样值在输出结果中的权重是均等的,取 1/N。
用这样的滤波算法,对于时变信号会引入滞后,N 值越大,滞后越严重。为了增加新采样
数据在移动平均中的权重,以提高系统对当前采样值中所受干扰的灵敏度,可采用加权平
均滤波,它是移动平均滤波算法的改进。
加权平均滤波是对连续 N 次采样值分别乘上不同的加权系统之后再求累加和,加权系统一
般先小后大,以突出后面若干采样的效果,加强系统对参数变化趋势的辨识。各个加权系
统均为小于 1 的小数,且满足总和等于 1 的约束条件。这样,加权运算之后的累加和即为
有效采样值。
为方便计算,可取各加权系数均为整数,且总和为 256,加权运算后的累加和除以 256,
即舍去低字节后便是有效采样值。具体的样例子程序如下:
//code 数组为加权系统表,存在 ROM 区。
#dene N 12
char code jq[N]={1,2,3,4,5,6,7,8,9,10,11,12};
char code sum_jp=1+2+3+4+5+6+7+8+9+10+11+12;
char lter_5()
{
char count;
char value_buf[N];
int sum=0;
for(count=0;count<N;count++)
{
value_buf[count]=get_data();
delay();
}
for(count=0;count<N;count++)
sum+=value_buf[count]*jq[count];
return (char)(sum/sum_jq);
}
1.4中位值平均滤波