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

嵌入式算法4---正态分布过滤疏忽误差

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

测量系统中误差分为系统误差、随机误差、疏忽误差三种。系统误差一般是硬件精度或缺陷导致;随机误差是偶然产生,诸多外界因素微小变化共同导致,它服从统计规律的;疏忽误差则无规律可循,且明显和事实不符合。

疏忽误差的样本值偏离了总体的平均值,在样本足够多且服从正态分布的情况下,通过一系列数理统计算法过滤坏样本。

在这里插入图片描述

正态分布的68-95-99.7规则

均值到左一和右一个标准差之间的定积分值是68%

均值到左二和右二个标准差之间的定积分值是95%

均值到左三和右三个标准差之间的定积分值是99.7%

一般情况下认为,某个采样值与均值的差值大于3倍标准差,即可判定该采样值为坏样本。

  • #include "math.h"
  • #define SAMPLE_NUM 100
  • int sample[SAMPLE_NUM];//假设已经采集的SAMPLE_NUM个样本已经缓存再数组
  • int average;//平均值
  • int standard;//标准差
  • int sample_num=SAMPLE_NUM;//有效的样本个数,初始是SAMPLE_NUM
  • int filter(void)
  • {
  • int i,d;
  • int low,high;
  • int sum=0;
  • for(i=0;i<sample_num;i++)
  • {
  • sum+=sample[i];
  • }
  • average=sum/SAMPLE_NUM;//平均值
  • //----------------------------------------------
  • for(i=0;i<sample_num;i++)
  • {
  • d=sample[i]-average;
  • sum=d*d+sum;
  • }
  • standard=sqrt(sum/SAMPLE_NUM);//标准差
  • //----------------------------------------------
  • //按99.7%的范围,合理的上限和下限是3倍的标准差
  • low=average-3*standard;
  • high=average+3*standard;
  • for(i=0;i<sample_num;i++)
  • {
  • if((sample[i]<low)||(sample[i]>high))
  • {
  • //坏样本
  • if(i<sample_num-1)
  • {
  • sample[i]=sample[sample_num-1];//将最后一个样本前移覆盖坏样本
  • i--;
  • }
  • sample_num--;
  • }
  • }
  • return sample_num;//剔除坏样本后剩下的有效样本数
  • }

通过正态分布的规则剔除异常样本,其前提是样本基数大。对于算法还可进一步改进,如果sample_num前后发生变化,表示sample[]样本发生了变化,可以再次递归执行过滤。

正态分布的规则不仅能过滤异常,对于控制监测也可应用,比如人体血压、心律检测,发现异常值则触发报警。

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