基于MATLAB的数据采集系统的设计

更新时间:2024-01-19 16:58:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

毕 业 设 计

题目:基于MATLAB的数据采系统的设计

姓 名: 学 号:

系 别: 电子工程系 专 业: 电子信息科学与技术 同 组 人: 指 导 教 师:

协助指导教师:

一、主要内容和基本要求

本项目的目的是实现基于小本的计算机应用系统。

1

1、系统结构 系统结构如下图所示

系统结构图

系统的实验电路实现模块化,每一个模块利用本所总线与链接模块相连接。

开始 初始化展开界面 选择 2、系统设计内容

本系统的目的,是提供一个利用Matlab和小本资源实现的实验系统。Matlab的程序必须编译成可执行文件,以便在小本中运行。

硬件电路要求提供音频(10kHz)信号处理电路。具体包括: 1)向PC的输出信号调理电路 输入放大器 抗混叠滤波器 幅度可调输出放大器

2)接收PC信号的输入信号调理电路 缓冲放大器(>40kHz) 驱动电路

3)5V/10mA电源电路,有PC机的USB口为电路模块提供电源。 硬件电路需提供模拟电路和测试电路接口。

执行相应处理 操作流程图

信号接口电路板图

三、系统功能

2

本系统具有如下功能: 1.10kHz以内信号采集 2. 信号采集系统模型分析 3. 可连接相关处理程序

4. 可发送音频范围内的测试信号 5. 信号存储和调用 6. 信号显示

7. 信号处理结果显示与对比分析

二、主要参考资料

[1] (美)Jan Axelson著, 陈逸译.USB应用大全.北京:中国电力出版社,2001 [2] 刘志俭等编著.MATLAB应用程序接口用户指南[M]. 科学出版社,2000 [3] 飞思科技产品研发中心编著.MATLAB 6.5应用接口编程[M]. 电子工业出版社, 2003

[4] 廖济林编著.USB 2.0应用系统开发实例精讲[M].电子工业出版社, 2006 [5]程伟;程文波;李灿平;;基于MATLAB的实时数据采集与分析研究[J];电子测量技术;2008年08期

[6]程国英;基于usb 2.0的声音采集系统的研制[D];东北师范大学;2006年 [7] 健莲科技改编,许永和编著.USB外围设备设计与应用[M].中国电力出版社, 2002

[8] 韩新风. 基于USB接口的信号发生与采集系统的研究[D].华中科技大学 2007

三、进度要求

1、第一周:查询文献和资料,对课题进行调研。 2、第二周:根据调研资料撰写开题报告。 3、第三周:完善开题报告,准备开题答辩。 4、第四周:对外文文献进行翻译。 5、第五周:查找资料,确定总体方案。 6、第六周:设计具体的方案。 7、第七周:程序的初步编写。 8、第八周:程序初步仿真与测试 9、第九周:继续丰富系统功能。

10、第十周:进一步的进行程序仿真和调试,论文结构撰写。 11、第十一周:系统整体调试。

3

12、第十二周:毕设论文撰写,系统调试。 13、第十三周:继续修改论文,系统功能测试。 14、第十四周:毕设论文修改。

15、第十五周:制作ppt并且进行模拟答辩。 16、第十六周:完成所有毕设论文,最后答辩。

指 导 教 师: 专业负责人/系主任:

4

(签字) (签字)

摘要

该设计是一个声音信号采集和分析系统,实现了对语音信号采集和显示,并对其进行了频谱分析。

设计以计算机为核心构成一个数据采集系统,系统的可以分为传感器、声卡和计算机三大模块。在此基础上设计了系统的总体方案,最后通过硬件和软件实现了各个功能模块。系统首先通过传感器采集声音信号,再经过声卡对信号进行模数转换(采集、量化、编码)处理后,存入计算机进行信号的一系列处理。

硬件部分引用了麦克风作为声音信号的传感器,以声卡作为信号的A/D转换模块,计算机用作信号的存储和处理。软件用的是MATLAB并且主要用到的是MATLAB中的数据采集工具箱。

关键词: MATLAB 数据采集工具箱 麦克风 声卡

I

Abstract

The design is a sound signal acquisition and analysis system, it implements speech signal acquisition and display, and it made the spectrum analysis of signals.

Design with computer as the core consists of a data acquisition system, the system can be divided into three sensors, sound card and computer module. Based on this, the overall scheme of the system has been accomplished. Finally, all functional module were implemented through hardware and software. First of all, the system acquire sound signal through the sensors. Then the acquired signal accomplished analog-to-digital conversion through the sound card (sampling, quantization and coding) . Finally, it is stored in the computer and the computer will carry out a series of processing.

The hardware part used the microphone for voice signal sensor, and it took sound card as A/D conversion module, the computer is used to store and process signal. Software used MTALAB and mainly used data acquisition toolbox of MATLAB.

Key Words: MATLAB Data acquisition box The microphone Sound card

II

目录

摘要 ............................................................... I Abstract .......................................................... II 引言 ............................................................... 1 1绪论 .............................................................. 2

1.1课题背景及意义 .............................................. 2 1.2数据采集系统的研究状况 ...................................... 3 1.3课题的研究目的和任务 ........................................ 4 2数据采集系统分析 .................................................. 5

2.1数据采集系统的构成 .......................................... 5 2.2基于MATLAB的数据采集系统原理 ............................... 6 3基于MATLAB和声卡的数据采集器的设计 ............................... 8

3.1方案选取 .................................................... 8 3.2传感器的选择 ............................................... 10 3.3声卡在A/D转换中的应用 ..................................... 11

3.3.1声卡在A/D转换中的原理 ............................... 11 3.3.2声卡的驱动软件 ....................................... 12 3.3.3声卡的参数设置 ....................................... 12

4软件设计 ......................................................... 14

4.1基于MATLAB和声卡的软件流程 ................................ 14 4.2基于MATLAB和声卡采集的示波器的实现 ........................ 18

4.2.1GUI的创建 ............................................ 18 4.2.2GUI的设计 ............................................ 18 4.2.3代码的实现 ........................................... 19

5程序的调试与分析 ................................................. 23 结论 .............................................................. 26 致谢 .............................................................. 27 参考文献 .......................................................... 28

