《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > 用TMS320C6201實(shí)現(xiàn)多路ITU-T G.728語音編碼標(biāo)準(zhǔn)

用TMS320C6201實(shí)現(xiàn)多路ITU-T G.728語音編碼標(biāo)準(zhǔn)

2009-07-27
作者:楊曉萍 湯家駿 陳 健

  摘 要: ITU-T G.728標(biāo)準(zhǔn)是國際電信聯(lián)盟于1992年制定的比特率為16kbit/s的低延時(shí)CELP類語音編碼器。在扼要介紹G.728編解碼算法原理和TMS320C6201定點(diǎn)DSP芯片的基礎(chǔ)上,,詳細(xì)討論了G.728算法在TMS320C6201上實(shí)時(shí)實(shí)現(xiàn)的硬件設(shè)計(jì)和軟件開發(fā)及優(yōu)化的關(guān)鍵技術(shù),。實(shí)驗(yàn)結(jié)果表明,單片C6201能實(shí)現(xiàn)至少4路G.728語音編解碼,。
  關(guān)鍵詞: 語音編碼 ITU標(biāo)準(zhǔn) DSP


  隨著數(shù)字語音壓縮技術(shù)的應(yīng)用領(lǐng)域越來越廣,,將高質(zhì)量語音編碼算法實(shí)用化的需求也越來越迫切。16kbit/s LD-CELP ITU-T G.728語音編碼標(biāo)準(zhǔn),,采用后向自適應(yīng)技術(shù),,單向編碼延遲小于2ms,主觀評價(jià)MOS分4.0,,達(dá)到進(jìn)入公眾通信網(wǎng)的需求,,因而廣泛適用于數(shù)字衛(wèi)星系統(tǒng)、數(shù)字線路倍增設(shè)備(DCME),、綜合業(yè)務(wù)數(shù)字網(wǎng)(ISDN),、公共交換電話網(wǎng)(PSTN)、話音存儲轉(zhuǎn)發(fā)系統(tǒng)等,。但其算法復(fù)雜度高,,運(yùn)算量龐大,定點(diǎn)實(shí)現(xiàn)時(shí),,一路全雙工約需30~40MIPS,。一般通用的數(shù)字信號處理器(DSP),只能做到一片DSP實(shí)現(xiàn)一路G.728語音編解碼,。
  TMS320C6201是TI公司最新推出的C6X數(shù)字信號處理芯片系列中具代表性的定點(diǎn)處理芯片,。由于內(nèi)部含有具備超長指令字(VLIW)處理能力的CPU和8個(gè)功能單元,故它可在一個(gè)時(shí)鐘周期內(nèi)執(zhí)行多達(dá)8條指令。此外,,1M位的片內(nèi)RAM,、可擴(kuò)展的外部RAM接口和靈活的外圍設(shè)備使其成為實(shí)現(xiàn)具有高速運(yùn)算的復(fù)雜處理系統(tǒng)的首選芯片。
  本文研究了在單片TMS320C6201芯片上實(shí)時(shí)實(shí)現(xiàn)ITU-T G.728語音編碼標(biāo)準(zhǔn),,實(shí)驗(yàn)結(jié)果表明,,單片TMS320C6201能實(shí)現(xiàn)至少4路語音編解碼。這對于擴(kuò)展基于G.728標(biāo)準(zhǔn)的單路處理系統(tǒng)的功能或降低基于G.728標(biāo)準(zhǔn)的多路處理系統(tǒng)的系統(tǒng)復(fù)雜度都具有現(xiàn)實(shí)的意義,。
  文中將扼要介紹G.728編解碼算法和TMS320C6201芯片,,并詳細(xì)討論G.728算法在TMS320C6201上的實(shí)時(shí)實(shí)現(xiàn),最后給出結(jié)論,。
