摘 要: 提出了在title="TMS320C5416">TMS320C5416 DSP硬件開(kāi)發(fā)平臺(tái)上實(shí)時(shí)實(shí)現(xiàn)G.723.1的解決方案,。根據(jù)G.723.1標(biāo)準(zhǔn)實(shí)時(shí)實(shí)現(xiàn)的要求對(duì)程序進(jìn)行了優(yōu)化,,最終在TMS320C5416 DSP上實(shí)時(shí)實(shí)現(xiàn)了該標(biāo)準(zhǔn)。語(yǔ)音質(zhì)量良好,,達(dá)到了通信質(zhì)量的要求,。
關(guān)鍵詞: 語(yǔ)音編碼;ITU-T G.723.1協(xié)議,;ACELP,;MPE_LPC;DSP芯片,;算法優(yōu)化
隨著通信,、計(jì)算機(jī)網(wǎng)絡(luò)等技術(shù)的飛速發(fā)展,日益增加的客戶需求量和現(xiàn)有的通信信道容量之間的矛盾愈發(fā)突出,。如何在有限的信道資源下,,通過(guò)壓縮信源以提高傳輸效率已成為當(dāng)前急需解決的問(wèn)題之一。為此誕生了許多語(yǔ)音壓縮處理方法,,G.723.1語(yǔ)音編碼算法便是ITU-T(國(guó)際電信聯(lián)盟電信標(biāo)準(zhǔn)化部門)制定的H.324協(xié)議簇首推的標(biāo)準(zhǔn)算法,,主要用于低比特率多媒體業(yè)務(wù)的話音或其他音頻信號(hào)分量的壓縮,。它是一種雙速率語(yǔ)音編碼標(biāo)準(zhǔn),其中6.3 kb/s的速率提供了良好的話音質(zhì)量,,而5.3 kb/s的速率在提供較好通話質(zhì)量的同時(shí),,也為系統(tǒng)設(shè)計(jì)者提供了更適合的靈活性[1]。
1 算法原理
G.723.1語(yǔ)音編碼算法按幀(Frame)對(duì)語(yǔ)音數(shù)據(jù)進(jìn)行壓縮和解壓縮,,每幀240個(gè)采樣點(diǎn),,壓縮傳遞的參數(shù)包括線性預(yù)測(cè)系數(shù)、自適應(yīng)碼本的延時(shí)和增益,、激勵(lì)脈沖位置,、符號(hào)及格點(diǎn)比特等。
首先進(jìn)行高通濾波,,去掉直流分量,;接著把一幀信號(hào)分成4個(gè)子幀,每個(gè)子幀60個(gè)采樣點(diǎn),,分別進(jìn)行10階線性預(yù)測(cè)分析(LPC),,得到各子幀的LPC參數(shù),把最后一個(gè)子幀的LPC參數(shù)轉(zhuǎn)化成線譜對(duì)(LSP)參數(shù)進(jìn)行矢量量化編碼,,送到解碼器,。利用未量化的LPC參數(shù)構(gòu)造短時(shí)感知加權(quán)濾波器,信號(hào)濾波后得到感覺(jué)加權(quán)的語(yǔ)音信號(hào),。每2個(gè)子幀(120樣點(diǎn))搜索一個(gè)開(kāi)環(huán)基音值,,并以此為依據(jù)為每一個(gè)子幀構(gòu)造一個(gè)諧波噪聲成形濾波器,對(duì)感知加權(quán)的語(yǔ)音信號(hào)進(jìn)行濾波,。每一子幀的LPC綜合濾波器,、感覺(jué)加權(quán)濾波器和諧波噪聲成形濾波器聯(lián)起來(lái),構(gòu)成一個(gè)聯(lián)合濾波器,,利用它的沖激響應(yīng)和開(kāi)環(huán)基音周期,,對(duì)每一子幀進(jìn)行閉環(huán)基音搜索,對(duì)開(kāi)環(huán)搜索的結(jié)果進(jìn)行修正,。同時(shí)通過(guò)一個(gè)五階基音預(yù)測(cè)器對(duì)信號(hào)進(jìn)行預(yù)測(cè),,得到相應(yīng)子幀的殘差信號(hào)。最后進(jìn)行固定碼本搜索,,也就是對(duì)每一子幀的殘差信號(hào)進(jìn)行矢量量化,,對(duì)應(yīng)兩種不同的編碼速率采用兩種不同的方法:編碼速率為6.3kb/s時(shí),采用多脈沖最大似然量化(MP-MLQ)的方法,,具有較高的重建語(yǔ)音質(zhì)量,;編碼速率為5.3kb/d時(shí),采用代數(shù)碼本激勵(lì)線性預(yù)測(cè)(ACELP)方法,。
算法的解碼也是按幀進(jìn)行,,主要對(duì)符合ITU-T G.723.1的碼流進(jìn)行解碼,得到相應(yīng)的參數(shù),,根據(jù)語(yǔ)音產(chǎn)生的機(jī)理,,合成語(yǔ)音信號(hào)。讀入一幀碼流后,,分別進(jìn)行LSP參數(shù),、基音周期和激勵(lì)脈沖信號(hào)解碼,對(duì)LSP參數(shù)插值,,然后轉(zhuǎn)化成各子幀的線性預(yù)測(cè)系數(shù),,構(gòu)成LPC綜合濾波器。通過(guò)基音周期和激勵(lì)脈沖得到每一子幀的殘差信號(hào),,經(jīng)過(guò)基音后濾波,,輸入到LPC綜合濾波器,產(chǎn)生合成語(yǔ)音信號(hào),。經(jīng)過(guò)共振峰后濾波和增益控制,,形成高質(zhì)量的重建語(yǔ)音信號(hào)。
2 算法實(shí)現(xiàn)
2.1 硬件設(shè)計(jì)
在選擇DSP芯片時(shí),,考慮了語(yǔ)音壓縮編碼算法的復(fù)雜度以及運(yùn)算量,,并對(duì)DPS芯片本身的運(yùn)算能力、存儲(chǔ)空間大小,、性能價(jià)格比,、開(kāi)發(fā)軟件的完整性等多方面進(jìn)行綜合比較,最終選用TIC54xx系列的定點(diǎn)運(yùn)算處理器TMS320C5416,,開(kāi)發(fā)平臺(tái)是TMS320C5416 DSK,。
TMS320C5416的單指令周期為6.25 ms,每秒執(zhí)行的指令數(shù)為160M,,使用了6級(jí)指令流水線結(jié)構(gòu),,這些都很適合G.723.1語(yǔ)音編碼算法的實(shí)現(xiàn)。采用一個(gè)40 bit ALU,、128K×16 bit片內(nèi)RAM(包括64 kB的片內(nèi)DARAM和64 KB的片內(nèi)SARAM),、3個(gè)獨(dú)立的16 bit數(shù)據(jù)內(nèi)存總線、1個(gè)程序內(nèi)存總線,、3個(gè)McBSP,、6信道DMA控制器、1個(gè)8/16 bit并行增強(qiáng)主機(jī)端口接口及2個(gè)16 bit計(jì)時(shí)器[2,,3],。
在DSK的基礎(chǔ)上,可以搭建出語(yǔ)音開(kāi)發(fā)硬件系統(tǒng)平臺(tái),如圖1所示,。
輸入語(yǔ)音信號(hào)由麥克風(fēng)輸入,,經(jīng)過(guò)立體聲音頻多媒體數(shù)字信號(hào)編碼芯片PCM3002 A/D轉(zhuǎn)換后成為數(shù)字信號(hào),接著送入DSP內(nèi)進(jìn)行編碼壓縮處理,。處理后的數(shù)據(jù)經(jīng)過(guò)解壓得到重建的語(yǔ)音信號(hào),,最后送入PCM3002 D/A轉(zhuǎn)換為模擬信號(hào),通過(guò)耳機(jī)或揚(yáng)聲器得以收聽(tīng)到,。
2.2 算法實(shí)現(xiàn)流程
根據(jù)G.723.1算法,,設(shè)計(jì)實(shí)現(xiàn)流程如圖2所示。
從流程圖中可以看到,,首先關(guān)閉中斷,、初始化DSP芯片和開(kāi)發(fā)平臺(tái);然后進(jìn)行程序運(yùn)行前的硬件配置,,主要是配置外設(shè),,打開(kāi)DMA和McBSP。配置結(jié)束后打開(kāi)中斷屏蔽控制寄存器,,等待中斷的到來(lái),。McBSP接收中斷發(fā)生時(shí),DMA接收PCM3002發(fā)來(lái)的數(shù)據(jù)并存入緩沖區(qū),,并判斷是否滿一幀240個(gè)數(shù)據(jù),。如果不滿幀,就直接等待下一次McBSP接收中斷,;如果滿一幀,,通過(guò)DMA通道3將240個(gè)語(yǔ)音數(shù)據(jù)復(fù)制到緩沖區(qū)BUFF1,同時(shí)置位新幀標(biāo)志位new_data,,然后對(duì)數(shù)據(jù)進(jìn)行編解碼處理,。整個(gè)編解碼結(jié)束后,將得到的一幀240個(gè)合成語(yǔ)音數(shù)據(jù)復(fù)制到緩沖區(qū)BUFF2中,,等待新幀標(biāo)志位重新置1后進(jìn)行下一幀的編解碼處理,。McBSP發(fā)送中斷時(shí),DMA把發(fā)送緩沖區(qū)的一個(gè)數(shù)據(jù)發(fā)送給PCM3002后,,判斷是否滿一幀,。如果不滿幀,就直接等到下一次McBSP發(fā)送中斷,;如果滿一幀,,即PCM3002接收到了240個(gè)數(shù)據(jù),則把BUFF2中新一幀240個(gè)合成語(yǔ)音數(shù)據(jù)復(fù)制到發(fā)送緩沖區(qū),,等待下一次McBSP發(fā)送中斷,。
2.3 DSP/BIOS的配置
將成功實(shí)現(xiàn)的算法移植到TI公司提供的TMS320C5416上,采用DSP/BIOS技術(shù)編程實(shí)現(xiàn)。DSP/BIOS配置工具主要是設(shè)置DSP/BIOS各個(gè)模塊的參數(shù)和創(chuàng)建API調(diào)用對(duì)象[4],。用DSP/BIOS配置工具,,對(duì)象可以被預(yù)先創(chuàng)建和設(shè)置,使用這種方法創(chuàng)建靜態(tài)對(duì)象,,不僅可以合理利用內(nèi)存空間,、減小代碼長(zhǎng)度,、優(yōu)化數(shù)據(jù)結(jié)構(gòu),,還有利于程序編譯前通過(guò)驗(yàn)證對(duì)象的屬性預(yù)先發(fā)現(xiàn)錯(cuò)誤。
3 程序優(yōu)化
實(shí)時(shí)實(shí)現(xiàn)語(yǔ)音信號(hào)的編解碼最基本的要求是編解一幀語(yǔ)音信號(hào)的時(shí)間要少于采集一幀語(yǔ)音信號(hào)的時(shí)間,,即要求G.723.1的一幀語(yǔ)音編解碼時(shí)間要少于30 ms,。對(duì)G.723.1標(biāo)準(zhǔn)算法進(jìn)行時(shí)間評(píng)估時(shí)發(fā)現(xiàn),一幀的運(yùn)算量大概需要49 M個(gè)時(shí)鐘周期,,約為300 ms,,這顯然無(wú)法在TMS320C5416 DSP上實(shí)時(shí)運(yùn)行。因此有必要從多方面進(jìn)行優(yōu)化,。
3.1 循環(huán)優(yōu)化
G.723.1實(shí)現(xiàn)中的很多運(yùn)算是在循環(huán)內(nèi)完成的,,在循環(huán)內(nèi)部特別是嵌套較深的循環(huán)內(nèi)部,減少一條指令可以大大降低程序的操作次數(shù),。固定碼本搜索中為了確定四個(gè)脈沖的位置和幅度,,用到了四重嵌套循環(huán),每重循環(huán)8次,,在最內(nèi)層循環(huán)減少一條指令,,整個(gè)程序就減少84=4 096條指令。因此在G.723.1的實(shí)現(xiàn)過(guò)程中,,盡量將內(nèi)層循環(huán)的指令搬移到外層,,外層循環(huán)的指令搬移到整個(gè)循環(huán)體外,從而縮短程序執(zhí)行時(shí)間,,滿足實(shí)時(shí)性的要求,。
此外,適當(dāng)選擇循環(huán)指令,,如RPT(重復(fù)下條指令),,RPTZ(累加器清零并重復(fù)下條指令)和RPTB(塊重復(fù)指令)等,也能縮短循環(huán)時(shí)間,。如RPT允許重復(fù)執(zhí)行緊隨其后的一條指令,,由于要重復(fù)的指令只需要取指一次,與利用跳轉(zhuǎn)指令BANZ進(jìn)行循環(huán)相比,,效率要高得多,。特別是對(duì)于乘累加和數(shù)據(jù)傳送多周期指令(MAC、MVDK 和MVPD等),在執(zhí)行一次之后就變成了單周期指令,,大大提高了執(zhí)行效率,。
3.2 使用內(nèi)聯(lián)函數(shù)
CCS提供的內(nèi)聯(lián)函數(shù)集中有一些常用的基本運(yùn)算函數(shù),如加,、飽和加,、減、飽和減,、長(zhǎng)數(shù)乘等,。這些函數(shù)可以很方便地被調(diào)用,就像調(diào)用C函數(shù)一樣,,只要在函數(shù)名前加一個(gè)“_”,,例如_L_SUB(a,b),。這些內(nèi)聯(lián)函數(shù)是用匯編語(yǔ)句編寫(xiě)的,,編譯時(shí)C編譯器將這些內(nèi)聯(lián)函數(shù)用對(duì)應(yīng)的匯編語(yǔ)句代替,所以執(zhí)行效率很高,。在程序的開(kāi)始部分頭文件中,,用#include“intrindefs.h”,代替#include“basic.h”,,就是把文件“basic.c”從工程中去掉,,從而實(shí)現(xiàn)對(duì)“basic.c”中許多基本運(yùn)算函數(shù)的優(yōu)化,提高了執(zhí)行效率,。
3.3 使用宏定義
在G.723.1標(biāo)準(zhǔn)的定點(diǎn)C程序中,,所有基本運(yùn)算都以調(diào)用子函數(shù)的形式執(zhí)行。這樣做對(duì)程序的規(guī)范化設(shè)計(jì)有好處,,同時(shí)也在很大程度上降低了程序的運(yùn)算效率,。將基本運(yùn)算由子函數(shù)調(diào)用改為宏定義可以去掉函數(shù)調(diào)用的開(kāi)銷,加快運(yùn)算速度,,程序的運(yùn)算效率明顯提高,。這種優(yōu)化方式會(huì)帶來(lái)代碼量的增大,但還是在芯片存儲(chǔ)空間的容許范圍內(nèi),。
3.4 合理使用流水線操作
C54芯片具有6級(jí)深度的流水線,,可以完成預(yù)取指、取指,、譯碼,、產(chǎn)生操作數(shù)地址、讀取操作數(shù)和執(zhí)行等6個(gè)操作,,這就出現(xiàn)了指令的重疊,。然而CPU總線,、寄存器資源是有限的,當(dāng)不同級(jí)別的流水線試圖利用同一條總線或訪問(wèn)同一資源時(shí),,就可能發(fā)生時(shí)序上的沖突,。如果流水線沖突,CPU自動(dòng)通過(guò)指令延遲的方法解決,,有些沖突指令延遲后可以避免,,有些則不能避免,需要在指令中間加入NOP空指令才能解決,。但這樣消耗了額外的時(shí)鐘周期,。重新安排指令順序有時(shí)可以避免沖突,提高程序執(zhí)行效率,,尤其是當(dāng)NOP指令在循環(huán)內(nèi)部時(shí),,可以節(jié)省不少的開(kāi)銷。分析程序編譯后生成的匯編語(yǔ)言程序,,觀察分析是否可以進(jìn)行優(yōu)化??梢杂脛?chuàng)建相關(guān)圖,,重新分配運(yùn)算單元和寄存器、創(chuàng)建排序表重新調(diào)整指令順序等方法去掉NOP指令,,同時(shí)避免流水線沖突,。
3.5 優(yōu)化效果
G.723.1語(yǔ)音編解碼程序經(jīng)過(guò)優(yōu)化保證了該算法在DSP中的實(shí)時(shí)實(shí)現(xiàn)。G.723.1協(xié)議幀長(zhǎng)30 ms,,另外有7.5 ms的前瞻,,故總幀長(zhǎng)為37.5 ms。在硬件仿真模式下對(duì)整個(gè)程序運(yùn)行進(jìn)行測(cè)試,,結(jié)果表明,,一幀語(yǔ)音信號(hào)的編解碼在5.3 kb/s模式下需要3 402 338 clocks,約20.3 ms,;在6.3 kb/s模式下需要5 134 901 clocks,,約22.83 ms,均低于算法要求的30 ms,,在TMS320VC5416上最終完成了G.723.1標(biāo)準(zhǔn)的實(shí)時(shí)實(shí)現(xiàn),。其中各主要模塊和主要代碼段在優(yōu)化前后占用周期和空間的對(duì)比分別如表1和表2所示。
信噪比是衡量語(yǔ)音編解碼質(zhì)量的客觀標(biāo)準(zhǔn),,計(jì)算時(shí)常用長(zhǎng)時(shí)信噪比和短時(shí)(分段)信噪比兩種準(zhǔn)則,。短時(shí)(分段)信噪比采用分段(通常是10 ms~30 ms)的方法來(lái)分別計(jì)算每一段語(yǔ)音信號(hào)的信噪比,因此很適合反映量化器對(duì)不同電平輸入段的量化質(zhì)量,。本文采用短時(shí)(分段)信噪比作為衡量標(biāo)準(zhǔn),。
設(shè)每段有N個(gè)語(yǔ)音采樣點(diǎn),,則第m段的分段信噪比定義為:
x(n)是原始信號(hào),y(n)是輸出信號(hào),,N是幀長(zhǎng),,M是幀的總數(shù)。
本文對(duì)G.723.1標(biāo)準(zhǔn)進(jìn)行測(cè)試,,就圖3所示語(yǔ)音信號(hào)計(jì)算其短時(shí)信噪比,。圖中總幀數(shù)150幀,幀長(zhǎng)為240個(gè)采樣點(diǎn),,按照上式計(jì)算SNR=13.56dB,。因此可知G.723.1有較高的短時(shí)信噪比,語(yǔ)音編解碼質(zhì)量較好,,得到的語(yǔ)音信號(hào)比較清晰,。
參考文獻(xiàn)
[1] ITU-T.ITU-T Recommendation G.723.1 dual rate speech coder multimedia communications transmitting at 5.3 and 6.3 Kb/s[S].2006,5.
[2] Texas Instruments.TMS320VC5416 DSK technical reference[R].2002.
[3] Texas Instruments.TMS320VC5416 fixed-point digital signal processor data manual[R].2004.
[4] Texas Instruments.TMS320C54x DSP/BIOS application oro-gramming interface(API) reference guide[R].SPRU404g,,2004.
[5] 彭啟琮,,管慶.DSP集成開(kāi)發(fā)環(huán)境-CCS及DSP/BIOS的原理與應(yīng)用[M].北京:電子工業(yè)出版社,2004.
[6] 趙力.語(yǔ)音信號(hào)處理[M].北京:機(jī)械工業(yè)出版社,,2003,,4.
[7] 韓紀(jì)慶.語(yǔ)音信號(hào)處理[M].北京:清華大學(xué)出版社,2004.
[8] 黃永峰.因特網(wǎng)語(yǔ)音通信技術(shù)及其應(yīng)用[M].北京:人民郵電出版社,,2002.