码迷,mamicode.com
首页 > 其他好文 > 详细

几种常见的滤波处理

时间:2015-07-10 10:57:41      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

滤波处理,首先提几个问题:为什么要滤波?滤波的方式有那么多有什么作用?分别的应用场合是什么?

下面就开始滤波的说明和代码了!

一:移动平滑滤波:

  该滤波方法为:采用最新的N个数据的平均值。N为恒定值。

  那么问题来了:

    在初始采样平均值该如何处理?X1/N?还是第一次采样将N个数据全填充为X1?然后开始计算?还是在第一遍采样中,X1/1,(X1+X2)/2,(X1+...+X(n-1))/(N-1)的方式?直到最少获取了N个采样结果以后,在利用(Xn+...X(2n-1))/N的方式进行滤波?

  下面就对两种进行简单的分析,当然,有几种不同的处理方式。

第一种处理,使用了如下的全局变量;

1.N个元素数组的全局变量;

2.循环位标记符;

3.初次采样未满足采样数据标记值;

采用的为:

X1/1,(X1+X2)/2,(X1+...+X(n-1))/(N-1)的方式;

代码可以直接测试。

 1 #include <stdio.h>
 2 
 3 /* DEFINE */
 4 #define N (6)
 5 /* Gs */
 6 /* Value */
 7 static int a[N] = {0};
 8 /* Pointer */
 9 static int i = 0;
10 /* Flag for First Cycle */
11 static int flag = 0;
12 
13 int main(void)
14 {
15     int sum = 0;        /* Init Sum Value */
16     int avg = 0;        /* Init Avg Value */
17     int Index = 0;        /* Init Index for Loop */
18     printf("在输入的数字后面紧跟‘;‘号,表示输入结束\n");
19     do{
20         if(0 == flag)
21         {
22             printf("输入%d个数据:",i+1);
23             scanf("%d",&a[i++]);
24             if(N == i)
25             {
26                 flag = 1;
27             }
28         }
29         else
30         {
31             if(N == i)
32             {
33                 i = 0;        
34             }
35             printf("输入%d个数据:",i+1);
36             scanf("%d",&a[i++]);
37         }
38         
39     }while(getchar()!=;);            /* Get ";" break */
40     
41     if(0 == flag)
42     {
43         for(Index=0; Index<i; Index++)
44         {
45             sum += a[Index];
46         }
47         avg = sum/i;
48     }
49     else
50     {
51         for(Index=0; Index<N; Index++)
52         {
53             sum += a[Index];
54         }
55         avg = sum / N;
56     }
57     printf("平均值为%d\n",avg);
58 }

 第二种方式:

采用获取到的第一次的值,将数据获取Buffer全填充。故不用以上这么复杂。

全局变量:

1.Buffer

2.first Vale Flag

以下为代码:

 1 #include <stdio.h>
 2 
 3 /* DEFINE */
 4 #define N (6)
 5 /* Gs */
 6 /* Value */
 7 static int a[N] = {0};
 8 /* Flag for First Value */
 9 static int flag = 0;
10 
11 int main(void)
12 {
13     int sum = 0;        /* Init Sum Value */
14     int avg = 0;        /* Init Avg Value */
15     int Index = 0;        /* Init Index for Loop */
16     int Temp_First = 0;
17     printf("在输入的数字后面紧跟‘;‘号,表示输入结束\n");
18     do{
19         if(0 == flag)
20         {
21             printf("输入数据:");
22             scanf("%d",&a);
23             for(Index = 1; Index < N; Index++)
24             {
25                 a[Index] = a[0];
26             }
27             flag = 1; 
28         }
29         else
30         {
31             for(Index = 0; Index < N - 1; Index++)
32             {
33                 a[Index] = a[Index + 1];
34             }
35             printf("输入数据:");
36             scanf("%d",&a[N-1]);
37         }
38         
39     }while(getchar()!=;);            /* Get ";" break */
40     
41     for(Index=0; Index<N; Index++)
42     {
43         sum += a[Index];
44     }
45     avg = sum / N;
46     printf("平均值为%d\n",avg);
47 }

方法二也可以借用一中的循环标记位“i”,那样的话,就省去了代码31L中的for循环,但会增加一个全局变量来表示当前“挤掉”的值,依个人喜好吧!

几种常见的滤波处理

标签:

原文地址:http://www.cnblogs.com/ply616/p/4634763.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!