III

引言

伴随着计算机的广泛应用和信息化时代的到来,计算机与外部物理世界连接需要通过数据采集来实现。随着计算机技术的迅猛发展和广泛普及,数据采集系统也迅速地得到了广泛的应用。在工业生产过程中,我们需要应用该系统对生产现场的各种参数实施采集,监视和记录,提高产品的质量,降低成本。在我们的科学研究中,使用数据采集系统可以帮助我们获取大量的动态信息,更是研究瞬间物理过程的强有力工具,也是我们获取科学奥秘的重要手段。

总之,在各个应用领域中,数据采集与处理越发的及时,工作效率就会越高,从而取得的经济效益和生活品质也就会越高。本篇就是针对语音信号的采集和处理设计的基于MATLAB的数据采集器,文中提出了系统构成、设计方案、设计过程。

1

1绪论

1.1课题背景及意义

计算机和信息技术自出现以来一直在飞速的发展。时至今日,我们的生活和工作已经离不开了计算机。信号以各种各样的表现形式出现在我们的日常生活中,信息的传递、存储和获取都要通过信号来实现。所以,实时的信号采集和分析处理对于计算机和信息技术有着非常重要的意义。

利用MATLAB的数据分析处理功能进行采集处理,则首先需要将语音信号转换成MATLAB的数据格式,因此,我们不能直接对硬件端口进行操作。随着计算机技术的势不可挡地发展与广泛应用,数字设备正在逐步的取代模拟设备,在生产过程中的控制和科学研究以及生活中的各个领域,计算机测控技术正发挥着无法取代的作用。我们外部世界当中的大部分信息是随着时空变化而变化的物理量形式出现的,比如温度、压力、位移等等。要将这些信息送入到计算机里进行处理,就势必要先将这些连续变化的物理量进行离散化,并进行量化和编码,从而最终变成数字量,这个过程就是通常我们所说的数据采集。计算机在监测和控制这个系统的过程中,获取原始数据的主要手段就是数据采集。

数据采集是计算机是获取信息的重要途径,也是计算机与外面世界进行沟通的桥梁。数据采集技术是计算机技术和信息科学的一个不可或缺的部分,它已经广泛应用于我们的国民经济和国防建设的各个领域,而且随着科学技术的发展,尤其是信息技术的发展与普及,数据采集技术它有着广阔的发展前景。

MATLAB是Math Works公司很早推出的一种科学计算仿真软件,已经被广泛地应用于各种计算机上。现在已经发展成为功能强大的科学软件,它能够进行数据采集、信号分析、数学运算和可视化解释等。利用MATLAB设计数据采集器有很多各方面的优点,会使得我们对数据的后面分析和处理将更加的方便。MATLAB语言简单,介于汇编语言和高级语言之间,入手会简单很多,使用起来会很方便,输入简单明了,用户也可以对其自行发展 ,它是全球绝大多数国家进行科学研究都要用到的重要工具。MATLAB由于其丰富的数值分析和处理功能、简单的接口编程和强大的仿真功能而受到广大的用户推崇,但若要对量比较大的数据进行实时的采集,MATALB会显得相形见绌。在我们传统工业检测中,采集到的数据需要存储起来,后经过处理和转换,才能使用MATLAB进行最后的分析并作相应的处理,毋庸置疑这是一个相当复杂的过程,这势必会影响到MATLAB在开发测控系统的范围和在实践中对实时数据的处理速度。我们若是能够在MATLAB环境下直接采集实时数据,无疑所有的难题都会迎刃而解。

2

MATLAB 7.0下的数据采集工具箱提供了直接对硬件端口进行实时数据采集的功能。只要利用该工具箱再加上合适的数据采集卡就可以进行实时数据采集和实时控制,由此就可以很容易地组建自动控制分析系统。利用计算机的声卡和MATLAB中的图形用户接口软件界面就可以构造一个简单的实时信号分析仪器。显而易见,在MATLAB开发环境下进行数据采集是确实可行的而且开发起来也会比较方便。

在进入21世纪以来,世界变的越来越国际化,一个国家的发展必定会落后与世界的发展,全球化的趋势没法阻挡,竞争日益激烈,所有的国家所有的企业都在追求实时的信息处理和高效的工作效率,以最少的成本获得最大效益,所以基于MATLAB的数据采集的开发和应用是非常有必要的。它的实时数据采集处理特性会提高我们的工作效率以及对生产的管理水平,最终提高企业的经济效益。

1.2数据采集系统的研究状况

目前,数据采集系统主要有以下4种设计方案:

⑴ 使用RS232串行通信将采集模块采集到的数据传输到PC机。

采集模块采集到的数据通过RS232串行通信传输到PC机,借助MATLAB中的仪器控制工具箱封装的串口对象,可以像操作文件一样控制串行端口与外设进行通信。先使用 serial函数创建串口对象,再设置波特率、数据位、停止位等属性,使PC机和数据采集模块间具有相同的通信模式。传输数据时, 用fopen 函数打开串口,再用fwrite函数和fread 函数以二进制或ASCII码格式对进行读写操作。数据通信过程中,通过读串口对象属性可以实时了解串口的工作状态。数据传输结束后用fclose函数关闭串口。用智能数据采集模块采集系统的输入激励信号和输出响应,将采集到的数据通过串行通信传输到MATLAB。

⑵ 用AT89C51单片机(MCS51系列)与美国TI(Texas Instruments)公司的A/D芯片TLC2543制作数据采集卡。

该采集系统移动性比较好,而且成本也不高,它利用AT89C51单片机(MCS51系列)与美国TI(Texas Instruments)公司的A/D芯片TLC2543制作了一块数据采集卡, 由单片机完成具体的数据采集任务,采集到的数据同时传送给计算机进行分析处理。数据采集卡的结构是设计成外置式的,模拟信号通过A/D转换转化成数字信号,然后串行传输给后台控制的计算机。TLC2543是拥有11个输入端的12位模数转换芯片,并且是串行控制的,内置有采样保持器,转换时间最长不能超过10Ls,还有S/H和多路选择开关,单5V供电,0~5V模拟输入,需要外接参考电压。选用2211184MHz作为单片机的振荡频率,这样可使AT89C51与PC通信的波特率能够非常精确地达到115200bps,确保计算机能够实时的接收到的高速采集的数据。模拟信号通过TLC2274

