《基于单片机的数字滤波器设计(共34页).doc》由会员分享,可在线阅读,更多相关《基于单片机的数字滤波器设计(共34页).doc(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上基于单片机数字滤波器设计摘 要数据采集又称数据获取,是利用一种装置,从系统外部采集数据并输入到系统内部的一个接口。数据采集技术广泛应用在各个领域。比如摄像头,麦克风,都是数据采集工具。被采集数据是已被转换为电讯号的各种物理量,如温度,水位,风速,压力等,可以是模拟量,也可以是数字量。在互联网行业快速发展的今天,数据采集已经被广泛应用于互联网及分布式领域,数据采集领域已经发生重要变化。而在数据采集中存在各种噪声。滤除噪声的方法有很多种,既有数字滤波器,也有模拟滤波器。本文采用了基于单片机和c语言来设计并开发数字滤波系统。针对于单片机数据采集系统中经常出现的随机干扰,通过
2、交流信号发生器输入来模拟数据采集过程,验证了几种使用较为普遍的克服随机干扰的单片机数字滤波算法,并给出了相应的c程序,同时也对这几种滤波算法进行了比较,并指出每一种算法具体适用范围和注意事项。另外本文使用了proteus进行仿真验证这几种滤波方法,用了AD和DA来采集及输出数据。关键词 单片机/proteus/数字滤波。BASED ON SCM DIGITALFILTER DESIGNABSTRACTData acquisition, also called data acquisition is the use of a device from the system input to ext
3、ernal data collection and an interface that internal system. Data collection technology is widely quoted in various fields. Such as cameras, microphones, are data acquisition tools. Are collected data has been converted to telecommunications number of various physical quantities such as temperature,
4、 pressure, water, wind speed, etc, can be analogue, also can be the digital quantity. In the Internet industry fast development today, data acquisition has been widely used in Internet and distributed field, data acquisition field has changed in important changes. And in data acquisition exist in al
5、l sorts of noise. Filter out the noise a variety of ways, both digital filters, also have simulation filter. Here we adopted based on SCM and C language to design and develop digital filtering system. We based on single-chip microcomputer data acquisition system often appears in the random disturban
6、ce, through the manual input to simulate data acquisition process, and verifies the several use common overcome random disturbance single-chip digital filtering algorithm, and presents the corresponding C program, especially for the median value filter and the median value average filtering algorith
7、m procedures were improved. Also on this compares several filtering algorithm, and points out the concrete each kind of algorithm is applicable range and precautions. In addition we use the simulation test this proteus several filtering method. In addition we still use the AD and DA to harvest and o
8、utput data. KEY WORDS microcontroller, proteus, digital filter 目 录专心-专注-专业1 绪 论1.1 数字滤波器特点 现在工业控制系统中,电路系统变得越来越复杂,因而带来的相互干扰也越来越强烈,模拟滤波电路已不能满足要求,数字滤波应运而生。数字滤波器是数字信号处理器的一种,在进行数据采集和数据传输过程中,经常会受到各种外界干扰,当干扰严重时,可导致系统的测控精度降低甚至无法正常工作,数字滤波器则通过计算机执行一段相应的程序来滤除夹杂在数字信号中的干扰信号。它所处理的对象是用序列表示的离散信号或是数字信号,因而可以实现一些高难度的复
9、杂处理,而且具有工作稳定,受环境因素小,抗干扰性能强精度可控等优点。因而现阶段被广泛应用,而用单片机实现数字滤波器与广泛应用的DSP处理器相比,具有成本低,体积小,可靠性强等优点,因而在一定场合也有一定的实用价值。【9】 从时间上看,数字信号是离散的,从幅度上看,它又是量化的。因此数字信号可用一个序列数来表示,而每个数又可表示成二进制码的形式。数字滤波器的功能就是利用计算机软件对一组输入数字序列进行一定的运算,再变换成另一组输出数字序列。对被测信号的处理,首先通过采样/保持电路,送至模/数转换器转换成数字量,然后通过数字滤波器滤除其中的干扰信号,最后通过模/数转换器获得模拟量输出。根据所用数学
10、模型的不同,数字滤波器可划分为两大类:一种是递归性滤波器,其特点是滤波器的输出不仅与输入信号有关,还与过去的输出值有关;另一种是非递归性滤波器,其特征是滤波器的输出仅与输入信号有关,而与过去输出值无关。设数字滤波器的输入信号为,输出信号为,则输入序列与输出序列之间的关系可用差分方程表示为公式一: (1.1)输入信号可以是模拟信号经采样和ADC变换后得到的数字序列,也可以是计算机的输出信号, 均为系数,由上述差分方程组组成的数字滤波器,称为递归性滤波器。若将上述差分方程中系数取做0,则得到公式二: (1.2)这种滤波器叫做非递归性滤波器。选择不同的系数,则可以设计低通,高通或带通,带阻式数字滤波
11、器。【6】1.2 数字滤波器的设计1.设计数字滤波器时,一般按下面步骤进行:(1)根据干扰信号的特征来选择合适的滤波器。(2)建立起典型的差分方程数学模型,并对差分方程进行Z变换,写出其Z传递函数。(3)根据有用信号与干扰信号的频率特征,来确定系统期望的通频带。(4)根据Z传递函数,确定其幅频特性和相频特性,再对Z进行反变换,求出滤波器的线性离散方程。(5)按照线性差分方程来编制相应的软件,最终实现数字滤波的功能。2. 数字滤波器的软件设计在测控系统中,由于各种参数的干扰成分不同,因而滤除这些干扰成分的方式也不同,本论文将用到中值滤波,算数平均滤波,加权平均滤波,中位值平均滤波,限幅滤波这五种
12、方法,可根据具体情况加以选用。2 数字滤波设计原理 这里有很多种熟悉滤波方法,我们见选用其中几种来进行设计,如中值滤波,算数平均滤波,加权平均滤波等等。所以下面我将详细介绍它们。2.1 中值位滤波是先对某中值滤波一参数连续采样N次(一般N取奇数),然后把N次采样值按从小到大排列,取中间值为本次采样值。该滤波方法实际上是一种排序方法,我在此采用的是冒泡法排序。由于在冒泡法排序中,没出现一次前者数据大于后者数据,就要进行两者数据的交换。该算法样例子程序如下:#define N 11 /N值可根据实际情况调整char filter()char value_buf;char count,i,j,k,t
13、emp;for(count=0;countN;count+) /获取数据value_bufcount=get_data();delay();for(i=0;iN-1;i+) /选择排序k=i;for(j=i+1;jN;j+) if(value_bufjvalue_bufk) k=j; temp=value_bufk; value_bufk=value_bufi; value_bufi=temp; return value_buf(N-1)/2; 中位值滤波能有效地克服偶然因素引起的波动或采样器不稳定引起的误码等脉冲干扰。对温度、液位等缓慢变化的被测参数采用此算法能收到良好的滤波效果,但对于流量
14、、压力等快速变化的数据,不宜采用中位值滤波。【2】2.2 算数平均滤波 算术平均滤波法适用于对一般的具有随机干扰的信号进行滤波。这种信号的特点是信号本身在某一数值范围附近上下波动,如测量流量、液位时经常遇到这种情况。算术平均滤波法是要按输入的N 个采样数据,寻找这样一个Y,使得Y 与各个采样值之间的偏差的平方和最小。具体实现此算法的子程序如下:#define N 12char filter()int count;int sum=0;for(count=0;countN;count+) sum+=get_ad(); delay(); return (char)(sum/N); 算术平均滤波适用于
15、对一般具有随机干扰的信号进行滤波。这种信号的特点是有一个平均值,信号在某一数值范围附近做上下波动,在这种情况下仅取一个采样值做依据显然是不准确的。算术平均滤波对信号的平滑程序完全取决于N,当N较大时,平滑度高,但灵敏度低;当N较小时,平滑度低,但灵敏度高,应视具体情况选取N,以便既少占用计算时间,又达到最好的效果。【7】2.3 加权平均滤波 在算术平均滤波和移动平均滤波中,N次采样值在输出结果中的权重是均等的,取1/N。用这样的滤波算法,对于时变信号会引入滞后,N值越大,滞后越严重。为了增加新采样数据在移动平均中的权重,以提高系统对当前采样值中所受干扰的灵敏度,可采用加权平均滤波,它是移动平均
16、滤波算法的改进。加权平均滤波是对连续N次采样值分别乘上不同的加权系统之后再求累加和,加权系统一般先小后大,以突出后面若干采样的效果,加强系统对参数变化趋势的辨识。各个加权系统均为小于1的小数,且满足总和等于1的约束条件。这样,加权运算之后的累加和即为有效采样值。为方便计算,可取各加权系数均为整数,且总和为256,加权运算后的累加和除以256,即舍去低字节后便是有效采样值。【8】具体的样例子程序如下:/code数组为加权系统表,存在ROM区。#define N 12char code jqN=1,2,3,4,5,6,7,8,9,10,11,12;char code sum_jp=1+2+3+4+
17、5+6+7+8+9+10+11+12;char filter_5()char count;char value_bufN;int sum=0;for(count=0;countN;count+)value_bufcount=get_data();delay();for(count=0;countN;count+)sum+=value_bufcount*jqcount;return (char)(sum/sum_jq);2.4 中位值平均滤波 它相当于是“中位值滤波法”和“算术平均滤波法”的结合。它连续采样N个数据,然后去掉一个最大值和一个最小值,最后计算N-2个数据的算术平均值。一般N值选取:
18、3-14。具体算法程序如下:#define N 12char filter()char count,i,j;char value_bufN;int sum=0;for (count=0;countN;count+)value_bufcount = get_ad();delay();for (j=0;jN-1;j+)for (i=0;ivalue_bufi+1 )temp = value_bufi;value_bufi = value_bufi+1;value_bufi+1 = temp;for(count=1;countA)|(data-datanewA)return data;return
19、datanew; 该算法主要用于处理变化比较缓慢的数据,如温度、物体的位置等。使用时关键在于最大偏差值的y的选择,通常可根据经验获得,也可按照输出参数可能的最大变化速度Vmax及采样周期T来决定Y的值,即Y=VmaxT。【4】3 滤波器硬件设计通过对系统工作原理的了解,可以大致了解数字滤波器设计的整体框图:图31 总体设计框图3.1 单片机AT89C51 这里我们使用了51系列单片机AT89C51,如下图利用这个单片机进行编程,实现对输入信号的滤波。我使用了P0口作为接受AD转换的结果的端口,而P1口则输出数据到DA转换器。另外还利用了P2作为控制端口,P2.0-P2.2用来控制AD转换器,而
20、P2.3-P2.6外接四个开关,用来实现滤波方式的选择。【3】图3-2 AT89C51引脚图3.2 数据采集 另外我还使用了ADC0808进行数据采集。这里ADC0808是并联AD转换器,ADC0808的引脚图如下图:图3-3 ADC0808的引脚图 IN0-IN8是八个模拟量输入端口,ADC0808可以一次对八个模拟量进行模数转换,但是在这里我们只使用了其中的一个输入端IN0,所以ADDDA、ADDB、ADDC都应为0,所以我让它们都接地。它的八个输出端接在单片机上,CLOCK接数据采样时钟,它可以接在单片机上由单片机控制,也可接在另外的数字时钟上,这里我选用外接别的时钟。START为转换启
21、动信号,在其上跳变时,所有内部寄存器清零,在其下调变时,开始进行AD转换。ALE是地址锁存信号。这里我让START和ALE均接在单片机的同一个端口上,即P2.1,让单片机实现程序控制AD的转换。OE是输出允许信号,OE=1时,才能允许输出,这里我让它也接在单片机的端口P2.1上,也是为了让单片机实现程序控制ADC0808的输出。EOC是转换结束信号,EOC=1时,表示转换结束。这个信号可以用来提醒单片机AD已经转换完毕,程序中即可以用查询方式,也可以用中断方式,这里我使用查询方式,所以把它接在P2.2上。VREF(+)和VREF(-)都是参考电压信号端口,这里我让VREF(-)的参考电压为零,
22、VREF(+)的参考电压为+3V。3.3 数模转换输出 这里我用了DAC0832来进行数模转换。DAC0832的引脚图如下图所示:图3-4 DAC0832的引脚图DAC0832有三种数模转换方法,直通方式、单缓冲方式、双缓冲方式,因为单片机输出后可以直接进行数模转换,所以这里我采用了不需要单片机控制的最为简单的直通方式,但是DAC0832若用于直通方式,则在接单片机的输出端口之间还要接一个缓冲器件,如74LS373。若用于直通方式下,则 、和GND均接地,而VCC和ILE则接正电源。VREF是参考电源。IOUT1、IOUT2是两个输出端。DAC0832输出的是电流,要利用运算放大器转换成电压。
23、数模转换输出电路如下图所示:图3-5 数模转换输出电路3.4 总体电路图总体电路图见附录A4 程序设计4.1 滤波算法设计 这个在前面介绍滤波原理时已经说过了,在此就不再次重复了。因为设计时采集的时钟频率很大,所以在一定范围内采集的数据都差不多,因此对一系列的数据进行滤波处理时就好像是在对同一个数据进行滤波处理。但是因为这些算法处理的数据时连续采集了N个的,所以要设立一个变量数组来存储这些输入的数据,而且要记得及时更新。我利用了队列的思想,如果输入一个新的数据,则丢弃最原始的一个数据,把新数据插入进来,就好像队列一样,对头删除数据,对位插入新的数据。这个程序如下:void change()in
24、t i;for(i=0;iN-1;i+)bufi=bufi+1;bufN-1=a;而获得这一系列中的某一个数据就用了一个函数就可以了,直接返回队列中的第n项的数据。这个程序如下:uchar get_data(n)change();return bufn;4.2 AD转换器 因为START为转换启动信号,在其上跳变时,所有内部寄存器清零,在其下调变时,开始进行AD转换。所以设计程序时,要先让START为0,在让START为1,最后让START为0。开始采集数据后就要让OE为1,进行数据输入。同时数据采集结束时,利用查询语句,查看EOC是否为1,如果是1,则处于等待状态,如果变成1,则可以进行数据
25、输入了。AD转换的程序如下:START = 0;START = 1;START = 0;while(EOC=0);OE = 1;a = P0;这里a是一个变量,用来存储AD输入的数据。4.3 滤波算法的选择 我在电路上采用的是开关控制选择,所以这里只需要一系列的if选择语句就可以完成率把算法的选择。程序如下:if(con=0) if(con1=0)&(con2=0)&(con3=0) res=filter1(); if(con1=0)&(con2=0)&(con3=1) res=filter2(); if(con1=1)&(con2=0)&(con3=0) res=filter5(); if(
26、con1=1)&(con2=0)&(con3=1) res=filter6(); if(con1=1)&(con2=1)&(con3=1) res=filter8(); else res=a;con1、con2、con3三位用来控制滤波算法的选择,而con用来控制是否要进行滤波。4.4 总体程序总体程序见附录B。4.5 程序流程图图4-1 程序流程图5 仿真结果和分析输入波形与未经滤波器滤波波形如下:图5-1输入波形与未经滤波器滤波波形以下几幅图是经滤波后的波形:图5-2 经限幅后的波形图5-3 经中值滤波后的波形图5-4 经滑动平均滤波后的波形 图5-5 经中位值平均滤波后的波形图5-6 经
27、加权递推平均滤波后的波形 限幅滤波的效果是和A值有关的,一般情况下,A值越小,则代表允许的噪声要越小,限幅滤波很适用于使幅值突变的噪声。中值滤波由于要求中值,所用到的排序算法会大大消耗时间,因此延时比较严重,但是总的来说选择排序比冒泡排序的延时情况要好。中位值平均滤波,由于滤波算法中会求平均值在,所以在原波是方波时会出现某一次求平均后编程中间值,另外由于和中值滤波一样要进行排序,因此也会产生很大的延时。加权递推平均算法和上面一样,因为会求平均值,因此也会有时候产生中间值,但是如果把当前值得权值设的很大,而越久远之前的权值设的越小,则可明显改善此问题,另外由于加权递推平均滤波中用到的乘法,因此会
28、有一定的延时。 6 数字滤波器新算法分析6.1 滑动平均滤波滑动平均滤波即把连续取N个采样值看成一个队列,队列的长度固定为N,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则)。吧队列中的N个数据进行算术平均运算,就可获得新的滤波结果。N的取值:流量N=12;压力:N=4,;液面:N=412;温度:N=14。具体算法程序如下:#define N 12 char value_bufN;char i=0;char filter()char count;int sum=0;value_bufi+ = get_ad();if ( i = N ) i = 0;for ( count=
29、0;countN,count+)sum = value_bufcount;return (char)(sum/N);滑动平均值法对周期性干扰有良好的抑制作用,平滑度高,灵敏度低;但对偶然出现的脉冲性干扰的抑制作用差,不易消除由于脉冲干扰引起的采样值的偏差。因此他不适用于脉冲干扰比较严重的场合,而适用于高频振荡系统。6.2 一阶滞后滤波一阶滞后滤波即取a=01,本次滤波结果=(1-a)*本次采样值+a*上次滤波结果。具体算法程序如下:#define a 50char value;char filter()char new_value;new_value = get_ad();return (10
30、0-a)*value + a*new_value; 一阶之后滤波对周期性干扰具有良好的抑制作用,适用于波动频率较高的场合。同时它的相位滞后,灵敏度低,滞后程度取决于a值大小,不能消除滤波频率高于采样频率的1/2的干扰信号。6.3 加权递推平均滤波加权递推平均滤波是对递推平均滤波法的改进,即不同时刻的数据加以不同的权,通常是,越接近现时刻的资料,权取得越大,给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低。具体算法程序如下:#define N 12char code coeN = 1,2,3,4,5,6,7,8,9,10,11,12;char code sum_coe = 1+2+3+4
31、+5+6+7+8+9+10+11+12;char filter()char count;char value_bufN;int sum=0;for (count=0,countN;count+)value_bufcount = get_ad();delay();for (count=0,countN;count+)sum += value_bufcount*coecount;return (char)(sum/sum_coe);加权递推平均滤波适用于有较大纯滞后时间常数的对象和采样周期较短的系统。而对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号,不能迅速反应系统当前所受干扰的严重程度,滤
32、波效果差。6.4 消抖滤波消抖滤波即设置一个滤波计数器,将每次采样值与当前有效值比较: 如果采样值当前有效值,则计数器清零。如果采样值当前有效值,则计数器+1,并判断计数器是否=上限N(溢出),如果计数器溢出,则将本次值替换当前有效值,并清计数器。具体算法程序如下:#define N 12char 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();r
33、eturn value; 消抖滤波对于变化缓慢的被测参数有较好的滤波效果,可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动。对于快速变化的参数不宜,如果在计数器溢出的那一次采样到的值恰好是干扰值,这种算法则会将干扰值当作有效值导入系统。【5】所以,每种滤波算法都有其各自的特点,在实际应用中,究竟选取哪一种数字滤波算法,应根据具体的测量参数合理的选用。不适当地应用数字滤波,不仅达不到滤波效果,反而会降低控制品质,甚至失控,这点必须予以注意。7 总结在微机控制系统的模拟输入信号中,一般均含有各种噪声和干扰,他们来自被测信号源本身,传感器,外界干扰等。为了进行准确测量和控制,必须消除被测信
34、号中的噪声和干扰。噪声有2大类:一类为周期性的,其典型代表为50 Hz的工频干扰,对于这类信号,采用积分时间等于20 ms整倍数的双积分A/D转换器,可有效地消除其影响;另一类为非周期的不规则随机信号,对于随机干扰,可以用数字滤波方法予以削弱或滤除。对于数字滤波系统,其程序不是很难的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对系统的结构很熟悉。因此可以说系统的设计是软件和硬件的结合,二者是
35、密不可分的。所谓数字滤波,就是通过一定的计算或判断程序减少干扰信号在有用信号中的比重,因此他实际上是一个程序滤波。 数字滤波器克服了模拟滤波器的许多不足,他与模拟滤波器相比有以下优点:(1)数字滤波器是用软件实现的,不需要增加硬设备,因而可靠性高、稳定性好,不存在阻抗匹配问题。(2)模拟滤波器通常是各通道专用,而数字滤波器则可多通道共享,从而降低了成本。(3)数字滤波器可以对频率很低(如0.01 Hz)的信号进行滤波,而模拟滤波器由于受电容容量的限制,频率不可能太低。数字滤波器具有高精度,高可靠性,可程控改变特性或复用、便于集成等优点。数字滤波器在语言信号处理、图像信号处理、医学生物信号处理以
36、及其他应用领域都得到了广泛应用。致 谢本论文的工作是在我的导师XXX老师的悉心指导下完成的。在整个毕业设计过程中,X老师不断引导我们,帮助我们梳理论文思路,耐心地给我解释一些细节上的、我不理解的问题,并提出一些新的问题,使得我对毕业设计课题能够有更深入的思考,帮助我顺利完成毕业设计和论文。在此谨向X老师致以诚挚的谢意和崇高的敬意。一开始我们从参考书上找来了课题,但是毕竟是参考书,做到后来发现很多程序都是不完整的,这让我伤透了脑筋。程序接线什么的都弄好了,调试也没有问题,可是就是无法达到预期想要的结果。参考书毕竟只是一个参考,设计这种东西最后还是要靠自己动脑筋。然后我从平时做的实验老师上课的举例
37、书本上的知识以及老师的辅导和其他同学的帮助下终于完成了。虽然内容并不是很复杂,但是我们觉得设计的过程相当重要,学到了很多,收获了很多。我觉得课程设计反映的是一个从理论到实际应用的过程。在此,我要感谢仲佳,范瑞娟,高东东等同学对我的帮助,这段时间我们之间的相互协作,不仅促进了毕设的顺利完成,同时也增进我们之间的友谊 。最后,感谢所有支持过我、帮助过我的老师、朋友和同学们,祝愿大家都会有一个美好而又光明的未来。参考文献1 李群芳.单片微型计算机与接口技术.电子工业出版社.20072 彭冬明.单片机实验教程.北京理工大学出版社.20073 何立民.单片机应用技术选编.北京航空航天大学出版社.2000
38、4 余发山.单片机原理及及应用技术.中国矿业大学出版社.20035 周航慈.单片机程序设计基础.北京航空航天大学出版社.20016 刘松强 数字信号处理系统及其应用.清华大学出版社.19967 程佩青 数字信号处理教程. 清华大学出版社.19958 潘祖善,何绍雄,贾学堂 微波技术.上海交通大学出版社.19979 R.E包格勒,A.G康斯坦丁尼斯基 数字滤波器导论.国防工业出版社.198210 ALAN V.OPPENHEIM.ALAN S.WILLSKY.SIGNALS&SYSTEM 清华大学出版社.1999附 录A附 录B总体程序如下:#include #include #define u
39、char unsigned char#define A 0.005#define N 11sbit con1 = P23;sbit con2 = P24;sbit con3 = P25;sbit con = P26;sbit OE = P20;sbit START = P21;sbit EOC = P22;uchar a;uchar bufN =0;void change()int i;for(i=0;i A ) | ( value - new_value A ) )return value;return new_value;/中值滤波uchar filter2()uchar value_bu
40、ffN,temp; /定义存储数据的数组int count,i,j,k;for(count=0;countN;count+) /获取数据value_buffcount=get_data(count);for(j=0;jN-1;j+) /用冒泡法对数据进行排序,当然最好用其他排序方法 k=j;for(j=i+1;jN;j+)if(value_buffjvalue_buffk) k=j; temp=value_buffk; value_buffk=value_buffi; value_buffi=temp;return value_buff(N-1)/2;/滑动平均滤波uchar filter5(
41、)uchar value_buffN;int i=0;int count;int sum=0;value_buffi+=get_data(count);if(i=N) i=0;for(count=0;countN;count+) sum+=value_buffcount;return (uchar)(sum/N);/中位值平均滤波uchar filter6()uchar count,i,j,temp;uchar value_bufN;int sum=0;for (count=0;countN;count+)value_bufcount = get_data(count);for (j=0;jN-1;j+)for (i=0;ivalue_bufi+1 )temp = value_bufi;value_bufi = value_bufi+1;value_bufi+1 = temp;for(count=1;countN-1;count+)sum += value_bufcount;return (uchar)(sum/(N-2);/加权递推平