A、名称:中位值平均滤波法(又称防脉冲干扰平均滤波法)
B、方法:采一组队列去掉最大值和最小值后取平均值,相当于“中位值滤波法”+“算术平均滤波法”。连续采样N个数据,去掉 一个最大值和一个最小值,然后计算N-2个数据的算术平均值。N值的选取:3~14。
C、优点:融合了“中位值滤波法”+“算术平均滤波法”两种滤波法的优点。 对于偶然出现的脉冲性干扰,可消除由其所引起的采样值偏差。对周期干扰有良好的抑制作用。平滑度高,适于高频振荡的系统。
D、缺点:计算速度较慢,和算术平均滤波法一样;比较浪费RAM。
- // 中位值平均滤波法(又称防脉冲干扰平均滤波法)
- #define FILTER_N 100
- int Filter(void)
- {
- int i;
- int filter_sum = 0;
- int filter_max, filter_min;
- int filter_buf[FILTER_N];
- for(i = 0; i < FILTER_N; i++)
- {
- filter_buf[i] = Get_AD();
- delay(1);
- }
- filter_max = filter_buf[0];
- filter_min = filter_buf[0];
- filter_sum = filter_buf[0];
- for(i = FILTER_N - 1; i > 0; i--)
- {
- if(filter_buf[i] > filter_max)
- filter_max=filter_buf[i];
- else if(filter_buf[i] < filter_min)
- filter_min=filter_buf[i];
- filter_sum = filter_sum + filter_buf[i];
- filter_buf[i] = filter_buf[i - 1];
- }
- i = FILTER_N - 2;
- filter_sum = filter_sum - filter_max - filter_min + i / 2; // +i/2 的目的是为了四舍五入
- filter_sum = filter_sum / i;
- return filter_sum;
- }
|