?

G.729.1算法的改進與DSP全匯編優化設計

2017-01-03 01:29王春柳陳德宏申星海
關鍵詞:霍夫曼子帶差分

王春柳,陳德宏,申星海

(1.河海大學 文天學院 電氣信息工程系,安徽 馬鞍山 243031;2.安徽工業大學 電氣與信息工程學院,安徽 馬鞍山 243002)

G.729.1算法的改進與DSP全匯編優化設計

王春柳1,陳德宏2,申星海2

(1.河海大學 文天學院 電氣信息工程系,安徽 馬鞍山 243031;2.安徽工業大學 電氣與信息工程學院,安徽 馬鞍山 243002)

在G.729.1寬帶語音編碼算法中,時域混疊編碼器的譜包絡編碼根據幀內子帶的相關性,采用差分霍夫曼編碼來減少編碼的比特分配。針對相鄰幀對應子帶的譜包絡存在相關性,給出了在原有譜包絡編碼模式的基礎上,增加一種幀間對應子帶差分霍夫曼編碼的模式來進一步減少譜包絡的編碼比特數,從而提高合成語音的質量。由于G.729.1可以根據信道的特征隨時調整編碼速率以取得更好的寬帶語音質量,這使得該編碼算法具有很高的復雜度。為了能在數字信號處理器 (digital signal processor, DSP)上實時實現G.729.1,結合TMS320VC5505數字信號處理器對G.729.1算法采用全匯編實現,并對匯編后的G.729.1代碼做了進一步的匯編優化,優化后的G.729.1算法在保證了高質量語音輸出的同時,提高了編碼效率,實現了對語音信號的實時處理。

寬帶語音;G.729.1; 譜包絡編碼;差分霍夫曼編碼;匯編優化

0 引 言

G.729.1作為ITU-T提出的嵌入式寬帶語音編碼標準能夠根據各個終端設備的能力及傳輸鏈路的傳輸能力,靈活地對編碼比特流進行截斷,使得編碼器具有可分級性。它被廣泛應用于分組語音傳輸、高質量的視頻或音頻會議、網絡擁塞控制及各種多媒體通信系統中[1-3]。它提供了在8~32 kbit/s之間的12種可選速率,并且用戶可以根據信道的實際狀況對碼流速率作相應調整,這種根據網絡狀況靈活調整比特率的方法使G.729.1具有較好的適應能力,避免了網絡擁塞,提高了整體服務質量。

圖1 TDAC編碼原理框圖Fig.1 Block diagram of the TDAC encoder

由圖1可以看出,TDAC編碼器對低頻端重建加權差值譜信號和高頻譜信號進行譜合并,組成了全頻帶的譜信號。對全頻帶譜信號先進行粗編碼,即對變換后的譜系數(320)組成18個子帶,每個子帶先進行譜包絡編碼,然后再細量化,即對每個子帶的各個譜系數再進行球形矢量量化。由于TDAC編碼器分配的總比特數是一定的,因此,子帶譜包絡編碼分配的比特數越少,對子帶各個譜系數分配的比特數就越多,細節描述就更準確,得到的語音質量就越高。G.729.1中的譜包絡編碼利用幀內18個子帶的相關性,對一幀內的相鄰子帶進行差分去相關,而幀內相鄰子帶差分之后的譜包絡能量往往集中在較小的動態范圍內,即采用不等長霍夫曼編碼,可以進一步降低編碼比特數。

本文根據語音幀與幀對應子帶之間的譜包絡具有很大的相關性,可以利用幀與幀對應子帶的相關性,進行差分去相關處理,對幀間對應子帶差分后的信號采用霍夫曼編碼也可以減少譜包絡的比特分配,然而對不同種類的語音信號,對幀內相鄰子帶采用差分霍夫曼編碼模式所分配的比特數和對語音的相鄰幀對應子帶采用差分霍夫曼編碼模式分配的比特數各有優劣,因此,為了使用分配比特數較少的模式,可以同時保留這2種模式,對每一幀的譜包絡編碼都計算這2種模式的編碼比特數,采用1 bit來選擇編碼比特數較小的那種模式,有利于解碼端恢復譜包絡的編碼模式。

