設為主頁(yè)  加入收藏
 
·I2S數字功放IC/內置DSP音頻算法功放芯片  ·馬達驅動(dòng)IC  ·2.1聲道單芯片D類(lèi)功放IC  ·內置DC/DC升壓模塊的D類(lèi)功放IC  ·鋰電充電管理IC/快充IC  ·無(wú)線(xiàn)遙控方案  ·直流無(wú)刷電機驅動(dòng)芯片
當前位置:首頁(yè)->技術(shù)分享
如何使用多線(xiàn)程或多核設計數字音頻系統
文章來(lái)源:永阜康科技 更新時(shí)間:2022/10/8 11:44:00
在線(xiàn)咨詢(xún):
給我發(fā)消息
張代明 3003290139
給我發(fā)消息
小鄢 2850985542
給我發(fā)消息
李湘寧 2850985550
13713728695
 

如果您的 MCU 應用程序需要處理數字音頻,請考慮采用多線(xiàn)程方法。使用多線(xiàn)程設計方法使設計人員能夠以直接的方式重用他們的設計部分。

多核和多線(xiàn)程是設計實(shí)時(shí)系統的有效方法。使用這些技術(shù),系統被設計為許多任務(wù)的集合,這些任務(wù)獨立運行并在需要時(shí)相互通信。將系統設計從大型單片代碼塊分解為更易于管理的任務(wù),可以大大簡(jiǎn)化系統設計并加快產(chǎn)品開(kāi)發(fā)。因此,整個(gè)系統的實(shí)時(shí)屬性更容易理解。設計者只需要擔心每個(gè)任務(wù)實(shí)現的保真度,提出諸如“網(wǎng)絡(luò )協(xié)議是否正確實(shí)現?”之類(lèi)的問(wèn)題。

在本文中,我們將討論如何使用多線(xiàn)程或多核設計方法來(lái)設計對數據流進(jìn)行操作的實(shí)時(shí)系統,例如數字音頻系統。我們使用幾個(gè)數字音頻系統來(lái)說(shuō)明設計方法,包括異步 USB 音頻 2、以太網(wǎng) AVB 和 MP3 播放器的數字基座。在展示如何有效地使用多核和多線(xiàn)程來(lái)設計所需的緩沖和時(shí)鐘方案之前,我們將簡(jiǎn)要討論數字音頻、多核和多線(xiàn)程的概念。

數字音頻

在許多消費市場(chǎng)中,數字音頻已經(jīng)取代了模擬音頻,原因有二。首先,大多數音頻源都是數字的。無(wú)論是以有損壓縮格式 (MP3) 還是以非壓縮格式 (CD) 交付,數字標準已經(jīng)取代了傳統的模擬標準,例如磁帶和磁帶。其次,數字音頻比模擬音頻更容易處理。數據可以通過(guò)現有標準(例如 IP 或 USB)傳輸而不會(huì )丟失,并且硬件設計不需要任何“魔法”來(lái)降低本底噪聲。就數字路徑而言,本底噪聲是恒定的,不受移動(dòng)電話(huà)可能引起的 TDMA 噪聲的影響。

數字音頻系統對樣本流進(jìn)行操作。每個(gè)樣本代表一個(gè)或多個(gè)音頻通道在某個(gè)時(shí)間點(diǎn)的幅度,樣本之間的時(shí)間由采樣率控制。CD 標準有兩個(gè)通道(左聲道和右聲道)并使用 44.1 kHz 的采樣率。常見(jiàn)的音頻標準使用 2、6 (5.1) 和 8 (7.1) 通道,以及 44.1 kHz、48 kHz 或倍數的采樣率。我們使用 48 kHz 作為運行示例,但這絕不是唯一的標準。

多核和多線(xiàn)程

在多線(xiàn)程設計方法中,系統被表示為并發(fā)任務(wù)的集合。使用并發(fā)任務(wù),而不是單一的單一程序,有幾個(gè)優(yōu)點(diǎn):
多任務(wù)是支持關(guān)注點(diǎn)分離的好方法,這是軟件工程最重要的方面之一。關(guān)注點(diǎn)分離意味著(zhù)設計的不同任務(wù)可以單獨設計、實(shí)現、測試和驗證。一旦指定了任務(wù)之間的交互,團隊或個(gè)人就可以各自完成自己的任務(wù)。

并發(fā)任務(wù)提供了一個(gè)簡(jiǎn)單的框架來(lái)指定系統應該做什么。例如,數字音頻系統將播放通過(guò)網(wǎng)絡(luò )接口接收的音頻樣本。換句話(huà)說(shuō),系統應該同時(shí)執行兩項任務(wù):從網(wǎng)絡(luò )接口接收數據并在其音頻接口上播放樣本。將這兩個(gè)任務(wù)表示為單個(gè)順序任務(wù)是令人困惑的。

