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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

15、位定點(diǎn)數(shù)。Blackfin處理器的硬件結(jié)構(gòu)允許單周期32位加法和減法。例如,當(dāng)一個(gè)32位乘法采用累加器迭代操作時(shí)(像我們馬上就要討論的有些算法情況),我們只需用3個(gè)周期內(nèi)的16位乘法就可以實(shí)現(xiàn)32位的精度。兩個(gè)32位操作數(shù)(R0和R1)中的每一個(gè)都可以分為16位的兩半(R0.H / R0.L和R1.H / R1.L)。從圖6可以容易看出,在使用16位乘法器的指令組合來對(duì)32位乘法R0 x R1進(jìn)行仿真的時(shí)候,我們需要下面的操作:圖6  用16位操作實(shí)現(xiàn)32位乘法* 四次16位乘法以產(chǎn)生四個(gè)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ù)位的位置(符號(hào)>>表示右移)。由于我們正在做分?jǐn)?shù)運(yùn)算,所以結(jié)果是1.63(1.31 x 1.31 = 2.62,帶有一個(gè)冗余的符號(hào)位)。在大多數(shù)情況下,這個(gè)結(jié)果可以截取到1.31,以便裝入一個(gè)32位數(shù)據(jù)寄存器。因此,乘法的結(jié)果應(yīng)該以符號(hào)位為基準(zhǔn),或者以最大有效位為基準(zhǔn)。這樣,那些最右邊的最小有效位可以在截取操作時(shí)被安全地截取。1. (R1.L x R0.L) >> 322. (R1.L x R0.H) >> 163. (R1.H x R0.L) >> 16一個(gè)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í)行,以實(shí)現(xiàn)在三個(gè)周期內(nèi)完成一次32位乘法的有效速率。31位-精確仿真我們可以把最高要求31位精度的定點(diǎn)乘法的計(jì)算時(shí)間減少到2個(gè)周期。這個(gè)技術(shù)對(duì)于音頻系統(tǒng)特別有吸引力,因?yàn)橐纛l系統(tǒng)通常至少需要24位的表示法,而32位的精度也許有些過分。使用“6 dB規(guī)則”,31位的精確仿真仍然保持了大約186 dB的動(dòng)態(tài)范圍,即使考慮了所有的量化效應(yīng)之后,這仍然具有非常充裕的余量。從圖

18、6中的乘法框圖來看,很明顯的一點(diǎn)是,最小有效位半字的乘法R1.L x R0.L對(duì)最終的結(jié)果沒有太大的貢獻(xiàn)。事實(shí)上,如果把結(jié)果截取為1.31,那么這個(gè)乘法只影響到1.31結(jié)果的最低位。對(duì)于許多應(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í)行,以實(shí)現(xiàn)在2個(gè)周期內(nèi)完成一次32位乘法的有效速率。所以,這是音頻處理中使用的數(shù)據(jù)格式的“獨(dú)家新聞”。在本文的最后一部

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

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

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

22、in0進(jìn)行填充,并對(duì)out0中的數(shù)據(jù)進(jìn)行傳輸。圖1b指出,一旦DMA引擎完成對(duì)雙緩沖區(qū)左邊半個(gè)的操作之后,它就開始把數(shù)據(jù)傳送到in1,并從out1取出數(shù)據(jù),而此時(shí)的處理器內(nèi)核正在處理來自in0的數(shù)據(jù),并填入out0。這個(gè)結(jié)構(gòu)有時(shí)被稱為“乒乓式緩沖”,因?yàn)樘幚砥鲀?nèi)核來回地對(duì)雙緩沖區(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對(duì)雙緩沖區(qū)的一半進(jìn)行數(shù)據(jù)傳輸所需的時(shí)間。 二維(2D)DMA 當(dāng)數(shù)據(jù)通過像12S這樣的數(shù)據(jù)鏈路傳輸時(shí),它可能會(huì)

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

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

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

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

27、行衰減或提升。最常用的濾波器形式是高通、低通、帶通和點(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求和公式,也叫做“卷積”,是信號(hào)處理中最重要的操作之一。在這個(gè)公式的句法中,x為輸入向量,y為輸出向量,而h為濾波器系數(shù)。圖4a表示了FIR的實(shí)現(xiàn)結(jié)構(gòu)圖。 卷積是在媒體處理中非常常用的操作,因而許多處理器都可以在一個(gè)

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論