由于G.729.1可以根據信道的特征隨時調整編碼速率以取得更好的寬帶語音質量,這使得該編碼算法具有較高的復雜度。在工程應用中,為了達到實時處理的目的,文獻[6]采用DM642對G.729.1進行簡單的算法優化和C語言級別上的優化,但該優化沒有充分利用DSP C6000系列的結構特點,優化效率不高,且C6000系列價格昂貴,因此,采用該系列DSP對G.729.1進行處理,性價比不高。文獻[7]采用ARM926EJ為核心的S3C2450處理器對G.729.1進行C語言函數結構和部分匯編優化相結合的優化方式,但這種優化的可移植性較差,不利于工程應用中的直接封裝使用。本文利用C55x系列DSP的低功耗,對數字信號處理快的特點,在TMS320VC5505 DSP芯片上給出了一種便于編寫、調試的G.729.1全匯編開發方案。通過對G.729.1編解碼算法的匯編編寫、調試,并進一步對G.729.1匯編代碼做匯編優化,如并行指令、循環體優化、流水線優化等。匯編優化后的G.729.1代碼可實時處理,并且在工程應用中可直接封裝使用并為后續G.729.1算法的優化研究奠定了基礎。

1 G.729.1譜包絡編碼的改進

1.1 G.729.1譜包絡編碼

(1)

得到18個譜包絡后,對每個譜包絡參數進行5bit均勻標量量化,其限定量化結果為-11~+20的32個可能的數值,為了防止譜包絡log_rms(j)的值過多地超出限定范圍,對其進行了溢出處理,進而得到索引rms_index(j)表示為

rms_index(j)=round(1/2log_rms(j)),

j=0,…,17

(2)

(2)式中;log_rms(j)為第j個譜包絡;rms_index(j)為第j個量化的譜包絡。

量化后的全頻帶包絡分為2個子矢量:第1個子矢量是rms_index(0)~rms_index(9),該10維的子矢量為低頻帶包絡;第2個矢量是rms_index(10)~rms_index(17),該8維的子矢量為高頻帶包絡。這2個子矢量的編碼在差分霍夫曼編碼(模式0)和直接自然二進制編碼(模式1)之間進行自適應轉換。這是由于差分霍夫曼編碼可使平均編碼比特數變小,而直接自然二進制編碼用于限制最壞情況的比特數。

該差分霍夫曼編碼在幀內的譜包絡之間進行編碼,一般包括以下4個步驟。

步驟1對取值為[-11,20]的第1個索引rms_index(0)進行5 bit的自然二進制編碼。

步驟2計算相鄰子帶的差分索引和飽和標識satur。

diff_index(j)=rms_index(j)-

rms_index(j-1),j=1,…,9

(3)

(4)

(3)-(4)式中:rms_index(j)為第j個量化的譜包絡;diff_index(j)為2個相鄰譜包絡的差值索引;satur為飽和標志位。

步驟3如果satur=0,對于j=1,...,9的低頻差分索引diff_index(j)采用查表法進行差分霍夫曼編碼,其霍夫曼表參見文獻[1]。

步驟4如果satur=1或者差分霍夫曼編碼的比特數大于45,則對rms_index(1),…,rms_index(9)進行步驟1所述的自然二進制編碼,并令satur=1。

1.2 譜包絡編碼的改進

G.729.1中的譜包絡編碼利用幀內18個子帶的相關性,對一幀內的相鄰子帶進行差分去相關,而幀內相鄰子帶差分之后的譜包絡能量往往集中在較小的動態范圍內,從而降低編碼比特數。對常出現的小信號用短碼表示,不常出現的大信號用長碼表示,即采用不等長霍夫曼編碼,可以進一步降低編碼比特數。

