基于声卡的虚拟示波器设计【毕业论文】_第1页
基于声卡的虚拟示波器设计【毕业论文】_第2页
基于声卡的虚拟示波器设计【毕业论文】_第3页
基于声卡的虚拟示波器设计【毕业论文】_第4页
基于声卡的虚拟示波器设计【毕业论文】_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中北大学2013届毕业设计说明书基于声卡的虚拟示波器设计摘 要当今的世界正以一种前所未有的速度发展着,科技的发展更是日新月异。计算机拥有着强大的数据处理能力,故而成为人们生活中必不可少的一部分。本文正是利用计算机所具有的不可代替的逻辑运算能力,使得实现虚拟仪器的开发变为可能,理论上可以设计出基于声卡的虚拟示波器。虽然传统仪器得到迅猛的发展,精度越来越高,功能越来越强,性能越来越好,但传统仪器仍然是由厂家设定好的封闭结构,有固定的输入输出和仪器操作面板。每种仪器实现一种特定的功能,并以确定的方式提供给用户。我国的高档仪器主要依赖进口,因为目前国内的技术水平还不够成熟,没有达到世界先进水平,所以试

2、图研究一种简单方便、成本低又能够满足需求的虚拟示波器是非常有必要的。声卡的性能指标已经非常成熟,拥有非常优越的A/D转换性能,再加上LabWindows/CVI的强大的函数库和驱动库,使得研制虚拟示波器变得更加方便和灵活。本文利用计算机声卡代替传统意义上的数据采集卡,设计了一种双通道数字存储示波器。由于声卡所能承载的最大电压是1V,通过声卡的采集的输入信号只能限定在1V以内。在这个前提下,本示波器最高可以达到44.1KHz的采样频率,量化精度是16位。基于声卡的虚拟示波器通过计算机的I/O接口声卡采集到需要测量的信号,通过软件编程对信号进行运算、分析、显示,可以通过计算机的显示器观察到设计的面

3、板,并且可以通外接设备(如鼠标或键盘)对事先设计好的面板进行操作,达到替代传统仪器的目的。关键词:虚拟仪器、虚拟示波器、声卡、LabWindowsThe Design of a Virtual Oscilloscope Based on Sound CardABSTRACTWe are living in a world developing in a speed never seen before, and the development of technology changes with new day. So far, people cannot live without comput

4、ers because of their powerful processing capacity. What we use in this paper is the logically computing power of computers which is irreplaceable, so it makes it possible to develop virtual instruments or a virtual oscilloscope at last. Though traditional instruments have reached a new level, and th

5、ey have got high precision, better function and performance. However, traditional instruments always cannot get rid of close structure, fixed I/O and operation panel. In addition, every instrument offers a fixed function to users in a set way. In our country, we import top grade instruments because

6、we have not grasp this technology which is advanced in the world. So it is necessary to develop a simple and cheap virtual oscilloscope. People have done a lot about PC card which can transform analog signal to digital signal in a unexceptionable mode. Together with powerful function library and dri

7、ve library, it becomes more convenient and versatile. In this paper, we design a two-channel stored digital oscilloscope making use of Sound card instead of traditional data acquisition card. In fact, 1V is the maximum voltage that Sound card can stand, so we must limit the input voltage under 1V. I

8、f the instrument works properly, its sample frequency can reach 44.1 KHz, and its quantification precision is 16 bits. The virtual oscilloscope collect signal from computer input -PC card, and calculate, process, display the signals, and users can operate the panel with external device(mouse or keyb

9、oard) just like using traditional oscilloscope. Key Words:Virtual Instrument, Virtual Oscilloscope, PC card, LabWindows目 录1 引言11.1 课题研究背景及意义11.2 国内外研究现状21.3 本文的主要研究内容31.4 主要章节安排41.5 本章小结42 LabWindows/CVI编程环境的介绍52.1 LabWindows/CVI简介52.2 创建用户界面52.3 添加相应代码72.4 本章小结73 虚拟示波器的模块化设计83.1 信号采集模块83.2 波形显示模块93

10、.3 频谱分析模块103.4 波形调节模块113.5 信号存储模块203.6 其他功能模块213.7 本章小结214 虚拟示波器实验验证224.1 光标功能验证224.2 频率精度及范围验证254.3 移动功能验证304.4缩放功能验证324.5 本章小结335 总结35参 考 文 献36致 谢381 引言1.1 课题研究背景及意义虚拟仪器技术是以各专业学科知识为应用背景,以计算机软、硬件技术为核心,把传感器技术、自动控制技术、现代网络技术、现代信号处理技术、数值分析技术有效整合在一起的现代测试技术,是目前自动测试与电子测量仪器技术发展的重要方向1,2。它基于个人电脑的测控设备或系统,通常由计

