當(dāng)前位置:首頁 > 模擬 > 模擬
[導(dǎo)讀]連續(xù)信號(hào)采集系統(tǒng)不僅需要保證信號(hào)采集的連續(xù)性,而且在信號(hào)采集過程中要有實(shí)時(shí)控制能力。使用生產(chǎn)者/消費(fèi)者模式進(jìn)行程序設(shè)計(jì)可以使程序設(shè)計(jì)更為快捷、簡單和高效。以LabVIEW為開發(fā)平臺(tái),詳細(xì)介紹了生產(chǎn)者/消費(fèi)者程序設(shè)計(jì)的思路,并結(jié)合聲卡信號(hào)采集實(shí)例給出了此程序設(shè)計(jì)的過程。結(jié)果表明在對實(shí)時(shí)性和連續(xù)性有嚴(yán)格要求的程序設(shè)計(jì)中引入生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式,可使程序的響應(yīng)時(shí)間更快,執(zhí)行效率更高。

 

0 引 言
   
LabVIEW是美國NI公司1986年推出的一種圖形化的編程語言和開發(fā)環(huán)境。作為虛擬儀器開發(fā)平臺(tái),由于其圖形化的編程方式具有簡單易學(xué)、直觀方便、功能強(qiáng)大等特點(diǎn),是很多工程設(shè)計(jì)人員進(jìn)行虛擬儀器開發(fā)的首選。生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式是NI公司最新推出的程序設(shè)計(jì)概念,它從主/從設(shè)計(jì)模式發(fā)展而來,生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式將生產(chǎn)和消費(fèi)數(shù)據(jù)速度不同的任務(wù)分開處理,大大提高了不同速率的多個(gè)循環(huán)之間數(shù)據(jù)共享的能力,對于多任務(wù)處理和實(shí)時(shí)性、連續(xù)性要求嚴(yán)格的程序設(shè)計(jì),生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式是較好的選擇。在虛擬儀器系統(tǒng)中,硬件解決信號(hào)的輸入和輸出,軟件可以方便地更新儀器系統(tǒng)的功能,以適應(yīng)不同使用者的需要。其中信號(hào)的輸入部分一般使用數(shù)據(jù)采集卡實(shí)現(xiàn),商用的數(shù)據(jù)采集卡具有較大的逋用性。普通聲卡具有16位的量化精度、數(shù)據(jù)采集頻率是44 kHz,完全可以滿足特定音頻信號(hào)范圍內(nèi)數(shù)據(jù)采集的需要,個(gè)別性能指標(biāo)還優(yōu)于商用數(shù)據(jù)采集卡,而價(jià)格卻為商用數(shù)據(jù)采集卡的十幾分之一甚至幾十分之一。若保證信號(hào)采集的逼真性,在采集過程中的連續(xù)性和實(shí)時(shí)控制顯得尤為重要。本文以LabVIEW為平臺(tái),著重介紹了生產(chǎn)者/消費(fèi)者模式的實(shí)現(xiàn),以及在實(shí)時(shí)控制的連續(xù)音頻采集系統(tǒng)中的應(yīng)用。

1 生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式概念及其實(shí)現(xiàn)
1.1 生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式概念

    生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式包括多個(gè)并行循環(huán),每個(gè)循環(huán)以不同的速率執(zhí)行任務(wù)。一個(gè)循環(huán)作為生產(chǎn)數(shù)據(jù)的循環(huán),其他循環(huán)作為消費(fèi)數(shù)據(jù)的循環(huán)。生產(chǎn)數(shù)據(jù)的循環(huán)控制所有消費(fèi)數(shù)據(jù)的循環(huán),并且使用通信技術(shù)與它們進(jìn)行通信。
