用C语言实现数字滤波.doc_第1页
用C语言实现数字滤波.doc_第2页
用C语言实现数字滤波.doc_第3页
用C语言实现数字滤波.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

标题:用C语言实现数字滤波2008-05-09 16:17:33在工业过程控制系统中,由于被控对象的环境比较恶劣,干扰源比较多,仪器、仪表采集的信息常会受到干扰,所以在模拟系统中,为了消除干扰,常采用RC滤波电路,而在由工业控制计算机组成的自动检测系统中,为了提高采样的可靠性,减少虚假信息的影响,常常采用数字滤波的方法。 数字滤波的方法有很多种,可以根据不同的测量参数进行选择。下面给出几种常用的数字滤波方法的C语言函数,这些函数有一定的通用性,用Turbo C 2.0编制而成,在研华IPC-610/386机上均编译通过,适用于PC机及其兼容机。 1. 程序判数滤波 采样的信号,如因常受到随机干扰传感器不稳定而引起严重失真时,可以采用此方法。方法是:根据生产经验确定两交采样允许的最大偏差,若先后两次采样的信号相减数值大于,表明输入的是干扰信号,应该去掉;用上次采样值作为本次采样值,若小于、等于表明没有受到干扰,本次采样值效。该方法适用于慢变化的物理参数的采样,如温度、物理位置等测量系统。程序判断滤波的C程序函数如下:float program_detect_filter(float old_new_value, float X)float sample_value;if (fabs(old_new_value1_old_new_value0)X) sample_value=old_new_value0;else sample_value=old_new_value1;retrun(sample_value);函数调用需一个一维的两个元素的数组(old_new_value2,用于存放上次采样值(old_new_value0,)和本次采样值(old_new_value1,),函数中sample_value表示有效采样值,X表示根据根据经验确定的两次采样允许的最大偏差。2、中值滤波 中值滤波是对某一参数连续输入N次(一般N取奇数),从中选择一个中间值作为本次采样值,若变量变化比较缓慢,采用此方法效果比较好,但对快速变化过程的参数,如流量、自然伽玛等,则不宜采用。中值滤波的C程序函数如下:float middle_filter(float middle_value , int count)float sample_value, data;int i, j;for(i=0; i=I; -j)if(middle_valuej-1middle_valuej data=middle_valuej-1; middle_valuej-1=middle_valuej middle_valuej=data;sample_value=middle_value(count-1)/2;return(sample_value);函数假设对某一参数连续采样3次,若多次采样,可 对该函数稍作修改即可。3次采样值存储在数组middle_value3,其中Sample-value表示有效采样值,count表示连续采样次数。3、滑动算术平均值滤波滑动算术平均值滤波是设一循环队列,依顺序存放N次采样数据,每次数据采集时,先将放在队列中第一个最早采集的数据丢掉,再把新数据放入队尾,然后求包括新数据在内的N个数据的算术平均值,便得到该次采样的有效数据。该方法主要用于对压力、流量等周期脉动的采样值进行平滑加工处理。滑动算术平均值滤波C程序函数如下:float move_average_filter(float data_buf, int count)float sample_vaue,data=0;int i;for (i=0;i data+=data_bufi;sample_value=/blog/data/count;return(sample_value;函数假设顺序存放5次采样数据的数据缓冲区data_buf5,对于多于5次的滑动算术平均滤波,只需对该函数稍作修改即可,其中sample_value表示本次采样的有效数据,count表示数据有样次数。4.滑动加权平均值滤波滑动加权平均滤波是设一个数据缓冲区依顺序存放N次采样数据,每采进一个新数据,就将最先采集的数据丢掉,而后求包括新数据在内的N个数据的加权平均值,便得到该次采样的有效数据。该方法对脉冲性干扰的平滑作用尚不理想,不适用于脉冲性干扰比较严重的场合。滑动加权平均值滤波的C程序函数如下:floa move_times_filter(float data _buf )float sample_value;float filter_k3=0.3,0.2,0.15;sample_value=filter_k0*data_buf2+filter_k1*(data_buf1+data_buf3)+filter_k2*(data_buf0+data_buf4;return(sample_value);函数假设依次存放5次采样数据的数据缓冲区data_buf5,对于多于5次的滑动加权平均滤波,只需对该函数稍作修改即可,其中数据组filter_k3表示加权系数,这三个系数的关系为filter_k0+2*filter_k1+2*filter_k2=1,本次采样的有效数据用sample_value表示。5、防脉冲干扰平均值滤波防脉冲干扰平均值滤波是连续进行N次采样,去掉其中最大值和最小值,然后求剩下的N-2个数据的平均值,作为本次采样的有效值。该方法适用于变量跳变比较严重的场合。这种滤波也应用边采样边计算的方法。float max_min_chioce(float x_buffer,int numberint max_value, min_value;float sample_value=/blog/0.0;int i;max_value, =x_buffero;min_value=x_buffer0;for(i=1;i)if(x_bufferimax_value)max_value=x_bufferi;if(x_bufferi for(i=0; i sample_value=(sample_value_max_value_min_value)/(number-2);return(sample_value);函数假设存放连续进行5次采样的数据缓冲区data_buf5,对于多于5次的防脉冲干扰平均值滤波,只需对该函数稍作修改即可,其中Sample_value表示本次采样的有效数据,number表示连续进行的采样次数。6、低通数字滤波低通滤波也称一阶滞后滤波,方法是第N次采样后滤波结果输出值是(1-a)乘第N次采样值加a乘上次滤波结果输出值。可见a1。该方法适用于变化过程比较慢的参数的滤波的C程序函数如下:float low_filter(float low_buf)float sample_value;float X=0.01;sample_value=(1_X)*low_buf1+X*low buf0;retrun(sample_value);函数假设求第2次采样后滤波结果输出值sampe_valeu,数组low_buf2表示存放上次滤波结果输出值*low_buf0)和本次采样值(low_buf1),X表示a。为方便以上几种滤波函数的理解,下面给出调用以上函数的程序例。i ncludei ncludei ncludemain()folat old_new_buf2=1.2,2.6;float middle_value3=20,12,18;float data_average_buf5=10,20,20,10,10;float data_times_buf5=1.4,1.5,1.3,1.2,1.0;float data_max_min_buf5=1.2,80,1.4,0.2,1.3;foat low_buf2=1.2,2.0;float xx;xx=program_detect_filter(old_new_buf,1.0;printf(The program detect filter value is:%fn,xx);xx=middle_filter (middle_value, 3);printf(The middle filter value is:%fn:,xx);xx=move_avergae_filter(data_avergae_buf,5);printf(the mover average filter value is:%fn,xx);xx=move_times_filter(data_time_fud);printf(The move times filter value is:%fn,xx);xx=max_min_choice(data_max_min_buf,5);printf(The max-min filter value is:%fn,xx);xx=low_filter(low_buf);printf(The low filter value is:%fn,xx);运行执行程序,屏幕显示:The program detect filter val

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论