为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于VC++的虚拟声卡示波器设计

2018-06-28 10页 doc 27KB 26阅读

用户头像

is_589748

暂无简介

举报
基于VC++的虚拟声卡示波器设计基于VC++的虚拟声卡示波器设计 基于VC,,的虚拟声卡示波器设计 $2s卷第5期武汉理工大学-信息与管理工程版V01.28No.5 Mav.2oo62006年5月JOURNALOFWUT(INFOR^ON&基垦盟 文章编号:1007—144X(2006)05—0058—04 基于VC++的虚拟声卡示波器设计 胡合松,胡荣强 (武汉理_丁大学自动化学院,湖北武汉430070) 摘要:声卡作为一个输入输出设备,除了能播放声音,还可以用作波形显示的采集端和信号发生器直接产生 方波,正弦波和三角波,因而在测量和控制...
基于VC++的虚拟声卡示波器设计
基于VC++的虚拟声卡示波器 基于VC,,的虚拟声卡示波器设计 $2s卷第5期武汉理工大学-信息与管理工程版V01.28No.5 Mav.2oo62006年5月JOURNALOFWUT(INFOR^ON&基垦盟 文章编号:1007—144X(2006)05—0058—04 基于VC++的虚拟声卡示波器设计 胡合松,胡荣强 (武汉理_丁大学自动化学院,湖北武汉430070) 摘要:声卡作为一个输入输出设备,除了能播放声音,还可以用作波形显示的采集端和信号发生器直接产生 方波,正弦波和三角波,因而在测量和控制上有着广泛的应用前景.介绍了用Vc++ 实现声卡示波器的方 法,并给出了关键行代码. 关键词:声卡;VC++;波形发生;虚拟仪器 中图法分类号:TP311文献标识码:A l引言 随着微电子技术和计算机技术的飞速发展, 测试技术与计算机技术的深层次结合,在'钡4试仪 器领域引起了一场革命.这使得虚拟仪器在测量 和控制中得到了广泛的应用,人们可以用它设计 出性能更加可靠的仪器设备,各种虚拟仪器随之 在各个领域应运用而生. 声卡作为语音信号与计算机的接口卡件,其 最基本的一项功能就是A/D转换.实际上,除了 语音外,很多信号的频率都落在音频范围内,例如 机械量信号,过程量信号等….当需要对这些信 号进行采集时,使用声卡作为采集卡是一种相当 令人满意的解决.笔者介绍声卡作为一种信 号采集卡,将计算机显示屏输出,并用声卡作为信 号发生器产生信号发生源制作的虚拟示波器的实 现过程. 图1声卡的基本工作流程 (1)采样频率.它:表示每秒采集声音样本的 数量.采样频率越高,记录的声音波形就越准确, 保真度越高,但采样数据量越大,需要的存储空间 也越多. (2)采样位数.它是将声音从模拟信号转化 为数字信号的二进制位数.位数越高,在定域内 能表示的声波振幅的数目也就越多,记录的音质 也就越高,如l6位声卡把音频信号的大小分为 65536个量化等级来实施上述转化. 目前一般声卡最高采样频率可达96kHz,采 样位数则可达到16或32位,声道数目为2,也就 是立体声,可同时采进两路信号,输出l6位数字 音频,其信噪比可达96db. 2声卡的工作原理及其性能指标3声卡数据的存放 声音的本质是一种波,表现为振幅,频率和相 位等物理量的连续变化.声卡作为语音信号与计 算机的通用接口,其主要功能就是将所获取的模 拟音频信号转换为数字信号,经过DSP音效芯片 处理后,将该数字信号再转换为模拟信号输出. 其基本工作流程如图1所示. 声卡的技术指标包括采样频率,采样位数 (量化精度),声道数,复音数量,信噪比(SNR)和 总谐波失真(THD)等,其中采样频率,采样位数 是主要指标. 音效处理需要将每个采样值从音频数据缓冲 区中提取出来,因此了解波形音频的数据存放格式 是音效处理的基础.波形音频的格式由WAVE. HDR结构的wFormat域,主要的波形音频数据 格式包括PCM,ADPCM,A—Law和一Law等,笔 者只用了PCM波形格式.在WAVEHDR结构中, PCM波形格式的wFormat值为WAVE—FORMAT— PCM.它有4种不同的PCM格式:8位单声道,每 个取样值位8位;8位立体声,每个取样值位l6位, 左右声道各占8位;16位单声道,每个取样值位l6 收稿日期:2006一O1—16. 作者简介:胡合松(1974一),男,湖北潜江人,武汉理工大学自动化学院硕:趼究牛 第28卷第5期胡合松等:基于vc++的虚拟声卡示波器设计—59 位;16位立体声,每个取样值位32位,左右声道各 占l6位.由于8位数据精度难以满足要求,因而 笔者采用了l6位采样. 4系统功能设计 (1)硬件主要由声卡和一个分压电路组成, 通过MIC或Line将数据采人.可用耳机在Line out上监听,也可以用示波器直接测得其波形. (2)软件设计.由于VC能较灵活地处理声 卡的一些底层函数,能保障系统的实时性,故采用 VC++为宿主语言系统.它分为3个部分:数据 波形显示,波形发生和频率.其用到的相关 函数则主要是Windows下的waveIn及waveOut系 列函数.在数据显示部分主要用到了以下几个函 数J: waveInOpen,waveInPrepareHeader,waveInAdd— Buffer,waveInStart,waveInUnpareHeader和waveIn— Close,而在波形发生中则应用了waveOutOpen, waveOutPrepareHeader和waveOutWritewaveOutUn— PrepareHeader等函数.在数据分析中则主要应用 了F不'变换对采集的声音信号进行处理并显示. 数据采集程序的大致流程如图2所示,其部 分实现代码和效果图形(见图3): 打开声卡输入 数据缓冲区准备 Jr 响应 WIM—DATA消息 绘出实时波形 图2声卡数据采集流程图 图3声卡输出指定信号流程 先对WAVEFORMATEX初始化定义,设定声 卡的波形格式,声卡的声道和采样的频率等,然后 调用waveInOpen函数打开声卡输入,进行缓冲区 的初始化,最后调用wavelnStart函数.在缓冲区 满的时候,系统就会根据waveInOpen设定的方式 对WIM—DATA消息进行响应.在消息响应时,重 新为数据提供缓冲区,为下次数据采入做准备,同 时绘出其波形图.其实现代码如下]: voidCMyvirtualDlg:wavelnit(HWNDhWnd, WORDFormatTag,WORDChannel,DWORDSam— ples,.WORDBits) {longk; WAVEFORMATEXwfx; memset(&wfx,0,sizeof(WAVEFORMA— TEX));//初始化wfx wfx.wFormatTag=WAVE— FORMAT— PCM; //声音的波形格式 wfx.nChannels=Channel;//声卡声道 wfx.wBitsPerSample=Bits;//采样的位数 wfx.nSamplesPerSec=Samples;//采样频率 wfx.nBlockAlign=BitsChanneL/8: wfx.nAvgBytesPerSec=SamplesBits ChanneL/8; wfx.cbSize=0; waveInOpen(&hwi,0,&wfx,(DWORD) hWnd,0.CALLBACK— WINDOWlWAVE— MAPPED);//打开音频输入设备 for(k=0;k<MAXSIZE;k++){//准备数 据缓冲区 pwhi=&W[k]; pwhi一>dwFlags=0: pwhi一>dwLoops=0: pwhi一>dwBytesRecorded=0: pwhi一>dwBufferLength=BUFSIZE: pwhi一>lpData=waveinBufferRecord[k]; } for(k=0;k<MAXSIZE一1;k++){//填岁己 数据缓冲区 pwhi=&w[k]; waveInPrepareHeader(hwi,pwhi,sizeof (WAVEHDR)); wavelnAddBuffer(hwi,pwhi,sizeof(WAVE— HDR)); } currWaveHeader=0; pwhi=&w[currWaveHeader]; wavelnStart(hwi); 汉理工 } 而波形发生器则正好相反,其流程图如图4, 其方波效果如图5. 打开声卡输出 数据准备及写入 Jr 响应 WIM— DOWN消息 Jr 写入下一批数据 图4声卡采集波形图 图5声卡产生的方波图 首先定义WAVEFORMATEX结构,然后调用 waveOutOpen函数打开输出设备,再向缓冲区中 填入根据算法产生的数据.当数据满时,系统会 依据waveOutOpen设定对WIM—DONE消息进行 处理.其实现代码如下J: voidCMyvirtualDlg::OnSignals() {WAVEFORMATEXwfxo; longk; CStringcc: m_signalb.ShowWindow(SW—HIDE); msignalsoff.ShowWindow(SW—SHOW); UpdateWindow(); outcurrWaveHeader=0; memset(&who,0,sizeof(WAVEFORMA— TEX)); wfxo.wFormatTagWAVE— FORMAT— PCM;//波形类型 wfxo.nChannels=1: wfxo.nSamplesPerSec=22050; wfxo.nAvgBytesPerSec=22050; wfxo.nBloekAlign=1; wfxo.wBitsPerSample=8; wfxo.cbSize=sizeof(WAVEFORMATEX): if((k:waveOutOpen(&hwo,0,&wfxo, (DWORD)this一>1TI—hWnd,0,CALLBACK一 :信皇皇笪堡王翟鱼至旦 WINDOW))!=MMSYSERR—NOERROR)//打 开波形输出设备 {hwo=NULL; MessageBeep(MB—ICONEXCLAMATION); } for(k=0;k<MAXSIZE;k++)//准备数据 缓冲区 {pwho:&whos[k]; pwho一>dwFlags=0: pwho一>dwLoops=O: pwho一>dwBufferLength:outBUFSIZE: pwho一>dwUser=0: pwho一>dwBytesReeorded=0: pwho一>lpNext=NULL; pwho一>reserved=0: pwho一>lpData=waveoutBufferReeord[k]; } for(k=0;k<MAXSIZE一1;k++){//数据 填充 pwho=&whos[k]; waveOutPrepareHeader(hwo,pwho,sizeof (WAVEHDR)); if(1TI—wavetype==0)OnSine(pwho一>lp— Data); elseif(I11一wavetype==1)OnQuad(pwho一 >lpData); elseif(I11一wavetype==2)OnTriple(pwho一 >lpData); else OnSine(pwho一>lpData); waveOutWrite(hwo,pwho,sizeof(WAVE— HDR)); } outeurrWaveHeader=0; pwho=&whos[outeurrWaveHeader]; } 其中的OnSine(),OnQuad(),OnTriple()为 波形数据填入函数. 频率分析模块主要实现用F兀'变换处理数 据,很多文献都有介绍,笔者在此不在叙述. 5结论 提出了一种将声卡作为输入采集设备,制作 虚拟仪器的,并进行了编程设计,实践表明了 该方法的有效性.它必将在实际虚拟仪器的使用 合松等:某千VC++ 中,为用户提供一种低成本的解决方案,可大大地 节省时间和经费. 参考文献: [1]周爱军.基于声卡的LabVIEW数据采集与分析系 统设计[J].微计算机信息,2005(9):108—110. 王亚民,陈青,刘畅生,王水平.组态软件设计与 开发[M].西安:西安电子科技大学出版社,2003. 罗斌.VisualC++编程技巧精选[M].北京:中 国水利水电出版社,2004. 李于剑.VisualC++实践与提高:图形图像编程篇 [M].北京:中国铁道出版社,2001. AdesignofVirtualSoundCardOscillographBasedonVC++ HUHesong,HURongqiang Abstract:Soundcard,asaninputandoutputdevice,notonlycanitplayawavefile.butalsocana ctasa terminalofcollectingwavedataandawaveproductwhichcanproducesquadwaveandsinew aveandSOon, soitwillhavesomefunctioninmeasureandcontrolfield.Themethodofrealizingvirtualsoun dcardosciHo— graphwithVC++isintroducedandkeycodesareprovided. Keywords:soundcard;VC++;waveformproduct;virtualinstrument HUHesong:Postgraduate;SchoolofAutomation,WUT,Wuhan430070,China. (上接第57页) SelectingNeedleTimeandSoftwareRealizationof ComputerizedFlatKnittingMachine O HUANGJixiong,GUOran,JINChang [编辑:李道文] Abstract:Theneedleselectiontechnologyisoneofthekeytechnologiesofcomputerizedflatknittingmachine. Thetheoryofneedleselectionisanalyzed.Suitableselectorisselectedbyaccountingthetimeofneedleselec— tion,whichensuresthereliabilityofcomputerizedflatknittingmachine.Thesoftwarerealizationofthismeth— odisprobedinto,whichaffordsreferencefortheresearchofthecontrolsystem. Keywords:computerizedflatknittingmachine;selector;softwarerealization HUANGJixiong:Assoc.Prof.;SchoolofMechanicalandElectricalEngineering,WUT,Wuhan430070, China. [编辑:李道文]
/
本文档为【基于VC++的虚拟声卡示波器设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索