嵌入式音頻處理入門_第1頁
嵌入式音頻處理入門_第2頁
嵌入式音頻處理入門_第3頁
嵌入式音頻處理入門_第4頁
嵌入式音頻處理入門_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、在本文的第2部分中,我們首先對動態(tài)范圍與精度的論題進(jìn)行探討,然后再對數(shù)據(jù)格式進(jìn)行深入的討論,因為數(shù)據(jù)格式是與音頻處理相關(guān)的。動態(tài)范圍與精度您也許已經(jīng)見到過dB的規(guī)范,這是在目前市場上用于描述各種產(chǎn)品而隨處可見的。表1列出了幾種產(chǎn)品以及它們的信號質(zhì)量,以dB為單位。表1 各種音頻系統(tǒng)的動態(tài)范圍比較那么,這些數(shù)值究竟代表什么意思呢?讓我們從確定一些定義來開始。把圖1作為對下列基本規(guī)范的“仿制數(shù)據(jù)手冊(cheat sheet)”的一個參考信號。圖1  音頻系統(tǒng)中一些重要術(shù)語之間的關(guān)系人耳的動態(tài)范圍(最響的信號電平與最安靜 的信號電平之比值)約為120 dB。在存在噪聲的系統(tǒng)中,動態(tài)范圍被描

2、述為最大信號電平與本底噪聲之間的比值。這就是說,動態(tài)范圍(dB)=峰值電平(dB)本底噪聲(dB)純模擬系統(tǒng)中的本底噪聲來自系統(tǒng)本身的電特性。建立在模擬系統(tǒng)之上的數(shù)字音頻信號也會從ADC和DAC中獲得噪聲,而且還可以從模擬數(shù)據(jù)采樣過程所產(chǎn)生的量化誤差中獲得噪聲。另一個重要的術(shù)語是信噪比(SNR)。在模擬系統(tǒng)中,信噪比的意思是標(biāo)稱信號對于本底噪聲的比值,其中的“線電平”是標(biāo)稱工作電平。對于專業(yè)設(shè)備,標(biāo)稱電平通常為1.228 Vrms,這可以轉(zhuǎn)換為+4 dBu。余量是標(biāo)稱電平與峰值電平之間的差值,峰值電平指開始出現(xiàn)信號失真的電平。數(shù)字系統(tǒng)中的SNR定義有些不同,即SNR被定義為動態(tài)范圍?,F(xiàn)在,有了

3、對動態(tài)范圍的理解,我們就可以開始討論動態(tài)范圍在實際中有怎樣的用途。不做冗長的推導(dǎo),讓我們簡單介紹一下什么是6 dB規(guī)則。這個規(guī)則是動態(tài)范圍與計算字長之間關(guān)系的關(guān)鍵所在。完整的公式推導(dǎo)在式1中說明,但這里使用了簡便的表示法,意思是每增加1位的精度,將使動態(tài)范圍增加6 dB。應(yīng)該注意,這個6 dB的規(guī)則并沒有考慮到音頻設(shè)計中的模擬子系統(tǒng),所以,輸入端和輸出端的傳感器的非理想性必須另作考慮。動態(tài)范圍(dB)= 6.02n + 1.76 6n dB其中n =精度位的數(shù)目式1:6 dB規(guī)則“6 dB規(guī)則”指出,使用的位數(shù)越多,我們能獲得的系統(tǒng)質(zhì)量就越高。但實際上,只有少數(shù)幾個真正可用的選擇。大多數(shù)適用于

4、嵌入式媒體處理的器件有三種字長形式:16位、24位和32位。表2總結(jié)了這三類處理器的動態(tài)范圍。由于我們在討論6 dB規(guī)則,所以有必要對語音信號中常被使用的非線性量化方法進(jìn)行一些討論。電話質(zhì)量的線性PCM編碼需要12位的精度。但是,我們的耳朵對小幅度時音頻信號變化的敏感度要超過大幅度時。因此,電話通訊中使用的線性PCM采樣方法的位數(shù)用得過多。A律和律壓擴(kuò)標(biāo)準(zhǔn)中使用的對數(shù)量化只用8位精度就達(dá)到了12位PCM的質(zhì)量等級。為了使我們的生活更加方便,有些處理器廠商已經(jīng)把A律和律壓擴(kuò)標(biāo)準(zhǔn)做到了器件的串行端口中。這使處理器內(nèi)核無需進(jìn)行對數(shù)計算。在查看了表2之后,我們又一次回想起人耳的動態(tài)范圍約為120 dB

