王民 ,王解先
(1.同濟大學,上海 200030;2.湖北億伽通科技有限公司,上海 200030)
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解碼內容,主要針對的是傳輸層和表示層。
傳輸層定義了發送或接收RTCM-3數據的幀結構,一條完整的RTCM-3語句由以下幾部分組成:一個固定長度的前導字、保留字、一個信息長度、一條可變長度的信息、一個24比特的周期冗余校驗碼,具體的幀結構如下表1所示:

表1 RTCM-3幀結構
RTCM3.2增加了MSM(Multiple Signal Messages,多信號電文組)電文組,用來取代RTCM-3現有的一些電文類型 (如,MT1001-1004,MT1009-1012),并提供了對 BDS、Gelileo等越來越多的導航衛星系統以及未來可用信號的支持。MSM用更加通用的方式來表示GNSS接收機觀測信息,可以更加便捷地進行編碼和解碼,具有更好的靈活性和可擴展性。
1.2.1 MSM電文結構
MSM的電文結構由頭信息、衛星數據以及信號數據三部分(如下表2所示)組成。

表2 MSM電文結構
①衛星掩碼(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,
根據RTCM3標準對GNSS數據格式的定義,進行數據的解碼。解碼流程如“圖1 RTCM3解碼數據流程圖”所示,在接收RTCM3數據后,第一步先判斷第一個8位的比特是否為引導字,若是引導字,則繼續判斷下一個6位的比特是否為0,如果是,則根據下一個10位的比特來獲取信息長度n,獲取信息長度后,需要判斷余下的字節是否大于n+3個字節,若字節數充足,則獲取n+3個字節,并計算電文的CRC 校驗碼,并與電文給出的CRC校驗碼進行比較,如果不同,則說明電文有誤,應丟棄,如果相同,則檢驗通過,進入RTCM3數據解碼階段,按照RTCM3的電文結構,將相應的數據解析出來,并恢復成正確的值。

圖1 RTCM3解碼數據流程圖
在解碼MSM電文時,由于MSM1~MSM3電文中沒有距離的整毫秒部分,因此,需要根據基準站的坐標及衛星星歷進行計算恢復。
本測試使用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數據解碼無誤。