劉毅科,郭承軍,吳衡
(電子科技大學 電子科學技術研究院,成都 611731)
UBX協議格式的GPS原始數據解碼與轉換
劉毅科,郭承軍,吳衡
(電子科技大學 電子科學技術研究院,成都 611731)
GPS定位是以衛星導航數據和接收機觀測數據為解算基礎,解碼GPS接收機原始觀測數據是解算的前提。為了統一不同接收機的觀測數據進行聯合處理,將專有協議下的數據格式轉為標準化數據格式是一個必要的步驟。文章介紹了UBX協議下的接收機原始觀測數據解碼和轉換為與接收機無關的數據交換格式(RINEX)的方法,以及具體操作中的注意事項。簡述了UBX協議和RINEX格式各自的特點。通過對U-Blox NEO M8T接收機獲得的UBX格式原始數據的解碼和轉換為RINEX格式數據文件,證明了解碼和轉碼方法的正確性與有效性。
GPS原始數據;解碼;轉換;UBX;RINEX;U-Blox
全球衛星定位系統GPS作為當今世界上最成熟的衛星定位系統,在全世界的各行各業都受到廣泛的應用。對于工程人員來說,對GPS觀測數據的事后處理很多時候是必不可少的。作為定位的基本硬件單位——衛星導航接收機,不同的生產廠家一般都有自己專有的數據存儲格式,有時甚至同一廠家的不同型號設備的專有格式也不盡相同。為了能夠在不同的接收機下進行數據處理,一個無關接收機的、統一的、標準的數據存儲格式對于科研工程人員來說就變得至關重要。
RINEX是一種與接收機無關的數據交換格式,是由瑞士伯爾尼大學天文學院的Gurtner于1989年提出的。當時也是為了能夠綜合不同廠家GPS接收機所采集的GPS數據,現在RINEX格式已經成為了GPS測量應用等的標準數據格式[1]。
幾乎所有的測量型接收機廠商都提供將其專有格式文件轉為RINEX格式文件的工具,但是對于某些類型的接收機依然需要工程人員自己編程轉換。比如本文將要應用的U-Blox GPS接收機,其原始觀測數據以專有的UBX協議格式進行存儲,雖然有其專有的數據采集軟件u-center進行處理,但是卻不能轉為RINEX格式文件,或者直接輸出原始觀測、導航數據等,故數據處理時需要先將其解碼。若是多類型接收機綜合處理,則需要進一步將其解碼數據轉為通用RINEX格式數據。本文以U-Blox8接收機為例,介紹其原始觀測數據格式和解碼過程,并利用MATLAB進行解碼和轉換為RINEX格式文件,與u-center中的采集數據進行比較,驗證了原始觀測數據的正確性,與IGS數據中心的星歷進行比較,驗證了解碼星歷的正確性。
1.1 UBX協議的星歷和觀測數據
u-blox品牌的所有接收機使用UBX協議,也只有該品牌使用此協議。UBX協議輸出的消息類型的區分關鍵在于其CLASS,早期的版本和后來的版本相比較,是CLASS和下層的ID的擴充,即接收機輸出消息的內容更加豐富。比如u-blox5協議的RXM(0x02)下只有ID(0x20)SVSI(衛星健康信息),發展到最新的u-blox8協議,u-blox5協議的RXM(0x02)下ID總共有ALM/EPH/RAW/SFRB/PMREQ/RAWX/SFRBX/SVSI.其中原先的RAW只規定了GPS的原始觀測數據的輸出,而最新擴展的RAWX則規定了所有GNSS衛星的原始觀測數據輸出。
u-blox接收機log文件以.ubx為后綴的格式來存儲。并不是所有的u-blox接收機都輸出原始觀測數據(Raw Data),比如偽距測量值、載波相位觀測值、載波多普勒觀測值等等,所以需要選擇帶有原始觀測數據輸出的接收機,比如本文所選用的u-blox NEO M8T型號;也不是接收機的輸出數據中一定包含Raw Data,具體輸出內容按照需求在u-blox的PC端軟件u-center中進行配置[2]。
u-blox GNSS接收機使用專有協議(UBX)與主機進行通信,協議有以下幾個特點[3]:
1) 簡潔性;全部使用8 bit二進制數據存儲。
2) 校驗和保護;使用低開銷的校驗和算法。
3) 模塊化;使用二階的消息標識符。
UBX協議的數據包結構如圖1所示,由圖可以看出,每一個消息都有三部分來組成:頭部,數據部,校驗部。頭部的前兩個字節:0xB5 0x62,由此識別為UBX協議下傳輸的數據開始;CLASS的一個字節表示測量數據消息的類別。ID的一個字節則表示在一個CLASS下的具體參數項輸出。LENGTH表示數據部的長度(字節)。CK-A和CK-B是兩個校驗和字節。具體在u-blox NEO M8T接收機中,需要GPS衛星的星歷和原始觀測值,故選擇RXM-EPH和RXM-RAWX進行輸出和解析。星歷數據(EPH)的UBX協議消息結構如表1所示。