由于譜包絡編碼分配的比特數與MDCT系數分配比特數的總和是固定的,共351 bit,而MDCT系數精度越高對語音頻譜細節的描述就越準確,得到的語音質量就越好。如果希望MDCT系數的比特分配越多,這就意味著譜包絡編碼分配的比特數越少越好,那么如何進一步減少譜包絡編碼的比特數呢?一般情況下,語音幀之間的譜包絡存在很大的相關性,因此,可采用對幀間對應子帶進行差分去相關,之后對去除相關性的對應子帶信號采用霍夫曼編碼進一步減少譜包絡的比特分配。文獻[8]表明,對不同種類的語音信號,G.729.1所采用的幀內相鄰子帶進行差分霍夫曼編碼模式所分配的比特數和本文所提的語音的相鄰幀對應子帶采用差分霍夫曼編碼模式分配的比特數各有優劣,因此,為了確定哪種模式分配的比特數較少,本文采用同時保留這2種模式的方法,對每幀的譜包絡編碼都計算這2種模式的編碼比特數,然后進行比較,用1 bit來選擇編碼比特數較小的那種模式,從而可使譜包絡編碼保持較少的分配比特數。

譜包絡編碼的具體步驟如下。

步驟1利用(1)式和(2)式計算連續相鄰幀的18個子帶的譜包絡值,并計算連續幀的對應子帶譜包絡的差分為

diff(t,j)=rms_index(t,j)-rms_index(t-1,j)

(5)

(5)式中:rms_index(t,j)是第t幀第j個子帶的量化譜包絡;diff(t,j)為相鄰幀對應子帶譜包絡的差值索引。

步驟2對每幀得到各個譜包絡的差值進行霍夫曼編碼,并計算分配的比特數。

步驟3比較幀內相鄰子帶譜包絡編碼比特分配和相鄰幀對應子帶譜包絡編碼比特分配,采用1 bit進行模式選擇,哪種比特數少,則采用哪種模式,并輸出模式選擇標志位。具體譜包絡編碼流程如圖2所示。

本文采用ITU-T提供的測試矢量tstseq1.in作為輸入語音,對G.729.1語音壓縮編碼進行驗證,統計了1 000幀的語音信號。結果表明,采用改進的譜包絡編碼使得該部分的編碼比特數減5 bit左右。由于TDAC編碼器分配的總比特數是一定的,改進的子帶譜包絡編碼分配的比特數減少了5 bit,則表明對子帶各個譜系數分配的比特數就多了5 bit,細節描述就更準確。通過采用ITU-T推出的WB_PESQ軟件系統對1 000幀的測試矢量tstseq1.in所合成語音的質量進行評估[9],實驗表明,該譜包絡方法比原來的譜包絡編碼方法所得到的感知語音質量評價(perceptual evaluation of speech quality, PESQ)得分由原來的4.05提高到4.11,合成語音質量所提高。

圖2 改進的譜包絡編碼流程圖Fig.2 Flow of improved spectral envelope coding

由于該方法在原有編碼的基礎上增加了對相鄰幀對應子帶的差分霍夫曼編碼模式,因此,TDAC編碼器算法的復雜度有所增加,執行一幀的運算量由2 714 111 clock提高到2 759 413 clock,算法復雜度提高了1.67%。由于G.729.1算法本身的運算量較為龐大,而TDAC編碼器算法的復雜度只占G.729.1算法中的16.8%,因此,該部分算法復雜度對G.729.1整體算法的復雜度并沒有太大影響。但G.729.1的龐大的運算量影響其在工程上的實時實現,本文對G.729.1采用全匯編優化設計,解決了實時處理的問題。

2 G.729.1算法全匯編設計與優化

TMS320VC5505是TI公司生產的16位定點DSP,在數字音頻設備、軟件無線電、便攜式醫療設備等領域得到廣泛應用[10]。如果直接將C語言編寫的G.729.1編解碼算法加載到C55x DSP開發平臺進行編譯,那么執行一個語音超幀(20 ms)需要47 642 993個時鐘周期。對于TMS320VC5505的主頻為100 MHz,則執行一個語音超幀需要476.4 ms,無法達到語音實時處理的目的。因此,為了能在C55x上實時實現G.729.1算法,本文對G.729.1進行全匯編編寫和優化。而一個合理的開發設計方案對程序的編寫和最后的調試有著至關重要的作用。本課題利用CCS3.3軟件開發平臺,開發一款能夠在DSP上實時處理的G.729.1寬帶語音編碼代碼,其總體開發流程如圖3所示。

圖3 基于DSP的G.729.1匯編開發總方案流程圖Fig.3 Flow of G.729.1 assembly development based on DSP

