十大滤波算法

合集下载

C语言十大滤波算法

C语言十大滤波算法

十大滤波算法程序大全精心整理版转自网络11、限幅滤波法函数名称:AmplitudeLimiterFilter-限幅滤波法优点:能有效克服因偶然因素引起的脉冲干扰缺点:无法抑制那种周期性的干扰,且平滑度差说明:1、调用函数GetAD,该函数用来取得当前值2、变量说明Value:最近一次有效采样的值,该变量为全局变量NewValue:当前采样的值ReturnValue:返回值3、常量说明A:两次采样的最大误差值,该值需要使用者根据实际情况设置入口:Value,上一次有效的采样值,在主程序里赋值出口:ReturnValue,返回值,本次滤波结果/define A 10unsigned char Valueunsigned char AmplitudeLimiterFilter {unsigned char NewValue;unsigned char ReturnValue;NewValue=GatAD;ifNewValue-Value>A||Value-NewValue>A ReturnValue=Value;else ReturnValue=NewValue;returnReturnValue;}2、中位值滤波法/函数名称:MiddlevalueFilter-中位值滤波法优点:能有效克服因偶然因素引起的波动干扰;对温度、液位等变化缓慢的被测参数有良好的滤波效果缺点:对流量,速度等快速变化的参数不宜说明:1、调用函数GetAD,该函数用来取得当前值Delay,基本延时函数2、变量说明ArrDataBufferN:用来存放一次性采集的N组数据Temp:完成冒泡法试用的临时寄存器i,j,k:循环试用的参数值3、常量说明N:数组长度入口:出口:value_bufN-1/2,返回值,本次滤波结果/define N 11unsigned char MiddlevalueFilter {unsigned char value_bufN;unsigned char i,j,k,temp;fori=0;i<N;i++{value_bufi = get_ad;delay;}for j=0;j<N-1;j++{for k=0;k<N-j;k++{ifvalue_bufk>value_bufk+1{temp = value_bufk;value_bufk = value_bufk+1;value_bufk+1 = temp;}}}return value_bufN-1/2;}3、算术平均滤波法/说明:连续取N个采样值进行算术平均运算优点:试用于对一般具有随机干扰的信号进行滤波;这种信号的特点是有一个平均值,信号在某一数值范围附近上下波动;缺点:对于测量速度较慢或要求数据计算较快的实时控制不适用;/define N 12char filter{unsigned int sum = 0;unsigned char i;for i=0;i<N;i++{sum + = get_ad;delay;}returncharsum/N;}4、递推平均滤波法又称滑动平均滤波法/说明:把连续N个采样值看成一个队列,队列长度固定为N;每次采样到一个新数据放入队尾,并扔掉队首的一次数据;把队列中的N各数据进行平均运算,既获得新的滤波结果;优点:对周期性干扰有良好的抑制作用,平滑度高;试用于高频振荡的系统缺点:灵敏度低;对偶然出现的脉冲性干扰的抑制作用较差,不适于脉冲干扰较严重的场合/define N 12unsigned char value_bufN;unsigned char filter{unsigned char i;unsigned char value;int sum=0;value_bufi++ = get_ad; //采集到的数据放入最高位fori=0;i<N;i++{value_bufi=value_bufi+1; //所有数据左移,低位扔掉sum += value_bufi;}value = sum/N;returnvalue;}5、中位值平均滤波法又称防脉冲干扰平均滤波法/说明:采一组队列去掉最大值和最小值优点:融合了两种滤波的优点;对于偶然出现的脉冲性干扰,可消除有其引起的采样值偏差;对周期干扰有良好的抑制作用,平滑度高,适于高频振荡的系统;缺点:测量速度慢/define N 12uchar filter{unsigned char i,j,k,l;unsigned char temp,sum=0,value; unsigned char value_bufN,;fori=0;i<N;i++{value_bufi = get_ad;delay;}//采样值从小到大排列冒泡法forj=0;j<N-1;j++{fori=0;i<N-j;i++{ifvalue_bufi>value_bufi+1{temp = value_bufi;value_bufi = value_bufi+1;value_bufi+1 = temp;}}}fori=1;i<N-1;i++sum += value_bufi;value = sum/N-2;returnvalue;}6、递推中位值滤波法/优点:对于偶然出现的脉冲性干扰,可消除由其引起的采样值偏差; 对周期性干扰有良好的抑制作用,平滑度高;试用于高频振荡的系统缺点:测量速度慢/char filterchar new_data,char queue,char n {char max,min;char sum;char i;queue0=new_data;max=queue0;min=queue0;sum=queue0;fori=n-1;i>0;i--{ifqueuei>maxmax=queuei;else if queuei<minmin=queuei;sum=sum+queuei;queuei=queuei-1;}i=n-2;sum=sum-max-min+i/2; //说明:+i/2的目的是为了四舍五入sum=sum/i;returnsum;}7、限幅平均滤波法/优点:对于偶然出现的脉冲性干扰,可消除有其引起的采样值偏差; /define A 10define N 12unsigned char data;unsigned char filterdata{unsigned char i;unsigned char value,sum;dataN=GetAD;ifdataN-dataN-1>A||dataN-1-dataN>A dataN=dataN-1;//else dataN=NewValue;fori=0;i<N;i++{datai=datai+1;sum+=datai;}value=sum/N;returnvalue;}8、一阶滞后滤波法/函数名称:filter-一阶滞后滤波法说明:1、调用函数GetAD,该函数用来取得当前值Delay,基本延时函数2、变量说明Or_dataN:采集的数据Dr0_flag、Dr1_flag:前一次比较与当前比较的方向位 coeff:滤波系数F_count:滤波计数器3、常量说明N:数组长度Thre_value:比较门槛值入口:出口:/define Thre_value 10define N 50float Or_dataN;unsigned char Dr0_flag=0,Dr1_flag=0; void absfloat first,float second {float abs;iffirst>second{abs=first-second;Dr1_flag=0;}else{abs=second-first;Dr1_flag=1;}returnabs;}void filtervoid{uchar i=0,F_count=0,coeff=0;float Abs=;//确定一阶滤波系数fori=1;i<N;i++{Abs=absOr_datai-1,Or_datai;ifDr1_flag^Dr0_flag //前后数据变化方向一致{F_count++;ifAbs>=Thre_value{F_count++;F_count++;}ifF_count>=12F_count=12;coeff=20F_count;}else //去抖动coeff=5;//一阶滤波算法ifDr1_flag==0 //当前值小于前一个值Or_datai=Or_datai-1-coeffOr_datai-1-Or_datai/256;elseOr_datai=Or_datai-1+coeffOr_datai-Or_datai-1/256;F_count=0; //滤波计数器清零Dr0_flag=Dr1_flag;}}9、加权递推平均滤波法/coe:数组为加权系数表,存在程序存储区;sum_coe:加权系数和/define N 12const char code coeN = {1,2,3,4,5,6,7,8,9,10,11,12}; const char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12; unsigned char filter{unsigned char i;unsigned char value_bufN; int sum=0;for i=0;i<N;i++{value_bufi = get_ad;delay;}for i=0,i<N;i++{value_bufi=value_bufi+1; sum += value_buficoei; }sum/=sum_coe;value=sum/N;returnvalue;}10、消抖滤波法//define N 12unsigned char filter{unsigned char i=0;unsigned char new_value; new_value = get_ad;ifvalue =new_value;{i++;if i>N{i=0;value=new_value; }}else i=0;returnvalue;}。

十大滤波算法

十大滤波算法

十大滤波算法滤波算法是数字图像处理中最基本的算法之一,它可以改善图像质量,抑制噪声,提取有用信息和抵消图像插值错误等。

滤波也是一个让人了解图像处理的过程的重要组成部分。

滤波的主要作用是改进图像质量,去除噪声,提取有用信息以及抵消图像插值错误。

这里有十种常用的滤波算法,可以帮助你更好地理解滤波算法,它们分别是:1.单均值(Simple Average):这种滤波器可以帮助抵消噪声,它将图像中每个像素周围的像素值求平均,将其设置为该像素的新值。

2. 中值(Median):它将像素点周围的像素值做排序,然后将其中值设置为该像素的新值,从而抑制噪声。

3.角(Dark Corner):它用于消除图像中的角点。

它将图像中每个像素周围的像素值做排序,然后取最小值来替代暗角处的像素值,从而去除暗角。

4.斯滤波(Gaussian Filtering):它是根据高斯函数提取图像的有用信息的一种简单的滤波器,它的基本原理是将图像中每个像素的像素值替换为该像素周围像素点的加权平均值,并压制高频噪声。

5.方图均衡(Histogram Equalization):它是一种将暗部或亮部像素值增强的方法,可以有效改善图像对比度和色彩质量。

6.邻均值(Neighborhood Average):它是一种用来抑制噪声,突出图像边缘和细节的滤波器,它将图像中每个像素值替换为其附近像素点的加权平均值。

7.量平滑(Energy Smoothing):它是一种抑制噪声的滤波算法,它将图像中每个像素值替换为它附近像素点的加权和,也就是说加权求和的目标函数的最小值。

8.数函数平均(Exponential Average):它也是一种抑制噪声的滤波算法,它将图像中每个像素值替换为它附近像素点的指数函数的加权平均值。

9.值抖动滤波(Mean Shaking Filter):它是一种高效的抑制噪声的滤波算法,它将图像中每个像素值替换为其附近像素点均值加上权重噪声值的加权平均值。

十大滤波算法精修订

十大滤波算法精修订
40.for(i =0; i < FILTER_N; i++){
41.filter_sum += Get_AD();
42.delay(1);
43.}
44.return(int)(filter_sum / FILTER_N);
45.}
4、递推平均滤波法(又称滑动平均滤波法)
ARDUINO 代码
1./*
44.else
45.returnNewValue;
46.}
2、中位值滤波法
ARDUINO 代码
1./*
2.A、名称:中位值滤波法
3.B、方法:
4.连续采样N次(N取奇数),把N次采样值按大小排列,
5.取中间值为本次有效值。
6.C、优点:
7.能有效克服因偶然因素引起的波动干扰;
8.对温度、液位的变化缓慢的被测参数有良好的滤波效果。
46.filter_temp = filter_buf[i];
47.filter_buf[i]= filter_buf[i +1];
48.filter_buf[i +1]= filter_temp;
49.}
50.}
51.}
52.returnfilter_buf[(FILTER_N -1)/2];
53.}
2.A、名称:递推平均滤波法(又称滑动平均滤波法)
3.B、方法:
4.把连续取得的N个采样值看成一个队列,队列的长度固定为N,
5.每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则),
6.把队列中的N个数据进行算术平均运算,获得新的滤波结果。
7.N值的选取:流量,N=12;压力,N=4;液面,N=4-12;温度,N=1-4。

十大滤波算法

十大滤波算法

十大滤波算法滤波是一种常用的数据处理技术,用于有效构建和改善信号的质量,优化信号的性能。

通过滤波,可以有效地抑制信号中的噪声,从而提高信号的清晰度,改善信号的性能。

现在,在许多应用及其他领域中,滤波算法已经成为一个重要的研究课题。

首先,我们应该了解滤波算法有哪些,其中主要有十类滤波算法:低通滤波、带通滤波、带阻滤波、高通滤波、椭圆滤波、阶跃滤波、时间延迟滤波、均值滤波、中值滤波、振荡器滤波。

下面,我们来详细介绍这十类滤波算法。

1. 低通滤波:它是将所有高频成分从信号中滤除,保留低频成分的一种滤波器。

它可以有效地抑制信号中的噪声,提高信号的清晰度,同时改善信号的性能。

2.通滤波:它是一种仅保留低频和高频成分的滤波器,可以有效地去除中间频率的干扰成分,提高系统的鲁棒性。

3.阻滤波:它是滤除一定范围内的频率成分,保留高频成分和低频成分的一种滤波器。

它可以有效地利用低频成分进行模型适应,以解决信号的噪声问题。

4.通滤波:它是一种仅保留高频成分的滤波器,可以有效地滤除信号中的低频成分,增强信号的清晰度。

5.圆滤波:它是在低通滤波器和带通滤波器之间的一种滤波器,可以有效地去除信号中的噪声,提高信号的清晰度。

6.跃滤波:它是一种仅保留高频成分和低频成分的滤波器,可以有效地滤除信号中的中频成分,以消除信号中的干扰。

7.间延迟滤波:它是一种仅保留低频成分的滤波器,可以有效地抑制信号中的高频成分,提高信号的清晰度。

8.值滤波:它是一种仅保留低频成分的滤波器,可以有效地抑制信号中的噪声,提高信号的清晰度。

9. 中值滤波:它是一种仅保留低频成分的滤波器,可以有效地抑制信号中的噪声,提高信号的清晰度。

10.荡器滤波:它是一种放大和抑制信号中特定频率成分的滤波器,可以有效地改善信号的性能。

以上便是十大滤波算法,它们可以有效地分离信号中的高频、低频成分,抑制信号中的噪声,提高信号的清晰度,改善信号的性能。

因此,滤波算法在现代信号处理领域的应用也越来越广泛,并且取得了很好的效果。

十大滤波算法

十大滤波算法

十大滤波算法滤波算法是信号处理中一种重要的算法,它可以有效地去除信号中的噪声,提高信号的质量。

在现在的技术发展中,滤波算法的应用越来越广泛,它可以用于多媒体信号处理、数据通信、图像处理等领域。

目前,最常用的滤波算法有十种。

首先,最基本的滤波算法就是低通滤波(Low Pass Filter,LPF),它的主要作用是抑制高频信号,使低频信号得以保留。

低通滤波是最常用的滤波算法之一,用于去除信号中的高频噪声。

其次,高通滤波(High Pass Filter,HPF)是低通滤波的反向过程,它的主要作用是抑制低频信号,使高频信号得以保留。

高通滤波也是常用的滤波算法之一,用于去除信号中的低频噪声。

再次,带通滤波(Band Pass Filter,BPF)是低通滤波和高通滤波的结合,它的主要作用是筛选出特定的频率段,使特定频率段的信号得以保留。

带通滤波可以用于信号提取,电路增强或其他应用。

第四,带阻滤波(Band Stop Filter,BSF)是带通滤波的反向过程,它的主要作用是抑制特定的频率段,使特定频率段的信号得以抑制。

它可以用于信号抑制,抑制特定频率段的噪声。

第五,振荡器滤波(Oscillator Filter,OF)是一种由振荡器组成的滤波算法,它的主要作用是产生稳定的低频信号,用于抑制高频噪声。

振荡器滤波器是在电路中比较常用的滤波算法,它用于去除信号中的高频噪声。

第六,改正型滤波(Adaptive Filter,AF)是一种根据输入信号的变化而调整滤波系数的滤波算法,它的主要作用是根据实时输入信号的变化而调整滤波系数,实现鲁棒性滤波。

改正型滤波是一种比较高级的滤波算法,它可以有效地抑制噪声,提高信号的质量。

第七,采样滤波(Sampling Filter,SF)是一种用于数字信号处理的滤波算法,它的主要作用是抑制采样频率之外的频率,使采样频率内的信号得以保留。

采样滤波是在数字信号处理中常用的滤波算法,它可以有效地抑制采样频率外的噪声,提高信号的质量。

十种滤波方法

十种滤波方法

10种软件滤波方法在工业现场对数据采集时,需要考虑数据采集的实时性和安全性,有时需要对采集的数据进行软处理.下面就简单介绍几种数据采集滤波的方法,希望对大家有用.1、限幅滤波法(程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差A,则本次值无效,放弃本次值,用上次值代替本次值B、优点:能有效克服因偶然因素引起的脉冲干扰C、缺点无法抑制那种周期性的干扰平滑度差2、中位值滤波法A、方法:连续采样N次(N取奇数),把N次采样值按大小排列,取中间值为本次有效值.B、优点:能有效克服因偶然因素引起的波动干扰,对温度、液位的变化缓慢的被测参数有良好的滤波效果.C、缺点:对流量、速度等快速变化的参数不宜3、算术平均滤波法A、方法:连续取N个采样值进行算术平均运算,N值较大时:信号平滑度较高,但灵敏度较低;N值较小时:信号平滑度较低,但灵敏度较高;N值的选取:一般流量,N=12;压力:N=4B、优点:适用于对一般具有随机干扰的信号进行滤波,这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动C、缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用, 比较浪费RAM4、递推平均滤波法(又称滑动平均滤波法)A、方法:把连续取N个采样值看成一个队列,队列的长度固定为N,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)把队列中的N个数据进行算术平均运算,就可获得新的滤波结果N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4B、优点:对周期性干扰有良好的抑制作用,平滑度高,适用于高频振荡的系统C、缺点:灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差,不易消除由于脉冲干扰所引起的采样值偏差,不适用于脉冲干扰比较严重的场合,比较浪费RAM5、中位值平均滤波法(又称防脉冲干扰平均滤波法)A、方法:相当于“中位值滤波法”+“算术平均滤波法”连续采样N个数据,去掉一个最大值和一个最小值, 然后计算N-2个数据的算术平均值N值的选取:3~14B、优点:融合了两种滤波法的优点,对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差.C、缺点:测量速度较慢,和算术平均滤波法一样,比较浪费RAM.6、限幅平均滤波法A、方法:相当于“限幅滤波法”+“递推平均滤波法”,每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理B、优点:融合了两种滤波法的优点,对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:比较浪费RAM7、一阶滞后滤波法A、方法:取a=0~1,本次滤波结果=(1-a)*本次采样值+a*上次滤波结果B、优点:对周期性干扰具有良好的抑制作用,适用于波动频率较高的场合C、缺点:相位滞后,灵敏度低,滞后程度取决于a值大小,不能消除滤波频率高于采样频率的1/2的干扰信号8、加权递推平均滤波法A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权.通常是,越接近现时刻的数据,权取得越大。

adc滤波的10种经典算法

adc滤波的10种经典算法

adc滤波的10种经典算法ADC(模数转换器)滤波算法是将采样得到的模拟信号进行数字化处理时常用的方法。

滤波的目的是去除噪声和不必要的频率成分,以提高信号质量。

下面列举了10种经典的ADC滤波算法:1. 均值滤波器:将一组采样值取平均值,用于平滑信号,减小噪声的影响。

该算法简单且易于实现,但对于快速变化的信号可能会引入较大的误差。

2. 中值滤波器:将一组采样值排序,取中间值作为输出值。

中值滤波器能够有效地去除脉冲噪声,对于非线性噪声具有良好的去除效果。

3. 限幅滤波器:将采样值限制在一定范围内,超出范围的值替换为最大或最小值。

该滤波器适用于信号中存在脉冲噪声的情况,能够有效去除异常值。

4. 低通滤波器:只允许低频信号通过,抑制高频信号。

常用的低通滤波器包括巴特沃斯滤波器、布脱沃斯滤波器等。

低通滤波器可应用于去除高频噪声,平滑信号。

5. 高通滤波器:只允许高频信号通过,抑制低频信号。

高通滤波器可用于去除低频噪声,突出高频信号。

6. 带通滤波器:只允许一定频率范围内的信号通过,抑制其他频率的信号。

带通滤波器可用于突出某个频段的信号。

7. 自适应滤波器:根据输入信号的特点自动调整滤波参数,适应不同的信号环境。

自适应滤波器能够实时调整滤波效果,适应信号的变化。

8. 卡尔曼滤波器:利用系统的状态方程和观测方程,通过最小化预测误差和观测误差的加权和,实现对信号的滤波。

卡尔曼滤波器适用于线性系统,能够对系统状态进行较准确的估计。

9. 无限脉冲响应(IIR)滤波器:在滤波过程中利用反馈,具有较窄的通带和较宽的阻带。

IIR滤波器具有较好的频率响应特性,但容易引入稳定性问题。

10. 有限脉冲响应(FIR)滤波器:滤波过程中不利用反馈,仅利用输入信号和滤波器的系数进行计算。

FIR滤波器具有较好的稳定性和线性相位特性,适用于需要精确频率响应的应用。

这些经典的ADC滤波算法在不同的应用场景中有着各自的优势和适用性。

在实际应用中,需要根据信号的特点和要求选择合适的滤波算法,以达到最佳的滤波效果。

10种常用滤波方法

10种常用滤波方法

10种常用滤波方法
滤波是信号处理领域中常用的技术,用于去除噪声、增强信号的一些特征或改变信号的频谱分布。

在实际应用中,经常使用以下10种常用滤波方法:
1.均值滤波:将像素点周围邻域像素的平均值作为该像素点的新值,适用于去除高斯噪声和椒盐噪声。

2.中值滤波:将像素点周围邻域像素的中值作为该像素点的新值,适用于去除椒盐噪声和激动噪声。

3.高斯滤波:使用高斯核函数对图像进行滤波,通过调整高斯窗口的大小和标准差来控制滤波效果。

适用于去除高斯噪声。

4.双边滤波:通过考虑像素的空间距离和像素值的相似性,对图像进行滤波。

适用于平滑图像的同时保留边缘信息。

5. 锐化滤波:通过滤波操作突出图像中的边缘和细节信息,常用的方法有拉普拉斯滤波和Sobel滤波。

6.中可变值滤波:与中值滤波相似,但适用于非线性信号和背景噪声的去除。

7.分位值滤波:通过对像素值进行分位数计算来对图像进行滤波,可以去除图像中的异常像素。

8.快速傅里叶变换滤波:通过对信号进行傅里叶变换,滤除特定频率的成分,常用于频谱分析和滤波。

9.小波变换滤波:利用小波变换的多尺度分析特性,对信号进行滤波处理,适用于图像去噪和图像压缩。

10.自适应滤波:通过根据信号的局部特征自动调整滤波参数,适用于信号中存在时间和空间变化的情况。

以上是常见的10种滤波方法,每种方法都有不同的适用场景和优缺点。

在实际应用中,选择合适的滤波方法需要根据具体的信号特征和处理需求来确定。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

unsigned char i;
unsigned char value;
int sum=0;
value_buf[i++] = get_ad();
//采集到的数据放入最高位
for(i=0;i<N;i++)
{
value_buf[i]=value_buf[i+1]; //所有数据左移,低位扔掉
sum += value_buf[i];
有一个平均值,信号在某一数值范围附近上下波动。 缺点:对于测量速度较慢或要求数据计算较快的实时控制不适用。 **********************************************************/ #define N 12 char filter() {
unsigned int sum = 0; unsigned char i; for (i=0;i<N;i++) {
}
value = sum/N;
return(value);
}
5、中位值平均滤波法(又称防脉冲干扰平均滤波法)
/********************************************
说明:采一组队列去掉最大值和最小值
优点:融合了两种滤波的优点。对于偶然出现的脉冲性干扰,可消
除有其引起的采样值偏差。对周期干扰有良好的抑制作用,
if(!(Dr1_flag^Dr0_flag))
//前后数据变
化方向一致
{
F_count++;
if(Abs>=Thre_value)
{
F_count++;
F_count++;
}
if(F_count>=12)
F_count=12;
coeff=20*F_count;
}
else
//去抖动
coeff=5;
unsigned char value_buf[N]; unsigned char i,j,k,temp; for(i=0;i<N;i++) {
value_buf[i] = get_ad(); delay(); } for (j=0;j<N-1;j++) { for (k=0;k<N-j;k++) { if(value_buf[k]>value_buf[k+1]) {
temp = value_buf[k]; value_buf[k] = value_buf[k+1]; value_buf[k+1] = temp; } } } return value_buf[(N-1)/2];
}
3、算术平均滤波法 /********************************************************* 说明:连续取N个采样值进行算术平均运算 优点:试用于对一般具有随机干扰的信号进行滤波。这种信号的特点是
3、常量说明 A:两次采样的最大误差值,该值需要使用者根据实际情况设置
*入口:Value,上一次有效的采样值,在主程序里赋值 *出口:ReturnValue,返回值,本次滤波结果 ****************************************************/ #define A 10 unsigned char Value unsigned char AmplitudeLimiterFilter() {
1])/256;
F_count=0;
//滤波计数器
清零
Dr0_flag=Dr1_flag;
}
}
9、加权递推平均滤波法
/************************************************************
coe:数组为加权系数表,存在程序存储区。
sum_coe:加权系数和
************************************************************/
data[i]=data[i+1]; sum+=data[i]; } value=sum/N; return(value); }
8、一阶滞后滤波法 /**************************************************** *函数名称:filter()-一阶滞后滤波法 *说明:
对周期性干扰有良好的抑制作用,平滑度高;试用于高频振荡 的系统 缺点:测量速度慢 *************************************************/ char filter(char new_data,char queue[],char n) { char max,min; char sum; char i; queue[0]=new_data; max=queue[0]; min=queue[0]; sum=queue[0]; for(i=n-1;i>0;i--) { if(queue[i]>max) max=queue[i]; else if (queue[i]<min) min=queue[i]; sum=sum+queue[i]; queue[i]=queue[i-1]; }
} } } for(i=1;i<N-1;i++) sum += value_buf[i]; value = sum/(N-2); return(value); } 6、递推中位值滤波法 /************************************************ 优点:对于偶然出现的脉冲性干扰,可消除由其引起的采样值偏差。
3、常量说明 N:数组长度
*入口: *出口:value_buf[(N-1)/2],返回值,本次滤波结果 *****************************************************/ #define N 11 unsigned char MiddlevalueFilter() {
平滑度高,适于高频振荡的系统。
缺点:测量速度慢
*********************************************/
#define N 12
uchar filter()
{
unsigned char i,j,k,l;
unsigned char temp,sum=0,value;
unsigned char value_buf[N],;
unsigned char NewValue; unsigned char ReturnValue; NewValue=GatAD(); if(((NewValue-Value)>A))||((Value-NewValue)>A))) ReturnValue=Value; else ReturnValue=NewValue; return(ReturnValue); } 2、中位值滤波法 /**************************************************** *函数名称:MiddlevalueFilter()-中位值滤波法 *优点:能有效克服因偶然因素引起的波动干扰;对温度、液
sum + = get_ad(); delay(); } return(char)(sum/N); } 4、递推平均滤波法(又称滑动平均滤波法) /*************************************************** 说明:把连续N个采样值看成一个队列,队列长度固定为N。
i=n-2; sum=sum-max-min+i/2; //说明:+i/2的目的是为了四舍五入 sum=sum/i; return(sum); } 7、限幅平均滤波法 /************************************************ 优点:对于偶然出现的脉冲性干扰,可消除有其引起的采样值偏差。 *************************************************/ #define A 10 #define N 12 unsigned char data[]; unsigned char filter(data[]) { unsigned char i; unsigned char value,sum; data[N]=GetAD(); if(((data[N]-data[N-1])>A||((data[N-1]-data[N])>A)) data[N]=data[N-1]; //else data[N]=NewValue; for(i=0;i<N;i++) {
每次采样到一个新数据放入队尾,并扔掉队首的一 次数据。把队列中的N各数据进行平均运算,既获得 新的滤波结果。 优点:对周期性干扰有良好的抑制作用,平滑度高;试用于高频振荡的 系统 缺点:灵敏度低;对偶然出现的脉冲性干扰的抑制作用较差,不适于脉 冲干 扰较严重的场合 ****************************************************/ #define N 12 unsigned char value_buf[N]; unsigned char filter() {
for(i=0;i<N;i++)
{
value_buf[i] = get_ad();
delay();
}
//采样值从小到大排列(冒泡法)
for(j=0;j<N-1;j++)
{
for(i=0;i<N-j;i++)
相关文档
最新文档