王民 ,王解先
(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数据解码无误。