国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

趙付軒,楊斌

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

引 言

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

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

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

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

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

1.1 音頻采集

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

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

在嵌入式系統(tǒng)中實現(xiàn)的TCP/IP協(xié)議都是面向數(shù)據(jù)采集和傳輸?shù)模源蟛糠謱崿F(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é)議的實現(xiàn)

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

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

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

圖3 程序流程圖

1.5 通信模式

1.5.1 單工通信

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

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

圖4 單工模式的實時語音通信模式

1.5.2 半雙工通信

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

1.5.3 全雙工通信

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

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

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

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

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

2.2 音頻接口

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

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

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

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

3.1 語音信息處理模塊

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

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

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

(3)讀取聲卡

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

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

3.2 無線通信模塊

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

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

客戶端:

服務(wù)器端:

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

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

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

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

播放語音:

3.3 QT控制模塊

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

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

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

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

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

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

4.1 界面實現(xiàn)

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

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

圖7 客戶端界面

4.2 語音質(zhì)量測試

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

結(jié) 語

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

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

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

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

[4] 廣州友善之臂計算機科技有限公司.FriendlyARM mini2440用戶手冊,2010.

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

猜你喜歡
開發(fā)板服務(wù)器端內(nèi)核
萬物皆可IP的時代,我們當(dāng)夯實的IP內(nèi)核是什么?
強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
Linux內(nèi)核mmap保護(hù)機制研究
淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
成功(2018年10期)2018-03-26 02:56:14
Microchip最新推出兩款PIC32 Curiosity開發(fā)板
淺析單片機開發(fā)板的設(shè)計與制作
電子制作(2017年22期)2017-02-02 07:10:14
在Windows中安裝OpenVPN
Mouser為您呈上開發(fā)關(guān)鍵之STMicroelectronics Nucleo開發(fā)板
Arduino和Atmel發(fā)布Arduino Zero開發(fā)板
司法| 广平县| 南雄市| 台东市| 敦煌市| 绥江县| 新泰市| 永寿县| 云梦县| 乌什县| 方山县| 新邵县| 叶城县| 临城县| 东乌珠穆沁旗| 革吉县| 高碑店市| 泗阳县| 泰和县| 顺昌县| 鄱阳县| 唐河县| 阳原县| 塔城市| 郸城县| 舒兰市| 聂荣县| 吉安市| 正定县| 金寨县| 江油市| 无极县| 五常市| 蒲江县| 精河县| 扎赉特旗| 宜良县| 正宁县| 广南县| 黔西县| 沽源县|