十大滤波算法的实现文档格式.docx
《十大滤波算法的实现文档格式.docx》由会员分享,可在线阅读,更多相关《十大滤波算法的实现文档格式.docx(62页珍藏版)》请在冰豆网上搜索。
24.
25.voidloop(){
26.Filter_Value=Filter();
//获得滤波器输出值
27.Value=Filter_Value;
//最近一次有效采样的值,该变量为全局变量
28.Serial.println(Filter_Value);
//串口输出
29.delay(50);
30.}
31.
32.//用于随机产生一个300左右的当前值
33.intGet_AD(){
34.returnrandom(295,305);
35.}
36.
37.//限幅滤波法(又称程序判断滤波法)
38.#defineFILTER_A1
39.intFilter(){
40.intNewValue;
41.NewValue=Get_AD();
42.if(((NewValue-Value)>
FILTER_A)||((Value-NewValue)>
FILTER_A))
43.returnValue;
44.else
45.returnNewValue;
46.}
2.
3.A、名称:
4.
5.B、方法:
6.
7.根据经验判断,确定两次采样允许的最大偏差值(设为A),
8.
9.每次检测到新值时判断:
10.
11.如果本次值与上次值之差<
12.
13.如果本次值与上次值之差>
14.
15.C、优点:
16.
17.能有效克服因偶然因素引起的脉冲干扰。
18.
19.D、缺点:
20.
21.无法抑制那种周期性的干扰。
22.
23.平滑度差。
24.
25.E、整理:
26.
27.*/
28.
29.
30.
31.intFilter_Value;
32.
33.intValue;
34.
35.
36.
37.voidsetup(){
38.
39.Serial.begin(9600);
40.
41.randomSeed(analogRead(0));
42.
43.Value=300;
44.
45.}
46.
47.
48.
49.voidloop(){
50.
51.Filter_Value=Filter();
52.
53.Value=Filter_Value;
54.
55.Serial.println(Filter_Value);
56.
57.delay(50);
58.
59.}
60.
61.
62.
63.//用于随机产生一个300左右的当前值
64.
65.intGet_AD(){
66.
67.returnrandom(295,305);
68.
69.}
70.
71.
72.
73.//限幅滤波法(又称程序判断滤波法)
74.
75.#defineFILTER_A1
76.
77.intFilter(){
78.
79.intNewValue;
80.
81.NewValue=Get_AD();
82.
83.if(((NewValue-Value)>
84.
85.returnValue;
86.
87.else
88.
89.returnNewValue;
90.
91.}
92.
中位值滤波法
4.连续采样N次(N取奇数),把N次采样值按大小排列,
5.取中间值为本次有效值。
6.C、优点:
7.能有效克服因偶然因素引起的波动干扰;
8.对温度、液位的变化缓慢的被测参数有良好的滤波效果。
9.D、缺点:
10.对流量、速度等快速变化的参数不宜。
11.E、整理:
12.*/
13.
14.intFilter_Value;
16.voidsetup(){
17.Serial.begin(9600);
18.randomSeed(analogRead(0));
19.}
20.
21.voidloop(){
22.Filter_Value=Filter();
23.Serial.println(Filter_Value);
24.delay(50);
25.}
26.
27.//用于随机产生一个300左右的当前值
28.intGet_AD(){
29.returnrandom(295,305);
32.//中位值滤波法
33.#defineFILTER_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;
FILTER_N-1-j;
45.if(filter_buf[i]>
filter_buf[i+1]){
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.}
7.连续采样N次(N取奇数),把N次采样值按大小排列,
9.取中间值为本次有效值。
11.C、优点:
13.能有效克服因偶然因素引起的波动干扰;
15.对温度、液位的变化缓慢的被测参数有良好的滤波效果。
17.D、缺点:
19.对流量、速度等快速变化的参数不宜。
21.E、整理:
23.*/
25.
27.intFilter_Value;
31.voidsetup(){
33.Serial.begin(9600);
35.randomSeed(analogRead(0));
37.}
39.
41.voidloop(){
43.Filter_Value=Filter();
45.Serial.println(Filter_Value);
47.delay(50);
49.}
51.
53.//用于随机产生一个300左右的当前值
55.intGet_AD(){
57.returnrandom(295,305);
63.//中位值滤波法
65.#defineFILTER_N101
67.intFilter(){
69.intfilter_buf[FILTER_N];
71.inti,j;
73.intfilter_temp;
75.for(i=0;
77.filter_buf[i]=Get_AD();
79.delay
(1);
81.}
83.//采样值从小到大排列(冒泡法)
85.for(j=0;
87.for(i=0;
89.if(filter_buf[i]>
91.filter_temp=filter_buf[i];
93.filter_buf[i]=filter_buf[i+1];
94.
95.filter_buf[i+1]=filter_temp;
96.
97.}
98.
99.}
100.
101.}
102.
103.returnfilter_buf[(FILTER_N-1)/2];
104.
105.}
106.
算术平均滤波法
4.连续取N个采样值进行算术平均运算:
5.N值较大时:
信号平滑度较高,但灵敏度较低;
6.N值较小时:
信号平滑度较低,但灵敏度较高;
7.N值的选取:
一般流量,N=12;
压力:
N=4。
9.适用于对一般具有随机干扰的信号进行滤波;
10.这种信号的特点是有一个平均值,信号在某一数值范围附近上下波动。
11.D、缺点:
12.对于测量速度较慢或要求数据计算速度较快的实时控制不适用;
13.比较浪费RAM。
14.E、整理:
15.*/
16.
17.intFilter_Value;
22.}
23.
24.voidloop(){
25.Filter_Value=Filter();
26.Serial.println(Filter_Value);
27.delay(50);
28.}
30.//用于随机产生一个300左右的当前值
31.intGet_AD(){
32.returnrandom(295,305);
33.}
34.
35.//算术平均滤波法
36.#defineFILTER_N12
37.intFilter(){
38.inti;
39.intfilter_sum=0;
40.for(i=0;
41.filter_sum+=Get_AD();
42.delay
(1);
43.}
44.return(int)(filter_sum/FILTER_N);
7.连续取N个采样值进行算术平均运算:
9.N值较大时:
11.N值较小时:
13.N值的选取:
17.适用于对一般具有随机干扰的信号进行滤波;
19.这种信号的特点是有一个平均值,信号在某一数值范围附近上下波动。
21.D、缺点:
23.对于测量速度较慢或要求数据计算速度较快的实时控制不适用;
25.比较浪费RAM。
27.E、整理:
29.*/
33.intFilter_Value;
43.}
45.
47.voidloop(){
49.Filter_Value=Filter();
51.Serial.println(Filter_Value);
53.delay(50);
55.}
57.
59.//用于随机产生一个300左右的当前值
61.intGet_AD(){
63.returnrandom(295,305);
65.}
67.
69.//算术平均滤波法
71.#defineFILTER_N12
73.intFilter(){
75.inti;
77.intfilter_sum=0;
79.for(i=0;
81.filter_sum+=Get_AD();
83.delay
(1);
85.}
87.return(int)(filter_sum/FILTER_N);
89.}
递推平均滤波法(又称滑动平均滤波法)
4.把连续取得的N个采样值看成一个队列,队列的长度固定为N,
5.每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则),
6.把队列中的N个数据进行算术平均运算,获得新的滤波结果。
流量,N=12;
压力,N=4;
液面,N=4-12;
温度,N=1-4。
9.对周期性干扰有良好的抑制作用,平滑度高;
10.适用于高频振荡的系统。
12.灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差;
13.不易消除由于脉冲干扰所引起的采样值偏差;
14.不适用于脉冲干扰比较严重的场合;
15.比较浪费RAM。
16.E、整理:
17.*/
19.intFilter_Value;
21.voidsetup(){
22.Serial.begin(9600);
23.randomSeed(analogRead(0));
24.}
26.voidloop(){
27.Filter_Value=Filter();
37.//递推平均滤波法(又称滑动平均滤波法)
38.#defineFILTER_N12
39.intfilter_buf[FILTER_N+1];
40.intFilter(){
41.inti;
42.intfilter_sum=0;
43.filter_buf[FILTER_N]=Get_AD();
45.filter_buf[i]=filter_buf[i+1];
//所有数据左移,低位仍掉
46.filter_sum+=filter_buf[i];
47.}
48.return(int)(filter_sum/FILTER_N);
7.把连续取得的N个采样值看成一个队列,队列的长度固定为N,
9.每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则),
11.把队列中的N个数据进行算术平均运算,获得新的滤波结果。
17.对周期性干扰有良好的抑制作用,平滑度高;
19.适用于高频振荡的系统。
23.灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差;
25.不易消除由于脉冲干扰所引起的采样值偏差;
27.不适用于脉冲干扰比较严重的场合;
29.比较浪费RAM。
31.E、整理:
33.*/
37.intFilter_Value;
41.voidsetup(){
43.Serial.begin(9600);
45.randomSeed(analogRead(0));
47.}
49.
51.voidloop(){
53.Filter_Value=Filter();
73.//递推平均滤波法(又称滑动平均滤波法)
75.#defineFILTER_N12
77.intfilter_buf[FILTER_N+1];
79.intFilter(){
81.inti;
82.