智能测试
基于计算机声卡的虚拟实验仪器开发研究
虚拟仪器(Virtual Intrument)技术是测控领域测量的一个重要方向,是计算机技术与仪器技术深层次结合产生的全新概念的仪器,是对传统仪器概念的重大突破。为了满足高校、科研机构等对一些实验设备的需求,在低成本条件下开发一些虚拟仪器成为一种趋势。组建虚拟示波器为例介绍如何开发虚拟实验仪器。
1 从数据采集的角度看声卡
从数据采集的角度来看,声卡是一种音频范围内的数据采集卡,是计算机与外部的模拟量环境联系的重要途径。
1.1 声卡的工作原理
声卡的工作原理其实很简单,其工作流程图如图1所示。我们知道,麦克风和喇叭所用的都是模拟信号,而电脑所能处理的都是数字信号,声卡的作用就是实现两者的转换。从结构上分,声卡可分为模数转换电路和数模转换电路两部分,模数转换电路负责将麦克风等声音输入设备采到的模拟声音信号转换为电脑能处理的数字信号;而数模转换电路负责将电脑使用的数字声音信号转换为喇叭等设备能使用的模拟信号。
2 声卡的主要技术参数
(1)采样的位数。
采样位数可以理解为声卡处理声音的解析度。这个数值越大,解析度就越高,录制和回放的声音也就越真实。声卡的位是指声卡在采集和播放声音文件时所使用的数字声音信号的二进制位数,它客观地反映了数字声音信号对输入声音信号描述的准确度。例如,8位代表28=256;16位则代表216=64000。比较一下一段相同的音乐信息,16位声卡能把它分为64000个精度单位进行处理,而8位声卡只能处理256个精度单位,终采样效果自然是无法相提并论的。
(2)采样频率。
目前,声卡的采样频率是44.1kHz。少数达到48kHz。对于民用声卡,一般将采样频率设为4档,分别是44.1kHz、22.05kHz、11.025kHz和8kHz。22.05kHz只能达到FM广播的声音品质;44.1kHz是理论上的CD音质界限,48kHz则更好一些。对20kHz范围内的音频信号,的采样频率才48kHz,虽然理论上没问题,但似乎余量不大。使用声卡比较大的局限在于它不允许用户在采样频率之下随意设定采样频率,而只能分为4档设定。这样虽然可使制造成本降低,但却不便于使用。用户基本上不可能控制整周期采样,只能通过信号处理的方法来弥补非整周期采样带来的问题。
(3) 缓冲区。
与一般数据采集卡不同,声卡面临的D/A和A/D任务通常是连续状态的。为了在一个简洁的结构下较好地完成某个任务,声卡缓冲区的设计有其独到之处。为了节省CPU资源,计算机的CPU并不是每次声卡A/D或D/A结束后都要响应中断,而是采用了缓冲区的工作方式。在这种工作方式下,声卡的A/D、D/A都对某一缓冲区进行操作。以输入声音的A/D变换为例,每次转换完毕后,声卡控制芯片都将数据存放在缓冲区,待缓冲区满时,发出中断给CPU,CPU响应中断后性将缓冲区内的数据全部读走。计算机总线的数据传输速率非常高,读取缓冲区数据所用时间极短,不会影响A/D变换的连续性。缓冲区的工作方式大大降低了CPU响应中断的频度,节省了系统资源。声卡输出声音时的A/D变换也是类似的。
一般声卡使用的缓冲区长度的默认值是8KB(8192字节)。这是由于对X86系列处理器来说,在保护模式(Windows等系统使用的CPU工作方式下)下,内存以8KB为单位被分成很多页,对内存的任何访问都是按页进行的,CPU保证了读写8KB长度的内存缓冲区时,速度足够快,并且一般不会被其他外来事件打断。设置8192字节或其整数倍(例如32768字节)大小的缓冲区,可以较好地保证声卡与CPU的协调工作。
(4) 无基准电压。
声卡不提供基准电压,因此无论是A/D还是D/A在使用时,都需要用户自己参照基准电压进行标定。
(5)声卡频率范围与频率响应。
某声卡的频率响应如图2所示,可以看出在200Hz~5kHz之间的曲线还是比较平坦的,其余部分信号有较多衰减。在合适的频率范围内,可以用声卡代替昂贵的数据采集卡进行工作。
2 利用G语言LabVIEW组建虚拟实验仪器
虚拟仪器是在美国国家仪器公司(National Instruments Corp.简称NI)于1986年提出的“软件就是仪器”这一口号的基础上发展起来的,其概念是用户在通用计算机平台上,在必要的数据采集硬件的支持下,根据测试任务的需要,通过软件设计来实现和扩展传统仪器的功能。传统台式仪器是由厂家设计并定义好功能的一个封闭结构,有固定的输入/输出接口和仪器操作面板。每种仪器只能实现一类特定的测试功能,并以确定的方式提供给用户。虚拟仪器的出现,打破了传统仪器由厂家定义、用户无法改变的模式,使得用户可以根据自己的要求,设计自己的仪器系统,并可通过修改软件来改变或增减仪器的功能,真正体现了“软件就是仪器”这一新概念。
(1)G语言LabVIEW关于声卡的模块介绍。
LabVIEW中提供了一系列使用Windows底层函数编写的声卡有关的函数。这些函数集中在Sound VI下。由于使用Windows底层函数直接与声卡驱动程序打交道,因而封装层次低,速度快,而且可以访问,采集缓冲区中任意位置的数据,具有很大的灵活性,能够满足实时不间断采集的需要。
LabVIEW函数库中Sound Input子模版(Functions Palette→Graphics&Sound→Sound→Sound Input)提供了声卡函数,可以通过声卡采集外部模拟信号。
(2)基于声卡的虚拟示波器的组建。
应用LabVIEW构建基于声卡的虚拟示波器,其整体思想就是在一个While循环中,添加各输入节点,使其对采集到的声音波形进行显示,而在内部又添加了若干的属性节点来对各种附加功能进行实现。流程图如图3所示。
虚拟示波器的软件的设计是把整个软件分别分成几个模块,然后组建成一个整体。分别为数据采集,存储,显示,处理等。
数据采集模块是虚拟示波器软件的硬件驱动部分,在这里主要是利用LabVIEW里面的声卡函数完成声卡的硬件参数设置、启动声卡采集数据、等待采样数据缓冲区满的消息、通知声卡停止采集等任务。
波形显示模块使用了波形操作函数,主要用到Build Waveform函数。Build Waveform函数。建立或修改已有的波形。默认情况下函数只有waveform和t0输入端子,向下拖拽函数下边沿还可以增加dt、Y和attribuates输入端子。使用操作工具单击端子可以弹出元素选择快捷菜单。如果waveform端子没有接入,则Build Waveform根据输入参数建立新的波形数据,并在输出端子中返回。在本设计中,只用到t0,dt,Y三个输入端子。其中t0为波形的起始时间,dt为波形数据点中间的时间间隔或持续时间,Y为包含了波形的数据值。此处,设置起始时间为0,但因为数据格式不匹配,增加了一个数据格式转换函数to time stamp,从而把一个数值转换成时间值。dt值取自SI Config的格式中的采样倒数,倒数取得的方法利用了reciprocal函数。Y值来自SI Read的stereo 16-bit输出端子。
因为篇幅有限,不能对各个模块进行详细介绍。下面是组建好的示波器。
3 虚拟示波器和传统示波器的比较
虚拟示波器的优势在于可由用户定义自己的专用仪器系统,且功能灵活,很容易构建,所以应用面极为广泛。尤其在科研、开发、测量、检测、计量等领域更是不可多得的好工具。虚拟示波器技术先进,十分符合国际上流行的“硬件软件化”的发展趋势。它功能强大,可实现传统示波器的全部功能,而且还有传统示波器所不具备的功能,如实时存储波形、数据存盘以及远程数据采集等功能。它操作灵活,完全图形化界面,风格简约,符合传统设备的使用习惯,用户不经培训既可迅速掌握操作规程;它集成方便,可以和高速数据采集设备协同工作。
4 结束语
利用计算机声卡在音频范围内代替专用的数据采集卡进行数据采样和输出,在此基础上构建的虚拟仪器,具有成本低、兼容性好、通用性和灵活性强的优点。学生可将用户程序安装在自己的计算机上,就能在不增加硬件投资的情况下,拥有自己的示波器等仪器。利用同样的原理,用户可以开发频谱仪,信号发生器等各种实验仪器。