新聞中心

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

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

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

評論


相關(guān)推薦

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

關(guān)閉