⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 防脉冲干扰移动平均值法数字滤波器的c语言算法及其实现.txt

📁 防脉冲干扰移动平均值法数字滤波器的C语言算法及其实现
💻 TXT
字号:
#include"stdio.h"
#define dtype unsigned int // 采集数据的数据类型
#define uint8 char

#define LEN  6   //移动算术平均的个数+2=SHIFT<<2+2
#define SHIFT 2   //2^SHIFT

uint8 pdata;    //移动指针
uint8 pmax,pmin;   //记录数据表中最大值和最小值的位置,
       //在一般的数据采集系统中,数据的长度>=8,
       //因此用指针记录而不是直接记录最大值和最小值
dtype datas[LEN];

dtype szlb(dtype _data)
{  
/****************************/
/* 在调用此子程序前必须对 */
/* pdata,datas[]数组,  */
/* pmax,pmin进行初始化  */
/****************************/

 uint8 i;
 dtype average=0;  //清零,用来计算平均值
 pdata=(pdata+1)%LEN; //指针下标在0到LEN-1上滑动
 datas[pdata]=_data;  //采样所得数据存入数据表中
 for(i=0;i<LEN;i++)
         average+=datas[i]; //求所有数据总和

/*******去除被认为是脉冲的数据******/
 if(_data>datas[pmax])
      pmax=pdata;   //得到最大值的指针
 else if(_data<datas[pmin])
      pmin=pdata;   //得到最小值的指针
 if(pdata==pmax)   //如果当前输入值将存入当前最大值的位置时
 {      //由以上方法将不可行,必须从其他位置中查找极值
      for(i=0;i<LEN;i++)
          if(datas[i]>datas[pmax])
          pmax=i;
 }
 else if(pdata==pmin)//如果当前输入值将存入当前最大值的位置时
 {      //由以上方法将不可行,必须从其他位置中查找极值
     for(i=0;i<LEN;i++)
          if(datas[i]<datas[pmin])
           pmin=i;
 }
 average=average-datas[pmax]-datas[pmin];//减去脉冲

 return (average>>SHIFT);    //求算术平均值
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -