打印

滤波不明白?

[复制链接]
1401|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
victor3l|  楼主 | 2012-7-13 09:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
8次滑动滤波如下:

ulong  FilChOne()
{
uchar i;
static xdata  ulong datBuf[8] = {0};
xdata ulong   avrVal = 0;
datBuf[7] = RdChOne();
for(i = 0; i < 7; i++)//这里的循环控制变量不能是8,是8 的话就越界了。要注意。
{
  datBuf[i] = datBuf[i+1];//上面吧数组初始化成0很关键,否则数组初始值是随机的,故刚开始加的时候的值不确定,对总重求和造成影响
  avrVal += datBuf[i];
}
avrVal += datBuf[7];//上面循环中少加了最后一个
avrVal = (avrVal >> 3);//这里是求平均值
return avrVal;  
}

一阶滤波如下
ulong FriFilOne()
{
xdata ulong newDat = 0;
xdata ulong finDat = 0;
newDat = FilChOne();
finDat = (255-FACTOR)*newDat + FACTOR*oldDat;

return (finDat >> 8);
}

这里面的FACTOR是滤波系数。
问题是:为什么滤波系数不同导致最后的结果相差很大,并且当系数越大输出越小。当系数为20时输出1240左右,当把系数改成100时,输出仅有800了,这是为什么啊?通过8次滑动滤波和一阶滤波后数据还是本鞥很好的稳定,读到的AD内码值大概跳动8左右,别人的程序能够固定到跳动在3以内,还有什么办法使数据更稳定了?

相关帖子

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

本版积分规则

77

主题

308

帖子

5

粉丝