1.2 生產(chǎn)者循環(huán)與消費(fèi)者循環(huán)之間的通信
    在LabVIEW程序設(shè)計(jì)過程中,變量(局部變量和全局變量)、通知器、隊(duì)列常用于多個(gè)循環(huán)之間傳遞數(shù)據(jù)。
    LabVIEW中的變量是程序框圖中的元素,通過它可以在另一位置訪問或存儲(chǔ)數(shù)據(jù)。根據(jù)不同的變量類型,數(shù)據(jù)的實(shí)際位置也不一樣。局部變量將數(shù)據(jù)存儲(chǔ)在前面板的輸入控件和顯示控件中,全局變量和單進(jìn)程共享變量將數(shù)據(jù)存儲(chǔ)在特殊的通過多個(gè)VI可以訪問的倉庫中。不管變量將數(shù)據(jù)存儲(chǔ)在何處,所有的變量都可以在不使用連線連接兩個(gè)地方的條件下把數(shù)據(jù)從一個(gè)地方傳遞到另一個(gè)地方,而不必使用正常的數(shù)據(jù)流。但是變量的使用有著其自身的缺點(diǎn),變量不僅不能保證各個(gè)循環(huán)之間的同步,而且使用變量會(huì)破壞LabVIEW的數(shù)據(jù)流模式,在對變量進(jìn)行讀寫操作時(shí)容易產(chǎn)生內(nèi)存拷貝,浪費(fèi)內(nèi)存資源,影響系統(tǒng)運(yùn)行效率。
    變量還允許競爭狀態(tài)的出現(xiàn),競爭狀態(tài)不容易識(shí)別和調(diào)試,因?yàn)檩敵鋈Q于操作系統(tǒng)執(zhí)行排定的任務(wù)和外部時(shí)間定時(shí)的順序。任務(wù)之間和任務(wù)同計(jì)算機(jī)之間的交互方式,以及外部時(shí)間的任意定時(shí)都使這種順序變得隨機(jī)。很多情況下,帶有競爭狀態(tài)的代碼會(huì)在數(shù)千次測試中返回相同的結(jié)果,但仍然可能會(huì)在運(yùn)行時(shí)返回一個(gè)不同的結(jié)果。
    對生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式的一個(gè)更有效的實(shí)現(xiàn)是使用通知器和隊(duì)列使數(shù)據(jù)傳輸保持同步。通知器在發(fā)出數(shù)據(jù)可用的通知時(shí),將同時(shí)發(fā)送數(shù)據(jù)。使用通知器將數(shù)據(jù)從主循環(huán)傳送到從循環(huán)消除了和競爭狀態(tài)相關(guān)的問題。使用通知器還有同步的好處,因?yàn)閿?shù)據(jù)可用時(shí),主從循環(huán)都已完成定時(shí),并準(zhǔn)備實(shí)現(xiàn)一個(gè)良好的生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式。但是通知器不會(huì)緩沖數(shù)據(jù),如果主循環(huán)在從循環(huán)讀取第一份數(shù)據(jù)之前發(fā)送另一份數(shù)據(jù),那么原來那份數(shù)據(jù)就會(huì)被覆蓋并丟失。隊(duì)列類似于通知器。但它可以存儲(chǔ)多份數(shù)據(jù),默認(rèn)情況下,隊(duì)列按照FIFO(先進(jìn)先出)的方式執(zhí)行。因此,第一份插入隊(duì)列的數(shù)據(jù),也是第一份從隊(duì)列中刪除的數(shù)據(jù)。在實(shí)時(shí)控制的連續(xù)音頻信號(hào)采集過程中,由于需要處理許多用戶界面的事件,為了不造成數(shù)據(jù)丟失,選擇隊(duì)列在各個(gè)循環(huán)之間傳遞數(shù)據(jù),實(shí)現(xiàn)過程如圖1所示。

    如圖1所示,在循環(huán)開始使用“獲取隊(duì)列引用”函數(shù)之前,隊(duì)列就已經(jīng)創(chuàng)建完畢。生產(chǎn)者循環(huán)使用“元素入隊(duì)列”函數(shù)向隊(duì)列中添加數(shù)據(jù)。消費(fèi)者循環(huán)使用“元素出隊(duì)列”函數(shù)從隊(duì)列中移除數(shù)據(jù)。消費(fèi)者循環(huán)一直到隊(duì)列中的數(shù)據(jù)可用時(shí)才執(zhí)行。
    可見,在此生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式中,兩個(gè)循環(huán)均被同步為與生產(chǎn)者循環(huán)一致。消費(fèi)者循環(huán)只在隊(duì)列中的數(shù)據(jù)可用時(shí)才執(zhí)行。這樣就保證了消費(fèi)者循環(huán)執(zhí)行任務(wù)的連續(xù)性和高效性。并且,隊(duì)列用于循環(huán)之間的數(shù)據(jù)傳遞,創(chuàng)建全局可用的位于隊(duì)列中的數(shù)據(jù),而且在添加新的數(shù)據(jù)到隊(duì)列時(shí),避免了丟失數(shù)據(jù)的可能性。

