热度 2
2020-11-27 14:08
3107 次阅读|
2 个评论
求数据平均值时,增加方差计算,判定数据是否稳定未被干扰 单片机 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 ; temp /= len; mean = (uint16_t)temp; *m = mean; // 保存均值 temp = 0; for(i = 0;i计算方差 mean) temp += (p -mean)^2; else temp += (mean - p )^2; } temp /= len; if(temp < DEVIATION) return 1; else return 0; }