《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 嵌入式Ad-Hoc網(wǎng)絡(luò)下的實(shí)時(shí)語(yǔ)音通信
嵌入式Ad-Hoc網(wǎng)絡(luò)下的實(shí)時(shí)語(yǔ)音通信
來(lái)源:微型機(jī)與應(yīng)用2011年第23期
楊大力,謝維波,杜智敏
(1.華僑大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,福建 廈門(mén) 361021;2.華僑大學(xué) 廈門(mén)軟件園嵌入式技術(shù)開(kāi)
摘要: 綜合Ad-Hoc網(wǎng)絡(luò)技術(shù)、多媒體開(kāi)發(fā)技術(shù)、嵌入式技術(shù)和RTP實(shí)時(shí)傳輸技術(shù),設(shè)計(jì)實(shí)現(xiàn)了一套在嵌入式Ad-Hoc網(wǎng)絡(luò)環(huán)境下的全雙工實(shí)時(shí)語(yǔ)音通信系統(tǒng)。語(yǔ)音編碼、抖動(dòng)處理、靜音檢測(cè)有效地提高了系統(tǒng)的語(yǔ)音傳輸質(zhì)量。實(shí)驗(yàn)表明,該系統(tǒng)性能穩(wěn)定,適應(yīng)性強(qiáng),有較廣泛的應(yīng)用。
Abstract:
Key words :

摘  要: 綜合Ad-Hoc網(wǎng)絡(luò)技術(shù)、多媒體開(kāi)發(fā)技術(shù)、嵌入式技術(shù)和RTP實(shí)時(shí)傳輸技術(shù),設(shè)計(jì)實(shí)現(xiàn)了一套在嵌入式Ad-Hoc網(wǎng)絡(luò)環(huán)境下的全雙工實(shí)時(shí)語(yǔ)音通信系統(tǒng)。語(yǔ)音編碼、抖動(dòng)處理、靜音檢測(cè)有效地提高了系統(tǒng)的語(yǔ)音傳輸質(zhì)量。實(shí)驗(yàn)表明,該系統(tǒng)性能穩(wěn)定,適應(yīng)性強(qiáng),有較廣泛的應(yīng)用。
關(guān)鍵詞: 嵌入式;Ad-Hoc;語(yǔ)音通信;RTP

 無(wú)線自組織網(wǎng)絡(luò)(Ad-Hoc)最早起源于20世紀(jì)70年代美國(guó)國(guó)防部高級(jí)研究署(DARPA)資助的分組無(wú)線網(wǎng)絡(luò)PRNET(Packet Radio Network),其最初的動(dòng)機(jī)之一是滿足戰(zhàn)場(chǎng)生存的軍事需求。Ad-Hoc是一種無(wú)中心、自組織、對(duì)等式、節(jié)點(diǎn)可移動(dòng)和多跳路由的移動(dòng)通信網(wǎng)絡(luò),這種網(wǎng)絡(luò)結(jié)構(gòu)不需要中心節(jié)點(diǎn),具有良好的自組織能力、抗毀性能、機(jī)動(dòng)性和魯棒性[1-2]。無(wú)線自組織網(wǎng)絡(luò)主要應(yīng)用在軍事、民用、治安、救災(zāi)等復(fù)雜而環(huán)境惡劣的場(chǎng)所中。在這些惡劣環(huán)境中,沒(méi)有鋪設(shè)通信基礎(chǔ)設(shè)施或者通信設(shè)施遭到了破壞,迫切需求Ad-Hoc網(wǎng)絡(luò)的投產(chǎn)使用。而實(shí)時(shí)語(yǔ)音通信作為人與人之間一種最直接的溝通手段,應(yīng)用在軍事、治安、救災(zāi)等領(lǐng)域是必然的需求。本文正是基于這種需求,設(shè)計(jì)并實(shí)現(xiàn)了一套在嵌入式Ad-Hoc網(wǎng)絡(luò)環(huán)境下的實(shí)時(shí)語(yǔ)音通信系統(tǒng)。本設(shè)計(jì)涉及Ad-Hoc網(wǎng)絡(luò)、Linux無(wú)線網(wǎng)卡驅(qū)動(dòng)、實(shí)時(shí)流媒體傳輸?shù)燃夹g(shù)。首先,Ad-Hoc網(wǎng)絡(luò)采用了按需路由中的AODV協(xié)議[3-4]來(lái)搭建實(shí)驗(yàn)的網(wǎng)絡(luò)環(huán)境,在嵌入式平臺(tái)(MagicARM2410)上進(jìn)行了USB無(wú)線網(wǎng)卡驅(qū)動(dòng)RT73的移植,對(duì)網(wǎng)絡(luò)節(jié)點(diǎn)的分布做了合理的布局和連通性測(cè)試;其次,結(jié)合多媒體編程技術(shù)和流媒體實(shí)時(shí)傳輸技術(shù)[5],實(shí)現(xiàn)了語(yǔ)音采集和實(shí)時(shí)通信,對(duì)語(yǔ)音通信質(zhì)量做了分析和改善。與傳統(tǒng)的語(yǔ)音通信比較,本系統(tǒng)具有獨(dú)特的優(yōu)勢(shì):不需要鋪設(shè)基礎(chǔ)通信設(shè)施,無(wú)中心,自組織,可移動(dòng),多跳全雙工語(yǔ)音通信,可以應(yīng)用在治安、礦井、救災(zāi)等領(lǐng)域。