3

高速低噪声运放进行缓冲,它的输出是满幅度的(即rail-to-rail) ,采用单5V供电时,可产生0~5V输出,所以说它非常适合用在这里。TLC2543参考电压是电压源芯片AD586产生的+5V精密基准电压。由计算机传送采集设置,采集到的数据通过串行口实时传输给计算机。

(3) 使用USB总线的数据采集器。

USB总线的速度快,而且易扩展,能够采用总线供电,所以使用起来比较灵活。可以在MATLAB的环境下通过USB总线进行实时的信号采集,但是MATLAB自身是不能实现对USB总线的控制功能。在C语言环境下,是可以非常方便地对USB的驱动进行开发和控制。如果对USB的数据采集部分进行驱动和控制利用C语言进行开发,编译成MEX文件,然后在MATLAB中需要时调用即可。

(4) 基于ARM和GPRS的嵌入式多路数据采集系统。

该系统是运行于32位微处理器和嵌入式Linux操作系统的架构上,与传统的解决方案相比,速度更快,数据处理能力更强,功能也扩展了,更加的可靠。并且它有向其它的行业应用的发展前景。

1.3课题的研究目的和任务

设计声音采集系统,该系统利用计算机和声卡的资源完成10kHz以内的声音信号的采集和显示以及对其做一个简单的频谱分析,并且能够实现信号的存储和调用示。设计是以计算机为核心构成数据采集系统,主要模块包括麦克风、声卡和计算机。

系统具体的完成如下功能: 1.10kHz以内信号采集 2. 信号采集系统模型分析 3. 可连接相关处理程序

4. 可发送音频范围内的测试信号 5. 信号存储和调用 6. 信号显示

7. 信号处理结果显示与对比分析

基本要求:根据主要内容提出整体设计方案,确定设计方案满足题目要求及课设要求、明确系统所需的软硬件,并编写系统正常运行所需程序,完成软硬件的调试,使系统正常运行。

4

2数据采集系统分析

2.1数据采集系统的构成

近年来,微电子技术与数字信号处理技术的火速发展使得数字信号处理变的非常容易和方便。因此,如果采用数字信号处理技术来处理信号,那么在进行信号处理之前就必须完成数据采集。

数据采集技术是信息科学技术的一个必不可少的分支,它主要研究数据的采集、存储、处理以及控制的问题。在信息处理、智能化仪器以及工业自动化控制等领域,都无法避免数据的采集、传输与控制等问题,将外面世界真实存在的压力、温度、位移以及速度等物理量转化为数字信号,再传输到计算机中并进一步予以显示、处理、传输与记录的过程,称为数据采集。相应的系统也就是数据采集系统。下图1是数据采集系统的系统框图:

图1 数据采集系统的系统框图

传感器是能够感受到特定的被测物理量,并且会呈现一定的规律变化,它通常是由敏感元件和转换元件两部分组成。其中,敏感元件是传感器中能直接感应被测物理量的部分;转换元件是能将敏感元件的输出量转化为方便传输或测量的电信号部分,转换元件是传感器中能够直观感受或响应被测物理量的部分。传感器在一些其他领域中又会被称为检测器或探测器。随着传感器集成技术的发展渐趋成熟,其应用将会越来越广泛。

传感器的功能是把非电的物理量转化成模拟电信号(电流或电压),例如热电偶、热电阻电阻大小随温度变化而变化;转速传感器通常是把转速转换为电脉冲信号。通常把传感器转化成的电信号输入到A/D转换器中,输入的这一段信号电路称为模拟通道。

对传感器输入的信号进行放大滤波就是信号调整模块,用输入放大器来放大和缓冲输入信号,后用抗混叠滤波器滤波。传感器输出的电信号太小,所以需要对其进行放大,以满足A/D转换器的满量程输入的要求。除此之外,一些传感器内阻很大,输

5

出功率太小。这样同时放大器还起到了的来缓冲输入信号作用,也就是阻抗变换器的功能。下图2是传感器的工作框图:

图2 传感器的工作框图

A/D转换器的功能就是把不好处理的模拟信号转化为数字信号,具体的转化流程是采样、量化、编码,并且把转化后的数字信息储存在缓存当中,等待中央处理器的读取。要将模拟信号的转换必须由A/D转换器完成,伴随着大规模乃至超大规模集成电路的发展,为了满足各类不同的检测和控制任务的要求,大量的各式A/D转换电路应运而生,有的结构不同,有的性能不同。积分型、传统并行型、逐次逼近型是层出不穷以及新发展起来的∑一△型和流水线型等,所以在选取A/D转换器时我们就要根据应用场合和所需性能指标的要求来选取A/D转换器。低功率、高速度、高分辨率是大家所追求的,也是是A/D转换器的发展方向,所以A/D转换器的这一发展方向肯定是适应现代数字电子技术的发展方向。

2.2基于MATLAB的数据采集系统原理

基于MATLAB的数据采集需要用到数据采集工具箱,使用它可以极大地简化和加快数据采集工作。它将实验测量、数据分析、和可视化的应用集合在一起会更加的容易,它提供了一整套的命令和函数,通过调用这些命令和函数,可以实现各种与计算机兼容的硬件设备的数据采集和通信。因为现在的MATLAB软件自身是集成有数据采集工具箱的,所以一边在实时采集数据,一边就可以对采集到的数据进行分析,或进行相应的处理,或者因为数据分析的需要实时地更新测试条件。

数据采集工具箱给硬件驱动程序和MATLAB环境之间提供了“对话”所需的3种组件,分别是M文件函数、数据采集引擎和硬件驱动接口。MATLAB程序通过这3种组件与数据采集硬件的互联和信息传递,它们之间的关系如图3所示。

6

图3 MATLAB数据采集箱提供的三种组件硬件之间的关系

