十大滤波算法精修订

合集下载

10种经典的软件滤波办法

10种经典的软件滤波办法

10种经典的软件滤波办法1、限幅滤波法(又称程序差异滤波法)A、办法:依据履历差异,断定两次采样容许的最大过失值(设为A)每次查看到新值时差异:假定本次值与前次值之差lt;=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、缺陷:丈量速度较慢,和算术均匀滤波法相同比照糟蹋RAM6、限幅均匀滤波法A、办法:恰当于限幅滤波法+递推均匀滤波法每次采样到的新数据抢先行限幅处理,再送入行列进行递推均匀滤波处理B、长处:交融了两种滤波法的长处关于偶尔呈现的脉冲性搅扰,可消除由于脉冲搅扰所构成的使的采样值过失C、缺陷:比照糟蹋RAM7、一阶滞后滤波法A、办法:取a=0~1本次滤波作用=(1-a)*本次采样值+a*前次滤波作用B、长处:对周期性搅扰具有杰出的按捺作用适用于不坚决频率较高的场合C、缺陷:相位滞后,活络度低滞后程度取决于a值巨细。

(整理)11种滤波方法+范例代码.

(整理)11种滤波方法+范例代码.

软件滤波算法(转载)这几天做一个流量检测的东西,其中用到了对数据的处理部分,试了很多种方法,从网上找到这些个滤波算法,贴出来记下需要注意的是如果用到求平均值的话,注意总和变量是否有溢出,程序没必要照搬,主要学习这些方法,相信做东西的时候都能用得上1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为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、缺点:测量速度较慢,和算术平均滤波法一样比较浪费RAM6、限幅平均滤波法A、方法:相当于“限幅滤波法”+“递推平均滤波法”每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:比较浪费RAM7、一阶滞后滤波法A、方法:取a=0~1本次滤波结果=(1-a)*本次采样值+a*上次滤波结果B、优点:对周期性干扰具有良好的抑制作用适用于波动频率较高的场合C、缺点:相位滞后,灵敏度低滞后程度取决于a值大小不能消除滤波频率高于采样频率的1/2的干扰信号8、加权递推平均滤波法A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权通常是,越接近现时刻的数据,权取得越大。

十大滤波算法

十大滤波算法

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

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

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

这里有十种常用的滤波算法,可以帮助你更好地理解滤波算法,它们分别是: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):它是一种高效的抑制噪声的滤波算法,它将图像中每个像素值替换为其附近像素点均值加上权重噪声值的加权平均值。

10种简单的数字滤波算法

10种简单的数字滤波算法

10种简单的数字滤波算法(C语言源程序) 假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();1、限副滤波/* A值可根据实际情况调整value为有效值,new_value为当前采样值滤波程序返回有效的实际值*/#define A 10char value;char filter(){char new_value;new_value = get_ad();if ( ( new_value - value > A ) || ( value - new_value > A )return value;return new_value;}2、中位值滤波法/* N值可根据实际情况调整排序采用冒泡法*/#define N 11char filter(){char value_buf[N];char count,i,j,temp;for ( count=0;count<N;count++){value_buf[count] = get_ad();delay();}for (j=0;j<N-1;j++){for (i=0;i<N-j;i++){if ( value_buf[i]>value_buf[i+1] ){temp = value_buf[i];value_buf[i] = value_buf[i+1];value_buf[i+1] = temp;}}}return value_buf[(N-1)/2];}3、算术平均滤波法/**/#define N 12char filter(){int sum = 0;for ( count=0;count<N;count++){sum + = get_ad();delay();}return (char)(sum/N);}4、递推平均滤波法(又称滑动平均滤波法)/**/#define N 12char value_buf[N];char i=0;char filter(){char count;int sum=0;value_buf[i++] = get_ad();if ( i == N ) i = 0;for ( count=0;count<N,count++)sum = value_buf[count];return (char)(sum/N);}5、中位值平均滤波法(又称防脉冲干扰平均滤波法)/**/#define N 12char filter(){char count,i,j;char value_buf[N];int sum=0;for (count=0;count<N;count++){value_buf[count] = get_ad();delay();}for (j=0;j<N-1;j++){for (i=0;i<N-j;i++){if ( value_buf[i]>value_buf[i+1] ){temp = value_buf[i];value_buf[i] = value_buf[i+1];value_buf[i+1] = temp;}}}for(count=1;count<N-1;count++)sum += value[count];return (char)(sum/(N-2));}6、限幅平均滤波法/**/略参考子程序1、37、一阶滞后滤波法/* 为加快程序处理速度假定基数为100,a=0~100 */#define a 50char value;char filter(){char new_value;new_value = get_ad();return (100-a)*value + a*new_value;}8、加权递推平均滤波法/* coe数组为加权系数表,存在程序存储区。