11、算机、测控电路模块和专门应用软件组成,通过人机交互来完成对信号的采集、分析、处理和显示。虚拟仪器具有性能高、功能强、操作方便、自动化程度高、开发周期短以及易于实现软硬件的系统集成和构建多用途的测控系统等优点3。其主要任务是通过软件将计算机硬件与仪器硬件有机结合一起,将以前需硬件实现的相关技术通过软件来实现,完成对被测信号的采集、分析、处理、判断及显示等一系列功能。由于虚拟示波器拥有了灵活、迅速和低成本等优点,使得它逐渐代替了传统的台式仪器4。20世纪70年代,由于个人电脑技术的出现,人们开始考虑用电脑来处理传统仪器测试的数据;20世纪80年代,随着计算机技术的进一步发展,计算机主板上有了多个扩

12、展槽,并出现了插在计算机里的数据采集卡,这样的系统已经可以进行一些简单的数据采集工作,将采集到的数据直接由计算机软件进行处理,这就是虚拟仪器技术的雏形5。凭借电脑强大的运算及分析能力,配合相关的硬件及软件,组合成自己所需的各种仪器,对一些信号(如周期信号)进行处理,这正是虚拟仪器的兴起6。虚拟示波器是虚拟仪器技术的应用,它使用下位机采集现场信号,通过接口电路传输数据到计算机,再借助强大的监控软件模拟示波器的操作面板,实现信号采集、分析、处理、存储、显示、打印输出等功能7,9。世界上第一块声卡魔音卡,是由创新公司董事长沈望傅先生发明的。这只声卡在当时引起了一场轰动。有的人认为,这是一个很好的开端

13、,因为PC终于可以“说话”了,并联想到将来多媒体PC的模样;但另有一些人却认为,这只是一场闹剧(因为当时的声卡根本不能够发出很真实的声音)。但是,10年过后,正如前者所预料的,多媒体PC成了现今的标准,每个人都能利用自己的PC来听CD、玩有声游戏、通过Iphone等网络电话来交谈,几乎每一样事情都和PC音频发生关系。现在看起来,PC如果没有了声卡,也就没有了缤纷多彩的多媒体世界10。声卡是计算机与外部环境联系的重要途径,作为数据采集卡来使用,声卡可以采集音频范围内的信号。麦克风输入的信号和喇叭输出的信号都是模拟信号,而计算机所能识别和处理的信号都是数字信号,声卡的作用之一就是实现模拟信号和数字

14、信号之间的转换11。声卡的组成部分主要包括:声音控制/处理芯片,声音输入输出端口和功放芯片等,其中集成了采样保持、音效处理、A/D转换、D/A转换等电路的声音控制/处理芯片是声卡的核心,它对声卡的性能和档次起到了决定的作用,具有声波采样处理MIDI指令和回放控制等基本功能,有些声音控制/处理芯片还加进了合声、混响、音场调整等功能12。目前,在多数院校的电子学实验教学中,常用的仍然是功能固定的台式示波器。对于一所高等院校而言,台式示波器成本很高,而且对于刚接触的学生来讲,既难以调试,又容易损坏,使用起来极其不方便,而虚拟示波器是利用计算机强大的资源使本来需要硬件实现的技术软件化,以便最大限度的降

15、低系统成本,同时提高系统的灵活性13。虚拟示波器具有如下优点:(1)由于虚拟示波器的内容丰富,人机界面好,可以减轻教师的教学负担,加深学生对知识的理解。(2)提高实验效率,降低教学成本,参数输入简便,结果显示明确。(3)借助虚拟示波器把仪器与计算机相连接,可以充分利用实验资源14。示波器是科研机关、企业研发实验室、大专院所的必备测量设备,传统示波器缺乏相应的计算机接口配合数据采集及数据处理比较困难。随着计算机技术和测量技术的发展,虚拟仪器技术得到飞快发展,虚拟示波器系统也就应运而生15。1.2 国内外研究现状 测试仪器已经有很久的历史,早些时候的一起都是完全的测试设备,比如EEG(electr

16、oencephalo- graph 脑电图描记器)记录系统和示波器,它们包括电源,传感器,数字转换和演示,需要人工的参数设置16。然而随着虚拟仪器技术的发展,采用“虚拟仪器”来取代传统仪器的新的测控方法正在取代传统的测控系统,即利用数据采集卡、信号调理卡或其他计算机外围硬件进行信号的采集与检测。然后由计算机来实现对信号的处理、计算和分析以及测试结果的显示17。LabWindows/CVI是基于标准C语言的集成软件开发环境,其开发虚拟仪器的步骤主要是先确定程序的基本框架,创建用户界面,然后完成程序代码的编写,最后创建工程文件,将程序文件、头文件、用户界面文件加入工程中,编译调试生成可执行文件。虚

17、拟仪器在性能上更具有灵活性用户可根据自身需要定制仪器的功能充分体现了它的优越性彻底打破了传统仪器由厂家定义用户无法改变的模式18,19。1986年,美国国家仪器公司(National Instruments Crop.)首先提出了“软件就是仪器”的概念。将虚拟仪器应用于教学和科研,已成为当今的发展趋势。在采样频率不是很高的情况下,基于计算机声卡的虚拟示波器将更加便宜和灵活,可以利用声卡进行采样和输出,可以实现自动测量,这一点在LabVIEW(包括LabWindows)上已经实现20。基于计算机的虚拟设备已经得到很大发展,在某些程度可以代替传统的仪器仪表测试。设备的各个部分既可以分开工作,又可以

