宛紫晶,郎誠廉
(同濟大學 電氣工程系, 上海 201804)
列車綜合無線通信調度裝置(CIR),簡稱無線列調,它是鐵路無線通信的主要組成部分,是組織鐵路運輸、行車安全、提高生產效率的重要通信設施,其通信質量的好壞直接關系到鐵路的行車安全。因此,通過仿真手段,對列車綜合無線通信裝置的相關功能進行研究并應用,對于列車駕駛員上崗前的培訓,尤其是列車運行時出現故障情況下的訓練,有著極大的意義和應用前景。
本文設計了一種基于Android系統的列車無線通信裝置通信功能的仿真方案。
機車綜合無線通信設備是基于GSM-R數字移動通信技術,GPS全球定位技術,450 MHz模擬無線電臺通信等技術的綜合車載通信設備。它與地面的GSM-R設備和450 MHz設備共同組成一個完整的鐵路綜合無線通信網。CIR中關鍵功能包括基于GSM-R和450 MHz的語音調度通信,無線調度命令信息傳送,無線車次號發送與校核信息,列尾風壓信息傳送,GPS定位信息,MMI終端顯示等功能。
本文首先介紹了Android終端及開發環境,然后分模塊在Android終端上對各部分仿真功能及方案進行闡述,其中,對關鍵的實時語音通信功能仿真方案進行了詳細說明。
Android是基于Linux內核,完全開源和免費使用的,其優異的性能以及免費性和開放性,使開發人員可以隨時取得程序的源代碼。Android開 發 工 具 包 括:JDK5或 JDK6,Eclipse,Android SDK, Eclipse的插件ADT(Android development tools)。ADT擴展了Eclipse的功能,可以快速建立新的Android項目,添加了基于Android框架的API組件,為Eclipse下Android應用程序的開發提高了效率。
語音調度通信模塊的功能包括車到車,車到調度中心的實時語音通信調度。通過構建實時語音通信系統,Android端到PC端的實時語音通信系統達到仿真功能的目的。其中Android端程序中主要分語音采集播放模塊,語音傳輸模塊。語音采集播放模塊完成對語音信號的采集、存儲和播放等。語音傳輸模塊運用UDP協議對語音信號進行封包和傳輸。程序流程圖如圖1所示。

圖1 程序流程圖
語音采集模塊主要負責對音頻信號的采集與存儲。音頻是一種連續變化的模擬信號,但計算機只能處理和記錄二進制的數字信號,由自然音源得到的音頻信號必須經過一定的變化,成為數字音頻信號后才能送到計算機中作進一步的處理。數字音頻系統通過將聲波的波形轉換成一系列二進制數據(A/D轉換),A/D轉換器以每秒鐘上萬次的速率對聲波進行采樣,每個采樣點都記錄下了原始模擬聲波在某一時刻的狀態,通常稱之為樣本,而每一秒鐘所采樣的數目則稱為采樣頻率,通過將一串連續的樣本連接起來,就可以在計算機中描述一段聲音。對于采樣過程中的每一個樣本,數字音頻系統會分配一定存儲位來記錄聲波的振幅,一般稱之為采樣分辨率或采樣精度,采樣精度越高,聲音還原時就會越細膩。對于在Android系統下進行音頻采集,最重要的是理解聲音數字化的兩個關鍵步驟:采樣和量化。采樣就是每隔一定時間就讀一次聲音信號的幅度,而量化則是將采樣得到的聲音信號幅度轉化為數字值,從本質上講,采樣是時間上的數字化,而量化則是幅度上的數字化。
在Android系統下對音頻的采集播放實現主要是通過AudioRecord和AudioTrack兩個類實現,這兩個類是Android獲取和播放音頻流的重要類,放置在Android.media包中。與該包中的MediaRecorder和MediaPlayer類不同,AudioRecord和AudioTrack類在獲取和播放音頻數據流時無需通過文件保存和讀取,可以動態地直接獲取和播放音頻流,在實時處理音頻數據流時非常有用。首先分別對AudioRecord和AudioTrack類進行實例化,在實例化時,參數中各有一個緩沖數組大小,經過試驗這個數組大小應和AudioRecord和AudioTrack能正常實例化所需的最小Buffer大小相等,這塊Buffer的大小可以通過AudioRecord和AudioTrack類的getMinBufferSize()方法獲得。然后在實例化中設置錄放音的采樣頻率,量化位數以及聲道數,本例中采用采樣頻率8 000 Hz、16 bit、單聲道。實例化成功后還要分別設置一塊數組以存儲收發的音頻數據。
本方案中的音頻傳輸主要采用局域網內的基于UDP/IP的流式傳送,UDP協議的全稱是用戶數據包協議,是一種無連接的協議。UDP協議的主要作用是將網絡數據流量壓縮成數據包的形式,每一個數據包的前8個byte用來包含報頭信息,剩余byte則包含具體的傳輸數據。本例中,通信雙方,在錄音線程內通過一個套接字將音頻數據發送到另一方的放音線程的套接字,自己的放音線程內則有另一個套接字通過新端口接收另一方傳送來的數據,這樣就實現了雙向數據的傳送。程序中UDP的創建主要通過DatagramSocket類和DatagramPacket類來實現,首先實例化DatagramSocket類,在實例化的同時指定要發送目的地的端口號。接著實例化DatagramPacket類將數據進行打包并綁定目的端口號與IP地址。其中發送端部分代碼如下:

