在数字信号滤波算法中,有一个被称为加权平均值滤波的算法,公式如下:
其中x1、x2、......、xn是按照先后顺序采样得到的信号值,w1、w2、......wn是信号对应的权重值,这些权重值是人为设定的,这个公式计算的结果就是x1、x2、......、xn的加权平均值。
这里我顺便多说一下这个公式其实与算数平均值的原理是一样的,我们知道算数平均值的计算方法是y = (x1+x2 + ...... + xn) / n ,而加权平均值就是有w1个x1,w2个x2,wn个xn相加,然后除以总的数值数量w1 + w2 + ...... + wn,其结果就得到了算数平均值(也是加权平均值)。
使用这个公式对采样信号进行滤波,一个重要的问题就是各个采样值的权重值很难设定,很多时候我们根本就不知道哪个采样值的权重应该大一些,哪个采样值的权重小一些。这也造成了在实际工作中,我们比较少使用这个滤波算法进行信号滤波。虽然对信号滤波我们使用它并不多,但是他的加权思想却是我们可以学习的,我们可以把这种思想用在其他的算法上。下面就举一个例子来看看这个加权思想的应用。
我先描述一下问题。
很多小型电子产品上由于体积小,只能装纽扣电池供电,很多时候我们需要把电池低压信息告知主控设备,以通知用户该换电池了。
要把纽扣电池的低压信息告知主控设备,看上去是比较简单的,只需要让单片机采集电池电压即可,因为电池的电量与电压是有正比关系的。原理到没错,但是我们什么时候对电池电压采样时有讲究的,因为我们在产品工作期间对电池电压采样与产品空闲或者休眠时采样是不一样的(这主要受纽扣电池的特性影响,比如电池容量低,电池内阻大等等),显而易见的是在产品活跃期间采样电池电压会比产品空闲或者休眠时低(负载越大电压越低),而且在电池电量不足时这一点表现的更为明显。如果你只以活跃期电池电压为准,那么你的电池明明还有不少电而你却向主控设备提前报告了低压信息,如果你只以空闲或者休眠时的电池电压为准,那么你的电池明明已经快没电了但你却没有向主控设备报告低压信息。
要解决这个问题,我们既要考虑活跃期间的电池电压,也要考虑休眠期间的电池电压,然后联合计算有效电压值,最后在决定是否要向主控设备告知低压信息,而这就要使用我们上面讲的加权算法了。
设电池有效电压为V,活跃期采集到的电池电压为V1,在休眠或者空闲采集到的电压为V2。由于活跃期间对电池电压采样其值较低,对判定电池电量的影响较大,因此我们为它设置一个小权重值设为w1 = 3,而休眠或者空闲期间采样其值较高,且不容易下降,把权重值设为w2 = 7,则V的计算表达式如下:
V = (3*V1 + 7*V2) / (3+7)
这样一来,我们计算的有效电压兼顾了活跃期间的电池电压,也兼顾了休眠期间采集到的电池电压。从实践来看,这种算法至少对纽扣电池这种应用是合适的。
总结来说,对于一个结果由多个原因决定,这些原因确实又比较重要,并且各个重要原因的影响程度不一样,那么我们就可以为每一个原因分配一个合适的权重,以获得一个更可靠的结果。事实上,在很多算法中都用到了权重思想,比如一阶数字低通滤波器、PID算法、卡尔曼滤波等等。可见,权重平均思想在实际应用中还是比较多且重要的。
|
建议楼主学一下卡尔曼滤波