信号采集与分析系统广泛地用于工业控制、测试计量、仪器仪表行业.随着“虚拟仪器”概念的提出,以计算机为基础,配以高性能的数据采集卡和相关软件组成的信号采集与分析系统由于较高的性价比而日益为用户青睐.数据采集卡的性能一般取决于其采样频率和位数,高速高位数的数据采集卡往往意味着高价格.而很多场合,信号频率在音频范围内,并不要求很高的采样频率.计算机声卡,虽然平时只是用来录音、放音,但它其实是一块性能不错的A/D、D/A转换卡.即使是最普通的声卡,一般都能实现16位、双通道、最高44.1kHz的采样频率,足以应付大多数信号采集任务,而其价格却只有专用数据采集卡的几分之一,甚至几十分之一[1].将声卡作为数据采集卡,最简单的方式是用录音程序录下声卡的输入信号,然后离线处理,但若要实时地处理输入信号,就必须对声卡进行底层编程.由于声卡是Windows操作系统的一个标准多媒体设备,制造商已经为声卡开发了适用于Windows的底层硬件驱动程序,而Windows对声卡的操作是通过多媒体API(应用程序接口)函数,这就实现了设备无关性.编程人员只需熟悉API函数,而不需知道具体什么声卡,极大地方便了声卡应用程序的开发.在众多开发工具中,选择C++Builder的原因是:它是基于C/C++语言的可视化快速应用程序开发工具,其丰富的VCL组件涵盖Windows界面、数据库开发、系统编程以及网络元素等各个方面,同时支持WindowsAPI函数的调用和内嵌汇编语言,方便对硬件的编程操作,使编程人员可以轻而易举地开发出界面美观、功能强大的应用程序.1声卡实现数据采集的基本操作在C++Builder中对声卡编程,首先要在源文件中包含“mmsystem.h”头文件,该文件定义了所有有关声卡操作的API函数,这些函数均带有wave*的前缀.1.1打开波形输入设备函数waveInOpen用于打开波形输入设备,其原型如下:MMRESULTwaveInOpen{LPHWAVEINphwi,//输入设备句柄UINTuDeviceID,//输入设备的标记号LPWAVEFORMATEXpwfx,//录音格式指针DWORDdwCallback,//处理MM_WIM_*消息的回调函数或窗口句柄,线程IDDWORDdwCallbackInstance,DWORDfdwOpen//处理消息方式的符号位);其中pwfx指定了声卡做数据采集时的几个关键参数,如采样频率、位数等,它是一个结构WAVE-FORMATEX:typedefstruct{WORDwFormatTag;//采样数据格式,目前只能用PCM格式WORDnChannels;//通道数目(1或2)DWORDnSamplesPerSec;//采样频率,44100,22050,或11025DWORDnAvgBytesPerSec;//每秒采样得到的数据//等于nSamplesPerSec*nChannels*wBit-PerSample/8WORDnBlockAlign;//记录区块对齐的单位,等于nChannels*wBitsPerSample/8WORDwBitsPerSample;//量化位数,8或16WORDcbSize;//非PCM格式额外信息}WAVEFORMATEX;定义上述函数所需的各参数并赋值,就可以打开声卡的输入通道.1.2给数据分配缓冲区因为声卡是以DMA(直接内存访问)方式工作的,所以必须为采样数据准备缓冲区.如果是非实时采集,那么只要按采样时间采样频率量化位数的大小在内存里开辟一块空间就可以了,但若是实时采集,