當前位置:首頁(yè)->方案設計 |
|
使用音頻增強型 DMA 加速復雜的音頻 DSP 算法 |
|
|
文章來(lái)源:永阜康科技 更新時(shí)間:2023/7/31 10:06:00 |
在線(xiàn)咨詢(xún): |
|
音頻工程師面臨的挑戰是設計設備,提供更好的音頻保真度,支持更多音頻通道,處理更高的采樣率和位深度,同時(shí)保持緊張的實(shí)時(shí)處理預算。
在許多音頻應用中,系統性能的主要瓶頸是音頻數據的高效移動(dòng)。多年來(lái),數字信號處理器 (DSP) 架構引入了各種創(chuàng )新,從 DSP 內核卸載了許多 I/O 或數據移動(dòng)任務(wù),使其能夠專(zhuān)注于信號處理任務(wù)。
直接內存訪(fǎng)問(wèn) (DMA) 引擎是當今大多數高性能 DSP 的關(guān)鍵組件。DSP 可以配置 DMA 引擎來(lái)訪(fǎng)問(wèn)片上和片外資源,并促進(jìn)它們之間的傳輸,而不必顯式訪(fǎng)問(wèn)存儲器或外設。這些 DMA 傳輸可以與關(guān)鍵 DSP 內核處理并行執行,以獲得性能。
標準 DMA 引擎非常適合傳統的一維和二維算法處理,例如塊復制和基本數據排序。但是,許多音頻算法需要更復雜的數據傳輸。延遲線(xiàn)就是一個(gè)例子,它由前一個(gè)時(shí)間點(diǎn)的音頻樣本組成,用于創(chuàng )建所需的音頻效果(例如回聲)。傳統的 DMA 性能對于管理延遲線(xiàn)來(lái)說(shuō)并不是的,需要對 DMA 架構進(jìn)行創(chuàng )新,以有效地處理所需的音頻算法。
是否需要DMA加速?
這個(gè)問(wèn)題的答案是肯定的,原因有兩個(gè)。首先,許多高性能 DSP 引擎中的 DMA 通道數量限制了 (pro) 音頻應用。其次,由于對高質(zhì)量音頻的需求,音頻應用中的傳統DMA通常需要更多的CPU參與

圖1。音頻應用框圖
上面的框圖描述了典型音頻應用中的數據流。每個(gè)效果獲取前一個(gè)效果的輸出,處理數據,并將其輸出轉發(fā)到數據處理鏈中的下一個(gè)效果(例如,Phaser 效果的輸出被輸入到 Delay 效果,Delay 效果的輸出被發(fā)送到混響) 。
上圖所示的數字音頻效果依賴(lài)于延遲線(xiàn)來(lái)實(shí)現。在描述完整的效果系統時(shí),需要多個(gè)延遲線(xiàn)。改變設計中使用的延遲長(cháng)度會(huì )改變音頻效果的質(zhì)量。
延遲線(xiàn)是線(xiàn)性時(shí)不變系統,其輸出信號是延遲了 x 個(gè)樣本的輸入信號的副本。在 DSP 上實(shí)現延遲線(xiàn)的有效方法是使用循環(huán)緩沖器。循環(huán)緩沖區存儲在線(xiàn)性存儲器的專(zhuān)用部分中;當緩沖區被填滿(mǎn)時(shí),新的數據被寫(xiě)入,從緩沖區的開(kāi)頭開(kāi)始。
循環(huán)緩沖區數據由一個(gè)進(jìn)程寫(xiě)入,由另一個(gè)進(jìn)程讀取,這需要單獨的讀寫(xiě)指針。讀寫(xiě)指針不允許交叉,這樣未讀數據就不會(huì )被新數據覆蓋。循環(huán)緩沖區的大小由效果所需的延遲決定。在本文中,先進(jìn)先出 (FIFO) 和循環(huán)緩沖區名稱(chēng)可以互換使用。
當使用傳統的 DMA 引擎在基于延遲的音頻效果中移動(dòng)數據時(shí),會(huì )為信號處理鏈中的每個(gè)效果分配一個(gè)單獨的循環(huán)緩沖區。饋送到特定音頻效果的輸入數據存儲在分配給該效果的循環(huán)緩沖區中。下面的框圖顯示了更詳細的數據流。在下面圖 2 的框圖中,循環(huán)緩沖區由環(huán)表示。使用循環(huán)緩沖區的環(huán)形表示,因為它顯示分配給循環(huán)緩沖區的線(xiàn)性地址空間的包裝。當指針通過(guò)循環(huán)緩沖區前進(jìn)時(shí),地址將增加,直到遇到回繞條件,導致指針重置到內存地址或循環(huán)緩沖區的起始點(diǎn)。

