📄 防脉冲干扰移动平均值法数字滤波器的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 + -