1 整體方案設(shè)計(jì)
 本語(yǔ)音通信系統(tǒng)的移動(dòng)終端是由廣州致遠(yuǎn)電子有限公司開(kāi)發(fā)的教學(xué)實(shí)驗(yàn)開(kāi)發(fā)平臺(tái)MagicARM2410,該實(shí)驗(yàn)平臺(tái)采用ARM920T內(nèi)核的S3C2410A微處理器,工作頻率高達(dá)203 MHz,擴(kuò)展有充足的存儲(chǔ)資源,具有I2S數(shù)字音頻接口和8英寸真彩TFT液晶屏,滿足系統(tǒng)的需求。網(wǎng)卡選用的是華碩的USB無(wú)線網(wǎng)卡WL-167g,該網(wǎng)卡的芯片是RT73芯片,擁有官網(wǎng)開(kāi)發(fā)的Linux驅(qū)動(dòng),還有開(kāi)源社區(qū)提供的驅(qū)動(dòng),有較多的文檔資料可供查詢。開(kāi)發(fā)平臺(tái)的操作系統(tǒng)是Linux-2.6.14.1,在該操作系統(tǒng)下對(duì)AODV路由協(xié)議、UDA1341TS聲卡驅(qū)動(dòng)、USB驅(qū)動(dòng)、RT73無(wú)線網(wǎng)卡驅(qū)動(dòng)進(jìn)行移植。
 語(yǔ)音通信系統(tǒng)終端主要分為音頻采集、音頻編碼、傳輸、接收、音頻解碼、音頻播放6個(gè)模塊,如圖1所示。系統(tǒng)采用多線程技術(shù),分為音頻采集、編碼傳輸、接收解碼和音頻播放4個(gè)線程,收發(fā)緩沖使用環(huán)形緩沖區(qū),其作為臨界資源,采集與編碼傳輸競(jìng)爭(zhēng)一個(gè)環(huán)形緩沖區(qū),播放與接收解碼競(jìng)爭(zhēng)一個(gè)環(huán)形緩沖區(qū)[6],如圖2所示。