硬件驱动适配器在硬件驱动程序和数据采集引擎之间交换属性数值、数据和事件;数据采集引擎用来存储各个设备对象,以及每个设备对象的属性值;对采集到的数据进行存储并且使不同事件同步;M-文件用来创建设备对象、采集或输出数据、检查数据采集设备和数据采集的状态和配置属性值。只有使用工具箱提供的设备对象才能访问硬件端口。设备对象给访问硬件设备带来了方便,数据采集的应用程序需要设备对象来控制。每个设备对象它都会对应着一个规定的硬件子系统,如下图4所示。

MATLAB数据采集工具箱提供了3个设备对象,分别是模拟输入设备对象(AI)、模拟输出设备对象(AO)和数字输入/输出设备对象(DIO)。在每次采样之前,要创建合适的设备对象。

图4 设备对象和硬件子系统

7

3基于MATLAB和声卡的数据采集器的设计

3.1方案选取

当今在推进信息化建设的实践中,数据采集技术是不可缺少的重要环节,对设施的影响尤为深远。目前,比较常见的数据采集系统设计方案主要有以下几种:

(1)使用RS232串行通信将采集模块采集到的数据传输到PC机

RS232是PC机与通信工业中应用最广泛的一种串行接口,RS232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。RS232采取不平衡传输方式,即所谓单端通讯,同时又有通信距离短、速率低的缺点。

(2)用AT89C51单片机(MCS51系列)与美国TI(Texas Instruments)公司的A/ D芯片TLC2543制作数据采集卡

该采集系统具有较好的可移动性并降低成本, 但AT89C51的精确度不高。 (3)应用USB总线的数据采集器。

该方案有速度快、易扩展、能够采用总线供电、设备安装和配置容易和使用灵活等优点,但是设计和调试比较麻烦,成本相对较高。

(4)基于ARM和GPRS的嵌入式多路数据采集系统。

该系统运行于32位微处理器和嵌入式Linux操作系统的架构上,与传统的解决方案相比,在可靠性、速度、数据处理能力、功能扩展等方面有了显著改进,并且有向其它场合下的行业应用扩展的前景。

信号采集工程是工程中信号分析和处理的前提,基于MATLAB的数据采集器是为了实现MATLAB与外部环境的交互,达到直接对硬件端口进行读写操作,实现这个目的,要利用MATLAB的数据采集工具箱。数据采集工具箱是MATLAB计算环境中M文件函数、MEX文件和MEX -file 动态链接库的集合。硬件驱动接口也就是硬件驱动程序和数据采集工具箱它们之间的接口,主要目的是通过驱动程序在硬件设备和MATLAB之间传送信息。数据采集工具箱是不会提供硬件驱动的,一般设备供应商提供是会提供硬件驱动的。那么在系统中安装相应的版本NIDAQ驱动即可,它可从硬件的驱动程序实现接收数据的采集,并送入MATLAB。功能包括实时模拟输入(AI,ADC,数据采集)、模拟输出(AO,DAC)、数字量输入输出(DI/DO)。支持流行的硬件,例如声卡、National instruments E系列和1200系列数据采集卡、Hewlett-Packard E1432A系列VXI数据采集卡等。表1是目前支持的供应商和接口卡的名称。

8

表1 供应商和接口卡名称

供应商Vendor National Instruments Computer Boards Agilent Technologies Windows sound cards声卡 数据采集硬件的不同操作都是一致的界面,不同的采集硬件只需简单地修改相应的程序即可。集成于MATLAB内的数据采集工具箱不仅支持标准的数据采集卡,而且支持通过声卡进行采集数据和输出数据。所以,以声卡作为数据采集卡就不需要再加A/D和D/A转换器了 ,一台个人计算机就可以作为一个数据采集系统。再进一步利用MATLAB内的数据采集工具箱,从而就可以组成一个系统进行实时采集和仿真控制。可以将MATLAB内的Simulink、Dials&Gauges、DSP Blockset、 Fixed-Point Blockset等固有的模型用Real-Time Workshop快速地转化为C语言,从而进行对外界实时地测量、信号分析处理和监控。

数据采集卡一般包括多路开关、放大及采样保持、A/D转换、计算机I/O接口等部分,性能比较完善,但价格比较昂贵,同时硬件安装及软件驱动需占用一定的系统资源。计算机上都装有声卡,声卡具有对信号滤波、放大及采样保持、A/D和D/A转换等功能,这些功能与数据采集卡相当。使用声卡进行直接A/D转换、以话筒的插孔作为信号源输入端,就可实现单、双通道对信号的采集。一般常用声卡会以双声道16位并且高保真的采集语音信号,最高上限采样率可以达到44.1KHz,采样的频率与精度是比较高的。通常比12位市售D/A卡的精度高,声卡在信号的量化精度和采样率方面是绝对满足当前的科学实验和工程测量要求的,相对于一些低档的数据采集卡它的性能甚至更好。因此可用声卡配合相应软件构建信号采集系统。MATLAB中提供了数据采集工具箱和信号处理工具箱,完全可以满足控制声卡进行数据采集和分析数据的要求。

前面四种方案虽然各有优点,但是,基于MATLAB和声卡的数据采集器与它们比起来更廉价和简单,我对其掌握也更充分。所以,我选择了基于MATLAB和声卡的数据采集器设计方案。

基于MATLAB的数据采集器的设计以声卡为核心,既能充分利用MATLAB的信号处理功能,又能充分发挥声卡所具有的廉价和能对模拟信号的放大、滤波、采样、A/D和D/A转换。本方案的系统框图如图5:

9

接口卡名称Adaptor Name nidaq cbi Hpel432 winsound 声音 麦克风 声卡 图5 系统框图

计算机 3.2传感器的选择

声音传感器是一种将声音信号转变为电信号的声电转换器件,或者说声音传感器是将机械能转化为电能的转换装置。常规的声音信号的频率范围一般在20Hz-20kHz,并要求传感器在此频率范围内对声音的响应。

传声器就是声音传感器,我们通常称呼其为麦克风,它的作用与扬声器恰恰相反,是将声音信号转化成电信号。目前,传声器的种类很多,其外形、规格、型号等更是不胜枚举。但是按工作原理分为传声器可分为动圈式传声器、压电晶体式传声器、带式传声器、和电容式传声器等等。驻极体式传声器在其振动面粘贴了聚酯膜,它能够拾取直达声,减少反射声,增加了声音的保真度。它有着电声性能好、结构简单、价格低,、灵敏度高、耐用等特点,因此其应用是较广泛的。驻极体式EM一9767型号的麦克风,它有着最高可达30dB的灵敏度, 可以响应20Hz一20kHz带宽的音频信号,频响特性也是比较平坦的,信噪比一般大于60dB,从以上几点来说是完全满足我们所设计的系统的要求。

