新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于TMS320VC5416的自適應(yīng)變速率聲碼器

基于TMS320VC5416的自適應(yīng)變速率聲碼器

作者: 時(shí)間:2007-03-09 來源:網(wǎng)絡(luò) 收藏
摘要:利用TMS320VC5416實(shí)現(xiàn)的一種高質(zhì)量自適應(yīng)變速率聲碼器。系統(tǒng)整體結(jié)構(gòu)和工作流程,著重介紹了硬件接口方式以及實(shí)現(xiàn)自適應(yīng)變速率的獨(dú)特方法,并介紹了從片外FLASH上電加載大數(shù)據(jù)量程序的實(shí)現(xiàn)方法,最后統(tǒng)計(jì)出了整個(gè)算法對(duì)硬件資源的占用情況。 關(guān)鍵詞:TMS320VC5416 聲碼器 變速率 自適應(yīng) 在當(dāng)前的各種通信系統(tǒng)中,實(shí)時(shí)的語(yǔ)音編解碼通常都在器(DSP)上實(shí)現(xiàn)。TI公司生產(chǎn)的C54系列DSP具有高性能、低功耗的特點(diǎn),許多語(yǔ)音編解碼算法都可以在它上面實(shí)現(xiàn)。但傳統(tǒng)的語(yǔ)音編解碼算法都是固定速率的,它們無法適應(yīng)不斷變化的網(wǎng)絡(luò)情況和滿足質(zhì)量要求,缺乏靈活性。而且,一般的單速率語(yǔ)音編解碼算法的程序量大都在30KWord以下,運(yùn)算量也大都在30MIPS以下。TI公司新近推出的TMS320VC5416芯片擁有128KWord的片上RAM空間和160MIPS的運(yùn)算能力,只承載單一速率的語(yǔ)音編解碼算法顯然是一種極大的浪費(fèi)。清華大學(xué)自主開發(fā)的正弦激勵(lì)線性預(yù)測(cè)(SELP)系列低速率語(yǔ)音編碼算法由于采用了合理的激勵(lì)模型,在2.4kbps、1.2kbps和0.6kbps三個(gè)速率上都具有很好的重建語(yǔ)音質(zhì)量。其中,2.4kbps速率算法的重建語(yǔ)音質(zhì)量與國(guó)際上流行的相同速率的高質(zhì)量AMBE算法相當(dāng),0.6kbps算法重建語(yǔ)音的可懂度也能達(dá)到90%以上,十分適合應(yīng)用在各種軍用語(yǔ)音通信系統(tǒng)中。 本文詳細(xì)介紹了利用TMS320VC5416 DSP實(shí)現(xiàn)的自適應(yīng)變速率SELP聲碼器。該聲碼器可根據(jù)不同的速率要求自動(dòng)實(shí)時(shí)地切換到不同速率的算法進(jìn)行語(yǔ)音通信,具有很好的通用性和靈活性。1 聲碼器系統(tǒng)的結(jié)構(gòu)和原理 聲碼器通信系統(tǒng)是建立在通用的MODEM平臺(tái)上的,可以按照2.4kbps、1.2kbps和0.6kbps中的任一個(gè)速率實(shí)現(xiàn)全雙工語(yǔ)音通信。圖1為整個(gè)通信系統(tǒng)的原理框圖。 MODEM平臺(tái)負(fù)責(zé)對(duì)數(shù)字碼流進(jìn)行調(diào)制解調(diào)和通信,聲碼器則負(fù)責(zé)按照MODEM的要求對(duì)語(yǔ)音進(jìn)行編解碼。MODEM把話筒提供的模擬語(yǔ)音送給聲碼器編碼并將聲碼器的解碼語(yǔ)音送給聽筒。MODEM還負(fù)責(zé)給聲碼器提供碼流傳送時(shí)鐘,聲碼器則按照這個(gè)時(shí)鐘與MODEM交換數(shù)字碼流。另外,MODEM和聲碼器之間還有一些控制信號(hào)線用來彼此交換狀態(tài)信息。表1是MODEM和聲碼器之間的主要接口關(guān)系。表1 MODEM和聲碼器的主要接口 名 字方 向功 能 AinMODEM至聲碼器模擬語(yǔ)音輸入Aout聲碼器至MODEM模擬語(yǔ)音輸出CLKMODEM至聲碼器碼流傳送時(shí)鐘,聲碼器按照CLK的頻率進(jìn)行編解碼TXD聲碼器至MODEM聲碼器至MODEM的數(shù)據(jù)線,在CLK的下降沿有效RXDMODEM至聲碼器MODEM至聲碼器的數(shù)據(jù)線,在CLK的上升沿有效PTTMODEM至聲碼器PCM碼有效標(biāo)志RTS聲碼器至MODEM發(fā)送碼流有效標(biāo)志CDMODEM至聲碼器接收碼流有效標(biāo)志雖然MODEM可以根據(jù)網(wǎng)絡(luò)條件和外界要求自動(dòng)改變速率,但是卻沒有專門的信號(hào)線用來通知聲碼器進(jìn)行速率轉(zhuǎn)換。注意到碼流傳送時(shí)鐘CLK是根據(jù)速率要求實(shí)時(shí)變化的,所以聲碼器通過檢測(cè)CLK的頻率就可以得到當(dāng)前的速率轉(zhuǎn)換信息。 聲碼器的核心部分是一片TMS320VC5416 DSP芯片,負(fù)責(zé)編解碼和控制工作。另外,還有一片TI公司生產(chǎn)的TLC320AIC10芯片,負(fù)責(zé)語(yǔ)音的數(shù)模/模數(shù)(AD/DA)轉(zhuǎn)換;一片FPGA,負(fù)責(zé)數(shù)字邏輯轉(zhuǎn)換;一片2Mbit容量的8位FLASH存儲(chǔ)器29LV020,負(fù)責(zé)存儲(chǔ)所有程序和數(shù)據(jù)并在上電時(shí)加載到DSP的片內(nèi)RAM上。聲碼器還有一個(gè)軟件狗對(duì)系統(tǒng)工作狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)控,并在需要時(shí)對(duì)整個(gè)聲碼器進(jìn)行復(fù)位。圖2是聲碼器的原理框圖。 當(dāng)MODEM需要聲碼器進(jìn)行編碼時(shí),它通過PTT信號(hào)通知聲碼器,并同時(shí)向聲碼器發(fā)送模擬語(yǔ)音信號(hào)。聲碼器利用其中的AD/DA芯片將其采樣量化為PCM數(shù)字信號(hào)送給DSP,DSP則根據(jù)MODEM提供的時(shí)鐘信號(hào)CLK的頻率選擇不同速率的編碼算法對(duì)輸入PCM信號(hào)進(jìn)行編碼,然后把碼流通過TXD送回給MODEM,并同時(shí)通過RTS信號(hào)通知MODEM碼流有效,MODEM就可以將碼流進(jìn)行調(diào)制并發(fā)送。接收時(shí),也是由MODEM解調(diào)出碼流后按照CLK的頻率通過RXD發(fā)給聲碼器,并同時(shí)通過CD信號(hào)通知聲碼器碼流有效,聲碼器則對(duì)接收的碼流進(jìn)行解碼,并利用AD/DA將解碼后的PCM語(yǔ)音轉(zhuǎn)換為模擬語(yǔ)音信號(hào)送回MODEM。據(jù)此就可以設(shè)計(jì)出聲碼器的工作流程,如圖3所示。 其中的幀同步捕捉指的是對(duì)接收到的碼流的分幀工作,因?yàn)椋樱牛蹋惺腔趲Y(jié)構(gòu)的編解碼算法,所以在解碼之前需要先利用幀同步算法捕捉到每幀的起始位置。這里采用的是基于計(jì)數(shù)器的幀同步捕捉算法。 另外,由于聲碼器的碼流收發(fā)都是按照CLK頻率連續(xù)進(jìn)行的,而基于幀結(jié)構(gòu)的SELP編解碼器對(duì)碼流的輸入輸出卻是每幀進(jìn)行一次的,所以對(duì)于發(fā)送和接收碼流都需要設(shè)置循環(huán)緩沖區(qū)并對(duì)每個(gè)緩沖區(qū)設(shè)置一讀一寫兩個(gè)指針。這兩個(gè)指針間的距離應(yīng)大于一倍幀長(zhǎng)。但由于聲碼器中給AD/DA提供采樣時(shí)鐘的晶振有一定誤差,所以導(dǎo)致這兩個(gè)指針移動(dòng)速度不同。以輸入碼流緩沖區(qū)為例,其讀指針應(yīng)由SELP編碼器控制,而編碼器被調(diào)用的頻率由本地晶振的頻率決定,所以讀指針的移動(dòng)速度由本地晶振控制。寫指針則是由碼流輸入部分控制,其移動(dòng)速度實(shí)際上是由對(duì)方的解碼速度決定的,也就是受對(duì)方聲碼器的晶振控制。所以在編碼后和解碼前都需要進(jìn)行指針調(diào)整,也就是檢查碼流緩沖區(qū)的讀寫指針間距,并根據(jù)需要丟棄一幀或復(fù)制一幀。 聲碼器設(shè)計(jì)和實(shí)現(xiàn)中的主要難點(diǎn)在于硬件接口的設(shè)計(jì)和FLASH上電加載部分,下面分別進(jìn)行介紹。 2 硬件接口的設(shè)計(jì) TMS320VC5416片上有三個(gè)多通道緩沖串口(MCBSP),每個(gè)MCBSP都可以作為串口使用或被初始化成通用I/O口使用。其中,MCBSP0按照串口的工作方式與AD/DA相連,這部分比較簡(jiǎn)單,按照典型的連接方式即可實(shí)現(xiàn)。但是碼流收發(fā)部分則不同,因?yàn)檫@部分只有一根同步時(shí)鐘線CLK和輸入輸出兩根數(shù)據(jù)線,所以很難直接利用MCBSP按串口方式實(shí)現(xiàn)收發(fā)。于是把MCBSP1初始化成通用I/O,將RXD與I/O口輸入腳DR1相連,TXD與I/O口的輸出腳DX1相連,將CLK與初始化為I/O口的輸入腳FSR1相連。這樣在程序中就可以很方便地隨時(shí)讀寫這三根信號(hào)線,再將時(shí)鐘中斷的頻率設(shè)為50kHz(遠(yuǎn)高于CLK可能出現(xiàn)的最高頻率2.4kHz),就可以在時(shí)鐘中斷中實(shí)時(shí)監(jiān)測(cè)CLK的變化。若發(fā)現(xiàn)CLK的上升沿則讀取RXD的狀態(tài)并存入碼流接收緩沖區(qū),若發(fā)現(xiàn)CLK的下降沿則從碼流發(fā)送緩沖區(qū)取出1bit送至TXD。這樣就成功地實(shí)現(xiàn)了碼流的收發(fā)。 MCBSP1被初始化為通用I/O后一共能提供6根I/O引腳線,除去碼流收發(fā)占用的3根之外還有3根,正好可以用來連接PTT、RTS和CD信號(hào)線。這樣,就可以在占用最少的DSP資源的情況下實(shí)現(xiàn)碼流收發(fā)和控制功能。 另一個(gè)主要問題就是速率的自適應(yīng)問題,也就是說,聲碼器必須能夠根據(jù)CLK的頻率自動(dòng)選擇合適的編解碼算法。在上述連接方式下,這個(gè)問題也就很容易解決了,只需設(shè)立一個(gè)計(jì)數(shù)器,對(duì)CLK的每個(gè)周期中發(fā)生的時(shí)鐘中斷個(gè)數(shù)進(jìn)行計(jì)數(shù)即可。這樣,根據(jù)計(jì)數(shù)值就可以很方便地計(jì)算出CLK的頻率。例如,時(shí)鐘中斷的頻率是50kHz,那么當(dāng)CLK的頻率是2.4kHz時(shí),計(jì)數(shù)器的值就應(yīng)該在50/2.4=20.8左右,當(dāng)CLK的頻率是1.2kHz時(shí),則在41.7左右;當(dāng)CLK的頻率是0.6kHz時(shí),則在83.3左右。從圖2的流程中可以看出,在程序初始化前就需要檢測(cè)CLK頻率,并根據(jù)CLK的頻率選擇合適的編解碼算法,進(jìn)行相應(yīng)的初始化。在程序的執(zhí)行過程中也要對(duì)CLK的頻率進(jìn)行實(shí)時(shí)監(jiān)測(cè),若發(fā)現(xiàn)頻率改變就立即重新初始化聲碼器。這樣就能夠保證聲碼器實(shí)時(shí)地跟蹤CLK的變化,實(shí)現(xiàn)自適應(yīng)速率切換。 對(duì)于軟件狗所需的周期變化信號(hào),則通過DSP上的輸出引腳XF給出,并在程序中及時(shí)翻轉(zhuǎn)XF的電平得到。 3 上電加載部分(Bootload)的實(shí)現(xiàn) TMS320VC5416 DSP片內(nèi)ROM中有固化的自加載程序(Bootloader),但它對(duì)被加載程序的大小有限制。在使用8bit FLASH的情況下,只能加載小于16KWord的內(nèi)容。而三個(gè)速率的SELP算法程序區(qū)和數(shù)據(jù)區(qū)的總數(shù)據(jù)量遠(yuǎn)遠(yuǎn)超過16KWord,顯然只使用DSP片內(nèi)的Bootloader是不能滿足需要的。所以必須自己寫加載程序。首先由TMS320VC5416片內(nèi)的Bootloader把自己寫的加載程序加載到片內(nèi)RAM,然后執(zhí)行這段加載程序,加載其它部分。這里需要解決的一個(gè)主要問題就是FLASH數(shù)據(jù)和DSP地址空間的映射關(guān)系。由于SELP算法的程序數(shù)據(jù)總量很大,所以必須用到片內(nèi)擴(kuò)展的程序區(qū),也就是說MP/MC標(biāo)志位需設(shè)為0。從此時(shí)的Memory Map中可以看出,DSP可以訪問的每塊連續(xù)片外地址空間只有32K,所以FLASH數(shù)據(jù)只能按照每頁(yè)32K的方式分頁(yè)映射到DSP地址空間。使用FPGA可以很方便地控制哪頁(yè)FLASH數(shù)據(jù)映射到DSP中,這部分的原理框圖如圖4所示。FLASH的低15根地址線A0~A14直接接到DSP上,而高3根地址線A15~A17則由FPGA控制。在DSP向I/O空間的特定地址寫數(shù)時(shí),FPGA內(nèi)部的邏輯電路就會(huì)將D0~D2(也就是所寫數(shù)據(jù)的低3位)鎖存到A15~A17上。這樣就實(shí)現(xiàn)了軟件控制FLASH數(shù)據(jù)映射關(guān)系的功能。再把所有的數(shù)據(jù)進(jìn)行合理的劃分和排列,燒入FLASH中,就可實(shí)現(xiàn)全部程序的自加載。 由于采用獨(dú)特的硬件接口方式,很方便地實(shí)現(xiàn)了自適應(yīng)變速率的功能,大大提高了聲碼器的靈活性和適用范圍。TMS320VC5416擁有很大的片內(nèi)RAM,本文提出的使用FPGA輔助完成大數(shù)據(jù)量程序上電自加載的方法對(duì)于TMS320VC5416的其它應(yīng)用場(chǎng)合也同樣適用。 使用以上方法實(shí)現(xiàn)的自適應(yīng)變速率SELP聲碼器在TMS320VC5416上占用的硬件資源情況如表2所示。表2 硬件資源占用情況  運(yùn)算量(峰值)(MIPS)存儲(chǔ)量(KWords)程序區(qū)數(shù)據(jù)區(qū)公共單獨(dú)2.4kbps算法43.011.411.65.41.2kbps算法52.425.00.6kbps算法35.427.4總運(yùn)算量=MAX(43.0,52.4,35.4)=52.4MIPS 總存儲(chǔ)量=11.4+11.6+5.4+25.0+27.4=80.8KWord 該聲碼器已在實(shí)際通信系統(tǒng)中獲得應(yīng)用并表現(xiàn)出了很好的性能。

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