圖2. 使用傳統DMA引擎時(shí)的Pro音頻應用數據流框圖
為了產(chǎn)生不同的延遲,DMA 必須從延遲線(xiàn)內的不同位置檢索延遲數據。如果使用塊處理,則會(huì )檢索一組數據而不是僅一個(gè)樣本。
傳統的 DMA 引擎通常允許程序員指定幾個(gè)完整描述所需傳輸的參數。通常,這些參數是源地址、目標地址、源和目標的索引以及傳輸計數。每次 DMA 傳輸將需要一個(gè)典型 DMA 總體功能的通道。
在上面的框圖中,有五個(gè)循環(huán)緩沖區。傳統的 DMA 引擎必須經(jīng)過(guò)編程才能將數據移入和移出每個(gè)緩沖區。在上面所示的應用中,處理一個(gè)數據塊至少需要 11 次 DMA 傳輸。
這是所需的 DMA 傳輸的數量,假設從每個(gè)循環(huán)緩沖區中只檢索每個(gè)效果的一個(gè)延遲。在典型應用中,每個(gè)數據塊的 DMA 傳輸數量會(huì )高得多。例如,混響效果的實(shí)現總是需要來(lái)自其循環(huán)緩沖區的多個(gè)延遲。
隨著(zhù)實(shí)現的音頻效果數量的增加,所需的傳統 DMA 傳輸數量也會(huì )增加。因此,系統中可用的傳統 DMA 通道的數量會(huì )限制可實(shí)現的音頻效果的數量。
傳統 DMA 在音頻應用中的局限性
標準 DMA 引擎在以連續或固定間隔移動(dòng)長(cháng)數據塊時(shí)表現良好。固定間隔傳輸的一個(gè)示例是 DMA 引擎訪(fǎng)問(wèn)延遲線(xiàn)的每四個(gè)數據樣本。
當訪(fǎng)問(wèn)不連續或以固定間隔進(jìn)行時(shí),典型的 DMA 性能并不是的。當傳統的 DMA 引擎移動(dòng)循環(huán)緩沖區數據以生成數字音頻效果時(shí),CPU 在處理一個(gè)數據塊時(shí)必須干預至少兩次對 DMA 參數進(jìn)行編程。當數據訪(fǎng)問(wèn)環(huán)繞環(huán)形緩沖區邊界時(shí),CPU 需要對 DMA 參數進(jìn)行編程,并干預管理延遲線(xiàn)。

圖3. 合唱框圖
合唱效果是說(shuō)明這一點(diǎn)的一個(gè)簡(jiǎn)單算法示例,如上圖 3 所示。合唱效果通常用于改變樂(lè )器的聲音,使其聽(tīng)起來(lái)像是多個(gè)樂(lè )器在演奏,如果樂(lè )器中有人聲,那么此效果往往會(huì )使單個(gè)聲音聽(tīng)起來(lái)像合唱團。我們感知多個(gè)聲音或樂(lè )器,因為當多個(gè)聲音或樂(lè )器同時(shí)演奏時(shí),總是存在不的同步和輕微的音高變化。這些是合唱效果的主要特征。
在圖 3 中,Chorus 顯示為輸入與其兩個(gè)延遲副本的組合。音調偏差是通過(guò)延遲輸入副本中緩慢變化的延遲量來(lái)建模的。延遲緩慢變化,偏差量及其頻率由低頻振蕩器 (LFO) 控制。
如下圖4中的Chorus實(shí)現圖所示,延遲線(xiàn)是通過(guò)使用環(huán)形緩沖區(由兩個(gè)同心圓表示)來(lái)實(shí)現的。圖 4 中呈現的合唱實(shí)現意味著(zhù)使用塊處理。此合唱示例中的塊大小是四個(gè)樣本。傳入的樣本按順時(shí)針?lè )较虼鎯Φ窖h(huán)緩沖區中。

圖4. Chorus 實(shí)現框圖
塊處理同時(shí)管理數據塊(多個(gè)樣本),而不是只管理一個(gè)樣本。在此示例中,CPU 等待四個(gè)輸入樣本可用,然后計算四個(gè)輸出樣本。它通過(guò)將輸入樣本塊與從循環(huán)緩沖區獲取的兩個(gè)延遲數據塊相結合來(lái)處理這些樣本。
在使用傳統 DMA 控制器的情況下(如下圖 5),每次輸入數據塊準備就緒時(shí),CPU 都會(huì )收到中斷通知。然后CPU計算合唱輸出。