表示為并發(fā)任務(wù)集合的系統可以通過(guò)一個(gè)或多個(gè)多線(xiàn)程內核中的線(xiàn)程集合來(lái)實(shí)現(參見(jiàn)圖 1)。我們假設線(xiàn)程是在指令級調度的,就像XMOS XCore 處理器上的情況一樣,因為這使得并發(fā)任務(wù)能夠實(shí)時(shí)運行。請注意,這與 Linux 上的多線(xiàn)程不同,例如,線(xiàn)程被調度在具有上下文切換的單處理器上。這可能使這些線(xiàn)程對人類(lèi)而言似乎是并發(fā)的,但對一組實(shí)時(shí)設備而言卻不是。

并發(fā)任務(wù)在邏輯上設計為通過(guò)消息傳遞進(jìn)行通信,當兩個(gè)任務(wù)由兩個(gè)線(xiàn)程實(shí)現時(shí),它們通過(guò)發(fā)送數據和控制通道進(jìn)行通信。在內核內部,通道通信由內核本身執行,當線(xiàn)程位于不同的內核上時(shí),通道通信通過(guò)交換機執行(參見(jiàn)圖 2)。

多線(xiàn)程設計已被嵌入式系統設計人員使用了數十年。為了實(shí)現嵌入式系統,系統設計人員過(guò)去常常使用大量微控制器。例如,在音樂(lè )播放器內部,可能會(huì )發(fā)現三個(gè)控制閃存、DAC 和 MP3 解碼器芯片的微控制器。


圖 1:線(xiàn)程、通道、內核、交換機和鏈接。并發(fā)線(xiàn)程通過(guò)內核內部、芯片上的內核之間或不同芯片上的內核之間的通道進(jìn)行通信。

我們認為,現代多線(xiàn)程環(huán)境可以替代這種設計策略。單個(gè)多線(xiàn)程芯片可以替代多個(gè) MCU,并提供任務(wù)之間的集成通信模型。該系統不必在單獨的 MCU 上的任務(wù)之間實(shí)現定制通信,而是作為一組通過(guò)通道進(jìn)行通信的線(xiàn)程來(lái)實(shí)現。

使用多線(xiàn)程設計方法使設計人員能夠以直接的方式重用他們的設計部分。在傳統的軟件工程中,功能和模塊結合起來(lái)執行復雜的任務(wù)。但是,這種方法不一定適用于實(shí)時(shí)環(huán)境,因為依次執行兩個(gè)函數可能會(huì )破壞函數或模塊的實(shí)時(shí)性要求。

在理想的多線(xiàn)程環(huán)境中,實(shí)時(shí)任務(wù)的組合是微不足道的,因為它只是為每個(gè)新的實(shí)時(shí)任務(wù)添加一個(gè)線(xiàn)程(或核心)的情況。實(shí)際上,設計人員會(huì )對內核數量有所限制(例如,出于經(jīng)濟原因),因此必須決定哪些任務(wù)將組成并發(fā)線(xiàn)程,以及哪些任務(wù)將作為集合集成到單個(gè)線(xiàn)程中的功能。

多線(xiàn)程數字音頻

一個(gè)數字音頻系統很容易拆分為多個(gè)線(xiàn)程,包括一個(gè)網(wǎng)絡(luò )協(xié)議棧線(xiàn)程、一個(gè)時(shí)鐘恢復線(xiàn)程、一個(gè)音頻傳輸線(xiàn)程,以及可選的用于 DSP、設備升級和驅動(dòng)程序認證的線(xiàn)程。網(wǎng)絡(luò )協(xié)議?梢韵褚蕴W(wǎng)/IP 棧一樣復雜并包含多個(gè)并發(fā)任務(wù),或者像 S/PDIF 接收器一樣簡(jiǎn)單。


圖 2:具有 24 個(gè)并發(fā)線(xiàn)程的三核系統的物理化身。頂部設備有兩個(gè)核心,底部設備有一個(gè)核心。

我們假設系統中的線(xiàn)程通過(guò)通道發(fā)送數據樣本進(jìn)行通信。在這種設計方法中,線(xiàn)程是在單核還是多核系統上執行并不重要,因為多核只是為設計增加了可擴展性。我們假設每個(gè)線(xiàn)程的計算要求可以靜態(tài)建立并且不依賴(lài)于數據,這通常是未壓縮音頻的情況。

我們將把注意力集中在設計的兩個(gè)部分:線(xiàn)程之間的緩沖(以及它們對性能的影響)和時(shí)鐘恢復。一旦做出了這些設計決策,實(shí)現每個(gè)線(xiàn)程的內部就遵循正常的軟件工程原則,并且與人們預期的一樣難或容易。緩沖和時(shí)鐘恢復很有趣,因為它們都對用戶(hù)體驗有定性影響(促進(jìn)穩定的低延遲音頻),并且在多線(xiàn)程編程環(huán)境中很容易理解。