十种经典的软件滤波方法+程序

十种经典的软件滤波方法+程序

十种经典的软件滤波方法+程序十种经典的软件滤波方法+程序1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B、优点:能有效克服因偶然因素引起的脉冲干扰C、缺点无法抑制周期性的干扰平滑度差/* A值可根据实际情况调整, value为有效值,new_value为当前采样值,滤波程序返回有效的实际值*/#define A 10char value;char filter(){char new_value;new_value = get_ad();if ( ( new_value - value > A ) || ( value - new_value > A )return value;return new_value;}2、中位值滤波法A、方法:连续采样N次(N取奇数)把N次采样值按大小排列取中间值为本次有效值B、优点:能有效克服因偶然因素引起的波动干扰对温度、液位的变化缓慢的被测参数有良好的滤波效果C、缺点:对流量、速度等快速变化的参数不宜#define N 11 //N值可根据实际情况调整char filter(){char value_buf[N];char count,i,j,temp;for (count=0;count<N;count++){value_buf[count]=get_ad(); //获取采样值delay();}for (j=0;j<N-1;j++) //采样值由小到大排列,排序采用冒泡法{for (i=0;i<N-j;i++){if(value_buf[i]>value_buf[i+1]){temp=value_buf[i];value_buf[i]=value_buf[i+1];value_buf[i+1]=temp;}}}return value_buf[(N-1)/2]; //取中间值}3、算术平均滤波法A、方法:连续取N个采样值进行算术平均运算N值较大时:信号平滑度较高,但灵敏度较低N值较小时:信号平滑度较低,但灵敏度较高N值的选取:一般流量,N=12;压力:N=4B、优点:适用于对一般具有随机干扰的信号进行滤波这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动C、缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用比较浪费RAM#define N 12char filter(){int sum = 0;for ( count=0;count<N;count++){sum + = get_ad();delay();}return (char)(sum/N);}4、递推平均滤波法(又称滑动平均滤波法)A、方法:把连续取N个采样值看成一个队列队列的长度固定为N每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)把队列中的N个数据进行算术平均运算,就可获得新的滤波结果N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4B、优点:对周期性干扰有良好的抑制作用,平滑度高适用于高频振荡的系统C、缺点:灵敏度低对偶然出现的脉冲性干扰的抑制作用较差不易消除由于脉冲干扰所引起的采样值偏差不适用于脉冲干扰比较严重的场合比较浪费RAM#define N 12char value_buf[N];char i=0;char filter(){char count;int sum=0;value_buf[i++] = get_ad();if ( i == N ) i = 0;for ( count=0;count<N,count++)sum += value_buf[count];return (char)(sum/N);}5、中位值平均滤波法(又称防脉冲干扰平均滤波法)A、方法:相当于“中位值滤波法”+“算术平均滤波法”连续采样N个数据,去掉一个最大值和一个最小值然后计算N-2个数据的算术平均值N值的选取:3~14B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:测量速度较慢,和算术平均滤波法一样比较浪费RAM#define N 12char filter(){char count,i,j;char value_buf[N];int sum=0;for (count=0;count<N;count++){value_buf[count] = get_ad();delay();}for (j=0;j<N-1;j++){for (i=0;i<N-j;i++){if ( value_buf[i]>value_buf[i+1] ){temp = value_buf[i];value_buf[i] = value_buf[i+1];value_buf[i+1] = temp;}}}for(count=1;count<N-1;count++)sum += value[count];return (char)(sum/(N-2));}6、限幅平均滤波法A、方法:相当于“限幅滤波法”+“递推平均滤波法”每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:比较浪费RAM参考子程序1、37、一阶滞后滤波法A、方法:取a=0~1本次滤波结果=(1-a)*本次采样值+a*上次滤波结果B、优点:对周期性干扰具有良好的抑制作用适用于波动频率较高的场合C、缺点:相位滞后,灵敏度低滞后程度取决于a值大小不能消除滤波频率高于采样频率的1/2的干扰信号/* 为加快程序处理速度假定基数为100,a=0~100 */#define a 50char value;char filter(){char new_value;new_value = get_ad();return (100-a)*value + a*new_value;}8、加权递推平均滤波法A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权通常是,越接近现时刻的数据,权取得越大。

[整理]11种滤波方法+范例代码