5、?;谶@個原因,16位數(shù)據(jù)的表示法對于高質(zhì)量音頻并不是太合適。因此,供應(yīng)商引入了對16位系統(tǒng)的動態(tài)范圍進(jìn)行擴(kuò)展的24位處理器。這些24位的系統(tǒng)從C編譯器的觀點來看有點不標(biāo)準(zhǔn),所以近年來的許多音頻設(shè)計使用了32位的處理方式。表2  各種定點架構(gòu)的動態(tài)范圍選擇了正確的處理器并不是萬事大吉了,因為一個音頻系統(tǒng)的總體質(zhì)量是由“達(dá)到最低質(zhì)量”元件的等級所決定的。除了處理器外,整個系統(tǒng)還包括像話筒和揚(yáng)聲器這樣的一些模擬元件,以及使信號在模擬域與數(shù)字域之間變換的轉(zhuǎn)換器。模擬域超出了這次討論的范圍,而音頻轉(zhuǎn)換器則涉及到了數(shù)字域。假設(shè)您想使用AD1871進(jìn)行音頻采樣。轉(zhuǎn)換器的數(shù)據(jù)手冊中把它解釋為一個2

6、4位的轉(zhuǎn)換器,但它的動態(tài)范圍不是144 dB,而是105 dB。其原因是轉(zhuǎn)換器不是一個完美無缺的系統(tǒng),而供應(yīng)商只給出了有用的動態(tài)范圍。如果您真的想把AD1871與24位處理器相連,那么,您整個系統(tǒng)的SNR將為105dB。本底噪聲將達(dá)到144dB-105dB=39dB。圖2是這一情況的圖形表示。但是,在數(shù)字音頻系統(tǒng)中還有另一個組件 我們還沒有討論:處理器內(nèi)核內(nèi)的計算。圖2  一個音頻系統(tǒng)的SNR由最弱元件的SNR構(gòu)成使數(shù)據(jù)經(jīng)過處理器的計算單元會潛在地引入各種誤差。其中之一就是量化誤差。這種誤差可以在一連串導(dǎo)致數(shù)據(jù)值被截取或舍入(向上或向下)的計算中產(chǎn)生。例如,一個16位處理器可以對一個

7、16位數(shù)據(jù)組成的向量作加法,然后把結(jié)果存入一個擴(kuò)展字長的累加器中。但是,當(dāng)累加器中的數(shù)值最終被寫入到一個16位數(shù)據(jù)寄存器中時,其中的有些位會被截去。可以看一下圖3,看看計算誤差是如何影響到實際系統(tǒng)的。對于一個理想的16位A/D轉(zhuǎn)換器(圖3a),信噪比應(yīng)該是16 x 6 = 96 dB。如果不存在量化誤差,那么,16位計算足以把SNR保持在96 dB。而24位和32位系統(tǒng)將分別把8位和16位置于本底噪聲以下的動態(tài)范圍中。從本質(zhì)上看,這些額外的數(shù)位是被浪費掉了。圖3 (a)在一個理想的16位96 dB SNR系統(tǒng)中,不同字長計算時的額外數(shù)位的分配,其中忽略了量化誤差  (b) 在一個理想

8、的16位96 dB SNR系統(tǒng)中,不同字長計算時的額外數(shù)位的分配,其中存在量化誤差但是,所有的數(shù)字音頻系統(tǒng)都確實要引入舍入和截取誤差。如果我們可以量化這個誤差,如確定為18dB(或3位),那么很清楚,16位計算對于維持96dB的系統(tǒng)SNR是不夠的 (圖3b)。解釋這一點的另一個方法是,有效的本底噪聲被提高了18dB,因而總的SNR就降低到了96dB -18dB = 78dB。這導(dǎo)致的結(jié)論是,在本底噪聲以下的額外數(shù)位有助于解決量化中出現(xiàn)的麻煩事。音頻的數(shù)據(jù)格式在處理器內(nèi)部有許多種表示數(shù)據(jù)的方法。音頻處理中使用的兩種主要的處理器架構(gòu)是定點與浮點。定點處理器設(shè)計成用整數(shù)和分?jǐn)?shù)進(jìn)行運算,通常固有地支持

