简单逼近算法处理传感器电流信号抖动问题,只需几行代码

Posted by LuckXiang on January 23, 2019

最近同事需要把仪器拿去计量局标定,需要传感器信号非常稳定,不能来回跳动,但是设备硬件采样电路根本不能达到那么高的稳定性,即使采用了软件滤波算法,处理后的信号值依然会围绕一个值上下波动。我想到了《SICP》中的猜测算法,将输入的数据不停的与期望值比较,最终迭代到一个足够高精度的值。代码如下:

        if(Math.abs(flow_last - flow)/flow < 0.005) { // flow 是当前流量值,flow_last是上一次的流量值 0.005表示期望精度,这行代码表示精度在期望范围内,则保持流量值不变
            flow = flow_last;
        } else {
            if(Math.abs(flow_last - flow)/flow < 0.02) { // 假如偏差超过了设计的0.02,那么开始通过取平均值的方式逼近理想结果
                flow = (flow + flow_last) / 2;
            }
            flow_last = flow;
        }

这个算法主要用来处理信号上下波动,使其能尽可能的接近平均值,代码运行效果非常好,几次迭代就能达到一个很稳定的值。