VisualAudio設(shè)計和開發(fā)環(huán)境是用于設(shè)計和開發(fā)音頻系統(tǒng)的新軟件工具。其實時架構(gòu)特別適合音頻產(chǎn)品開發(fā)的挑戰(zhàn)。本文簡要介紹VisualAudio,然后介紹其框架,音頻模塊和音頻產(chǎn)品開發(fā)應(yīng)用。
音頻產(chǎn)品開發(fā)挑戰(zhàn)
今天,音頻系統(tǒng)開發(fā)人員面臨著越來越需要設(shè)計復(fù)雜的音頻系統(tǒng) - 特別是家庭音頻/視頻接收器(AVR)和汽車信息娛樂系統(tǒng) - 既快速又經(jīng)濟(jì)。為什么?
正常使用的離散音頻通道數(shù)量從2增加到4到5.1,最近到 7.1 。
不同的,有時甚至是競爭的多聲道音頻格式的數(shù)量一直在迅速增加 - 包括杜比? Pro Logic ?,杜比數(shù)字,DTS ? 5.1,Dolby Digital Surround EX?和DTS-ES ?。
產(chǎn)品必須與數(shù)字網(wǎng)絡(luò)連接,例如 Media
消費者擁有定向系統(tǒng)傳輸(MOST ?)總線,需要網(wǎng)絡(luò)堆棧,內(nèi)容加密和解密以及采樣率轉(zhuǎn)換。在頂級和主流產(chǎn)品中,我們期待復(fù)雜的后期處理功能,例如空間化,自動均衡和低音管理。
為了應(yīng)對這些因素,開發(fā)人員正在轉(zhuǎn)向數(shù)字信號處理器(DSP),因為他們的可編程性允許系統(tǒng)針對特定市場領(lǐng)域和應(yīng)用進(jìn)行定制。 ADI公司的SHARC ?處理器系列特別適合這項任務(wù),因為它提供了大內(nèi)部存儲器,浮點精度和高性能計算單元等功能。最近發(fā)布的第三代 SHARC處理器通過集成專門為促進(jìn)音頻產(chǎn)品設(shè)計而引入的其他功能,更進(jìn)了一步。這些功能包括硬件采樣率轉(zhuǎn)換器,加密和解密,復(fù)雜的數(shù)字音頻接口以及包含多個音頻解碼器的片上ROM。
DSP用戶面臨的歷史挑戰(zhàn)是開發(fā)能夠最佳利用處理器時鐘周期和有效利用內(nèi)存的軟件。在匯編語言中手動編碼音頻信號處理算法的長期使用和費力的方法變得越來越不可行。當(dāng)大部分所需工作用于創(chuàng)建標(biāo)準(zhǔn)“清單”和“我也是”功能而不是專注于區(qū)分具有增值功能的產(chǎn)品時,尤其如此。需要一種更好的方法來開發(fā)音頻產(chǎn)品軟件。
為了滿足這一需求,ADI開發(fā)了一個圖形環(huán)境-VisualAudio,以幫助設(shè)計和開發(fā)使用SHARC處理器系列的音頻系統(tǒng)。 VisualAudio為音頻系統(tǒng)開發(fā)人員提供了大部分軟件構(gòu)建模塊,以及圖1所示的直觀圖形界面,用于設(shè)計,開發(fā),調(diào)整和測試音頻系統(tǒng)。
VisualAudio包括基于PC的圖形用戶界面(GUI,圖形工具),DSP 內(nèi)核(框架),以及可擴(kuò)展的音頻算法庫(音頻模塊)。結(jié)合ADI的VisualDSP ++ ? 集成開發(fā)和調(diào)試環(huán)境(IDDE),VisualAudio生成產(chǎn)品就緒代碼,該代碼針對速度,每秒數(shù)百萬條指令(MIPS)和內(nèi)存使用情況。通過簡化開發(fā)復(fù)雜數(shù)字信號處理軟件的過程,VisualAudio降低了開發(fā)成本,風(fēng)險和時間。因此,音頻系統(tǒng)開發(fā)人員能夠通過將其音頻產(chǎn)品與競爭對手區(qū)分開來,專注于增加價值。
VisualAudio的核心是一個處理音頻I / O和后處理的實時軟件架構(gòu)。為了可行,生成的DSP代碼必須在MIPS和內(nèi)存方面高效,并且足夠靈活以處理各種音頻產(chǎn)品類別。 VisualAudio實時架構(gòu)如下所述,首先是框架,然后是音頻處理模塊。
框架
框架是部分處理系統(tǒng)初始化,音頻I / O,比特流檢測 1 ,實例化和調(diào)用音頻解碼器以及與主機(jī)通信的DSP代碼。 VisualAudio為其用戶提供了AVR和汽車音響系統(tǒng)框架的示例。通過編寫特定于平臺的驅(qū)動程序,VisualAudio用戶可以自定義框架的許多方面,以滿足特定的產(chǎn)品需求。在某些情況下,如果需要進(jìn)行內(nèi)部更改以獲得最佳性能,ADI還將為VisualAudio用戶提供框架源代碼。
音頻產(chǎn)品具有管理框架設(shè)計的特定要求。每個音頻產(chǎn)品有兩個主要功能:(1)實時音頻處理,以及(2)控制此處理。這兩個功能的時間尺度差別很大。實時處理(所有內(nèi)部操作都已完成)必須以采樣率進(jìn)行,否則輸出音頻中會出現(xiàn)不可接受的彈出和咔嗒聲。控制功能可以以更慢的速率(10 Hz至100 Hz)發(fā)生,并且仍然可以接受。因此,大部分 MIPS使用在實時處理中發(fā)生,而軟件復(fù)雜性的大部分在控制功能內(nèi)。為了簡化產(chǎn)品設(shè)計和開發(fā),VisualAudio將實時和控制功能分離為單獨的線程。通過手動優(yōu)化的實時音頻處理模塊實現(xiàn)效率,同時通過允許開發(fā)人員在C中編寫并在單獨的線程中運行來管理控制代碼的復(fù)雜性。
傳統(tǒng)上,采用了兩種不同的音頻處理方法。在流處理中,音頻樣本在到達(dá)時一次處理一個,而在塊處理中,緩沖幾個音頻樣本,然后作為一組進(jìn)行處理。每種方法都有明顯的優(yōu)點和缺點。流處理在數(shù)據(jù)存儲器方面是有效的,因為不需要緩沖音頻數(shù)據(jù)。流處理的主要限制是不能容忍多個函數(shù)調(diào)用的開銷。這迫使音頻處理代碼通常以匯編語言在線寫入。這樣的代碼很難模塊化和維護(hù)。
塊處理需要額外的緩沖內(nèi)存用于I / O和暫存內(nèi)存。典型的塊大小在32到256個樣本的范圍內(nèi)。由于一次處理許多樣本,因此函數(shù)調(diào)用的開銷在大量樣本上分?jǐn)偂_@導(dǎo)致MIPS高效的實現(xiàn) - 以額外的存儲器為代價 - 但是是優(yōu)選的,因為可以采用結(jié)構(gòu)化編程方法。塊處理也非常適合生成音頻塊的音頻解碼器。例如,Dolby Digital和DTS解碼器都以256個樣本塊生成音頻。
塊處理是VisualAudio使用的方法,還有幾個額外的優(yōu)點。 VisualAudio中的所有音頻I / O都是雙緩沖的,并使用直接內(nèi)存訪問(DMA)進(jìn)行管理。處理器每個塊接收一次中斷 - 每個樣本不接收一次 - 導(dǎo)致比流處理少得多的中斷開銷。此外,通過利用SHARC處理器的鏈?zhǔn)紻MA功能,雙緩沖由DMA控制器管理,顯著增加了服務(wù)音頻輸入/輸出(I / O)中斷時的允許延遲。
VisualAudio框架以塊為單位向后處理網(wǎng)絡(luò)傳送音頻。塊大小有一些限制。首先,由于某些音頻模塊的單指令,多數(shù)據(jù)(SIMD)行為,它必須是偶數(shù)。其次,最小塊大小為8個樣本 - 由于某些音頻模塊中的流水線操作。最后,在具有音頻解碼器的系統(tǒng)中,后處理塊大小必須是解碼器塊大小的因子。例如,對于Dolby Digital,可能的塊大小為8,16,32,64,128和256個樣本。
在VisualAudio汽車框架的示例中可以看到音頻I / O和緩沖,如圖2所示,音頻從MOST網(wǎng)絡(luò)或A / D轉(zhuǎn)換器到達(dá),并分成多個流。主要娛樂流由DVD播放器生成,并且遠(yuǎn)程信息處理系統(tǒng)或通過鐘聲產(chǎn)生額外的單聲道流。 DVD數(shù)據(jù)首先經(jīng)歷數(shù)字傳輸復(fù)制檢測(DTCP)解密,然后被饋送到比特流檢測器。比特流檢測器的輸出被打包成塊;當(dāng)完整的數(shù)據(jù)幀可用時,執(zhí)行音頻解碼器。 DVD播放器生成自己的采樣率,這與后處理使用的采樣率不同。因此,音頻解碼器的輸出必須通過異步采樣率轉(zhuǎn)換器。該塊將所有輸入數(shù)據(jù)流轉(zhuǎn)換為固定的輸出采樣率。此時,音頻后處理以32個樣本的固定塊大小執(zhí)行。最后一步,音頻通道被饋送到D / A轉(zhuǎn)換器或返回到MOST網(wǎng)絡(luò)。
汽車框架包含多個音頻解碼器,其中只有一個是有效的。為了降低解碼器內(nèi)存要求,VisualAudio管理一個在所有可能的解碼器之間共享的解碼器內(nèi)存池。解碼器的輸出被饋送到后處理網(wǎng)絡(luò);這就驅(qū)動了D / A轉(zhuǎn)換器。
VisualAudio使用簡單的中斷驅(qū)動內(nèi)核來管理多個線程。例如,樣本汽車框架包含總共六個線程。從最高優(yōu)先級到最低優(yōu)先級,它們是:
主機(jī)通信- 通過SPI與主機(jī)交換消息。消息在DSP 用戶控制代碼中進(jìn)行緩沖和解釋(如下所述)。
音頻發(fā)送中斷- 由串行端口中斷觸發(fā)。將輸出DMA管理到DAC,并格式化要返回MOST網(wǎng)絡(luò)的數(shù)據(jù)。在用戶中斷0中觸發(fā)音頻處理。
音頻接收中斷- 將音頻分隔為不同的流。執(zhí)行DTCP解密并將編碼數(shù)據(jù)打包到幀中。適當(dāng)時,在用戶中斷1內(nèi)觸發(fā)音頻解碼器。
音頻處理(用戶中斷0)- 對32個樣本塊執(zhí)行后處理。大部分處理都發(fā)生在這個線程中。
音頻解碼器(用戶中斷1)- 執(zhí)行音頻解碼功能。
DSP用戶控制代碼(UCC)- 在沒有中斷活動時運行并充當(dāng)應(yīng)用程序的主循環(huán)。用戶產(chǎn)品的控制功能發(fā)生在該線程中。
示例AVR框架中的典型線程活動如圖3所示。每個水平切片代表一個不同的線程。音頻I / O,解碼器和后處理定期運行,UCC以最低優(yōu)先級運行。請注意,當(dāng)處理器忙于音頻處理時,UCC可能無法運行幾毫秒。
VisualAudio分配主機(jī)微控制器和DSP之間的控制功能。這種劃分是任意的,甚至可以支持沒有專用主機(jī)微控制器的系統(tǒng)。如上所述,UCC以最低優(yōu)先級執(zhí)行 - 使用中斷處理程序未消耗的任何空閑周期。框架使用消息和通知定期調(diào)用UCC。
消息是從主機(jī)微控制器發(fā)送到DSP的命令。這些命令用于控制音頻處理(例如,“將音量設(shè)置為-20 dB”,“將低音音調(diào)控制設(shè)置為+3 dB”)或查詢音頻處理的狀態(tài)(例如,“系統(tǒng)是否”限制?”)。 VisualAudio框架在內(nèi)部處理一些命令,而其余命令則傳遞給UCC。在每個時間點,主機(jī)和DSP之間只能有一條待處理消息 - 并且DSP必須在處理完每個命令后發(fā)送確認(rèn)。
通知是由框架異步生成并在幾種條件下發(fā)生。在啟用任何實時處理之前,在系統(tǒng)初始化期間發(fā)生第一個通知。此時可以完成系統(tǒng)或應(yīng)用程序特定的初始化。以大約200Hz的速率周期性地生成的第二通知用于控制實時音頻處理,例如,自動增益控制(AGC)計算和更新。響應(yīng)于編碼比特流的變化,音頻解碼器生成最后一類通知。當(dāng)采樣率改變,輸入通道數(shù)改變,或者在輸入比特流中檢測到循環(huán)冗余校驗(CRC)錯誤時,會發(fā)生此類通知。這些通知允許UCC對音頻處理進(jìn)行適當(dāng)?shù)母摹?/p>
由于UCC被實時音頻處理搶占,它可能直到幾毫秒才被執(zhí)行 - 如圖所示圖3. VisualAudio包含幾個簡化寫入UCC的功能,這些UCC將不斷受到中斷。首先,由于主機(jī)通信接口僅允許單個主機(jī)消息在主機(jī)和DSP之間掛起,因此不存在消息緩沖區(qū)溢出或主機(jī)消息相互覆蓋的危險。另一個功能是通知隊列,其中相同類型的通知互相覆蓋。例如,如果在執(zhí)行UCC之前在時間上緊密間隔地生成兩個采樣率通知,則UCC將僅接收第二通知 - 最終采樣率。此外,由于通知數(shù)量有限,通知隊列必須具有有限的長度。
還必須仔細(xì)編寫UCC以更新某些音頻模塊參數(shù)。某些模塊參數(shù)(例如無限脈沖響應(yīng)(IIR)濾波器系數(shù))必須自動更新,而不會被音頻處理中斷。
每個VisualAudio框架都有一個關(guān)聯(lián)的XML平臺描述目標(biāo)平臺到VisualAudio應(yīng)用程序的功能的文件,還包含構(gòu)建可執(zhí)行文件所需的源,對象和庫文件的列表。軟件設(shè)計和開發(fā)通常從現(xiàn)成的評估或開發(fā)平臺開始,例如ADI的EZ-KIT Lite評估套件,然后在完成后遷移到實際的目標(biāo)硬件。 VisualAudio的變更平臺向?qū)ё詣踊谟布脚_之間遷移軟件的過程。
音頻模塊
VisualAudio包含大約100個音頻處理模塊庫,這些模塊已針對SHARC處理器進(jìn)行了優(yōu)化。按功能分類的模塊包括音量控制,音調(diào)控制,濾波器,混音器等 - 足以開發(fā)各種音頻產(chǎn)品的功能類型。這些標(biāo)準(zhǔn)音頻模塊可以通過實現(xiàn)專有后處理功能的自定義模塊進(jìn)行擴(kuò)充。
圖4展示了10階IIR濾波器的塊處理效率 - 實現(xiàn)為五個雙二階濾波器的級聯(lián)。將每個樣本的操作數(shù)繪制為塊大小的函數(shù)。 64個樣本塊實現(xiàn)了大多數(shù)效率增益,大塊的回報遞減。對于這個濾波器,核心內(nèi)環(huán)每個樣本包含21個乘法累加(MAC);但是通過使用同時對兩個數(shù)據(jù)進(jìn)行操作的SIMD指令,循環(huán)減少到大約15個周期。
每個音頻模塊都由相關(guān)的XML文件描述給VisualAudio應(yīng)用程序。該文件包含模塊內(nèi)存數(shù)據(jù)結(jié)構(gòu),內(nèi)存分配規(guī)則,輸入和輸出音頻通道列表,高級接口變量(顯示在模塊的圖形表示或檢查器)的描述,和設(shè)計方程。 XML語言由標(biāo)記結(jié)構(gòu)化數(shù)據(jù)的標(biāo)記組成。例如,考慮一個簡單的音頻模塊,通過固定增益來縮放單聲道信號。該模塊將包含一個渲染變量放大器 - 指定要應(yīng)用的增益。在模塊的XML文件中,變量 amp 由下面顯示的XML代碼描述:
幅度應(yīng)用于輸入
amp
- 1.0
1.0
1.0
《用法type =“string”》參數(shù)
true
true
description標(biāo)簽提供變量的簡短摘要。 name標(biāo)記表示數(shù)據(jù)結(jié)構(gòu)中的變量名稱。該變量被描述為浮點數(shù),具有可修改的默認(rèn)范圍[-1 + 1],默認(rèn)值為1.0。 VisualAudio將此變量視為設(shè)計可設(shè)置和可調(diào)參數(shù),允許在設(shè)計時進(jìn)行修改,之后在實時調(diào)整期間進(jìn)行修改。這個單聲道固定增益示例說明了可由VisualAudio XML格式描述的眾多變量類型之一。
VisualAudio為后處理布局中的每個音頻模塊實例創(chuàng)建單獨的數(shù)據(jù)結(jié)構(gòu)。所有數(shù)據(jù)結(jié)構(gòu)共享一個共同的5字頭,描述模塊與框架的運行時接口。接下來是模塊特定的參數(shù)和-state變量。例如,上述縮放器模塊的數(shù)據(jù)結(jié)構(gòu)的類型聲明是:
typedef struct
{
AMF_Module b; //通用5字頭
float amp; //特定于實例的變量
} AMF_Scaler;
VisualAudio中的音頻處理功能遵循統(tǒng)一的調(diào)用序列。使用三個參數(shù)調(diào)用每個函數(shù):指向?qū)嵗龜?shù)據(jù)結(jié)構(gòu)的指針,指向輸入和輸出緩沖區(qū)指針數(shù)組的指針(首先是輸入緩沖區(qū),然后是輸出緩沖區(qū)),以及指定塊大小的整數(shù)。繼續(xù)縮放器的示例,其實時處理函數(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; i
out [i] = in [i] * amp;
}
}
請注意,此示例用C語言來澄清其描述。 VisualAudio中包含的實際 render 函數(shù)是用優(yōu)化的匯編語言編寫的,以提高執(zhí)行速度。
-
處理器
+關(guān)注
關(guān)注
68文章
19799瀏覽量
233491 -
dsp
+關(guān)注
關(guān)注
555文章
8141瀏覽量
355143 -
音頻
+關(guān)注
關(guān)注
29文章
3019瀏覽量
83019
發(fā)布評論請先 登錄
高清音頻系統(tǒng)的基礎(chǔ)是什么?
SHARC處理器在音頻系統(tǒng)中的典型應(yīng)用
怎么實現(xiàn)基于智能接口的音頻系統(tǒng)設(shè)計?
Android音頻系統(tǒng)的相關(guān)資料分享
基于VxWorks的音頻系統(tǒng)的設(shè)計與實現(xiàn)
基于VxWorks的音頻系統(tǒng)的設(shè)計與實現(xiàn)
基于ARM9的音頻系統(tǒng)設(shè)計

以數(shù)字音頻系統(tǒng)為例介紹音頻系統(tǒng)的構(gòu)建

如何使用新數(shù)字總線架構(gòu)降低音頻系統(tǒng)的成本
使用可視音頻設(shè)計高效、實時的音頻系統(tǒng)

無線音頻系統(tǒng)介紹

評論