9、16位、24位或32位的數(shù)據(jù)。浮點處理器提供非常好的性能,并固有地支持32位或64位的浮點數(shù)據(jù)類型。但是,這些浮點處理器一般成本比較高,而且比相應(yīng)的定點處理器消耗更多的功率,因而所有的實際系統(tǒng)都必須在質(zhì)量和工程成本之間尋求一個平衡點。定點運算執(zhí)行定點運算的處理器一般對信號使用二進(jìn)制補(bǔ)碼表示法。定點格式可以表示有符號和無符號的整數(shù)和分?jǐn)?shù)。在定點處理器上使用有符號的分?jǐn)?shù)格式是在數(shù)字信號處理中最常見的。整數(shù)與分?jǐn)?shù)格式的差別在于二進(jìn)制小數(shù)點的位置。對于整數(shù),二進(jìn)制小數(shù)點是在最低位的右邊;而對于分?jǐn)?shù),通常把它們的小數(shù)點放在符號位的右邊 。圖4a表示了整數(shù)和分?jǐn)?shù)的格式。圖4(a)分?jǐn)?shù)和整數(shù)格式 (b)IE

10、EE 754 32位單精度浮點格式雖然定點的規(guī)則簡化了數(shù)值操作且節(jié)省了存儲器,但同時也存在動態(tài)范圍和精度之間的折衷。在需要保持很高分辨率同時又要使用很大數(shù)值范圍的應(yīng)用場合,就需要使用一個可以根據(jù)幅值和指數(shù)而移動的小數(shù)點。浮點運算使用浮點格式就可以在同一系統(tǒng)中表示非常大和非常小的數(shù)。浮點數(shù)與有理數(shù)的科學(xué)記數(shù)法十分相似。浮點數(shù)是用尾數(shù)和指數(shù)描述的。尾數(shù)確定了精度,而指數(shù)控制著動態(tài)范圍。有一個標(biāo)準(zhǔn)管理著數(shù)字機(jī)的浮點運算。這個標(biāo)準(zhǔn)叫IEEE-754(圖4a);對于32位浮點數(shù)可以歸納如下。第31位(MSB,最高位)是符號位,它的0表示符號為正,它的1表示符號為負(fù)。從第30位到第23位是表示2的整次冪的

11、指數(shù)字段(exp_field),并以127作為偏移量。最后,第 22位到第0位表示分?jǐn)?shù)的尾數(shù)(mantissa)。隱藏位一般是指在小數(shù)點的左邊有一個1。32位的IEEE浮點數(shù)的值可以用下面的等式來表示:(-1)sign_bit × (1.mantissa) * 2(exp _field-127)依靠8位的指數(shù)和23位的尾數(shù),IEEE-754達(dá)到了動態(tài)范圍和精度之間的一個平衡。而且,IEEE浮點庫還包括了對于像?、0和NaN(不是一個數(shù))等附加特性的支持表3表示了從常用的浮點和定點類型可以達(dá)到的最小數(shù)和最大數(shù)。表3  各種數(shù)據(jù)格式的動態(tài)范圍比較在16位架構(gòu)上的仿真正如我們在前

12、面解釋的,16位處理并不能為高質(zhì)量音頻提供足夠的SNR,但這并不是說您不應(yīng)該選用16位處理器作為音頻系統(tǒng)。例如,用一個32位的浮點機(jī)把一個算法編寫成保持原來32位數(shù)據(jù)風(fēng)格的程序,是比較容易的;但一個16位處理器也可以通過非常低成本的仿真而保持32位的完整性。圖5示出了為一個嵌入式算法選擇數(shù)據(jù)類型時的一些可能性。圖5  根據(jù)一個應(yīng)用的目標(biāo),可以有許多滿足系統(tǒng)要求的數(shù)據(jù)類型在本節(jié)的余下部分,我們將描述如何在一個16位定點機(jī)上實現(xiàn)浮點和32位擴(kuò)展精度定點格式的功能。在定點處理器上的浮點仿真在大多數(shù)的16位定點處理器上,IEEE-754浮點功能是通過對C/C+或匯編語言的庫調(diào)用而提供的。這些

