AD采样的平均值滤波

基本问题:单片机ad采样,连续采样十次,对这十次数据取平均值。

注意:最开始的一次就是用当次的数据,以后每更新一个数据就取当前数据加上前九个数据,取平均。

先看代码:

static int _filter(int m)
{
  static int flag_first = 0, _buff[10], sum;
  const int _buff_max = 10;
  int i;

  if(flag_first == 0)
  {
    flag_first = 1;

    for(i = 0, sum = 0; i < _buff_max; i++)
    {
      _buff[i] = m;
      sum += _buff[i];
    }
    return m;
  }
  else
  {
    sum -= _buff[0];
    for(i = 0; i < (_buff_max - 1); i++)
    {
      _buff[i] = _buff[i + 1];
    }
    _buff[9] = m;
    sum += _buff[9];

    i = sum / 10.0;
    return i;
  }
}

前九次(不足十个数据),用第一个数据补。  

时间: 2024-11-06 23:24:23

AD采样的平均值滤波的相关文章

【下位机软件】平均值滤波之鬼斧神工算法

平均值滤波之鬼斧神工算法 摘自:http://www.cnblogs.com/ifpga/archive/2012/10/07/2713530.html 在十种经典软件滤波算法中,可以看到很多算法都是平均值滤波算法变种,事实上最常用的也还是平均值滤波算法.但传统的平均值滤波算法很占内存,每次运算都要求累加和,再求平均值,导致运算效率不高. 今天介绍一种超简洁超高效的平均滤波算法,此算法是以前搞单片机时一老师所创(单片机上的内存简直是寸土寸金),仅仅用三个变量,就完成了平均值滤波的计算.刚开始看到

AD采样问题总结

说明:来源http://bbs.csdn.net/topics/390899032论坛讨论 一个100HZ的正弦波,我用300HZ的采样率去采样,那么根据香农定律是不是一秒钟就采集到300个点,因为这个波形是100HZ,所以这一秒钟内就有一百个波形经过,那么300个点平均到每个波形上就只有3个点了,也就是一个波形上采集3个点, 采样率一般是Sps为单位,而不是用Hz, 例如300Sps,即300 Samples Per  Second.100Hz的正弦,用300Sps的采样率,则平均每个正弦周期

关于Stm32定时器+ADC+DMA进行AD采样的实现

Stm32的ADC有DMA功能这都毋庸置疑,也是我们用的最多的!然而,如果我们要对一个信号(比如脉搏信号)进行定时采样(也就是隔一段时间,比如说2ms),有三种方法: 1.使用定时器中断每隔一定时间进行ADC转换,这样每次都必须读ADC的数据寄存器,非常浪费时间! 2.把ADC设置成连续转换模式,同时对应的DMA通道开启循环模式,这样ADC就一直在进行数据采集然后通过DMA把数据搬运至内存.但是这样做的话还得加一个定时中断,用来定时读取内存中的数据! 3.使用ADC的定时器触发ADC转换的功能,

ad采样后幅度的衰减

adc采集到的信号对低频有一定的衰减.因为要确定衰减的程度.通过da输出到示波器上观察. 数据如下: 输入 输出(enable) 输出(disable) 1v(20hz) 1v 0.88v 1v(10hz) 0.76v 0.76v 1v(8hz) 0.6v 0.68v 1v(5hz) 0.4v 0.5v 1v(3hz) 0.25v 0.35v 1v(2hz) 0.15v 0.25v 1v(1hz) 0.05v 0.12v 在8hz以下还是有比较到的衰减.这是使用示波器观察还是经过dac的于是想直

STM32 AD采样电压计算公式

在使用STM32的ADC进行检测电压时必须回涉及到电压值的计算,为了更高效率的获取电压,现在有以下三种方法: 你得到的结果是你当前AD引脚上的电压值相对于3.3V和4096转换成的数字.假如你得到的AD结果是ADC_DR这个变量,他们存在以下关系: ADC_DR/当前电压值 = 4096/3300毫伏如果你反过程想得到当前电压值,可以如下计算:unsigned long Voltage;Voltage = ADC_DR; //---假设你得到的AD结果存放到ADC_DR这个变量中;Voltage

MSP430 ADC12 AD采样寄存器中文定义

/************************************************************* ADC12   A/D采样寄存器定义************************************************************//*ADC12转换控制类寄存器*/#define ADC12CTL0_          0x0;' /* ADC12 Control 0 */sfrw    ADC12CTL0         = ADC12CTL

AD转换器的主要技术指标

1)分辩率(Resolution) 指数字量变化一个最小量时模拟信号的变化量,定义为满刻度与2n的比值.分辩率又称精度,通常以数字信号的位数来表示.     2) 转换速率(Conversion Rate)是指完成一次从模拟转换到数字的AD转换所需的时间的倒数.积分型AD的转换时间是毫秒级属低速AD,逐次比较型AD是微秒级属中速AD,全并行/串并行型AD可达到纳秒级.采样时间则是另外一个概念,是指两次转换的间隔.为了保证转换的正确完成,采样速率(Sample Rate)必须小于或等于转换速率.因

傅里叶变换(FFT)的多相滤波结构实现

作者:桂. 时间:2017-09-25  14:53:01 链接:http://www.cnblogs.com/xingshansi/p/7591868.html 前言 以前在梳理信号频域变换的时候,提到逆序级联FFT(Inverse cascade FFT)的实现思路,后来分析多相滤波信道化,才发现其实Cascade FFT就是FFT的多相结构实现,在此系统梳理一下. 一.多相结构FFT实现 A-传统测频技术分析 信号的短时傅里叶变换(STFT)可表示为: 其中s为输入信号,w为对应窗函数.长

STM32的AD通道干扰问题

今天调试STM32F103的ADC,使用ADC1单次转换模式进行两通道AD采样,发现两路通道存在烦扰问题.相关AD操作代码如下: void adc_start_convert(uint8_t ch) { ADC1->SMPR2 = (ADC1->SMPR2 & 0XFFFFFFF8) | 7; ADC1->SQR3 = (ADC1->SQR3 & 0XFFFFFFE0) | ch; ADC_SoftwareStartConvCmd(ADC1, ENABLE); }