信号采集是非常常见的需求,我们也总是希望采集到的数据是纯净而真实的,但这只是我们的希望。环境中存在太多的干扰信号,为了让我们得到的数据尽可能地接近实际值,我们需要降低这些干扰信号的影响,于是就有了滤波器的用武之地。这里我们讨论的主要是软件实现的数字滤波器,这一篇我们就来讨论基于递推算术平均算法的带阻平滑滤波器。
1、问题的提出
我们已经实现了基于算术平均的递推算术平均滤波器。虽然它对周期性干扰和高频的干扰都有一定的效果,但是对于这种滤波器其灵敏度和滤波效果很难同时达到较好的效果。一般来说,当N值较小时,灵敏度会增高但滤波效果则不太理想;当N值较大时,滤波效果会比较好,但灵敏度会受到影响。所以我们希望能找到一种方法,让灵敏度和滤波效果都能有较好的表现。
关于这个问题,我们先来分析一下。一般来说,不管是周期性干扰还是噪声干扰都是在一定的范围内对数据造成影响。不会出现很大幅度的数据差异。基于这一点我们可以考虑对比本次采集与上次输出之间的偏差值,如果偏差值大于一定的限值则我们认为是数据发生了较大变化,远大于干扰造成的影响,干扰可以忽略,所以我们直接对数据进行更新。当数据偏差处于一定的变化范围之内时,我们认为是处于稳定的范围内,这时干扰造成的影响于数据的变化不能忽略,我们需要采用滤波。具体如图所示:

其中HL和LL就是我们之间的范围就是可能干扰不能忽略的范围;而大于HL的部分我们认为采集数据变化远超干扰的影响,忽略干扰提高灵敏度;而小于LL的部分说明干扰造成的影响很小,在允许的误差范围之内或者说在数据的正常波动范围之内,我们也不需要滤波。
我们在数据的变化大于干扰所能引起的数据差异时,选择不滤波而是快速更新数据以提高灵敏度。可是如果有一个偶然的脉冲干扰出现时,这种操作方式则会导致系统失效,所以我们必须引入消抖操作。当连续出现多个值都是大范围变化时,我们认为是数据的正常变化,否则我们认为是偶然的脉冲干扰造成的。
2、算法设计
我们已经描述了在不同的偏差区间对采集数据采取不同处理方式的办法。具体怎么设计这一滤波算法呢?首先我们需要根据经验或者基于对被控对象的判断来确定HL和LL的范围,这样在不同范围内采取不同的处理方式的做法才能达

本文介绍了一种基于算术平均的带阻平滑滤波器,通过对数据的偏差值进行分析,实现了在不同偏差区间采取不同处理方式的滤波算法。此滤波器在提高系统灵敏度的同时,有效过滤了周期性和小幅噪声干扰。
最低0.47元/天 解锁文章
450

被折叠的 条评论
为什么被折叠?



