




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