2 系統(tǒng)實(shí)現(xiàn)
2.1 搭建Ad-Hoc網(wǎng)絡(luò)環(huán)境

 本系統(tǒng)使用的路由協(xié)議源碼是aodv-uu-0.9.5,這是一款成熟的Linux平臺(tái)下的AODV路由協(xié)議實(shí)現(xiàn),移植到本系統(tǒng)只需要針對(duì)操作系統(tǒng)內(nèi)核做一些相應(yīng)的修改和參數(shù)設(shè)置。使用交叉編譯工具arm-linux-gcc3.4.1對(duì)AODV源碼進(jìn)行交叉編譯,得到適合Linux-2.6.14.1內(nèi)核的路由協(xié)議內(nèi)核態(tài)模塊kaodv和用戶態(tài)模塊aodv。為了對(duì)網(wǎng)絡(luò)節(jié)點(diǎn)進(jìn)行合理的拓?fù)浞植?,在室?nèi)使用了屏蔽的方案,如圖3所示,進(jìn)行4個(gè)節(jié)點(diǎn)的路由線路全雙工語(yǔ)音通信時(shí),Node1分別與Node3、Node4互相設(shè)置MAC地址屏蔽,Node2與Node4互相設(shè)置MAC地址屏蔽,這樣就能保證按照本文設(shè)計(jì)的路由線路方式進(jìn)行語(yǔ)音傳輸。

2.2 音頻參數(shù)設(shè)置
 音頻信號(hào)是一種連續(xù)變化的模擬信號(hào),計(jì)算機(jī)只能記錄和處理二進(jìn)制的數(shù)據(jù),自然音源的模擬音頻信號(hào)必須經(jīng)過(guò)量化成為數(shù)字音頻信號(hào)之后,才能被計(jì)算機(jī)進(jìn)一步處理。采樣和量化是音頻編程程序員理解聲音數(shù)字化的兩個(gè)關(guān)鍵步驟,進(jìn)行音頻編程時(shí)經(jīng)常用到的技術(shù)指標(biāo)有采用頻率、量化位數(shù)和聲道數(shù)。常用的采樣頻率有8 kHz、16 kHz、44.1 kHz、48 kHz等;常用的量化位數(shù)有8 bit、12 bit、16 bit;聲道有單聲道和雙聲道。本系統(tǒng)使用的是8 kHz、16 bit、單聲道。
//設(shè)置采樣頻率
Arg=采樣頻率;
Status=ioctl(dsp_fd,SOUND_PCM_WRITE_RATE,&Arg);
//設(shè)置量化位數(shù)
Arg=量化位數(shù);
Status=ioctl(dsp_fd,SOUND_PCM_WRITE_BITS,&Arg);
//設(shè)置聲道數(shù)
Arg=聲道數(shù)
Status=ioctl(dsp_fd,SOUND_PCM_WRITE_CHANNELS,&Arg);
2.3 音頻采集
 系統(tǒng)使用read()函數(shù)來(lái)從聲卡讀取數(shù)據(jù),其函數(shù)原型為:int read(int fd, char*buf, size_t count)。其中,fd是音頻設(shè)備文件的標(biāo)識(shí)符,buf是存儲(chǔ)音頻數(shù)據(jù)的緩沖區(qū),count是要采集的音頻數(shù)據(jù)字節(jié)數(shù)。單次采集所用時(shí)間為:(采樣字節(jié)數(shù)count×8×1000)/(采樣頻率rate×量化位數(shù)bits×聲道數(shù)channels) ms。因此,count不能設(shè)置太大,會(huì)增加系統(tǒng)的時(shí)延,影響語(yǔ)音的實(shí)時(shí)性,本系統(tǒng)單次采樣128 B,采樣時(shí)間為8 ms。程序偽代碼為:
