基于DSP芯片的MELP聲碼器的算法實(shí)現(xiàn)
1 引言
1996年3月,美國(guó)政府?dāng)?shù)字語音處理協(xié)會(huì)(DDVPC)選擇了2.4kbps混合激勵(lì)線性預(yù)測(cè)(MELP)語音編碼器作為窄帶保密語音編碼的產(chǎn)品以及各種應(yīng)用的新標(biāo)準(zhǔn)由于MELP具有良好的音質(zhì)、極低的碼率,以及良好的抗誤碼特性,可以應(yīng)用在IP PHONE、移動(dòng)通信、衛(wèi)星通信等領(lǐng)域,尤其在需要大量存儲(chǔ)話音的場(chǎng)合和保密通信等方面,具有很好的發(fā)展前景。
編碼算法有硬件實(shí)現(xiàn)和軟件實(shí)現(xiàn)兩種方式,軟件實(shí)現(xiàn)靈活性強(qiáng),但處理速度較慢,一般不能滿足實(shí)時(shí)處理的要求。硬件實(shí)現(xiàn)分為專用法和通用法兩種。通用法是基于通用數(shù)字信號(hào)處理器芯片實(shí)現(xiàn)編碼算法的,它具有體積小、功耗低、運(yùn)算速度快等優(yōu)點(diǎn),其靈活性主要表現(xiàn)在軟件易于更改以及對(duì)各種算法的處理和復(fù)雜算法的實(shí)現(xiàn)上,非常適用于語音信號(hào)、視頻信號(hào)等壓縮處理。
MELP算法復(fù)雜度較高,因此實(shí)時(shí)實(shí)現(xiàn)必須借助于高性能的數(shù)字信號(hào)處理芯片。目前國(guó)內(nèi)還沒有用于研究聲碼器算法的專用芯片。因此,從功耗和性能多方面考慮,本文采用通用法實(shí)現(xiàn)MELP聲碼器算法,選擇TI公司的TMS320VC5416 DSP芯片作為主處理器,完成聲碼器的主要功能。
2 MELP編解碼算法
2.1 編碼部分
編碼器基于線性預(yù)測(cè)分析合成技術(shù),采樣率為8kHz,以180采樣值(22.5ms)為一幀進(jìn)行編碼,總體框圖見圖1。
輸入的原始語音信號(hào)經(jīng)過隔直濾波(即高通濾波),得到目標(biāo)信號(hào)S(n)。再對(duì)目標(biāo)信號(hào)作以下處理:①低通濾波后用歸一化互相關(guān)法進(jìn)行基音粗估,然后根據(jù) [0Hz,500Hz]子帶信號(hào)圍繞粗估基音估算分?jǐn)?shù)基音;②帶通分析,在5個(gè)子帶計(jì)算話音強(qiáng)度,以決定各子帶的清/濁音判決,其中 [0Hz,500Hz]子帶強(qiáng)度用于確定非周期標(biāo)志位;③計(jì)算LPC和尖峰值,用L-D算法提取10個(gè)LP系數(shù),然后乘以帶寬擴(kuò)展系數(shù),使用得到的系數(shù)計(jì)算殘差信號(hào),對(duì)殘差信號(hào)的160個(gè)抽樣計(jì)算尖峰值;④使用截止頻率為1kHz的6階巴特沃茲濾波器低通濾波殘差信號(hào),結(jié)合上一子幀的基音和當(dāng)前子幀的分?jǐn)?shù)基因,搜索出最終基音周期;⑤使用一個(gè)基音自適應(yīng)窗采用一幀兩次的方法對(duì)增益進(jìn)行量化;⑥LPC分析,并轉(zhuǎn)換成線譜對(duì)LSP參數(shù)量化;⑦將量化后的LSP 參數(shù)轉(zhuǎn)換為L(zhǎng)PC參數(shù)并進(jìn)行逆濾波操作,殘差信號(hào)補(bǔ)0至512點(diǎn),對(duì)其進(jìn)行512點(diǎn)FFT,利用頻譜峰點(diǎn)檢測(cè)算法找到前10次諧波對(duì)應(yīng)的傅立葉系數(shù)輸出。
圖1 MELP編碼器編碼原理圖
2.2 解碼部分
解碼器從信道接收到的數(shù)據(jù)中恢復(fù)出每幀的所有參數(shù),經(jīng)判斷如果此幀是比較安靜的語音幀,則增加對(duì)接觸的兩個(gè)子幀增益進(jìn)行噪聲衰減處理,同時(shí)改變?cè)肼暪烙?jì)的值。所有合成的參數(shù)對(duì)其做基音同步內(nèi)插處理,這些內(nèi)插的參數(shù)包括基音周期、增益、LSF系數(shù)、顫動(dòng)強(qiáng)度、量化的傅立葉幅度、用于產(chǎn)生混合激勵(lì)信號(hào)的周期信號(hào)濾波器的系數(shù)和噪聲濾波器系數(shù)、自適應(yīng)增強(qiáng)濾波器的譜斜度系數(shù)。內(nèi)插完成后,使用被子帶濾波器濾波后的周期信號(hào)和噪聲激勵(lì)信號(hào)相加來產(chǎn)生混合激勵(lì)信號(hào)。然后兩個(gè)激勵(lì)信號(hào)被分別濾波,并相加得到激勵(lì)信號(hào)。合成混合激勵(lì)信號(hào)后,信號(hào)經(jīng)自適應(yīng)譜增強(qiáng)濾波器處理,以改善共振峰的形狀。隨后,激勵(lì)信號(hào)進(jìn)行LPC合成得到合成語音。LPC合成用了一個(gè)直接形式的濾波器,其系數(shù)由插值后的LSP參數(shù)得到,合成的語音信號(hào)經(jīng)增益調(diào)整和脈沖散布濾波后輸出??傮w框圖見圖 2。
圖2 MELP編碼器解碼原理圖
3 TMS320VC5416簡(jiǎn)介
TMS320VC5416的總體系結(jié)構(gòu)圖如圖4所示。其內(nèi)部的高性能CPU擁有算術(shù)邏輯單元ALU、2個(gè)40位累加器ACCA和ACCB、40位桶行移位寄存器、乘累加單元以及尋址單元,算術(shù)邏輯單元包括1個(gè)40位的ALU,1個(gè)比較、選擇和存儲(chǔ)單元(CSSU)和1個(gè)指數(shù)編碼器,具有高度的并行性。本文采用的TMS320VC5416芯片最大可尋址能力為192K字(包括64K字的程序空間、64K字的數(shù)據(jù)空間和64K字的I/O空間),擴(kuò)展尋址模式下有256K字~8M字的擴(kuò)展地址空間,并擁有一套高效靈活的指令集。其指令周期為6.25ns,執(zhí)行速度最高可以達(dá)到160MIPS,完全可以滿足實(shí)時(shí)處理的要求。
圖3 TMS320VC5416總體系結(jié)構(gòu)圖
4 軟件設(shè)計(jì)及其關(guān)鍵問題
軟件設(shè)計(jì)包括編碼流程和解碼流程,編碼流程圖如圖3所示。由于解碼過程相對(duì)簡(jiǎn)單,故此處只給出編碼流程圖。
此軟件流程設(shè)計(jì)完全按照MELP原理,在實(shí)際編程過程中需要注意以下幾個(gè)關(guān)鍵問題。
圖4 MELP編碼流程圖
⑴存儲(chǔ)器分配問題
由于TMS320VC5416采用雙總線結(jié)構(gòu),提供了許多多功能指令,在實(shí)際實(shí)現(xiàn)時(shí)要充分考慮到這些特點(diǎn),盡量用多功能指令,并且合理分配使用各個(gè)寄存器和指針。例如:MAC指令可以在一個(gè)指令周期內(nèi)完成乘加操作,還可以結(jié)合寄存器的合理安排實(shí)現(xiàn)連續(xù)乘加,而不需要緩存中間數(shù)據(jù),從而大大提高了運(yùn)算效率。另外,要充分利用TMS320VC5416提供的專用的硬件結(jié)構(gòu)、尋址方式及特殊指令。如:環(huán)形存儲(chǔ)器尋址方式、雙操作數(shù)尋址方式、EXP指令和NORM 指令、舍入操作等,恰當(dāng)使用這些方式和指令可以大大提高軟件效率。
⑵ 數(shù)的定標(biāo)
TMS320VC5416采用定點(diǎn)數(shù)進(jìn)行數(shù)值運(yùn)算,其操作數(shù)一般采用整型數(shù)表示。但它的指令支持小數(shù)模式和整數(shù)模式兩種運(yùn)算模式。對(duì)DSP而言,參與數(shù)值運(yùn)算的數(shù)就是16位的整型數(shù)。在多數(shù)情況下,數(shù)學(xué)運(yùn)算過程中的數(shù)不一定都是整數(shù),這就需要程序員來確定小數(shù)點(diǎn)的位置,即數(shù)的定標(biāo)。 TMS320VC5416中數(shù)的定標(biāo)有兩種表示法:Q表示法和S表示法。在此軟件中用Q表示法表示。
在程序中需要經(jīng)常判斷運(yùn)算結(jié)果是否溢出。TMS320VC5416芯片本身設(shè)有溢出保護(hù)功能,溢出的處理是通過設(shè)置芯片中PMST寄存器的OVM位自動(dòng)執(zhí)行的??梢栽诔绦虻拈_始就設(shè)置溢出功能有效,一旦出現(xiàn)溢出異常,則累加器ACC的結(jié)果置為最大的飽和值(上溢位7FFFH,下溢位8001H),從而達(dá)到防止溢出引起精度嚴(yán)重惡化的目的。
⑶防止流水線沖突
流水線是TMS320VC5416最具特色的部分,它大大的提高了TMS320VC5416的性能,但當(dāng)DSP資源同時(shí)被不在同一流水線階段的指令使用,或在存取某些寄存器時(shí)容易引起流水線沖突。編譯時(shí)會(huì)編譯器將自動(dòng)插入一個(gè)或幾個(gè)空操作,從而增加了所需的計(jì)算量,降低了軟件效率,因此軟件設(shè)計(jì)開發(fā)中需要避免流水線沖突。
5 測(cè)試結(jié)果
目前該編解碼器已通過MELP的全部測(cè)試矢量驗(yàn)證。系統(tǒng)實(shí)時(shí)實(shí)現(xiàn)編解碼時(shí),經(jīng)過非正式的主觀測(cè)試結(jié)果表明,MELP算法的MOS分在3.3左右,其清晰度、自然度和抗噪聲性能明顯優(yōu)于傳統(tǒng)LPC算法。表1和2分別給出了在定點(diǎn)DSP芯片TMS320VC5416上實(shí)時(shí)實(shí)現(xiàn)MELP算法的編解碼器所需的存儲(chǔ)量和計(jì)算量。
從表1可見,程序和數(shù)據(jù)存儲(chǔ)區(qū)總存儲(chǔ)量共25.2K字,由于TMS320VC5416內(nèi)部RAM的大小為128K字,因此,程序boot時(shí),可以一次將所有程序和數(shù)據(jù)直接搬移到芯片內(nèi)部RAM里運(yùn)行。表2顯示了對(duì)該聲碼器所用資源的統(tǒng)計(jì)結(jié)果。在全雙工時(shí),最大運(yùn)算量為39.9MIPS,完成滿足實(shí)時(shí)實(shí)現(xiàn)的要求。
以上分析結(jié)果顯示,單片TMS320VC5416芯片最多可實(shí)現(xiàn)4路語音編解碼,片上剩余的資源還可以實(shí)現(xiàn)其它附加功能。
6 總結(jié)
創(chuàng)新點(diǎn):本文介紹了混合激勵(lì)線性預(yù)測(cè)(MELP)聲碼器算法,簡(jiǎn)要分析了該算法的編解碼原理。同時(shí),本文選用TI公司的TMS320VC5416 DSP芯片進(jìn)行了實(shí)時(shí)實(shí)現(xiàn),指出了在軟件實(shí)現(xiàn)中需要注意的關(guān)鍵問題。經(jīng)非正式主觀測(cè)試結(jié)果表明,該算法自然度、清晰度和抗噪聲性能明顯優(yōu)于傳統(tǒng)LPC算法,適用于短波窄帶數(shù)字保密通信、無線通信等需要低速率的語音編碼場(chǎng)合,具有廣闊的應(yīng)用前景。
發(fā)布者:小宇