打印

滤波问题

[复制链接]
1157|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
victor3l|  楼主 | 2012-6-30 08:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 victor3l 于 2012-6-30 08:07 编辑

匠人的书109页和114页的滤波程序是不是印刷错误啊在传参时没有给参数类型,这是不对的啊。匠人程序如下

#define        N    12
unsigned char Data[];
unsigned char GlideAVerageValue(Data[])
{
unsigned char i;
unsigned char Value;
unsigned short Sum;
Sum = 0;
Data[N]=GetAD();
for(i = 0;i < N; i++)
{
Data = Data[i+1];
Sum +=Data;
}
Value = Sum/N;
return Value;
}

其实下面的这个程序和这个没有本质区别
ulong  FilterDatChannel1(ulong temp)
{
uchar i;
static xdata ulong datBuf[8] = {0};
static uchar datCount;
  xdata ulong sum = 0;
datBuf[datCount] = temp;
for(i = 0; i< 8; i++)
  sum += datBuf;
sum = (ulong)(sum >> 3);//求均值
datCount++;
if(datCount == 8)
  datCount = 0;
return sum;
}
匠人程序是从数组最高位开始更新队列,而这个程序是从数组最低位更新队列。
问题是:我用下面这个程序时,最终的显示能够很好的反应传感器的变化,用匠人的滤波后有数据但是数据不动了,不知为什么?
另外,我觉得匠人的这个程序可以改成unsigned  char filter(uchar Data[],uchar temp)
参数Data为要处理的数据开辟队列,temp为要处理的数据。我现在要用这个函数来处理6路AD的数据,不知道可不可以?
我原来写的函数没有单独给数据开辟队列函数原型是ulong filter(ulong temp),一个一个用的时候没有entire当我算总重时,就出错了,别人说是交叉调用导致错误,要我为每个AD写个滤波函数,其实就是把函数名字改下了,内容没变。问题解决了,但是感觉程序太冗余,现在想用一个函数,在外部开辟6个队列来存数据,应该没问题吧?

谁有动态调整滤波系数的一阶滤波程序,让我参考下。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

308

帖子

5

粉丝