while(conditions)
{
//訪問(wèn)臨界資源環(huán)形緩沖區(qū)
    Pthread_mutex_lock();    
    采集音頻數(shù)據(jù);
    寫(xiě)入環(huán)形緩沖區(qū);
    //增加信號(hào)量值
    Sem_Post();
    //退出臨界區(qū)
    Pthread_mutex_unlock();
}
2.4 編碼傳輸
Ad-Hoc網(wǎng)絡(luò)的帶寬是有限的,大量的數(shù)據(jù)傳輸會(huì)增加網(wǎng)絡(luò)的負(fù)荷,影響通信質(zhì)量,對(duì)語(yǔ)音進(jìn)行適當(dāng)?shù)木幋a是很有必要的,這可以有效地減輕網(wǎng)絡(luò)的負(fù)擔(dān),更利于語(yǔ)音通信。復(fù)雜的語(yǔ)音編碼算法擁有高效的壓縮比,但由于計(jì)算量大,會(huì)增加語(yǔ)音傳輸?shù)难舆t。本系統(tǒng)選用了著名的波形編碼算法G711編碼,G711編碼算法比較簡(jiǎn)單,計(jì)算量小,可減少一半的網(wǎng)絡(luò)語(yǔ)音數(shù)據(jù)負(fù)荷[7]。語(yǔ)音傳輸使用了RTP實(shí)時(shí)傳輸協(xié)議,RTP協(xié)議常用于流媒體系統(tǒng),可有效監(jiān)控語(yǔ)音傳輸質(zhì)量,這使它成為IP電話產(chǎn)業(yè)的技術(shù)基礎(chǔ)。程序偽代碼為:
 while(conditions)
 {
    //等待信號(hào)量喚醒
    Sem_wait();
    //訪問(wèn)臨界資源環(huán)形緩沖區(qū)
    Pthread_mutex_lock();
    從環(huán)形緩沖區(qū)提取音頻數(shù)據(jù);
    G711編碼語(yǔ)音數(shù)據(jù);
    發(fā)送RTP語(yǔ)音數(shù)據(jù)包;
    //退出臨界區(qū)
    Pthread_mutex_unlock();
 }
2.5 接收解碼
 系統(tǒng)終端接收到語(yǔ)音數(shù)據(jù)包時(shí),提取payload語(yǔ)音數(shù)據(jù),并解碼出PCM音頻碼,存放在環(huán)形緩沖區(qū)。程序偽代碼為:
 while(conditions)
 {
     //訪問(wèn)臨界資源環(huán)形緩沖區(qū)
     提取RTP語(yǔ)音數(shù)據(jù)包;
     解碼語(yǔ)音數(shù)據(jù);
     將語(yǔ)音數(shù)據(jù)放入環(huán)形緩沖區(qū);
     //增加信號(hào)量值
     Sem_post();
     //退出臨界區(qū)
     Pthread_mutex_unlock();
 }
2.6 音頻播放
 播放線程與接收解碼線程競(jìng)爭(zhēng)同一個(gè)環(huán)形緩沖區(qū),從環(huán)形緩沖區(qū)提取音頻數(shù)據(jù),并寫(xiě)入聲卡。程序偽代碼為:
     While(conditions)
     {
         //等待信號(hào)量喚醒
         Sem_wait();
         //訪問(wèn)臨界資源環(huán)形緩沖區(qū)
         Pthread_mutex_lock();
         從環(huán)形緩沖區(qū)提取音頻數(shù)據(jù);
         播放音頻數(shù)據(jù);
         //退出臨界區(qū)
         Pthread_mutex_unlock();
     }
3 改善語(yǔ)音通信質(zhì)量

 


 本設(shè)計(jì)針對(duì)節(jié)省網(wǎng)絡(luò)帶寬和消除抖動(dòng)兩方面對(duì)語(yǔ)音的通信質(zhì)量進(jìn)行了優(yōu)化。通過(guò)實(shí)驗(yàn)測(cè)試優(yōu)化前后的語(yǔ)音通信質(zhì)量,結(jié)果證明優(yōu)化后確實(shí)具有更好的效果。下面分別介紹這兩種優(yōu)化方案。
 (1)靜音檢測(cè)節(jié)省網(wǎng)絡(luò)帶寬。大量的研究表明,在一路全雙工電話交談中,只有36%~40%的語(yǔ)音信號(hào)是活動(dòng)或有效的[8]。電話交談過(guò)程中某一時(shí)候往往只有一方在講,另一方在聽(tīng),而且講話時(shí)有大量停頓。如果能通過(guò)某種手段檢測(cè)到通話過(guò)程中的靜默時(shí)段,停止發(fā)送語(yǔ)音數(shù)據(jù)包,則可以節(jié)省大量的網(wǎng)絡(luò)帶寬。本設(shè)計(jì)在靜默檢測(cè)時(shí)使用VAD(Voice Activation Detection)技術(shù),分為短時(shí)能量檢測(cè)和短時(shí)過(guò)零率檢測(cè)兩部分。短時(shí)能量檢測(cè)可以很好地區(qū)分出濁音和靜音,而短時(shí)過(guò)零率可以很好地區(qū)分出靜音和清音,因此,將兩者結(jié)合起來(lái),就可以檢測(cè)出靜音段。下面是算法描述:
 ①對(duì)輸入語(yǔ)音信號(hào)進(jìn)行高通濾波和加窗處理;