1 G.728語音編解碼原理簡介
  圖1給出了G.728語音編解碼器的原理框圖,。


  編碼器中五個(gè)連續(xù)語音樣點(diǎn)形成一個(gè)5維語音矢量。激勵(lì)碼本中共有1024個(gè)5維的碼矢量,,對于每個(gè)輸入語音矢量,,編碼器利用合成分析法從碼本中搜索出最佳碼矢,然后將其標(biāo)號選出,,LP系數(shù)和增益均由后向自適應(yīng)提取和更新,。
  解碼操作也是逐個(gè)矢量地進(jìn)行。根據(jù)接收到的碼本標(biāo)號,,從激勵(lì)碼本中找到相應(yīng)的激勵(lì)矢量,,經(jīng)過增益調(diào)整后得到激勵(lì)信號,將其輸入綜合濾波器合成語音信號,,再經(jīng)自適應(yīng)后濾波處理,,以增強(qiáng)語音的主觀感覺質(zhì)量。
  由于編碼器只緩沖5個(gè)樣點(diǎn)(一個(gè)語音矢量),,在8kHz的采樣率下,算法延遲只有0.625ms,,加上處理延遲和傳輸延遲,,故總的單向編碼延遲小于2ms。采用后向自適應(yīng)技術(shù),,預(yù)測器參數(shù)在解碼端通過LP分析恢復(fù),,不再作為傳輸內(nèi)容,編解碼器間僅需傳送最佳碼矢的索引值,,故碼率為10bit/0.625ms=16kbit/s,。
2 TMS320C6201定點(diǎn)數(shù)字信號處理芯片簡介
  TMS320C6201是美國德州儀器公司(TI)最新推出的含多處理單元的C6X數(shù)字信號處理芯片中具有代表性的定點(diǎn)芯片。VLIW結(jié)構(gòu)提供的高輸出量,、高效開發(fā)工具保證的易用性,、以及可接受的價(jià)格,使得TMS320C6201成為高速運(yùn)算的理想選擇,。以下從硬件結(jié)構(gòu)和軟件資源兩方面,,簡要介紹TMS320C6201芯片,。
2.1 C6201的硬件結(jié)構(gòu)
2.1.1 CPU

  采用了VelociTI的VLIW結(jié)構(gòu),因而在每個(gè)時(shí)鐘周期內(nèi)最多可并行執(zhí)行八條32位寬(一個(gè)字長)的指令,,在200MHz的主頻下可以得到1600MIPS的高處理速度,。CPU中包括了兩套對稱的運(yùn)算單元(L,S,,M,,D)和相應(yīng)的兩套寄存器組,每組有16個(gè)32位寬的寄存器,。
2.1.2 存儲空間
  C6201的地址總線為32位,,尋址范圍達(dá)到4GB。存儲空間可分為四部分:片內(nèi)程序空間,、片內(nèi)數(shù)據(jù)空間,、外部存儲空間和內(nèi)部外圍設(shè)備空間,可通過對五個(gè)BOOTMODE引腳的靈活設(shè)置設(shè)定各空間的地址范圍,。片內(nèi)數(shù)據(jù)空間分成四個(gè)8K×16的交織塊,,使得CPU可同時(shí)訪問數(shù)據(jù)RAM的兩個(gè)塊而不會發(fā)生沖突。片內(nèi)程序空間可設(shè)為Cache ,,存儲經(jīng)常使用的代碼,,減少片外訪問次數(shù),從而提高程序運(yùn)行速度,。
2.1.3 外設(shè)
  C6201的外圍設(shè)備包括DMA控制器,、主機(jī)接口(HPI)、中斷選擇等,。兩個(gè)多通道緩存串行口(McBSP),,除多通道、雙緩存外,,還支持多種數(shù)據(jù)格式,、硬件A/μ率壓擴(kuò)、位時(shí)鐘和幀時(shí)鐘的靈活編程,。
2.2 C6201的軟件資源
2.2.1 豐富的指令

  C6201的指令集共有五十余條指令,,大部分是單周期的,可完成數(shù)據(jù)傳輸,、算術(shù)邏輯運(yùn)算和程序控制等功能,。指令支持8/16/32位數(shù)據(jù)存取,給不同結(jié)構(gòu)的數(shù)據(jù)操作帶來方便,。由于多處理單元的采用,,在無資源沖突下,C6201最多可并行執(zhí)行8條基本指令。