圖3描述了G.729.1總體開發方案流程。該方案首先把C代碼移植到CCS環境中,并解決移植過程出現的接口不匹配問題;然后對移植成功的C代碼進行整體架構的分析,制定整個代碼的開發方案,同時對各個模塊C代碼進行參數精度和算法描述的解讀,制定各個模塊的匯編方案,匯編編寫并調試各模塊代碼,最后為了進一步提高匯編優化效率,從各方面對匯編代碼進行優化。

2.1 代碼的移植

由于G.729.1的源C文件是在Visual C++平臺上編寫的,由于CCS3.3對標準C不是百分之百完全兼容的,因此,需要進行一定的修改才能將G.729.1算法移植到CCS3.3中。通過修改并在CCS3.3上編譯通過,移植成功后才可以進行下一步的匯編編寫和優化工作。

標準C代碼在CCS3.3平臺移植過程中存在的3個不足之處。

1)標準C代碼的main函數是帶參數的,這些參數可自動判斷輸入文件為什么類型,在CCS3.3中無法執行,因而需要將其改為不帶參數的main函數,人工輸入文件類型。

2)標準C代碼中的數據導入方式是通過fread語句從數據文件中讀入數據,在CCS3.3中,fread讀一個16位整數時,只能讀出16位整數的一個字節,這種方式讀入的數據格式不對,解決辦法有:①如果數據文件是.data格式,直接裝載到數據區;②對于其他格式的數據文件,可以通過tool工具欄中的Memory Save/Load Utility工具將數據讀入指定數據區;③可以通過fread將一個16位數據讀2次,并需要編程將2個讀出的8位合并成一個完整的16位數據。

3)源C程序移植到CCS3.3上,不僅要加入源文件,而且要與C運行庫進行連接。由于C5505 有小模式(small memory model)和大模式(large memory model)之分,模式的選擇決定C運行庫的選擇,在大存儲器模式下,數據指針是23位,并在存儲器中占用2個字,大存儲器模式支持數據的不嚴格存放,代碼段和數據段的長度和位置不會受到一定數據頁的限制,本文中在編譯器中設置-ml,選擇大模式。大模式對應的C運行庫為rts55x.1ib。

將G.729.1源C文件載入TI 公司提供的集成開發環境C55xx Rev3.0 CPU Cycle Accurate Simulator。輸入語音信號,經編解碼,將解碼得到的信號通過集成開發環境CCS3.3中Tools菜單條中的Memory Save/Load Utility來保存。其中,輸入的語音信號為ITU-T提供的測試語音test1_16k.in,將移植后的G.729.1編解碼輸出的.bit文件和.out 文件與之提供的測試文件逐比特進行對比,完全一致,并通過Cool Edit Pro v2.0 進行試聽,直到和原始測試文件聽不出任何不同,說明移植成功。

2.2 全匯編的編寫設計與調試

由于G.729.1程序規模較大,為了實現其全匯編編寫,需要制定一個合理的全匯編實現方案。本文結合C55x匯編語言和算法代碼的特點,在保證標準C代碼的結構架構不變的情況下,對C代碼結構框架下的各個模塊逐個進行匯編語言編寫,保證每個階段匯編替代的正確性,完成整個算法的全匯編實現。為了使程序結構清晰,利于修改和調試,這種將復雜的算法分解為各個單獨的程序模塊分別實現,可使編程變得相對容易,但也要求對C程序代碼非常熟悉,并對匯編指令了解透徹。這種思路雖然花費的時間較長,但易于在調試中發現和改正錯誤。

由于G.729.1包含的模塊眾多,而各個模塊匯編代碼編寫的順序并不是隨意的,而是根據函數之間的關系以及它們的復雜度大小制定的,編寫順序如下。

1)對于同一分支的函數,因為子函數的編寫和調試比較容易,所以,先替換子函數,即內層函數,在保證子函數的正確性后,再替換父函數,即為外層函數,采用由內而外的替換順序,從而降低代碼開發和調試難度。

2)由于執行一次G.729.1源代碼編的時間較長,對于同一層次的函數,由它們的復雜度決定替換順序,采用優先替代復雜函數,這樣可以縮短編譯和連接的時間,從而確定復雜的函數先替換,簡單的函數后替換,從時間上縮短后面函數調試時間。