?、谟?jì)算一幀的能量及其平均值;
 ③該幀平均能量值是否大于能量閾值,是則判定為語(yǔ)音幀并返回,否則轉(zhuǎn)步驟④;
?、芮?幀是否有語(yǔ)音幀,有則判定為平滑語(yǔ)音幀并返回,否則轉(zhuǎn)至步驟⑤;
 ⑤計(jì)算該幀過(guò)零率;
?、拊搸^(guò)零率是否在過(guò)零率閾值范圍內(nèi),是則判定為語(yǔ)音幀并返回,否則判定為靜音幀。
 (2)消除抖動(dòng)。所謂抖動(dòng),是指語(yǔ)音數(shù)據(jù)包沒(méi)有按規(guī)律的時(shí)間間隔到達(dá)接收端,造成語(yǔ)音播放時(shí)聲音斷斷續(xù)續(xù)。嚴(yán)重的抖動(dòng)會(huì)導(dǎo)致語(yǔ)音數(shù)據(jù)包不按順序到達(dá)接收端或者丟失,導(dǎo)致聲音混亂無(wú)序[9]。抖動(dòng)是經(jīng)常發(fā)生的,分組到達(dá)出現(xiàn)少量時(shí)延很常見(jiàn)。為了消除抖動(dòng),本文采用了延遲回放技術(shù)。如圖4所示,接收端在收到第一個(gè)數(shù)據(jù)時(shí)并不馬上開(kāi)始回放,而是將傳入數(shù)據(jù)放入緩存中,該緩存稱為抖動(dòng)緩存(Jitter Buffer)。在接收端設(shè)置一個(gè)適當(dāng)大小的抖動(dòng)緩存,按照FIFO隊(duì)列進(jìn)行操作,當(dāng)語(yǔ)音數(shù)據(jù)在緩存中積累到一定程度(K個(gè)數(shù)據(jù)包)時(shí)開(kāi)始按時(shí)序播放語(yǔ)音,這樣聲音就比較平滑連續(xù)。