2.2.2 流水線操作
  流水線操作和超長指令字是C6201的高性能特點(diǎn),。其指令執(zhí)行可分為四個(gè)步驟:取指(Fetch),、指令拆裝(Dispatch)、譯碼(Decode),、執(zhí)行(Execute),。流水線操作即指以上四個(gè)步驟的并行操作。由于引入了多單元結(jié)構(gòu)和超長指令字,,所以和常見的數(shù)字處理芯片相比,,多了一個(gè)指令拆裝的過程。
2.2.3 靈活的尋址方式
  C6201支持多種尋址方式,,如寄存器尋址,、直接尋址、短立即數(shù)尋址,、長立即數(shù)尋址和相對尋址,。此外,它還提供循環(huán)尋址方式,,適用于相關(guān)和卷積運(yùn)算中的存儲器尋址,。
3 G.728在TMS320C6201上的實(shí)時(shí)實(shí)現(xiàn)
3.1 硬件結(jié)構(gòu)

  由上面介紹的TMS320C6201的結(jié)構(gòu)特點(diǎn)可見,以C6201為核心器件,,輔以相應(yīng)的輸入輸出電路,,可完成對單路語音信號的實(shí)時(shí)編解碼工作,同時(shí)具備多路(如T1/E1一次群)語音信號的輸入輸出接口,。
  本文應(yīng)用了TI公司的TMS320C6201EVM板,。板上配有單片TMS320C6201和與串口McBSP0連接的16位A/D芯片CS4231。EVM板通過ISA總線與PC機(jī)相連,,啟動時(shí)由PC機(jī)將程序裝載入C6201的片內(nèi)存儲空間,,在C6201全速運(yùn)行時(shí),PC機(jī)可以查詢其運(yùn)行狀態(tài),,讀取壓縮后的G.728碼流,,或送入待解碼的G.728碼流。串口0接CS4231,,用于接收和發(fā)送模擬信號;串口1用于接收和發(fā)送已壓縮的G.728碼流,,因此系統(tǒng)可仿真實(shí)現(xiàn)單路G.728語音編解碼,。通過進(jìn)一步對算法復(fù)雜度的分析,可判斷多路G.728編解碼的實(shí)現(xiàn)能力,。
3.2 軟件開發(fā)
  編解碼軟件采用定點(diǎn)算法,,用標(biāo)準(zhǔn)ANSIC語言和TMS320C6201匯編語言混合編制完成。軟件包括主處理程序和中斷服務(wù)程序,流程圖如圖2所示,。


  在編程中,,需注意以下幾點(diǎn):
  (1)雙緩沖區(qū)的運(yùn)用
  為實(shí)時(shí)處理輸入語音和合成語音,避免數(shù)據(jù)覆蓋,,必須設(shè)置兩個(gè)雙緩沖區(qū),。對編碼過程而言,當(dāng)串口將語音信號寫入輸入緩沖區(qū)A時(shí),,編碼器處理輸入緩沖區(qū)B中已存儲的5個(gè)語音樣點(diǎn),;同理,對解碼過程,,當(dāng)串口送出輸出緩沖區(qū)A’中合成語音時(shí),,解碼器的輸出結(jié)果寫入緩沖區(qū)B’。在中斷程序中,,計(jì)數(shù)判斷何時(shí)切換相應(yīng)緩沖區(qū),。
  (2)數(shù)據(jù)精度的處理
  C6201是定點(diǎn)DSP芯片,為確保運(yùn)算精度和防止數(shù)據(jù)溢出,,在實(shí)現(xiàn)時(shí)主要采用了兩種方法:一是對某些精度要求較高的運(yùn)算,,將計(jì)算的中間變量采用32位來表示;二是對于幅度范圍變化比較大的變量或數(shù)組,,如激勵(lì)增益,、50階杜賓算法的自相關(guān)數(shù)組等,采用標(biāo)量浮點(diǎn)或塊浮點(diǎn)表示,,用一個(gè)字存儲使該數(shù)或數(shù)組歸一化所需的左移位數(shù)(NLS),,其余字存儲歸一化后的尾數(shù)。
  (3)存儲空間的分配
  C6201 1M位的片內(nèi)存儲區(qū)包括64Kbyte程序空間和64Kbyte數(shù)據(jù)空間,,足夠單路G.728編解碼算法的使用,。但若應(yīng)用于多路語音處理,則需謹(jǐn)慎分配存儲空間,。由于編解碼程序,、常數(shù)表格等均可公用,多路應(yīng)用主要考慮數(shù)據(jù)空間的使用,。對臨時(shí)變量,、數(shù)組等采用公共域(UNION)分時(shí)存儲技術(shù),能有效提高存儲空間的利用率,,確保全部數(shù)據(jù)都在片內(nèi)處理,。
  (4)計(jì)算量的均衡
  C6201的高速運(yùn)算能力,使實(shí)現(xiàn)G.728編解碼算法不再需要考慮運(yùn)算量的均衡,。但若考慮到與其它實(shí)時(shí)性要求高的控制處理模塊協(xié)調(diào)工作,,則仍需按標(biāo)準(zhǔn)中介紹的方法均衡運(yùn)算量,。
