2025年4月3日 星期四 乙巳(蛇)年 正月初四 设为首页 加入收藏
rss
您当前的位置:首页 > 电子 > 嵌入式系统

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

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

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

以检测电池电压为例,因为负载变化,比如开启大功率模块,电池电压瞬时值会下降,关闭时会有个小的回升。假设期望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个值求算数平均值。

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