18、协作,具有很大的灵活性。基于声卡的虚拟示波器V0.94巧妙地利用电脑声卡的AD/DA转换电路,把电脑变成一台集信号发生器、数字存储示波器、频率计、万用表等多种功能于一体的仪器。在音频范围内完全可以替代上述各种测量仪器,甚至功能更强大21,22。虚拟仪器产业在国内的现状和发展态势不容乐观。我国高档台式仪器如数字示波器主要依靠进口,一方面这些仪器加工工艺复杂、制造水平要求高,生产突破有困难;另一方面,用户可以将一些先进的数字信号处理算法应用于虚拟仪器的设计,提供传统台式仪器所不具备的功能,而且完全可以通过软件配置实现多功能集成的仪器设计23。而且我国的计算机技术通信电子等产业的起步比较晚,相对滞后

19、与欧美国家,因此我国对虚拟仪器的研究起步也比较晚,发展比较缓慢。一些高等院校和附属高科技公司,在研究和开发仪器产品和虚拟式仪器设计平台以及引进消化NI公司、HP公司的产品等方面做了一系列有益工作,取得了一批瞩目的成果,部分院校的实验室引入了虚拟仪器系统,上海复旦大学、上海交通大学、广州暨南大学、华中理工大学、四川联合大学等24。近一、两年来这些学校在原有的基础上,又开发了一批新的虚拟仪器系统用于教学和科研。其中,华中理工大学机械学院工程测试实验室将其开发成果在网上公开展示。四川联合大学的教师基于虚拟仪器的设计思想,研制了航空电台二线综合测试仪将8台仪器集成于一体,组成虚拟仪器系统,使用方便、灵

20、活。清华大学汽车系利用虚拟仪器技术构建的汽车发动机检测系统,用于汽车发动机的出厂检验。此外,国内己有几家企业在研制PC虚拟仪器,哈工大仪器王电子有限责任公司就是其中之一,它的产品已达到一定的批量。其主要产品有数字存储示波器系列、任意波形发生器及频率计系列、多通道大容量波形记录仪系列25,26。1.3 本文的主要研究内容利用计算机声卡进行A/D转换,将待测电压信号转换为数字量信号,并在LabWindows/CVI下设计可视化操作界面,实时显示采集到的信号及经频谱分析后的曲线,并能对波形进行控制。利用C语言编写相应的代码,在LabWindows/CVI的环境下,实现对声卡采集的信号进行显示、分析、

21、存储等,实现对外界数据的采集和处理,模拟传统示波器的功能,完成基于声卡的虚拟示波器设计。1.4 主要章节安排本说明书主要包括以下几个章节:1)第一章为引言,主要介绍了虚拟仪器(主要是虚拟示波器)的产生的原因以及国内外发展情况的差距,并简单介绍了声卡的由来,最后简要说明了本次设计的主要目的和要完成的内容。2)第二章介绍如何使用LabWindows/CVI。它作为一门通用测试系统开发工具,已经为很多工程师和科学家所接受。所以,通过描述它的使用方法,更容易了解所编程序的步骤和思路。 3)第三章为虚拟示波器的模块化设计。这种将每个主要的功能分成一个模块的方法,使得编程过程中条理清晰,易于发现错误,提高

22、工作的效率。其中包括:信号采集模块、波形显示模块、频谱分析模块、波形调节模块、信号存储模块等。4)第四章为实验验证阶段。利用台式机进行测试:利用信号发生器产生信号,接入声卡的Line In输入端,并且将信号同时接到传统数字存储示波器,执行程序,将电脑屏幕显示的波形与示波器显示波形进行比对,以此判断出本测试系统的精度。1.5 本章小结本章简单介绍了课题研究的背景和意义,并且对声卡的产生历史、虚拟示波器的国内外研究现状以及本次课题的主要研究内容和组成也做了一些介绍。下一章将对应用软件LabWindows/CVI进行简单的描述。2 LabWindows/CVI编程环境的介绍2.1 LabWindow

23、s/CVI简介本次毕业设计首先要了解所用软件LabWindows/CVI的具体用法,通过对工具的介绍,逐步过渡到设计的思路和具体实现办法。LabWindows/CVI是National Instruments公司推出的一套面向测控领域的软件开发平台,它以ANSI C为核心,将功能强大,使用灵活的C语言平台与数据采集,分析和表达的测控专业工具有机地接和起来.它的集成化开发平台,交互式编程方法,丰富的控件和库函数大大增强了C语言的功能,为熟悉C语言的开发人员建立检测系统、自动测量环境、数据采集系统、过程监控系统等提供了一个理想的软件开发环境,具有广阔的开发前景和市场价值,正是由于这些优点,它早就已

