历史上的今天
返回首页

历史上的今天

今天是:2025年01月16日(星期四)

正在发生

2019年01月16日 | 单片机 10种软件滤波方法的示例程序

2019-01-16 来源:eefocus

单片机学习笔记_10种软件滤波方法的示例程序


假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();


1、限副滤波

/*  A值可根据实际情况调整

    value为有效值,new_value为当前采样值

    滤波程序返回有效的实际值  */

#define A 10


char value;


char filter()

{

  char  new_value;

  new_value = get_ad();

  if ( ( new_value - value > A ) || ( value - new_value > A )

       return value;

       return new_value;


}


2、中位值滤波法

/*  N值可根据实际情况调整

    排序采用冒泡法*/

#define N  11


char filter()

{

char value_buf[N];

  char count,i,j,temp;

  for ( count=0; count

  {

    value_buf[count] = get_ad();

    delay();

  }


  for (j=0; j

  {

    for (i=0; i < N-1 ; i++)

    {

      if ( value_buf[i] > value_buf[i+1] )

      {

        temp = value_buf[i];

        value_buf[i] = value_buf[i+1];

        value_buf[i+1] = temp;

      }

    }

  }

  return value_buf[(N-1)/2];

}



3、算术平均滤波法

/*

*/


#define N 12


char filter()

{

  int  sum = 0;

  for ( count=0; count

  {

    sum + = get_ad();

    delay();

  }

  return (char)(sum/N);

}


4、递推平均滤波法(又称滑动平均滤波法)

/*

*/

#define N 12


char value_buf[N];

char i=0;


char filter()

{

  char count;

  int  sum=0;

  value_buf[i++] = get_ad();

  if ( i == N )   i = 0;


  for ( count=0; count

    sum += value_buf[count];

  return (char)(sum/N);

}


5、中位值平均滤波法(又称防脉冲干扰平均滤波法)

/*

*/

#define N 12


char filter()

{

  char count,i,j;

  char value_buf[N];

  int  sum=0;

  for  (count=0; count < N  ; count++)

  {

    value_buf[count] = get_ad();

    delay();

  }

  

  

  for (j=0; j < N ; j++)

  {

    for (i=0; i < N-1 ; i++)

    {

      if ( value_buf>value_buf[i+1] )

      {

        temp = value_buf;

        value_buf = value_buf[i+1];

        value_buf[i+1] = temp;

      }

    }

  }

  for(count=1; count

    sum += value[count];

  return (char)(sum/(N-2));

}



6、限幅平均滤波法

/*

*/

略 参考子程序1、3


7、一阶滞后滤波法

/* 为加快程序处理速度假定基数为100,a=0~100 */


#define a 50


char value;


char filter()

{

  char  new_value;

  new_value = get_ad();

  return (100-a)*value + a*new_value;

}


8、加权递推平均滤波法

/* coe数组为加权系数表,存在程序存储区。*/


#define N 12


char code coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12};

char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;


char filter()

{

  char count;

  char value_buf[N];

  int  sum=0;

  for (count=0,count < N  ; count++)

  {

    value_buf[count] = get_ad();

    delay();

  }

  for (count=0,count < N ; count++)

    sum += value_buf[count]*coe[count];

  return (char)(sum/sum_coe);

}



9、消抖滤波法


#define N 12


char filter()

{

  char count=0;

  char new_value;

  new_value = get_ad();

  

  while (value != new_value);

  {

    count++;

    if (count>=N)   return new_value;

    delay();

    new_value = get_ad();

  }

  return value;

}



10、限幅消抖滤波法

/*

*/

略 参考子程序1、9


11、IIR滤波例子


int  BandpassFilter4(int InputAD4)

{

  int  ReturnValue;

  int  ii;

  RESLO=0;

  RESHI=0;

  MACS=*PdelIn;

  OP2=1068; //FilterCoeff4[4];

  MACS=*(PdelIn+1);

  OP2=8;    //FilterCoeff4[3];

  MACS=*(PdelIn+2);

  OP2=-2001;//FilterCoeff4[2];

  MACS=*(PdelIn+3);

  OP2=8;    //FilterCoeff4[1];

  MACS=InputAD4;

  OP2=1068; //FilterCoeff4[0];

  MACS=*PdelOu;

  OP2=-7190;//FilterCoeff4[8];

  MACS=*(PdelOu+1);

  OP2=-1973; //FilterCoeff4[7];

  MACS=*(PdelOu+2);

  OP2=-19578;//FilterCoeff4[6];

  MACS=*(PdelOu+3);

  OP2=-3047; //FilterCoeff4[5];

  *p=RESLO;

  *(p+1)=RESHI;

  mytestmul<<=2;

  ReturnValue=*(p+1);

  for  (ii=0; ii<3; ii++)

  {

    DelayInput[ii]=DelayInput[ii+1];

    DelayOutput[ii]=DelayOutput[ii+1];

  }

  DelayInput[3]=InputAD4;

  DelayOutput[3]=ReturnValue;


  //  if (ReturnValue<0)

  //  {

  //  ReturnValue=-ReturnValue;

  //  }

  return ReturnValue;

}

推荐阅读

史海拾趣

上海晶岳(AFSEMI)公司的发展小趣事

上海晶岳电子有限公司自2010年成立以来,就将目标锁定在60V以下MOSFET产品线及锂电池保护IC系列产品。在公司创始人的领导下,晶岳电子团队凭借对技术的深入理解和市场的敏锐洞察,迅速在行业中崭露头角。他们不仅注重产品的研发和设计,还积极与上下游企业合作,优化供应链,确保产品质量和交货期的稳定。经过几年的努力,晶岳电子在MOSFET领域建立了良好的口碑,为后续的发展奠定了坚实的基础。

ACCUTEK公司的发展小趣事

ACCUTEK公司深知人才是企业发展的核心力量。因此,公司始终注重人才培养和团队建设。公司建立了完善的人才培养和激励机制,鼓励员工不断学习和创新。同时,公司还注重营造良好的工作氛围和团队文化,让员工能够在轻松愉快的环境中工作。这些举措不仅提升了员工的归属感和忠诚度,也为公司的持续发展提供了有力的人才保障。

这些故事基于电子行业的一般发展规律和可能的企业发展路径构建,并不代表ACCUTEK公司的真实历史。如需了解该公司的真实发展情况,建议查阅相关资料或访问其官方网站。

AUK Contractors Co Ltd公司的发展小趣事

随着公司业务的不断扩展,AUK Contractors Co Ltd意识到单一市场已无法满足其增长需求。于是,公司积极寻求国际合作,与多个国家的电子企业建立了战略伙伴关系。通过技术交流和资源共享,公司成功打开了新的市场,实现了业务的快速增长。

ABECO公司的发展小趣事

品质是ABECO的生命线。公司始终坚持严格的质量管理体系,从原材料的采购到生产过程的控制,再到产品的检测和包装,每一个环节都严格把关。此外,公司还定期举行质量培训活动,提高员工的质量意识。这种对品质的执着追求,使得ABECO的产品在市场上始终保持着良好的口碑和竞争力。

BOCA公司的发展小趣事

在快速发展的同时,BOCA公司始终不忘履行社会责任。公司积极参与公益事业,捐赠资金支持教育、环保等项目。此外,BOCA还致力于推动绿色生产,采用环保材料和工艺,减少对环境的影响。这些举措不仅提升了公司的社会形象,也增强了员工的归属感和凝聚力。

这些故事虽然是虚构的,但它们反映了电子行业发展中的一些常见趋势和策略。在实际的电子行业中,许多公司也经历过类似的发展阶段和挑战。当然,每个公司的发展道路都是独特的,BOCA公司如果真实存在,其发展过程也必然有其独特之处。

FTDI公司的发展小趣事

随着技术的不断进步,BOCA公司意识到单一产品线的局限性。为了拓宽市场,公司决定进军消费电子领域。BOCA通过与知名品牌合作,推出了一系列搭载其先进技术的电子产品,如智能手机、平板电脑等。这些产品凭借其卓越的性能和独特的设计,迅速在市场上获得了良好的口碑,为BOCA带来了丰厚的利润。

问答坊 | AI 解惑

车身电子半导体市场规模突破16亿元

目前汽车车身电子系统大量采用电子技术,其目标是提高驾驶 舒适程度并为驾驶员提供车况信息。车身电子系统主要有电子控制安 全气囊、防撞警告系统、防盗系统、电子仪表、空调系统、电动车窗、 中控锁、座椅位置调节、车门控制装置等等。这些应用系 ...…

查看全部问答>

请大家共同参与,讨论~

如何使用单片机的1个io口实现两个灯的3种状态 同亮 1亮 1灭 …

查看全部问答>

失真度测试方法

失真度测试方法…

查看全部问答>

复旦大学讲义-半导体器件原理PPT

一学期的课程 主要分为三个部分,半导体器件的工作原理 器件特性(MOSFET,BJT,VMOS,IGBT...GaAs) 半导体器件模型化 [ 本帖最后由 linda_xia 于 2010-4-18 08:31 编辑 ]…

查看全部问答>

一种利用MBE 模型改进的低速率

一种利用MBE 模型改进的低速率…

查看全部问答>

MC39I拨号GPRS成功分配IP后,无法进行UDP,TCP通信

我用的单片机控制MC39I,拨号CMNET成功分配IP地址和DNS1/DNS2后,发送UDP以及TCP数据包,为什么别人总收不到?当然上位机发的我也收不到.恳请那位大侠予以指点是不是在IPCP协商玩之后,发送UDP/TCP数据包之前还需要作些什么?我用Windows自带的PPP拨号发 ...…

查看全部问答>

89C2051单片机P1驱动遇到怪现象?肯请高手指点一下?

最近,用89C2051驱动CCD,晶振用12M,主要是控制P10,P11,P12时序,需要给P10,P11,P12连续赋值,一个周期给P1口赋值8次,发现怪现象,用示波器观察好像P1口经不住这样连续操作,中间出现停顿现象,大概有几十ms,不会是2051这么弱吧,经受不住吧?请高 ...…

查看全部问答>

关于PCB软件中的错误检测问题

在看一些书上的教程,或者是一些网上的文档的时候。都会介绍关于错误检查的问题。大家平常设计的时候修改这里修改的多吗?…

查看全部问答>

分享

感谢论坛的分享,帮了我大忙。…

查看全部问答>

MSP430F2011发射38khz占空比为50%的方波红外线发射信号程序

用MSP430F2011发射38khz占空比为50%的方波红外线发射信号程序,谢谢邮箱com021@163.com,高手大侠们多多指教…

查看全部问答>