|
A、方法:
把连续取N个采样值看成一个队列
队列的长度固定为N
每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)
把队列中的N个数据进行算术平均运算,就可获得新的滤波结果
N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4
B、优点:
对周期性干扰有良好的抑制作用,平滑度高
适用于高频振荡的系统
C、缺点:
灵敏度低
对偶然出现的脉冲性干扰的抑制作用较差
不易消除由于脉冲干扰所引起的采样值偏差
不适用于脉冲干扰比较严重的场合
比较浪费RAM
#define N 12
char value_buf[N];
char i=0; //滑动
bit tk // 采样10次完成才开始返回数值
char filter()
{
char count;
int sum=0;
if(i<N)
value_buf[i++]=get_ad();
else { i = 0;TK = 1; }
if (TK ==1) {
for ( count=0;count<N;count++)
sum = value_buf[count];
return (char)(sum/N);
}
}
这是最基本实现的程序,写的很烂!给个引题,看看高手门怎么写,稍后我也奉上我自己写的! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|