宛紫晶,郎誠(chéng)廉
(同濟(jì)大學(xué) 電氣工程系, 上海 201804)
列車綜合無(wú)線通信調(diào)度裝置(CIR),簡(jiǎn)稱無(wú)線列調(diào),它是鐵路無(wú)線通信的主要組成部分,是組織鐵路運(yùn)輸、行車安全、提高生產(chǎn)效率的重要通信設(shè)施,其通信質(zhì)量的好壞直接關(guān)系到鐵路的行車安全。因此,通過(guò)仿真手段,對(duì)列車綜合無(wú)線通信裝置的相關(guān)功能進(jìn)行研究并應(yīng)用,對(duì)于列車駕駛員上崗前的培訓(xùn),尤其是列車運(yùn)行時(shí)出現(xiàn)故障情況下的訓(xùn)練,有著極大的意義和應(yīng)用前景。
本文設(shè)計(jì)了一種基于Android系統(tǒng)的列車無(wú)線通信裝置通信功能的仿真方案。
機(jī)車綜合無(wú)線通信設(shè)備是基于GSM-R數(shù)字移動(dòng)通信技術(shù),GPS全球定位技術(shù),450 MHz模擬無(wú)線電臺(tái)通信等技術(shù)的綜合車載通信設(shè)備。它與地面的GSM-R設(shè)備和450 MHz設(shè)備共同組成一個(gè)完整的鐵路綜合無(wú)線通信網(wǎng)。CIR中關(guān)鍵功能包括基于GSM-R和450 MHz的語(yǔ)音調(diào)度通信,無(wú)線調(diào)度命令信息傳送,無(wú)線車次號(hào)發(fā)送與校核信息,列尾風(fēng)壓信息傳送,GPS定位信息,MMI終端顯示等功能。
本文首先介紹了Android終端及開(kāi)發(fā)環(huán)境,然后分模塊在Android終端上對(duì)各部分仿真功能及方案進(jìn)行闡述,其中,對(duì)關(guān)鍵的實(shí)時(shí)語(yǔ)音通信功能仿真方案進(jìn)行了詳細(xì)說(shuō)明。
Android是基于Linux內(nèi)核,完全開(kāi)源和免費(fèi)使用的,其優(yōu)異的性能以及免費(fèi)性和開(kāi)放性,使開(kāi)發(fā)人員可以隨時(shí)取得程序的源代碼。Android開(kāi) 發(fā) 工 具 包 括:JDK5或 JDK6,Eclipse,Android SDK, Eclipse的插件ADT(Android development tools)。ADT擴(kuò)展了Eclipse的功能,可以快速建立新的Android項(xiàng)目,添加了基于Android框架的API組件,為Eclipse下Android應(yīng)用程序的開(kāi)發(fā)提高了效率。
語(yǔ)音調(diào)度通信模塊的功能包括車到車,車到調(diào)度中心的實(shí)時(shí)語(yǔ)音通信調(diào)度。通過(guò)構(gòu)建實(shí)時(shí)語(yǔ)音通信系統(tǒng),Android端到PC端的實(shí)時(shí)語(yǔ)音通信系統(tǒng)達(dá)到仿真功能的目的。其中Android端程序中主要分語(yǔ)音采集播放模塊,語(yǔ)音傳輸模塊。語(yǔ)音采集播放模塊完成對(duì)語(yǔ)音信號(hào)的采集、存儲(chǔ)和播放等。語(yǔ)音傳輸模塊運(yùn)用UDP協(xié)議對(duì)語(yǔ)音信號(hào)進(jìn)行封包和傳輸。程序流程圖如圖1所示。
圖1 程序流程圖
語(yǔ)音采集模塊主要負(fù)責(zé)對(duì)音頻信號(hào)的采集與存儲(chǔ)。音頻是一種連續(xù)變化的模擬信號(hào),但計(jì)算機(jī)只能處理和記錄二進(jìn)制的數(shù)字信號(hào),由自然音源得到的音頻信號(hào)必須經(jīng)過(guò)一定的變化,成為數(shù)字音頻信號(hào)后才能送到計(jì)算機(jī)中作進(jìn)一步的處理。數(shù)字音頻系統(tǒng)通過(guò)將聲波的波形轉(zhuǎn)換成一系列二進(jìn)制數(shù)據(jù)(A/D轉(zhuǎn)換),A/D轉(zhuǎn)換器以每秒鐘上萬(wàn)次的速率對(duì)聲波進(jìn)行采樣,每個(gè)采樣點(diǎn)都記錄下了原始模擬聲波在某一時(shí)刻的狀態(tài),通常稱之為樣本,而每一秒鐘所采樣的數(shù)目則稱為采樣頻率,通過(guò)將一串連續(xù)的樣本連接起來(lái),就可以在計(jì)算機(jī)中描述一段聲音。對(duì)于采樣過(guò)程中的每一個(gè)樣本,數(shù)字音頻系統(tǒng)會(huì)分配一定存儲(chǔ)位來(lái)記錄聲波的振幅,一般稱之為采樣分辨率或采樣精度,采樣精度越高,聲音還原時(shí)就會(huì)越細(xì)膩。對(duì)于在Android系統(tǒng)下進(jìn)行音頻采集,最重要的是理解聲音數(shù)字化的兩個(gè)關(guān)鍵步驟:采樣和量化。采樣就是每隔一定時(shí)間就讀一次聲音信號(hào)的幅度,而量化則是將采樣得到的聲音信號(hào)幅度轉(zhuǎn)化為數(shù)字值,從本質(zhì)上講,采樣是時(shí)間上的數(shù)字化,而量化則是幅度上的數(shù)字化。
在Android系統(tǒng)下對(duì)音頻的采集播放實(shí)現(xiàn)主要是通過(guò)AudioRecord和AudioTrack兩個(gè)類實(shí)現(xiàn),這兩個(gè)類是Android獲取和播放音頻流的重要類,放置在Android.media包中。與該包中的MediaRecorder和MediaPlayer類不同,AudioRecord和AudioTrack類在獲取和播放音頻數(shù)據(jù)流時(shí)無(wú)需通過(guò)文件保存和讀取,可以動(dòng)態(tài)地直接獲取和播放音頻流,在實(shí)時(shí)處理音頻數(shù)據(jù)流時(shí)非常有用。首先分別對(duì)AudioRecord和AudioTrack類進(jìn)行實(shí)例化,在實(shí)例化時(shí),參數(shù)中各有一個(gè)緩沖數(shù)組大小,經(jīng)過(guò)試驗(yàn)這個(gè)數(shù)組大小應(yīng)和AudioRecord和AudioTrack能正常實(shí)例化所需的最小Buffer大小相等,這塊Buffer的大小可以通過(guò)AudioRecord和AudioTrack類的getMinBufferSize()方法獲得。然后在實(shí)例化中設(shè)置錄放音的采樣頻率,量化位數(shù)以及聲道數(shù),本例中采用采樣頻率8 000 Hz、16 bit、單聲道。實(shí)例化成功后還要分別設(shè)置一塊數(shù)組以存儲(chǔ)收發(fā)的音頻數(shù)據(jù)。
本方案中的音頻傳輸主要采用局域網(wǎng)內(nèi)的基于UDP/IP的流式傳送,UDP協(xié)議的全稱是用戶數(shù)據(jù)包協(xié)議,是一種無(wú)連接的協(xié)議。UDP協(xié)議的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)包的形式,每一個(gè)數(shù)據(jù)包的前8個(gè)byte用來(lái)包含報(bào)頭信息,剩余byte則包含具體的傳輸數(shù)據(jù)。本例中,通信雙方,在錄音線程內(nèi)通過(guò)一個(gè)套接字將音頻數(shù)據(jù)發(fā)送到另一方的放音線程的套接字,自己的放音線程內(nèi)則有另一個(gè)套接字通過(guò)新端口接收另一方傳送來(lái)的數(shù)據(jù),這樣就實(shí)現(xiàn)了雙向數(shù)據(jù)的傳送。程序中UDP的創(chuàng)建主要通過(guò)DatagramSocket類和DatagramPacket類來(lái)實(shí)現(xiàn),首先實(shí)例化DatagramSocket類,在實(shí)例化的同時(shí)指定要發(fā)送目的地的端口號(hào)。接著實(shí)例化DatagramPacket類將數(shù)據(jù)進(jìn)行打包并綁定目的端口號(hào)與IP地址。其中發(fā)送端部分代碼如下:
其中record是AudioRecord錄音類實(shí)例化的對(duì)象,startRecording()方法表示開(kāi)始錄音,read方法將從MIC采集到的音頻存入指定的Buffer中,udps是DatagramSocket類實(shí)例化對(duì)象,recordpacket是DatagramPacke的實(shí)例化對(duì)象,負(fù)責(zé)將采集的數(shù)據(jù)進(jìn)行UDP打包封裝。
為方便調(diào)試,在同一個(gè)局域網(wǎng)內(nèi)的兩臺(tái)Android系統(tǒng)手機(jī)上測(cè)試程序,經(jīng)測(cè)試能夠?qū)崿F(xiàn)通信功能,可以達(dá)到仿真目的。
GPS定位模塊通過(guò)在Android上采集GPS定位信息發(fā)送給PC端并顯示在UI界面上。Android下的GPS定位信息采集主要通過(guò)Location-Manager,LocationListener,Location,GpsStatus.Listener等類來(lái)實(shí)現(xiàn)。LocationMangager類實(shí)現(xiàn)位置管理器。要想操作定位相關(guān)設(shè)備,必須先定義LocationManager。 LocationListener類實(shí)現(xiàn)位置監(jiān)聽(tīng),位置變化,設(shè)備開(kāi)關(guān)與狀態(tài)。Location類可以獲取時(shí)間、經(jīng)緯度、海拔等信息。數(shù)據(jù)收發(fā)模塊通過(guò)實(shí)現(xiàn)Android終端與PC機(jī)之間的文本收發(fā)達(dá)到對(duì)調(diào)度命令信息傳送,無(wú)線車次號(hào)校核信息,列尾風(fēng)壓信息傳送等功能的仿真。數(shù)據(jù)輸入通過(guò)Android端下的setText控件實(shí)現(xiàn),數(shù)據(jù)傳送通過(guò)局域網(wǎng)內(nèi)的UDP/IP協(xié)議實(shí)現(xiàn)。
調(diào)度命令信息收發(fā)界面如圖2所示。
圖2 調(diào)度命令信息收發(fā)界面
本例中按照實(shí)際的列車綜合無(wú)線列控裝置MMI界面樣式,設(shè)計(jì)了Android平臺(tái)下的仿真界面如圖3所示,其中顯示參數(shù)通過(guò)數(shù)據(jù)收發(fā)模塊,在PC機(jī)上發(fā)送,Android端接收并顯示在界面上。最下方的7個(gè)BUTTON中調(diào)度按鈕發(fā)起與PC端列控中心仿真軟件的通信呼叫,最右4個(gè)按鈕按下任意鍵都可以與另一臺(tái)Android終端進(jìn)行呼叫通信。
圖3 450Mhz模式主界面
要制作按鍵硬件主要涉及Android系統(tǒng)下的驅(qū)動(dòng)程序編寫(xiě)。在Android的上層中,可以通過(guò)獲得這些設(shè)備產(chǎn)生的事件,并對(duì)設(shè)備事件做出響應(yīng)。在Java框架和應(yīng)用程序?qū)?,用按鍵事件獲得各種鍵盤(pán)信息。Android用戶輸入系統(tǒng)的基本層次結(jié)構(gòu)如圖4所示。
圖4 Android用戶輸入系統(tǒng)的基本層次結(jié)構(gòu)
本文利用Android嵌入式系統(tǒng)的特性,將其作為列車綜合無(wú)線通信系統(tǒng)的仿真終端,提出并設(shè)計(jì)一套基于Android系統(tǒng)的列車綜合無(wú)線通信裝置仿真系統(tǒng)方案。對(duì)每一部分的實(shí)現(xiàn)做了闡述,尤其對(duì)無(wú)線列調(diào)通信功能仿真模塊進(jìn)行了詳細(xì)說(shuō)明,未來(lái)可將其運(yùn)用在模擬仿真駕駛臺(tái)中,對(duì)于駕駛員上崗前在突發(fā)事故情況下的訓(xùn)練與教學(xué)有著比較實(shí)際的應(yīng)用價(jià)值和現(xiàn)實(shí)意義。
[1]張大千,崔建國(guó). 無(wú)線列車調(diào)度實(shí)現(xiàn)數(shù)據(jù)話音同傳[J].沈陽(yáng)航空工業(yè)學(xué)院學(xué)報(bào),2006,14(8):12-13.
[2]陳志杰,徐 鈞,鄭 敏. 機(jī)車綜合無(wú)線通信設(shè)備(CIR)的技術(shù)方案[J]. 鐵道通信信號(hào),2006,18(5):24-25.
[3]林 城. Android2.3 應(yīng)用開(kāi)發(fā)實(shí)踐[M]. 北京:機(jī)械工業(yè)出版社,2011.
[4]周 巍,何 濤,林嘉宇. Android系統(tǒng)智能手機(jī)語(yǔ)音應(yīng)用開(kāi)發(fā)環(huán)境構(gòu)架[J]. 微處理機(jī), 2011.