汪小雨,郭淑明,賈 鑫
(國家數字交換系統工程技術研究中心 河南 鄭州450000)
基于EVRC解碼算法的語音業務還原設計與實現
汪小雨,郭淑明,賈 鑫
(國家數字交換系統工程技術研究中心 河南 鄭州450000)
介紹了一種應用于碼分多址 (CDMA)移動通訊系統中的增強型變速率語音編解碼器(EVRC),闡述該聲碼器的解碼實現原理并對解碼過程進行C代碼仿真。在此基礎上提出了一個語音數據實時解碼播放的設計方案,實現對獲取的EVRC編碼的語音數據流進行解碼處理,通過設置數據緩沖池完成對語音數據的緩存,完成解碼輸出PCM語音數據到WAV文件的編碼轉換,從而實現輸出語音的實時播放和存儲。測試效果表明該方案能夠較好的實現對合成語音的實時播放。
EVRC;WAV;語音;業務還原
社會的快速發展以及人們對方便、快捷生活方式的需求不斷的推動著移動通訊技術的更新,移動終端逐漸成為人們工作、生活中必不可少的通信工具。語音業務作為移動通信系統的重要構成單元依舊據有著重要地。EVRC以其較高的合成語音質量和抗干擾性以及較低的碼率成為第三代移動通信系統CDMA2000的語音編解碼協議標準[1],對EVRC語音編解碼算法的研究以及進一步功能開發對于研究CDMA2000終端用戶的通信行為具有現實意義。傳統的EVRC聲碼器的實現基于DSP芯片的設計,受硬件的制約,其功能的可擴展性受到限制,文中從移動通信系統的業務實現與計算機軟件作業平臺相融合的角度出發,在理解EVRC協議的基礎上對解碼過程進行C代碼實現,在服務器端利用JNA技術移植封裝的解碼函數,進而實現對語音數據的解碼還原和播放存儲。該設計使解碼過程軟件化,擺脫了硬件的束縛,能夠為公共安全管理者提供更多、更方便的安全需求服務與技術支持。
EVRC是由美國通信工業協會TIA發布的IS-127標準協議提出的一種混合變速率編解碼器[2]。其核心算法是貝爾實驗室在1994年提出的松散碼激勵線性預測(Relaxed Code Excited Linear Prediction,RCELP)技術,該技術是一種依合成分析的碼激勵線性預測算法,不需要嚴格的與原始語音信號進行匹配,而是每幀的基音延時和幀與幀之間的基音為參數進行線性內插得到簡化的基音包絡,再用基音包絡對經過時域變形的殘差信號進行修正匹配。使用三種編碼速率:全速率8.55 kb/s(171 bit/包)、半速率4.0 kb/s(80 bit/包)、1/8速率0.8 kb/s(16 bit/包)[3]。編碼輸出的EVRC數據包的比特數分配如表1所示[4]。

表1 EVRC數據包比特分配
EVRC解碼器對接收的經過上述速率格式編碼的語音幀進行相應的解碼處理,其輸入包括數據包以及包類型指示[5]。如圖1所示包含3個功能模塊:RCELP解碼模塊、幀錯誤檢測模塊、后置濾波模塊。幀錯誤檢測模塊判決當前數據幀的解碼速率以及數據幀是否有錯誤,根據判決速率和幀錯誤標識,解碼器對獲取的語音數據包進行處理,每一幀解碼得到的參數進一步合成PCM語音信號,最后把合成語音經過后置濾波器,從而減少量化噪聲,提高合成語音質量[6-7]。

圖1 EVRC解碼原理框圖
1.1 幀錯誤檢測
幀錯誤檢測模塊輸入信號包括語音數據包以及包類型指示,其算法核心是根據包類型指示判定每幀的解碼速率以及每幀是否出錯,錯誤標識由FRAME_FLAG(m)表示。另外,接收到的數據包類型與幀錯誤標志映射關系如表2所示[8]。
如果判定幀速率為1/8速率,上一幀速率為1且錯誤標識FRAME_FLAG為FALSE,則本幀應判決為全速率1,幀錯誤標志FRAME_FLAG為TRUE;如果判定本幀速率為全速率1或者半速率1/2,但是基因延遲DELAY>100,則幀錯誤標志FRAME_FLAG應判定為TRUE[3]。