按照這2個原則逐一替換各個子函數,從而完成父函數的全匯編編寫。

為了驗證各個模塊匯編代碼的正確性,本文使用ITU-T 提供的G.729.1相應測試矢量test1_16k.in作為輸入信號,由于G.729.1包括12種編碼速率,即8~32 kbit/s,為了加快調試的速度,在程序中不能直接設置編碼速率為最高速率(32 kbit/s)。如果先編寫8 kbit/s所對應的程序模塊,可設置編碼速率為8 kbit/s,這樣12~32 kbit/s所對應的程序將不會執行,增加了編譯的速度,且便于調試。當調試某一模塊,可在該模塊的結尾處設置斷點,一幀一幀調試,大概執行10幀,如果該模塊的匯編結果與C語言結果相同 ,可認為該模塊的匯編程序正確。

2.3 匯編優化

匯編代碼執行效率雖然很高,為了進一步提高編寫效率,充分利用各種DSP的硬件資源,本文在匯編代碼的基礎上進一步優化以提高編碼效率。

2.3.1 實現高效循環

1)單循環指令RPT(CSR/k8/k16)。如果循環體中只有一條指令或一個并行指令對,則可以使用RPT指令實現。當RPT CSR嵌套循環中使用時,CSR只需要在循環體之外初始化一次,單循環指令的效率很高,是實現循環的首選方式。

2)局部塊循環指令RPTBLOCAL{}。當循環體的代碼長度不大于56 Byte的時候,可以使用RPTBLOCAL指令對指令緩存隊列中的循環體代碼塊執行循環。局部塊循環避免了從內存中重復讀取循環體代碼,從而減少了程序空間訪問的流水線沖突,如果循環代碼在外部RAM中,局部塊循環不會重復產生額外的等待,從整體上降低了功耗。在實現塊循環時,RPTBLOCAL指令是第1選擇。

3)塊循環指令RPTB{}。由于塊循環指令要重復地訪問內存代碼,執行效率不高,因此,在局部塊循環指令不能使用的情況下才會用塊循環指令實現循環。

4)跳轉指令。以上3種方法在實現循環時無需額外開銷,跳轉指令則至少需要5個指令的循環開銷。這種方法一般在多級(>2)嵌套循環里面使用。

為實現高效的循環,應盡量使用單循環指令和局部塊循環指令,避免使用跳轉指令來實現循環。如果塊循環的代碼長度大于56 Byte,可以采用下面2種措施來實現局部塊循環:①將循環體拆分為2個長度較小的代碼塊;②將原循環中長度較大的指令用其他長度較小指令替代,最常見的就是去除立即數指令。碰到2級嵌套循環,應將內層循環的塊循環計數器BRC1在外層循環體之前進行初始化,這樣可以避免重復初始化帶來的額外指令。

2.3.2 宏優化

對于長的或復雜的代碼,將重復調用的程序塊定義為宏,此外,函數調用會有額外開銷,特別是多次調用的函數,將其定義為宏后可以節省調用花費的開銷。全匯編代碼中定義為宏的函數有G729EV_G729_Copy,Inv_sqrt和Lag_max。下面給出宏Lag_max的部分定義程序,其他函數的宏可以用類似方法定義。

Lag_max .macro scal_sig,L_FRAME,PIT_MAX,

PIT_MIN,max,p_max

.global _tabsqr

……

.endm

2.3.3 DSP匯編指令的巧用

C55x匯編指令有150多種,編寫的匯編代碼中使用的某些指令并不一定最合適,比如條件跳轉指令BCC和指令XCC都可以控制是否執行下條語句,但是BCC需要5到6個執行周期,XCC只需要1個執行周期,因此,在選擇指令的時候應盡量選用執行周期較少的。如對某一個數據進行歸一化時,并求出歸一化的指數,可用并行指令MANT::NEXP,一個執行周期就可完成。如除法運算中的SUBC指令,因為除法運算沒有相應的指令,所以可以轉換為減法運算,該指令可以求商和余數。

2.3.4 并行指令優化

