多制式語音編解碼算法的DSP設(shè)計實現(xiàn)
近二十年來,全球半導體產(chǎn)業(yè)的飛速發(fā)展帶動相關(guān)的軟件、硬件設(shè)計水平迅速提高,這些發(fā)展使得一大批性能優(yōu)良的復雜的數(shù)字信號處理算法可以實時實現(xiàn)并在日常通信系統(tǒng)中得到廣泛應(yīng)用,極大地提高了現(xiàn)有通信系統(tǒng)的可靠性和效率。因此,研究語音處理技術(shù)并將其用基于DSP芯片硬件系統(tǒng)實現(xiàn)有著非常重要的現(xiàn)實意義和廣闊的市場前景。本文介紹了語音編解碼硬件平臺的設(shè)計思路和編解碼算法在硬件平臺上的實現(xiàn)和優(yōu)化過程,同時給出了硬件平臺結(jié)構(gòu)和低功耗設(shè)計思路。
1 平臺中語音編解碼算法簡述
本文在TI C55x系列DSP上實現(xiàn)了0.3kbps至16kbps的多種不同速率的語音編解碼算法。其中16kps速率采用連續(xù)可變增量調(diào)制(CVSD)的波形編碼算法,8kps速率采用了ITU-T公布的G.729a標準算法。而低速率編解碼采用了正弦激勵線性預測(SELP)算法。SELP算法是建立在傳統(tǒng)的線性預測模型的基礎(chǔ)上,其中清音成分用白噪聲擬合,濁音成分在每個諧波處用一個頻率變化的正弦信號合成,整個激勵的濁音部分由一組不同幅度的正弦疊加而成,這也是SELP模型不同于傳統(tǒng)的線性預測的一個非常的重要方面,即激勵信號采用分帶混合正弦激勵。
2 語音編解碼算法在DSP數(shù)字處理芯片上的實現(xiàn)和優(yōu)化
由于在DSP上運行的聲碼器必須要達到實時化的要求,而直接編譯的C程序遠無法達到。因此需要編寫和優(yōu)化C55x的匯編代碼來提高聲碼器的運行效率。下面介紹幾點在算法硬件實現(xiàn)過程中的關(guān)鍵技術(shù):
2.1 C程序和匯編程序的混編,函數(shù)的調(diào)用和參數(shù)傳遞
把一個模塊改寫為匯編函數(shù),然后在C程序或者匯編程序中調(diào)用它。在C55x的開發(fā)中,函數(shù)的調(diào)用機制是這樣的:首先記錄下函數(shù)傳遞來的參數(shù),和返回地址SP向低位移。然后再在堆棧中開出本地變量常量所需要的空間,SP再次向低位移。
(1)匯編函數(shù)的聲明:在匯編函數(shù)中定義的函數(shù)如果要想在C代碼中被調(diào)用,必須用.global語句加以聲明,這樣,對象或函數(shù)被定義為外部的(external)。比如:
.global _Rem_Dc
_Rem_Dc:
……
(2)參數(shù)傳遞:在函數(shù)調(diào)用的過程中,C代碼傳來的參數(shù)按照以下規(guī)則存放在特定的寄存器中:即16或23位的數(shù)據(jù)指針,先后存放在(X)AR0-(X)AR4中。16位的數(shù)據(jù),先后存放在T0,T1,AR0-AR4中,32位的數(shù)據(jù),先后存放在AC0,AC1和AC2中。如果參數(shù)個數(shù)超過寄存器個數(shù),則存放在堆棧中。同時,函數(shù)的返回值如果是短整型(short)則存放在T0中,如果是長整型(long)則存放在AC0中,如果是指針則存放在(X)AR0中。
例如:
①int fn(int i1, long l2, int *p3);
則fn->T0; il->T0, l2->AC0, p3->AR0
②long fn(int *p1, int i2, int i3, int i4);
則fn->AC0, p1->AR0, i2->T0, i3->T1, i4->AR1
③void fn(long l1, long l2, long l3, long l4, int i5);
則l1->AC0, l2->AC1, l3->AC2, l4->堆棧, i5->T0
④void fn(long l1, long l2, long l3, int *p4, int *p5, int *p6, int *p7, int *p8, int i9, int i10);
則l1->AC0,l2->AC1,l3->AC2,p4->AR0,p5->AR1, p6->AR2, p7->AR3, p8->AR4, i9->T0,i10->T1
2.2 標志位的設(shè)置
標志位是DSP芯片在計算時設(shè)置一些位置。它們存放在ST0_55~ST3_55中,在運算中主要用到的幾個有:
FRCT,當其值等于1時,乘法運算的結(jié)果將左移一位。等于零時,運算結(jié)果不變。
SATD,當其值等于1時,運算發(fā)生溢出時作飽和處理
SXMD,當其值等于1時,輸入操作數(shù)有符號擴展
SMUL,當其值等于1時,飽和模式開
他們分別存儲在ST1_55和ST3_55寄存器的位置如圖1所示:
圖1 C55x DSP關(guān)鍵標志位在寄存器中的位置
這幾個操作位的設(shè)置不對的話,會出現(xiàn)運算結(jié)果的錯誤。所以要根據(jù)程序的需要正確設(shè)置操作位,同時要在程序的前后保護和還原其初值。
psh *(ST1_55)
psh *(ST3_55)
……
pop *(ST3_55)
pop *(ST1_55)
3 語音編解碼硬件平臺簡述
本文設(shè)計的多模式語音編解碼系統(tǒng)基于C55x系列DSP和MCU的雙處理器設(shè)計,主芯片采用了TI公司的TMS320VC5510A數(shù)字信號處理器。其時鐘周期最高為200MHz。擁有160KWord片上RAM(其中包括8塊4KWord的DARAM和32塊4KWord的SARAM)、16KWord片上ROM、8MWord的最大擴展尋址能力。微控制器(MCU)選用TI公司的MSP430F149,主要完成系統(tǒng)啟動,電源管理,狀態(tài)監(jiān)控,DSP程序加載,聲碼器二進制碼流位置重排等功能,并和DSP配合實現(xiàn)系統(tǒng)級加密機制。另外,硬件平臺的音頻編解碼芯片選用TLV320AIC10,而程序存儲部分采用的是SST39VF160 Flash,容量為1MWord,用來儲存程序和數(shù)據(jù)。本硬件平臺的框架結(jié)構(gòu)圖如圖2所示。
圖2 多速率語音編解碼系統(tǒng)硬件平臺框架結(jié)構(gòu)圖
4 低功耗設(shè)計
在數(shù)字集成電路設(shè)計中,CMOS電路的靜態(tài)功耗很低,與其動態(tài)功耗相比基本可以忽略不計,故暫不考慮。其動態(tài)功耗計算公式為:
(1)
式中Pd為CMOS芯片的動態(tài)功耗;CT為CMOS芯片的負載電容;V為CMOS芯片的工作電壓;f為CMOS芯片的工作頻率。本硬件平臺的低功耗設(shè)計從選用有可變電壓和多電壓的器件、動態(tài)功耗管理、動態(tài)頻率控制三個方面入手。
4.1 選用有可變電壓和多電壓的器件
首先在文中的系統(tǒng)中,選用的單片機芯片TI公司的MSP430系列MCU是一款功耗相當?shù)偷钠骷?,供電電?.8V~3.6V,運行模式下功耗280μA/MHz,待機模式下功耗1.6μA/MHz,禁用模式下功耗0.1μA/MHz。其次選用的DSP芯片TI的C5510 DSP采用兩種驅(qū)動電壓,內(nèi)核電壓1.6V,I/O電壓3.3V,根據(jù)(1)式,IC器件的功耗和供電電壓的平方成正比,1.6V供電的器件比3.3V供電器件能降低一半以上的功耗。IC設(shè)計中通常都將降低電壓作為控制功耗的最直接的手段,通過采用低電壓供電的DSP,既能有效地降低內(nèi)核動態(tài)功耗,還能兼顧I/O的電平兼容性。
4.2動態(tài)功耗管理
PCM編解碼芯片TLV320AIC11可以單獨將A/D或D/A部分禁用。當話筒PTT沒有按下時,表示沒有話音輸入,此時可以將A/D部分置為IDLE狀態(tài)。同樣的,當MODEM的CD信號為高時,表示沒有有效的數(shù)字碼流輸入聲碼器,故在此時可以將D/A部分設(shè)為IDLE狀態(tài)。通過將該芯片配置成低功耗模式,降低了系統(tǒng)的功耗。另外,C5510 DSP芯片內(nèi)部劃出了五個獨立的IDLE域,分別負責CPU、DMA、CACHE、外設(shè)、時鐘生成器、EMIF接口的配置。每個域可以獨立地將該域管轄的多個部件設(shè)置成活動模式或IDLE模式以此降低DSP的功耗。針對本文設(shè)計,由于沒有使用到DMA、CACHE、時鐘生成器三個域中的外設(shè),故將這三個域設(shè)置成了IDLE模式。EMIF域在DSP和MSP交換數(shù)據(jù)(為了調(diào)整發(fā)送和接收的比特流)時才被置為活動,其他時候被置為IDLE。通過這樣的設(shè)置,更加有效地控制了整個系統(tǒng)的運算功耗。
4.3動態(tài)頻率控制
根據(jù)(1)式,IC器件的功耗和頻率成正比,因此,將IC器件的頻率控制在剛剛好滿足運算處理要求的情況,可以大大減小系統(tǒng)功耗。這種方法的關(guān)鍵是算法運算量的大小,動態(tài)的調(diào)整芯片的運行頻率,從而達到節(jié)省功耗的目的。在本文設(shè)計的平臺上運行的六種速率的低速率語音編解碼算法中,600bps、1200bps、2400bps、8000bps、16kbps的峰值運算量分別為37.4MIPS、59.2MIPS、44.8MIPS、18.6MIPS、<1MIPS,因此將DSP的工作頻率分別設(shè)置在40.096MHz、65.536MHz、49.152MHz、24.576MHz。這樣處理能夠很有效地降低DSP的內(nèi)核功耗,最大限度地有效利用運算資源。
通過以上幾個方面的優(yōu)化設(shè)計,我們達到了應(yīng)用場合對功耗的要求。表1是本系統(tǒng)在不同運行模式下的功耗統(tǒng)計。
表1 不同模式下DSP功耗
工作方式
功耗
全速運行(80MHz)
521.4mW
低速運行(2MHz)
264mW
低速運行/DSP外設(shè)休眠
214.5mW
低速運行/DSP外設(shè)休眠/外圍芯片休眠
155.1mW
5 小結(jié)
本文中介紹了針對語音編解碼算法在TI C55x系列DSP上的實現(xiàn)方法。結(jié)合作者在實際開發(fā)過程中的經(jīng)驗與體會總結(jié)了編寫匯編程序中的主要技巧。目前C55x的高性能低功耗特點能大幅度提高便攜式設(shè)備的處理能力和電池的使用壽命,將會廣泛應(yīng)用于語音處理的各個領(lǐng)域。本文介紹的方法和經(jīng)驗具有廣闊的推廣價值。
本文的創(chuàng)新點:1.指出了多種在TI C55x系列DSP平臺上匯編語言的開發(fā)經(jīng)驗與技巧。2.實現(xiàn)了一個可同時加載多種速率制式語音編解碼的嵌入式硬件平臺。 3.采用多種方案實現(xiàn)了對該硬件平臺的低功耗設(shè)計,很大程度上節(jié)約了系統(tǒng)的運行功耗。
參考文獻(References)
[1]田秋玲,崔慧娟,唐昆.高質(zhì)量0.6Kb/s聲碼器的TMS320VC55x實現(xiàn)[J].電聲技術(shù),2005,8:50-53
[2]詹杰,唐昆,崔慧娟.基于TMS320VC5510的低功耗加密型語音硬件平臺的設(shè)計與實現(xiàn)[J],微計算機信息,2005/25:63-65
[3]TMS320C55xDSPProgrammer’sGuide(spru376a)[R].TexasInstruments,July2001
[4]TMS320C55xDSPMnemonicInstructionSetReferenceGuide(spru374g)[R].TexasInstruments,October2002
[5]趙永剛,高攀峰,崔慧娟,等.聲碼器通用硬件平臺的實現(xiàn)[J].電聲技術(shù),2004,7:24-26.
[6]荊元利,樊曉椏,高德遠,等.一種數(shù)字信號處理器的動態(tài)功耗管理方案[J].微電子學與計算機,2003,9:60-63.
[7]TI.MSP430X1XXFAMILYUSERGUIDE.[R].TexasInstruments,January2003