[整理]11种滤波方法+范例代码

软件滤波算法(转载)这几天做一个流量检测的东西,其中用到了对数据的处理部分,试了很多种方法,从网上找到这些个滤波算法,贴出来记下需要注意的是如果用到求平均值的话,注意总和变量是否有溢出,程序没必要照搬,主要学习这些方法,相信做东西的时候都能用得上1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为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、缺点:测量速度较慢,和算术平均滤波法一样比较浪费RAM6、限幅平均滤波法A、方法:相当于“限幅滤波法”+“递推平均滤波法”每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:比较浪费RAM7、一阶滞后滤波法A、方法:取a=0~1本次滤波结果=(1-a)*本次采样值+a*上次滤波结果B、优点:对周期性干扰具有良好的抑制作用适用于波动频率较高的场合C、缺点:相位滞后,灵敏度低滞后程度取决于a值大小不能消除滤波频率高于采样频率的1/2的干扰信号8、加权递推平均滤波法A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权通常是,越接近现时刻的数据,权取得越大。

十大滤波算法

十大滤波算法
11.E、整理:shenhaiyu 2013-11-01
12.*/
13.
14.16.voidsetup(){
17.(9600);//初始化串口通信
18.randomSeed(analogRead(0));//产生随机种子
19.}
20.
21.voidloop(){
21.randomSeed(analogRead(0));//产生随机种子
22.Value =300;
23.}
24.
25.voidloop(){
26.Filter_Value = Filter();//获得滤波器输出值
27.Value = Filter_Value;//最近一次有效采样的值,该变量为全局变量
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.}
3、算术平均滤波法
ARDUINO代码
1./*
2.A、名称:算术平均滤波法
3.B、方法:
4.连续取N个采样值进行算术平均运算:
5.N值较大时:信号平滑度较高,但灵敏度较低;
6.N值较小时:信号平滑度较低,但灵敏度较高;
7.N值的选取:一般流量,N=12;压力:N=4。
8.C、优点:
9.适用于对一般具有随机干扰的信号进行滤波;
10.这种信号的特点是有一个平均值,信号在某一数值范围附近上下波动。
28.(Filter_Value);//串口输出
29.delay(50);

十大滤波算法程序全套整合(精心整编版)

十大滤波算法程序全套整合(精心整编版)

十大滤波算法程序大全(精心整理版)1、限幅滤波法*函数名称: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();if(((NewValue-Value)>A))||((Value-NewValue)>A))) ReturnValue=Value;else ReturnValue=NewValue;return(ReturnValue);}2、中位值滤波法/*****************************************************函数名称:MiddlevalueFilter()-中位值滤波法*优点:能有效克服因偶然因素引起的波动干扰;对温度、液位等变化缓慢的被测参数有良好的滤波效果*缺点:对流量,速度等快速变化的参数不宜*说明:1、调用函数GetAD(),该函数用来取得当前值Delay(),基本延时函数2、变量说明ArrDataBuffer[N]:用来存放一次性采集的N组数据Temp:完成冒泡法试用的临时寄存器i,j,k:循环试用的参数值3、常量说明N:数组长度*入口:*出口:value_buf[(N-1)/2],返回值,本次滤波结果*****************************************************/ #define N 11unsigned char MiddlevalueFilter(){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个采样值进行算术平均运算优点:试用于对一般具有随机干扰的信号进行滤波。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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。
19.}
20.?
21.voidloop(){
22.Filter_Value = Filter();// 获得滤波器输出值
23.Serial.println(Filter_Value);// 串口输出
24.delay(50);
25.}
26.?
27.// 用于随机产生一个300左右的当前值
28.intGet_AD(){
38.#define FILTER_N12
39.intfilter_buf[FILTER_N +1];
40.intFilter(){
41.inti;
42.intfilter_sum =0;
43.filter_buf[FILTER_N]= Get_AD();
44.for(i =0; i < FILTER_N; i++){
9.C、优点:
10.融合了“中位值滤波法”+“算术平均滤波法”两种滤波法的优点。
11.对于偶然出现的脉冲性干扰,可消除由其所引起的采样值偏差。
12.对周期干扰有良好的抑制作用。
13.平滑度高,适于高频振荡的系统。
14.D、缺点:
15.计算速度较慢,和算术平均滤波法一样。
16.比较浪费RAM。
17.E、整理:shenhaiyu 2013-11-01
70.int filter_max, filter_min;
71.int filter_buf[FILTER_N];
72.for(i = 0; i < FILTER_N; i++) {
21.randomSeed(analogRead(0));// 产生随机种子
22.Value =300;
23.}
24.?
25.voidloop(){
26.Filter_Value = Filter();// 获得滤波器输出值
27.Value = Filter_Value;// 最近一次有效采样的值,该变量为全局变量
3、算术平均滤波法
ARDUINO 代码
1./*
2.A、名称:算术平均滤波法
3.B、方法:
4.连续取N个采样值进行算术平均运算:
5.N值较大时:信号平滑度较高,但灵敏度较低;
6.N值较小时:信号平滑度较低,但灵敏度较高;
7.N值的选取:一般流量,N=12;压力:N=4。
8.C、优点:
9.适用于对一般具有随机干扰的信号进行滤波;
60.returnfilter_sum /(FILTER_N -2);
61.}
62.?
63.?
64.//中位值平均滤波法(又称防脉冲干扰平均滤波法)(算法2)
65./*
66.#define FILTER_N 100
67.int Filter() {
68.int i;
69.int filter_sum = 0;
18.*/
19.?
20.intFilter_Value;
21.?
22.voidsetup(){
23.Serial.begin(9600);// 初始化串口通信
24.randomSeed(analogRead(0));// 产生随机种子
25.}
26.?
27.voidloop(){
28.Filter_Value = Filter();// 获得滤波器输出值
8.C、优点:
9.对周期性干扰有良好的抑制作用,平滑度高;
10.适用于高频振荡的系统。
11.D、缺点:
12.灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差;
13.不易消除由于脉冲干扰所引起的采样值偏差;
14.不适用于脉冲干扰比较严重的场合;
15.比较浪费RAM。
16.E、整理:shenhaiyu 2013-11-01
39.#define FILTER_N100
40.intFilter(){
41.inti, j;
42.intfilter_temp, filter_sum =0;
43.intfilter_buf[FILTER_N];
44.for(i =0; i < FILTER_N; i++){
45.filter_buf[i]= Get_AD();
9.D、缺点:
10.对流量、速度等快速变化的参数不宜。
11.E、整理:shenhaiyu 2013-11-01
12.*/
13.?
14.intFilter_Value;
15.?
16.voidsetup(){
17.Serial.begin(9600);// 初始化串口通信
18.randomSeed(analogRead(0));// 产生随机种子
20.Serial.begin(9600);// 初始化串口通信
21.randomSeed(analogRead(0));// 产生随机种子
22.}
23.?
24.voidloop(){
25.Filter_Value = Filter();// 获得滤波器输出值
26.Serial.println(Filter_Value);// 串口输出
28.Serial.println(Filter_Value);// 串口输出
29.delay(50);
30.}
31.?
32.// 用于随机产生一个300左右的当前值
33.intGet_AD(){
34.returnrandom(295,305);
35.}
36.?
37.// 递推平均滤波法(又称滑动平均滤波法)
53.filter_buf[i]= filter_buf[i +1];
54.filter_buf[i +1]= filter_temp;
55.}
56.}
57.}
58.// 去除最大最小极值后求平均
59.for(i =1; i < FILTER_N -1; i++)filter_sum += filter_buf[i];
10.这种信号的特点是有一个平均值,信号在某一数值范围附近上下波动。
11.D、缺点:
12.对于测量速度较慢或要求数据计算速度较快的实时控制不适用;
13.比较浪费RAM。
14.E、整理:shenhaiyu 2013-11-01
15.*/
16.?
17.intFilter_Value;
18.?
19.voidsetup(){
29.returnrandom(295,305);
30.}
31.?
32.// 中位值滤波法
33.#define FILTER_N101
34.intFilterபைடு நூலகம்){
35.intfilter_buf[FILTER_N];
36.inti, j;
37.intfilter_temp;
38.for(i =0; i < FILTER_N; i++){
45.filter_buf[i]= filter_buf[i +1];// 所有数据左移,低位仍掉
46.filter_sum += filter_buf[i];
47.}
48.return(int)(filter_sum / FILTER_N);
49.}
5、中位值平均滤波法(又称防脉冲干扰平均滤波法)
ARDUINO 代码
1./*
2.A、名称:中位值平均滤波法(又称防脉冲干扰平均滤波法)
3.B、方法:
4.采一组队列去掉最大值和最小值后取平均值,
5.相当于“中位值滤波法”+“算术平均滤波法”。
6.连续采样N个数据,去掉一个最大值和一个最小值,
7.然后计算N-2个数据的算术平均值。
8.N值的选取:3-14。
38.#define FILTER_A1
相关文档
最新文档