24、经被许许多多的工程师和科学家所接受和喜爱,各种关于虚拟仪器开发的报刊和书籍也蜂拥而至,这使得LabWindows/CVI应用越来越广泛。2.2 创建用户界面一个良好的交互界面能够让用户对设计者开发的系统产生更大的兴趣,提高工作和学习的效率,增加了一种美感,所以这对于开发者来说是必须关注的。打开软件后,会出现软件的许多选项,比如:打开、创建等。第一次使用时点击创建新的工程,点击New>Project,如图2.1,下一次打开进入时可以直接进入上次的工程,无需重新创建,就可继续未完成的工作。进入后点击File>New>User Interface(*.uir)创建一个用户接口文件(

25、*.uir) ,会出现一个默认的面板,如图2.2,这样可以在面板上添加所需部件了。 图2.1 创建工程 图2.2创建界面面板创建结束后,就可以通过右键或者点击工具栏的Create按钮可以在面板上加入需要的控件,比如:Numeric,Text,Command Button等,如图2.3。根据个人的需要添加后,对控件的Control进行修改(具体的修改方式由个人需要而定)。比如:修改Graph的横纵坐标,修改Command Button的标签,或者加入Ring Dial的索引等等,如图2.4。图2.3添加控件图2.4 对控件的Control进行修改2.3 添加相应代码在这里可以很明显的看出LabW

26、indows/CVI的强大之处了。这是由于:设置好界面后,利用LabWindows/CVI可以直接生成代码框架,对于每个填写Callback function的控件都有生成的函数框架,另外还有主函数。从用户图形界面窗口中选择:Code>>Generate>>All Code,如图2.5,并且会选择需要程序停止时使用哪个控件,非常的方便和人性化。这个时候即使什么都不做了,程序会显示设计好的界面,并且有停止按钮,要想实现设定好的其他按钮功能,比如:触发,光标定位等,就需要望函数中添加代码。当然,一个复杂的程序光有生成好的框架是不够的,还需要通过其他方式,比如多线程编写部分代

27、码,能够使代码简洁,执行效率高,更有效利用内存。我在程序中写了一些自己的函数,比如,int MyFunction(void *Data, int Resolution, int NumDataPerChannel, int Stereo)等等。点击Run>Debug就可以执行程序,如果程序正确无误,就会成功的执行,如图2.6。 图2.5 生成代码 图2.6 执行程序2.4 本章小结本章首先简单介绍了设计软件的环境-LabWindows/CVI。先简单描述下它的功能,这也就是为什么选择这款软件的主要原因之一;接下来简单描述进行虚拟仪器设计的一般步骤:设计面板,生成并添加代码,执行程序。3

28、虚拟示波器的模块化设计示波器是生产实践和科学实验等常用的仪器之一,具有不可替代的作用。但是传统示波器外形笨重,对使用者要求较高,而且生产传统的台式示波器工艺复杂、技术要求比较高、生产成本大,不可能全面推广到各个科研和学习场所中,这就使得虚拟示波器应运而生,虚拟示波器相对传统示波器有很多的优点,如表3.1。本文所设计的是基于声卡的虚拟示波器,是在LabWindows/CVI 2009平台下实现的,声卡是一个非常优秀的音频信号采集系统,技术已经非常的成熟,其数字信号处理器包括模数变换器ADC(Analogue Digital Converter)和数模变换器DAC(Digital Analogue

29、 Converter),本文只用到ADC,用于采集音频信号。在前人的基础上,利用前辈们设计好的声卡驱动,实现信号的采集和一系列的功能。由于作者的能力有限,只能实现传统示波器的基本功能,但对于基本信号的测量和观测,已经能够满足普通教学的需要,能为许多需要它的地方节省开支和资源。为了方便设计和其他需要的朋友阅读,我采取了模块化设计的方法,其中包括信号采集模块、波形显示模块、频谱分析模块、波形调节模块、信号存储模块以及其他功能模块等。表3.1 传统仪器和虚拟仪器对比 3.1 信号采集模块本文的题目是基于声卡的虚拟示波器,顾名思义,是在声卡的基础上设计的虚拟示波器,而不是常用的数据采集卡(DAQ),自

30、然不能直接运用LabWindows/CVI的函数库来实现。信号的是从声卡输入端接入的,而官方又没有提供相应的驱动,所以借用了参考书驱动声卡的方法28。声卡的输入端口有两个:分别是Line in端口和Mic in端口。Line in端口也就是线形输入接口,将品质较好的声音、音乐信号输入;Mic in端口用于连接麦克风(话筒),也就是录制声音。但是我们这里只能用Line in,这是由于Mic in具有放大作用,在声卡的前置放大器中将信号放大了,而这个放大倍数又是不确定的,它受声卡类型、系统、驱动等的影响。在主函数中,调用了声卡配置函数,用于获取声卡的配置信息,包括采样点数、采样位数、回调函数等。在

