十大滤波算法
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);
30.}
31.
32.//用于随机产生一个300左右的当前值
33.intGet_AD(){
34.returnrandom(295,305);
35.}
36.
37.//限幅滤波法(又称程序判断滤波法)
38.#define FILTER_A1
33.}
34.
35.//算术平均滤波法
36.#define FILTER_N12
37.intFilter(){
38.inti;
39.intfilter_sum =0;
40.for(i =0; i < FILTER_N; i++){
41.filter_sum += Get_AD();
42.delay(1);
22.}
23.
24.voidloop(){
25.Filter_Value = Filter();//获得滤波器输出值
26.(Filter_Value);//串口输出
27.delay(50);
28.}
29.
30.//用于随机产生一个300左右的当前值
31.intGet_AD(){
32.returnrandom(295,305);
43.}
44.return(int)(filter_sum / FILTER_N);
45.}
4、递推平均滤波法(又称滑动平均滤波法)
ARDUINO代码
39.intFilter(){
40.intNewValue;
41.NewValue = Get_AD();
42.if(((NewValue - Value)> FILTER_A)||((Value - NewValue)> FILTER_A))
43.returnValue;
44.else
45.returnNewValue;
22.Filter_Value = Filter();//获得滤波器输出值
23.(Filter_Value);//串口输出
24.delay(50);
25.}
26.
27.//用于随机产生一个300左右的当前值
28.intGet_AD(){
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++){
39.filter_buf[i]= Get_AD();
40.delay(1);
41.}
42.//采样值从小到大排列(冒泡法)
43.for(j =0; j < FILTER_N -1; j++){
44.for(i =0; i < FILTER_N -1- j; i++){
45.if(filter_buf[i]> filter_buf[i +1]){
46.filter_temp = filter_buf[i];
46.}
2、中位值滤波法
ARDUINO代码
1./*
2.A、名称:中位值滤波法
3.B、方法:
4.连续采样N次(N取奇数),把N次采样值按大小排列,
5.取中间值为本次有效值。
6.C、优点:
7.能有效克服因偶然因素引起的波动干扰;
8.对温度、液位的变化缓慢的被测参数有良好的滤波效果。
9.D、缺点:
10.对流量、速度等快速变化的参数不宜。
11.D、缺点:
12.对于测量速度较慢或要求数据计算速度较快的实时控制不适用;
13.比较浪费RAM。
14.E、整理:shenhaiyu 2013-11-01
15.*/
16.
17.intFilter_Value;
18.
19.voidsetup(){
20.(9600);//初始化串口通信
21.randomSeed(analogRead(0));//产生随机种子
8.C、优点:
9.能有效克服因偶然因素引起的脉冲干扰。
10.D、缺点:
11.无法抑制那种周期性的干扰。
12.平滑度差。
13.E、整理:shenhaiyu 2013-11-01
14.*/
15.
16.intFilter_Value;
17.intValue;
18.
19.voidsetup(){
20.(9600);//初始化串口通信
十大滤波算法
1、限幅滤波法(又称程序判断滤波法)
ARDUINO代码
1./*
2.A、名称:限幅滤波法(又称程序判断滤波法)
3.B、方法:
4.根据经验判断,确定两次采样允许的最大偏差值(设为A),
5.每次检测到新值时判断:
6.如果本次值与上次值之差<=A,则本次值有效,
7.如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。