圖1 UBX協議數據包結構

表1 UBX協議星歷消息結構
Payload部分內容為星歷數據,關于其地址偏移和存儲類型詳細內容參考相應說明書[3]。
一個觀測歷元的RAWX數據UBX協議消息結構如表2所示。

表2 UBX協議Raw Data消息結構
Payload部分的內容為各項觀測參數的數據塊,關于其地址偏移和存儲類型詳細內容參考相應說明書[4]。
1.2 RINEX協議的nav和obs簡介
主要介紹RINEX 2.10版本的導航電文和觀測文件格式。RINEX格式的文件主要包括兩部分:文件頭和數據體。
導航電文的文件頭內容主要包含:
1) 文件版本信息,接收機信息,注釋等。
2) 歷書中的電離層參數,UTC時間參數,跳秒等。導航電文的數據記錄,按照衛星和參考時刻存放各顆衛星的時鐘和軌道參數。
觀測文件的文件頭內容主要包含:
1) 文件的屬性進行說明,比如文件類型,觀測員信息,觀測位置等。
2) 是觀測接收機的一些參數進行說明,比如接收機的型號、序列號和版本號,天線的類型和序號、天線的參數等。
3) 觀測數據的信息;比如觀測數據的參數類型,起始時間,歷元間隔等。
觀測文件的數據記錄,按照文件頭給出的觀測數據信息和格式標準,逐個歷元依次記錄在文件中。
導航電文和觀測數據具體文件頭和數據記錄的格式,按照RINEX標準進行輸出[1]。
2.1 解碼流程
從u-blox接收機獲取的ubx文件中包含UBX和NMEA兩種協議的數據;如果只是需要原始觀測數據可以選擇配置接收機僅僅輸出UBX協議的數據,但是考慮到可以使用NMEA協議中的數據信息進行輔助解碼,故選擇兩種協議數據同時輸出。ubx文件解碼流程如圖2所示。
圖中UBX和NMEA分開解碼,是由于在ubx中NMEA協議的數據直接以字符存儲,在MATLAB中可以使用函數fgetl()逐行讀取;而UBX協議數據是以二進制存儲,只能使用二進制讀取函數fread()逐字節讀取。兩者又是同時存在于一個文件中,故而分開解碼。其中的跳過數據塊部分,是根據塊的長度信息進行的。對于在NMEA數據中提取的時間信息,只是在本次解碼和轉換為RINEX文件中輔助作為時間戳,不代表NMEA數據只有時間,其實里面參數很豐富,可以根據需要進行提取[4]。
2.2 解碼注意事項
對于原始觀測數據(RAWX)讀取,其所在的數據塊中存儲的是每個歷元時刻所有的可見星原始觀測數據,參考UBX協議所規定的每個參數的偏移地址進行逐個讀取[4];對于導航電文(EPH)的讀取,在數據塊中存儲的是單個衛星的星歷電文前三個子幀(Subframe 1/2/3)[3],對其解析,需要參考星歷參數在子幀中的比特位偏移地址和數據格式[5]。
ubx文件中數據的存儲是小端存儲(Little-endian);即對于數據體(Payload)中每一個參數的讀取,要按照高字節在低地址,低字節在高地址的順序進行解碼,如果在不借助其他函數庫的情況下進行編程解碼,尤其需要注意這一點。整型相對容易讀取,但是浮點型的讀取就稍顯麻煩。雖說在MATLAB中可以直接調用格式化讀取來解碼浮點類型的數據,但考慮到在實際應用一般需要用計算機語言C/C++來進行實現,觀測數據中的浮點型是IEEE754標準的浮點格式,具體格式參考IEEE754標準[6]。
2.3 轉換為RINEX文件
解碼出來的參數可以單獨作為其他處理的數據源,轉為RINEX格式文件是為了能夠和其他不同類型的接收機數據進行聯合處理。所以在解碼完成之后,再進行一步轉換的操作,轉碼的過程相對容易一些,需要的數據已經在解碼過程中獲取到,轉為RINEX格式文件按照其協議標準進行格式化輸出即可[1]。
在u-center中配置u-blox8接收機,主要配置UBX協議中,輸出ID為AID-EPH和RXM-RAWX兩項。NMEA協議下的數據輸出配置為默認即可。配置完成后,開始在本地目錄記錄接收機觀測數據。然后利用編寫的MATLAB程序進行解碼,得到RINEX協議下的導航電文(nav)和原始觀測數據(obs)。將nav文件與IGS觀測站數據進行比較,兩者對應衛星廣播星歷完全相同,驗證了nav解碼的正確性。將obs文件中的某一個歷元數據與u-center中顯示的數據進行比較,也是完全吻合,也證明了obs解碼的正確性。
圖3示出了UBX最終轉換為RINEX星歷文件的結果。由于測試接收機的條件限制,文件頭的描述內容簡略表示。圖4示出了從UBX中解碼的原始觀測數據,轉換為RINEX格式觀測數據的結果。其中,在接收機定位起始的一段時間里,僅有兩顆有效GPS衛星觀測數據,收星穩定后所接收到的歷元中有了5個的GPS數據。 在接收機總的觀測數據中也有北斗衛星的信號,滿足定位的要求,而在當前的解碼轉換中,僅僅使用了GPS數據。根據文獻 [1],在觀測數據文件中,每個歷元觀測數據由三部分組成:觀測值以 14 位浮點數表示,保留 3 位有效數字;LLI(Loss of Lock Indicator)和信號強度分別以 1 位數表示,依次列于觀測值后。測試所用接收機主板并未發送相應信息時,所以均用”0”代替[7]。

