打印
[匠人手记]

匠人手记中关于一阶滤波算法之深入研究中的问题。

[复制链接]
3886|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
startt|  楼主 | 2010-9-6 15:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
书买了,觉得很不错。但对于一阶滤波算法之深入研究这章有个问题,忘指教下。
动态调整滤波系数的程序流程。
如果对于采集到以下数据:
0,400,395,410,395,450,395,450,390,450,390。。。。
按照滤波算法,
第一次得到400,a=0数据变化方向上升;
新数据395,数据变化下降,a=0,数据不刷新Y(n)=400;
新数据410,数据变化上升,上次下降,a=0,数据不刷新Y(n)=400;
新数据395,数据变化下降,上次上升,a=0,数据不刷新Y(n)=400;
新数据450,数据变化上升,上次下降,a=0,数据不刷新Y(n)=400;
新数据395,数据变化下降,上次上升,a=0,数据不刷新Y(n)=400;
……
如此,数据永远在400不刷新。这样不就偏离了实际值了吗。(假设最后数据在390与460这2个值来回跳,应该取平均值425)。
不知是我哪里还没看明白造成的错误?请指教下
评分
参与人数 1威望 +6 收起 理由
程序匠人 + 6

相关帖子

沙发
程序匠人| | 2010-9-6 16:40 | 只看该作者
你的问题,代表了你是思考过了。很好。评分鼓励一下。

如果采样值的振幅过大(假设最后数据在390与460这2个值来回跳)。可以考虑在一阶滤波之前,再加一级滤波(比如平均滤波或限幅滤波),收缩振幅。这样就可以解决你的问题。

详见书的第131页~135页。

使用特权

评论回复
板凳
startt|  楼主 | 2010-9-6 20:41 | 只看该作者
谢谢!
我碰到的问题是这样的。我所采集的数据类似于如下规律。假如实际值为400.所采集的值误差为-4~+4V。即是
396~404。最开始我采取滤波方法为限幅再加平均滤波。但是由于数据出现没有成周期性。如若连续采集4个周期都为396.后来参考了匠人的一阶滤波算法。经过标定后,选择合理的参数后,数据基本会稳定。就是碰到问题,有时候相同的实际值但我显示得到的为不同值。后来,我分析了下,应该是上面的问题。我在想这个主要是因为判断数据变化方向时造成的,想有没有办法再加个判断条件来去除。谢谢匠人

使用特权

评论回复
地板
程序匠人| | 2010-9-6 23:10 | 只看该作者
有没有可能采集更多的数据,先做递推平均滤波,再做一阶滤波呢?
你现在是采4个值取平均?能否改为16个?——这样,速度是否能满足?

使用特权

评论回复
5
程序匠人| | 2010-9-7 00:25 | 只看该作者
在此再提供一个思路。

根据第128页的图10.6。当两次变化方向不一致时,原来是要令一阶滤波系数=0。现在改为令一阶滤波系数=最小值

这里的“最小值”,是一个非0的数字。

这样改动的目的,是确保即使发生如你所遇到的极端情况,即数据变化方向一直在频繁变化,也能进行滤波。只不过这个时候,新采样值的滤波权重为最小。

改完之后可能还有一个小数舍弃带来的误差问题。建议考虑扩展数据的有效位数。(参见第126页的改善误差的办法二中的文字方法。)

使用特权

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

本版积分规则

3

主题

41

帖子

1

粉丝