在设计该系统过程中,因为难以获得像这样高灵敏度的麦克风,所以选用的是市面上一般的麦克风,这样的麦克是没有明显的电气参数的,但是通过实践表明其特性是完全满足本系统要求的。使用时,传声器直接插入PC机的麦克风插孔。周围环境所引起的空气震动传至传声器时,在线圈上就会产生感应电动势,即形成一个电信号。这个电信号经由线圈引出线输出,经信号调整电路放大、滤波后,再经过A/D转换成数字信号传入计算机进行信号处理。麦克风的衡量指标有输出阻抗、灵明度、频率响应、指向性。驻极体式EM一9767麦克风的主要电气特性如表2 表2 驻极体式EM-9767麦克风主要电气特性

参数 指向性 灵敏度 指标 单向性 -46±3dB, -48±3dB, -50±3dB 10

输出阻抗 频率范围 最大工作电压 标准工作电压 工作电流

680Ω(最大) 100 ~ 16000Hz 10.0V +1.5VDC 0.5mA 3.3声卡在A/D转换中的应用

3.3.1声卡在A/D转换中的原理

声卡是电脑中用来处理声音的接口卡,有三个基本功能:①音乐合成发音功能。②混音器(Mixer)功能和数字声音效果处理器(DSP)功能。③模拟声音信号的输入和输出功能。声卡可以把来自话筒、收录音机、激光唱机等设备的语音、音乐等声音变成数字信号交给电脑处理,并以文件形式存盘。计算机上都装有声卡,声卡不仅价格低廉,而且兼容性好、性能稳定,软件(特别是驱动程序)升级方便,具有对信号滤波、放大及采样保持、A/D和D/A转换等功能,而且声卡采用DMA(直接内存读取)方式传送数据,极大地降低了CPU占用率。一般声卡具有16位的D/A转换精度,通常比12位市售D/A卡的精度高,对于许多工程测量和科学实验来说都是足够高的,而其价格却比后者便宜得多。

声卡的硬件结构由以下几部分组成:声音控制/处理芯片,功放芯片,声音输入/输出端口等。声音控制/处理芯片是声卡的核心,集成了采样保持、A/D转换、D/A转换、音效处理等电路,声卡的优劣主要是由它决定的,它的基本功能是对声波进行采样和对声波回放的控制以及处理MIDI指令等,声音输入/输出端口是音频信号的输入和输出,它主要有外接端口和内接端口。外接端口中有“Line In”线性输入端口,“MIC In”麦克风输入端口,还有MIDI端口,可以连接游戏控制器和电子乐器。内接端口是声卡内置的输入/输出端口,是CD音响接口。声卡对声音的A/D转化图如图6所示,本文中声卡对声音的输入采用“MICIn”麦克风输入端口。

11

模拟的声音信号(CD、线路输入) 信号前置处理A/D转换 数据输入缓冲区 数字信号处理

图6 声卡对声音的A/D转化图

声音信号由麦克风采集到经过声卡的前置处理再进行模数转换后变成数字信号,送入输入缓冲区,然后利用各种数字信号处理的技术对输入到缓冲区的数据进行处理,从而完成音效处理、声音消噪、声音合成等功能,最后可以把已经处理好的数据保存到可存储的存储设备中,这完成了声音信号的录制过程。 3.3.2声卡的驱动软件

声卡驱动软件也就是声卡的驱动程序,实现对通道数、采样频率、采样位数等参数设置及对音量的大小、数据缓冲区等控制功能,它能够使得声卡各组成部分相互协调的工作,从而实现对声音的采集、存储和回放等功能。驱动软件的结构可分为两部分,分别是低层音频服务部分和高层音频服务部分。

低层音频服务能够让代码程序直接与驱动程序传递信息,可以很好地控制声音播放和录制,播放和录制过程就可以得到很好的管理,它也可以控制各种各样的音频设备。高层音频服务同样也能实现声音的录制和播放的功能,但它不能直接控制底层数据。

由于低层音频服务可直接与驱动程序通讯,实现对底层数据的直接控制,而且本系统是对信号波形输入设备的操作,作为工程上使用的信号采集系统,需要考虑信号的采集频率、采样长度、采样位数等。数据采集时,调用底层音频函数来完成。首先对声卡定义为设备对象,使MATLAB 将声卡设备作为对象处理,用于建立模拟信号输入,创建一条专用的通道用于模拟信号数据的传输,然后对通道数、采样频率、采样位数(A/D转换位数)、采样长度等参数进行设置,最后选择触发方式。 3.3.3声卡的参数设置

声卡的技术参数主要有两个:采样位数和采样频率。 1)采样位数

采样位数也就是采样值或取样值,是声卡处理声音的解析度,采样值越大,解析度就越高,声音的录制和播放效果会越好。声卡位数和数据采集卡的位数是同一个概念,是指模拟信号转化为二进制数字信号的位数,它反映的是描述信号的准确程度。

12

显而易见,位数是越高越好。目前,市面上绝大数的声卡是16位,然而一般市场上的数据采集卡只有12位,所以从这个角度来说,声卡的准确度是非常高的。

2)采样频率

由于声卡只能处理语音信号,所以声卡的采样频率通常比较低的。目前,采样频率的最大值是44.1kHz,只有少数能达到48kHz。通常声卡的采样频率设为4个档位,分别是44.1kHz、22.05 kHz、11.025 kHz和8 kHz。

22.05 kHz的频率仅仅能达到FM广播的音质,理论上的CD音质界限是44.1kHz,当然48 kHz的效果会更好。对于20kHz以内的音频信号,采样频率设为48kHz理论上是没问题的,但是余量似乎不大。

