低速率、魯棒性好的語音編碼算法一直是軍事語音通信研究的重點,也是實現高性能語音通信系統的關鍵環節;诠曹椊Y構代數碼激勵線性預測(CS-ACELP)的G.729語音壓縮標準,因其在8kbps碼率下能夠實現帶寬低、延時小、音質高、抗干擾的語音通信,所以廣泛應用于IP電話、移動通信、多媒體網絡等領域[1]。
本文所研究的“無線語音通信系統”由1個基地站和9個外站組成,要求1個基地站能夠同時與9個外站進行雙向實時語音及數據無線通信,同時還要求系統體積小、功耗低。為了滿足這些設計要求,本文采用基于ARM(Advanced RISC Machine)硬件體系架構及嵌入式Linux操作系統構建算法平臺,并在平臺上移植了G.729編碼算法,應用Linux多進程編程方法及管道技術,實現了語音通信的系統設計方案。
由于G.729編碼算法復雜度較高,在系統硬件平臺上難以滿足1路編碼和9路解碼語音通信的實時性要求。因此,在保證語音質量及通信要求的前提下,需要研究語音編碼算法的優化策略及ARM實現方法,從而降低算法復雜度,減少系統耗時。
本文首先介紹基于ARM硬件體系架構及Linux系統的算法平臺構建方法,接著分析G.729算法在該平臺實際應用中存在的問題,針對這些問題,對G.729編解碼提出相應的優化策略,最后通過系統對比實驗,證明了優化策略的有效性。
1 基于ARM體系結構的算法平臺
系統的信息處理單元采用Intel新一代Xscale處理器PXA270,該處理器是Intel的ARMv5系列處理器的頂級產品,最高主頻達624MHz;PXA270采用了X86架構奔騰Ⅳ處理器上的多媒體擴展、SpeedStep動態電源管理等多項技術,使得多媒體處理能力得到極大提升;系統配有32KB數據Cache和32KB指令Cache,提供32位的系統總線,保證了指令及數據的高速調用;系統具有豐富的接口,可擴展性強。
1.1 系統硬件架構
基于ARM體系結構構間了系統硬件平臺,如圖1所示。模擬音頻信號通過音頻接口輸入到A/D轉換芯片,經A/D變換(PCM編碼)后轉變成數字音頻信號,交由PXA270進行G.729軟件編碼,編碼后的語音參數可以通過網絡接口與計算機網絡上的通信終端進行語音交互,也可以通過無線接口與遠端無線電設備進行語音交互。系統硬件平臺還具有液晶顯示、觸摸屏及RS232等控制接口,豐富了系統的人機交互功能。
圖1 基于ARM的系統硬件架構
1.2 系統軟件設計
平臺移植了Linux操作系統。Linux操作系統具有體系結構開放、安全性高、可任意裁剪定制等特點,能夠方便構建交互性好、運行穩定、可擴展性強的專用通信設備。
系統軟件采用Linux多進程編程方法,由應用程序主進程創建A/D進程、編碼進程、網絡收發進程、解碼進程、D/A進程,結合Linux管道技術、進程通信等手段,實現語音信號的實時采樣、編碼、發送、接收、解碼、播放并行處理環節,保證語音系統的運行平穩、流暢。語音信號的處理流程如圖2所示,系統軟件流程如圖3所示。
圖2 語音信號處理流程
圖3 系統語音信號處理軟件流程
“無線語音通信系統”主要應用于自然環境惡劣、電磁環境復雜、系統鏈路帶寬有限的戶外開放式場合,要求語音編碼算法效率高、壓縮比大、壓縮損失小、實時性好、抗干擾能力強。結合G.729的特點及應用
范圍[2-3],系統移植了ITU G.729編解碼算法。在系統硬件平臺上進行10ms語音數據采樣實測,結果為:
1路編碼耗時5.4ms,1路解碼耗時1.5ms。若進行1路編碼和9路解碼語音通信,則共需耗時5.4ms+1.5ms×9=18.9 ms>10ms,超過了系統的采樣時間10ms,會造成數據堆積,無法滿足實時通信的系統設計要求。因此,需要分析G.729編碼算法原理,研究算法優化策略,滿足系統對語音算法的高效性、實時性、高質量的要求。
2 G.729編解碼優化研究
語音編解碼優化采用算法改進及代碼優化兩種策略。算法改進是基于對G.729算法原理分析基礎上,對復雜功能模塊采用快速算法或簡化手段,達到降低算法復雜度、提高算法效率的目的[4-5];代碼優化是找出
算法運算強度最大環節或函數,應用ARM指令集將該環節或函數重載,達到算法優化目的。本語音通信系統結合兩種優化策略,充分發揮兩種方法的長處,達到綜合優化的目的。
2.1 G.729編碼器運算復雜度分析
將G.729源代碼移植到VC平臺上,利用profile分析工具的function timing功能選項,分析G.729編碼器各功能模塊系統運行時間比例,結果如表1所示。
表1 G.729編碼器各功能模塊系統運行時間比例
條目 |
功能模塊 |
系統運行時間(%) |
1 |
預處理、LP分析、LSP轉換 |
24.9 |
2 |
LSP矢量量化 |
21 |
3 |
開環基音分析 |
6.0 |
4 |
自適應碼本搜索 |
15.1 |
5 |
固定碼本搜索 |
19.8 |
6 |
增益計算、量化及其他模塊 |
13.2 |
由表1可知,G.729編碼器的運算工作主要集中在LSP(Line Spectrum Pair)矢量量化、自適應碼本搜索和固定碼本搜索環節。
2.2 基于PDS和NOS的LSP矢量量化算法
G.729編碼器中LSP的矢量量化采用兩級預測分裂式量化碼本結構,在一定程度上降低了計算復雜度。但是在各級量化器內部,最佳逼近碼字搜索算法采用傳統全搜索算法,該算法按照碼字在碼本中存儲的先后順序,計算輸入矢量X與所有碼字Yj之間的失真,根據最小距離準則,找出最佳匹配碼字。輸入矢量X與碼字Yj之間的失真定義為:
(1)
這種全搜索算法,需要遍歷碼本中所有碼字,在線計算量大,搜索時間長。特別是碼本空間較大的情況下,矢量維數較高,算法復雜度驟然提高。
基于上述分析,本文提出一種基于部分失真搜索(Partial Distortion Search:PDS)和范數排序搜索(Norm Order Search:NOS)的LSP矢量量化的綜合搜索算法,在保證算法可靠性前提下,大大減少算法的搜索次數,降低算法復雜度,提高編碼器效率。
PDS是在計算某個碼字與輸入矢量之間的失真過程中,不斷判斷累加失真是否超過目前最小失真,一旦超出則終止該碼字與輸入矢量之間計算失真。其原理如下:
設當前最小失真是
,若
(2)
則
,碼字
不是輸入矢量
的最鄰近碼字,可以被排除。從而可以停止該失真后面的碼字與輸入矢量的計算失真,轉入下一碼字失真的判斷。該算法增加s次比較運算,減少(k-s)次相乘和2(k-s)相加的運算。
范數排序搜索(NOS)算法是一種基于范數排序的等價誤差測度搜索準則,定義矢量
的2范數為
,定義矢量
的范數為
,定義等價失真測度為
(3)
根據柯西-施瓦茨不等式
(4)
可得輸入矢量
和碼字
的等價失真測度為
(5)
則范數排序搜索準則為:
設當前最小失真為
,如果
(6)
則
即
。
如果判斷式(6)成立,則當
時,可以刪除所有索引大于j的碼字;否則刪除所有索引小于j的碼字。
NOS算法能夠在快速排除碼字,但由于采用了等價的失真測度,所以在該算法中不能排除的碼字不適合PDS算法進行計算[6],在式(3)兩邊同時加上
,即得到
(7)
則改進的范數排序搜索準則為:
設當前最小失真測度為
,若
(8)
則有
(9)
通過式(2)和式(8)可以看出,采用改進的NOS算法和PDS算法相結合的快速搜索算法,替代G.729全搜索算法,能夠減少加乘運算指令,降低在線計算量,快速排除碼字,縮短搜索時間,達到快速搜索最佳逼近碼字的目的。
2.3 改進算法實驗
G.729第一級碼本搜索采用了改進PDS和NOS的綜合搜索算法,第二級碼本容量較小,采用單一PDS搜索算法。通過統計算法的平均每幀“計算失真”次數和平均每幀乘法次數,對比G.729全搜索算法與本文改進算法的算法效率,如表2所示。
表2 改進的LSP矢量量化搜索算法運算量的統計
搜索碼本 |
平均每幀“計算失真”次數 |
平均每幀乘法次數 |
全搜索法 |
改進算法 |
全搜索法 |
改進算法 |
L1(128) |
256 |
176 |
2560 |
912 |
L2(32) |
64 |
64 |
320 |
170 |
表2中,L1(128)表示128個碼字的碼本空間,L2(32)表示32個碼字的碼本空間。通過測試結果可以看出改進算法有效地排除了大部分碼字,第一級碼本中“計算失真”測度的次數僅為全搜索法的68.1%;PDS和NOS綜合算法使第一碼本中的乘法次數降為全搜索的35.6%。第二級碼本采用PDS算法,通過增加比較運算,減少加乘運算,使L2中乘法次數降為原來的53.2%。
2.4 基于ARM指令集的G.729優化策略
為了減小系統開銷,本文進一步采用代碼優化策略。代碼優化是找出算法運算強度最大環節或函數,應用ARM指令集將該環節或函數重載,達到算法優化目的,該方法更具通用性。
運用DevPartner工具對G.729算法進行模塊函數調用情況分析,結果如表3所示。綜合考慮系統運行時間比例及調用次數,可以看出算法主要運算量集中在L_mac()、L_mult()、L_add()、sature()及L_sub這幾個函數,這也是算法代碼優化重點所在。代碼優化策略主要包括C語音與匯編語言混合編程、定義inline(內聯)函數、修改變量類型等手段,達到代碼優化、提高算發運行效率的目的。
系統移植的G.729算法是ITU-T發布的ANSI C版本的源程序,為了保證算法的跨平臺特性,算法的一些基本運算都是ANSI C語言編寫,導致算法不夠精簡。本文采用了C語言與匯編語言混合編程的方法,應用精簡的ARM匯編指令集,對大量此類的基本運算進行了改造,大大提高了算法的效率。
表3 G.729模塊函數調用分析
函數模塊 |
系統調用時間(%) |
調用次數 |
L_mac |
24.8 |
4989496 |
L_mult |
13.9 |
6489474 |
L_add |
8.8 |
5411520 |
sature |
8.1 |
1957903 |
sub |
6.2 |
2183488 |
extract_l |
3.1 |
849895 |
L_msu |
2.8 |
967536 |
對于L_mac()、L_mult()、L_add()、sature()和L_sub這類代碼量小且調用頻繁的函數,將其定義為inline(內聯)函數,當該類函數被調用時,編譯器自動在目標代碼段展開該類函數,省去頻繁調用函數的開銷。
32位定點ARM編譯器在每次存儲char和short類型變量時,都需要額外地與0xFFFFFF00或0xFFFF0000寄存器變量進行“按位與”操作及移位操作。將char和short類型局部變量改為int或unsigned int類型,從而每次存儲char和short類型變量時節省了兩條指令。G.729算法中包含大量的char和short類型變量,這種改進方法大大降低了算法所需的指令數。
3 系統實驗
試驗條件:
在8kHz采樣率下,通過系統硬件平臺A/D接口,采樣160字節(10ms采樣周期)PCM 數據作為系統實驗數據源,在系統硬件平臺上測試語音編解碼算法的系統耗時,重復1000次試驗;語音質量的評價標準采用主觀評價指標MOS(Mean Opinion Scores)及客觀評價指標SNR(Signal Noise Ratio)。
試驗結果:
G.729經過算法改進和代碼優化前后的耗時對比實驗結果如表4所示。綜合優化后的算法編解碼耗時僅為原算法的48.1%和26.7%,所以有2.6ms+0.4ms×9=6.2 ms﹤10ms,可以實現實時1路編碼9路解碼的系統設計要求,而主觀評價指標MOS及客觀評價指標SNR沒有明顯下降,即語音質量沒有明顯下降。
表4 G.729綜合優化前后10ms數據編解碼耗時及MOS、SNR評價
|
10ms數據編碼耗時 |
10ms數據解碼耗時 |
SNR |
MOS |
G.729 |
5.4ms |
1.5ms |
2.2715dB |
4.5 |
優化算法 |
2.6ms |
0.4ms |
1.9990dB |
4.0 |
4 結束語
為了降低G.729算法的復雜度,本文提出了一種基于NOS和PDS的LSP矢量量化算法及基于ARM指令集的算法優化策略。系統實驗表明,改進后的G.729語音編解碼算法在單片ARM芯片構成的系統上完全能夠實現1路編碼9路解碼實時語音通信,而且重建語音保留了較高的自然度和可懂度,達到語音通信質量要求。文中討論的算法優化方法及ARM實現策略已經應用于實際系統的研制,并取得了很好的應用效果。算法平臺可廣泛應用于數字通信、保密通信、衛星系統及多媒體通信等領域,其構建方法及語音優化方案對于設計其它語音通信系統具有很好的借鑒意義。
參考文獻(References)
[1] 張繼東,楊震,李曉飛.ITU-T G.729 CS-ACELP語音編碼系統的性能分析[J].南京郵電學院學報:自然科學版,2000,20(4):91-94.
[2] 許麗紅,閻海鷹.G.729 CS-ACELP語音編碼算法的優化及其DSP實現[J].上海大學學報:自然科學版,2001,7(1):99-103.
[3] 趙曉群.數字語音編碼原理[M].北京:機械工業出版社,2007:35-60.
[4] Alcaim A,Silva L M.Modified CELP model with computationally efficient adaptive codebook search[J].IEEE Signal Processing Letters:1995,2(3):44-45.
[5] 吳海濤.G.729語音編解碼算法實現方法研究及DSP實現[J].哈爾濱理工大學學報:2005, 10(6):5-7.
[6] 木春梅.一種矢量量化的快速碼字搜索算法[J].合肥工業大學學報:2006,29(3):288-291.
作者簡介:穆道生,男,教授,碩士生導師。主要研究方向:數字通信,光纖通信。
09008