31、回调函数MyFunction()中,首先获取通道数,然后清除可能存在的曲线(如果事先进行了触发),接下来利用switch(Resolution)进行分辨率的判断,因为大多数声卡的配置都是16位的,本文利用的声卡也是如此。所以在16位的情况下,判断声卡的设置是不是立体声,如果是,则进行双声道采集,将获取的data也就是离散后的点的值存到相应的数组中,再进行接下来的一系列操作。信号采集是整个系统设计的第一步,是实现虚拟示波器的基础,只有将信号采集进来之后,才能够进行接下来一系列的工作,比如显示、傅立叶变换、存储等等。3.2 波形显示模块虚拟示波器界面是人机交换的唯一途径,合理的、舒适的界面会让用户

32、感觉到舒适和愉悦,非常有利于工作和学习,提高效率,所以一个良好的可视化界面对于设计者来说至关重要,这直接影响着产品的好坏,直接影响它的推广度,而LabWindows/CVI恰恰拥有图形化的界面,可以很方便的在面板上添加所需要的控件,而不需要为了编制图形控件浪费大量的时间,这为设计者提供了一个很好的展示平台。在面板上添加一个用于图形显示的控件,这样就创建了显示屏,双击它进行属性修改:将Callback function设置为show(这是回调函数的名称),Bottom X-Axis内的最小值和最大值分别设置为0和1023(这是由于屏幕显示的是1024个点,每次数据更新都是1024个点同时更新),

33、Left Y-Axis内的最小值和最大值分别设置为-1和+1(声卡的输入范围是固定的,如果超过1V,可能会烧坏声卡)。为了实现光标定位,还需要添加Cursors,在这个选项中,将光标的数量设置为2,并且将光标的颜色分别设置为紫色和浅绿色,并将交叉线形设置为长交叉(这样使用起来更方便),其他的可以按照自己的喜好进行设置。在面板上添加一个用于表示控制开关的控件,单击右键,将标签改为实时显示,并将Callback function 设置为realtime_show,默认状态设置为on。再设置三个用于控制开始、停止和关闭的三个控件,分别将标签设置为开始采集、停止采集、关闭,颜色大小可以按照自己习惯的方

34、式。另外,设置两个圆形开关控件,设置为通道1和通道2,默认状态设置为on。然后对控件点击右键,选择Generate Control Callback,生成函数框架,然后添加函数功能。在“开始采集”控件中,一旦触发,先将触发模式关掉,开始采集里面调用MicStart()函数,My Function()开始工作,信号采集进来,利用if()语句进行判断实时显示按钮是否被选中,并且保证触发没有工作,通过判断通道1或2才能将其中的波形显示到Graph上,如果两个通道都没有被选中,则利用Message Popup()提出警告,“请选择通道1或通道2”如图3.1;同样,停止采集时,调用MicPause()函

35、数,My Function()停止工作。在realtime_show中,一旦程序执行时,开始采集后点击控件(同时实时显示),则会显示从声卡读取到的信号波形,可以在Graph上实时地观测到,如图3.2。 图3.1 选择通道 图3.2 实时显示波形3.3 频谱分析模块FFT(fast Fourier transform),即快速傅立叶变换,是一种DFT的高效算法,是一种线性的积分变换,属于谐波分析,也可用于计算离散傅里叶变换的逆变换。其算法的原理是通过许多小的更加容易进行的变换去实现大规模的变换,降低了运算要求,提高了运算速度。快速傅里叶变换有广泛的应用,如数字信号处理、计算大整数乘法、求解偏微分

36、方程等等。本文中并不需要了解复杂的算法,只需要利用软件本身设计好的函数就可以,因为软件设计者已经将复杂难懂的算法利用程序代码实现了,这里再次体现了LabWindows/CVI的优越性。在面板上添加一个选择控件,标签设置为FFT计算,默认值设置为off,Callback function设置为fft,然后生成函数框架,在框架中添加一些语句。当控件被点击后,先将面板的实时显示控件、波形相加控件设置为不选中,FFT计算控件设置为选中,并将定义的全局变量real_time_show_mode(实时显示)设置为0,wave_sum_mode(波形相加)设置为0,fft_calculate_mode(傅立

37、叶计算)设置为1。不仅如此,此时还要修改显示纵坐标,这是由于快速傅立叶变换后,幅值不是采样点的大小值,只是代表着能量大小的包络,这里只能说明对于相应信号进行变化后的大致情况,或者说是快速傅立叶变化后的形状等等。为了能够描述出变化后的形状,使用SetAxisScalingMode()函数设置变化后的纵坐标,这里的设定可以说是完全是为MyFunction()函数服务的,信号采集进来之后,进行傅立叶变换:首先将采样点值设置为FFT的实部,通过循环使1024个点的虚部全部设定为0,然后利用FFT函数(FFT (wave, img, NumDataPerChannel),实现了傅立叶变换,再通过极坐标转

38、换函数ToPolar1D ()计算出FFT后的幅值大小,再利用画图函数PlotY()将FFT后的波形显示在Graph上,如图3.3所示。图3.3 声音信号的快速傅立叶变换3.4 波形调节模块在使用传统示波器时,很少是只查看原始波形的,大多需要对采集进来的波形进行适当的调节,比如移动、放大等,这样做的目的是能够对信号信息更加的了解,便于进行分析和使用。因此,设计虚拟示波器时,必须要考虑到这些波形调节的问题,使得它更逼近于传统示波器,甚至在部分功能上超越传统示波器,是用户拥有更佳的操作感受和更多的实用功能。本次基于声卡的虚拟示波器设计中,波形调节模块包括水平移动,垂直移动,水平放大缩小,垂直放大缩

39、小,光标定位和触发控制,其中水平移动和垂直移动作为一个模块,水平放缩和垂直放缩作为一个模块。这些都是用户在使用传统示波器常用的功能,对于使用者来讲是必不可少的。当然也是本文内容的重要环节,下面按照设计的顺序逐一叙述。1)水平移动和垂直移动水平移动和垂直移动的原理是一样的,都是通过修改坐标来实现的,只是设定的移动值大小不同而已。单击右键,设置两个旋钮,分别将标签设定为水平移动和垂直移动,相当于传统示波器的水平和垂直旋钮,并将Callback Function分别设置为horizontal_move和vertical_move。编辑Dial时,点击Label/Value Pairs:水平移动控件添