緩沖

在數字解決方案中,數據樣本不一定在交付時(shí)進(jìn)行傳輸。這需要緩沖數字音頻。例如,考慮一個(gè)采樣率為 48 kHz 的 USB 2.0 揚聲器。USB 層將在每 125 µs 窗口中傳輸六個(gè)樣本的突發(fā)。無(wú)法保證在 125 µs 的窗口中將傳送六個(gè)樣本,因此需要至少 12 個(gè)樣本的緩沖區,以保證樣本可以實(shí)時(shí)流式傳輸到揚聲器。

設計挑戰是建立適量的緩沖。在模擬系統中,緩沖不是問(wèn)題。信號按時(shí)傳遞。在基于非實(shí)時(shí)操作系統設計的數字系統中,程序員通常堅持使用相當大的緩沖區(250 或 1,000 個(gè)樣本)以應對調度策略中的不確定性。然而,大緩沖區在內存方面、增加延遲方面以及證明它們足夠大以保證無(wú)點(diǎn)擊交付方面都是昂貴的。

多線(xiàn)程設計提供了一個(gè)很好的框架來(lái)非正式地和正式地推理緩沖并避免不必要的大緩沖區。例如,考慮上述 USB 揚聲器增加了環(huán)境噪聲校正系統。該系統將包括以下線(xiàn)程:

通過(guò)網(wǎng)絡(luò )接收 USB 樣本的線(xiàn)程。
過(guò)濾樣本流的一系列 10 個(gè)或更多線(xiàn)程,每個(gè)線(xiàn)程都有一組不同的系數。
使用 I 2 S將過(guò)濾后的輸出樣本傳送到立體聲編解碼器的線(xiàn)程。
從連接到麥克風(fēng)采樣環(huán)境噪聲的編解碼器中讀取樣本的線(xiàn)程。
將環(huán)境噪聲二次采樣到 8 kHz 采樣率的線(xiàn)程。
建立環(huán)境噪聲頻譜特性的線(xiàn)程。
根據計算的光譜特性更改濾波器系數的線(xiàn)程。

所有線(xiàn)程都將在 48 kHz 基本周期的某個(gè)倍數上運行。例如,每個(gè)過(guò)濾線(xiàn)程將每 48 kHz 周期過(guò)濾一個(gè)樣本;交付線(xiàn)程將在每個(gè)周期交付一個(gè)樣本。每個(gè)線(xiàn)程也有一個(gè)定義的窗口,它在上面操作,以及一個(gè)定義的方法,通過(guò)這個(gè)方法推進(jìn)這個(gè)窗口。例如,如果我們的過(guò)濾器線(xiàn)程是使用雙二階實(shí)現的,它將在一個(gè)包含三個(gè)樣本的窗口上運行,每個(gè)周期提前一個(gè)樣本。頻譜線(xiàn)程可以在每 64 個(gè)樣本推進(jìn) 64 個(gè)樣本的 256 個(gè)樣本窗口(以執行 FFT(Fest Fourier Transform))上運行。

現在可以建立在同一周期運行的系統的所有部分,并將它們以同步部分的形式連接在一起。在這些同步部分內不需要緩沖區,盡管如果線(xiàn)程要在管道中運行,則需要單個(gè)緩沖區。在各個(gè)同步部分之間需要緩沖區。在我們的示例中,我們最終得到三個(gè)部分:

從 USB 接收樣本、過(guò)濾并以 48 kHz 傳輸的部分。
以 48 kHz 采樣環(huán)境噪聲并以 8 kHz 傳輸的部分。
建立頻譜特性并在 125 Hz 時(shí)更改濾波器設置的部分。
這三個(gè)部分如圖 3 所示。從 USB 緩沖區接收樣本的第一部分需要緩沖 12 個(gè)立體聲樣本。


圖 3:根據頻率分組在一起的線(xiàn)程。

傳遞的部分需要緩沖一個(gè)立體聲樣本。將 10 個(gè)過(guò)濾器線(xiàn)程作為管道運行需要 11 個(gè)緩沖區。這意味著(zhù)從接收器到編解碼器的總延遲包括 24 個(gè)采樣時(shí)間,即 500 µs,并且可以添加一個(gè)額外的采樣以應對時(shí)鐘恢復算法中的中期抖動(dòng)。這部分以 48 kHz 運行。

對環(huán)境噪聲進(jìn)行采樣的第二部分需要在輸入端存儲一個(gè)樣本,并在二次采樣中存儲六個(gè)樣本。因此,在 48 kHz 或 145 µs 處有 7 個(gè)樣本延遲。