13、庫通過使用定點乘法和運算邏輯而對所需的浮點處理進(jìn)行仿真。這種仿真需要額外的處理周期來完成。但是,當(dāng)定點處理器內(nèi)核的時鐘進(jìn)入到500 MHz - 1 GHz范圍時,在對符合IEEE-754的浮點運算進(jìn)行仿真時需要的額外周期就不那么重要了。為了降低計算的復(fù)雜性,可以使用IEEE-754的“松弛”版。這意味著浮點運算并不會實現(xiàn)像?和NaN這樣一些標(biāo)準(zhǔn)特性。進(jìn)一步的優(yōu)化是對尾數(shù)和指數(shù)使用一個更為本機(jī)化的類型。舉個例子,ADI公司的Blackfin定點處理器架構(gòu)具有一個由十六個16位寄存器組成的寄存器組,而這個寄存器組還可以用作8個32位寄存器。在這種配置下,每個內(nèi)核時鐘周期內(nèi),兩個32位寄存器可以從全

14、部四個半寄存器中獲取操作數(shù)。為了優(yōu)化Blackfin寄存器組的使用,可以使用一種雙字的格式。這樣,一個字(16位)被保留為用作指數(shù),而另一個字 (16位)則保留給分?jǐn)?shù)部分使用。 雙精度定點仿真對于許多應(yīng)用來說,16位定點數(shù)據(jù)是不夠的,如果使用仿真浮點運算,那么計算量又太大。對于這些應(yīng)用,擴(kuò)展精度定點仿真也許足以滿足系統(tǒng)的要求。使用一個高速定點處理器將確保有效降低所需的計算量。音頻中兩個常用的擴(kuò)展精度格式是32位和31位定點表示。32位-精確仿真32位運算是16位定點處理器的自然軟件擴(kuò)展。對于那些32位寄存器組可以分為16位的兩半而進(jìn)行存取的處理器來說,這些兩半的寄存器可以合起來用于表示一個32

15、位定點數(shù)。Blackfin處理器的硬件結(jié)構(gòu)允許單周期32位加法和減法。例如,當(dāng)一個32位乘法采用累加器迭代操作時(像我們馬上就要討論的有些算法情況),我們只需用3個周期內(nèi)的16位乘法就可以實現(xiàn)32位的精度。兩個32位操作數(shù)(R0和R1)中的每一個都可以分為16位的兩半(R0.H / R0.L和R1.H / R1.L)。從圖6可以容易看出,在使用16位乘法器的指令組合來對32位乘法R0 x R1進(jìn)行仿真的時候,我們需要下面的操作:圖6  用16位操作實現(xiàn)32位乘法* 四次16位乘法以產(chǎn)生四個32位結(jié)果1. R1.L x R0.L2. R1.L x R0.H3. R1.H x R0.L4

16、. R1.H x R0.H* 三次操作以保持在最終結(jié)果中數(shù)位的位置(符號>>表示右移)。由于我們正在做分?jǐn)?shù)運算,所以結(jié)果是1.63(1.31 x 1.31 = 2.62,帶有一個冗余的符號位)。在大多數(shù)情況下,這個結(jié)果可以截取到1.31,以便裝入一個32位數(shù)據(jù)寄存器。因此,乘法的結(jié)果應(yīng)該以符號位為基準(zhǔn),或者以最大有效位為基準(zhǔn)。這樣,那些最右邊的最小有效位可以在截取操作時被安全地截取。1. (R1.L x R0.L) >> 322. (R1.L x R0.H) >> 163. (R1.H x R0.L) >> 16一個32位乘法的最終表達(dá)式(R1.

17、L x R0.L) >> 32 + (R1.L x R0.H) >> 16) + (R1.H x R0.L) >> 16 + R1.H x R0.H)在Blackfin架構(gòu)中,這些指令可以并行執(zhí)行,以實現(xiàn)在三個周期內(nèi)完成一次32位乘法的有效速率。31位-精確仿真我們可以把最高要求31位精度的定點乘法的計算時間減少到2個周期。這個技術(shù)對于音頻系統(tǒng)特別有吸引力,因為音頻系統(tǒng)通常至少需要24位的表示法,而32位的精度也許有些過分。使用“6 dB規(guī)則”,31位的精確仿真仍然保持了大約186 dB的動態(tài)范圍,即使考慮了所有的量化效應(yīng)之后,這仍然具有非常充裕的余量。從圖

