<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > 嵌入式音頻處理基礎(chǔ)(3)

          嵌入式音頻處理基礎(chǔ)(3)

          —— Fundamentals of Embedded Audio Processing (Part 3)
          作者:David Katz, Rick Gentile ,Tomasz Lukasiak 時(shí)間:2008-11-28 來源:電子產(chǎn)品世界 收藏

            在本文的第三部分中,我們將介紹開發(fā)嵌入式應(yīng)用的一些策略。我們將從描述處理中使用的一些標(biāo)準(zhǔn)方法開始,然后討論一些基本的算法。

          本文引用地址:http://www.ex-cimer.com/article/89892.htm

          音頻處理方法

          把數(shù)據(jù)送入處理器內(nèi)核

            把數(shù)據(jù)送入處理器內(nèi)核有若干種方法。例如,一個(gè)前臺程序可以對一個(gè)串行端口中的新數(shù)據(jù)進(jìn)行查詢,但這種傳輸方式在嵌入式媒體處理器中是不常用的,因?yàn)檫@樣會降低內(nèi)核的使用效率。

            取而代之的是,與音頻編解碼器相連的處理器一般用DMA引擎把數(shù)據(jù)從編解碼器的數(shù)據(jù)口(就像一個(gè)串行口)傳輸?shù)教幚砥骺捎玫哪硞€(gè)存儲空間內(nèi)。這種數(shù)據(jù)傳輸是以后臺操作的形式完成的,無需處理器內(nèi)核的干預(yù)。這里的唯一開銷是對DMA序列的設(shè)定以及一旦數(shù)據(jù)緩沖區(qū)的接收或發(fā)送完成之后對中斷的處理。

          塊處理與樣點(diǎn)處理

            樣點(diǎn)處理和塊處理是處理數(shù)字音頻數(shù)據(jù)的兩種方法。在樣點(diǎn)處理的方法中,只要樣點(diǎn)一出現(xiàn),處理器就處理這個(gè)樣點(diǎn)。這里,在每個(gè)采樣周期中的處理操作都會有開銷。許多濾波器(例如FIR和IIR,將在下面敘述)是以這樣的方式實(shí)現(xiàn)的,因?yàn)檫@種方式的有效延遲會很低。

            另一方面,塊處理是基于把數(shù)據(jù)傳送到處理函數(shù)之前對特定長度緩沖區(qū)的填充。有些濾波器是用塊處理的方式實(shí)現(xiàn)的,因?yàn)檫@樣比樣點(diǎn)處理方式更有效。其中要說明的一點(diǎn)是,塊處理方法大大降低了針對每個(gè)樣點(diǎn)而調(diào)用處理函數(shù)的開銷。而且,許多嵌入式處理器包含有多個(gè)ALU, 可以對數(shù)據(jù)塊進(jìn)行并行操作。另外,有些算法從本質(zhì)上就是以塊處理方式操作的。其中一個(gè)大家都知道的是傅里葉變換(以及它的實(shí)際使用的形式,快速傅里葉變換,或稱FFT),這種算法接受時(shí)域數(shù)據(jù)塊或空間域(spatial)數(shù)據(jù)塊,然后把這些數(shù)據(jù)塊轉(zhuǎn)換成頻域表示。

          雙緩沖

            在基于塊處理的、使用DMA與處理器內(nèi)核進(jìn)行數(shù)據(jù)傳遞的系統(tǒng)中,必須使用雙緩沖,以便在DMA傳輸和內(nèi)核之間進(jìn)行仲裁。這會使處理器內(nèi)核和獨(dú)立于內(nèi)核的DMA引擎不會在同一時(shí)間對同一數(shù)據(jù)進(jìn)行訪問,避免了數(shù)據(jù)一致性問題。為了對長度為N的緩沖區(qū)的處理進(jìn)行改進(jìn),我們簡單地產(chǎn)生一個(gè)長度為2×N的緩沖區(qū)。對于一個(gè)雙向系統(tǒng),必須生成兩個(gè)長度為2×N的緩沖區(qū)。如圖1a中所示,處理器內(nèi)核正在對in1緩沖區(qū)進(jìn)行處理,并將結(jié)果存儲在out1緩沖區(qū)中,而DMA引擎此時(shí)正在對in0進(jìn)行填充,并對out0中的數(shù)據(jù)進(jìn)行傳輸。圖1b指出,一旦DMA引擎完成對雙緩沖區(qū)左邊半個(gè)的操作之后,它就開始把數(shù)據(jù)傳送到in1,并從out1取出數(shù)據(jù),而此時(shí)的處理器內(nèi)核正在處理來自in0的數(shù)據(jù),并填入out0。這個(gè)結(jié)構(gòu)有時(shí)被稱為“乒乓式緩沖”,因?yàn)樘幚砥鲀?nèi)核來回地對雙緩沖區(qū)的左右兩半進(jìn)行處理。

            應(yīng)該注意到,在實(shí)時(shí)系統(tǒng)中,串行端口的DMA(或者另一個(gè)與音頻采樣率關(guān)聯(lián)的外圍設(shè)備的DMA)規(guī)定了時(shí)序預(yù)算。基于這個(gè)原因,塊處理算法必須以這樣的方式進(jìn)行優(yōu)化,即它的執(zhí)行時(shí)間要小于或等于DMA對雙緩沖區(qū)的一半進(jìn)行數(shù)據(jù)傳輸所需的時(shí)間。


          圖1  用于流處理的雙緩沖結(jié)構(gòu)

          二維(2D)DMA

            當(dāng)數(shù)據(jù)通過像I2S這樣的數(shù)據(jù)鏈路傳輸時(shí),它可能會包含多個(gè)聲道。這些聲道可以全是從一條數(shù)據(jù)線上通過復(fù)用而輸入到同一個(gè)串行端口的。在這種情況下,2D DMA可以用來對數(shù)據(jù)進(jìn)行解交織,從而使每個(gè)聲道在存儲器中是線性分配的??梢钥匆幌聢D2中對這一安排的圖示,其中從左右聲道來的樣點(diǎn)被解復(fù)用到兩個(gè)分離的數(shù)據(jù)塊。這個(gè)自動數(shù)據(jù)安排對于那些使用塊處理的系統(tǒng)是極其有用的。


          圖2  2D DMA引擎用于解交織  (a) I2S立體聲數(shù)據(jù)輸入 (b)分離的左右緩沖區(qū)

          基本操作

            在音頻處理中有三個(gè)基本的構(gòu)建模塊。它們是加法操作、乘法操作和時(shí)間延遲。許多更復(fù)雜的效果和算法可以用這三個(gè)基本操作來實(shí)現(xiàn)。加法器顯而易見的任務(wù)是把兩個(gè)信號加在一起。乘法可以用于提升或衰減音頻信號。在大多數(shù)媒體處理器中,可以在一個(gè)周期內(nèi)完成多次加法和乘法操作。

            時(shí)間延遲有點(diǎn)復(fù)雜。在許多音頻算法中,當(dāng)前的輸出取決于過去的輸入和輸出之間的組合。這種延遲效果是用延遲線實(shí)現(xiàn)的,而延遲線只不過是存儲器中用來保持過去數(shù)據(jù)的一個(gè)數(shù)組。例如,一個(gè)回聲算法可以對每個(gè)聲道保持500 mS的輸入樣點(diǎn)。當(dāng)前輸出值可以用當(dāng)前輸入值與稍微衰減的過去樣點(diǎn)進(jìn)行相加后得到。如果音頻系統(tǒng)是基于樣點(diǎn)的處理方式,那么程序設(shè)計(jì)人員可以簡單地跟蹤一個(gè)輸入指針和一個(gè)輸出指針(兩者之間保持500 mS樣點(diǎn)數(shù)的間隔),并且在每個(gè)采樣周期之后增加這兩個(gè)指針。

            由于延遲線要被隨后的各組數(shù)據(jù)重復(fù)使用,因此,輸入與輸出指針將需要從延遲線緩沖區(qū)的末尾回繞到起始端。在C/C++中,這通常是在指針增加操作時(shí)再附帶一次求模操作(%)完成的。

            對于那些支持循環(huán)緩沖(見圖3)的處理器來說,這個(gè)回繞操作不會增加額外的處理周期。在這種情況下,一個(gè)循環(huán)緩沖區(qū)的起始位置和長度必須只提供一次。在處理過程中,軟件增加或減少緩沖區(qū)內(nèi)的當(dāng)前指針,如果當(dāng)前的指針位置落在緩沖區(qū)的兩個(gè)端點(diǎn)之外,則由硬件使指針回繞到緩沖區(qū)的起始位置。如果沒有這個(gè)自動地址生成功能,程序設(shè)計(jì)人員就必須手動地保持對緩沖區(qū)的跟蹤,因而會浪費(fèi)有用的處理周期。


          圖3 (a) 使用循環(huán)緩沖區(qū)的延遲線的圖示 (b) 循環(huán)緩沖區(qū)在存儲器中的布局

            由延遲線結(jié)構(gòu)可以引出一個(gè)叫做梳狀濾波器的重要的音頻構(gòu)建模塊,它本質(zhì)上是一個(gè)帶有反饋的延遲線。當(dāng)多個(gè)梳狀濾波器同時(shí)使用的時(shí)候,可以產(chǎn)生混響的效果。

          信號的產(chǎn)生

            在有些音頻系統(tǒng)中,也許需要合成一個(gè)信號(例如一個(gè)正弦波)。泰勒級數(shù)的函數(shù)近似法可以用來對三角函數(shù)進(jìn)行仿真。而且,用均勻隨機(jī)數(shù)發(fā)生器來產(chǎn)生白噪聲是很容易的。

            但是,合成的方法也許并不適用于某些給定系統(tǒng)的處理預(yù)算。在具有充足存儲器的定點(diǎn)系統(tǒng)中,您可以取而代之地使用查表的方法來產(chǎn)生信號。這樣做的負(fù)面效應(yīng)是占用了寶貴的存儲器資源,所以,作為一種折衷考慮,可以使用混合的方法。例如,您可以存儲一個(gè)不太精細(xì)的函數(shù)表,以節(jié)省存儲器。在運(yùn)行時(shí),準(zhǔn)確的值可以用插值的方法從函數(shù)表中提取出來,而插值操作比使用泰勒級數(shù)近似法的時(shí)間大為縮短。這個(gè)混合法提供了在計(jì)算時(shí)間和存儲器資源之間的很好的平衡。

          濾波與算法

            音頻系統(tǒng)中的數(shù)字濾波器被用來對指定頻帶內(nèi)的聲波能量進(jìn)行衰減或提升。最常用的濾波器形式是高通、低通、帶通和點(diǎn)阻。這些濾波器中的任何一種都有兩種實(shí)現(xiàn)方法。這就是有限沖擊響應(yīng)(FIR)濾波器和無限沖擊響應(yīng)(IIR)濾波器,而且它們組成了搭建像參數(shù)均衡器和圖示均衡器那樣更復(fù)雜的濾波算法的構(gòu)建模塊。

          有限沖擊響應(yīng)(FIR)濾波器

            FIR濾波器的輸出是由當(dāng)前和過去輸入之和確定的,而其中的每個(gè)輸入樣點(diǎn)首先要乘以一個(gè)濾波器系數(shù)。示于圖4a中的FIR求和公式,也叫做“卷積”,是信號處理中最重要的操作之一。在這個(gè)公式的句法中,x為輸入向量,y為輸出向量,而h為濾波器系數(shù)。圖4a表示了FIR的實(shí)現(xiàn)結(jié)構(gòu)圖。

            卷積是在媒體處理中非常常用的操作,因而許多處理器都可以在一個(gè)周期內(nèi)完成一條乘累加(MAC)指令,同時(shí)還可以完成多個(gè)數(shù)據(jù)的訪問操作(讀或?qū)?。


          圖4 (a)FIR濾波器的公式和結(jié)構(gòu)  (b) IIR濾波器的公式和結(jié)構(gòu)

          無限沖擊響應(yīng)(IIR)濾波器

            與輸出僅僅取決于輸入的FIR濾波器不同,IIR濾波器則依靠輸入和過去的輸出。IIR濾波器的基本公式是一個(gè)差分方程,如圖4b所示。由于當(dāng)前輸出對于過去輸出的依從關(guān)系,IIR濾波器經(jīng)常被稱為“遞歸式濾波器”。圖4b也給出了IIR濾波器結(jié)構(gòu)的圖示。

          快速傅里葉變換

            我們往往可以更好地描述音頻信號的特性,那就是用頻率組成。傅里葉變換以時(shí)域信號作為輸入,并把信號重新安排到頻域里,而傅里葉反變換則完成逆向的工作,把頻域表示變換回時(shí)域。從數(shù)學(xué)上看,時(shí)域中的操作與頻域中的操作之間存在一些很妙的特性關(guān)系。特別是,時(shí)域卷積(或者FIR濾波器)等效于頻域的相乘。如果沒有傅里葉變換這個(gè)特別的優(yōu)化方法,即快速傅里葉變換(FFT),那么這個(gè)信號處理中的珍品就不可能變?yōu)閷?shí)用。事實(shí)上,F(xiàn)IR濾波器往往有更高效的實(shí)現(xiàn)方法,那就是把輸入信號和濾波器系數(shù)用FFT變換到頻域,然后將兩個(gè)變換式相乘,最后再用傅里葉反變換把乘積變換回時(shí)域。

            在音頻處理中還經(jīng)常使用其他一些變換。其中包括最常用的修正離散余弦變換(MDCT),這是許多音頻壓縮算法的基礎(chǔ)。

          采樣率轉(zhuǎn)換

            有時(shí)您會需要把信號的采樣率轉(zhuǎn)換到另一個(gè)不同的采樣率。用到變采樣率的一個(gè)情況是,您需要對一個(gè)以8 kHz采樣的音頻信號進(jìn)行解碼,但是您使用的DAC并不支持這個(gè)采樣率。另一個(gè)情況是,當(dāng)一個(gè)信號被過采樣之后,需要轉(zhuǎn)換成一個(gè)較低的頻率,因而可以縮短計(jì)算時(shí)間。把信號從一個(gè)采樣率變換到另一個(gè)采樣率的過程叫做變采樣率(或SRC)。

            提高采樣率的方法叫做插值,而降低采樣率的方法叫做抽取。對信號進(jìn)行M倍抽取是通過只保留每個(gè)M樣點(diǎn)而拋棄所有其余的樣點(diǎn)來完成的。對信號進(jìn)行L倍插值是通過對原來信號的每兩個(gè)樣點(diǎn)之間補(bǔ)充L-1個(gè)零來完成的。

            雖然插值和抽取的因子都是整數(shù),但您可以對輸入信號接連使用插值和抽取而得到一個(gè)有理數(shù)的變換因子。當(dāng)您用5倍進(jìn)行上采樣,然后用3倍作下采樣,那么最后的因子為5/3 = 1.67。


          圖5  通過上采樣和下采樣的采樣率轉(zhuǎn)換

            老實(shí)說,我們有點(diǎn)過分地簡化了SRC的過程。為了避免對信號補(bǔ)零(補(bǔ)零會引起頻域的鏡像成分)而引起的人工痕跡,被插值的信號在當(dāng)作輸出或當(dāng)作抽取器的輸入而被使用之前,必須經(jīng)過低通濾波。通過使用一個(gè)知曉與L-1個(gè)插值樣點(diǎn)相對應(yīng)的輸入都是零值的特定FIR濾波器結(jié)構(gòu),這個(gè)抗鏡像低通濾波器可以在輸入采樣率下進(jìn)行,而不必在較快速率的輸出采樣率下進(jìn)行。

            同樣,在被抽取之前,不符合Nyquest采樣定律的輸入信號必須被低通濾波,以避免混疊。使用知曉輸出樣點(diǎn)中那些被拋棄的樣點(diǎn)是不需要進(jìn)行濾波計(jì)算的FIR濾波器結(jié)構(gòu),這個(gè)抗混疊低通濾波器可以設(shè)計(jì)成以抽取后采樣率進(jìn)行操作,而不必在較快速的輸入采樣率下操作。圖5表示了變采樣率的流程圖。應(yīng)該注意到,抗鏡像濾波器和抗混疊濾波器是可以合二為一的,以便節(jié)省計(jì)算量。

            顯然,對于這些嵌入式音頻的論題,我們僅僅能夠給出一個(gè)很表層的討論,但對于嵌入式音頻處理應(yīng)用的開發(fā),我們還是希望已經(jīng)提供了一個(gè)有用的框架,并提到了其中各種必需考慮的問題。



          關(guān)鍵詞: 音頻 200811

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();