您当前的位置:首页 > 电子 > 嵌入式系统

嵌入式算法2---算数平均滤波法

时间:03-16来源:作者:点击数:

随机干扰随着数据样本的增加,其统计平均值越趋于零,对被检测物理量进行连续多次采样,然后求其算数平均值作为有效采样值,就可以抑制随机干扰。

以检测电池电压为例,因为负载变化,比如开启大功率模块,电池电压瞬时值会下降,关闭时会有个小的回升。假设期望1分钟更新一次,需要在这个频率的基础上按倍提高检测频率,如每15秒采集一次,取4次的平均值作为1分钟一次的有效值。

#define SAMPLE_NUM  4

int vBat[SAMPLE_NUM];

//假设已经通过其他方式采集到了4次电压值,且缓存在vBat数据
//filter按采样频率执行,更新结果
int filter(void)
{
    int i;
    int sum=0;

    for(i=0;i<SAMPLE_NUM;i++)
    {
        sum+=vBat[i];
    }

    return sum/SAMPLE_NUM;
}

其算法简单,但是缺点有明显,对于偶发异常,比如某次的采样值明显偏大,经过算数平均值导致最终值存在较大偏差,因为一颗老鼠屎坏了一锅粥。针对这种极大值或极小值的问题,可以在算数平均前先进行剔除。

int filter(void)
{
    int i;
    int sum=0;
    int min=0,max=0;

    for(i=0;i<SAMPLE_NUM;i++)
    {
        if(vBat[i]>max)
        {
            max=vBat[i];
        }
        if(vBat[i]<min)
        {
            min==vBat[i];
        }
        sum+=vBat[i];
    }

    sum=sum-min-max;
    
    return sum/(SAMPLE_NUM-2);
}

改进后的算法,在实际如现场比赛打分中,就是去掉最高分和最低分之后的平均值。但是对于一次采样周期中出现多个异常数据则无法排除,正如比赛中,恰好某选手有2个以上的评委干爹,这是无解的。不过可加大采样量,1分钟内采集4次改为采集10次,排序后去掉最大的2个值和最小的2个值,再对剩下的6个值求算数平均值。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门