3.3 軟件優(yōu)化
  TMS320C6201的代碼開發(fā)流程與傳統(tǒng)DSP截然不同,它是一個(gè)不斷調(diào)整C代碼與線性匯編代碼比例的過程,,力求在性能與開發(fā)周期上尋得最佳平衡點(diǎn),。代碼開發(fā)有三步:
  第一步,在通用的C平臺上開發(fā)ANSIC代碼,,調(diào)試通過后不做任何變化地移植到C6201開發(fā)平臺上,,由C編譯器完成所有的優(yōu)化。利用測試工具判斷代碼性能是否達(dá)到要求,,從而決定是否需要后續(xù)的優(yōu)化步驟,。這一階段,開發(fā)者不需要對DSP有所了解,,開發(fā)容易,,但C編譯器優(yōu)化后的代碼并行性差,未能充分利用C6201獨(dú)特的硬件結(jié)構(gòu)和軟件資源,,運(yùn)行效率低,。
  第二步,優(yōu)化C代碼,。在此階段,,開發(fā)者應(yīng)該根據(jù)C6201的特點(diǎn),如充分利用數(shù)據(jù)寬度,、使用內(nèi)在函數(shù)等,,對C代碼加以改進(jìn)。這一階段要求開發(fā)者了解C6201DSP并掌握常用的技巧,。經(jīng)過此步優(yōu)化后,,代碼的效率將大幅度提高。
  第三步,,編寫線性匯編代碼,。當(dāng)上一步的優(yōu)化仍不能滿足要求時(shí),就必須把那些對效率影響重大的模塊抽取出來,,改由線性匯編語言實(shí)現(xiàn),。在這一階段,編程者一定要對C6201DSP有深入的了解并具備一定的編程經(jīng)驗(yàn),,才能較好地解決諸如資源分配,、消除數(shù)據(jù)的關(guān)聯(lián)性等關(guān)鍵問題。此步優(yōu)化難度較大,,但運(yùn)用于核心模塊,,能顯著提高代碼的并行性。
  在TMS320C6201優(yōu)化G.728代碼過程中,,主要應(yīng)用了以下技巧:
  (1)資源分配的技巧
  C6201的8個(gè)功能單元能并行處理,,因此在一個(gè)算法中用得最多的那個(gè)運(yùn)算單元會構(gòu)成瓶頸。最常發(fā)生的是內(nèi)存訪問瓶頸,,循環(huán)展開是有效的解決方法,。充分利用數(shù)據(jù)寬度,將半字(16bit)訪問改用字(32bit)訪問就是簡單而又有效的循環(huán)展開技術(shù),。
  循環(huán)展開是提高資源利用率的主要方法,,但它所引起的代碼空間膨脹也是驚人的。在編程時(shí),,必須在程序空間和程序速度這一對矛盾中作出合適的折衷,。
  (2) 數(shù)據(jù)關(guān)聯(lián)性簡化的技巧
  數(shù)據(jù)關(guān)聯(lián)性是并行編程中的最大障礙,有兩種典型情況:
 ?、?存在循環(huán)反饋路徑
  此種路徑常見于遞歸算法中,。當(dāng)下一次的循環(huán)中必須讀取上一次循環(huán)中產(chǎn)生的數(shù)據(jù),就形成了一條循環(huán)反饋路徑,。由于反饋路徑不可能消除,,唯一的方法是盡量縮短它,減少不可并行的操作,。
 ?、?生存期過長
  當(dāng)變量生存期過長時(shí),軟件流水化會導(dǎo)致誤操作,。有兩種解決方法:一是循環(huán)展開,,因?yàn)檠h(huán)展開會增加循環(huán)核心周期數(shù);二是用MV指令增加一個(gè)中間變量,,使原變量的生存期由兩個(gè)變量共同承擔(dān),。
  (3) 解決存儲空間沖突的技巧
  此沖突是引起C6201執(zhí)行速度急劇下降的主要原因,但在編程時(shí)卻很容易被忽略,。前面介紹的C6201的存儲區(qū)結(jié)構(gòu),,64Kbyte的片內(nèi)數(shù)據(jù)空間分成四塊,每一塊在每個(gè)周期只能被訪問一次,,否則就會產(chǎn)生存儲空間沖突,。執(zhí)行時(shí),流水線會自動暫停一個(gè)周期,。
  在調(diào)試,、優(yōu)化程序的過程中,隨時(shí)觀察有無流水線沖突,,通過調(diào)整存儲空間分配,,可基本解決這一問題。