其中record是AudioRecord錄音類實例化的對象,startRecording()方法表示開始錄音,read方法將從MIC采集到的音頻存入指定的Buffer中,udps是DatagramSocket類實例化對象,recordpacket是DatagramPacke的實例化對象,負責將采集的數據進行UDP打包封裝。
為方便調試,在同一個局域網內的兩臺Android系統手機上測試程序,經測試能夠實現通信功能,可以達到仿真目的。
GPS定位模塊通過在Android上采集GPS定位信息發送給PC端并顯示在UI界面上。Android下的GPS定位信息采集主要通過Location-Manager,LocationListener,Location,GpsStatus.Listener等類來實現。LocationMangager類實現位置管理器。要想操作定位相關設備,必須先定義LocationManager。 LocationListener類實現位置監聽,位置變化,設備開關與狀態。Location類可以獲取時間、經緯度、海拔等信息。數據收發模塊通過實現Android終端與PC機之間的文本收發達到對調度命令信息傳送,無線車次號校核信息,列尾風壓信息傳送等功能的仿真。數據輸入通過Android端下的setText控件實現,數據傳送通過局域網內的UDP/IP協議實現。
調度命令信息收發界面如圖2所示。

圖2 調度命令信息收發界面
本例中按照實際的列車綜合無線列控裝置MMI界面樣式,設計了Android平臺下的仿真界面如圖3所示,其中顯示參數通過數據收發模塊,在PC機上發送,Android端接收并顯示在界面上。最下方的7個BUTTON中調度按鈕發起與PC端列控中心仿真軟件的通信呼叫,最右4個按鈕按下任意鍵都可以與另一臺Android終端進行呼叫通信。

圖3 450Mhz模式主界面
要制作按鍵硬件主要涉及Android系統下的驅動程序編寫。在Android的上層中,可以通過獲得這些設備產生的事件,并對設備事件做出響應。在Java框架和應用程序層,用按鍵事件獲得各種鍵盤信息。Android用戶輸入系統的基本層次結構如圖4所示。

圖4 Android用戶輸入系統的基本層次結構
本文利用Android嵌入式系統的特性,將其作為列車綜合無線通信系統的仿真終端,提出并設計一套基于Android系統的列車綜合無線通信裝置仿真系統方案。對每一部分的實現做了闡述,尤其對無線列調通信功能仿真模塊進行了詳細說明,未來可將其運用在模擬仿真駕駛臺中,對于駕駛員上崗前在突發事故情況下的訓練與教學有著比較實際的應用價值和現實意義。
[1]張大千,崔建國. 無線列車調度實現數據話音同傳[J].沈陽航空工業學院學報,2006,14(8):12-13.
[2]陳志杰,徐 鈞,鄭 敏. 機車綜合無線通信設備(CIR)的技術方案[J]. 鐵道通信信號,2006,18(5):24-25.
[3]林 城. Android2.3 應用開發實踐[M]. 北京:機械工業出版社,2011.
[4]周 巍,何 濤,林嘉宇. Android系統智能手機語音應用開發環境構架[J]. 微處理機, 2011.