基于ACELP碼算法的網絡通信的實現及應用
其中bits為137比特編碼比特幀,signal為240*16bits的語音樣點數據,pCodParam和pDecParam為編、譯碼過程中的中間結構體參量。
本文引用地址:http://www.104case.com/article/236792.htm3 ACELP編譯碼算法在網絡通信中的應用
采用網絡服務器、客戶端通信模式,將ACELP編譯碼模塊應用到網絡語音通信中,最終實現了基于ACELP算法的網絡語音通信。具體通信過程為:服務器端采用聲卡以8 kHz采樣,16比特量化方式對語音信號進行實時采集,對采集到的語音信號每240樣點作為一幀送入ACELP編碼模塊進行壓縮編碼,壓縮后編碼數據幀長為137比特,每幀數據進一步封裝處理后通過網絡實時發送到客戶端。客戶端通過網絡實時接收服務器端編碼語音數據包,經ACELP譯碼處理后實時發送到聲卡進行播放處理,從而實現網絡語音通信。
3.1 語音信號實時采集與播放技術實現
在語音信號實時采集與播放實現過程中,如何實現聲卡采集與播放數據的實時性、連續性和可靠性是軟件設計的關鍵所在。在本文軟件系統中,通過直接凋用Windows最底層波形音頻接口函數,實現聲卡的編程控制,系統中采用了多線程多緩沖技術,即在服務器端,聲卡采集與語音壓縮編碼使用不同的工作線程,同時給聲卡提供多個用于承載采集數據的緩沖區,在同一時刻部分緩沖區供聲卡采集線程裝載數據的同時,另外已經裝滿數據的緩沖區供語音壓縮數據處理線程處理,從而使得語音信號采集和壓縮編碼處理工作同時進行,有效保證了采集數據的連續性和信號處理的實時性。服務器端聲卡實時采集原理框圖如圖3所示。

3.2 網絡通信技術實現
軟件系統采用客戶/服務器模式和TCP/IP協議,利用Socket套接字編程技術實現數據接收與發送。其中數據接收模塊采用VC++的CSo cket類,具體通信過程為:1)程序啟動的時候在指定端口創建網絡監聽套接字,用以監聽客戶端的連接請求。2)當有客戶請求連接時,創建接收套接字與客戶端建立連接。3)當有數據需要接收時,CAcceptSocket響應OnReceive消息,調用Receive函數從緩沖里獲取客戶端傳來的數據,實時的交給ACELP譯碼線程進行譯碼還原處理。4)當通信結束時,關閉監聽套接字和接收套接字并釋放資源。數據發送接口采用SOCKET通信技術,為了使系統在實時編碼處理的同時及時將編碼數據發送到服務器端,軟件采用多線程技術;同時為了避免由于待發送數據流不均勻導致的數據幀丟失等情況發生,系統采用了多緩沖機制。主程序編碼模塊將要發送的編碼數據源源不斷的向緩沖隊列中寫,同時發送線程不斷的檢測緩沖隊列中緩沖情況,當有緩沖滿時及時進行發送。由于多線程與多緩沖機制的有效使用,使得網絡通信能夠實時高效的運行。
3.3 系統情況介紹
該系統實現了基于ACELP算法的網絡語音通信,能夠對通信過程中的語音波形樣本數據、ACELP編碼數據等進行實時存儲和網絡發送,對通行過程中的波形進行實時顯示等。系統運行穩定,延遲較小,語音通信質量較好。圖4所示為本文設計的軟件系統運行截圖。

4 結束語
文中研究了TETRA系統采用的ACELP語音編譯碼算法,在此基礎上基于VC++編程技術實現ACELP編、譯碼軟件模塊,并采用動態鏈接庫對其進行封裝處理,接口簡單,使用方便。最后開發相應系統,實現了ACELP編譯碼算法在網絡語音通信中的應用。經實踐證明,ACELP算法編碼質量高,性能優異,具有較好的應用價值。
濾波器相關文章:濾波器原理
濾波器相關文章:濾波器原理
c++相關文章:c++教程
通信相關文章:通信原理
網線測試儀相關文章:網線測試儀原理
評論