2 實(shí)時(shí)控制的連續(xù)音頻信號(hào)采集系統(tǒng)
2.1 聲卡簡介

    從數(shù)據(jù)采集的角度看,聲卡是一種音頻范圍內(nèi)的數(shù)據(jù)采集卡,是計(jì)算機(jī)與外部模擬量環(huán)境聯(lián)系的重要途徑。一般聲卡都是由以下幾部分組成:聲音控制/處理芯片,功放芯片,聲音輸入/輸出端口等。
    聲音控制/處理芯片是聲卡的核心,集成了采樣保持、A/D轉(zhuǎn)換、D/A轉(zhuǎn)換、音效處理等電路,它決定了聲卡的性能和檔次,基本功能包括對聲波采樣和回放控制、處理MIDI指令等,有的廠家還加進(jìn)了混響、合聲、音場調(diào)整等功能。
    功放芯片完成信號(hào)的功率放大以推動(dòng)喇叭發(fā)聲工作。聲音輸入/輸出端口是音頻信號(hào)的輸入和輸出,它主要有外接端口和內(nèi)接端口。外接端口有“SPK Out”喇叭輸出端口,“Wave Out(或Line Out)”線性輸出端口,“Line In"線性輸入端口,“MIC”麥克風(fēng)輸入端口,還有MIDI端口,連接電子樂器以及連接游戲控制器。內(nèi)接端口是內(nèi)置的輸入/輸出端口,是CD音頻接口,通過3~4針的音頻線直接連接。Line In接口和MIC都可以用于外部音頻信號(hào)的輸入,只不過后者可接入較弱的信號(hào),幅值大約為0.02~O.2 V,顯然這個(gè)信號(hào)較易受到干擾,因而常使用Line In,它可接入幅值約不超過1 V的信號(hào)。
    市面上的聲卡主流都是16位的,聲卡的最高采樣頻率是44.1 kHz,民用的聲卡一般將采樣頻率設(shè)為4檔,分別為44.1 kHz,22.05 kHz,11.025 kHz和8 kH。與一般的數(shù)據(jù)采集卡不同,聲卡的D/A和A/D功能都是連續(xù)狀態(tài)的。
2.2 具體設(shè)計(jì)
   
