李 強(qiáng),明 艷
在語音信號處理、多媒體通信、通信原理和移動通信等課程中,都會涉及語音編碼相關(guān)的知識,如G.711A律64 kb/s的PCM編碼、第二代移動通信GSM系統(tǒng)中的RPE-LTP編碼和第三代移動通信系統(tǒng)中的AMR編碼等[1-3]。在這些理論課的授課過程中,老師大多只是講解語音編碼的基本原理、相關(guān)標(biāo)準(zhǔn)和應(yīng)用場景等內(nèi)容,學(xué)生不能親身體驗(yàn)用這些標(biāo)準(zhǔn)實(shí)現(xiàn)的編碼器輸出語音的質(zhì)量,如語音的音質(zhì)、清晰度、自然度和辨識度等[4]。學(xué)習(xí)這些課程的學(xué)生也大多不會考慮用軟件,如用C語言去實(shí)現(xiàn)相關(guān)標(biāo)準(zhǔn)的語音編碼器。如果學(xué)生用軟件實(shí)現(xiàn)了這些語音編碼器,也沒有一個(gè)便捷的系統(tǒng)或平臺給予支撐,如對語音的質(zhì)量進(jìn)行測試,采用這些實(shí)現(xiàn)的編碼器進(jìn)行語音通話等。針對這些教學(xué)和學(xué)生對語音質(zhì)量測試和應(yīng)用的需求,本文采用了多線程模塊化的軟件結(jié)構(gòu),通過UDP/IP協(xié)議[5],利用校園局域網(wǎng)為傳輸通道,實(shí)現(xiàn)了一個(gè)語音通信實(shí)驗(yàn)系統(tǒng)。該系統(tǒng)除了支持多種標(biāo)準(zhǔn)的語音編碼器進(jìn)行雙向?qū)崟r(shí)通話外,還能測試編碼器語音的主觀質(zhì)量、編解碼時(shí)延、傳輸流量、語音壓縮比等指標(biāo)。由于系統(tǒng)采用了模塊化的設(shè)計(jì)結(jié)構(gòu),學(xué)生可以把自己用軟件實(shí)現(xiàn)的語音編解碼器添加到系統(tǒng)的編解碼模塊中,即可利用該系統(tǒng)實(shí)現(xiàn)雙向語音實(shí)時(shí)通話,并進(jìn)行性能指標(biāo)的測試。因此,本文實(shí)現(xiàn)的系統(tǒng)具有良好的靈活性和擴(kuò)展性,可用于與語音編碼相關(guān)課程的實(shí)驗(yàn)和理論教學(xué)中。
基于局域網(wǎng)的語音通信實(shí)驗(yàn)系統(tǒng)的架構(gòu)如圖1所示。系統(tǒng)由語音信號的采集,語音數(shù)據(jù)的存儲、統(tǒng)計(jì)和播放,語音編解碼器,傳輸控制和網(wǎng)絡(luò)傳輸5個(gè)部分組成。
1.1.1 語音信號的采集
系統(tǒng)通過PC機(jī)聲卡采用音頻波形API技術(shù)[6]對語音信號進(jìn)行實(shí)時(shí)采集、量化和編碼。采樣率、量化方式和量化級數(shù)可根據(jù)需要通過系統(tǒng)界面進(jìn)行設(shè)置。采集到的數(shù)據(jù)以語音編碼的幀長為單位填充到設(shè)置的數(shù)據(jù)緩沖區(qū)中。
圖1 基于局域網(wǎng)的語音通信實(shí)驗(yàn)系統(tǒng)架構(gòu)
1.1.2 語音的存儲、統(tǒng)計(jì)和播放
在進(jìn)行語音通信前,需對語音數(shù)據(jù)進(jìn)行連續(xù)保存。系統(tǒng)采用乒乓存儲結(jié)構(gòu)[7],設(shè)置兩個(gè)語音緩沖隊(duì)列,輪流對兩個(gè)緩沖區(qū)讀寫數(shù)據(jù)。某一緩沖區(qū)被填滿語音數(shù)據(jù)后,系統(tǒng)立刻解鎖該緩沖區(qū),并讀取數(shù)據(jù),采用語音編碼器對數(shù)據(jù)進(jìn)行壓縮編碼,形成數(shù)據(jù)碼流后,通過局域網(wǎng)發(fā)送到接收端,同時(shí)把該緩沖區(qū)重新加入語音緩沖區(qū)隊(duì)列中。
為了對發(fā)送到局域網(wǎng)的數(shù)據(jù)流量進(jìn)行統(tǒng)計(jì),在緩沖區(qū)中設(shè)定了一個(gè)事件,當(dāng)壓縮后的數(shù)據(jù)碼流的數(shù)據(jù)量達(dá)到事件設(shè)定的大小,便開始發(fā)送數(shù)據(jù)。本系統(tǒng)把發(fā)送一次的數(shù)據(jù)稱為一個(gè)包,通過統(tǒng)計(jì)包的個(gè)數(shù)來計(jì)算發(fā)送的數(shù)據(jù)流量。
接收端接收到語音數(shù)據(jù)碼流后,采用與發(fā)送端相同標(biāo)準(zhǔn)的語音解碼器進(jìn)行解碼,把解碼后的數(shù)據(jù)寫入接收緩沖區(qū)中。本系統(tǒng)對接收緩沖區(qū)設(shè)置了兩個(gè)指針,即播放指針和寫指針。寫指針解決數(shù)據(jù)覆蓋問題,指示用于寫入數(shù)據(jù)緩沖區(qū)的位置;而播放指針則表示當(dāng)前所播放的數(shù)據(jù)末尾。接收端通過調(diào)用Media庫里的WaveOut函數(shù)對解碼后的語音進(jìn)行播放。
1.1.3 語音編解碼器
本系統(tǒng)實(shí)現(xiàn)了G.711 A律PCM編碼、G.729、MELP、SMV和ARM語音編解碼器。G.711是ITU-T提出的8 kHz采樣,8 bit非均勻量化的波形編碼標(biāo)準(zhǔn)[8],廣泛用在電話通信中,其原理和方法是通信原理課程的重要內(nèi)容。G.729聲碼器使用了LPC分析合成技術(shù),通過使得實(shí)際語音與合成語音之間誤差能量最小為準(zhǔn)則來進(jìn)行編碼,該聲碼器具有較高的壓縮率;MELP采用多帶混合激勵等技術(shù)提高了合成的語音質(zhì)量,可實(shí)現(xiàn)1.2~4 kb/s的低碼率聲碼器;SMV是3G移動通信系統(tǒng)變速率語音編碼選項(xiàng)之一[9-11]。針對這些不同標(biāo)準(zhǔn),不用應(yīng)用場景的語音編碼器,本文系統(tǒng)通過調(diào)用語音編解碼器函數(shù)的方式來實(shí)現(xiàn)對采集或接收到的語音進(jìn)行實(shí)時(shí)編解碼。
1.1.4 傳輸控制
UDP是一種面向無連接的協(xié)議,具有資源消耗小,處理速度快的優(yōu)點(diǎn)[12],通常用于音頻、視頻和普通數(shù)據(jù)的傳送。本系統(tǒng)為了實(shí)現(xiàn)語音數(shù)據(jù)的實(shí)時(shí)傳送,采用了UDP Socket作為網(wǎng)絡(luò)端口的監(jiān)聽[13],該Socket采用異步工作模式。為了實(shí)現(xiàn)全雙工語音通信,系統(tǒng)分別建立發(fā)送和接收UDP Socket,通過綁定接收端和發(fā)送的端口號,對Socket的發(fā)送數(shù)據(jù)和接收數(shù)據(jù)進(jìn)行消息處理。當(dāng)收發(fā)雙方啟動程序并監(jiān)聽后,均處于偵聽通話邀請狀態(tài),當(dāng)某一方向另一方發(fā)出通話邀請,被叫方能夠聽到發(fā)送端的聲音,當(dāng)點(diǎn)擊開始通話后,雙方便進(jìn)入語音通信狀態(tài),收發(fā)兩端的系統(tǒng)啟動錄音和放音線程,即可進(jìn)行全雙工語音通信。
1.1.5 網(wǎng)絡(luò)傳輸
系統(tǒng)以局域網(wǎng)作為語音通信的傳輸媒介。兩臺接入局域網(wǎng)的PC機(jī)啟動并運(yùn)行語音通信測試系統(tǒng)軟件后,設(shè)置收發(fā)兩端的IP地址,選擇相同的編碼器,并呼叫對方,當(dāng)對方確認(rèn)后,便可通過局域網(wǎng)進(jìn)行語音通話。
系統(tǒng)工作在peer to peer模式,即收發(fā)雙方使用同一個(gè)程序[14]。如圖2所示,是語音通信采用的線程架構(gòu),其中,主線程用來響應(yīng)程序界面的設(shè)置。語音發(fā)送和語音接收是分開進(jìn)行的,均通過異步調(diào)用方式來實(shí)現(xiàn)。語音的發(fā)送通過Bufferfull事件觸發(fā)mˉpWaveInˉBufferFull來實(shí)現(xiàn),而收發(fā)兩端系統(tǒng)則通過 mˉpUdpServerˉPacketReceived來接收語音數(shù)據(jù),并調(diào)用mˉpWaveOut.Play來播放語音。監(jiān)聽是否收到數(shù)據(jù)也采用了異步方式,目的是減少線程數(shù)目和開銷。
圖2 多線程架構(gòu)
通過引入多線程,系統(tǒng)可以同時(shí)發(fā)送和播放語音。語音的發(fā)送和播放通過SendTestAudio和Play-TestAudio線程來實(shí)現(xiàn)。引入SendTest的目的是通過編碼和播放測試語音,測試語音質(zhì)量和計(jì)算語音編碼器的編碼效率。
實(shí)驗(yàn)系統(tǒng)界面如圖3所示,在 “參數(shù)設(shè)定”中選擇語音編碼器類型、采樣率和量化級數(shù)。當(dāng)對方收到通話邀請時(shí),系統(tǒng)會自動詢問是否匹配參數(shù),只有參數(shù)匹配一致才能正常傳輸。 “設(shè)備選擇”的設(shè)置主要是考慮到當(dāng)一個(gè)終端擁有多個(gè)語音輸入輸出設(shè)備時(shí),要對參與工作的設(shè)備進(jìn)行選擇?!氨镜卦O(shè)置”用于設(shè)置本地IP地址和端口號11100。本地設(shè)置完成后,單擊 “監(jiān)聽”,然后在“目標(biāo)設(shè)置”中,設(shè)置接收端的IP地址和端口號11100。收發(fā)兩端點(diǎn)擊 “開始通話”,則可以進(jìn)行雙向的實(shí)時(shí)通信。在通話過程中,系統(tǒng)還可以實(shí)時(shí)顯示編解碼延時(shí)、接收和發(fā)送數(shù)據(jù)包的數(shù)量和字節(jié)數(shù)。“發(fā)送測試音”和 “播放測試音”可以對wav格式的語音文件進(jìn)行編解碼處理和播放。
圖3 語音通信實(shí)驗(yàn)系統(tǒng)界面
本文設(shè)計(jì)的系統(tǒng)能測試語音質(zhì)量、壓縮比、編解碼延時(shí)、數(shù)據(jù)流量等指標(biāo),可用于語音編碼相關(guān)課程的理論和實(shí)驗(yàn)教學(xué),如老師講解某個(gè)語音編碼器的編碼原理和方法時(shí),可以現(xiàn)場為學(xué)生播放經(jīng)過該系統(tǒng)輸出的語音,也可以比較不同語音編碼器的特點(diǎn),如音質(zhì)、算法復(fù)雜度、壓縮比等。實(shí)驗(yàn)老師用該系統(tǒng)可以開發(fā)出一些相關(guān)的實(shí)驗(yàn)項(xiàng)目,如要求學(xué)生去實(shí)現(xiàn)一些語音編碼器,然后用該系統(tǒng)進(jìn)行測試等。
圖4 G.711 A率編碼器測試結(jié)果
如果在本地和目標(biāo)IP地址均設(shè)置為127.0.0.1,系統(tǒng)可以進(jìn)行自發(fā)自收的自環(huán)測試。自環(huán)測試時(shí),點(diǎn)擊 “發(fā)送測試音”,從PC機(jī)中選擇要編碼的語音文件,然后點(diǎn)擊 “開始通話”,用選擇的語音編碼器對語音文件數(shù)據(jù)進(jìn)行編解碼處理;再點(diǎn)擊 “發(fā)送測試音”,可以播放經(jīng)過編解碼后的語音,如果點(diǎn)擊 “播放測試音”,則可播放沒有經(jīng)過任何編解碼處理的原始語音文件。
如圖3所示,是沒有經(jīng)過壓縮編碼的某個(gè)語音文件的自環(huán)測試界面,接收和發(fā)送字節(jié)數(shù)均為110.375 kB,即該語音測試文件的大小為110.375 kB。如圖4所示,顯示了該測試語音文件經(jīng)G.711 A率編碼器的測試結(jié)果,收發(fā)字節(jié)數(shù)為55.187 5 kB,編解碼延時(shí)分別為2.1μs和1.2μs,通過計(jì)算該編碼器發(fā)送字節(jié)數(shù)和原始語音文件字節(jié)數(shù)之比,可得出該編碼器的語音壓縮比為1/2。分別點(diǎn)擊圖4系統(tǒng)界面的 “發(fā)送測試音”和 “播放測試音”,啟動語音的播放,通過試聽,可以體驗(yàn)經(jīng)過編解碼處理后的語音和原始語音之間音質(zhì)的差別,評估出語音編碼器的主觀語音質(zhì)量。如圖5所示,是G.729語音編碼器的測試結(jié)果,收發(fā)字節(jié)數(shù)均為7.031 25 kB,壓縮比接近1/16,編解碼延時(shí)分別為678.6μs和256.3 μs。
圖5 G.729編碼器測試結(jié)果
圖6 采用SMV編碼器的語音通信界面
如圖6所示,是在兩臺PC機(jī)上運(yùn)行本文語音通信測試系統(tǒng),通過校園局域網(wǎng)進(jìn)行語音通話的界面。兩端系統(tǒng)均選擇SMV 4 kb/s語音編碼器,“本地設(shè)置”和 “目標(biāo)設(shè)置”分別輸入本地和目的IP地址,點(diǎn)擊 “開始通話”后,兩端語音通信測試系統(tǒng)即可進(jìn)行雙向?qū)崟r(shí)語音通信,并實(shí)時(shí)顯示收發(fā)數(shù)據(jù)流量和編解碼延時(shí)。
本文采用多線程模塊化結(jié)構(gòu)進(jìn)行軟件設(shè)計(jì),通過UDP/IP協(xié)議,以局域網(wǎng)為傳輸通道,實(shí)現(xiàn)了具有良好可擴(kuò)展性和實(shí)用性的語音通信系統(tǒng)。該系統(tǒng)既能通過局域網(wǎng)絡(luò)進(jìn)行雙向?qū)崟r(shí)語音通信,又能測試各種語音編碼器語音的主觀質(zhì)量和壓縮比,還能實(shí)時(shí)顯示語音通信過程中編解碼延時(shí),可用于語音信號處理相關(guān)課程的理論教學(xué)案例演示,也可基于該系統(tǒng)開發(fā)相應(yīng)的實(shí)驗(yàn)項(xiàng)目,還可用于學(xué)生測試自己實(shí)現(xiàn)的語音編碼器的質(zhì)量。
[1]張鳴.通信原理仿真實(shí)驗(yàn)系統(tǒng)設(shè)計(jì)[J].實(shí)驗(yàn)技術(shù)與管理,2013,30(6):54-57,61.
[2]晏燕,王惠琴.多媒體通信課程的教學(xué)改革與探討[J].蘭州文理學(xué)院學(xué)報(bào)(自然科學(xué)版),2014,28(4):107-110,128.
[3]涂繼輝,蘇麗秋.基于OpenBTS和Asterisk的移動通信實(shí)驗(yàn)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].實(shí)驗(yàn)技術(shù)與管理,2014,31(5):65-70.
[4]楊毅,鄧北星,馬曉紅.《語音信號處理》實(shí)驗(yàn)教學(xué)研究與實(shí)踐[J].實(shí)驗(yàn)科學(xué)與技術(shù),2012,10(6):112-115,180.
[5]崔鶴,劉云清,盛家進(jìn).基于FPGA的UDP/IP協(xié)議棧的研究與實(shí)現(xiàn)[J].長春理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2014,37(2):133-137.
[6]馮金金,吳游.基于DSP的音頻信號壓縮通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].信息技術(shù),2016(8):200-203.
[7]李桂菊.利用DSP底層結(jié)構(gòu)提高M(jìn)PEG-4編碼的實(shí)時(shí)性[J].中國光學(xué),2011,4(5):461-467.
[8]徐海潮,張江鑫,蔣伊樂.基于DM365的IP語音終端設(shè)計(jì)[J].杭州電子科技大學(xué)學(xué)報(bào) (綜合版),2013,33(5):146-149.
[9]郭燕.多點(diǎn)語音通信在船舶通信系統(tǒng)中的仿真[J].艦船科學(xué)技術(shù),2016,38(7):98-99.
[10]李強(qiáng),謝虹恩.改進(jìn)的基于MELP的非連續(xù)傳輸語音編碼算法[J].重慶郵電大學(xué)學(xué)報(bào)(自然科學(xué)版),2014,26(5):636-641.
[11]夏曉峰.可選取模式聲碼器SMV算法優(yōu)化[J].雞西大學(xué)學(xué)報(bào) (綜合版),2014,14(9):49-51.
[12]范開俊,徐丙垠,陳羽,等.配電網(wǎng)分布式控制實(shí)時(shí)數(shù)據(jù)的GOOSE over UDP傳輸方式[J].電力系統(tǒng)自動化,2016,40(4):115-120.
[13]李淑梅,王志彬.Socket在局域網(wǎng)聊天系統(tǒng)中的應(yīng)用[J].吉林師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2014,35(1):71-73.
[14]張立晨,張晉豫.基于分區(qū)概率的P2P實(shí)時(shí)流媒體緩存策略[J].軟件,2014,35(4):12-17.
實(shí)驗(yàn)科學(xué)與技術(shù)2017年6期