由采样定理得到,采样频率应该至少是被采样信号的2倍,所以声卡的采样频率决定了可以采样信号的范围。不允许用户在最高的采样频率一下任意设置采样频率,只能分为4挡,这个是使用声卡作为数据采集卡的一个缺点。这样虽然使得制造成本降低,但是使用起来不是很方便。用户一般不可能控制整周期采样,非整周期采样带来的问题只能通过信号处理来弥补。

13

4软件设计

4.1基于MATLAB和声卡的软件流程

本系统的软件设计使用了面向对象的程序设计方法。图7给出整个程序的模块构成图。本软件的设计方法,力求简单明了,操作方便。

软件功能模块 采 测集 试 数 据 波时形保 域存 显分 示 析

读 取 播 放 图7 程序的模块组成图

首先设置采集数据时需要的参数,再进行采集数据,对于采集到的数据可对其进行保存、波形显示和频谱变换,下面可以调用已保存的数据作一些分析处理。

该设计要利用数据采集工具箱,在MATLAB环境下实现实时数据采集的步骤如图8所示。

频域 分析 14

1.创建设备对象analoginput 2.添加采集通道addchannel 3.设定特性参数set 4.启动数据采集和数据处理start 5.清除设备对象delete;clear 图8 数据采集命令流程

首先需要利用命令函数analoginput来创建输入设备对象,并且再定义一个MATLAB变量来代替这个设备对象,以后只要是对该设备对象的操作就转化为对刚定义的这个变量操作。当上面的输入设备对象建立完成后,就需要根据实际情况给该输入设备设置数据采集通道。接着就需要设置输入设备对象在采集过程中所需的参数,不同的采集卡它的采集特性参数会都是各不一样的。当上述的所有工作完成之后,就可以开始启动数据采集命令了,此时由数据采集引擎管理数据采集卡的状态,上面设定的参数数据采集引擎响应和监控数据采集卡都会自动地严格遵守,并且数据采集引擎会将采集到的数据输入给其管理的内存区,在MATLBA中通过对应的命令可以查看系统数据采集的状态和抽取数据到MATLAB的工作空间中,并在MATLAB工作空间中可对抽取到的数据处理分析。当采系统集到的数据满足预先设定的参数时,采集任务也就结束了。这时可以利用delete和clear两个简单的命令来清除建立的设备对象,如果不清除该设备对象,数据采集引擎的会一直监管该设备,下次再创建相同设备对象时,系统发生错误。

数据采集工具箱针对数据采集对象支持两种特性, 第一种特性是通道特性,它只适用于单个通道,第二种特性是公共特性,它可以定义数据采集卡所有采集通道的特性;具体到每个不同的数据采集卡的特性会有所不同,其中有一组是通用的基本特性

15

设置适合于大多数的应用,这些基本特性包括触发方式和采样率。数据采集工具箱支持的触发方式有4种,它们分别是手动触发、立即触发、软件触发和硬件触发(‘Manual’、‘Immediate’、‘Software’、‘Hardware’)。

(1) 通过编程将MATLAB与声卡连接起来。声卡设备仅仅是MATLAB中的一个对象,之后的所有的操作都不会直接作用于硬件,而是直接对已经建立的声卡设备对象的操作作用于外部的硬件设备。对于这个系统来说,采集数据用的是声卡,所以系统输入和输出的信号都是模拟信号。在MATLAB中将MATLAB与声卡连接起来是非常容易的,编程是只需利用相应的语句就成,MATLAB中的analoginput命令是专门用于建立模拟信号输入设备对象的,下面的语句是其语法。

ai= analoginput (‘advantech’ ) ;

或者 ai= analoginput (‘advantech’ , ID) ;

Advantech也就是硬件设备的名称,MATLAB还支持很多的硬件设备,它们的名称分别是winsound,hpe1432,mcc,keithley,cbi,nidaq和adaptor。其中的ID则是硬件设备的标识,声卡的ID标识可以省略,所以用声卡作为采集硬件设备,其语法就可以是: ai=analoginput (‘winsound’ ) ;

在MATLAB的编程过程中使用上述语句就可以在众多的计算机硬件中迅速地找到声卡,同时也就创建了一个模拟信号的采集的对象。创建一个输入设备对象,所有的硬件信号通道不能被它一个设备对象所霸占。所以为了方便操控硬件设备,为了模拟信号的传输就势必要创建一条专属通道。通过MATLAB中的addchannel命令,就会很容易达成这一目的,下面的语句是其语法的一般格式。

chan = addchannel (obj , hwch) ;

obj是模拟输入或输出的对象,也就是上面建立的“ai”;hwch是已经指定好设备的标识数量。在本系统中,指定好的声卡设备只有1个标识,所以在创建数据传输通道的就可以这样写:chan = addchannel (AI , 1) ;

(2) 接下来设置采样时间和采样频率以及采样的点数。设定采样时间、采样频率和采样点数是非常的容易,以下语句完成即可完成。

duration = 3; Fs = 22050 ;

Blocksize = duration * Fs ;

如果需要在设计图形用户界面上对它们进行设置,只需利用MATLAB中的set命令对它们进行赋值即可,下面的语句就是其语法格式。

set (object ,‘property’ , value) ;

对于本系统来说,object就是要操作的设备对象ai,property为采样频率SampleRate,最后的value即为取值。所以可以这样写:

16

set (ai ,‘SampleRate’ , 8000) ;

对采样点数进行设置时,object不变还是ai,同理property就要换成采样点数SamplesPerTrigger,而value在这就是duration * ActualRate。所以就可以这样写:

set (ai,‘SamplesPer Trigger’ , duration * ActualRate) ;

紧接着就必须要使用get命令将已设定好的参数传递给对应的变量,get (ob ,‘PropertyName’ ) ;是其语法格式。

ob是object的简写即为目标对象的名称,显然PropertyName是数值来源的名称,这里的数值来源就是 SampleRate和SamplesPerTrigger,所以就可以这样写:

ActualRate = get (ai ,‘SampleRate’ ) ; blocksize = get (ai,‘SamplesPer Trigger’ ) ; 故这部分的全部代码语句如下:

duration = 3 ; %设置3秒的采样时间

set (ai,‘SampleRate’ , 22050) ; %设定22.05kHz的采样频率 ActualRate = get (ai,‘SampleRate’ ) ;

set (ai,‘SamplesPerTrigger’ , duration * ActualRate) ;

