求数据平均值时,增加方差计算,判定数据是否稳定未被干扰
单片机A/D采集到的数据需要滤波,防止有噪声。各种方法,平均值,中值不一而足。滤波前,应该对数据做一些判断,防止数据源本身错误,使滤波结果有较大误差。可以采用对数据求方差的办法,先计算平均值,在平均值的基础上,计算方差。如果方差超过设定值,视为无效数据。
#define DEVIATION 50 // 方差限
/*输入 *p 为首个数据指针Len 为数据长度*m 将存放数据均值返回值 1 数值方差在限值内 0 数值方差在限值外*/uint8_t dev(uint16_t *p,uint8_t len,uint16_t *m){ uint32_t temp; uint16_t mean; uint8_t i; temp = 0; for(i = 0;i计算均值 temp += p[i]; temp /= len; mean = (uint16_t)temp; *m = mean; // 保存均值 temp = 0; for(i = 0;i计算方差 if(p[i]>mean) temp += (p[i]-mean)^2; else temp += (mean - p[i])^2; } temp /= len; if(temp < DEVIATION) return 1; else return 0;}复制代码
作者: southcreek, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-408807.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
southcreek 2020-11-30 15:59
我的果果超可爱 2020-11-28 20:07