ARM Cortex-M的音頻性能解析
近年來,便攜式音樂播放器大放異彩,備受人們喜愛。其中的原因有很多,例如海量的壓縮音樂內(nèi)容,數(shù)據(jù)存儲(chǔ)成本不斷下降、操作簡(jiǎn)便和輕松訪問不同流行元素的在線音樂內(nèi)容。消費(fèi)者對(duì)下一代音樂播放器日益挑剔,期盼更長的音頻播放時(shí)間、更豐富的聆聽體驗(yàn)。
由此誕生了Cortex-M系列,這是新一代ARM低成本微處理器,采用低功耗設(shè)計(jì)。Cortex-M3內(nèi)核和最近發(fā)布的Cortex-M4內(nèi)核基于哈佛架構(gòu)的3級(jí)流水線并采用Thumb-2指令集架構(gòu)(ISA),內(nèi)存要求更低。但這些MCU能否勝任音頻處理任務(wù)?它們能否打造更出色的傾聽體驗(yàn),滿足人們的期望?
為了分析這些處理器是否適合處理音頻,首先我們以MP3解碼器和均衡器為例,大致了解一下音頻解碼器和后處理等音頻部件中常用音頻處理模塊實(shí)施方案,然后按照高效實(shí)現(xiàn)這些模塊對(duì)處理器指令集架構(gòu)的要求,對(duì)模塊加以分類。
我們重點(diǎn)從指令集角度來探討Cortex-M3和Cortex-M4內(nèi)核在音頻處理方面的優(yōu)勢(shì)。為此,我們先討論不同音頻部件的一些模塊代碼示例,隨后分析這些處理器在循環(huán)和指令方面的獨(dú)到優(yōu)勢(shì),最后,將展示流行音頻編解碼器和音頻后處理部件的典型性能指標(biāo)以佐證這些處理器內(nèi)核的音頻能力。
音頻處理模塊的功能塊
為了分析音頻處理器要求,現(xiàn)先從音頻處理模塊所涉及的功能塊,即音頻編解碼器和音頻后處理部件談起。本節(jié)框圖中的模塊用顏色標(biāo)為3種不同類別。綠色表示乘加(MAC)密集模塊、紅色表示MAC和控制代碼混合模塊、藍(lán)色表示控制代碼模塊。
音頻編解碼器
互聯(lián)網(wǎng)提供了大量壓縮音頻數(shù)據(jù),必然要求音樂播放器支持多種流行的音頻解碼器。音頻編碼器的處理功能涉及一系列功能塊,我們接下來回顧一下。
圖1:典型音頻編碼器框圖。
音頻編碼器:音頻編解碼器的用途是實(shí)現(xiàn)音頻數(shù)據(jù)壓縮,同時(shí)在給定比特率的限制下努力獲得保真音質(zhì)。典型編碼器如圖1所示。一般來說,音頻編碼器采用如下三步完成壓縮:首先,通過數(shù)據(jù)濾波調(diào)節(jié)音頻數(shù)據(jù)。然后,通過窗口化和重疊對(duì)音頻數(shù)據(jù)進(jìn)行幀化,等待進(jìn)一步處理;接著,將此數(shù)據(jù)變換至頻域,消除時(shí)域內(nèi)的冗余。使用心理聲學(xué)原理,對(duì)可能引入的、聽不見的量化噪聲數(shù)量進(jìn)行計(jì)算;最后,對(duì)此數(shù)據(jù)進(jìn)行量化并通過熵編碼實(shí)現(xiàn)進(jìn)一步無損壓縮。此編碼數(shù)據(jù)經(jīng)緊密打包成為位流。盡管所實(shí)現(xiàn)的壓縮有些損耗,但聽覺難以分辨細(xì)微差別。
音頻解碼器:將上述關(guān)于音頻編碼器的過程反向,即是音頻解碼器從位流中還原音頻數(shù)據(jù)的原理。這里以MP3解碼器為例進(jìn)行討論,高層模塊分解如圖2所示。框圖以MP3文件格式的壓縮音頻作為輸入并輸出PCM格式的非壓縮音頻。
這些模塊以功能命名,并代表各自執(zhí)行的操作
圖2:MP3解碼器框圖。
“Bit Stream Demux”模塊解析MP3位流
“Entropy&Inv Q”模塊執(zhí)行霍夫曼解碼和反向量化
“IMDCT”模塊對(duì)此數(shù)據(jù)進(jìn)行反向修改離散余弦變換
“Overlap and Add”模塊執(zhí)行窗口化、重疊和加法運(yùn)算
“Synthesis Filter Bank”從濾波器組域數(shù)據(jù)中重構(gòu)時(shí)域樣本[!--empirenews.page--]音頻后處理
兩種情況一定需要音頻數(shù)據(jù)后處理。首先,要求提供豐富的聆聽體驗(yàn)。例如,可使用立體聲加寬等空間定位器(Spatializer)來消除長時(shí)間使用耳機(jī)的聽覺疲勞。即使是基本的音頻播放,也需要后處理。例如,音樂播放器的DAC如果僅支持有限系列采樣率的情況下,可能需要對(duì)音頻數(shù)據(jù)進(jìn)行重新采樣。
圖3:均衡器框圖。
我們以均衡器為例,探討后處理器中用到的典型模塊。均衡器一般是為了滿足聆聽者的偏好,同時(shí)也可用于校正耳機(jī)或揚(yáng)聲器的頻響。圖3所示為基本參數(shù)均衡器的高層模塊分解。下列模塊用于僅修改一小段音頻頻譜,具體做法是利用增益值、帶寬和中心/截止頻率的可控參數(shù)提供增益或衰減。要獲得所需頻響,可將多個(gè)此類二階IIR濾波器級(jí)聯(lián)。
低頻(LF)斜率濾波器:一種用于修改音頻頻譜低音部分的濾波器
峰化濾波器:一種用于修改音頻頻譜中頻范圍的濾波器
高頻(HF)斜率濾波器:一種用于修改音頻頻譜高音部分的濾波器
音頻處理模塊類別
根據(jù)特性,音頻處理模塊廣義上分為三類。我們將詳細(xì)討論每種模塊及其特性,然后進(jìn)一步分析高效實(shí)現(xiàn)這些模塊對(duì)處理器的要求。表1概述了本節(jié)所述音頻處理的處理器要求。
表1:音頻處理模塊及其處理器要求。
MAC密集模塊
這些模塊屬于計(jì)算密集型,主要執(zhí)行乘加(MAC)運(yùn)算,通常有一個(gè)預(yù)定的代碼流。濾波(FIR、IIR濾波器)、窗口化、相關(guān)性及卷積等信號(hào)處理運(yùn)算屬于此類別的典型例子。此類模塊的處理器要求稍后論述。
高精度MAC:這些模塊正常工作需要高精度乘加法。例如,IIR濾波器的穩(wěn)定性要求高精度運(yùn)算。輸出的保真度和精度直接取決于MAC指令的精度。盡管可使用低精度指令來某些仿真高精度MAC指令(例如32位乘以32位,在64位結(jié)果內(nèi)累加),但最好是使用高精度MAC指令來獲得高效實(shí)現(xiàn)。
SIMD能力:這些模塊內(nèi)的運(yùn)算往往是少量指令的反復(fù)執(zhí)行,從而產(chǎn)生精簡(jiǎn)循環(huán)內(nèi)核。單指令多數(shù)據(jù)(SIMD)能力對(duì)于此類模塊的高效執(zhí)行最為理想。內(nèi)置此功能的處理器更有利于處理此類模塊。
飽和算法:某些運(yùn)算需要使用飽和算法。例如,當(dāng)在運(yùn)行時(shí)產(chǎn)生窗口系數(shù)或在產(chǎn)生PCM輸出數(shù)據(jù)到所需位寬時(shí)。針對(duì)飽和算術(shù)的需求可以減少,但無法完全避免,因?yàn)橹虚g結(jié)果的位寬更高。因此,支持飽和算法的指令是高效實(shí)現(xiàn)的理想之選。
分支推測(cè):這些模塊有一個(gè)預(yù)定的代碼流。由于這些模塊需要對(duì)指令反復(fù)執(zhí)行運(yùn)算,簡(jiǎn)單的分支推測(cè)有利于減少因流水線清空所產(chǎn)生的開銷。
MAC和控制代碼混合模塊
這些模塊同樣是計(jì)算密集型,但在MAC密集運(yùn)算中還涉及控制代碼運(yùn)算??焖俑道锶~變換(FFT)、濾波器組等變換運(yùn)算是這一類型的典型例子。此類模塊的處理器要求為:
DSP指令:由于上述兩類模塊(MAC密集模塊和MAC和控制代碼混合模塊)主要涉及MAC運(yùn)算,因此,如果只有MAC和MLS(乘法和減法)指令而無運(yùn)算累加的開銷,一定能提高效率。
混合位寬運(yùn)算:運(yùn)算對(duì)象的最小位寬取決于各種因素。例如,在濾波運(yùn)算中,輸出精度和濾波器穩(wěn)定性決定濾波器系數(shù)的位寬。所以高效實(shí)現(xiàn)離不開能夠處理混合位寬運(yùn)算對(duì)象的指令。
壓縮數(shù)據(jù)處理:FFT等這類模塊的運(yùn)算一般使用稱為旋轉(zhuǎn)因子的16位系數(shù)。FFT基數(shù)越高,所涉及的旋轉(zhuǎn)因子越多,但相對(duì)復(fù)雜度越低。這些旋轉(zhuǎn)因子可通過打包成32位數(shù)據(jù)來降低內(nèi)核循環(huán)中的任何寄存器不足?;蛘呖赏ㄟ^將旋轉(zhuǎn)因子載入到內(nèi)核循環(huán)以外的寄存器來避免重復(fù)負(fù)載的可能開銷。因此,能夠運(yùn)算壓縮數(shù)據(jù)的指令是提高效率的理想之選。
位反轉(zhuǎn):能夠執(zhí)行位反轉(zhuǎn)的指令有利于需要位反轉(zhuǎn)尋址的FFT等關(guān)鍵模塊。
控制代碼模塊
這些模塊主要涉及控制代碼且代碼流為數(shù)據(jù)依賴型。位流解復(fù)用器和熵解碼運(yùn)算就屬于此類。例如,MP3解碼器采用霍夫曼解碼,而WMA解碼器采用游程解碼。接下來討論此類模塊的處理器要求。
無符和按位運(yùn)算:這些模塊需要處理打包的數(shù)據(jù)流,而這需要數(shù)據(jù)提取。因此,能夠執(zhí)行按位運(yùn)算、提取、打包、解包的指令和能夠處理無符運(yùn)算對(duì)象的指令都是高效實(shí)現(xiàn)所需要的。
精簡(jiǎn)數(shù)據(jù),減少占位:這些模塊中的代碼流主要為數(shù)據(jù)依賴型,因此不是預(yù)定的。所以,精簡(jiǎn)數(shù)據(jù)大小有助于減少緩存清空所引起的任何開銷。
[!--empirenews.page--]ARM Cortex-M3和Cortex-M4處理器
本節(jié)將探討ARM低功耗高性能微控制器Cortex-M3內(nèi)核的功能,然后討論Cortex-M系列的最新處理器內(nèi)核M4的功能。Cortex-M系列內(nèi)核的功能及示例指令和循環(huán)如表2所列。
Cortex-M3功能:采用高精度MAC單元,可提供最高32位乘以32位數(shù)據(jù)的乘法精度,得出64位累加結(jié)果。其他有利功能包括DSP指令、范數(shù)計(jì)算輔助指令、分支推測(cè)、因Thumb-2的高代碼密度以及硬件除法指令。這些功能都有利于音頻處理。
Cortex-M4功能:Cortex-M4內(nèi)核是Cortex-M3的升級(jí)產(chǎn)品,除了繼承全部現(xiàn)有功能外,還增加了單循環(huán)MAC單元和浮點(diǎn)單元(FPU)等額外功能。MAC單元只需要1個(gè)循環(huán),即使對(duì)于最高精度運(yùn)算也是如此,將32位乘以32位,得出64位累加結(jié)果。增加了具有SIMD功能的DSP指令和高精度MAC單元等新功能,Cortex-M4就是一種具有DSP功能的微控制器,即數(shù)字信號(hào)控制器(DSC)。這些功能對(duì)于音頻處理非常有利,因?yàn)樾枰呔葋肀3滞赋旱囊糍|(zhì)。
表2:Cortex-M3和Cortex-M4功能、指令及循環(huán)示例。
音頻處理傳統(tǒng)上在數(shù)字信號(hào)處理器(DSP)上實(shí)施,而由通用處理器(GPP)負(fù)責(zé)系統(tǒng)相關(guān)的功能。隨著Cortex-M系列的問世,由于這些處理器完全適合音頻處理應(yīng)用,音頻可在這些內(nèi)核上獲得高效實(shí)施而無需DSP。
音頻模塊代碼示例
現(xiàn)在,我們將展示一些不同音頻處理部件(音頻解碼器、編碼器、后處理及通用信號(hào)處理等)的例程的代碼示例。代碼段內(nèi)用粗體字表示的指令是最新引入Cortex-M4的。每條指令的循環(huán)次數(shù)在括號(hào)中給出。表格概述了每個(gè)示例所用的總循環(huán)、所需的指令數(shù)及所用的寄存器。
窗口重疊加法模塊
重疊加法窗口化是大多數(shù)音頻解碼器采用的典型模塊。它以MAC運(yùn)算為主,屬于計(jì)算密集型。圖4所示為此模塊的運(yùn)算處理流程。此例的實(shí)施方案在等式1中給出。
圖4:窗口重疊加法模塊圖。
等式1:窗口重疊加法模塊。
雙二階濾波器是二階IIR濾波器的常用名,是均衡器等音頻編碼器和后處理器模塊的一種典型例程。本質(zhì)上屬于計(jì)算密集型,以MAC運(yùn)算為主。圖5所示為此模塊的Direct Form-1版本。此例的實(shí)施方案在等式-2中給出。在此例中,兩種處理器的寄存器用途和指令數(shù)完全相同。
等式2:窗口重疊加法模塊。
基2 FFT蝶形器模塊
FFT是一種通用信號(hào)處理運(yùn)算。音頻處理模塊一般都需要FFT運(yùn)算進(jìn)行頻域變換。它計(jì)算密集型,以MAC和控制代碼混合運(yùn)算為主。此例僅說明基2時(shí)間抽取算法(DIT)蝶形運(yùn)算。輸入輸出數(shù)據(jù)的精度均為16位。圖6所示為此模塊的運(yùn)算處理流程。此例的實(shí)施方案在等式3中給出。
圖6:基2 DIT FFT蝶形運(yùn)算。
等式3:基2時(shí)間抽取蝶形運(yùn)算。
FIR濾波器模塊
FIR濾波器是一種典型的信號(hào)處理運(yùn)算,常用于后處理模塊。此模塊也是計(jì)算密集型,以MAC運(yùn)算為主。圖7所示為此模塊的運(yùn)算處理流程。在此例中的實(shí)施方案在等式4中給出。
圖7:FIR濾波器模塊圖。
等式4:FIR濾波器等式。
Ittiam公司基于Cortex-M處理器的音頻解決方案包含低功率音頻編解碼器和高品質(zhì)后處理部件。表3列出了Cortex-M3和Cortex-M4處理器所選的代表性音頻部件的典型性能。
處理器的音頻功能:該音頻編解碼器進(jìn)一步優(yōu)化了性能,充分發(fā)揮了Cortex-M3的DSP指令和Cortex-M4的SIMD潛能。這款優(yōu)化的音頻解決方案提高了處理器頻率的使用效率,延長了音頻播放時(shí)間。音頻后處理器部件通過高效利用高精度MAC單元來實(shí)現(xiàn)卓越音質(zhì)。借助Cortex-M處理器的這些功能,Ittiam音頻解決方案實(shí)現(xiàn)了低功耗、高音質(zhì)。
音頻能力:這些典型性能指標(biāo)針對(duì)立體聲模式和44.1kHz采樣率。解碼器和編碼器采用128kbps配置。參數(shù)均衡器采用3頻帶配置。所有性能指標(biāo)假設(shè)零等待狀態(tài)內(nèi)存配置。硬件性能會(huì)隨實(shí)際內(nèi)存配置而有所不同。
表3:Cortex-M3和Cortex-M4音頻部件的處理器資源利用率。
為了計(jì)算處理器的負(fù)載百分比,假設(shè)Cortex-M3的時(shí)鐘頻率為100MHz,Cortex-M4為150MHz。執(zhí)行一次音頻解碼并施加兩個(gè)效應(yīng)(例如MP3解碼以及隨后的均衡器和立體聲加寬)的一般處理器負(fù)載在Cortex-M3上約為40%,而在Cortex-M4上約為15%。這表明這些處理器不僅音頻能力超高,還可增強(qiáng)聆聽體驗(yàn)。
表4:Cortex-M3和Cortex-M4音頻部件的內(nèi)存資源要求。
內(nèi)存占用更小:表4列出了Cortex-M3和Cortex-M4處理器所選的代表性音頻部件的內(nèi)存要求。這些內(nèi)存資源要求分別針對(duì)RAM和ROM內(nèi)存。由于Cortex-M4功能更先進(jìn),所以ROM要求比Cortex-M3更低。Cortex-M系列處理器的Thumb-2功能使音頻部件的內(nèi)存占用更小,內(nèi)存要求低,因而成本更低。
本文小結(jié)
通過對(duì)各種音頻處理模塊的分析以及對(duì)音頻處理的處理器要求的分析,我們可以看出,ARM Cortex-M3和Cortex-M4處理器內(nèi)核的功能和能力可以實(shí)現(xiàn)高效的音頻處理。由于低功耗、高性能,Cortex-M處理器非常適合音頻應(yīng)用。這些處理器超強(qiáng)的音頻能力可用于低功耗產(chǎn)品設(shè)計(jì),實(shí)現(xiàn)更長的音頻播放時(shí)間,同時(shí)提供更豐富的聆聽體驗(yàn)。