RTCM数据解码

RTCM

RTCM数据协议介绍

1. 一帧数据组成

在这里插入图片描述

2.数据接收

/*(1) synchronize frame */
if (rtcm.nbyte == 0)
 {
  if (data != RTCM3PREAMB)//RTCM3PREAMB:同步码
  return 0;
  rtcm.buff[rtcm.nbyte++] = data;
   return 0;
  }
//(2)添加一Byte数据
 rtcm.buff[rtcm.nbyte++] = data;
 
// (3)当Byte数量为3时,读取数据长度(一帧RTCM数据除去CRC的数据的Byte数)
if (rtcm.nbyte == 3)
 {
 //getbitu(rtcm.buff, 14, 10)得到rtcm.buff第14个字节之后的10个字节信息。
// ,+3表示前三个byte(同步码、保留位、数据长度)
 rtcm.len = (int)rtcmcmn.getbitu(rtcm.buff, 14, 10) + 3; /* length without parity */
 }

//(4)读取完成nbyte数重置
 if (rtcm.nbyte < 3 || rtcm.nbyte < rtcm.len + 3) //+3表示比数据长度多接收3个Byte,其为为校验位
    return 0;
 rtcm.nbyte = 0;

实时数据传输进来经过(1)(2)(3)(4)四个步骤存储到buff中。

注:byte[] buff。每次接收1Byte(字节)数据对应8bit(位)

  • 位(bit):比特,指二进制中的一位,是二进制的最小信息单位。 bit也被称作小b,用b表示。(所以byte是大B),一个二进制数据0或1,是1bit。
  • 字节byte:1byte有8位 最大值为255 最小值是0 2^8-1=255
/*
目的获取buff(byte数组)从pos位起始后len位表示的信息。 
*/
 public static uint getbitu(byte[] buff, int pos, int len)
 {
 uint bits = 0;
 int i;
 try
  {
    for (i = pos; i < pos + len; i++)
     {
     //[i / 8] 取整,i % 8取余
     bits = (bits << 1) + ((uint)(buff[i / 8] >> (7 - i % 8)) & 1u);
     }
   }
return bits;
}