表2 包類型與幀錯誤標志映射
1.2 數據包解碼
由上可知,不同速率的數據包其解碼過程有所差異,全速率和半速率解碼主要包含線譜對(LSP)參數解碼、延時解碼、自適應碼本貢獻、固定碼本增益和固定碼本激勵等。線譜對(LSP)參數解碼過程中,如果幀有錯誤,則使用上一幀的LSP參數;否則就根據索引LSPIDX(k)從量化碼本中得到LSP參數值。延時解碼時,如果幀為差錯幀,則使用上一幀的延時參數,否則就根據DELAY從量化碼本中得到延時。如果速率為全速率,并且該幀為非差錯幀,而上一幀為差錯幀,則把上一有效幀的自適應碼本存儲進行變換,利用恢復出的延時包絡重建本幀的延時包絡。然后再利用解碼得到的索引值ACBGIDX、FCBGIDX和碼本求出自適應碼本增益gp(msub)和固定碼本增益gc(msub),由FCBSIDX求出固定碼本激勵c(n),最后再通過合成濾波器合成語音信號[9]。
1/8速率解碼包含線譜對(LSP)參數解碼和幀能量矢量解碼。1/8速率LSP參數解碼過程與全速率和半速率過程類似,速率幀能量矢量解碼中,如果判定某幀為差錯幀,則幀能量矢量γq(msub)定義為:

如果為非差錯幀,幀能量定義為:

繼而通過合成濾波器合成PCM語音信號[10]。
1.3 后置濾波
后置濾波模塊主要用于抑制量化噪聲,提高合成語音質量,其實現流程如圖2所示。

圖2 自適應后置濾波框圖
斜補償濾波器采用一階FIR濾波器,其作用是對矢量量化過程中引入的頻譜傾斜進行修正;長時后置濾波器為信號頻譜的精細結構進行加強,從而減少由基音延時的變化造成的基音輪廓的不連續性,使輸出語音信號更加平滑;短時后置濾波器的作用是加強輸出信號的共振峰結構,增益歸一化是對解碼過程中輸出語音損失的增益進行補償,使濾波前后的語音能量相同,從而提高合成語音質量[11]。
綜上所述,各個模塊實現功能定義明確,結合EVRC解碼協議中的具體流程即可完成程序代碼,圖3所示為解碼過程程序設計流程圖。

圖3 解碼過程軟件設計流程圖
解碼過程中輸入信號為經過EVRC算法編碼的語音數據包,而輸出信號為PCM語音數據,其格式為8 kHz采樣,16 bit量化。由于程序為C代碼實現,為了便于移植,采用動態鏈接庫方式對解碼函數進行封裝,提供解碼處理接口函數,通過在項目中導入接口函數來實現語音幀的解碼處理。
在完成EVRC算法解碼過程的基礎上,結合移動通信系統業務可編程化的趨勢,把傳統的基于終端基帶芯片實現語音數據解碼處理的功能轉移到服務器端,利用高性能計算機機強大的數據處理能力來對獲取的語音數據進行解析,而語音數據的傳輸和獲取仍然依靠傳統的移動蜂窩網絡[12]。
CDMA2000終端用戶通過基站建立正常通話,基站能夠獲取終端參數信息,接收并轉發語音數據,并把終端參數以及EVRC編碼的語音數據流發送給控制臺服務器端完成解碼處理,從而獲取PCM格式的合成語音數據。由于普通計算機的聲卡不支持PCM格式文件,無法直接通過麥克風播放,而WAV波形語音文件作為最早的數字音頻格式被廣泛的應用,因此為了更加方便進行存儲和播放,需對PCM數據轉換為WAV文件[13-14]。邏輯功能架構如圖4所示。

圖4 邏輯功能架構圖
整個設計在于控制臺部分對數據的處理,主要包括4部分,即語音接收、語音解碼、還原語音播放、語音數據格式轉換存儲。采用多線程處理模式,由控制臺主線程、語音接收線程、語音解碼線程、播放/存儲線程構成。
控制臺主線程進行語音數據傳輸,啟動/終止語音數據接收;語音接收線程負責在服務器端接收EVRC語音數據,并把語音數據保存到數據緩沖區供解碼線程調用;語音解碼線程讀取緩沖區的語音數據完成解碼處理,實現合成語音數據到PCM數據格式的轉換;播放/存儲線程實現對輸出語音數據的實時播放以及WAV格式編碼存儲[10,12]。具體功能處理流程如圖5所示。

