基于RTCM3.2标准的GNSS差分数据解码研究及算法实现
2019-05-29王民王解先
王民 王解先
【摘 要】论主要研究了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.