建立頻譜特性的第三部分需要以 8 kHz 的采樣率存儲 256 個(gè)樣本。不需要其他緩沖區。因此,環(huán)境噪聲和濾波器校正之間的延遲為 8 kHz 下的 256 個(gè)樣本,二次采樣時(shí)間為 145 µs,或剛好超過(guò) 32 ms。請注意,這些是我們選擇使用的算法的最小緩沖區大;如果此延遲不可接受,則必須選擇不同的算法。

設計線(xiàn)程以對數據塊而不是單個(gè)樣本進(jìn)行操作通常很容易,但這會(huì )增加所經(jīng)歷的整體延遲,增加內存需求并增加復雜性。僅當有明顯的好處時(shí)才應考慮這一點(diǎn),例如增加吞吐量。

計時(shí)數字音頻

數字音頻和模擬音頻之間的一個(gè)很大區別在于,模擬音頻基于此基礎采樣率,而數字音頻需要將時(shí)鐘信號分配給系統的所有部分。盡管組件都可以使用不同的采樣率(例如,系統的某些部分可能使用 48 kHz,而其他一些部分可能使用 96 kHz,中間有一個(gè)采樣率轉換器),所有組件都應就一秒的長(cháng)度達成一致,并且因此在測量頻率的基礎上達成一致。

數字音頻的一個(gè)有趣特性是系統內的所有線(xiàn)程都與這個(gè)時(shí)鐘頻率的基數無(wú)關(guān),假設有一個(gè)黃金標準的基頻。系統中的多個(gè)核心是否使用不同的晶體并不重要,只要它們對樣本進(jìn)行操作即可。然而,在系統的邊緣,真正的時(shí)鐘頻率很重要,采樣在途中產(chǎn)生的延遲也很重要。

在多線(xiàn)程環(huán)境中,將留出一個(gè)線(xiàn)程來(lái)明確測量真實(shí)時(shí)鐘頻率,實(shí)施時(shí)鐘恢復算法,測量本地時(shí)鐘與全局時(shí)鐘,并在時(shí)鐘偏移上與主時(shí)鐘達成一致。

可以使用互連的底層比特率隱含地測量時(shí)鐘,例如 S/PDIF 或 ADAT。測量其中任何一個(gè)網(wǎng)絡(luò )上的每秒比特數將給出主時(shí)鐘的測量值。時(shí)鐘可以通過(guò)使用為此目的而設計的協(xié)議來(lái)明確測量,例如以太網(wǎng)上的 PTP。

在時(shí)鐘恢復線(xiàn)程中,可以實(shí)現一個(gè)控制循環(huán),它估計時(shí)鐘頻率,并根據觀(guān)察到的誤差進(jìn)行調整。在最簡(jiǎn)單的形式中,誤差用作調整頻率的指標,但濾波器可用于減少抖動(dòng)。該軟件線(xiàn)程實(shí)現了傳統上由 PLL 但在軟件中執行的功能,因此它可以廉價(jià)地適應環(huán)境。

結論

多線(xiàn)程開(kāi)發(fā)方法使數字音頻系統能夠使用分而治之的方法進(jìn)行開(kāi)發(fā),其中一個(gè)問(wèn)題被分成一組并發(fā)任務(wù),每個(gè)任務(wù)在多線(xiàn)程內核上的單獨線(xiàn)程中執行。

像許多實(shí)時(shí)系統一樣,數字音頻適合多線(xiàn)程設計方法,因為數字音頻系統顯然由一組處理數據的任務(wù)組成,并且還需要這些任務(wù)同時(shí)執

 
 
 
    您可能對以下產(chǎn)品感興趣  
產(chǎn)品型號 功能介紹 兼容型號 封裝形式 工作電壓 備注
FS2105 2x30W @1%THD+N into 8Ω BTL at 24V TAS5805 TSSOP-28 4.5V-26.4V I2S數字輸入、集成EQ/DRC/音量控制2x30W立體聲D類(lèi)音頻功放IC
 
 
·藍牙音箱的音頻功放/升壓/充電管
·單節鋰電內置升壓音頻功放IC選型
·HT7179 12V升24V內置
·5V USB輸入、三節鋰電升壓型
·網(wǎng)絡(luò )主播聲卡專(zhuān)用耳機放大IC-H
 
M12269 河北發(fā)電機組 HT366 ACM8629 HT338 

業(yè)務(wù)洽談:手機:13713728695(微信同號)   QQ:3003207580  EMAIL:panbo@szczkjgs.com   聯(lián)系人:潘波

地址:深圳市寶安西鄉航城大道航城創(chuàng )新創(chuàng )業(yè)園A5棟307/309

版權所有:深圳市永阜康科技有限公司  備案號:粵ICP備17113496號

在线亚洲人成电影_中文有码国产精品欧美激情_免费大片一级a一级久久三_av天堂东京热无码专区