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