18、6中的乘法框圖來看,很明顯的一點是,最小有效位半字的乘法R1.L x R0.L對最終的結(jié)果沒有太大的貢獻(xiàn)。事實上,如果把結(jié)果截取為1.31,那么這個乘法只影響到1.31結(jié)果的最低位。對于許多應(yīng)用來說,由這一位引起的精度損失是通過減少一次16位乘法、一次移位和一次加法以加速32位乘法而得以平衡的。31位精確乘法的表達(dá)式為(R1.L x R0.H) + (R1.H x R0.L) ) >> 16 + (R1.H x R0.H)在Blackfin架構(gòu)中,這些指令可以并行執(zhí)行,以實現(xiàn)在2個周期內(nèi)完成一次32位乘法的有效速率。所以,這是音頻處理中使用的數(shù)據(jù)格式的“獨家新聞”。在本文的最后一部

19、分,我們將介紹開發(fā)嵌入式音頻應(yīng)用的一些策略,主要聚焦于常用算法中的數(shù)據(jù)傳輸和構(gòu)建模塊。 音頻處理方法 把數(shù)據(jù)送入處理器內(nèi)核 把數(shù)據(jù)送入處理器內(nèi)核有若干種方法。例如,一個前臺程序可以對一個串行端口中的新數(shù)據(jù)進(jìn)行查詢,但這種傳輸方式在嵌入式媒體處理器中是不常用的,因為這樣會降低內(nèi)核的使用效率。 取而代之的是,與音頻編解碼器相連的處理器一般用DMA引擎把數(shù)據(jù)從編解碼器的數(shù)據(jù)口(就像一個串行口)傳輸?shù)教幚砥骺捎玫哪硞€存儲空間內(nèi)。這種數(shù)據(jù)傳輸是以后臺操作的形式完成的,無需處理器內(nèi)核的干預(yù)。這里的唯一開銷是對DMA序列的設(shè)定以及一旦數(shù)據(jù)緩沖區(qū)的接收或發(fā)送完成之后對中斷的處理。 塊處理與樣點處理 樣點處理和

20、塊處理是處理數(shù)字音頻數(shù)據(jù)的兩種方法。在樣點處理的方法中,只要樣點一出現(xiàn),處理器就處理這個樣點。這里,在每個采樣周期中的處理操作都會有開銷。許多濾波器(例如FIR和職,將在下面敘述)是以這樣的方式實現(xiàn)的,因為這種方式的有效延遲會很低。 另一方面,塊處理是基于把數(shù)據(jù)傳送到處理函數(shù)之前對特定長度緩沖區(qū)的填充。有些濾波器是用塊處理的方式實現(xiàn)的,因為這樣比樣點處理方式更有效。其中要說明的一點是,塊處理方法大大降低了針對每個樣點而調(diào)用處理函數(shù)的開銷。而且,許多嵌入式處理器包含有多個ALU,可以對數(shù)據(jù)塊進(jìn)行并行操作。另外,有些算法從本質(zhì)上就是以塊處理方式操作的。其中一個大家都知道的是傅里葉變換(以及它的實際

21、使用的形式,快速傅里葉變換,或稱FFT),這種算法接受時域數(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)核和獨立于內(nèi)核的DMA引擎不會在同一時間對同一數(shù)據(jù)進(jìn)行訪問,避免了數(shù)據(jù)一致性問題。為了對長度為N的緩沖區(qū)的處理進(jìn)行改進(jìn),我們簡單地產(chǎn)生一個長度為2×N的緩沖區(qū)。對于一個雙向系統(tǒng),必須生成兩個長度為2 x N的緩沖區(qū)。如圖1a中所示,處理器內(nèi)核正在對in1緩沖區(qū)進(jìn)行處理,并將結(jié)果存儲在out1緩沖區(qū)中,而DMA引擎此時正在對