圖5 設計流程圖
基站以20 ms為間隔向控制臺端口發送數據幀,控制臺服務器端利用Socket套接字編程技術實現數據的接收,通過偵聽對應的端口,有數據傳輸時開啟音頻接收線程,接收音頻數據。另外,為了確保通信連接的狀態,雙方定時發送心跳包,一旦發現數據中斷就終止數據的接收,并把狀態信息反饋給用戶[14]。
在服務器端通過建立的Socket連接讀取音頻數據,寫入數據緩沖隊列中,然后解碼線程調用解碼接口函數讀取數據進行譯碼處理,并把譯碼輸出的數據寫入音頻緩沖區,最后讀取緩沖區的語音數據進行播放和存儲,具體實現步驟如下:
1)建立Socket連接,接收語音數據流;
2)音頻數據解碼,從數據緩沖區讀取語音數據幀,利用JNA技術移植經過動態鏈接庫封裝的解碼接口函數進行語音數據的解碼處理。
3)實時播放
創建SourceDataLine對象,由AudioFormat類封裝其所需的音頻格式,包括編碼方式、數據采樣率等。然后不斷的把解碼輸出緩沖區中的數據寫入SourceDataLine對象,實現對還原語音的實時播放。
4)WAV文件存儲音頻數據
把解碼輸出的音頻數據寫入字節輸出流ByteArrayOutputStream對象,然后把該對象中的語音數據讀入AudioInputStream類的對象;創建WAV語音格式文件,利用AudioSystem類中的write方法把數據輸入流寫入指定文件進行保存。
File file=new File(fileName);
AudioSystem.write(audiolnputStream,AudioFileFormat.Type.WAVE,file);
在完成程序設計的基礎上,對相應功能進行測試,通過基站獲取語音數據流,實時上傳給控制臺服務器進行解碼處理,完成語音的還原播放。圖6分別為獲取的一段原始語音和解碼輸出語音波形圖,通過語音質量的對比可以得出解碼輸出的語音可以較自然的還原原始語音。

圖6 原始語音與解碼輸出語音信號波形
文中在深入研究EVRC算法的基礎上對解碼過程進行C代碼仿真實現,然后基于移動通信技術與計算機軟件平臺相融合的思想提出了基于計算機平臺的語音解碼方案,能夠完成對終端用戶語音數據的實時解碼播放處理。通過多線程與多緩存模式的使用,有效的保證了語音數據處理的連續性和實時性,提高了解碼效率,減小了處理時延,測試結果表明該設計能夠實現對終端用戶語音數據的解碼處理以及播放存儲,達到了預期的效果。
[1]王炳錫,王洪.變速率語音編碼[M].西安:西安電子科技大學出版社,2004.
[2]王炳錫.語音編碼[M].西安:西安電子科技大學出版社,2002.
[3]丁琦,王炳錫.EVRC語音編解碼算法的研究與實現[J].信息工程大學學報,2003,4(3):57-60.
[4]TIA/EIA/IS-127.Enhanced Variable Rate Codec,Speech Service Option 3 for Wideband Spread Spectrum Digital System[S].
[5]TIA/EIA/IS-718.Minimum Performance Specification for The Enhanced Variable Rate Codec,Speech Service Option 3 for Wideband Spread Spectrum Digital System[S].
[6]楊曉東,鄭樹強.語音編碼在IP調度系統中的應用研究[J].計算機與網絡,2014(6):61-63.
[7]李爽.增強型可變速率編碼器的設計與實現[J].微計算機信息,2007,23(27):177-179.
[8]彭勇群,蘇娟,楊熙.EVRC速率判決算法及DSP實現[J].電聲技術,2007,31(2):57-59.
[9]李彥,盧虎.基于DSP的EVRC聲碼器實現與軟件優化技術[J].空軍工程大學學報:自然科學版,2004,5(5):57-60.
[10]韓紅幫,肖紅,李海雁.基于IMBE語音編譯碼算法在PC機上的實時實現[J].電子設計工程,2015,23(7):186-188.
[11]李國漢,竺小松,劉越.ACELP算法在PC上實時播放的實現[J].聲學技術,2010,29(1):60-62.
[12]鄭珺,潘雪增.基于Android智能移動終端的遠程音頻采集系統的實現[J].中國有線電視,2012(5): 621-625.
[13]韓紅幫.基于ACELP語音編譯碼算法的軟件實現及應用[J].電子設計工程,2014,22(1):187-189.
[14]高健.基于機頂盒VoIP語音解碼模塊的設計與驗證[J].電子測試,2012(1):70-74.
The design and implement of voice service restoration based on algorithms of EVRC decode
WANG Xiao-yu,GUO Shu-ming,JIA Xin
(National Digital Switching System Engineering&Technological R&D Center,Zhengzhou 450000,China)
This paper introduces the Enhanced Variable Rate Codec(EVRC),which is widely used in Code Division Multiple Access(CDMA)communication system,describes the principal concepts of speech decoding and implement of the floating point C-simulation,then,puts forward a design of voice service real-time restoration to perform voice data for EVRC encoding.In order to store voice data,it also set up buffer pool,thereby it can achieve real-time playback and storage.Finally,the performance testing and analysis results show the design can achieve real-time broadcast for synthesis speech.
EVRC;WAV;voice;service restoration
TN929-53
:A
:1674-6236(2017)03-0061-04
2016-05-04稿件編號:201605027
國家科技支撐計劃課題支持(2014BAH30B01)
汪小雨(1990—),男,河南許昌人,碩士研究生。研究方向:無線接入網。