- 15
- 0
- 约2.36千字
- 约 3页
- 2018-06-07 发布于河南
- 举报
防脉冲干扰移动平均值法数字滤波器的C语言算法及其实现
防脉冲干扰移动平均值法数字滤波器的C语言算法及其实现
???????? 在许多的数据采集系统中,现场的强电设备较多,不可避免地会产生尖脉冲干扰,这种干扰一般持续时间短,峰值大,对这样的数据进行数字滤波处理时,仅仅采用算术平均或移动平均滤波时,尽管对脉冲干扰进行了1/n的处理,但其剩余值仍然较大。这种场合最好的策略是:将被认为是受干扰的信号数据去掉,这就是防脉冲干扰平均值滤波法的原理。
?? 防脉冲干扰平均值滤波法的算法是:对连续的n个数据进行排序,去掉其中最大和最小的2个数据,将剩余数据示平均值。
?? 在一般8051单片机的应用中为了加快数据处理速度,n可以取值6。? 而对于具有较快速度的处理器,则n值可以适当取大一些。但最好是? n=2^k+2,? k为整数,因为这样在求平均值average=SUM/(n-2)=SUM/2^k时,可以写成average=SUMk,用移位的方法,可以加快处理速度。?? ?? 上述算法显然还存在一个不足之处,就是每采集一个数据就要进行一次排序,这样会大量占用系统宝贵的时间。这可以通过存储当前数据中的最大值和最小值来改进。具体做法是:??? 系统中用两个变量来存储当前n个数据的最大值和最小值在这个数组中的偏移量(也就是数组下标,存储数组下标而直接不存储数据本身是因为:在一般的系统中,n不会超无符号短整形的表示范围,因此用一个char形变量就可以存储了而如果直接存储数据本身,则许多情况下要用int形变量,甚至更长的类型)。这样只要在当前输入的数据将要覆盖的数据正好是当前的最大值或最小值时才在下个数组中查找最大值或最小值,而其他情况下则只要将输入的数据与最大值和最小值比较就可以修改下最大值和最小值了,而且不用进行数据排序。
? 这个算法很简单,下面是对应的C语言代码实现,可以很方便的应用的具体的51单片机,? 或其他处理器上,只须做少量的修改。
#includestdio.h#define dtype unsigned int // 采集数据的数据类型#define uint8 char
#define LEN? 6?? //移动算术平均的个数+2=SHIFT2+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;iLEN;i++)???????? average+=datas[i]; //求所有数据总和
/*******去除被认为是脉冲的数据******/if(_datadatas[pmax])????? pmax=pdata;?? //得到最大值的指针else if(_datadatas[pmin])????? pmin=pdata;?? //得到最小值的指针if(pdata==pmax)?? //如果当前输入值将存入当前最大值的位置时{????? //由以上方法将不可行,必须从其他位置中查找极值????? for(i=0;iLEN;i++)????????? if(datas[i]datas[pmax])????????? pmax=i;}else if(pdata==pmin)//如果当前输入值将存入当前最大值的位置时{????? //由以上方法将不可行,必须从其他位置中查找极值???? for(i=0;iLEN;i++)????????? if(datas[i]datas[pmin])?????????? pmin=i;}average=average-datas[pmax]-datas[pmin];//减去脉冲
return (averageSHIFT);??? //求算术平均值}
/******以下是在VC++6.0环境下运行的测试程序**/
/***通过手动输入来模拟数据采集过程****/
void ma
您可能关注的文档
- 金属间化合物Cu Al 纳米微粉的热稳定性研究.pdf
- 金山区2009学年第一学期期末考试高三政治加一试卷.doc
- 金牌销售员销售谈判技巧.pdf
- 金湖二中2011届高三数学周练试卷(九)(艺术班用)I卷.doc
- 金相分析中铜导线的腐蚀剂探讨.pdf
- 金花茶食用分析可行性研究报告.doc.docx
- 金融业财务状况(执行企业会计制度单位填报)(J103-3、J.ppt
- 金融数学引论课件-利息基本计算.ppt
- 金迪期货期货基础知识.ppt
- 金陵中学-细胞 分裂专题复习xin.ppt
- 中国国家标准 GB/T 16172-2026建筑材料热释放速率和产烟速率试验方法.pdf
- GB/T 16172-2026建筑材料热释放速率和产烟速率试验方法.pdf
- 《GB/T 16172-2026建筑材料热释放速率和产烟速率试验方法》.pdf
- 《GB/T 14926.62-2026实验动物 猴免疫缺陷病毒检测方法》.pdf
- GB/T 14926.62-2026实验动物 猴免疫缺陷病毒检测方法.pdf
- GB/T 46917.3-2026标准语义知识库 第3部分:语义集成技术要求.pdf
- 《GB/T 46917.3-2026标准语义知识库 第3部分:语义集成技术要求》.pdf
- 中国国家标准 GB/T 46917.3-2026标准语义知识库 第3部分:语义集成技术要求.pdf
- 中国国家标准 GB/T 45305.3-2026声学 建筑构件隔声的实验室测量 第3部分:撞击声隔声测量.pdf
- GB/T 45305.3-2026声学 建筑构件隔声的实验室测量 第3部分:撞击声隔声测量.pdf
原创力文档

文档评论(0)