40、加11个项目,标签设置为0-10,对应值是-250250,递增值是50,并把默认标签设置为5(0);垂直控件同样添加11个项目,标签设置也是0-10,只是对应值是-0.50.5,递增值是0.1,默认标签也设置为5(0)。这里的50和0.1就是在程序执行时旋转一格旋钮时移动的大小,是根据程序的要求设置的。图3.4 移动波形流程图在编制程序时,要设定一个临时值tmp,用于获取当前控件的Value大小,使用GetCtrlVal()语句;然后将这个值与cur_horizon_move_index(确切地说是上一次旋钮停在的位置值大小,初始值是5)进行比较:如果tmp>cur_horizon_mo

41、ve_index,则说明旋钮向右旋转调节了,表示将图像向右移动(或者向上移动)为了实现这个功能,将坐标的值最大值和最小值都减小,利用cur_x_min-=STEP_X来实现,通过SetAxisRange()语句实现;同样,如果tmp<cur_horizon_move_index,则说明旋钮向左旋转调节了,表示将图像向左移动(或者向下移动),实现的方法类似。值得注意的是,判断时cur_x_min和cur_x_max这两个坐标当前最小值和最大值也一定要随时修改,判断完后一定要修改cur_horizon_move_index的值,将它设置为tmp,如图3.4。只有这样才能保证移动的正确性,这样

42、就可以实现水平和垂直移动,如图3.5,3.6,3.7。 图3.5 原始波形图3.6 水平移动后的波形 图3.7 垂直移动后的波形2)水平缩放和垂直缩放在实际应用中,将图形放大和缩小狠关键的。很多情况下,用户会将波形放大或者缩小:在显示屏上波形比较密的情况下,需要看清波形是否存在失真,这时候需要将波形放大;或者显示屏上显示的波形不够一个周期,需要看清到底是什么样子的波形,这时需要将现有的波形进行缩小。通过以上类似的处理,能够获取更多的数据信息和规律,能够从整体和局部两个方面来分析现有的信号,这对于信号处理有着非常重要的意义,从而更快更好地完成工作。图3.8 坐标放大,图像缩小原理图3.9 坐标缩

43、小,图像放大原理为了与移动旋钮有所区别,重新选择两个跟移动不同的旋钮,分别将标签设定为水平缩放和垂直缩放,相当于传统示波器的水平和垂直缩放旋钮,将Callback Function分别设置为horizontal_zoom和vertical_zoom。类似地,也要在这两个控件上添加标签:编辑Knob时,点击Label/Value Pairs:水平移动控件添加11个项目,标签设置为0-10,对应值是1/3232,递增倍数是2,并把默认标签设置为1(0)(表示不放大的信号状态),对于垂直控件同样如此。虽然实现缩放时利用的也是修改坐标的方法,但是实现的方法却要麻烦点:设定当tmp<cur_hor

44、izon_scale_index时实现缩小,这时需要一个计算公式(tmp1和tmp2初始值分别是当前坐标的最大值和最小值,默认值是0和1023,也就是原始坐标),cur_x_min=tmp1-(tmp2-tmp1)/2.0和 cur_x_max=tmp2+(tmp2-tmp1)/2.0,分别得到新的坐标最小值和最大值,如图3.8,利用上述计算,可以实现如下的坐标放大,图像缩小。通过将坐标放大实现图像缩小;放大时的原理是一样的,只是计算公式不同,设定当tmp>cur_horizon_scale_index时实现放大,这时设定的最大和最小值分别为cur_x_min=tmp1+(tmp2-tm

45、p1)/4.0和cur_x_max=tmp2-(tmp2-tmp1)/4.0,通过将坐标缩小实现图像放大,如图3.9。修改值后,还是利用SetAxisRange()函数来修改坐标,同样要修改cur_horizon_move_index的值,将它设置为tmp。水平缩放和垂直缩放的原理和计算公式是完全一样的,只是具体执行的控件不同,以区分他们的不同功能,如图3.10,3.11,3.12。图3.10 初始波形图3.11 水平放大图3.12 垂直放大3)光标定位光标功能对于使用者来讲是非常重要的。因为人眼的误差很大,可以说是极大地浪费了示波器的资源,而拥有光标功能就使得情况得到改善,因为它把面板上的某