DSP芯片可以在1個時鐘周期下完成多個操作,也就是說可以將多條指令合并為1條,提高程序的運行效率。C55x中的并行分為單指令內建并行和用戶自定義并行兩類。內建并行就是一些特殊指令,用得最多的就是并行乘累加指令MAC::MAC,它是基于C55x的雙乘加(multiply and accumulate,MAC)硬件結構。雙MAC并行指令為處理包含大量乘累加操作的G.729.1算法提供了便利。用戶自定義并行是指用戶通過對指令進行分析,調整編碼的順序,將符合條件的2條相鄰指令并行操作[11]。TMS320C5505包含多組總線和功能單元,豐富的硬件資源使其支持高度的并行性,因而并行指令優化是全匯編代碼的主要指令優化方法之一。

下面是一些可以采用用戶自定義并行指令來優化匯編代碼的情況。

1)將所有裝載和存儲指令并行放置。例如

MOV *AR2,AC1 /*裝載AC1*/

‖MOV BRC0,*AR3 /*存儲BRC0*/

2)條件執行指令與加載指令并行放置。例如

XCC first,T0==#0

‖MOV #0,AR0

3)可將A單元的ALU與D單元的ALU,MAC和移位操作并行處理。例如

ADD T0,AR1 /*在A單元修改AR1*/

