王民 王解先
【摘 要】論主要研究了RTCM32通訊協議的傳輸層、表示層,以及MSM電文的結構、組成以及編碼方式,設計了RTCM32語句的解碼流程,實現了相關的軟件算法,并用實際的數據驗證了其正確性。
【Abstract】This paper mainly studies the transmission layer, presentation layer of RTCM32 communication protocol, and the structure, composition and coding mode of MSM message. And the decoding flow of RTCM32 statement is designed, the relevant software algorithm is realized, and its correctness is verified by actual data.
【關鍵詞】RTCM3.2標準;GNSS;差分數據解碼
【Keywords】 RTCM3.2 standard; GNSS; differential data decoding
【中圖分類號】TP393.08 【文獻標志碼】A 【文章編號】1673-1069(2019)04-0185-02
1 RTCM3.2 標準
RTCM 104專業委員會的主要研究方向為差分全球導航衛星系統(DGNSS),負責制修訂差分GNSS的系列標準。目前最新的版本是2016年12月7日發布的“差分GNSS服務第三版”(RTCM 10403.3,Differential GNSS Service Version3)。
RTCM 104標準協議是基于開放式系統互聯標準模型(Open System Interconnection standard reference model, OSI)建立,包括應用層、表示層、傳輸層、數據鏈路層及物理層。本文主要涉及RTCM 10403.2解碼內容,主要針對的是傳輸層和表示層。
1.1 傳輸層(Transport Layer)
傳輸層定義了發送或接收RTCM-3數據的幀結構,一條完整的RTCM-3語句由以下幾部分組成:一個固定長度的前導字、保留字、一個信息長度、一條可變長度的信息、一個24比特的周期冗余校驗碼,具體的幀結構如下表1所示:
1.2 表示層(Presentation Layer)
RTCM3.2增加了MSM(Multiple Signal Messages,多信號電文組)電文組,用來取代RTCM-3現有的一些電文類型(如,MT1001-1004,MT1009-1012),并提供了對BDS、Gelileo等越來越多的導航衛星系統以及未來可用信號的支持。MSM用更加通用的方式來表示GNSS接收機觀測信息,可以更加便捷地進行編碼和解碼,具有更好的靈活性和可擴展性。
1.2.1 MSM電文結構
MSM的電文結構由頭信息、衛星數據以及信號數據三部分(如下表2所示)組成。
①衛星掩碼(DF395,GNSS Satellite mask)表示本條電文中可用數據的衛星,它是一個64位的二進制bit序列,其中,最高位對應ID為1的衛星,最低位為對應ID為64的衛星。若衛星的數據可用,則對應的比特位置為1;否則,對應的比特位置為0。
②信號掩碼(DF395,GNSS Signal mask)。信號掩碼(DF395,GNSS Signal mask)表示本條電文中可用的衛星信號,它是一個32位的二進制bit序列,其中最高位對應ID為1的衛星信號,最低位為對應ID為32的衛星信息。若信號數據可用,則對應的比特位置為1;否則,對應的比特位置為0。
③單元掩碼(DF396,GNSS Cell mask)。單元掩碼(DF396,GNSS Cell mask)是一個二維表,長度為Nsat*Nsig(可用衛星數乘以可用信號數),其中行表示本條電文中可用的信號ID(信號掩碼中設置為1的信號),列表示本條電文中可用的衛星ID(衛星掩碼中設置為1的衛星),若對應衛星/信號可用,則對應的比特位置為1;否則,對應的比特位置為0。此二維表采用列信息(以衛星為單元)進行打包編碼。
RTCM3.2 MSM電文的這種編碼方式,被稱為“內循環”的數據組織方式,這種方式不同于RTCM之前版本的以衛星或信號類別組織數據的方式,而是以數據類型進行組織的。以MSM4電文為例,在衛星數據塊中,先依次存儲所有衛星的第一個數據類型的數據(DF397,概略偽距的整數秒數),再依次存儲所有衛星的第二個數據類型的數據(DF398,概略偽距的不足整數秒數),依次類推。同樣的,在信號數據塊中,先依次存儲所有衛星/信號的第一個數據類型數據(DF400,精確偽距值),再依次存儲所有衛星/信號的第二個數據類型數據(DF401,精確相位值)依次類推[1]。
在大多數的實時數據傳輸應用中,為了確保在一條RTCM-3電文中傳輸一條完整的MSM信息,GNSS Cell mask的比特位數一般要求小于64(X≤64,如Nsat≤16,Nsig≤4)。若X≥64,如Nsat=14,Nsig=6),則編碼時必須使用兩條單獨的RTCM-3電文來進行編碼,如第一條電文包括7顆衛星和6個信號,第二條電文包括7顆衛星和6個信號。同時,必須在確保 “多電文比特位(Multiple Message Bit)” 字段設置正確。
1.2.2 MSM觀測值表示及計算
在MSM電文中,所有觀測值(偽距、相位)都是以時間單位“毫秒”表示的,并且設定光速 ,各觀測值的計算公式如下:
①標準精度電文
偽距(米) = c/1000 *(Nms + Rough_range/1024 + 2-24 *Fine_Pseudorange)
相位(米) = c/1000 *(Nms + Rough_range/1024 + 2-29 *Fine_PhaseRange)
相位變化率(米/秒)= Rough_PhaseRangeRate + 0.0001 * Fine_PhaseRangeRate
②高精度電文
偽距(米) = c/1000 *(Nms + Rough_range/1024 + 2-29 *Fine_Pseudorange),
相位(米) = c/1000 *(Nms + Rough_range/1024 + 2-31 *Fine_PhaseRange),
相位變化率(米/秒)= Rough_PhaseRangeRate + 0.0001 * Fine_PhaseRangeRate,
2 RTCM32解碼設計
根據RTCM3標準對GNSS數據格式的定義,進行數據的解碼。解碼流程如“圖1 RTCM3解碼數據流程圖”所示,在接收RTCM3數據后,第一步先判斷第一個8位的比特是否為引導字,若是引導字,則繼續判斷下一個6位的比特是否為0,如果是,則根據下一個10位的比特來獲取信息長度n,獲取信息長度后,需要判斷余下的字節是否大于n+3個字節,若字節數充足,則獲取n+3個字節,并計算電文的CRC校驗碼,并與電文給出的CRC校驗碼進行比較,如果不同,則說明電文有誤,,應丟棄,如果相同,則檢驗通過,進入RTCM3數據解碼階段,按照RTCM3的電文結構,將相應的數據解析出來,并恢復成正確的值。
在解碼MSM電文時,由于MSM1~MSM3電文中沒有距離的整毫秒部分,因此,需要根據基準站的坐標及衛星星歷進行計算恢復。
3 數據測試與分析
本測試使用Trimble R10接收機作為基準站,設置RTCM32數據作為輸出流。同時保存Rinex原始數據格式,作為參照依據,與解碼后的RTCM32數據進行對比,分析RTCM32 1074/1084/1124語句解析的正確性。觀測歷元的頭信息對比,本測試選取了2018年12月17日02:20~02:30之間共10組數據進行了對比分析,每個歷元的頭信息,主要包括歷元時間、衛星數等。
從分析結果可知,每個歷元頭信息的解析,跟Rinex原始觀測數據完全一致,說明RTCM32 MSM的頭信息解析無誤。
在規定的時間段中,選取GPS13號衛星的偽距信息,對其10個歷元的L1/L2偽距數據進行對比分析。分析結果顯示,L1/L2偽距的最大差值為0.0009m,最小差值為0.0m,平均差值為0.0006m。由于Rinex文件中偽距的取值精確到小數位后3位,所以以上偽距的差值可認為在誤差范圍之內,滿足要求,說明RTCM32 MSM4數據解碼無誤。
【參考文獻】
【1】高晟俊,譚羽安.GNSS差分數據格式編解碼算法研究與實現[J].測繪科學,2018,43(03):19-23+34.