原创 均值滤波前的数据离散性判断

2020-11-27 14:08 582 6 2 分类: MCU/ 嵌入式

求数据平均值时,增加方差计算,判定数据是否稳定未被干扰

单片机A/D采集到的数据需要滤波,防止有噪声。各种方法,平均值,中值不一而足。滤波前,应该对数据做一些判断,防止数据源本身错误,使滤波结果有较大误差。可以采用对数据求方差的办法,先计算平均值,在平均值的基础上,计算方差。如果方差超过设定值,视为无效数据。

  1. #define DEVIATION 50 // 方差限
  2. /*
  3. 输入 *p 为首个数据指针
  4. Len 为数据长度
  5. *m 将存放数据均值
  6. 返回值 1 数值方差在限值内 0 数值方差在限值外
  7. */
  8. uint8_t dev(uint16_t *p,uint8_t len,uint16_t *m){
  9. uint32_t temp;
  10. uint16_t mean;
  11. uint8_t i;
  12. temp = 0;
  13. for(i = 0;i计算均值
  14. temp += p[i];
  15. temp /= len;
  16. mean = (uint16_t)temp;
  17. *m = mean; // 保存均值
  18. temp = 0;
  19. for(i = 0;i计算方差
  20. if(p[i]>mean)
  21. temp += (p[i]-mean)^2;
  22. else
  23. temp += (mean - p[i])^2;
  24. }
  25. temp /= len;
  26. if(temp < DEVIATION)
  27. return 1;
  28. else
  29. return 0;
  30. }

作者: southcreek, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-408807.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论2条评论)

登录后参与讨论

southcreek 2020-11-30 15:59

我的果果超可爱: zhichi yixia
试一下,有的时候很有效。

我的果果超可爱 2020-11-28 20:07

zhichi yixia
相关推荐阅读
southcreek 2020-12-25 14:56
STM32 动态改变ADC采样通道
使用DMA 进行AD采样很方便,但需要事先设置好通道。如果有过程中希望修改通道,可以先做一个DeInit 然后设置不同的Rank[code]// Adc 通道配置 选择 vdc vbat preu p...
southcreek 2020-12-21 14:59
EEPROM 中存入不同格式数据
    设备运行参数,需要保存到EEPROM中。运行参数数据类型不确定,有可能正负,也有可能不同长度。而EEPROM只能字节寻址。 不同编译器,数据类型的表示方法各异,且字节...
southcreek 2020-12-02 16:42
触摸屏数字键盘的实现方法
基本思路是使用一个图片,定义图片上各个按键的相对位置以及文本框的相对位置。定义键盘的尺寸 当需要显示键盘时,将图片画出来。 当触屏按下时,计算按下的位置,进行相应操作。 所有按键的尺...
southcreek 2020-11-02 10:10
电磁兼容 EFT整改
机器做EFT测试故障,表现为液晶显示段错误,数码管闪,传感器异常。综合表现指向在施加 ±2000V 脉冲周期 100KHZ  分别注入 L N PE L+N L+PE N+PE后5V供电被干...
广告
我要评论
2
6
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /7 下一条