![7f23448019315274e2a194940a962228.png](https://i-blog.csdnimg.cn/blog_migrate/ef24cb4feba15eccddf986834bfe0577.png)
摘要
数据采集,又称数据获取,是利用一种装置,从系统外部采集数据并输入到系统内部的一个接口。数据采集技术广泛引用在各个领域。比如摄像头,麦克风,都是数据采集工具。被采集数据是已被转换为电讯号的各种物理量,如温度、水位、风速、压力等,可以是模拟量,也可以是数字量。在互联网行业快速发展的今天,数据采集已经被广泛应用于互联网及分布式领域,数据采集领域已经发生了重要的变化。
而在数据采集中存在着各种噪声。滤除噪声的方法有很多种,既有数字滤波器,也有模拟滤波器。这里我们采用了基于单片机和C语言来设计并开发数字滤波系统。 我们针对于单片机数据采集系统中经常出现的随机干扰,通过手动输入来模拟数据采集过程,验证了几种使用较为普遍的克服随机干扰的单片机数字滤波算法,并给出了相应的C程序,尤其对中位值滤波和中位值平均滤波算法程序进行了改进。同时也对这几种滤波算法进行了比较,并指出了每一种算法的具体适用范围和注意事项。另外我们使用了 proteus进行仿真验证这几种滤波方法。另外我们还使用了AD和DA来采集及输出数据。
![7f23448019315274e2a194940a962228.png](https://i-blog.csdnimg.cn/blog_migrate/ef24cb4feba15eccddf986834bfe0577.png)
1 数字滤波设计原理
这里有很多种数字滤波方法,我们见选用其中几种来进行设计,如中值滤波、算术平均滤波、加权平均滤波等等。所以下面我将详细介绍它们。
1.1 中值滤波
中位值滤波是先对某一参数连续采样N次(一般N取奇数),然后把N次采样值按从小到大排列,取中间值为本次采样值。该滤波方法实际上是一种排序方法,我在此采用的是冒泡法排序。由于在冒泡法排序中,每出现一次前者数据大于后者数据,就要进行二者数据的交换。该算法的样例子程序如下:
1 #define N 11 //N值可根据实际情况调整
3 char filter()
5 {
7 char value_buf[];
9 char count,i,j,k,temp;
11 for(count=0;count13 {
14 value_buf[count]=get_data();
17 delay();
18 }
20 for(i=0;i22 { k=i;
24 for(j=i+1;j26 if(value_buf[j]28 temp=value_buf[k];
30 value_buf[k]=value_buf[i];
32 value_buf[i]=temp;
34 }
36 return value_buf[(N-1)/2];
37 }