‖MOV uns(rnd(HI(saturate(AC1<<#1)))),*AR2 /*在D單元執行累加器移位飽和和存儲操作*/

不同的匯編程序并行優化的效果不同,從全匯編代碼的優化結果來看,通常經過自定義并行優化,代碼執行時間可以減少20%左右。

2.3.5 流水線延遲的優化

C55x有2條受保護的指令流水線:①取指流水線,用于將指令包放入指令緩存隊;②執行流水線,用于完成指令譯碼、數據訪問和運算,共有7個階段。在流水線中是多條指令同時執行,不同的指令會在流水線的不同階段修改內存、I/O空間和寄存器的值,為了防止數據訪問時會對同一空間進行讀/寫,C55x的流水線保護單元會插入額外的周期來預防這種錯誤。如果一條指令要訪問前面未執行完的指令所訪問的空間,這條指令就會在流水線中中斷,直至前面的指令執行完,這條指令再執行。為了使延遲最小,利用分析工具Pipeline Stall Analyzer,通過單步執行程序找出產生流水線延遲的指令并分析在哪個階段產生流水線延遲并通過調整順序來解決。例如匯編程序中

MOV #5,AR1

MOV *AR1+,AC0

由于這2條語句有4個周期的延遲,可以把第1條匯編語句改為AMOV #5,AR1,還可以與其他語句進行調整來減小延遲。

2.3.6 多使用雙字訪問指令

在很多信號處理中,待處理的數據都是連續存放在內存中的,使用雙字訪問可以一次讀取多個數據,減少內存訪問指令數。

2.3.7 盡量減少進行函數調用

因為進行函數調用的時候,要將程序計數器(programe counter,PC)指針和一些寄存器壓棧,函數調用完后,程序結束還要出棧,這都是一些不必要的操作。所以對于一些小的函數, 就不調用而是直接寫入主函數里, 這樣就可以減少那些壓棧出棧的操作,提高速度。

2.3.8 去除一些冗余的賦值

編譯器產生的代碼有很多賦值,經常將一個值賦給寄存器,再賦給變量,這樣就產生了冗余。

3 結果分析

通過對G.729.1進行匯編編寫及優化,并利用CCS3.3提供的性能分析工具(profiler)對優化前后的代碼進行分析, 表1是G.729.1編碼器源C代碼與匯編優化后的指標對比,其中,表1中運算量的單位為CPU的時鐘周期,而優化效率則是源C代碼的運算量減去匯編優化后的運算量與源C代碼的運算量的比值。

表1 G.729.1編碼器匯編優化前后的指標對比

由表1可以看出,函數的優化效率至少為90%以上,匯編優化后的函數執行效率得到大大提高。通過測試可知,G.729.1全匯編代碼的運算量只有1 683 881 clock,而主頻為100 MHz的TMS320VC5505芯片在20 ms內允許執行的代碼量為2 000 000 clock,小于G.729.1編解碼的代碼量,保證了系統的實時性。

為了進一步評價語音編解碼系統還原出的語音質量,本文采用ITU-T推出的WB_PESQ軟件對系統合成語音的質量進行評估[9]。實驗所用語音選自ITU-T提供的4組測試語音矢量,由于測試語音的語種、時長、是否帶噪等因素會影響語音質量的測試結果,因此,測試語音應該足夠豐富,如表2所示。這些語音的采樣頻率都為16 kHz,分別對C語言中的32 kbit/s的合成語音和匯編語言中的32 kbit/s的合成語音做對比,如表3所示。

從表3的評測結果可以看出,匯編語音中的合成語音的質量和C語言中的合成語音質量基本相同,且當速率為32 kbit/s時,合成的語音質量較高,因此,全匯編優化后的G.729.1編解碼器完全可以滿足實際話音通信系統的要求。

表2 測試語音矢量

表3 測試語音WB_PESQ得分

為了進一步驗證G.729.1編解碼的正確性,本文以測試矢量tst_16k.in作為輸入語音,經G.729.1全匯編編碼和解碼后分別得到8,12和32 kbit/s的合成語音tst_16k_asm.o8,tst_16k_asm.o14和tst_16k_asm.o32。以32 kbit/s的合成語音為例,將原始語音文件與合成語音文件分別導入音頻制作軟件Cool Edit Pro,并對比它們的波形圖,如圖4所示。

圖4 原始語音和32 kbit/s合成語音的波形圖Fig.4 Original speech waveform and synthetic speech waveform of 32 kbit/s

將原始語音和32 kbit/s的合成語音的波形進行對比,由圖4可見,32 kbit/s的合成語音波形圖與原始輸入語音的基本一致,進一步驗證了全匯編結果的正確性。

4 結束語

針對G.729.1中的TDAC編碼器的譜包絡編碼方法,本文在原有方法的基礎上增加一種對相鄰幀對應子帶采用差分霍夫曼的編碼方法,提高了語音的質量。同時,針對G.729.1編解碼算法的高復雜度,通過充分利用C55x DSP結構特點和匯編語言的特點,對其進行全匯編設計及優化,使得G.729.1編解碼器在TMS320VC5505得到實時實現,提高系統運行的效率。并且該方法在工程應用中可直接封裝使用,為后續G.729.1算法的優化研究奠定了基礎。

[1] ITU-T Recommendation. G.729-based Embedded Variable bit-rate coder,An 8-32kbit/s scalable wideband coder bitstream interoperable with G.729 (Amendment 7: New Anne F with voice activity detector using ITU-T G.720.1 Annex A)[S].Geneva,Switzerland:Telecommunication Standardization Sector of ITU, 2012.

[2] RABOT S, KOVESI B, TRILLING R, et al. ITU-T G.729.1: An8-32kbit/s scalable coder interoperable with G.729 for wideband telephony and voice over IP[C]//IEEE International Conference on Acoustics, Speech and Signal Processing. Honolulu, Hawaii, USA: IEEE,2007:529-532.

[3] GEISER B,JAX P, VARY P, et al. Bandwidth Extension for Hierarchical Speech and Audio Coding in ITU-T Rec. G.729.1[J]. IEEE International Conference on Audio, Speech and Signal Processing, 2007,15(8):2496-2509.

[4] 李海婷,范睿,朱恒,等.最新的ITU-T嵌入式變速率語音編碼關鍵技術[J].電聲技術,2006, 30(11):50-55. LI Haiting, FAN Rui, ZHU Heng,et al. Key techniques of the latest ITU-T embedded variable bit-rate speech coding[J]. Audio Engineering, 2006,30(11):50-55.

[5] SETO Koji, OGUNFUNMI Tokunbo. Scabable Wideband Speech coding for IP Networks[C]//IEEE Conference on Circuits, Systems & Computers.Penang,Malaysia: IEEE, 2012:77-81.

[6] 劉麗群, 黃冰. 基于DM642的G.729.1的DSP實現[J].桂林電子科技大學學報,2011,31(2):103-105. LIU Liqun , HUANG Bing. Implementation of the G.729.1 based on DM642[J].Journal of Guilin University of Electronic Technology,2011,31(2):103-105.

[7] 董傳霄.基于ARM體系結構的上層應用—音頻編解碼協議G.729.1的優化及應用[D].北京:北京郵電大學,2009. DONG Chuanxiao. An application based on ARM—The optimization and Application of G.729.1 speech coding codec[D].Beijing:Beijing University of Posts and Telecommunications, 2009.

[8] CHO Keunseok,JEONG Sangbae,HAHN Minsoo.Frame Error-Robust MDCT bit Reduce for G.729.1 by Inter-Fame Correlation[C]//IEEE International Conference on Consumer Electronics. Xianning,China:IEEE,2011,819-820.

[9] ITU-T Recommendation. Wideband extension to Recommendation P.862 for the assessment of wideband telephone networks and speech codecs [R].Geneva,Switzerland:Telecommunication Standardization Sector, 2007.

[10] Texas Instruments Inc.TMS320VC5505 DSP System User’s Guide,SPRUFP0C[R].Texas: Texas Instruments Incorporated, 2012.

[11] Texas Instruments Incorporated.TMS320C55X系列DSP指令系統開發工具與編程指南[M].李海森,周天,黎子盛,譯. 北京:清華大學出版社,2007. Texas Instruments Incorporated.DSP instructions system development tools and programming guide of TMS320VC55x [M].LI Haisen,ZHOU Tian,LI Zisheng,translation.Beijing: Tsinghua University Press,2007.

王春柳(1989-),女,安徽馬鞍山人,碩士研究生,研究方向為數字語音編碼、DSP。E-mail:chunliuwang@yeah.net。

陳德宏(1965-),男,安徽馬鞍山人,副教授,碩士生導師,研究方向為通信系統總體設計、數字語音編碼、DSP、密碼分析。E-mail:cdh@ahut.edu.cn。

申星海(1990-),男,山西運城人,碩士研究生,研究方向為數字語音編碼、DSP。

(編輯:王敏琦)

G.729.1 algorithm improvement and DSP all assembly optimization design

WANG Chunliu1, CHEN Dehong2, SHEN Xinghai2

(1.Department of Electrical Information Engineering, Wentian College, Hohai University, Ma’anshan 243031, P.R.China;2. Institute of Electrical and Information Engineering, Anhui University of Technology, Ma’anshan 243002, P.R.China)

In the wideband speech coding algorithm of G.729.1 standard, based on sub-band correlation of inter-frames, spectral envelope coding of time-domain aliasing cancellation encoder reduces allocation bits with the difference Huffman coding. Considering the sub-band correlation between adjacent frames, a difference Huffman coding mode in sub-band of adjacent frames is added on the foundation of the original spectral envelope coding mode, which further reduces spectral envelope of coded bits and improves the quality of synthesized speech. G.729.1 can adjust the coding rate according to the characteristics of channel at any time and can get a better wideband speech quality,which makes the encoding algorithm have a high complexity. Therefore, all assemble language based on TMS320VC5505 digital signal processor is adopted to the real-time implement of G.729.1 algorithm. And the further optimization is made for the assembly code of G.729.1. The optimized G.729.1 algorithm can ensure the high-quality synthesis speech, improve the coding efficiency and achieve the real-time processing of the speech signal.

wideband speech coding; G.729.1; spectral envelope coding; difference Huffman coding; assembly optimization

10.3979/j.issn.1673-825X.2016.06.007

2015-05-19

2015-12-21

王春柳 chunliuwang@yeah.net

國家自然科學基金(61304066)

Foundation Item:The National Natural Science Foundation of China (61304066)

TN912.3

A

1673-825X(2016)06-0789-08

猜你喜歡
霍夫曼子帶差分
RLW-KdV方程的緊致有限差分格式
一種基于奇偶判斷WPT的多音干擾抑制方法*
數列與差分
子帶編碼在圖像壓縮編碼中的應用
抽象表現主義藝術先驅——漢斯·霍夫曼
基于虛擬孔徑擴展的子帶信息融合寬帶DOA估計
基于差分隱私的大數據隱私保護
相對差分單項測距△DOR
基于子帶模式的AMC技術算法分析
天使多快樂
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合