这个去极值滑动滤波
ulong FilterDatChOne()//去极值滑动滤波
{
uchar i;
static xdata ulong datBuf[10] = {0};//经实践验证:这里必须是static才能计算出平均值,否则这里就不能计算。
xdata ulong max = 0;
xdata ulong min = 0;
xdata ulong sum = 0;
datBuf[0] = RdChOne();
max = datBuf[0];
min = datBuf[0];
sum = datBuf[0];
for(i = 9; i != 0; i--)
{
if(datBuf[i] > max)
max = datBuf[i];
else if(datBuf[i] < min)
min = datBuf[i];
sum = sum + datBuf[i];
datBuf[i] = datBuf[i-1];
}
i = 10-2;//这里主要是为了四舍五入
sum = sum -max-min+i/2;
sum = (sum >> 3);//这里是求平均值
return sum;
}
static xdata ulong datBuf[10] = {0};//经实践验证:这里必须是static才能计算
为什么作为暂存数据的队列前面必须是static。否则就不能算出平均值啊? |