邢旺



Research of Decoding Method for GPS Raw Data
摘要:分析了GPS OEM板卡輸出的二進制原始數(shù)據(jù)格式,提出了一種二進制原始數(shù)據(jù)的解析方法,通過C++軟件編程實現(xiàn)了觀測值、定位結(jié)果等信息的提取。討論了二進制原始數(shù)據(jù)文件向文本文件的轉(zhuǎn)換方法,并利用此方法編寫原始數(shù)據(jù)解析軟件,初步判斷測量數(shù)據(jù)的質(zhì)量。通過處理測量數(shù)據(jù)驗證了解析方法的正確性與實用性。
Abstract: The format of GPS raw data exported by GPS OEM board is analyzed. A decoding method of raw data is put forward. The observation and position data is displayed by C++ program. The method of converting raw data file to text file is discussed, as well as the decoding program of raw data is accomplished. Both the analysis and the experiment can prove the correctness and the practicability of the decoding method.
關(guān)鍵詞:GPS;二進制;原始數(shù)據(jù);格式轉(zhuǎn)換
Key words: GPS;binary;raw data;format conversion
中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1006-4311(2018)15-0276-03
0 引言
GPS是20世紀(jì)70年代美國國防部研究與創(chuàng)建的新一代衛(wèi)星導(dǎo)航與定位系統(tǒng),現(xiàn)階段基于GPS的定位導(dǎo)航終端已被廣泛應(yīng)用于軍事安全、大地測量、航海航空、氣象服務(wù)、物流交通等領(lǐng)域。GPS導(dǎo)航接收機輸出的數(shù)據(jù)格式主要包括NMEA-0183格式和二進制原始數(shù)據(jù)格式,二進制原始數(shù)據(jù)具有節(jié)省存儲空間的優(yōu)點,并且能夠包含星歷、偽距、載波相位等信息,但需要對原始數(shù)據(jù)做解析處理后才能獲得直觀的觀測與定位數(shù)據(jù),所以研究二進制原始數(shù)據(jù)的解析方法具有重要意義[1]。本文首先分析二進制原始數(shù)據(jù)結(jié)構(gòu),并通過編寫原始數(shù)據(jù)解析軟件,為二進制原始數(shù)據(jù)的解析提供了依據(jù)。
1 數(shù)據(jù)格式分析
衛(wèi)星導(dǎo)航接收機輸出的原始數(shù)據(jù)格式往往因生產(chǎn)廠家而異,本文以JAVAD公司生產(chǎn)的JNS-100接收機板卡為例,并對其輸出的GPS二進制原始數(shù)據(jù)結(jié)構(gòu)進行分析。二進制原始數(shù)據(jù)并不是接收機所默認(rèn)的輸出數(shù)據(jù),需要通過向接收機發(fā)送指令,才能輸出所需要的原始數(shù)據(jù)。命令的發(fā)送可以使用串口通訊軟件實現(xiàn),具體設(shè)置命令可參考接收機廠家提供的數(shù)據(jù)手冊。
每條觀測數(shù)據(jù)通常由三部分組成:數(shù)據(jù)頭、數(shù)據(jù)體和數(shù)據(jù)尾。數(shù)據(jù)頭因觀測信息的不同而不同,長度為5個字節(jié),以5個16進制標(biāo)識符表示,其中前兩個字節(jié)為觀測信息標(biāo)識,后三個字節(jié)為數(shù)據(jù)體的長度。數(shù)據(jù)體用多個16進制標(biāo)識符表示相應(yīng)的觀測數(shù)據(jù),最后一個字節(jié)為校驗和。數(shù)據(jù)尾長度為1個字節(jié),用16進制標(biāo)識符的0x0A表示。多條不同的觀測數(shù)據(jù)連接在一起組成一幀原始數(shù)據(jù),通過接收機的串口發(fā)送給數(shù)據(jù)記錄器。本文所設(shè)置的每一幀二進制原始數(shù)據(jù)所包含的信息如表1所示。
其中,“~~”表示當(dāng)前一天中的時間,數(shù)據(jù)體中包含4個字節(jié)時間信息,其值為0-86400000ms;“RD”表示當(dāng)前日期,數(shù)據(jù)體中包含4個字節(jié)長度年、月、日信息;“SI”表示衛(wèi)星PRN,數(shù)據(jù)體中包含當(dāng)前所有可見衛(wèi)星PRN,每一個衛(wèi)星PRN以1個字節(jié)表示;“RC”表示偽距,數(shù)據(jù)體中包含所有可見衛(wèi)星的偽距時間信息,每一個偽距時間信息以8個字節(jié)表示;“CP”表示載波相位,數(shù)據(jù)體中包含所有可見衛(wèi)星的載波相位時間信息,每一個載波相位時間信息以4個字節(jié)表示;“PV”表示當(dāng)前位置和速度,數(shù)據(jù)體中包含笛卡爾坐標(biāo)系下的位置和速度觀測值,位置數(shù)據(jù)X、Y、Z分別由8個字節(jié)表示,速度數(shù)據(jù)vx、vy、vz分別由4個字節(jié)表示;“DP”表示精度因子,即DOP值,數(shù)據(jù)體中包含水平位置、高程、時間的精度因子,分別由4個字節(jié)表示[2]。分析完一幀數(shù)據(jù)的結(jié)構(gòu),便可對其進行解碼。
2 解析方法和軟件實現(xiàn)
數(shù)據(jù)記錄器中會保存相應(yīng)的原始數(shù)據(jù)文件,通過USB下載線將數(shù)據(jù)文件下載到計算機后,可以利用VC++編寫數(shù)據(jù)處理軟件進行數(shù)據(jù)解碼。數(shù)據(jù)解碼流程如圖1所示。
利用C++文件流函數(shù)fopen將原始數(shù)據(jù)文件以二進制形式打開,然后用fread函數(shù)按字節(jié)讀取二進制原始數(shù)據(jù),當(dāng)查找到數(shù)據(jù)頭“7E 7E”,即ASCII碼的“~~”時,開始將數(shù)據(jù)保存到變量中,直到再次遇到數(shù)據(jù)頭為止。完整的一幀原始數(shù)據(jù)如圖2所示。
一幀原始數(shù)據(jù)的長度不是固定不變的,具體的字節(jié)數(shù)取決于當(dāng)前的可見星數(shù)。其中,偽距、位置的數(shù)據(jù)類型為雙精度浮點型(double),載波相位、速度和精度因子為單精度浮點型(float),原始數(shù)據(jù)的存儲按照小尾端機制(Little Endian Format),即低位優(yōu)先順序,當(dāng)接收到的某個觀測值需要多個字節(jié)表示時,在解碼過程中應(yīng)當(dāng)先將數(shù)據(jù)的各個字節(jié)倒序排列[3],以速度觀測信息為例,當(dāng)原始數(shù)據(jù)文件中表示速度的4個字節(jié)為0x13 0x89 0x94 0xC0時,需要將順序轉(zhuǎn)換為0xC0 0x94 0x89 0x13,然后將16進制數(shù)轉(zhuǎn)換為float型。浮點型數(shù)據(jù)以二進制形式表示時,涉及符號位、階數(shù)和尾數(shù)[4],如果展開成多位二進制數(shù)后再進行轉(zhuǎn)換較為復(fù)雜,本文利用一種簡單快捷的方法,轉(zhuǎn)換代碼如下:
vxbyte.Format("%02x%02x%02x%02x",byte[3],byte[2],byte[1],byte[0]);
sscanf(vxbyte,"%lx",&vx;);
其中,byte型數(shù)組用以存儲速度的原始數(shù)據(jù),vxbyte為字符串類型,用以存儲轉(zhuǎn)換順序后的速度數(shù)據(jù),vx為float型,用sscanf函數(shù)轉(zhuǎn)換后可以得出vx的值為-4.64173m/s。另外,由于本文所用接收機板卡偽距和載波相位原始數(shù)據(jù)都是以時間信息表示,需要根據(jù)公式進行計算。偽距RC的計算公式為:
RC=c·prRC (1)
c為光速,單位為m/s,prRC即原始數(shù)據(jù)解算后的偽距時間信息,單位為s。
載波相位CP的計算公式為:
CP=(rcp+prRC)·FLn (2)
rcp為原始數(shù)據(jù)解算后與載波相位相關(guān)的時間信息,F(xiàn)Ln為載波頻率,本文中只用到GPS的L1頻段,所以FLn取值為1575.42MHz。
對完整的一幀原始數(shù)據(jù)進行解碼計算后,得出的所有參數(shù)值如表2所示,然后即可方便地進行進一步處理,也可利用該方法繼續(xù)編寫較為復(fù)雜的上位機軟件。
3 應(yīng)用實例
將某次測量的數(shù)據(jù)文件從數(shù)據(jù)記錄器下載到計算機中,然后利用VC++編寫的數(shù)據(jù)處理軟件處理,數(shù)據(jù)處理程序界面如圖3所示。
首先打開原始數(shù)據(jù)文件,點擊分析后即可生成解碼數(shù)據(jù)文件。本文將解析數(shù)據(jù)保存為文本文件格式,解析后的部分?jǐn)?shù)據(jù)展示如圖4所示。
衛(wèi)星的幾何分布取決于可見星個數(shù)及其相對于用戶設(shè)備的幾何分布,而且DOP值的大小與GPS定位的誤差成正比,DOP值越大,定位誤差越大,定位的精度也就相對降低,故分析試驗過程中的可見星數(shù)與DOP值的大小具有一定的意義[5]。可見星數(shù)與HDOP和VDOP的曲線如圖5所示。
由圖5可以看出,試驗過程中可見星數(shù)最少為8顆,最多為10顆,搜星狀況比較良好,水平位置精度因子HDOP和高程精度因子VDOP在測量過程中均小于2,初步判斷本次測量中所使用的GPS接收機工作情況良好。
4 結(jié)束語
本文分析了GPS OEM板輸出的二進制原始數(shù)據(jù)結(jié)構(gòu),并利用VC++進行軟件編程,實現(xiàn)了一種簡單高效的原始數(shù)據(jù)解析方法,通過對測量的GPS二進制原始數(shù)據(jù)解析,可以獲得較為直觀的觀測數(shù)據(jù),驗證了解析方法的正確性,同時還能基于該解析方法,編寫較為復(fù)雜的數(shù)據(jù)質(zhì)量檢測軟件及測量數(shù)據(jù)顯示軟件,既能節(jié)約成本,也對測量數(shù)據(jù)的處理與評估提供依據(jù)。
參考文獻:
[1]劉海穎,王惠南,陳志明.衛(wèi)星導(dǎo)航原理與應(yīng)用[M].北京:國防工業(yè)出版社,2013.
[2]JAVAD GNSS.GNSS Receiver External Interface Specification[S].2016.
[3]賈榮,王解先.NovAtel OEM4主板的GPS原始數(shù)據(jù)解碼[J].現(xiàn)代科學(xué)儀器,2010,2(1):54-57.
[4]李萌,胡紹林.一種解碼接收機原始二進制數(shù)據(jù)的方法[J].2014,39(3):59-61.
[5]謝鋼.GPS原理與接收機設(shè)計[M].北京:電子工業(yè)出版社,2009.