算术平均滤波算法
- 应用场景
对于有近似正负偏差的随机干扰,算术平均滤波法可以有效滤除。也就是说待滤波的信号的特点是有一个平均值,信号在某一数值范围附近上下波动。
- 原理分析
连续采集N组数据,计算算术平均值,计算结果作为本次数据有效值
- 参考代码
typedef int filter_type;
/*函数声明*/
filter_type filter(filter_type value_buf[], int num);
/*算术平均滤波函数,num为value_buf[num]中元素个数*/
filter_type filter(filter_type value_buf[], int num)
{
int sum = 0, i = 0;
for(i = 0; i < N; i++)
{
sum += value_buf[i]; //求和
}
return (filter_type)(sum / num); //求平均
}
注: 可将num设置为2的整数幂,再利用移位操作来代替除法以提高运行效率。
/*(sum + 2^num - 1) < 0 时*/
return (sum + 2^num - 1) >> num;
/*举例:sum > 0, sum/2 时*/
return sum>> 1;
- 补充说明
算术平均数能较好的过滤随机干扰(使正负干扰的期望相互抵消),不适用于测量较慢的数据,不适用于实时控制。