作者:Paul Beckmann and Vincent Fung
VisualAudio 設(shè)計(jì)和開發(fā)環(huán)境是用于設(shè)計(jì)和開發(fā)音頻系統(tǒng)的新軟件工具。其實(shí)時(shí)架構(gòu)特別適合音頻產(chǎn)品開發(fā)的挑戰(zhàn)。本文簡要介紹了 VisualAudio,然后介紹了它的框架、音頻模塊以及在音頻產(chǎn)品開發(fā)中的應(yīng)用。
音頻產(chǎn)品開發(fā)挑戰(zhàn)
如今,音頻系統(tǒng)開發(fā)人員面臨著設(shè)計(jì)復(fù)雜音頻系統(tǒng)(尤其是家庭音頻/視頻接收器 (AVR) 和汽車信息娛樂系統(tǒng))的需求日益增加,既要快速且經(jīng)濟(jì)高效。為什么?
正常使用的離散音頻通道數(shù)量已從 2 個(gè)增加到 4 個(gè),再到 5.1 個(gè),最近又增加到 7.1 個(gè)。
不同且有時(shí)相互競爭的多聲道音頻格式的數(shù)量一直在迅速增加,其中包括杜比定向邏輯、杜比數(shù)字、DTS 5.1、杜比數(shù)字環(huán)繞 EX? 和 DTS-ES。
產(chǎn)品必須與數(shù)字網(wǎng)絡(luò)接口,例如面向媒體的系統(tǒng)傳輸 (MOST) 總線,這需要網(wǎng)絡(luò)堆棧、內(nèi)容加密和解密以及采樣率轉(zhuǎn)換 — 所有這些都在音頻處理器內(nèi)完成。
消費(fèi)者已經(jīng)開始期待在頂級(jí)和主流產(chǎn)品中具有復(fù)雜的后處理功能,例如空間化、自動(dòng)均衡和低音管理。
為了應(yīng)對(duì)這些因素,開發(fā)人員正在轉(zhuǎn)向數(shù)字信號(hào)處理器(DSP),因?yàn)樗鼈兊目?a href="http://www.asorrir.com/v/tag/1315/" target="_blank">編程性允許針對(duì)特定的市場利基和應(yīng)用定制系統(tǒng)。ADI公司的SHARC處理器系列特別適合這項(xiàng)任務(wù),因?yàn)樗哂写笕萘績?nèi)部存儲(chǔ)器、浮點(diǎn)精度和高性能計(jì)算單元等特性。最近發(fā)布的第三代SHARC處理器更進(jìn)一步,集成了專門為促進(jìn)音頻產(chǎn)品設(shè)計(jì)而引入的附加功能。這些特性包括硬件采樣率轉(zhuǎn)換器、加密和解密、復(fù)雜的數(shù)字音頻接口以及包含多個(gè)音頻解碼器的片上ROM。
DSP用戶面臨的歷史挑戰(zhàn)是開發(fā)能夠充分利用處理器時(shí)鐘周期和有效利用內(nèi)存的軟件。匯編語言中手工編碼音頻信號(hào)處理算法的長期使用和費(fèi)力的方法變得越來越不可行。當(dāng)大部分所需工作用于創(chuàng)建標(biāo)準(zhǔn)的“清單”和“me-too”功能,而不是專注于通過增值功能區(qū)分產(chǎn)品時(shí),尤其如此。需要一種更好的方法來開發(fā)音頻產(chǎn)品軟件。
為了滿足這一需求,ADI開發(fā)了一種圖形環(huán)境VisualAudio,作為設(shè)計(jì)和開發(fā)使用SHARC處理器系列的音頻系統(tǒng)的輔助工具。VisualAudio 為音頻系統(tǒng)開發(fā)人員提供了大多數(shù)軟件構(gòu)建塊,以及直觀的圖形界面(如圖 1 所示),用于設(shè)計(jì)、開發(fā)、調(diào)諧和測試音頻系統(tǒng)。
圖1.可視音頻圖形界面屏幕示例。
VisualAudio 包括一個(gè)基于 PC 的圖形用戶界面(GUI,圖形工具)、一個(gè) DSP 內(nèi)核(框架)和一個(gè)可擴(kuò)展的音頻算法庫(音頻模塊)。與ADI公司合作VisualDSP++? 集成開發(fā)和調(diào)試環(huán)境 (IDDE),VisualAudio 生成產(chǎn)品就緒代碼,該代碼針對(duì)速度、每秒數(shù)百萬條指令 (MIPS) 和內(nèi)存使用進(jìn)行了優(yōu)化。通過簡化開發(fā)復(fù)雜數(shù)字信號(hào)處理軟件的過程,VisualAudio 降低了開發(fā)成本、風(fēng)險(xiǎn)和時(shí)間。因此,音頻系統(tǒng)開發(fā)人員能夠通過將其音頻產(chǎn)品與競爭對(duì)手區(qū)分開來專注于增加價(jià)值。
VisualAudio 的核心是處理音頻 I/O 和后處理的實(shí)時(shí)軟件架構(gòu)。為了可行,生成的DSP代碼必須在MIPS和存儲(chǔ)器方面高效,并且足夠靈活,以處理各種音頻產(chǎn)品類別。下面介紹了 VisualAudio 實(shí)時(shí)架構(gòu),首先是框架,然后是音頻處理模塊。
A. 框架
該框架是DSP代碼的一部分,用于處理系統(tǒng)初始化,音頻I / O,比特流檢測1、實(shí)例化和調(diào)用音頻解碼器以及與主機(jī)通信。VisualAudio為其用戶提供了AVR和汽車音頻系統(tǒng)框架的示例。通過編寫特定于平臺(tái)的驅(qū)動(dòng)程序,VisualAudio 用戶可以自定義框架的許多方面,以滿足特定的產(chǎn)品要求。在某些情況下,如果需要內(nèi)部更改以獲得最佳性能,ADI還將向VisualAudio用戶提供框架源代碼。
音頻產(chǎn)品具有控制框架設(shè)計(jì)的特定要求。每個(gè)音頻產(chǎn)品都有兩個(gè)主要功能:(1) 實(shí)時(shí)音頻處理,以及 (2) 控制此處理。這兩個(gè)功能的時(shí)間尺度大不相同。實(shí)時(shí)處理(完成所有內(nèi)部操作)必須以采樣率進(jìn)行,否則輸出音頻中將出現(xiàn)不可接受的爆裂聲和咔嗒聲。控制功能可以以更慢的速率發(fā)生,10 Hz 到 100 Hz,但仍然可以接受。因此,MIPS的大部分使用發(fā)生在實(shí)時(shí)處理中,而大部分軟件復(fù)雜性則發(fā)生在控制功能中。為了簡化產(chǎn)品設(shè)計(jì)和開發(fā),VisualAudio將實(shí)時(shí)和控制功能分離到單獨(dú)的線程中。效率是通過手動(dòng)優(yōu)化的實(shí)時(shí)音頻處理模塊實(shí)現(xiàn)的,而控制代碼的復(fù)雜性則通過允許開發(fā)人員用 C 語言編寫并在單獨(dú)的線程中運(yùn)行來管理。
傳統(tǒng)上,采用了兩種不同的音頻處理方法。在流處理中,音頻樣本在到達(dá)時(shí)一次處理一個(gè),而在塊處理中,緩沖多個(gè)音頻樣本,然后作為一個(gè)組進(jìn)行處理。每種方法都有獨(dú)特的優(yōu)點(diǎn)和缺點(diǎn)。流處理在數(shù)據(jù)存儲(chǔ)方面是有效的,因?yàn)椴恍枰彌_音頻數(shù)據(jù)。流處理的主要限制是不能容忍多個(gè)函數(shù)調(diào)用的開銷。這強(qiáng)制音頻處理代碼以內(nèi)聯(lián)方式編寫,通常使用匯編語言。這樣的代碼很難模塊化和維護(hù)。
塊處理需要額外的緩沖內(nèi)存來存儲(chǔ) I/O 和暫存內(nèi)存。典型的模塊大小在 32 到 256 個(gè)樣本的范圍內(nèi)。由于一次處理多個(gè)樣本,因此函數(shù)調(diào)用的開銷將分?jǐn)偟酱罅繕颖局小_@導(dǎo)致了MIPS高效的實(shí)現(xiàn) - 以犧牲額外的內(nèi)存為代價(jià) - 但這是首選,因?yàn)榭梢圆捎媒Y(jié)構(gòu)化編程方法。塊處理也非常適合生成音頻塊的音頻解碼器。例如,杜比數(shù)字和 DTS 解碼器都會(huì)在 256 個(gè)樣本塊中生成音頻。
塊處理,VisualAudio使用的方法,有幾個(gè)額外的優(yōu)點(diǎn)。VisualAudio 中的所有音頻 I/O 都使用直接內(nèi)存訪問 (DMA) 進(jìn)行雙緩沖和管理。處理器每個(gè)塊接收一次中斷,而不是每個(gè)樣本一次,因此與流處理相比,中斷開銷要少得多。此外,通過利用 SHARC 處理器的鏈?zhǔn)?DMA 功能,雙緩沖由 DMA 控制器管理,從而顯著增加了處理音頻輸入/輸出 (I/O) 中斷時(shí)的允許延遲。
VisualAudio 框架以塊的形式將音頻傳送到后處理網(wǎng)絡(luò)。對(duì)塊大小施加了某些限制。首先,由于某些音頻模塊的單指令多數(shù)據(jù) (SIMD) 行為,它必須是偶數(shù)。其次,最小塊大小為 8 個(gè)樣本,這是由于某些音頻模塊中的流水線。最后,在具有音頻解碼器的系統(tǒng)中,后處理塊大小必須是解碼器塊大小的一個(gè)因素。例如,對(duì)于杜比數(shù)字,可能的塊大小為 16、32、64、128、256 和 <> 個(gè)樣本。
音頻I/O和緩沖可以在VisualAudio汽車框架的例子中看到,如圖2所示。音頻來自 MOST 網(wǎng)絡(luò)或 A/D 轉(zhuǎn)換器,并分為多個(gè)流。主要的娛樂流由DVD播放器生成,其他單聲道流由遠(yuǎn)程信息處理系統(tǒng)或編鐘產(chǎn)生。DVD 數(shù)據(jù)首先經(jīng)過數(shù)字傳輸復(fù)制檢測 (DTCP) 解密,然后饋送到比特流檢測器。比特流檢測器的輸出被打包成塊;當(dāng)完整的數(shù)據(jù)幀可用時(shí),將執(zhí)行音頻解碼器。DVD 播放器生成自己的采樣率,這與后處理使用的采樣率不同。因此,音頻解碼器的輸出必須通過異步采樣速率轉(zhuǎn)換器。該模塊將所有輸入數(shù)據(jù)流轉(zhuǎn)換為固定的輸出采樣率。此時(shí),音頻后處理以 32 個(gè)樣本的固定塊大小執(zhí)行。作為最后一步,音頻通道被饋送到D/A轉(zhuǎn)換器或返回到MOST網(wǎng)絡(luò)。
圖2.視覺音頻汽車框架內(nèi)的音頻流
汽車框架包含多個(gè)音頻解碼器,一次只有一個(gè)處于活動(dòng)狀態(tài)。為了減少解碼器內(nèi)存要求,VisualAudio 管理在所有可能的解碼器之間共享的解碼器內(nèi)存池。解碼器的輸出被饋送到后處理網(wǎng)絡(luò);這驅(qū)動(dòng)了D/A轉(zhuǎn)換器。
VisualAudio 使用簡單的中斷驅(qū)動(dòng)內(nèi)核來管理多個(gè)線程。例如,示例汽車框架總共包含六個(gè)線程。從最高優(yōu)先級(jí)到最低優(yōu)先級(jí),它們是:
主機(jī)通信 — 通常通過 SPI 與主機(jī)交換消息。消息在 DSP 用戶控制代碼中緩沖和解釋(如下所述)。
音頻傳輸中斷 — 由串行端口中斷觸發(fā)。管理到 DAC 的輸出 DMA,并格式化要返回到 MOST 網(wǎng)絡(luò)的數(shù)據(jù)。在用戶中斷 0 中觸發(fā)音頻處理。
音頻接收中斷 - 將音頻分成不同的流。執(zhí)行 DTCP 解密并將編碼的數(shù)據(jù)打包到幀中。適當(dāng)時(shí),觸發(fā)用戶中斷 1 中的音頻解碼器。
音頻處理(用戶中斷 0)— 對(duì)包含 32 個(gè)樣本的模塊執(zhí)行后處理。大部分處理在此線程中發(fā)生。
音頻解碼器(用戶中斷 1)— 執(zhí)行音頻解碼功能。
DSP 用戶控制代碼 (UCC) — 在沒有活動(dòng)中斷時(shí)運(yùn)行,并充當(dāng)應(yīng)用程序的主循環(huán)。用戶產(chǎn)品的控制功能發(fā)生在此線程中。
示例 AVR 框架中的典型線程活動(dòng)如圖 3 所示。每個(gè)水平切片代表一個(gè)不同的線程。音頻 I/O、解碼器和后處理定期運(yùn)行,UCC 以最低優(yōu)先級(jí)運(yùn)行。請(qǐng)注意,當(dāng)處理器忙于音頻處理時(shí),UCC 可能不會(huì)運(yùn)行幾毫秒。
圖3.VisualAudio AVR 框架中的線程活動(dòng)。線程按優(yōu)先級(jí)(頂部)到最低優(yōu)先級(jí)(底部)的順序排列。
VisualAudio 分區(qū)控制主機(jī)微控制器和 DSP 之間的功能。這種分區(qū)是任意的,甚至可以支持沒有專用主機(jī)微控制器的系統(tǒng)。如上所述,UCC 以最低優(yōu)先級(jí)執(zhí)行 - 使用中斷處理程序未使用的任何空閑周期。UCC 由框架定期調(diào)用,其中包含消息和通知。
消息是從主機(jī)微控制器發(fā)送到DSP的命令。這些命令用于控制音頻處理(例如,“將音量設(shè)置為 –20 dB”、“將低音音調(diào)控制設(shè)置為 +3 dB”)或查詢音頻處理的狀態(tài)(例如,“系統(tǒng)是否受到限制?VisualAudio 框架在內(nèi)部處理一些命令,而其余的則傳遞給 UCC。在每個(gè)時(shí)間點(diǎn),主機(jī)和 DSP 之間只能有一條掛起的消息,并且 DSP 必須在處理完每個(gè)命令后發(fā)送確認(rèn)。
通知由框架異步生成,并在多種條件下發(fā)生。第一個(gè)通知發(fā)生在系統(tǒng)初始化期間,在啟用任何實(shí)時(shí)處理之前。此時(shí)可以完成特定于系統(tǒng)或應(yīng)用程序的初始化。第二個(gè)通知以大約 200 Hz 的速率定期生成,用于控制實(shí)時(shí)音頻處理,例如自動(dòng)增益控制 (AGC) 計(jì)算和更新。最后一類通知由音頻解碼器生成,以響應(yīng)編碼位流中的更改。當(dāng)采樣率發(fā)生變化、輸入通道數(shù)發(fā)生變化或在傳入比特流中檢測到循環(huán)冗余校驗(yàn) (CRC) 錯(cuò)誤時(shí),將發(fā)生此類通知。這些通知允許 UCC 在音頻處理中進(jìn)行適當(dāng)?shù)母摹?/p>
由于 UCC 被實(shí)時(shí)音頻處理搶占,因此可能要過幾毫秒才能執(zhí)行,如圖 3 所示。VisualAudio 包括幾個(gè)功能,可以簡化編寫將不斷受到中斷的 UCC。首先,由于主機(jī)通信接口只允許單個(gè)主機(jī)消息在主機(jī)和 DSP 之間掛起,因此不存在消息緩沖區(qū)溢出或主機(jī)消息相互覆蓋的危險(xiǎn)。另一個(gè)功能是通知隊(duì)列,其中相同類型的通知相互覆蓋。例如,如果在執(zhí)行 UCC 之前生成了兩個(gè)時(shí)間間隔很近的采樣率通知,則 UCC 將僅接收第二個(gè)通知,即最終采樣率。此外,由于通知數(shù)量有限,因此通知隊(duì)列的長度必然是有限的。
還必須仔細(xì)編寫 UCC 以更新某些音頻模塊參數(shù)。某些模塊參數(shù)(如無限脈沖響應(yīng) (IIR) 濾波器系數(shù))必須自動(dòng)更新,而不會(huì)被音頻處理中斷。
每個(gè) VisualAudio 框架都有一個(gè)關(guān)聯(lián)的 XML 平臺(tái)文件,該文件向 VisualAudio 應(yīng)用程序描述目標(biāo)平臺(tái)的功能,還包含生成可執(zhí)行文件所需的源、對(duì)象和庫文件的列表。軟件設(shè)計(jì)和開發(fā)通常從現(xiàn)成的評(píng)估或開發(fā)平臺(tái)開始,例如ADI公司的EZ-KIT Lite評(píng)估套件,然后在完成后遷移到實(shí)際目標(biāo)硬件。VisualAudio 的更改平臺(tái)向?qū)Э勺詣?dòng)執(zhí)行在硬件平臺(tái)之間遷移軟件的過程。
音頻模塊
VisualAudio 包含一個(gè)包含大約 100 個(gè)音頻處理模塊的庫,這些模塊已針對(duì) SHARC 處理器進(jìn)行了優(yōu)化。這些模塊按功能分類,包括音量控制、音調(diào)控制、濾波器、混音器等,這些功能類型足以開發(fā)各種音頻產(chǎn)品。這些標(biāo)準(zhǔn)音頻模塊可以通過實(shí)現(xiàn)專有后處理功能的自定義模塊來增強(qiáng)。
圖4顯示了10階IIR濾波器的模塊處理效率,該濾波器以64個(gè)雙二階濾波器的級(jí)聯(lián)形式實(shí)現(xiàn)。每個(gè)樣本的操作數(shù)繪制為塊大小的函數(shù)。大多數(shù)效率增益是通過 21 個(gè)樣本模塊實(shí)現(xiàn)的,而較大模塊的收益遞減。對(duì)于此濾波器,內(nèi)核內(nèi)環(huán)每個(gè)樣本包含 15 個(gè)乘法累加 (MAC);但是通過使用同時(shí)對(duì)兩條數(shù)據(jù)進(jìn)行操作的 SIMD 指令,循環(huán)減少到大約 <> 個(gè)周期。
圖4.IIR濾波器的處理效率與模塊大小的關(guān)系。
每個(gè)音頻模塊都通過關(guān)聯(lián)的 XML 文件向 VisualAudio 應(yīng)用程序描述。此文件包含模塊的內(nèi)存中數(shù)據(jù)結(jié)構(gòu)、內(nèi)存分配規(guī)則、輸入和輸出音頻通道列表、高級(jí)接口變量(顯示在模塊的圖形表示或檢查器上)和設(shè)計(jì)公式的描述。XML 語言由標(biāo)記結(jié)構(gòu)化數(shù)據(jù)的標(biāo)記組成。例如,考慮一個(gè)簡單的音頻模塊,該模塊按固定增益縮放單聲道信號(hào)。此模塊將包含單個(gè)渲染變量 - amp - 指定要應(yīng)用的增益。在模塊的 XML 文件中,變量 amp 由如下所示的 XML 代碼描述:
amplitude applied to input
amp
-1.0
1.0
1.0
parameter
true
true
描述標(biāo)記提供變量的簡短摘要。名稱標(biāo)記指示數(shù)據(jù)結(jié)構(gòu)中的變量名稱。該變量被描述為浮點(diǎn)數(shù),其默認(rèn)范圍為 [–1 +1],可以修改,默認(rèn)值為 1.0。VisualAudio 將此變量視為設(shè)計(jì)可設(shè)置和可調(diào)參數(shù),允許在設(shè)計(jì)時(shí)修改它,并在以后的實(shí)時(shí)調(diào)優(yōu)期間對(duì)其進(jìn)行修改。此單聲道固定增益示例說明了可以用 VisualAudio XML 格式描述的眾多變量類型之一。
VisualAudio 為后處理布局中音頻模塊的每個(gè)實(shí)例創(chuàng)建單獨(dú)的數(shù)據(jù)結(jié)構(gòu)。所有數(shù)據(jù)結(jié)構(gòu)共享一個(gè)通用的 5 字標(biāo)頭,用于描述模塊與框架的運(yùn)行時(shí)接口。接下來是特定于模塊的參數(shù)和狀態(tài)變量。例如,上述縮放器模塊的數(shù)據(jù)結(jié)構(gòu)的類型聲明為:
typedef struct
{
AMF_Module b; // Common 5 word header
float amp; // Instance specific variable
} AMF_Scaler;
VisualAudio 中的音頻處理功能遵循統(tǒng)一的調(diào)用順序。每個(gè)函數(shù)都使用三個(gè)參數(shù)調(diào)用:指向?qū)嵗龜?shù)據(jù)結(jié)構(gòu)的指針、指向輸入和輸出緩沖區(qū)指針數(shù)組(首先是輸入緩沖區(qū),然后是輸出緩沖區(qū))的指針,以及指定塊大小的整數(shù)。繼續(xù)以縮放器為例,其實(shí)時(shí)處理功能定義如下。
void AMF_Scaler_Render(AMF_Scaler *instance, float ** buffers,int blockSize) {
int i;
float *in = buffers[0];
float *out = buffers[1];
float amp = instance->amp;
for (i=0; iout[i] = in[i] * amp;
}
}
請(qǐng)注意,此示例是用 C 編寫的,以闡明其描述。VisualAudio 中包含的實(shí)際渲染函數(shù)是用優(yōu)化的匯編語言編寫的,以提高執(zhí)行速度。
總結(jié)
音頻產(chǎn)品中數(shù)字信號(hào)處理軟件的復(fù)雜性不斷增加。為了解決這個(gè)問題,ADI公司開發(fā)了圖形音頻系統(tǒng)設(shè)計(jì)和開發(fā)環(huán)境VisualAudio。VisualAudio 通過為開發(fā)人員提供音頻系統(tǒng)中的許多關(guān)鍵軟件構(gòu)建塊,通過直觀的圖形界面進(jìn)行管理,簡化了音頻產(chǎn)品的設(shè)計(jì)和開發(fā)。VisualAudio實(shí)時(shí)架構(gòu)足夠靈活,可以支持各種產(chǎn)品類型,并且在MIPS和內(nèi)存方面也很高效。整個(gè)可視音頻工具鏈啟動(dòng)了產(chǎn)品開發(fā);降低開發(fā)成本、時(shí)間和風(fēng)險(xiǎn);并允許工程師專注于創(chuàng)新和產(chǎn)品差異化。
審核編輯:郭婷
-
dsp
+關(guān)注
關(guān)注
555文章
8141瀏覽量
355102 -
轉(zhuǎn)換器
+關(guān)注
關(guān)注
27文章
8941瀏覽量
150657 -
接收器
+關(guān)注
關(guān)注
15文章
2559瀏覽量
73306
發(fā)布評(píng)論請(qǐng)先 登錄
基于IP組播的校園網(wǎng)視音頻實(shí)時(shí)答疑系統(tǒng)的研究
MIO DVI模擬視音頻到數(shù)字DVI-D轉(zhuǎn)換器
高清音頻系統(tǒng)的基礎(chǔ)是什么?
高清音頻系統(tǒng)設(shè)計(jì)最重要的是什么
如何利用實(shí)時(shí)Java設(shè)計(jì)數(shù)字音頻系統(tǒng)?
基于VxWorks的音頻系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
基于MPEG-4的數(shù)字視音頻遠(yuǎn)程實(shí)時(shí)監(jiān)控系統(tǒng)
基于ARM9的音頻系統(tǒng)設(shè)計(jì)

MPEG-H電視音頻系統(tǒng),能帶來沉浸式聲音體驗(yàn)和節(jié)目真實(shí)感
以數(shù)字音頻系統(tǒng)為例介紹音頻系統(tǒng)的構(gòu)建

ADI推出采用SHARC音頻模塊完整音頻系統(tǒng)
無線音頻系統(tǒng)介紹

評(píng)論