注:[i / 8]:当前位i所在的buff索引,buff[i / 8] :包含当前位信息的字节(Byte),(buff[i / 8] >> (7 - i % 8):截取字节中i位的信息。(bits << 1) :将上一次循环计算得到的高位信息左移来保留高位信息。

3. CRC校验

再通过(4)判定之后,接受完一帧数据通过CRC校验保证数据的完整性。

  //(5)校验位,校验数据是否完整
if (rtcmcmn.crc24q(rtcm.buff, rtcm.len) != rtcmcmn.getbitu(rtcm.buff, rtcm.len * 8, 24))
   {
    //trace(2, "rtcm3 parity error: len=%d\n", rtcm.len);
    return 0;
   }

CRC检校原理
模2除法
RTKLIB中CRC-24Q检校代码:

  crc = ((crc << 8) & 0xFFFFFF) ^ tbl_CRC24Q[(crc >> 16) ^ buff[i]];
  • crc << 8表示将32位的crc左移8位,低位补0。(crc << 8) & 0xFFFFFF表示只取移位后从低位开始的24位,即从左到右24位。crc >> 16表示将crc右移16位。
  • (crc >> 16) ^ buff[i] 表示对移位后的数据与buff[i]中的八位进行按位异或运算得到n
  • 最后根据计算结果n选取tbl_CRC24Q数组中的第n个数在与(crc << 8) & 0xFFFFFF进行按位异或运算。
    注:tbl_CRC24Q数组为八位二进制数组(即0-255的二进制表示),表示原始数据除以相应校验多项式后的余数表。

注:

<<:左移运算,a<<m,将a按二进制位向左移动m位,高位移除后,低位补0>>:右移运算,a>>m,将a按二进制位向右移动m位,低位移除后,高位补0^  :按位异或运算,二进制逐位非或,从最小(及最右)的位开始,对操作位数逐位操作,相同           为0,不同为1。例如:X:0000 1011 1111   Y:1111 0101 1111     X^Y:1111 1110 00000xFFFFFF0x表示16进制,FFFFFFFF 一个F代表4位的1111

crc表介绍

常用数据类型

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: RTCM3.2解码程序是一种用于将RTCM3.2格式的数据转换为可读性高的信息的软件程序。RTCM(Radio Technical Commission for Maritime Services)是一个国际组织,负责制定和推广用于无线电通信的技术标准。 RTCM3.2是用于全球导航卫星系统(GNSS)的一种数据格式。这种格式包含了通过卫星信号传输的位置、速度和时间等相关信息。RTCM3.2解码程序旨在将这些信息解析出来,并以易于理解的方式呈现出来。 RTCM3.2解码程序通常由几个主要模块组成。首先,程序会读取并解析RTCM3.2数据流。然后,它会提取每个数据帧的相关信息,例如卫星的ID、接收机的坐标和时间戳等。接下来,程序会对数据进行处理,例如校正误差和生成精确的位置解算结果。 在解码完成后,程序通常会将结果显示在用户界面上。用户可以通过界面查看卫星的数量、精度等信息,也可以导出数据供其他应用程序使用。 RTCM3.2解码程序在各种应用中发挥着重要的作用。例如,在航空航天和定位导航领域,它可用于获取高精度的位置和速度信息。在地理测量和地图制作中,它可用于获取准确的地理坐标。此外,RTCM3.2解码程序还可用于定位服务、气象预报、海洋研究等领域。 总之,RTCM3.2解码程序是一种用于解析并处理RTCM3.2格式数据的软件工具,它能够提供高精度的位置、速度和时间等信息。无论在航空航天、地理测量还是其他领域,它都具有广泛的应用前景。 ### 回答2: RTCM3.2解码程序是一种计算机程序,用于解码RTCM3.2格式的数据RTCM(Radio Technical Commission for Maritime Services)是一个制定标准的组织,旨在促进海事服务和卫星导航系统的发展和使用。 RTCM3.2是一种用于GPS和GNSS(全球导航卫星系统)接收机的数据格式标准,主要用于传输导航和定位数据。这种数据格式使用二进制编码,能够有效地传输大量的位置、速度和时间等信息。 RTCM3.2解码程序通过读取RTCM3.2格式的数据流,将其解析为可理解和使用的定位信息。它会将接收到的二进制数据解析为不同的数据字段,例如GPS卫星的编号、用于定位的卫星信号强度、接收机的位置和速度等。 解码程序还可以对数据进行校验,确保接收到的数据的完整性和正确性。一旦数据被成功解码,用户就可以使用解码后的信息进行定位和导航操作。 RTCM3.2解码程序在航海、船舶导航、航空以及地理信息系统等领域中发挥着重要作用。它帮助用户获取准确的位置和定位数据,提供导航支持,并应用于各种导航设备和应用中。 总的来说,RTCM3.2解码程序是一种用于解析RTCM3.2格式数据的计算机程序,能够将二进制数据解码为实际可用的位置和定位信息,为导航和定位提供支持。 ### 回答3: RTCM是一种用于实时差分全球定位系统(GNSS)的数据格式,而RTCM 3.2则是RTCM标准的一个版本。RTCM 3.2解码程序是一种软件程序,用于将接收到的RTCM 3.2数据进行解码和处理。 RTCM 3.2解码程序的主要功能包括以下几个方面: 1. 数据解析:程序能够从接收器接收到的原始RTCM 3.2数据中正确地解析出各种信息,包括卫星的位置、钟差、观测数据等。 2. 差分计算:解码程序能够根据接收到的差分基准站信息,对接收器的GNSS数据进行差分计算,以提高定位精度。 3. 数据处理:解码程序能够处理RTCM 3.2数据中的差分修正数值,并将其应用到GNSS数据中,以实现更准确的定位结果。 4. 输出结果:解码程序可以将解码和处理后的数据输出,以便用户使用或进一步分析。 此外,RTCM 3.2解码程序还可以具备一些附加功能,如数据压缩、周期性数据更新等,以提高数据传输效率和实时性。 RTCM 3.2解码程序主要应用于对GNSS定位精度要求较高的应用领域,如精密农业、测绘、地质勘探等。它能够帮助用户获得更高的定位精度,提高工作效率和数据质量。 总之,RTCM 3.2解码程序是一种能够解析和处理接收到的RTCM 3.2数据的软件程序,为用户提供更准确的定位结果和高质量的数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

My.科研小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值