46、点信息数字化了,我们可以直接读取数值的大小就可以了,不但提高了精度,而且使用时更佳的方便和直观。对于测量工作来说,有着极为重要的意义。本来是打算利用StripChart作为显示屏,但是StripChart本身并没有光标的功能,在三个可供选择的显示面板中,只有Graph才有光标功能,所以只能使用Graph。为了显示当前坐标值以及差值,在面板上添加6个Numeric控件,分别用来代表光标1和2的X、Y以及X和Y,并用text控件来修饰它们,但这些控件都只是显示作用(Control mode都选择Indicator,精度是double),没有回调函数,实现光标定位功能的代码设置在Graph中,通过回

47、调函数show()实现,只要在程序执行时点击显示屏,光标功能就生效了,首先通过GetGraphCursor()函数分别获取x1、y1、x2、y2的坐标,再通过公式换算出实际的时间大小,显示在下边的Numeric上。由于采样频率是22.04KHz,所以采样点的两点之间的间距是1/22.04K=0.454ms,x的值就是利用0.454*x,y的值需要调试修改公式,用实际的信号接进之后才能修改,x和y分别用time_diff=(x1-x2)>0)?(x1-x2):(x2-x1)*0.0454和vlotage_diff=(y1-y2)>0)?(y1-y2):(y2-y1)这两个判断语句来实

48、现,从而保证了结果是正值,运算结束后,通过SetCtrlVal()语句将结果显示到相应的Numeric上,实现了光标定位的功能,如图3.13。图3.13 光标定位功能4)触发控制触发控制是示波器必不可少的功能。当信号接入示波器后,并不是所有的信号都是用户所关心的,而事实上周围必然存在干扰信号,这是无法避免的。这时,研究一种方法可以使得面板上只显示用户感兴趣的信号变得十分重要,触发就这样产生了。传统示波器的触发方式有很多种,比如:边沿触发、脉冲触发、斜率触发、交替触发等。本系统只设计一种边沿触发方式(包括上升沿触发和下降沿触发),基本可以满足一般用户的需求。 图3.14 触发原理图3.15 触发

49、流程图触发的原理如图3.14,首先设置一个触发电平作为基准电平,当采样点中有一个点恰好大于触发电平,比如图中的i点,而下一个点又恰好小于触发电平,也就是i+1点,如果这时设定的是下降沿触发,则触发功能生效,显示当前采集到的1024个点;如果两个相邻的点的状况类似于图中的j和j+1,而这时设置的又是上升沿触发,则触发功能同样生效,显示当前波形。在具体操作时,在面板上设置一些控件,包括触发的开始、触发电平、触发模式、触发通道等。利用触发的基本原理,在设定好触发电平、模式和通道以后,点击开始触发,就可以在Graph上看到完整的波形。触发电平设置在1V+1V之间,触发模式包括上升沿触发和下降沿触发,可

50、以任意指定通道1或2进行触发,实现的过程是:从每波采集到的1024个点中进行扫描进行判断,例如是上升沿触发,触发电平是0.5V,触发通过时通道2,则当通道2的任意两个点之间满足前一个点小于0.5V,后一个点大于0.5V,则满足了触发条件,将这波采集的1024个点全部实现出来,实现了触发。图3.16 触发功能实现触发的原理似乎很简单,但是用代码来实现还是存在难题的。因为进行触发的时候,只要没有满足触发条件,面板上其他的功能是不能受到影响的,这就要保证触发模块时时等待着条件的满足。为了实现这样的功能,采用多线程的方法,线程是可由系统调度的一个最简单的代码单元,负责执行包含在进程的地址空间中的程序代

51、码。在LabWindows/CVI中,可以使用CmtScheduleThreadPoolFunctionAdv()函数创建一个线程池,就可以不通过主函数调用而直接执行。在面板上,设置开始触发、触发通道、触发电平、触发模式这几项功能按钮。在程序执行的情况下,可以设置触发通道(包括通道1和通道2)、设置触发电平(限定在1V以内)、设置触发模式,设置完成后,点击开始触发,则会执行trigger()函数,获取当前值:如果获取值为1,删除目前显示的波形,将其它控件都激活,设置目前事件为1;如果为获取值为0,则停止触发相关控件的激活状态。相关工作完成后,触发条件得到满足,进行一系列的判断,如图3.15。先

