求数据平均值时,增加方差计算,判定数据是否稳定未被干扰
单片机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