3.4 實(shí)驗(yàn)結(jié)果
  表1給出了G.728編解碼算法實(shí)時(shí)實(shí)現(xiàn)時(shí)所需的計(jì)算量和內(nèi)存占用狀況,。在200MHz主頻下,,TMS320C6201芯片處理能力為200MCPS(Million Cycle per Second),,在最充分發(fā)揮并行潛力時(shí),可達(dá)到1600MCPS(200×8=1600),。由表中可見,,G.728算法實(shí)現(xiàn)編碼需24.4MCPS,解碼需14.3MCPS,,程序空間和數(shù)據(jù)空間分別占用55.8Kbyte和11.4Kbyte,,故單片C6201可實(shí)現(xiàn)四路G.728語音編解碼。


  對編解碼器還進(jìn)行了實(shí)時(shí)處理語音性能的實(shí)驗(yàn),。以男生,、女生、音樂等多種音源輸入的實(shí)驗(yàn)表明,,系統(tǒng)具有良好的適應(yīng)性,。非正式試聽測試,恢復(fù)語音保留了較好的講話人特征,,具有較高的自然度和可懂度,。
  ITU-T G.728標(biāo)準(zhǔn)在較低碼率下實(shí)現(xiàn)了低延時(shí)、高質(zhì)量的語音編解碼,,在公眾通信網(wǎng)中有著廣泛的應(yīng)用,。本文在新型TMS320C6201定點(diǎn)DSP芯片上設(shè)計(jì)了基于G.728的實(shí)時(shí)語音編解碼系統(tǒng)。由于充分發(fā)揮了C6201強(qiáng)大的運(yùn)算能力和系統(tǒng)接口能力,,系統(tǒng)構(gòu)造簡單,,運(yùn)行效率高,單片C6201至少能實(shí)現(xiàn)四路G.728語音編解碼,。
參考文獻(xiàn)
1 Coding of Speech at 16 kbit/s Using Low-Delay Code Excited Linear Prediction. CCITT Rec.G.728.1992
2 胡劍凌,,陳 健.TMS320C54X實(shí)現(xiàn)ITU G.728語音編碼標(biāo)準(zhǔn).數(shù)據(jù)采集與處理,1999(3):343~346
3 TMS320C6000 CPU and Instruction Set Reference Guide.Texas instrument,1999
4 TMS320C6000 Optimizing C Compiler.Texas Instrument,1999
5 TMS320C6000 Programmer's Guide.Texas Instrument,1999
6 TMS320C6201/6701 Evaluation Module User's Guide.Texas Instrument,1998

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。