blocksize = get (ai,‘SamplesPer Trigger’ ) ; %设置采样点数 Fs = ActualRate ;

(3) 对于触发方式的设置,只有四种触发方式,分别是Immediate是自动触发; Hardware是硬件触发;Manual为手动触发;Software是软件触发。因为本系统要求能够随时地采集数据,所以该系统选用手动触发方式,下面是设定触发方式的语句。

set (ai ,‘Trigger Type’ ,‘Manual’ ) ;

(4)采集数据,上述的采集参数设置完成,就可以启动该设备开始数据采集,当采集完成后,设备会自动停止运行。语法格式如下:

start (ai) ;

trigger (ai) ; data = getdata (ai) ;

声卡只有上述4种触发方式的3种,在本设计中设定的是Manual手动触发方式,所以就势必要用trigger(ai)命令人工触发,启动声卡开始数据采集;如果触发方式设为Immediate时,使用start命令就可以将立即触发,开始数据采集。

(5) 清楚设备对象。在采集完成之后,需要从内存以及MATLAB工作空间中清除建立了的设备对象。语法格式如下:

stop (ai) ; delete (ai) ;

stop命令可以终止声卡设备运行;delete命令是清除MATLAB工作空间中

17

的声卡设备对象。

4.2基于MATLAB和声卡采集的示波器的实现

4.2.1GUI的创建

(1)首先启动MATLAB7.0,点击菜单“FILE”中的“New”子菜单下的“GUI”选项,打开“GUIDE Quick Start”对话框。

(2)在“GUIDE templates”列表框中选择“Blank GUI(Default)”选项,后单击“OK”按钮。当Matlab完成GUIDE初始化后,显示GUI窗口,可以适当调整窗口的大小。

(3)点击GUI窗口中的“文件”菜单中的“Save As”选项,在弹出对话框内设置一个保存的位置,保存为nidaq.fig文件,系统将自动保存并打开nidaq.m文件。 4.2.2GUI的设计

(1)设置GUI窗口(figure1)属性。双击窗口内任意位置,打开“Property Inspector”对话框,选择Name属性,设置标题为“音频信号采集”。

(2)选择控件面板中控件,以一定的次序为GUI窗口添加控件,并按照下图8所示放置。

图9 GUI窗口图

(4)双击各控件对象,打开“Property Inspector”对话框,按下表3进行属性设

18

置。

表3 控件属性设置 控件类型 Axes Push Button Push Button Push Button Push Button Push Button Push Button Push Button 4.2.3代码的实现

(1)在nidaq.m文件中,设置打开回调函数nidaq_OpeningFcn(),添加如下代码完成程序初始化工作具体代码如下:

function nidaq_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to nidaq (see VARARGIN) openDAQ=daqfind;

for i=1:length(openDAQ); stop(openDAQ(i)); delete(openDAQ(i)); end

% Choose default command line output for nidaq handles.output = hObject; % Update handles structure guidata(hObject, handles);

(2)在nidaq.m文件中,分别在“采集和显示”、“保存”、调用、“关闭”等按钮相应回调函数pushbutton1_Callback()、pushbutton2_Callback、pushbutton3_Callback、pushbutton4_Callback …中添加代码分别实现声卡数据采集和显示、保存数据、调用和关闭GUI窗口等功能,具体代码如下:

unction pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

19

Tag属性 axes1 pushbutton1 Pushbutton2 Pushbutton3 Pushbutton4 Pushbutton5 Pushbutton6 Pushbutton7 String属性 —— 采集和显示 保存 频域分析 关闭 测试 时域分析 读取播放 其他类型 默认 默认 默认 默认 默认 默认 默认 默认 功能 绘图 采集命令 保存命令 频域分析 关闭对话框 发出测试信号 时域分析 播放 % handles structure with handles and user data (see GUIDATA) global data; global Fs;

ai=analoginput('winsound'); chan=addchannel(ai,1); duration=3; Fs=22050;

blocksize=duration*Fs; set(ai,'TriggerType','Manual'); start(ai); trigger(ai); data=getdata(ai); %subplot(121); stop(ai); delete(ai); plot(data); grid on;

title('声音信号的波形显示'); ylabel('Signal level(volts) '); xlabel('Samples');

% --- Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global data; global Fs;

wavwrite(data,'sound');

% --- Executes on button press in pushbutton3.

function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [data,Fs,N]=wavread('sound.wav');

20

figure(3);

[f,mag] = daqdocfft(data,Fs,12000); subplot(3,1,1); plot(f,mag);

ylabel('magnitude(dB)'); xlabel('frequency(Hz)') title('原信号的频谱图');

x=fft(data.*hamming(length(data))); fm=5000*length(x)/Fs; f=(0:fm)*Fs/length(x);?? subplot(3,1,2);

plot(f,20*log10(abs(x(1:length(f)))+eps)); ?? grid on;

title('滤波后的频谱图'); ylabel('magnitude(dB)'); xlabel('frequency(Hz)') subplot(3,1,3); specgram(data,512,Fs); title('语谱图');

% --- Executes on button press in pushbutton4.

function pushbutton4_Callback(hObject, eventdata, handles) % hObject handle to pushbutton4 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) close all force;

% --- Executes on button press in pushbutton5.

function pushbutton5_Callback(hObject, eventdata, handles) % hObject handle to pushbutton5 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global data;

ao=analogoutput('winsound'); chan=addchannel(ao,1); duration=4;

21

set(ao,'SampleRate',8000); ActualRate=get(ao,'SampleRate'); set(ao,'TriggerType','Manual'); bls=ActualRate*duration;

data=cos(linspace(0,2*pi*500,bls))'; putdata(ao,data); start(ao); trigger(ao); waittilstop(ao,5); delete(ao); clear ao;

function pushbutton6_Callback(hObject, eventdata, handles) % hObject handle to pushbutton6 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [data,Fs,N]=wavread('sound.wav'); F=enframe(data,200); f5=F(:,5); figure(2); subplot(2,1,1); plot(f5); xlabel('样点'); title('清音波形图'); f8=F(:,8); subplot(2,1,2); plot(f8); xlabel('样点'); title('浊音波形图');

