发布于 2008-01-03 18:04:40
0楼
你这个例子举得非常好,用一个特例一下子点出了本算的关键缺点
队列平均值滤波要求维护一个队列,每采到一个新值入队时,最老的一个采样值要出列。本算法改进后去掉了队列后,就不知道该丢弃的最老的采样值是多少,采取的替代办法是丢弃上次的平均值。所以它会存在一个理论误差:
(C[1] - A) / N
就你这个特例来说,最老的采样值是10,而我们丢弃的是10.5,所以误差为:
(10-10.5) / 2 = -0.25
所以此算法中 N 值不能太小,当N值取得足够大时,这个误差就可以忽略,而由此带来的运算量精简是值得的。实际应用中平均值滤波一般也不会只采2次是吧。而现实中模拟量采入也不可能跟举例中的数字一样精准,它总是存在误差的,所以最终的理论误差在实际误差面前完全可以忽略不计(理论还要结合实践嘛,呵呵)。
本算法基于队列平均值算法,增大N值不会影响稳定时的采样实时性。但增大N值会导致从不稳定到稳定状态的时间变长,所以加入了死区的概念。
而死区的引入同时又导致对尖峰的滤波效果变差,所以最后又加入限幅控制。
经过综合改进后,最终本算法用相对简单的代码,具有队列平均值滤波法+死区法+限幅滤波法综合优点。
生命存在的方式只有两种:腐烂或燃烧