22、in0進(jìn)行填充,并對out0中的數(shù)據(jù)進(jìn)行傳輸。圖1b指出,一旦DMA引擎完成對雙緩沖區(qū)左邊半個的操作之后,它就開始把數(shù)據(jù)傳送到in1,并從out1取出數(shù)據(jù),而此時的處理器內(nèi)核正在處理來自in0的數(shù)據(jù),并填入out0。這個結(jié)構(gòu)有時被稱為“乒乓式緩沖”,因為處理器內(nèi)核來回地對雙緩沖區(qū)的左右兩半進(jìn)行處理。 應(yīng)該注意到,在實時系統(tǒng)中,串行端口的DMA(或者另一個與音頻采樣率關(guān)聯(lián)的外圍設(shè)備的DMA)規(guī)定了時序預(yù)算?;谶@個原因,塊處理算法必須以這樣的方式進(jìn)行優(yōu)化,即它的執(zhí)行時間要小于或等于DMA對雙緩沖區(qū)的一半進(jìn)行數(shù)據(jù)傳輸所需的時間。 二維(2D)DMA 當(dāng)數(shù)據(jù)通過像12S這樣的數(shù)據(jù)鏈路傳輸時,它可能會

23、包含多個聲道。這些聲道可以全是從一條數(shù)據(jù)線上通過復(fù)用而輸入到同一個串行端口的。在這種情況下,2D DMA可以用來對數(shù)據(jù)進(jìn)行解交織,從而使每個聲道在存儲器中是線性分配的??梢钥匆幌聢D2中對這一安排的圖示,其中從左右聲道來的樣點被解復(fù)用到兩個分離的數(shù)據(jù)塊。這個自動數(shù)據(jù)安排對于那些使用塊處理的系統(tǒng)是極其有用的。 基本操作 在音頻處理中有三個基本的構(gòu)建模塊。它們是加法操作、乘法操作和時間延遲。許多更復(fù)雜的效果和算法可以用這三個基本操作來實現(xiàn)。加法器顯而易見的任務(wù)是把兩個信號加在一起。乘法可以用于提升或衰減音頻信號。在大多數(shù)媒體處理器中,可以在一個周期內(nèi)完成多次加法和乘法操作。 時間延遲有點復(fù)雜。在許多

24、音頻算法中,當(dāng)前的輸出取決于過去的輸入和輸出之間的組合。這種延遲效果是用延遲線實現(xiàn)的,而延遲線只不過是存儲器中用來保持過去數(shù)據(jù)的一個數(shù)組。例如,一個回聲算法可以對每個聲道保持500 mS的輸入樣點。當(dāng)前輸出值可以用當(dāng)前輸入值與稍微衰減的過去樣點進(jìn)行相加后得到。如果音頻系統(tǒng)是基于樣點的處理方式,那么程序設(shè)計人員可以簡單地跟蹤一個輸入指針和一個輸出指針(兩者之間保持500 mS樣點數(shù)的間隔),并且在每個采樣周期之后增加這兩個指針。 由于延遲線要被隨后的各組數(shù)據(jù)重復(fù)使用,因此,輸入與輸出指針將需要從延遲線緩沖區(qū)的末尾回繞到起始端。在C/C+中,這通常是在指針增加操作時再附帶一次求模操作()完成的。對