function pushbutton7_Callback(hObject, eventdata, handles) % hObject handle to pushbutton7 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [data,Fs,N]=wavread('sound.wav'); wavplay(data,Fs);

22

5程序的调试与分析

程序设计、调试完毕,运行程序。直接将带有麦克风的耳机插头插在声卡信号输入端,输入声音信号进行调试。下图10是程序调试的结果:

图10 调试结果图

第一步:点击“测试”按钮,系统将会把一个余弦信号向外发送,扬声器将会把其播放出来。测试设备能否正常工作。

第二步:点击“采集和显示”按钮,系统将会开始采集长达2秒的声音,并且绘出其时域波形图。如下图11所示:

图11 采集的声音波形显示

23

第三步:点击“保存”按钮,系统将会把采集到的时域信号保存为wav文件。 第四步:点击“时域分析”按钮,系统将会把已经存储好的wav文件的数据调用出来,对其采样,绘制出其清音波形图和浊音波形图。从下图12可以看出,浊音部分的幅度更大。

图12 时域分析图

第五步:点击“频域分析”按钮,系统将会绘制出其频谱图,加海明窗滤波后绘制出频谱图,最后绘制出语谱图。从下图13可以看出,滤波后低频和高频部分都会有一定的衰减,从语谱图可以看出,幅度较大的集中在低频部分。

24

图13 频域分析图

第六步:如果需要,可以重复以上五个步骤,否则,点击“关闭”按钮,关闭对话框。

25

结论

本文开篇阐述了该课题背景和意义和这个课题目前的研究状况,紧接着介绍了数据采集系统的构成和各个系统模块的功能,以及基于MATLAB的数据采集原理。然后,分析比较了数据采集现行的几种方案和基于MATLAB的声卡数据采集器的相应器件以及各个模块,分别是驻极体式EM一9767麦克风和WDM类型的Realtek High Definition Audio声卡。最后描述的是系统的软件实现,显然是利用面向对象方法确定系统模型和具体的构造,实现了MATLAB对硬件端口进行直接的读取、采集。

这套数据采集系统有着很多的优点,对于使用者来说使用起来非常方便、运行效果非常不错并且价格便宜,是真正的物美价廉,对于开发者来说编程是非常的简单,但是不可否认的是系统执行速度有点慢。由于本人学识和能力的限制,只对语音信号进行了测试,如果把该系统进行升级改造,那么我们现实生活中的许多物理量都可以得到测试,比如把位移、水流、声音、振动、压力、噪声、温度声音、光照强度等各种物理量通过相对应的传感器进行测试,转换成容易处理的电信号,通过信号调理电路对其进行放大整形滤波,得到的信号在再通过声卡的喇叭输入插孔输入到计算机中,同时也可以对其进行分析、处理,实现工程中的自动监督控制系统。另外,声卡本身存在着极大的局限性,对于2kHz以上频率的信号,分析误差比较大。对于比较大的电流和高压,声卡是不能直接测量的,所以对于幅值较大的信号需要对其进行降压处理后再送入声卡中。

本设计系统的性能虽然已经相当的不错,但随着科学技术的进步,它还是会有很大的发展和改善提高的空间。随着计算机技术的发展,对数据采集的要求也会越来越高,在速度、功能、实时性、精度、灵活性、可靠性等方面的要求是会愈来愈严格。

26

致谢

毕业设计历时3个多月,在此期间虽然困难重重和阻碍重重,但最终我还是完成了论文的撰写和软件的仿真。在学院严谨的校风、良好的学术风气下以及老师们对我的教导,使我在大学生活的最后一段时光受益匪浅,我深信这对我以后的工作或学习会有很大的帮助和深远的影响。此次设计及论文是在王燕妮老师悉心指导、耐心帮助和大力支持下完成的,王燕妮老师以她严谨求实的教学态度、高度忘我的敬业精神、兢兢业业的工作作风以及不断创新的进取精神教会了我专业知识之外太多的经验和启发。在论文的写作当中,更是得到了许多同学提出的宝贵建议,同时还有那些与我一起工作奋斗的兄弟姐妹,所以在此,我要对他们表示最诚挚的谢意,感谢所有关心、支持、帮助过我的良师益友。

与此同时,我也要感谢论文中所引用的各位前辈学者的研究文献,虽然各位前辈学者我并不认识,但毋庸置疑,你们的研究给了我极多的启示和帮助,如果没有各位的研究成果,我很难完成自己的这篇论文。

当然由于自己的水平有限,文章中难免会有一些瑕疵,也希望各位老师能不吝赐教,严加批评指正。

27

参考文献

[1]田敏,李江全,邓红涛,刘军.案例解说MATLAB典型控制应用[M].北京:电子工业出版社,2010:35-102

[2]邓红涛,李伟,李传峰,李江全等.MTALAB数据通信与测控应用编程实践[M].北京:电子工业出版社,2011:90-93

[3]聂祥飞,王海宝,谭泽富.MATLAB程序设计及其在信号处理中的应用[M].成都:西南交通大学出版社,2005:71-91

[4]赵景波.MATLAB控制系统仿真与设计[M].北京:机械工业出版社,2010:126-127

[5] 全必胜,李斌. 基于声卡和MATLAB 的数据采集与分析系统[J].计算机仿真,2003,20 (8):1-2

[6] 徐云峰. 基于声卡动态测试信号采集与处理系统的研究[D].镇江:江苏大学,2006:8-9

[7]龙婉艺.基于MATALB的数据采集器设计[D].长沙:长沙理工大学2006:8-12 [8]王颖,王俊逸,刘云飞等. 基于声卡和MATLAB 的数据采集与分析系统[J].计算机与信息技术,2012:1-3

[9] J. Ludvig, J. Mcarthy, S. Meuendorffer etc. Reprogrammable Platforms for High-Speed Data Acquisition [J]. Design Automation for Embedded Systems,2002(7),pp.341-364.

[10] Vincenzo Gattulli, Marco Lepidi and Francesco Potenza. Seismic protection of frame structures via semi-active control:modeling and implementation issues[J]. EARTHQUAKE ENGINEERING AND ENGINEERING VIBRATION,2009(8)627-645.

28

本文来源:https://www.bwwdw.com/article/qgoo.html

Top