52、进行触发模式的判断,再进行触发通道的判断,当满足相应的条件时,则会显示这波图形,如图3.16。图3.17 读取存储信息3.5 信号存储模块相对于传统示波器,虚拟示波器的存储更加的方便,无须另外插入USB存储设备而是直接可以将信号存储到硬盘中,并且可以随时打开。为了实现信号存储,在程序的开始就创建了一个以系统时间为名称的txt文本文件,利用GetSystemTime()函数获取系统实时时间,并作为数据源写到字符串数组中,再使用Fmt()函数通过“%s-%s-%s.txt”的格式创建文本名称,放到fileName数组中,然后打开相应的文件,将“通道1”和“通道2”先写到文本中,以便后来察看存储文件

53、时能够分得出两个通道的信号。点击开始采集后,信号就从声卡输入端读了进来,如果判断文件存储模块被选中,则将采集到的数据点写到数组,经过1024个循环就将这一波数存储到了相应的文件中。为了丰富本系统的功能,实现用户在安装好发布文件后直接可以打开存储文件,不再需要通过打开驱动器才能打开相应文件,所以开发了简单方便的打开文件功能。在桌面设置Ring、String、Command Button和Tree四个空间,分别用来作为驱动器选择、路径选择、打开和浏览数据,相应的回调函数分别是drive、path、open(Tree没有回调函数)。生成函数框架后,为了方便,手动编写drivevolume()函数以供

54、调用。在drivevolume()函数中,通过GetDrive()函数获取驱动器个数,然后利用循环分别为各个盘符命名,从C开始,依次递增,并将其显示在Ring_3控件中,而且能够判断新插入的外界设备,比如优盘。然后在相应的回调函数中添加相应代码:在drive()函数中,首先调用drivevolume()函数,判断所选的盘符,并将其显示在String控件(作为路径)上,并设定可通过键盘进行输入,设置文件浏览属性,实现浏览驱动器下的文件;在path()函数中,获取当前路径,并更新文件浏览目录;在open()函数中,利用默认方式打开相应的文件。通过以上步骤,完成了打开存储文件的功能,如图3.17。3

55、.6 其他功能模块 在程序设计的尾声阶段,为了能够更好地分析采样信号的结构,所以添加了一些小功能,比如最值的获取、信号频率等。利用analysis.h中的MaxMin1D()函数可以将采集到的信号进行分析,从中得到最大值最小值和它们的位置,但本文只需要得到数值的大小,并利用NUMERIC控件在面板上显示出来,只要信号采集进来,无论在面板上显示与否,最值总是可以被计算出。同时设计了信号频率按钮,因为本系统地FFT过于粗糙,只能大致的看出波形,却不能计算出信号的频率,但这同样需要利用光标功能,只是光标功能的延伸罢了,比如:当检测正弦波的时候,将两个光标分别指在两个波峰时,就可以算出这个正弦波的频率

56、,其实就是利用将两个点的横坐标之差的倒数显示即可。另外,设定了采样点数的控件,原理是将显示面板的横坐标进行修改,可以满足实时显示时对显示点数的修改,实现采样点数的控制。3.7 本章小结 本章是论文中最主要的部分,利用模块化的设计方法,将信号的采集、分析和处理更加详细地进行分析。这部分细化为信号采集模块、波形显示模块、频谱分析模块、波形调节模块、信号存储模块和其他功能模块,每部分都具体地阐述了设计的思路和具体函数执行的步骤,并且通过流程图和表格的形式解释说明,每个模块最后执行的结果使用截图保存下来,用来说明设计的合理性。总之,全部的思路和结果都在本章得到呈现,完成了基于声卡的虚拟示波器设计。4

57、虚拟示波器实验验证无论在设计时考虑的多么周到,总会有一些问题是我们意想不到的,这就需要我们反复不断的实验,在实验的过程中找到缺陷所在并及时改正,以此来将本系统更加的完善和保证其合理性。实验的仪器包括信号发生器、示波器、装有LabWindows/CVI软件的台式机,利用信号发生器产生信号,分别接入示波器和台式机声卡的Line in口,运行程序,比较两个屏幕产生的波形,由于虚拟示波器的两个通道具有相同效果,所以只选择了通道1进行测试。4.1 光标功能验证光标功能是验证的关键,合理实用的光标可以确定波形的任何一点的信息,包括幅值和相对时间。而前面设计的许多功能都是利用光标功能实现的,比如,峰峰值检测

58、、周期测试等。通过多次测量数据的方法进行统计,然后求平均值算出平均误差大概是多少,由此可以判断出本系统的精度。1)峰峰值验证实验中使用的是正弦波,只要取任意波峰和波谷(或者说是所取正弦波的最大值和最小值),就可以检测到波形的峰峰值,然后记录多组数据,统计分析误差究竟是多少,如表4.1。图4.1、4.2就是记录下台式机显示屏上的数据同传统示波器的值进行的对比图。表4.1 峰值检测判断误差图4.1 传统示波器检测到峰峰值为1V的正弦波图4.2 通过对比峰峰值检测测试根据表格4.1记录的数据,通过以下式子求平均值:(2.85+0.00+2.44+1.00+0.83+0.68+1.20+0.55)÷8=1.19,根据算式得到的结果,可得误差值为1.19%,也就是峰峰值检测精度。2)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论