根據(jù)聲卡的性能指標(biāo),將聲卡初始設(shè)置為雙聲遣、44 100 Hz采樣頻率、16位采樣精度。要使采集到的音頻信號(hào)達(dá)到逼真的效果,要求信號(hào)的采集過程保持連續(xù),但實(shí)時(shí)控制要求程序?qū)τ脩艚缑娴目丶龀鲰懥ⅲ@就在采集的連續(xù)性和對用戶的響應(yīng)方面產(chǎn)生了矛盾。本音頻信號(hào)采集系統(tǒng),運(yùn)用生產(chǎn)者/消費(fèi)者程序設(shè)計(jì)模式,很好地解決了這一矛盾,使生產(chǎn)者循環(huán)完成對用戶界面的響應(yīng),消費(fèi)者循環(huán)完成音頻信號(hào)的采集任務(wù),從而不僅提高了整個(gè)信號(hào)采集過程的效率,而且使采集的語音信號(hào)效果逼真。圖2是實(shí)際音頻信號(hào)采集系統(tǒng)前面板。

    主要程序框圖如圖3所示,在循環(huán)開始前,使用“獲取隊(duì)列引用”函數(shù)創(chuàng)建消息隊(duì)列。生產(chǎn)者循環(huán)使用“元素入隊(duì)列”函數(shù)向隊(duì)列中添加數(shù)據(jù)。消費(fèi)者循環(huán)使用“元素出隊(duì)列”函數(shù)從隊(duì)列中獲取消息并移除數(shù)據(jù)。

    該設(shè)計(jì)模式允許消費(fèi)者循環(huán)以固有速度采集信號(hào)的同時(shí),生產(chǎn)者循環(huán)完成對用戶界面的響應(yīng),生產(chǎn)者循環(huán)中采用事件結(jié)構(gòu),事件結(jié)構(gòu)的延時(shí)時(shí)間為100 ms,采用輪詢操作,處理用戶界面各個(gè)控件的響應(yīng),對信號(hào)采集進(jìn)行實(shí)時(shí)控制,同時(shí)為了不影響消費(fèi)者循環(huán)中信號(hào)采集的連續(xù)性,并不是每一個(gè)用戶事件都通過隊(duì)列產(chǎn)生消息,通知消費(fèi)者循環(huán)重新配置信號(hào)采集,只有在聲卡配置參數(shù)(采樣點(diǎn)數(shù)、采樣率)發(fā)生改變時(shí),生產(chǎn)者循環(huán)使用“發(fā)送通知”函數(shù)產(chǎn)生消息,以便通過“等待通知”函數(shù)通知消費(fèi)者循環(huán)。
    消費(fèi)者循環(huán)內(nèi)部是狀態(tài)機(jī)結(jié)構(gòu),在第一次循環(huán)時(shí)進(jìn)入“SetUp”分支,進(jìn)行聲卡的初始化配置,從下次循環(huán)開始,在其他控件發(fā)生改變而有關(guān)聲卡配置的參數(shù)不發(fā)生變化時(shí),生產(chǎn)者循環(huán)不會(huì)產(chǎn)生消息隊(duì)列,消費(fèi)者循環(huán)中在“daq”分支和“Wait”分支間進(jìn)行,“Wait”分支僅檢查消息隊(duì)列中是否有消息,如果沒有轉(zhuǎn)“daq”分支進(jìn)行數(shù)據(jù)采集,而不會(huì)進(jìn)入聲卡配置的“SetUp”分支,這樣不僅保證了獨(dú)立的采集過程不受影響,而且由用戶界面引起的任何延時(shí)(如顯示對話框)都不會(huì)導(dǎo)致采集過程的循環(huán)操作產(chǎn)生延時(shí),從而保證采集音頻信號(hào)的連續(xù)性。
    在用戶改變聲卡配置參數(shù)發(fā)生時(shí),生產(chǎn)者循環(huán)響應(yīng)該事件,“元素入隊(duì)列”函數(shù)向隊(duì)列中添加消息,消費(fèi)者循環(huán)“Wait”分支中的“元素出隊(duì)列”函數(shù)從隊(duì)列中移出消息,在下次循環(huán)時(shí)進(jìn)入“Setup”分支進(jìn)行聲卡參數(shù)配置,然后轉(zhuǎn)入“daq”分支繼續(xù)進(jìn)行信號(hào)采集。在“daq”分支中除進(jìn)行數(shù)據(jù)采集外,還對信號(hào)進(jìn)行功率譜分析,并將信號(hào)保存在一個(gè)硬盤文件中。
    通過大量實(shí)驗(yàn)發(fā)現(xiàn)采用生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式設(shè)計(jì)的音頻信號(hào)采集系統(tǒng)能夠有效避免在采集過程中出現(xiàn)的聲音中斷和失真現(xiàn)象,較之以前基于其他模式的設(shè)計(jì)有一定的優(yōu)勢。

3 結(jié) 語
    在LabVIEW程序設(shè)計(jì)過程中,并行循環(huán)之問的數(shù)據(jù)傳遞必須進(jìn)行妥善處理,否則就會(huì)出現(xiàn)死循環(huán)等預(yù)想不到的錯(cuò)誤。該文介紹的生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式不僅使并行循環(huán)間傳遞數(shù)據(jù)的邏輯關(guān)系更加簡潔明了,使得程序的修改維護(hù)更加方便,而且大大提高了程序運(yùn)行的效率。本文只是利用一個(gè)簡單的實(shí)時(shí)控制的連續(xù)音頻信號(hào)采集系統(tǒng)介紹了此模式的應(yīng)用,闡明了這種設(shè)計(jì)模式的思想,在用LabVIEW設(shè)計(jì)如網(wǎng)絡(luò)通信程序等要求準(zhǔn)確且響應(yīng)速度快的實(shí)時(shí)控制程序時(shí),生產(chǎn)者/消費(fèi)者模式有很好的借鑒意義。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