4 系統(tǒng)測(cè)試及結(jié)論
 本文對(duì)搭建的嵌入式Ad-Hoc網(wǎng)絡(luò)環(huán)境進(jìn)行了連通性測(cè)試,并在該基礎(chǔ)上進(jìn)行了實(shí)時(shí)語(yǔ)音通信的實(shí)驗(yàn)。網(wǎng)絡(luò)連通性測(cè)試確保各個(gè)節(jié)點(diǎn)之間能互相通信,保證數(shù)據(jù)的路由轉(zhuǎn)發(fā)路徑按照設(shè)計(jì)的方案進(jìn)行。實(shí)時(shí)語(yǔ)音通信實(shí)驗(yàn)監(jiān)測(cè)了2個(gè)節(jié)點(diǎn)路由線路、3個(gè)節(jié)點(diǎn)路由線路、4個(gè)節(jié)點(diǎn)路由線路的語(yǔ)音通信質(zhì)量,以及使用靜音檢測(cè)技術(shù)前后發(fā)送的語(yǔ)音數(shù)據(jù)包占總采樣數(shù)據(jù)包的比例。
 (1)本文在搭建Ad-Hoc網(wǎng)絡(luò)環(huán)境中設(shè)計(jì)了部分節(jié)點(diǎn)之間相互屏蔽MAC地址以保證路由轉(zhuǎn)發(fā)按照設(shè)計(jì)線路進(jìn)行的實(shí)驗(yàn)方案。下面使用ping命令對(duì)4個(gè)嵌入式節(jié)點(diǎn)線路的網(wǎng)絡(luò)進(jìn)行了數(shù)據(jù)跟蹤測(cè)試,如圖5所示,數(shù)據(jù)包確實(shí)按照所設(shè)計(jì)的方案進(jìn)行路由轉(zhuǎn)發(fā)。

 (2)分別在4個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)上移植了本實(shí)時(shí)語(yǔ)音通信系統(tǒng),進(jìn)行全雙工語(yǔ)音通信,實(shí)驗(yàn)對(duì)語(yǔ)音數(shù)據(jù)包的收發(fā)情況做了統(tǒng)計(jì),統(tǒng)計(jì)結(jié)果如表1所示。數(shù)據(jù)表明,本嵌入式實(shí)時(shí)語(yǔ)音通信系統(tǒng)在4個(gè)節(jié)點(diǎn)線路以內(nèi)的Ad-Hoc網(wǎng)絡(luò)環(huán)境中進(jìn)行全雙工語(yǔ)音通信有較好的效果。

 本文綜合了Ad-Hoc網(wǎng)絡(luò)技術(shù)、Linux系統(tǒng)語(yǔ)音編程、靜音檢測(cè)技術(shù)和RTP實(shí)時(shí)傳輸技術(shù)設(shè)計(jì)實(shí)現(xiàn)了一套應(yīng)用于嵌入式Ad-Hoc網(wǎng)絡(luò)的實(shí)時(shí)語(yǔ)音通信系統(tǒng)。本系統(tǒng)性能良好,有較高的實(shí)際應(yīng)用價(jià)值,可以應(yīng)用在治安、礦井、救災(zāi)等領(lǐng)域中。本文的下一步工作是針對(duì)節(jié)點(diǎn)的移動(dòng)性、多節(jié)點(diǎn)多路由路徑作進(jìn)一步的改進(jìn),不斷提高本系統(tǒng)的性能。
參考文獻(xiàn)
[1] 藏婉瑜,于勐,謝立,等.按需式ad hoc移動(dòng)網(wǎng)絡(luò)路由協(xié)議的研究進(jìn)展[J].計(jì)算機(jī)學(xué)報(bào),2003,25(10):1009-1017.
[2] Zhan Yimin, Lin Baocheng. VoIP technology and it’s application in broadband IP network[J]. CATV Technology,2002,9(15):12-18.
[3] 王雅輝,劉家康,趙勝輝.基于OPNET仿真平臺(tái)的AODV協(xié)議的性能研究[J].光電技術(shù)應(yīng)用,2004(6):60-64.
[4] 王忠恒,張曦煌.移動(dòng)Ad Hoc網(wǎng)絡(luò)AODV路由協(xié)議的改進(jìn)[J].計(jì)算機(jī)應(yīng)用,2010(2):333-336.
[5] 楊靜文,盧益民,胡浩.Linux下實(shí)時(shí)音頻傳輸?shù)膶?shí)現(xiàn)[J]. 電聲技術(shù),2005(2):63-65.
[6] 楊水清,張劍,施云飛.ARM嵌入式Linux系統(tǒng)開(kāi)發(fā)技術(shù)詳解[M].北京:電子工業(yè)出版社,2008.
[7] 焦傳斌,于保華,李治柱.新型寬帶語(yǔ)音編解碼器AMR-WB的研究[J].計(jì)算機(jī)仿真,2005,22(1):150-159.
[8] 于洪濤,徐靜波,冉崇森.語(yǔ)音噪聲壓縮新算法[J].計(jì)算機(jī)工程與科學(xué),2006,28(10):71-13.
[9] COMER D E, STEVENS D L. Internetworking with TCP/IP volume 3 client-server programming and applications Linux/POSIX sockets version[M]. USA:Pearson Education,2001.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。