• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于QT的WiFi語(yǔ)音通信系統(tǒng)

      2012-09-21 10:43:50趙付軒楊斌
      關(guān)鍵詞:開(kāi)發(fā)板服務(wù)器端內(nèi)核

      趙付軒,楊斌

      (西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院,成都 610031)

      引 言

      基于Internet的語(yǔ)音傳輸是一項(xiàng)應(yīng)用極其廣泛的技術(shù),傳統(tǒng)意義上的語(yǔ)音通信都以 Windows操作系統(tǒng)為平臺(tái),而且采用有線電纜的方式進(jìn)行傳輸。目前隨著Linux桌面系統(tǒng)應(yīng)用的普及,特別是在手持嵌入式設(shè)備上的應(yīng)用,使得Linux上應(yīng)用軟件和系統(tǒng)的開(kāi)發(fā)變得日益重要。Linux是完全開(kāi)源的代碼體系,具有強(qiáng)大的網(wǎng)絡(luò)支持功能、各種硬件平臺(tái)的適用性以及完善的文檔和低廉的開(kāi)發(fā)成本。隨著IEEE 802.11標(biāo)準(zhǔn)WiFi技術(shù)的興起,無(wú)線網(wǎng)絡(luò)便捷的特性在應(yīng)用嵌入式手持設(shè)備中得到充分體現(xiàn),而本設(shè)計(jì)正是基于Linux下無(wú)線網(wǎng)絡(luò)方式的語(yǔ)音信息終端,它可以滿足無(wú)線局域網(wǎng)內(nèi)端對(duì)端的語(yǔ)音對(duì)話需要。

      1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)

      整個(gè)系統(tǒng)由語(yǔ)音采集模塊、網(wǎng)絡(luò)收發(fā)模塊和語(yǔ)音處理模塊組成。語(yǔ)音采集模塊由采集終端ARM9開(kāi)發(fā)板組成,負(fù)責(zé)對(duì)語(yǔ)音信號(hào)的采集、處理;網(wǎng)絡(luò)收發(fā)模塊負(fù)責(zé)開(kāi)發(fā)板與語(yǔ)音處理模塊的數(shù)據(jù)報(bào)傳送;語(yǔ)音處理模塊負(fù)責(zé)語(yǔ)音信號(hào)的處理、存儲(chǔ)和播放功能。系統(tǒng)結(jié)構(gòu)如圖1所示。

      系統(tǒng)采用嵌入式Linux操作系統(tǒng),連入網(wǎng)絡(luò)并啟動(dòng)任務(wù)后,ARM9開(kāi)發(fā)板將話筒傳入的數(shù)據(jù)經(jīng)暫存后再將其封裝成IP包,由無(wú)線網(wǎng)接口發(fā)送到無(wú)線網(wǎng)絡(luò),同時(shí)解析接收到的語(yǔ)音包并由耳機(jī)送出,實(shí)現(xiàn)實(shí)時(shí)語(yǔ)音通信。

      圖1 系統(tǒng)結(jié)構(gòu)

      1.1 音頻采集

      音頻采集部分采用了ARM9開(kāi)發(fā)板mini2440,應(yīng)用基于I2S總線的UDA1341采集芯片,將采集到的音頻信號(hào)轉(zhuǎn)化為PCM碼格式保存下來(lái),并送入SDRAM內(nèi)進(jìn)行存儲(chǔ)。語(yǔ)音信號(hào)的系統(tǒng)采樣頻率為16ks/s,開(kāi)發(fā)板每秒發(fā)送50個(gè)包,解碼每個(gè)包PCM數(shù)據(jù)的長(zhǎng)度為640個(gè)字節(jié)。

      1.2 TCP/IP協(xié)議分析

      在嵌入式系統(tǒng)中實(shí)現(xiàn)的TCP/IP協(xié)議都是面向數(shù)據(jù)采集和傳輸?shù)?,所以大部分?shí)現(xiàn)都是IP協(xié)議、ARP協(xié)議、UDP協(xié)議或者是TCP協(xié)議。本文完成的是IP協(xié)議、ARP協(xié)議和UDP協(xié)議。協(xié)議棧結(jié)構(gòu)如圖2所示。

      圖2 協(xié)議棧結(jié)構(gòu)

      1.3 UDP協(xié)議的實(shí)現(xiàn)

      UDP用戶數(shù)據(jù)報(bào)協(xié)議可以實(shí)現(xiàn)網(wǎng)絡(luò)上發(fā)送和接收數(shù)據(jù),它實(shí)際上是直接利用IP協(xié)議進(jìn)行數(shù)據(jù)報(bào)的傳輸,UDP的數(shù)據(jù)傳輸不建立連接,不保證可靠交付,不需要維護(hù)復(fù)雜的鏈接狀態(tài)表。它不對(duì)要發(fā)送的數(shù)據(jù)進(jìn)行緩沖,直接把應(yīng)用層收到的數(shù)據(jù)加上UDP首部發(fā)送出去。這對(duì)于編寫簡(jiǎn)單的請(qǐng)求/響應(yīng)模式的應(yīng)用是很方便的,而且利用UDP協(xié)議對(duì)傳輸速率也沒(méi)有太大影響。

      1.4 服務(wù)端和客戶端程序?qū)崿F(xiàn)

      系統(tǒng)程序設(shè)計(jì)分為客戶端和服務(wù)器端程序設(shè)計(jì),客戶端完成數(shù)據(jù)采集后發(fā)送給PC機(jī),服務(wù)器端完成數(shù)據(jù)的接收、存儲(chǔ)和播放工作。本設(shè)計(jì)采用UDP協(xié)議、Socket編程方式。程序流程如圖3所示。

      圖3 程序流程圖

      1.5 通信模式

      1.5.1 單工通信

      消息只能單方向傳輸,發(fā)送端和接收端是固定的,發(fā)送端只能發(fā)送信息,不能接收信息;接收端只能接收信息,不能發(fā)送信息。語(yǔ)音信號(hào)僅從一端傳送到另一端,信息流是單方向的。本設(shè)計(jì)所實(shí)現(xiàn)的是單工通信方式。單工模式的實(shí)時(shí)語(yǔ)音通信模式如圖4所示。

      單工模式的實(shí)時(shí)語(yǔ)音通信,由一對(duì)程序AudioServer(服務(wù)器端)和AudioClient(客戶端)來(lái)完成。這兩個(gè)程序需要在一臺(tái)主機(jī)上首先運(yùn)行AudioServer,然后在另外一臺(tái)主機(jī)上運(yùn)行AudioClient。在AudioClient端用麥克風(fēng)說(shuō)話,在AudioServer端能聽(tīng)到說(shuō)話內(nèi)容。

      圖4 單工模式的實(shí)時(shí)語(yǔ)音通信模式

      1.5.2 半雙工通信

      語(yǔ)音信號(hào)可以沿兩個(gè)方向傳輸,通信系統(tǒng)的每一端都可以發(fā)送和接收數(shù)據(jù),但兩個(gè)方向不能同時(shí)發(fā)送數(shù)據(jù),必須交替進(jìn)行。在QT中可以創(chuàng)建兩個(gè)套接字和兩個(gè)線程來(lái)實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸,但為了避免這兩個(gè)線程出現(xiàn)競(jìng)爭(zhēng),需要引入線程互斥與同步對(duì)其進(jìn)行協(xié)調(diào)。繼承QThread類可以創(chuàng)建線程,重寫虛函數(shù)run()即可。QMutex類的lock()函數(shù)可以實(shí)現(xiàn)對(duì)一端只能進(jìn)行讀或?qū)懀窗腚p工通信。

      1.5.3 全雙工通信

      通信的任意時(shí)刻,線路上存在A到B和B到A的雙向信號(hào)傳輸。全雙工通信允許數(shù)據(jù)同時(shí)在兩個(gè)方向上傳輸,又稱為雙向同時(shí)通信,即通信的雙方可以同時(shí)發(fā)送和接收數(shù)據(jù)。這樣在QT中創(chuàng)建兩個(gè)套接字和兩個(gè)線程來(lái)實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸即可。繼承QThread類可以創(chuàng)建線程,重寫虛函數(shù)run()即可。

      2 系統(tǒng)硬件設(shè)計(jì)

      本設(shè)計(jì)采用Friendly ARM Mini2440開(kāi)發(fā)板,該開(kāi)發(fā)板CPU采用Samsung S3C2440A處理器,主頻400MHz,最高533MHz,具有豐富的內(nèi)外設(shè)資源。

      2.1 配置USB無(wú)線網(wǎng)卡驅(qū)動(dòng)

      本開(kāi)發(fā)板采用 Linux-2.6.32.2內(nèi)核,它已包含了多種型號(hào)的USB無(wú)線網(wǎng)卡驅(qū)動(dòng),其中包括目前流行的、性價(jià)比高的TP-Link USB WiFi無(wú)線網(wǎng)卡。

      2.2 音頻接口

      本開(kāi)發(fā)板采用基于I2S總線的UDA1341芯片實(shí)現(xiàn)音頻解碼,該芯片內(nèi)部寄存器的初始化和設(shè)置采用L3-bus總線連接控制器實(shí)現(xiàn)。音頻系統(tǒng)的輸出為開(kāi)發(fā)板上常用的3.5mm孔徑插座。輸入分為兩路,一路為板載麥克風(fēng),另一路通過(guò)CON10白色2.0mm插座引出。

      3 系統(tǒng)軟件設(shè)計(jì)

      本系統(tǒng)軟件可以分為3個(gè)功能模塊:語(yǔ)音信息處理模塊、無(wú)線通信模塊和QT控制模塊。其中QT控制模塊負(fù)責(zé)圖形界面顯示和人機(jī)接口控制。為了便于實(shí)現(xiàn)系統(tǒng)管理,采用基于Linux操作系統(tǒng)的應(yīng)用程序開(kāi)發(fā)模式,操作系統(tǒng)內(nèi)核則選用Linux-2.6.32.2版本。系統(tǒng)程序流程如圖5所示。

      圖5 系統(tǒng)程序流程圖

      3.1 語(yǔ)音信息處理模塊

      聲音的錄制和播放,即要實(shí)現(xiàn)往麥克風(fēng)里說(shuō)話時(shí)能夠在耳塞里聽(tīng)到說(shuō)話的內(nèi)容。首先是打開(kāi)聲音設(shè)備/dev/audio,并設(shè)置采樣的量化位數(shù)、聲道數(shù)目、采樣頻率;接著從聲卡里讀話音數(shù)據(jù)(錄制聲音),并存放到一個(gè)緩沖區(qū)里;然后把剛剛讀入的話音數(shù)據(jù)往聲卡里寫(播放聲音)。

      (1)設(shè)置采樣的量化位數(shù)、聲道數(shù)目、采樣頻率

      (2)設(shè)置PCM編碼方式

      (3)讀取聲卡

      在客戶端,把錄制下來(lái)的聲音存放在一個(gè)比較大的緩沖區(qū)里,然后發(fā)送出去;服務(wù)器端收到后,播放該數(shù)據(jù)就可以了。

      實(shí)時(shí)語(yǔ)音通信需要聲音連續(xù)、清晰。于是在客戶端,要不停地把錄制下來(lái)的聲音數(shù)據(jù)發(fā)送出去;在服務(wù)器端,不停地把接收到的話音數(shù)據(jù)播放出來(lái)。這里涉及到如何選擇緩沖區(qū)大小的問(wèn)題。如果緩沖區(qū)太大,錄制聲音的時(shí)間過(guò)長(zhǎng),而且sendto()函數(shù)不能夠一次發(fā)送完數(shù)據(jù),這樣會(huì)影響聲音的連續(xù)性和完整性。經(jīng)過(guò)多次測(cè)試和調(diào)整,最后取緩沖區(qū)的大小為1 024字節(jié)。

      3.2 無(wú)線通信模塊

      無(wú)線通信模塊相關(guān)程序如下所示。

      (1)建立UDP套接字并綁定對(duì)方IP

      客戶端:

      服務(wù)器端:

      (2)客戶端和服務(wù)器端數(shù)據(jù)報(bào)收發(fā)

      設(shè)置緩沖區(qū):

      客戶端發(fā)送數(shù)據(jù):

      服務(wù)器端接收數(shù)據(jù):

      播放語(yǔ)音:

      3.3 QT控制模塊

      QT是一款跨平臺(tái)的C++圖形用戶界面應(yīng)用程序框架,具有優(yōu)良的封裝機(jī)制和高度的模塊化結(jié)構(gòu),只需在一個(gè)平臺(tái)下編寫,就可在多個(gè)平臺(tái)下編譯運(yùn)行,可移植性很強(qiáng)。本設(shè)計(jì)采用4.5.3版 Qt-x86和 Qt-arm分別進(jìn)行界面和程序的設(shè)計(jì)與編譯。

      在完成必要的軟硬件初始化后,系統(tǒng)進(jìn)入QT界面控制程序,QT界面控制程序?qū)崿F(xiàn)兩大功能:

      ①語(yǔ)音編解碼處理。語(yǔ)音信號(hào)的處理通過(guò)DSP內(nèi)核完成。采集終端負(fù)責(zé)語(yǔ)音編碼處理,此時(shí)DSP內(nèi)核采用雙緩存機(jī)制保存ARM9送入的本地語(yǔ)音數(shù)據(jù),然后送給ARM9內(nèi)核。

      ② 無(wú)線語(yǔ)音和聲卡數(shù)據(jù)的收發(fā)。它由ARM9內(nèi)核完成。ARM9內(nèi)核與DSP內(nèi)核的通信通過(guò)DSP Gateway雙核通信機(jī)制方式實(shí)現(xiàn),由ARM9內(nèi)核負(fù)責(zé)控制。對(duì)于語(yǔ)音編碼,ARM9負(fù)責(zé)把UDA1341采集的緩存數(shù)據(jù)寫入到DSP的編碼器中,編碼完的數(shù)據(jù)放入發(fā)送緩存單元。當(dāng)發(fā)送緩沖區(qū)放滿之后,ARM端就會(huì)將數(shù)據(jù)通過(guò)網(wǎng)口發(fā)送出去。

      4 系統(tǒng)性能測(cè)試

      性能測(cè)試系統(tǒng)的有效帶寬是保證用戶語(yǔ)音通話的前提?;赨DP的傳輸速度,兩點(diǎn)間的平均速度可達(dá)3.4 Mbps。這個(gè)實(shí)時(shí)語(yǔ)音通信軟件的功能是實(shí)現(xiàn)端到端的實(shí)時(shí)語(yǔ)音聊天。也就是說(shuō)當(dāng)A與B在進(jìn)行語(yǔ)音聊天時(shí),A不能同時(shí)與C進(jìn)行語(yǔ)音聊天。A只能先斷開(kāi)與B的語(yǔ)音聊天,然后才可以與C進(jìn)行語(yǔ)音聊天。

      4.1 界面實(shí)現(xiàn)

      語(yǔ)音聊天的QT界面設(shè)計(jì)如圖6、圖7所示。

      圖6 服務(wù)器端界面

      圖7 客戶端界面

      4.2 語(yǔ)音質(zhì)量測(cè)試

      通過(guò)開(kāi)發(fā)板的話筒講話,在PC端能清晰聽(tīng)到語(yǔ)音。通過(guò)在PC機(jī)上專業(yè)軟件對(duì)收到的語(yǔ)音信號(hào)進(jìn)行分析,該語(yǔ)音系統(tǒng)在采樣頻率8 000~192 000Hz時(shí)均能正常工作。測(cè)試結(jié)果表明語(yǔ)音發(fā)送和接收正常,整個(gè)系統(tǒng)的功能與性能基本達(dá)到設(shè)計(jì)要求。另外,該設(shè)計(jì)還增加了語(yǔ)音存儲(chǔ)功能,能夠?qū)?duì)話語(yǔ)音保存成本地文件,以便重復(fù)收聽(tīng),能夠較好地應(yīng)用到具體的工程項(xiàng)目中。

      結(jié) 語(yǔ)

      本文在成熟的嵌入式Linux操作系統(tǒng)下,采用QT跨平臺(tái)的C++圖形用戶界面應(yīng)用程序框架,設(shè)計(jì)了基于WiFi的語(yǔ)音通信系統(tǒng)。該系統(tǒng)可以實(shí)現(xiàn)較高的語(yǔ)音通話質(zhì)量,能在多個(gè)平臺(tái)下編譯運(yùn)行,可移植性很強(qiáng)。

      [1] 蔡志明,盧傳富,李立夏.精通Qt4編程[M].北京:電子工業(yè)出版社,2008.

      [2] 宋敬彬,孫海濱.Linux網(wǎng)絡(luò)編程[M].北京:清華大學(xué)出版社,2010.

      [3] 胥光輝,張濤譯.TCP/IP協(xié)議詳解(卷1:協(xié)議)[M].北京:機(jī)械工業(yè)出版社,2000.

      [4] 廣州友善之臂計(jì)算機(jī)科技有限公司.FriendlyARM mini2440用戶手冊(cè),2010.

      [5] 溫斌澤.VOIP:IP語(yǔ)音技術(shù)[M].北京:機(jī)械工業(yè)出版社,2000.

      猜你喜歡
      開(kāi)發(fā)板服務(wù)器端內(nèi)核
      萬(wàn)物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
      強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
      Linux內(nèi)核mmap保護(hù)機(jī)制研究
      淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
      成功(2018年10期)2018-03-26 02:56:14
      Microchip最新推出兩款PIC32 Curiosity開(kāi)發(fā)板
      淺析單片機(jī)開(kāi)發(fā)板的設(shè)計(jì)與制作
      電子制作(2017年22期)2017-02-02 07:10:14
      在Windows中安裝OpenVPN
      Mouser為您呈上開(kāi)發(fā)關(guān)鍵之STMicroelectronics Nucleo開(kāi)發(fā)板
      Arduino和Atmel發(fā)布Arduino Zero開(kāi)發(fā)板
      景泰县| 蓬莱市| 宁武县| 韶关市| 沙河市| 长岛县| 克东县| 澎湖县| 垦利县| 陆良县| 东丰县| 崇左市| 九寨沟县| 视频| 通河县| 六安市| 壤塘县| 富源县| 万荣县| 利津县| 屯门区| 榆林市| 乡城县| 平昌县| 玛纳斯县| 乌兰县| 临清市| 丰台区| 敦煌市| 菏泽市| 临邑县| 合作市| 阆中市| 库伦旗| 湘乡市| 阿克| 灌南县| 韩城市| 金秀| 长阳| 临夏县|