圖5. 采用傳統 DMA 時(shí) Chorus 實(shí)現時(shí)間表
本例中的 DMA 引擎分配必須執行兩個(gè)關(guān)鍵操作:
1) 將一塊輸入樣本存儲到循環(huán)緩沖區(以供將來(lái)參考)2) 從循環(huán)緩沖區檢索兩塊延遲數據(為下一個(gè)輸入樣本塊準備延遲數據)。
在這種情況下,CPU 必須通過(guò)跟蹤和編程源地址和目標地址來(lái)協(xié)助 DMA,并在數據訪(fǎng)問(wèn)繞過(guò)緩沖區邊界時(shí)進(jìn)行干預。這需要在每次傳輸之前配置 DMA 引擎。
在 CPU 重新配置 DMA 之前,每個(gè)偏移量必須由 CPU 計算(或從預先計算的表中獲。。CPU 帶寬得到利用,因為它必須在每次傳輸之前重新配置 DMA 引擎。在圖 5 中,CPU 時(shí)間線(xiàn)活動(dòng)顯示為兩行:行顯示了處理合唱效果所需的 CPU 活動(dòng),第二行顯示了配置 DMA 所需的 CPU 活動(dòng)。
在復雜的數字音頻效果(例如混響)的情況下,必須從循環(huán)緩沖器中檢索的延遲塊的數量可以達到256或更多。此外,這些延遲塊中的每一個(gè)都不是固定間隔的,并且隨著(zhù)算法運行,偏移量不斷變化。隨著(zhù)循環(huán)緩沖區中數據訪(fǎng)問(wèn)量的急劇增加,更復雜的數字音頻效果算法(如混響)將需要更多的 CPU 周期。這使得可用于實(shí)際應用程序的 CPU 帶寬減少。
當多個(gè)數字音頻效果相繼出現時(shí)(如圖 1 所示),CPU 將必須協(xié)助 DMA 移動(dòng)每個(gè)處理階段所需和產(chǎn)生的數據。在這些任務(wù)期間,CPU 和 DMA 必須同步。同步由 DMA 促進(jìn),它會(huì )中斷 CPU。
因此,系統中的中斷數量會(huì )隨著(zhù)系統復雜度的增加而增加。這些中斷會(huì )帶來(lái)很高的開(kāi)銷(xiāo),因為必須保存寄存器以保留上下文。除此之外,中斷還會(huì )經(jīng)過(guò)處理管道并破壞指令緩存的微妙效率。保留上下文會(huì )消耗大量周期,并進(jìn)一步改變指令緩存的性能。管道的過(guò)度中斷也直接影響整體性能。 |
|
|
|
|
|
|
|
 |
您可能對以下產(chǎn)品感興趣 |
 |
|
 |
產(chǎn)品型號 |
功能介紹 |
兼容型號 |
封裝形式 |
工作電壓 |
備注 |
ACM8629 |
2×50W,立體聲模式(4Ω, 24V, THD+N = 1%);100W,1×100W單聲道模式(2Ω, 24V, THD+N = 1%)
|
|
TSSOP-28(散熱片朝上,支持外接散熱器) |
4.5V-26.4V |
50W立體聲/100W單聲道、數字輸入音頻功放芯片,內置DSP多種音頻處理效果 |
ACM8625S |
2×40W, 立體聲輸出 (6Ω, 24V, THD+N = 1%) /82W,單聲道輸出 (3Ω, 24V, THD+N = 1%) |
TAS5805/ACM8625/ACM8628/ACM8622 |
TSSOP-28 |
4.5V-26.4V |
2×40W立體聲、數字輸入D類(lèi)音頻功放芯片、 內置DSP音效處理算法 |
ACM8685 |
2×32W, 立體聲輸出(8Ω, 22V, THD+N = 10%) |
ACM8622/ACM8625/ACM8628 |
TSSOP-28 |
4.5V-26.54 |
2×26W立體聲/52W單聲道、內置DSP虛擬低音等多種音頻處理效果、數字輸入音頻功放芯片 |
ACM8615 |
21W, 單聲道輸出(8Ω, 20V, THD+N = 1%)
26W, 單聲道輸出 (8Ω, 20V, THD+N = 10%)
|
|
QFN-16 |
4.5V-21V |
內置DSP、I2S數字輸入20W單聲道D類(lèi)音頻功放IC |
ACM8625P |
2×33W, 立體聲輸出(6Ω, 21V, THD+N = 1%)
51W, 單聲道輸出 (8Ω, 21V, THD+N = 1%)
|
ACM8622/ACM8625M/ACM8628 |
TSSOP-28 |
4.5V-21V |
I2S數字輸入33W立體聲D類(lèi)音頻功放芯片、內置DSP小音量低頻增強等算法 |
ACM8622 |
2×14W, 立體聲輸出(4Ω, 12V, THD+N = 1%);
2×10.5W, 立體聲輸出 (6Ω, 12V, THD+N = 1%) |
TAS5805/ACM8625/ACM8628 |
TSSOP-28 |
4.5V-14.5V |
內置DSP音效處理算法、2×14W立體聲/ 1×23W單聲道、數字輸入D類(lèi)音頻功放IC |
ACM8625 |
2×26W, 立體聲輸出(8Ω, 22V, THD+N = 1%)
2×32W, 立體聲輸出 (8Ω, 22V, THD+N = 10%) |
TAS5805/ACM8628/ACM8622 |
TSSOP-28 |
4.5V-26.4V |
I2S數字輸入26W立體聲D類(lèi)音頻功放芯片、內置DSP小音量低頻增強等算法 |
ACM8628 |
2×41W、立體聲 (6Ω, 24V, THD+N = 1%) ;
2×33W, 立體聲 (4Ω, 18V, THD+N = 1%) ;
1×82W, 單通道 (3Ω, 24V, THD+N = 1%) |
TAS5805/ACM8625/ACM8622 |
TSSOP-28 |
4.5V-26.4V |
2×41W立體聲 /1×82W單通道數字輸入功放、內置DSP小音量低頻增強等算法 |
|
|
|
|
|
|