王 苗,黃 冰,李 強(qiáng)
(桂林電子科技大學(xué) 信息與通信學(xué)院,廣西 桂林541004)
增強(qiáng)型變速率語音編解碼算法(EVRC)由于其較低的編碼速率和較好的語音質(zhì)量,在數(shù)字通信系統(tǒng)領(lǐng)域得到了廣泛的應(yīng)用。由于EVRC算法的復(fù)雜度較高,因此對硬件系統(tǒng)的性能要求很高。為了在低性能的硬件系統(tǒng)上實現(xiàn)該算法,對算法進(jìn)行優(yōu)化就顯得非常必要。固定碼本搜索是EVRC算法中比較重要的模塊,它占用的空間是算法占用總空間的16%,運(yùn)算量是全速率編解碼算法總運(yùn)算量的26%,因此成為算法優(yōu)化的重點。
在碼本搜索中,搜索的主要目的是使式(1)中的Tk最大:
其中d為目標(biāo)信號Xw(n)和加權(quán)濾波器單位沖擊響應(yīng)hwq(n)的互相關(guān)函數(shù),Ck為k序號的碼矢量,Φ為加權(quán)濾波器單位沖擊響應(yīng)hwq(n)的自相關(guān)矩陣。
傳統(tǒng)的碼本搜索方法通過對2個track進(jìn)行聯(lián)合搜索來搜索8位最佳脈沖位置。首先將55個位置分為5個 track,分別為 T0、T1、T2、T3 和 T4,每個 track 包含 11個脈沖位置。先對T0-T1進(jìn)行聯(lián)合搜索求得兩個脈沖位置,搜索量為 11×11;然后對 T2-T3,T4-T0,T1-T2 分別聯(lián)合搜索求得其他6個最佳脈沖位置??梢钥闯?,在T3和T4中各得到一個脈沖位置,在T0、T1和 T2中各得到2個脈沖位置,由此可以得到所需要的8個脈沖位置以及相應(yīng)的碼矢量,搜索量為 11×11×4。由于還有T0-T1、T4-T0、T1-T2為單脈沖 track等 3種情況,因此傳統(tǒng)的碼本搜索方法的搜索量為 11×11×4×4=1 936。
2000年1月,韓國學(xué)者Hochong Park提出了一種基于EVRC的高效碼本搜索方法,利用二階搜索方法來替代傳統(tǒng)的碼本搜索方法。這種算法將搜索量降低為傳統(tǒng)搜索量的23%,但是它僅僅考慮了在符合脈沖聯(lián)合規(guī)則的雙脈沖track中刪除脈沖的情況,而在單脈沖track和不符合脈沖聯(lián)合規(guī)則的雙脈沖trcak中刪除脈沖的情況則沒有考慮。新的搜索方法充分考慮了以上3種情況,利用分類處理的方法解決了這個問題。
二階固定碼本搜索方法是由兩階組成,在第一階中,利用快速連續(xù)脈沖搜索方法搜索出低質(zhì)量的碼本矢量。先假定單脈沖 track是T0-T1,在T0中搜索出一個脈沖位置使Tk最大。然后在這個脈沖位置的基礎(chǔ)上,在T1中搜索一個最佳位置使Tk最大,同理在前面得到的最佳脈沖位置的基礎(chǔ)上,分別在雙脈沖 track T2、T3、T4中各搜索出 2個脈沖位置。這樣就得到了一個包含8個脈沖位置的低質(zhì)量的碼本矢量C1。然后對于單脈沖track為T1-T2、T2-T3和T4-T0等情況,分別按上述方法求得 C2、C3和 C4,選擇 C1、C2、C3和 C4中 使 Tk最大的一個作為第一級搜索所得的低質(zhì)量的碼本矢量 C。
在第二階中,首先對在第一階中得到的8個脈沖進(jìn)行搜索,得到對Tk影響最小的那個脈沖,然后用新的脈沖去替換這個最不重要的脈沖,這種方法叫做脈沖替換法。首先從8個脈沖中依次去掉一個,然后求剩余7個脈沖的Tk值。比較求得的8個Tk值,最大的那個Tk值所對應(yīng)的去掉脈沖即為對Tk影響最小的脈沖。把它刪除后,重新搜索新的脈沖來替換它的位置。根據(jù)單脈沖track聯(lián)合規(guī)則,只存在單脈沖 track為T0-T1、T1-T2、T2-T3和T4-T0這4種情況。因此對Tk貢獻(xiàn)最小的脈沖位置只有以下3種情況:
(1)貢獻(xiàn)最小的脈沖在單脈沖track中;
(2)貢獻(xiàn)最小的脈沖在符合單脈沖track聯(lián)合規(guī)則的雙脈沖track中;
(3)貢獻(xiàn)最小的脈沖在不符合單脈沖track聯(lián)合規(guī)則的雙脈沖track中。
對于第一種情況,貢獻(xiàn)最小的脈沖在單脈沖track中,則新的脈沖搜索范圍被限制在原單脈沖track中,通過搜索該單脈沖track中剩余的10個脈沖,求得更新后的脈沖位置;對于第二種情況,貢獻(xiàn)最小的脈沖在符合單脈沖track聯(lián)合規(guī)則的雙脈沖track中,新的脈沖搜索只在2個符合聯(lián)合規(guī)則的track中進(jìn)行,例如在T0-T1為單脈沖track的情況下,如果貢獻(xiàn)最小的脈沖在T2中,則新脈沖必須在T0和T2中搜索;第三種情況,貢獻(xiàn)最小的脈沖在不符合單脈沖track聯(lián)合規(guī)則的雙脈沖track中,同樣將新的脈沖搜索范圍限制在原單脈沖中。具體的替換規(guī)則如表1所示。
表1 脈沖替換規(guī)則表
由前面描述可知,傳統(tǒng)固定碼本搜索方法的搜索量為1 936。在二階固定碼本搜索方法第一階中,對于每個包含11個有效脈沖位置的track來說,搜索最佳脈沖需要的搜索量為11。由于8個脈沖是連續(xù)搜索的,并且有4種不同的 track組合,因此第一階的搜索量為 11×8×4。在第二階中,可以假設(shè)8個脈沖位置中每個位置被刪除的概率是一樣的。首先以T0-T1為單脈沖track為例計算算法的搜索量。如果被刪除的脈沖位置是在T0、T1或者T3中,則搜索量為8+10,其中8為搜索最小貢獻(xiàn)脈沖的搜索量,10為搜索被刪除后剩余10個位置的搜索量;如果被刪除脈沖位置是在T2或者T4中,則搜索量為 8+11×2,其中 11×2為在 2個符合聯(lián)合規(guī)則的脈沖track中搜索替換脈沖的搜索量。因此,在單脈沖track情況下,搜索量N1為:
同理可得,單脈沖track為 T1-T2、T3-T4和 T4-T0等情況下搜索量分別為:
又因為語音信號是隨機(jī)的,這4種情況出現(xiàn)的概率相等,所以脈沖替換程序的搜索平均量為:
根據(jù)大量的語音測試可以得到,替換的脈沖數(shù)目越多,合成語音質(zhì)量與標(biāo)準(zhǔn)算法得到的合成語音質(zhì)量越接近。在綜合考慮了算法的搜索量和對合成語音質(zhì)量的要求后,選擇進(jìn)行3次脈沖替換,這樣既保證了合成語音的信噪比和標(biāo)準(zhǔn)算法得到的合成語音信噪比差別在0.01 dB以下,又使搜索量最小。此時的搜索量為:
與傳統(tǒng)固定碼本搜索方法的搜索量相比較可得:
因此,二階固定碼本搜索方法的搜索量僅為傳統(tǒng)搜索方法的21.5%,低于高效固定碼本搜索方法的23%。
3GPP提供了EVRC浮點源代碼,作者在不改變其他模塊的前提下,對固定碼本搜索模塊進(jìn)行修改,利用二階固定碼本搜索方法替代了傳統(tǒng)固定碼本搜索,并在Visual C++6.0環(huán)境下進(jìn)行仿真測試。經(jīng)過測試發(fā)現(xiàn),固定碼本搜索模塊的運(yùn)算量是傳統(tǒng)搜索運(yùn)算量的1/4,如表2所示,與上述搜索量對比情況相符。
表2 傳統(tǒng)搜索與二階搜索運(yùn)算量對比
選用的語料來源于CMU語料庫,該語料庫包含各種語境的聲音樣本,具有廣泛的代表性。選用的語音波形圖如圖1所示,圖2和圖3分別為采用傳統(tǒng)固定碼本搜索方法和二階固定碼本搜索方法得到的語音波形圖。經(jīng)過對比可以發(fā)現(xiàn),采用2種固定碼本搜索方法得到的語音波形有較高的相似度。
表3 傳統(tǒng)方法與二階方法所得語音信噪比
為了更客觀地評價二階固定碼本搜索方法的性能,分別求得了以上3段語音的信噪比,如表3所示。原始語音信號經(jīng)過二階固定碼本搜索方法所得語音的信噪比與傳統(tǒng)固定碼本搜索方法所得語音的信噪比僅相差0.01 dB。
二階固定碼本搜索方法使搜索量降低為傳統(tǒng)搜索方法的21.5%,且獲得語音的信噪比與傳統(tǒng)固定碼本搜索方法所得語音的信噪比僅相差0.01 dB,是一種比較理想的固定碼本搜索方法。
[1]PARK H.Efficient codebook search method of EVRC speech codec[M].IEEE SIGNAL PROCESSING LETTERS,2000.
[2]王炳錫,王洪.變速率語音編碼(第 1版)[M].西安:西安電子科技大學(xué)出版社,2004.
[3]趙力.語音信號處理(第1版)[M].北京:機(jī)械工業(yè)出版社,2003.
[4]鮑長春.低比特率數(shù)字語音編碼基礎(chǔ)(第1版)[M].北京:北京工業(yè)大學(xué)出版社,2001.
[5]姚天任.數(shù)字語音處理(第1版)[M].武漢:華中科技大學(xué)出版社,2003.