圖3 UBX轉為RINEX的導航電文實例 (blox1840.16n)

圖4 UBX轉為RINEX的Raw Data 實例 (blox1840.16o)
本文分析了UBX協議下的導航電文和原始觀測數據格式,簡述了IEEE標準的浮點數格式和RINEX文件格式。利用MATLAB編程實現了對UBX協議的觀測數據的解碼和轉換為標準的RINEX2.10格式文件。并以解碼實例證明了該方法的正確性和有效性,文章未能解得RINEX觀測數據文件的頭文件中部分必要參數值,這雖然對于基準站快速定位的準確性并無影響,但對其進行分析仍是必要的。實例中所使用接收機本身能夠收取GNSS衛星的信號,但是在測試中未解碼其他導航系統數據,雖然在文章中稍顯不足,但在實際應用中,完全可以按照所示方法去解碼和提取。該解碼和轉換方法對于工程實踐人員會有實際幫助。
[1] 李征航,黃勁松. GPS測量與數據處理[M]. 武漢:武漢大學出版社,2005:182-202.
[2] U-blox AG. U-center_userguide_(UBX-13005250)[EB/OL]. [2015-02-23], http://www.u-blox.com/.
[3] U-blox AG. U-blox 7 receiver description [EB/OL]. [2013-02-1],http://www.u-blox.com/.
[4] U-blox AG. U-blox 8/u-blox M8 receiver description [EB/OL]. [2014-12-10], http://www.u-blox.com/.
[5] JAMES BAO-YEN TSUI. GPS軟件接收機基礎[M]. 2版. 北京: 電子工業出版社, 2008: 68-76.
[6] The Institute of Electricaland Electronics Engineers, Inc. IEEE Std 754-2008. IEEE Standard for Floating-Point Arithmetic[S].IEEE Computer Society, 2008.
[7] 賈蓉、王解先. NovAtel OEM4主板的GPS原始數據解碼[J]. 現代科學儀器,2010(1):54-57.
Decoding and Transformation Method of Raw Data for GPS Based on UBX Protocol Format
LIU Yike,GUO Chengjun,WU Heng
(UniversityofElectronicScienceandTechnologyofChina,Chengdu611731,China)
GPS positioning is based on the solution of Satellite Navigation Data and Receiver Observation Data, and the decoding of GPS raw data is a basic premise of the solution. In order to implement the joint processing for raw data of different Receivers, it’s a necessary step to convert proprietary protocol data format to standardization data format. This paper presents the decoding method of raw data of Receiver and transformation method of converting it to RINEX, as well as the matters needing attention in the manipulation. And briefly outlined the respective character of UBX protocol and RINEX format. Through the decoding the UBX protocol raw data from U-Blox NEO M8T receiver and transforming it to RINEX format data file, the method is proved to be correct and effective.
GPS raw data; decoding; transformation; UBX; RINEX; U-Blox
2016-07-10
10.13442/j.gnss.1008-9268.2016.06.016
P
1008-9268(2016)06-0080-05
劉毅科(1990-)男,碩士生,研究方向為衛星導航技術。
郭承軍 (1985-)男,博士生,研究方向為GNSS互換性與泛位置服務、新時空體系、完好性及增強系統。
吳衡 (1992-)男,碩士生,研究方向為衛星導航技術。
聯系人:劉毅科 E-mail: frank_uestc@163.com