




免費(fèi)預(yù)覽已結(jié)束,剩余14頁(yè)可下載查看
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
一、引言二、iLBC算法研究一般將編碼速率低于4.6kbps的語(yǔ)音編碼器稱為低比特率編碼器,而把編碼速率介于4.6kbps24kbps的編碼器稱為中比特率編碼器。按照這個(gè)劃分標(biāo)準(zhǔn),iLBC編碼器屬于中比特率編碼器。iLBC算法基于碼本激勵(lì)線性預(yù)測(cè)這種參數(shù)編碼方式,因此本章首先對(duì)基于碼本激勵(lì)線性預(yù)測(cè)算法的中比特率語(yǔ)音編解碼器的組成結(jié)構(gòu)及工作原理進(jìn)行研究和探討,在此基礎(chǔ)上對(duì)iLBC算法進(jìn)行研究,重點(diǎn)介紹其算法原理及特點(diǎn)。2.1中低速率語(yǔ)音編解碼算法研究 3)iLBC算法簡(jiǎn)介參照ilbc白皮書(shū)自VoIP技術(shù)面世以來(lái),業(yè)界對(duì)現(xiàn)存的低比特率編解碼器標(biāo)準(zhǔn)的關(guān)注一直不斷。VoIP應(yīng)用主要在包交換的IP網(wǎng)絡(luò)上進(jìn)行傳輸,無(wú)法避免IP網(wǎng)絡(luò)的丟包、延時(shí)、抖動(dòng)等實(shí)時(shí)傳輸問(wèn)題。2000年,Global IP Sound(GIPS)公司決定開(kāi)發(fā)一種能夠滿足VoIP產(chǎn)業(yè)需求的編解碼器,目標(biāo)是利用GIPS內(nèi)部的專業(yè)能力開(kāi)發(fā)一款免授權(quán)費(fèi)、專為數(shù)據(jù)包通信而設(shè)計(jì),而且在理想無(wú)錯(cuò)情況和丟包情況下都能提供高音質(zhì)的編解碼器,并把它引入不同的標(biāo)準(zhǔn)化機(jī)構(gòu)以符合互操作性的要求。這就是iLBC(Internet Low Bit Rate Codec)編解碼器誕生的緣起。目前大多數(shù)的語(yǔ)音編碼都是基于碼本激勵(lì)線性預(yù)測(cè)(Code Excited Linear Prediction, CELP)編碼模型的,例如ITU G.729、G.723.1和3GPP-AMR。CELP一直都被視為在交換網(wǎng)絡(luò)中以低比特率電路獲得高質(zhì)量的一種非常成功的方法。這種編碼方法具有高效性,主要是由于它利用了連續(xù)語(yǔ)音片段之間的互相依賴性,因此CELP編碼的性能主要取決于前面編碼的歷史。CELP編碼器是基于存儲(chǔ)器的,故丟包或延遲所造成的誤差會(huì)擴(kuò)散開(kāi)來(lái),結(jié)果是單個(gè)丟包會(huì)影響到隨后多個(gè)數(shù)據(jù)包的質(zhì)量,這顯然是數(shù)據(jù)包通信的一大缺陷。iLBC本質(zhì)上式一種基于幀的線性預(yù)測(cè)編碼方法,是對(duì)CELP的一種發(fā)展,其獨(dú)有的動(dòng)態(tài)碼本更新技術(shù)、語(yǔ)音增強(qiáng)技術(shù)和丟包掩蔽技術(shù)使其在VOIP中應(yīng)用時(shí)有更好的性能。iLBC是專為提供文件的IP語(yǔ)音通信而開(kāi)發(fā)的語(yǔ)音編解碼器,以窄帶語(yǔ)音為色合計(jì)基礎(chǔ),具有8kHz的采樣率。iLBC支持兩種基本的幀長(zhǎng)度:13.3kbps比特率下編碼幀長(zhǎng)度為30ms;15.2kbps比特率下編碼幀長(zhǎng)度則為20ms。編碼前幀長(zhǎng)編碼后比特率格式1采樣率:8kHz16bits/sample20ms(2560bits)304bits15.2kbps格式230ms(3840bits)400bits13.3kbpsiLBC的幀格式采用iLBC算法可以獲得一個(gè)具有丟包相應(yīng)控制的語(yǔ)音編碼系統(tǒng)。iLBC對(duì)每一個(gè)數(shù)據(jù)包的處理都能夠獨(dú)立于其他數(shù)據(jù)包來(lái)進(jìn)行,是數(shù)據(jù)包通信的理想選擇。即使IP丟包和/或延遲現(xiàn)象的惡化,這種編解碼器的語(yǔ)音質(zhì)量下降情況也不會(huì)太差。這與基于CELP模型的一般編解碼器的行為不同,這類編解碼器最先是為交換電路網(wǎng)絡(luò)或無(wú)線網(wǎng)絡(luò)而設(shè)計(jì)的,是設(shè)計(jì)來(lái)恢復(fù)位錯(cuò)誤而非丟包的。2.3.1編碼器參照ilbc標(biāo)準(zhǔn)iLBC編碼器本質(zhì)上式一種基于幀的線性預(yù)測(cè)編碼方法。編碼器的輸入為采樣率為8kHz ,每個(gè)樣點(diǎn)為16bit的單聲道PCM語(yǔ)音數(shù)據(jù)。該數(shù)據(jù)被分為若干幀,每幀包含有160/240(20ms/30ms)個(gè)樣點(diǎn)。iLBC編碼器主要進(jìn)行以下操作:1)將每幀分為4/6個(gè)子幀,每個(gè)子幀包含40個(gè)樣點(diǎn)。對(duì)30ms的幀,進(jìn)行兩次10階的線性預(yù)測(cè)編碼(LPC)分析,得到相應(yīng)的LPC系數(shù)。對(duì)于20ms的幀,進(jìn)行一次10階LPC分析。2)將每次分析得到的LPC系數(shù)轉(zhuǎn)化為線譜對(duì)(LSF)系數(shù),并對(duì)LSF系數(shù)進(jìn)行量化、內(nèi)插得到每個(gè)子幀的LSF系數(shù)。通過(guò)該量化內(nèi)插后的LSF系數(shù)得到對(duì)應(yīng)的LPC系數(shù),即得到各子幀對(duì)應(yīng)的線性預(yù)測(cè)分析器,通過(guò)對(duì)各個(gè)子幀的線性預(yù)測(cè),得到各個(gè)子幀的殘差。3)選擇殘差中能量最大的兩個(gè)連續(xù)子幀。這兩個(gè)連續(xù)子幀的首部57/58(20ms/30ms)個(gè)樣點(diǎn)被選定為本次處理的初始狀態(tài)。對(duì)于濁音語(yǔ)音,這樣的選取方式將至少包含一個(gè)基音脈沖。4)對(duì)初始狀態(tài)進(jìn)行基于DPCM的標(biāo)量量化,其結(jié)果作為編碼輸出的一部分。同時(shí),將初始狀態(tài)存入碼本存儲(chǔ)區(qū),以構(gòu)成動(dòng)態(tài)碼本的初始值,用于對(duì)本幀剩余樣點(diǎn)進(jìn)行矢量量化。5)對(duì)于剩余的殘差,矢量量化將按以下順序進(jìn)行:包含有初始狀態(tài)的兩個(gè)連續(xù)子幀中剩余的23/22個(gè)樣點(diǎn);時(shí)間軸上位于初始狀態(tài)之后的各個(gè)子幀;時(shí)間軸上位于初始狀態(tài)之前的各個(gè)子幀。對(duì)于此矢量量化,每次的搜索碼本范圍是動(dòng)態(tài)碼本,動(dòng)態(tài)碼本中存儲(chǔ)了已經(jīng)被編碼的對(duì)象,并隨著最新的解碼結(jié)果,該動(dòng)態(tài)碼本被更新。6)對(duì)編碼結(jié)果進(jìn)行打包處理。下圖為iLBC編碼器原理圖。2.3.1.1 預(yù)處理在某些應(yīng)用當(dāng)中得到的語(yǔ)音數(shù)據(jù)包含直流或者50、60Hz的噪聲,可以在信號(hào)輸入編碼器之前通過(guò)高通濾波器來(lái)消除這些信號(hào)ilbc語(yǔ)音算法研究及dsp實(shí)現(xiàn),參考文獻(xiàn)10。通常使用截止頻率為90Hz的1階極點(diǎn)/零點(diǎn)濾波器,其一般定義如下:其中,a、b均為常數(shù)。2.3.1.2 LPC系數(shù)計(jì)算、量化及內(nèi)插進(jìn)入LPC分析模塊的數(shù)據(jù)是剛剛經(jīng)過(guò)預(yù)處理的數(shù)據(jù)流。8k采樣率16bit表示的PCM數(shù)據(jù)流輸入編碼器,被分割成幀長(zhǎng)為160/240個(gè)樣點(diǎn)的一系列幀,每個(gè)幀又被分為4/6個(gè)連續(xù)的子塊,每個(gè)子塊包含40個(gè)樣點(diǎn)。對(duì)于30ms的幀,編碼器將做兩次階數(shù)為10的LPC分析。第一次分析一個(gè)對(duì)稱平滑窗,重心在第二個(gè)子塊上。第二次分析一個(gè)非對(duì)稱平滑窗,重心在第五個(gè)子塊上。對(duì)于20ms的幀,僅存在一次LPC分析,采用的平滑窗重心在第三個(gè)子塊上。每次分析都是通過(guò)自相關(guān)法以及Levinson-Durbin算法得到10階線性濾波器的系數(shù)。每一次LPC分析,得到線性濾波器的系數(shù)之后都需要將其映射到一個(gè)LSF(Line Spectral Frequencies)集合,量化內(nèi)插后得到LSP(Line Spectral Pair)集合。之所以這樣是因?yàn)榫€譜對(duì)系數(shù)更利于量化和內(nèi)插,即對(duì)量化誤差不敏感,具有良好的魯棒性。線譜對(duì)系數(shù)的量化利用的是三級(jí)分割矢量量化技術(shù),10個(gè)系數(shù)分量被分割成3、3、4的子集,然后每個(gè)子集分別通過(guò)常規(guī)的矢量量化方式得到量化結(jié)果。量化完畢后,需要對(duì)LSF系數(shù)進(jìn)行重排序,按照下標(biāo)順序依次從小到大,目的是最終結(jié)果反映出來(lái)的濾波器具有穩(wěn)定性。LPC分析方法是目前低比特率語(yǔ)音編碼技術(shù)的基礎(chǔ),在實(shí)現(xiàn)時(shí)主要基于10階線性預(yù)測(cè)(Linear Prediction)濾波器ilbc語(yǔ)音算法研究及dsp實(shí)現(xiàn),參考文獻(xiàn)11。濾波器的定義如下:其中,是量化后的LP系數(shù)。1. 自相關(guān)系數(shù)計(jì)算LPC分析的第一步就是使用窗口化語(yǔ)音采樣來(lái)計(jì)算自相關(guān)系數(shù)。我們以30ms幀為例,它包含了兩個(gè)自相關(guān)系數(shù)集合,因此每個(gè)自相關(guān)系數(shù)的計(jì)算都要通過(guò)不同的窗口化操作。自相關(guān)系數(shù)的第一個(gè)窗口采用的是標(biāo)準(zhǔn)對(duì)稱漢明窗,由兩部分組成,其數(shù)學(xué)函數(shù)如下:其中=240/300(分別對(duì)應(yīng)20ms幀和30ms幀),為存放語(yǔ)音采樣點(diǎn)的數(shù)組。自相關(guān)系數(shù)的第二個(gè)窗口采用的是非對(duì)稱窗口,其定義如下:通過(guò)對(duì)預(yù)處理后的數(shù)據(jù)進(jìn)行加窗處理后進(jìn)行自相關(guān)運(yùn)算得到自相關(guān)系數(shù)。2. 計(jì)算LPC系數(shù)由兩組11個(gè)平滑的自相關(guān)系數(shù)acf1和acf2,根據(jù)Levinson-Durbin算法可以計(jì)算出兩組11個(gè)LPC系數(shù)lp1和lp2。為了達(dá)到平滑頻譜峰值的目的,可以 通過(guò)以下函數(shù)來(lái)修正LPC系數(shù),其定義如下:其中,是0到1之間的實(shí)數(shù),推薦使用0.9。3. LSF系數(shù)的計(jì)算及量化將計(jì)算出的LPC系數(shù)轉(zhuǎn)化為線譜頻率(Line Spectral Frequencies,LSF)系數(shù)。然后使用三級(jí)分割矢量量化技術(shù)對(duì)LSF系數(shù)進(jìn)行量化,10個(gè)系數(shù)分量被分割成3,3,4的子向量,每一個(gè)子向量都可以使用常規(guī)的標(biāo)量量化進(jìn)行量化。量化結(jié)束后,在向量分割的邊界對(duì)LSF系數(shù)進(jìn)行重排序,以保證編碼器和解碼器使用相同的LSF表示。4. LSF系數(shù)插值對(duì)于每一幀語(yǔ)音采樣計(jì)算出兩個(gè)LSF系數(shù)集合,通過(guò)一個(gè)10階的FIR濾波器插值每個(gè)子塊可以得到不同的LSF。每一個(gè)子塊的LSF系數(shù)插值后可以轉(zhuǎn)化為L(zhǎng)PC系數(shù)。未量化的和量化后的LPC系數(shù)分別來(lái)自兩個(gè)濾波器,子塊的未量化的分析濾波器定義如下:子塊的量化后的分析濾波器定義如下所示:2.3.1.3. 計(jì)算殘差信號(hào)通過(guò)LPC分析濾波器系數(shù)的量化和插值來(lái)計(jì)算殘差信號(hào)。尤其對(duì)于每一個(gè)40采樣的子塊來(lái)說(shuō),LPC分析濾波器被用來(lái)過(guò)濾相同采樣的子塊。每個(gè)子塊的過(guò)濾存儲(chǔ)被帶到下一個(gè)子塊的LPC濾波器。每個(gè)LPC分析濾波器的輸出信號(hào)組成對(duì)應(yīng)子塊的殘差信號(hào)。為了使得輸出的殘差信號(hào)更加平滑,通常添加一個(gè)感知加權(quán)濾波器來(lái)平滑頻譜。在iLBC算法中,為了降低算法的復(fù)雜度,定義感知權(quán)重濾波器如下:其中,是由子塊未量化但插值后的LSF系數(shù)所得到的濾波器。2.3.1.4 起始態(tài)確認(rèn)及量化從能量上衡量殘差信號(hào)中最大的兩個(gè)連續(xù)子塊將被視為起始態(tài)的粗略位置。起始態(tài)就是這兩個(gè)連續(xù)子塊的前57/58個(gè)樣點(diǎn)或后57/58個(gè)樣點(diǎn)。最終選擇決定于哪一端的能量更大。針對(duì)選中作為起始態(tài)的這些樣點(diǎn),需要對(duì)其做歸一化處理。在歸一化之前用一個(gè)全通濾波器對(duì)其做相位雜散處理,這樣做是的在殘差信號(hào)序列中,樣點(diǎn)的分布規(guī)律更具偶對(duì)稱特性。濾波通過(guò)時(shí)域中的圓周卷積來(lái)完成,從濾波后的響應(yīng)序列當(dāng)中選出幅度最大的樣點(diǎn),對(duì)數(shù)化后進(jìn)行64級(jí)標(biāo)量量化。以量化值作為依據(jù)導(dǎo)出歸一化因子。如下圖所示,對(duì)歸一化后的起始態(tài)樣點(diǎn)值做感知加權(quán),目的是使得語(yǔ)音頻譜不因?yàn)闅w一化操作而變得過(guò)于尖銳。加權(quán)后的樣點(diǎn)經(jīng)過(guò)差分PCM量化編碼完成最后的起始態(tài)編碼。其中為感知加權(quán)濾波器,為全通濾波器。起始態(tài)樣點(diǎn)的DPCM量化2.3.1.5 碼書(shū)編碼對(duì)于除去起始態(tài)的那些樣點(diǎn),余下的樣點(diǎn)需要通過(guò)動(dòng)態(tài)碼書(shū)來(lái)編碼。編碼基于一個(gè)自適應(yīng)的碼書(shū),已編碼的語(yǔ)音數(shù)據(jù)在編碼端臨時(shí)解碼得到LPC激勵(lì)信號(hào),將它們緩存在一塊固定的內(nèi)存中,按照一定的規(guī)則選取這塊內(nèi)存中的樣點(diǎn)序列,就能得到用于編碼下一塊數(shù)據(jù)的自適應(yīng)碼書(shū)。這樣做是利用了語(yǔ)音信號(hào)的短時(shí)平穩(wěn)性。具體編碼過(guò)程主要包括以下幾部分:首先,對(duì)目前已編碼的殘差信號(hào)進(jìn)行解碼,用沒(méi)有感知加權(quán)處理的碼書(shū)。碼書(shū)內(nèi)存建立:利用剛解碼出來(lái)的數(shù)據(jù)填充緩沖內(nèi)存,為創(chuàng)建自適應(yīng)碼書(shū)做準(zhǔn)備。需要注意的是在起始態(tài)前面和后面的不同子塊在內(nèi)存中相應(yīng)的排序時(shí)相反的。感知加權(quán)濾波:對(duì)碼書(shū)內(nèi)存中的數(shù)據(jù)和目標(biāo)殘差信號(hào)進(jìn)行感知加權(quán)濾波。查找匹配碼書(shū):在碼書(shū)中查找和目標(biāo)殘差信號(hào)最匹配的碼字,進(jìn)而計(jì)算出優(yōu)化的增益并對(duì)此增益進(jìn)行量化。目標(biāo)更新:從感知加權(quán)內(nèi)存中選出的變量乘以計(jì)算出來(lái)的增益得到一個(gè)預(yù)測(cè)殘差,從感知加權(quán)過(guò)后的目標(biāo)殘差中減去此預(yù)測(cè)殘差得到所謂更新了的目標(biāo)殘差信號(hào)。該過(guò)程反復(fù)兩次。基本流程大致如下圖所示:編碼器端碼書(shū)檢索流程2.3.1.6 打包對(duì)編碼結(jié)果按照規(guī)定的格式來(lái)打包。對(duì)于20ms的幀,使用304bit表示編碼結(jié)果,數(shù)據(jù)速率為15.2kbps;對(duì)于30ms的幀,使用400bit表示編碼結(jié)果,數(shù)據(jù)速率為13.3kbps。編碼器編碼的比特流的分配情況如下表所示:編碼比特流分配表參數(shù)比特分配20ms幀30ms幀線譜對(duì)參數(shù)(LSF)2040初始狀態(tài)位置標(biāo)號(hào)23初始態(tài)起始位置11初始狀態(tài)比例因子66初始狀態(tài)標(biāo)量量化17117422/23采樣塊碼本搜索212122/23采樣塊增益1212碼本子塊索引4694子塊增益2448空幀指示位11總和3044002.3.2解碼器 iLBC解碼器使用分析合成方法,解碼過(guò)程就是參數(shù)重建的過(guò)程。首先對(duì)LSF系數(shù)進(jìn)行內(nèi)插并經(jīng)過(guò)穩(wěn)定性檢查后得到重建的LPC濾波器系數(shù);再重建起始狀態(tài),剩余的殘差信號(hào)首先重新建立碼書(shū),再直接根據(jù)提取得到的碼書(shū)索引,查到碼書(shū)中每一級(jí)譯碼的殘差信號(hào)。根據(jù)參數(shù)重構(gòu)語(yǔ)音后,iLBC解碼器還會(huì)進(jìn)行重構(gòu)后處理,由于算法針對(duì)每一幀獨(dú)立編碼,因此非常適合使用PLC(丟包掩蔽)。另外,對(duì)解碼重構(gòu)后的激勵(lì)信號(hào)進(jìn)行語(yǔ)音增強(qiáng)來(lái)提高接收語(yǔ)音的質(zhì)量。通過(guò)運(yùn)行綜合濾波器過(guò)濾解碼語(yǔ)音塊或丟包掩蔽處理過(guò)的LP(線性預(yù)測(cè))激勵(lì)塊就可以得到解碼后的語(yǔ)音。因?yàn)樵鰪?qiáng)器造成了延遲,使得這一步濾波器的系數(shù)產(chǎn)生移位,對(duì)20ms模式移位40個(gè)樣點(diǎn),對(duì)30ms模式移位80個(gè)樣點(diǎn)。對(duì)包丟失的情形,使用最后一次正確接收的LP系數(shù)。最后對(duì)語(yǔ)音信號(hào)通過(guò)截止頻率為65Hz的高通濾波即可輸出。解碼流程如下圖所示:iLBC解碼流程圖2.3.2.1 參數(shù)解碼1. 線性預(yù)測(cè)濾波器重建線性預(yù)測(cè)器的解碼是非常直接的,給出3或6個(gè)下標(biāo)系數(shù)(分別對(duì)應(yīng)20ms和30ms模式),通過(guò)查表可以很容易得出相應(yīng)的LSF向量ilbc語(yǔ)音算法研究及dsp實(shí)現(xiàn),參考文獻(xiàn)19。對(duì)于每一個(gè)LSF向量,它的三個(gè)獨(dú)立的分隔向量通過(guò)組合可以得到量化后的LSF系數(shù)。將LSF系數(shù)進(jìn)行插值并經(jīng)過(guò)穩(wěn)定性檢查后就可以得到LPC系數(shù)。2. 構(gòu)造起始狀態(tài)進(jìn)行起始狀態(tài)解碼,解碼結(jié)果一方面可以作為激勵(lì)信號(hào)暫存,另一方面存入碼本存儲(chǔ)區(qū),以構(gòu)成動(dòng)態(tài)碼本的初始值。為了彌補(bǔ)早期過(guò)濾操作的失真,解碼過(guò)程中使用全通濾波器來(lái)過(guò)濾子塊。3. 構(gòu)建殘差信號(hào)解碼殘差信號(hào)時(shí)首先解碼起始狀態(tài)之前的子塊,然后解碼起始狀態(tài)之后的子塊,直到所有的子塊解碼結(jié)束,并使用解碼結(jié)果更新動(dòng)態(tài)碼本。對(duì)于每個(gè)子塊的解碼采用了多級(jí)自適應(yīng)碼本技術(shù),它依賴于自適應(yīng)碼本解碼時(shí)構(gòu)建的自適應(yīng)碼本存儲(chǔ),用來(lái)在殘差信號(hào)域生成一個(gè)合成信號(hào)并最終用來(lái)生成合成語(yǔ)音。2.3.2.2 重構(gòu)語(yǔ)音后處理1. 丟包隱藏iLBC編解碼器使用動(dòng)態(tài)抖動(dòng)調(diào)整緩沖來(lái)判斷數(shù)據(jù)包是正確接收還是丟失。如果接收到的數(shù)據(jù)包正常,就執(zhí)行解碼操作,并把該包的LPC濾波器系數(shù)和完整的激勵(lì)信號(hào)保存在解碼狀態(tài)結(jié)構(gòu)中;否則使用丟包隱藏技術(shù)(Packet Loss Concealment,PLC)處理丟包。PLC根據(jù)前一個(gè)塊的解碼狀態(tài)信息,針對(duì)不同情況分別處理:1)如果前一個(gè)包和當(dāng)前包都正確接收到,PLC模塊保存當(dāng)前包的參數(shù)。2)如果當(dāng)前包沒(méi)有收到,那么替代這個(gè)包的激勵(lì)信號(hào)基于基音同步,重復(fù)前一個(gè)正確收到的報(bào),將混入一個(gè)隨機(jī)的激勵(lì)信號(hào)以避免出現(xiàn)不悅耳的嗡嗡聲,前一個(gè)正確接收到的包的狀態(tài)仍然保留。3)如果前面的包沒(méi)有正確收到,而當(dāng)前包正確收到,那么需要找到當(dāng)前包激勵(lì)信號(hào)和前一個(gè)正確的激勵(lì)信號(hào)相位重疊的位置,使語(yǔ)音平滑過(guò)渡。2. 語(yǔ)音增強(qiáng)由于解碼重構(gòu)得到的激勵(lì)信號(hào)還不能直接用于激勵(lì)LPC濾波器,必須采用語(yǔ)音增強(qiáng)措施,因此解碼器包含了一個(gè)語(yǔ)音增強(qiáng)單元,用來(lái)對(duì)重構(gòu)的激勵(lì)信號(hào)進(jìn)行操作。它通過(guò)減少語(yǔ)音段的噪聲增加了重構(gòu)語(yǔ)音的感知音質(zhì)。與其它解碼器不同的是,它可以很細(xì)微的修改激勵(lì)信號(hào)。雖然語(yǔ)音增強(qiáng)改善了語(yǔ)音質(zhì)量但增加了濁音信號(hào)的周期長(zhǎng)度。所以,必須使用限定條件的語(yǔ)音增強(qiáng)。增強(qiáng)的標(biāo)準(zhǔn)時(shí)已增強(qiáng)的激勵(lì)信號(hào)和沒(méi)有增強(qiáng)的激勵(lì)信號(hào)之間的差別不大,用公式表示如下:而 其中,“”表示點(diǎn)乘,表示斜度周期同步序列向量。語(yǔ)音增強(qiáng)的具體步驟如下:首先計(jì)算激勵(lì)信號(hào)自相關(guān),大致確定基音周期;然后對(duì)樣點(diǎn)做4倍上采樣,再得到精確到1/4采樣周期的基音周期和基音同步序列;最后計(jì)算平滑激勵(lì),如果線性組合和原序列差別過(guò)大則重新計(jì)算增強(qiáng)后的序列,該序列將是未增強(qiáng)信號(hào)和平滑信號(hào)的線性組合。3. 高通濾波 為了消除合成語(yǔ)音中的低頻率語(yǔ)音信號(hào),在解碼器中添加了一個(gè)截止頻率為65Hz的高通濾波器,并讓合成后的語(yǔ)音通過(guò)高通濾波器過(guò)濾。4) iLBC的關(guān)鍵技術(shù)(可選,湊字?jǐn)?shù))2.4.1語(yǔ)音增強(qiáng)部分2.4.2差錯(cuò)隱藏部分5)幾種語(yǔ)音算法對(duì)比,iLBC的優(yōu)勢(shì)。iLBC是一種窄帶語(yǔ)音編解碼器,使用了整個(gè)4kHz頻帶,而大多數(shù)標(biāo)準(zhǔn)低比特率編解碼器只利用了從300Hz到3400Hz的頻帶。這一點(diǎn)對(duì)音質(zhì)的影響是相當(dāng)明顯的。此外,iLBC語(yǔ)音編解碼器的頻譜特性精確模擬了原始信號(hào)的特性,其語(yǔ)音比標(biāo)準(zhǔn)低比特率編解碼器的更自然清晰。GIPS公司和一些獨(dú)立實(shí)驗(yàn)室對(duì)編解碼器的若干性能進(jìn)行了評(píng)測(cè)。2002年,Dynastat公司對(duì)iLBC實(shí)施了正式的聽(tīng)力測(cè)試。2003年,AT&T的音質(zhì)評(píng)估實(shí)驗(yàn)室(Voice Quality Assessment Lab, VQA)也對(duì)iLBC編解碼器進(jìn)行了廣泛的測(cè)試。下圖所示為Dynastat的評(píng)估結(jié)果,其根據(jù)現(xiàn)有編碼標(biāo)準(zhǔn)G.729A和G.723.1對(duì)iLBC的30ms模式進(jìn)行了標(biāo)準(zhǔn)測(cè)試。結(jié)果明顯表明,用于實(shí)際環(huán)境時(shí),iLBC的性能卓越,即使在惡劣的網(wǎng)絡(luò)條件下,其固有的數(shù)據(jù)包網(wǎng)絡(luò)屬性也能提供很高的質(zhì)量。(MOS的解釋,iLBC語(yǔ)音算法研究及DSP實(shí)現(xiàn), p30) 對(duì)iLBC、G.729A、G.723.1進(jìn)行比較的結(jié)果在網(wǎng)絡(luò)中出現(xiàn)丟包的情況下,iLBC采用丟包掩蔽技術(shù)對(duì)丟失的數(shù)據(jù)進(jìn)行恢復(fù),使得其在此種情況下仍能保持較好的性能。下圖為在丟包情況下iLBC與G.729和G.723解碼器在丟包情況下的性能比較。對(duì)iLBC、G.729、G.723在丟包情況下進(jìn)行比較的結(jié)果下圖的測(cè)試還顯示了iLBC不僅在丟包條件下的性能顯著優(yōu)于目前的標(biāo)準(zhǔn)編解碼器(G.729、G.723.1、G.728、GSM等),而且還等于甚至優(yōu)于理想信道(無(wú)丟包)條件下的標(biāo)準(zhǔn)編解碼器。丟包和理想信道情況下幾種編解碼器的性能比較 AT&T的測(cè)試結(jié)果也顯示,在iLBC中,20ms和30ms模式之間沒(méi)有顯著的性能差異。而在丟包情況下,20ms模式甚至表現(xiàn)出更好的丟包穩(wěn)健性。AT&T VQA實(shí)驗(yàn)室也表示,iLBC在存在背景噪聲時(shí)的性能十分優(yōu)秀,可媲美信道無(wú)丟包的G.729.E??偠灾谙嗤陌粨Q通信條件下,iLBC的語(yǔ)音質(zhì)量效果比G.729、G.723.1以及G.711更好,聲音更加圓潤(rùn)飽滿,且丟包率越高,iLBC在語(yǔ)音質(zhì)量上的優(yōu)勢(shì)就越明顯。iLBC算法為數(shù)據(jù)包網(wǎng)絡(luò)實(shí)現(xiàn)了尖端的固定比特率編碼,在質(zhì)量與比特率之間取得了非常出色的平衡。三、基于MIPS的嵌入式開(kāi)發(fā)平臺(tái)3.1 嵌入式處理器嵌入式系統(tǒng)的核心是各種類型的嵌入式處理器。嵌入式處理器的體系結(jié)構(gòu)經(jīng)歷了從CISC(復(fù)雜指令集)至RISC(精簡(jiǎn)指令集)和Compact RISC的轉(zhuǎn)變,位數(shù)則由4位、8位、16位、32位逐步發(fā)展到64位。目前常用的嵌入式處理器可分為低端的嵌入式微控制器、中高端的嵌入式微處理器、用于計(jì)算機(jī)通信領(lǐng)域的嵌入式DSP處理器和高度集成的嵌入式片上系統(tǒng)。目前全世界嵌入式處理器已經(jīng)超過(guò)1000多種,流行的體系結(jié)構(gòu)有30多個(gè)系列,其中以MIPS、ARM、PowerPC、MC68000等使用的最為廣泛。3.2 MIPS32 24KEc處理器MIPS是世界上很流行的一種RISC處理器。MIPS的意思是“無(wú)內(nèi)部互鎖流水級(jí)的微處理器”(Microprocessor without interlocked piped stages),其機(jī)制是盡量利用軟件辦法避免流水線中的數(shù)據(jù)相關(guān)問(wèn)題。它是在80年代初期由斯坦福大學(xué)Hennessy教授領(lǐng)導(dǎo)的研究小組研制出來(lái)的基于雙mips平臺(tái)的嵌入式多媒體通信終端設(shè)計(jì),參考文獻(xiàn)29。MIPS處理器的用途很廣,在通用方面,MIPS R系列微處理器用于構(gòu)建SGI的高性能工作站、服務(wù)器和超級(jí)計(jì)算機(jī)系統(tǒng)。在嵌入式方面,MIPS K系列微處理器也獲得了廣泛的應(yīng)用。目前世界上72%的VoIP設(shè)備、76%的電纜機(jī)頂盒、70%的DVD刻錄機(jī)、95%的電纜調(diào)制解調(diào)器都是基于MIPS體系結(jié)構(gòu)的。MIPS32 24KEc微處理器內(nèi)核是MIPS32 24KE處理器族的成員,是一款面向SoC應(yīng)用設(shè)計(jì)的高性能、低功耗、32位RISC處理器內(nèi)核,其結(jié)構(gòu)如下圖所示:MIPS32 24KEc微處理器內(nèi)核結(jié)構(gòu)MIPS32 24KEc微處理器內(nèi)核具有如下特性:1. 采用32位MIPS指令集合,同時(shí)支持MIPS16E指令壓縮技術(shù)。MIPS32 24KEc處理器采用MIPS32 Release 2架構(gòu),支持32位數(shù)據(jù)以及地址操作,具有硬乘加/乘減單元。2. 五級(jí)流水線結(jié)構(gòu)。MIPS架構(gòu)是為流水線而造。只要CPU運(yùn)行時(shí)使用Cache,每條MIPS指令的執(zhí)行就分為取指、執(zhí)行、內(nèi)存操作、對(duì)齊和寫(xiě)回五個(gè)階段,每個(gè)流水段花費(fèi)一個(gè)固定的時(shí)間。這段時(shí)間通常是一個(gè)處理器始終周期。所有指令嚴(yán)格定義以保證能按照相同的流水段順序,甚至于這條指令在某個(gè)階段什么也不做。結(jié)果是只要Cache保持命中,CPU平均每個(gè)時(shí)鐘周期執(zhí)行一條指令。3. Cache結(jié)構(gòu)24KEc處理器采用大小可配(064KB)的指令Cache和數(shù)據(jù)Cache,用于在處理器與主存儲(chǔ)器之間存放當(dāng)前被使用的主存部分的內(nèi)容,以減少訪問(wèn)主存的等待時(shí)間。處理器取指令或操作數(shù)時(shí),首先在Cache中進(jìn)行地址比較,一旦命中便不再訪問(wèn)主存,極大減少了處理器等待時(shí)間。4. 可編程內(nèi)存管理單元(MMU)24KEc處理器采用32位地址,尋址空間可達(dá)4GB。MIPS處理器對(duì)地址的使用方式同傳統(tǒng)的CISC處理器有些細(xì)微不同。在24KEc CPU里,程序中的地址永遠(yuǎn)不會(huì)是芯片真正訪問(wèn)的物理地址,因而分別叫:程序(虛擬)地址和物理地址。對(duì)于MIPS的內(nèi)存管理單元最重要的是MIPS處理器沒(méi)有x86處理器的實(shí)模式,MIPS CPU是通過(guò)TLB(Translation Lookaside Buffer)來(lái)轉(zhuǎn)譯所有CPU產(chǎn)生的虛擬地址。24KEc處理器包含了一個(gè)4通道的指令TLB和一個(gè)4通道的數(shù)據(jù)TLB,以及一個(gè)能容納32個(gè)頁(yè)面的JTLB,在大部分情況下可以無(wú)須訪問(wèn)頁(yè)表直接獲得訪問(wèn)的物理地址。5. JTAG/EJTAG24KEc處理器內(nèi)建了調(diào)試單元,可以方便地通過(guò)邊界掃描協(xié)議操縱各引腳的狀態(tài)。還可以通過(guò)EJTAG方式實(shí)現(xiàn)斷點(diǎn)、單步等調(diào)試功能,方便開(kāi)發(fā)。3.3 嵌入式Linux操作系統(tǒng)嵌入式操作系統(tǒng)是一種支持嵌入式系統(tǒng)應(yīng)用的操作系統(tǒng)軟件,它是嵌入式系統(tǒng)極為重要的組成部分,通常包括與硬件相關(guān)的底層驅(qū)動(dòng)軟件、系統(tǒng)內(nèi)核、設(shè)備驅(qū)動(dòng)接口、通信協(xié)議、文件系統(tǒng)等。嵌入式操作系統(tǒng)具有通用操作系統(tǒng)的基本特點(diǎn),如能夠有效管理越來(lái)越復(fù)雜的系統(tǒng)資源;能夠把硬件虛擬化,使得開(kāi)發(fā)人員從繁忙的驅(qū)動(dòng)程序移植和維護(hù)中解脫出來(lái);能夠提供庫(kù)函數(shù)、驅(qū)動(dòng)程序、工具集以及應(yīng)用程序。與通用操作系統(tǒng)相比較,嵌入式操作系統(tǒng)在系統(tǒng)實(shí)時(shí)高效性、硬件的相關(guān)依賴性、軟件固態(tài)化以及應(yīng)用的專用性等方面具有較為突出的特點(diǎn)。到目前為止,已經(jīng)有上百種嵌入式操作系統(tǒng)面世。Linux是一套以Unix為基礎(chǔ)發(fā)展而成的操作系統(tǒng)。自1991年誕生至今,Linux在很多方面已經(jīng)趕上甚至超過(guò)了許多商用的Unix系統(tǒng)。它充分利用了x86 CPU的任務(wù)切換機(jī)制,實(shí)現(xiàn)了真正的多任務(wù)、多用戶環(huán)境。Linux對(duì)硬件的配置要求相當(dāng)?shù)?,能夠?M內(nèi)存的386機(jī)器上很好的運(yùn)行。而且可以支持很多種處理器芯片。此外更為重要的是,很多研究人員愿意在Linux上開(kāi)發(fā)程序,并且隨時(shí)對(duì)Linux的開(kāi)放內(nèi)核進(jìn)行升級(jí)和修補(bǔ),很多bug可以很快得到檢測(cè)和修復(fù)。3.4 uclibc gcc編譯器四、iLBC算法的工程實(shí)現(xiàn)本文中所采用的iLBC語(yǔ)音壓縮編解碼算法制定者只給出了一個(gè)基于C語(yǔ)言的浮點(diǎn)算法參考代碼,而MIPS32 24KEc芯片是定點(diǎn)處理器芯片。其內(nèi)部的RAM容量受到芯片面積的限制,因此應(yīng)使代碼尺寸盡可能的小。另外由于該算法主要應(yīng)用在視頻通話中,對(duì)語(yǔ)音的實(shí)時(shí)性要求比較高。所以對(duì)最終代碼的要求為:定點(diǎn)算法、尺寸盡可能小、實(shí)時(shí)性高。綜合以上幾點(diǎn),在應(yīng)用的過(guò)程中,要實(shí)現(xiàn)以下兩種代碼轉(zhuǎn)換:1把參考的浮點(diǎn)C語(yǔ)言代碼轉(zhuǎn)化為定點(diǎn)C語(yǔ)言代碼,用定點(diǎn)處理器實(shí)現(xiàn)浮點(diǎn)運(yùn)算,可以通過(guò)Q值定標(biāo)的方法來(lái)實(shí)現(xiàn)。2. 把修改后的定點(diǎn)C語(yǔ)言算法移植到基于MIPS處理器的開(kāi)發(fā)平臺(tái)上。由于MIPS處理器的開(kāi)發(fā)平臺(tái)有著空間和時(shí)間的雙重限制,所以首先需要通過(guò)合適的優(yōu)化方法優(yōu)化代碼尺寸,然后對(duì)代碼性能進(jìn)行測(cè)試,如對(duì)代碼的運(yùn)行速度等進(jìn)行優(yōu)化,保證代碼的實(shí)時(shí)性。4.1浮點(diǎn)算法的定點(diǎn)化4.1.1 Q格式定標(biāo)在數(shù)字硬件里,數(shù)據(jù)是以二進(jìn)制字的形式存儲(chǔ)的。一個(gè)二進(jìn)制字是一個(gè)固定長(zhǎng)度的比特串(0,1串)。硬件單元或軟件功能模塊如何解釋這一串0,1序列是由數(shù)據(jù)類型定義的。二進(jìn)制數(shù)據(jù)可以表示定點(diǎn)數(shù)據(jù)或浮點(diǎn)數(shù)據(jù)。在定點(diǎn)DSP芯片中,采用定點(diǎn)數(shù)進(jìn)行數(shù)值運(yùn)算,一個(gè)定點(diǎn)數(shù)據(jù)的特性由字長(zhǎng)、二進(jìn)制小數(shù)點(diǎn)的位置和是否有符號(hào)位決定,二進(jìn)制小數(shù)點(diǎn)的位置決定了二進(jìn)制數(shù)值的度量和解釋。由于MIPS32 24KEc芯片是定點(diǎn)處理器芯片,參與運(yùn)算的數(shù)都是整形數(shù),而iLBC的編解碼過(guò)程中需要大量的小數(shù)運(yùn)算,這種情況下運(yùn)算的關(guān)鍵就是由編程者自己確定小數(shù)點(diǎn)的位置,這就是數(shù)的定標(biāo)。通過(guò)設(shè)定小數(shù)點(diǎn)在數(shù)中的位置就可以表示不同大小和精度的小數(shù)。一般來(lái)說(shuō)小數(shù)的定標(biāo)方法采用Q格式表示法,同時(shí)數(shù)值的最高一位作為該數(shù)的符號(hào)位,“1”表示負(fù)數(shù),“0”表示整數(shù)。對(duì)一個(gè)用Qn表示的小數(shù),其小數(shù)點(diǎn)的位置在從右數(shù)第n位上??梢钥闯?,即使是同一個(gè)數(shù)據(jù),如果定標(biāo)位不同,其數(shù)值大小就不同。在數(shù)值動(dòng)態(tài)范圍較大的場(chǎng)合,必須犧牲數(shù)值精度來(lái)滿足動(dòng)態(tài)范圍;相反在數(shù)值精度要求比較高的場(chǎng)合,必須犧牲動(dòng)態(tài)范圍來(lái)滿足精度的要求。例如Q0的動(dòng)態(tài)范圍在-32768,32767之間,其精度為1,此時(shí)定點(diǎn)數(shù)在數(shù)值上等于浮點(diǎn)數(shù);Q15的動(dòng)態(tài)范圍在-1,0.9999695之間,其精度為1/32768=0.00003051。因此,動(dòng)態(tài)范圍與精度是一對(duì)矛盾,在實(shí)際的定點(diǎn)算法中為了達(dá)到最佳的性能,必須充分考慮從而選擇適當(dāng)?shù)亩?biāo)。Q格式表示法的數(shù)值范圍表【iLbc語(yǔ)音增強(qiáng)模塊算法29】如下。M,N表示法中,M表示了整數(shù)的位數(shù),N表示了小數(shù)的位數(shù),Qn與M,N表示法表達(dá)的定點(diǎn)數(shù)格式是等價(jià)的。表4-1 數(shù)值的Q值與其數(shù)值范圍Q值M,N表示法數(shù)值范圍Q151,15Q142,14Q133,13Q124,12Q115,11Q106,10Q97,9Q88,8Q79,7Q610,6Q511,5Q412,4Q313,3Q214,2Q115,1Q016,0如果數(shù)據(jù)的值超出了Q0值所能表示的范圍,可以用整數(shù)位擴(kuò)展的雙精度數(shù)或者多精度數(shù)來(lái)表示,即二進(jìn)制總長(zhǎng)度為32位或以上。類似的,如果Q15不足以滿足變量的精度要求,可以用小數(shù)位擴(kuò)展的雙精度數(shù)來(lái)表示。Q值的估算通常有兩種方法,理論分析法和統(tǒng)計(jì)分析法。對(duì)于某些變量,動(dòng)態(tài)范圍可以通過(guò)理論分析法確定。對(duì)于理論上無(wú)法確定范圍的變量,一般采用統(tǒng)計(jì)分析的方法來(lái)確定其動(dòng)態(tài)范圍,即用足夠多的輸入信號(hào)的樣本值來(lái)確定程序中變量的動(dòng)態(tài)范圍。下圖是iLBC算法中主要變量的動(dòng)態(tài)范圍與定標(biāo)值。表4-2 iLBC算法中主要變量的動(dòng)態(tài)范圍與定標(biāo)值數(shù)據(jù)所在模塊數(shù)據(jù)名數(shù)據(jù)物理意義數(shù)據(jù)理論范圍定標(biāo)值備注data輸入語(yǔ)音幀-32768,3276716,0數(shù)據(jù)輸入自相關(guān)系數(shù)計(jì)算lpc_winTbl加密函數(shù)-1,11,15r自相關(guān)函數(shù)-232,23232,0經(jīng)放縮Dubin算法aLPC系數(shù)-16,164,12K反射系數(shù)-1,11,31雙精度T1臨時(shí)變量-32,325,27雙精度帶寬擴(kuò)展運(yùn)算chirp擴(kuò)展因子-1,11,15LPC系數(shù)轉(zhuǎn)為L(zhǎng)SFlsf線譜頻率參數(shù)0,pi3,13p中間多項(xiàng)式參數(shù)-32,325,11q中間多項(xiàng)式系數(shù)-32,325,11grid搜索表格-1,11,15ylow,yhigh切比雪夫多項(xiàng)式值-16,164,12LSF矢量量化lsfdeq量化后的LSF系數(shù)0,pi3,13dist矢量的距離-32,325,27穩(wěn)定性檢測(cè)eps保證穩(wěn)定性的增量-1,11,15LSF內(nèi)插coef內(nèi)插系數(shù)-1,11,15T0中間變量-8,83,29LSF轉(zhuǎn)化為L(zhǎng)PCf1中間多項(xiàng)式系數(shù)-64,646,26f2中間多項(xiàng)式系數(shù)-64,646,26分析濾波器L_tmp中間變量-16,164,28初試狀態(tài)選取sampEn_win加權(quán)系數(shù)-1,11,15fssqEn前向能量值-232,23232,0經(jīng)放縮bssqEn后向能量值-232,23232,0經(jīng)放縮碼本搜索residual殘差值-215,2151,15gain增益值-4,42,144.1.2 浮點(diǎn)函數(shù)到定點(diǎn)函數(shù)的轉(zhuǎn)換為了能夠最終在MIPS32 24KEc芯片上實(shí)現(xiàn)算法,需要將標(biāo)準(zhǔn)參考代碼中的浮點(diǎn)C代碼轉(zhuǎn)換成定點(diǎn)C代碼,將原本的浮點(diǎn)函數(shù)用相應(yīng)的定點(diǎn)函數(shù)來(lái)代替,把一些基本的運(yùn)算,如雙精度乘法,正弦函數(shù)求值,求余弦值及求指數(shù)對(duì)數(shù)運(yùn)算等進(jìn)行定點(diǎn)的實(shí)現(xiàn)。表4-3中列出了程序中需要修改為定點(diǎn)的運(yùn)算函數(shù)。表4-3 定點(diǎn)化函數(shù)的實(shí)現(xiàn)函數(shù)返回值功能說(shuō)明Add(Word16, Word16)Word16單精度加法Sub(Word16, Word16)Word16單精度減法L_add(Word32, Word32)Word32雙精度加法L_sub(Word32, Word32)Word32雙精度減法Saturate (Word 32)Word16舍入運(yùn)算Mult(Word16, Word16)Word16整數(shù)懲罰L_mult(Word16, Word16)Word32小數(shù)乘法L_mac(Word32, Word16, Word16)Word32乘累加L_msu(Word32, Word16, Word16)Word32乘累減Shl(Shr)(Word16, Word16)Word1616位左(右)移位L_shl(L_shr)(Word32, Word16)Word3232位左(右)移位norm_s(Word16)Word1616位歸一化(使符號(hào)位只有一位)norm_l(Word32)Word3232位歸一化(使符號(hào)位只有一位)Pow2(Word16, Word16)Word32以2為底的指數(shù)函數(shù)Sqrt(Word32)Word32開(kāi)平方函數(shù)下面的代碼是單精度加法函數(shù)的定點(diǎn)化實(shí)現(xiàn):Word16 Add (Word16 var1, Word16 var2) Word16 var_out; Word32 L_sum; L_sum = (Word32) var1 + var2; var_out = Saturate (L_sum); return (var_out);其中,Saturate函數(shù)完成舍入運(yùn)算,將32位整數(shù)舍入到16位整數(shù),即返回值的范圍為-32768,32767。4.1.3信號(hào)縮減在浮點(diǎn)算法轉(zhuǎn)換為定點(diǎn)算法后,信號(hào)會(huì)有發(fā)生溢出的可能,所以,在語(yǔ)音信號(hào)編碼之前,需要進(jìn)行信號(hào)縮減以減小實(shí)現(xiàn)定點(diǎn)算法時(shí)發(fā)生溢出的可能。信號(hào)縮減就是在發(fā)送端將輸入信號(hào)除以2,然后再進(jìn)行其它處理。在接收端,將解碼后得到的信號(hào)乘以2,以恢復(fù)原始信號(hào)用于輸出。 4.2 MIPS平臺(tái)的移植4.2.1 Linux平臺(tái)下交叉編譯本文采用的嵌入式開(kāi)發(fā)平臺(tái)基于Linux操作系統(tǒng),為了將iLBC編解碼器移植到MIPS開(kāi)發(fā)平臺(tái)下,需要對(duì)代碼進(jìn)行交叉編譯。交叉編譯這個(gè)概念的出現(xiàn)和流行是和嵌入式系統(tǒng)的廣泛發(fā)展同步的。我們常用的計(jì)算機(jī)軟件,都需要通過(guò)編譯的方式,把使用高級(jí)計(jì)算機(jī)語(yǔ)言編寫(xiě)的代碼(比如C代碼)編譯(compile)成計(jì)算機(jī)可以識(shí)別和執(zhí)行的二進(jìn)制代碼。比如,我們?cè)赪indows平臺(tái)上,可使用Visual C+開(kāi)發(fā)環(huán)境,編寫(xiě)程序并編譯成可執(zhí)行程序。這種方式下,我們使用PC平臺(tái)上的Windows工具開(kāi)發(fā)針對(duì)Windows本身的可執(zhí)行程序,這種編譯過(guò)程稱為native compilation,中文可理解為本機(jī)編譯。然而,在進(jìn)行嵌入式系統(tǒng)的開(kāi)發(fā)時(shí),運(yùn)行程序的目標(biāo)平臺(tái)通常具有有限的存儲(chǔ)空間和運(yùn)算能力,為了解決這個(gè)問(wèn)題,交叉編譯工具就應(yīng)運(yùn)而生了。通過(guò)交叉編譯工具,我們就可以在CPU能力很強(qiáng)、存儲(chǔ)控件足夠的主機(jī)平臺(tái)上(比如PC上)編譯出針對(duì)其他平臺(tái)的可執(zhí)行程序。在本文中,采用mipsisa32r2-uclibc-gcc交叉編譯器可以在主機(jī)上編譯生成在MIPS平臺(tái)上的可執(zhí)行程序,實(shí)現(xiàn)代碼從主機(jī)到MIPS嵌入式開(kāi)發(fā)平臺(tái)的移植。4.2.2 大小端轉(zhuǎn)換大端模式,是指數(shù)據(jù)的低位保存在內(nèi)存的高地址中,而數(shù)據(jù)的高位保存在內(nèi)存的低地址中;小端模式是指數(shù)據(jù)的低位保存在內(nèi)存的低地址中,而數(shù)據(jù)的高位保存在內(nèi)存的高地址中。DEC (Digital Equipment Corporation,現(xiàn)在是Compaq公司的一部分)和Intel的機(jī)器(X86平臺(tái))一般采用小端。IBM, Motorola(Power PC), Sun的機(jī)器一般采用大端。本文采用的主機(jī)(PC機(jī))是Intel X86平臺(tái),是小端模式,而MIPS嵌入式開(kāi)發(fā)平臺(tái)是大端模式,所以需要將代碼進(jìn)行從小端到大端的轉(zhuǎn)換。由于語(yǔ)音信號(hào)用16bit數(shù)據(jù)表示,即在MIPS平臺(tái)上,數(shù)據(jù)的高8位(MSB)存放在內(nèi)存的低地址,而數(shù)據(jù)的低8位(LSB)存放在內(nèi)存的高地址。16位數(shù)據(jù)從小端到大端的轉(zhuǎn)換代碼如下所示:Word16 swap(Word16 data) Word16 tmp; tmp = (data8) & (0x0000ffff); data = (data8) & 0xffff0000) | tmp; return data;4.2.3 地址對(duì)齊處理現(xiàn)代計(jì)算機(jī)中內(nèi)存空間都是按照字節(jié)劃分的,從理論上講似乎對(duì)任何類型的變量的訪問(wèn)可以從任何地址開(kāi)始,但實(shí)際情況是在訪問(wèn)特定類型變量的時(shí)候經(jīng)常在特定的內(nèi)存地址訪問(wèn),這就需要各種類型的數(shù)據(jù)按照一定的規(guī)則在空間上排列,而不是順序的一個(gè)接一個(gè)的排放,這就是對(duì)齊。由于各個(gè)硬件平臺(tái)對(duì)存儲(chǔ)空間的處理上有很大的不同,一些平臺(tái)對(duì)某些特定類型的數(shù)據(jù)只能從某些特定的地址開(kāi)始存取。比如有些架構(gòu)的CPU在訪問(wèn)一個(gè)沒(méi)有進(jìn)行對(duì)齊的變量的時(shí)候會(huì)發(fā)生錯(cuò)誤,那么在這種架構(gòu)下編程必須保證字節(jié)對(duì)齊。其它平臺(tái)可能沒(méi)有這種情況,但是如果不按照適合其平臺(tái)要求對(duì)數(shù)據(jù)存放進(jìn)行對(duì)齊,會(huì)在存取效率上帶來(lái)?yè)p失。在MIPS平臺(tái)下,每次讀取都是從偶地址開(kāi)始,如果一個(gè)int型存放在偶地址開(kāi)始的地方,那么一個(gè)讀周期就可以讀出這32bit,但如果存放在奇地址開(kāi)始的地方,則需要兩個(gè)讀周期,并對(duì)這兩次讀出結(jié)果的高低字節(jié)進(jìn)行拼湊才能得到該32bit的數(shù)據(jù),顯然在讀取效率上下降很多。備選:語(yǔ)音增強(qiáng)算法和差錯(cuò)隱藏算法的展開(kāi)說(shuō)明五、結(jié)果測(cè)試、誤差分析、優(yōu)化 在iLBC的編碼模塊和解碼模塊都由浮點(diǎn)算法轉(zhuǎn)換為定點(diǎn)算法后,首先需要對(duì)編解碼模塊的正確性進(jìn)行測(cè)試。iLBC編解碼器的測(cè)試與G.729編解碼器的測(cè)試不同,后者有官方的測(cè)試序列,只要轉(zhuǎn)換后的代碼通過(guò)了測(cè)試序列,就說(shuō)明代碼正確無(wú)誤。iLBC編解碼器沒(méi)有標(biāo)準(zhǔn)的測(cè)試序列,所以測(cè)試主要是以浮點(diǎn)算法為基準(zhǔn),當(dāng)輸入相同的語(yǔ)音數(shù)據(jù)時(shí),若定點(diǎn)代碼的結(jié)果與浮點(diǎn)代碼的結(jié)果一
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 項(xiàng)目工程師培訓(xùn)課件
- 油田開(kāi)發(fā)項(xiàng)目建議書(shū)(參考)
- 2025年壓力表合作協(xié)議書(shū)
- 2025年智能分揀系統(tǒng)項(xiàng)目發(fā)展計(jì)劃
- 2025年預(yù)防用生物制品項(xiàng)目發(fā)展計(jì)劃
- 五年級(jí)上冊(cè)數(shù)學(xué)教案 第七單元
- 2025年慣性組合項(xiàng)目合作計(jì)劃書(shū)
- 2025年商業(yè)照明燈具項(xiàng)目發(fā)展計(jì)劃
- 2025年輕質(zhì)建筑材料及制品合作協(xié)議書(shū)
- 2025年中高壓陰極電容鋁箔合作協(xié)議書(shū)
- 2025年四級(jí)中式烹調(diào)師(中級(jí))職業(yè)技能鑒定參考試題庫(kù)(含答案)
- 夜間作業(yè)安全培訓(xùn)培訓(xùn)資料
- 中藥知識(shí)講解課件
- 施工資源需求計(jì)劃與調(diào)配策略
- 預(yù)制箱梁首件工程施工總結(jié)
- 2024-2025學(xué)年人教版高二化學(xué)選擇性必修3配套課件 基礎(chǔ)課時(shí)4 有機(jī)物分子式和分子結(jié)構(gòu)的確定
- 湖南省岳陽(yáng)市2024-2025學(xué)年小升初模擬數(shù)學(xué)測(cè)試卷含解析
- 寵物店店員的工作職責(zé)與服務(wù)理念
- 高中家長(zhǎng)會(huì) 高一下學(xué)期期末家長(zhǎng)會(huì)課件
- 2025浙江衢州市柯城區(qū)國(guó)企業(yè)招聘31人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 中國(guó)平面設(shè)計(jì)行業(yè)發(fā)展運(yùn)行現(xiàn)狀及投資潛力預(yù)測(cè)報(bào)告
評(píng)論
0/150
提交評(píng)論