基于計(jì)算機(jī)聲卡的虛擬實(shí)驗(yàn)儀器開發(fā)研究
摘 要:虛擬儀器(Virtual Intrument)技術(shù)是測(cè)控領(lǐng)域測(cè)量的一個(gè)重要方向,是計(jì)算機(jī)技術(shù)與儀器技術(shù)深層次結(jié)合產(chǎn)生的全新概念的儀器,是對(duì)傳統(tǒng)儀器概念的重大突破。為了滿足高校、科研機(jī)構(gòu)等對(duì)一些實(shí)驗(yàn)設(shè)備的需求,在低成本條件下開發(fā)一些虛擬儀器成為一種趨勢(shì)。組建虛擬示波器為例介紹如何開發(fā)虛擬實(shí)驗(yàn)儀器。
本文引用地址:http://www.ex-cimer.com/article/202125.htm關(guān)鍵詞:計(jì)算機(jī);聲卡;儀器
1 從數(shù)據(jù)采集的角度看聲卡
從數(shù)據(jù)采集的角度來看,聲卡是一種音頻范圍內(nèi)的數(shù)據(jù)采集卡,是計(jì)算機(jī)與外部的模擬量環(huán)境聯(lián)系的重要途徑。
1.1 聲卡的工作原理
聲卡的工作原理其實(shí)很簡(jiǎn)單,其工作流程圖如圖1所示。我們知道,麥克風(fēng)和喇叭所用的都是模擬信號(hào),而電腦所能處理的都是數(shù)字信號(hào),聲卡的作用就是實(shí)現(xiàn)兩者的轉(zhuǎn)換。從結(jié)構(gòu)上分,聲卡可分為模數(shù)轉(zhuǎn)換電路和數(shù)模轉(zhuǎn)換電路兩部分,模數(shù)轉(zhuǎn)換電路負(fù)責(zé)將麥克風(fēng)等聲音輸入設(shè)備采到的模擬聲音信號(hào)轉(zhuǎn)換為電腦能處理的數(shù)字信號(hào);而數(shù)模轉(zhuǎn)換電路負(fù)責(zé)將電腦使用的數(shù)字聲音信號(hào)轉(zhuǎn)換為喇叭等設(shè)備能使用的模擬信號(hào)。
2 聲卡的主要技術(shù)參數(shù)
(1)采樣的位數(shù)。
采樣位數(shù)可以理解為聲卡處理聲音的解析度。這個(gè)數(shù)值越大,解析度就越高,錄制和回放的聲音也就越真實(shí)。聲卡的位是指聲卡在采集和播放聲音文件時(shí)所使用的數(shù)字聲音信號(hào)的二進(jìn)制位數(shù),它客觀地反映了數(shù)字聲音信號(hào)對(duì)輸入聲音信號(hào)描述的準(zhǔn)確度。例如,8位代表28=256;16位則代表216=64000。比較一下一段相同的音樂信息,16位聲卡能把它分為64000個(gè)精度單位進(jìn)行處理,而8位聲卡只能處理256個(gè)精度單位,最終采樣效果自然是無法相提并論的。
(2)采樣頻率。
目前,聲卡的最高采樣頻率是44.1kHz。少數(shù)達(dá)到48kHz。對(duì)于民用聲卡,一般將采樣頻率設(shè)為4檔,分別是44.1kHz、22.05kHz、11.025kHz和8kHz。22.05kHz只能達(dá)到FM廣播的聲音品質(zhì);44.1kHz是理論上的CD音質(zhì)界限,48kHz則更好一些。對(duì)20kHz范圍內(nèi)的音頻信號(hào),最高的采樣頻率才48kHz,雖然理論上沒問題,但似乎余量不大。使用聲卡比較大的局限在于它不允許用戶在最高采樣頻率之下隨意設(shè)定采樣頻率,而只能分為4檔設(shè)定。這樣雖然可使制造成本降低,但卻不便于使用。用戶基本上不可能控制整周期采樣,只能通過信號(hào)處理的方法來彌補(bǔ)非整周期采樣帶來的問題。
(3) 緩沖區(qū)。
與一般數(shù)據(jù)采集卡不同,聲卡面臨的D/A和A/D任務(wù)通常是連續(xù)狀態(tài)的。為了在一個(gè)簡(jiǎn)潔的結(jié)構(gòu)下較好地完成某個(gè)任務(wù),聲卡緩沖區(qū)的設(shè)計(jì)有其獨(dú)到之處。為了節(jié)省CPU資源,計(jì)算機(jī)的CPU并不是每次聲卡A/D或D/A結(jié)束后都要響應(yīng)一次中斷,而是采用了緩沖區(qū)的工作方式。在這種工作方式下,聲卡的A/D、D/A都對(duì)某一緩沖區(qū)進(jìn)行操作。以輸入聲音的A/D變換為例,每次轉(zhuǎn)換完畢后,聲卡控制芯片都將數(shù)據(jù)存放在緩沖區(qū),待緩沖區(qū)滿時(shí),發(fā)出中斷給CPU,CPU響應(yīng)中斷后一次性將緩沖區(qū)內(nèi)的數(shù)據(jù)全部讀走。計(jì)算機(jī)總線的數(shù)據(jù)傳輸速率非常高,讀取緩沖區(qū)數(shù)據(jù)所用時(shí)間極短,不會(huì)影響A/D變換的連續(xù)性。緩沖區(qū)的工作方式大大降低了CPU響應(yīng)中斷的頻度,節(jié)省了系統(tǒng)資源。聲卡輸出聲音時(shí)的A/D變換也是類似的。
一般聲卡使用的緩沖區(qū)長(zhǎng)度的默認(rèn)值是8KB(8192字節(jié))。這是由于對(duì)X86系列處理器來說,在保護(hù)模式(Windows等系統(tǒng)使用的CPU工作方式下)下,內(nèi)存以8KB為單位被分成很多頁,對(duì)內(nèi)存的任何訪問都是按頁進(jìn)行的,CPU保證了讀寫8KB長(zhǎng)度的內(nèi)存緩沖區(qū)時(shí),速度足夠快,并且一般不會(huì)被其他外來事件打斷。設(shè)置8192字節(jié)或其整數(shù)倍(例如32768字節(jié))大小的緩沖區(qū),可以較好地保證聲卡與CPU的協(xié)調(diào)工作。
(4) 無基準(zhǔn)電壓。
聲卡不提供基準(zhǔn)電壓,因此無論是A/D還是D/A在使用時(shí),都需要用戶自己參照基準(zhǔn)電壓進(jìn)行標(biāo)定。
(5)聲卡頻率范圍與頻率響應(yīng)。
某聲卡的頻率響應(yīng)如圖2所示,可以看出在200Hz~5kHz之間的曲線還是比較平坦的,其余部分信號(hào)有較多衰減。在合適的頻率范圍內(nèi),可以用聲卡代替昂貴的數(shù)據(jù)采集卡進(jìn)行工作。
2 利用G語言LabVIEW組建虛擬實(shí)驗(yàn)儀器
虛擬儀器是在美國國家儀器公司(National Instruments Corp.簡(jiǎn)稱NI)于1986年提出的“軟件就是儀器”這一口號(hào)的基礎(chǔ)上發(fā)展起來的,其概念是用戶在通用計(jì)算機(jī)平臺(tái)上,在必要的數(shù)據(jù)采集硬件的支持下,根據(jù)測(cè)試任務(wù)的需要,通過軟件設(shè)計(jì)來實(shí)現(xiàn)和擴(kuò)展傳統(tǒng)儀器的功能。傳統(tǒng)臺(tái)式儀器是由廠家設(shè)計(jì)并定義好功能的一個(gè)封閉結(jié)構(gòu),有固定的輸入/輸出接口和儀器操作面板。每種儀器只能實(shí)現(xiàn)一類特定的測(cè)試功能,并以確定的方式提供給用戶。虛擬儀器的出現(xiàn),打破了傳統(tǒng)儀器由廠家定義、用戶無法改變的模式,使得用戶可以根據(jù)自己的要求,設(shè)計(jì)自己的儀器系統(tǒng),并可通過修改軟件來改變或增減儀器的功能,真正體現(xiàn)了“軟件就是儀器”這一新概念。
(1)G語言LabVIEW關(guān)于聲卡的模塊介紹。
LabVIEW中提供了一系列使用Windows底層函數(shù)編寫的聲卡有關(guān)的函數(shù)。這些函數(shù)集中在Sound VI下。由于使用Windows底層函數(shù)直接與聲卡驅(qū)動(dòng)程序打交道,因而封裝層次低,速度快,而且可以訪問,采集緩沖區(qū)中任意位置的數(shù)據(jù),具有很大的靈活性,能夠滿足實(shí)時(shí)不間斷采集的需要。
LabVIEW函數(shù)庫中Sound Input子模版(Functions Palette→GraphicsSound→Sound→Sound Input)提供了聲卡函數(shù),可以通過聲卡采集外部模擬信號(hào)。
(2)基于聲卡的虛擬示波器的組建。
應(yīng)用LabVIEW構(gòu)建基于聲卡的虛擬示波器,其整體思想就是在一個(gè)While循環(huán)中,添加各輸入節(jié)點(diǎn),使其對(duì)采集到的聲音波形進(jìn)行顯示,而在內(nèi)部又添加了若干的屬性節(jié)點(diǎn)來對(duì)各種附加功能進(jìn)行實(shí)現(xiàn)。流程圖如圖3所示。
虛擬示波器的軟件的設(shè)計(jì)是把整個(gè)軟件分別分成幾個(gè)模塊,然后組建成一個(gè)整體。分別為數(shù)據(jù)采集,存儲(chǔ),顯示,處理等。
數(shù)據(jù)采集模塊是虛擬示波器軟件的硬件驅(qū)動(dòng)部分,在這里主要是利用LabVIEW里面的聲卡函數(shù)完成聲卡的硬件參數(shù)設(shè)置、啟動(dòng)聲卡采集數(shù)據(jù)、等待采樣數(shù)據(jù)緩沖區(qū)滿的消息、通知聲卡停止采集等任務(wù)。
波形顯示模塊使用了波形操作函數(shù),主要用到Build Waveform函數(shù)。Build Waveform函數(shù)。建立或修改已有的波形。默認(rèn)情況下函數(shù)只有waveform和t0輸入端子,向下拖拽函數(shù)下邊沿還可以增加dt、Y和attribuates輸入端子。使用操作工具單擊端子可以彈出元素選擇快捷菜單。如果waveform端子沒有接入,則Build Waveform根據(jù)輸入?yún)?shù)建立新的波形數(shù)據(jù),并在輸出端子中返回。在本設(shè)計(jì)中,只用到t0,dt,Y三個(gè)輸入端子。其中t0為波形的起始時(shí)間,dt為波形數(shù)據(jù)點(diǎn)中間的時(shí)間間隔或持續(xù)時(shí)間,Y為包含了波形的數(shù)據(jù)值。此處,設(shè)置起始時(shí)間為0,但因?yàn)閿?shù)據(jù)格式不匹配,增加了一個(gè)數(shù)據(jù)格式轉(zhuǎn)換函數(shù)to time stamp,從而把一個(gè)數(shù)值轉(zhuǎn)換成時(shí)間值。dt值取自SI Config的格式中的采樣倒數(shù),倒數(shù)取得的方法利用了reciprocal函數(shù)。Y值來自SI Read的stereo 16-bit輸出端子。
評(píng)論