25、于那些支持循環(huán)緩沖(見圖3)的處理器來說,這個回繞操作不會增加額外的處理周期。在這種情況下,一個循環(huán)緩沖區(qū)的起始位置和長度必須只提供一次。在處理過程中,軟件增加或減少緩沖區(qū)內(nèi)的當(dāng)前指針,如果當(dāng)前的指針位置落在緩沖區(qū)的兩個端點之外,則由硬件使指針回繞到緩沖區(qū)的起始位置。如果沒有這個自動地址生成功能,程序設(shè)計人員就必須手動地保持對緩沖區(qū)的跟蹤,因而會浪費有用的處理周期。 由延遲線結(jié)構(gòu)可以引出一個叫做梳狀濾波器的重要的音頻構(gòu)建模塊,它本質(zhì)上是一個帶有反饋的延遲線。當(dāng)多個梳狀濾波器同時使用的時候,可以產(chǎn)生混響的效果。 信號的產(chǎn)生 在有些音頻系統(tǒng)中,也許需要合成一個信號(例如一個正弦波)。泰勒級數(shù)的函數(shù)

26、近似法可以用來對三角函數(shù)進(jìn)行仿真。而且,用均勻隨機(jī)數(shù)發(fā)生器來產(chǎn)生白噪聲是很容易的。 但是,合成的方法也許并不適用于某些給定系統(tǒng)的處理預(yù)算。在具有充足存儲器的定點系統(tǒng)中,您可以取而代之地使用查表的方法來產(chǎn)生信號。這樣做的負(fù)面效應(yīng)是占用了寶貴的存儲器資源,所以,作為一種折衷考慮,可以使用混合的方法。例如,您可以存儲一個不太精細(xì)的函數(shù)表,以節(jié)省通過2D DMA進(jìn)行采樣解交織存儲器。在運行時,準(zhǔn)確的值可以用插值的方法從函數(shù)表中提取出來,而插值操作比使用泰勒級數(shù)近似法的時間大為縮短。這個混合法提供了在計算時間和存儲器資源之間的很好的平衡。 濾波與算法 音頻系統(tǒng)中的數(shù)字濾波器被用來對指定頻帶內(nèi)的聲波能量進(jìn)

27、行衰減或提升。最常用的濾波器形式是高通、低通、帶通和點阻。這些濾波器中的任何一種都有兩種實現(xiàn)方法。這就是有限沖擊響應(yīng)(FIR)濾波器和無限沖擊響應(yīng)(IIR)濾波器,而且它們組成了搭建像參數(shù)均衡器和圖示均衡器那樣更復(fù)雜的濾波算法的構(gòu)建模塊。 有限沖擊響應(yīng)(FIR)濾波器 FIR濾波器的輸出是由當(dāng)前和過去輸入之和確定的,而其中的每個輸入樣點首先要乘以一個濾波器系數(shù)。示于圖4a中的FIR求和公式,也叫做“卷積”,是信號處理中最重要的操作之一。在這個公式的句法中,x為輸入向量,y為輸出向量,而h為濾波器系數(shù)。圖4a表示了FIR的實現(xiàn)結(jié)構(gòu)圖。 卷積是在媒體處理中非常常用的操作,因而許多處理器都可以在一個

28、周期內(nèi)完成一條乘累加(MAC)指令,同時還可以完成多個數(shù)據(jù)的訪問操作(讀或?qū)?。 無限沖擊響應(yīng)(IIR)濾波器 與輸出僅僅取決于輸入的FIR濾波器不同,IIR濾波器則依靠輸入和過去的輸出。IIR濾波器的基本公式是一個差分方程,如圖4b所示。由于當(dāng)前輸出對于過去輸出的依從關(guān)系,IIR濾波器經(jīng)常被稱為“遞歸式濾波器”。圖4b也給出了ILR濾波器結(jié)構(gòu)的圖示。 快速傅里葉變換 我們往往可以更好地描述音頻信號的特性,那就是用頻率組成。傅里葉變換以時域信號作為輸入,并把信號重新安排到頻域里,而傅里葉反變換則完成逆向的工作,把頻域表示變換回時域。從數(shù)學(xué)上看,時域中的操作與頻域中的操作之間存在一些很妙的特性關(guān)系。特別是,時域卷積(或者FIR濾波器)等效于頻域的相乘。如果沒有傅里葉變換這個特別的優(yōu)化方法,即快速傅里葉變換

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論