BINEX格式介绍

BINEX格式介绍

概述

BINEX是"BINary EXchange"的缩写,是常用的一种数据交换格式,在GNSS研究中用得很多。

BINEX被设计用来封装任意ASCII码形式的交换数据,比如 RINEX、IONEX、SP3、SINEX等。它有一些设计原则:

  • 任意两个BINEX文件必须可以用cat命令连接生成一个新的合法的BINEX文件
  • 每个BINEX文件由一条或多条BINEX记录组成
  • 每条BINEX记录支持子记录
  • 每条记录中的数据有相同的存储顺序(big/little endian)
  • BINEX解释器要能解析混合存储顺序的BINEX文件
  • 每条记录都有CRC校验
  • 若需要,BINEX文件可以从后往前读取
  • BINEX记录中的时间标签必须在公元1980到3000年有效
  • BINEX可扩展
  • BINEX记录没有版本号

结构

BINEX包含两层结构,上层通用的记录结构,底层是具体的记录。
上层通用结构有两种。

结构一

字节数 含义
1 同步字节,包含大小端控制位
1 ~ 4 记录ID
1 ~ 4 记录长度
1 ~ 4 (可选),位反转的记录长度 (只用于增强型CRC)
n 记录消息
1 ~ 16 CRC

结构二

字节数 含义
1 同步字节,包含大小端控制位
1 ~ 4 记录ID
1 ~ 4 记录长度
1 ~ 4 (可选),位反转的记录长度 (只用于增强型CRC)
n 记录消息
1 ~ 16 CRC
1 ~ 4 反向字节数(字节反序)
1 反向同步字节,也包含大小端控制位

对比两种结构可以发现,后一种结构比前一种多了总字节数和反向同步字节两个部分,其目的是方便从后往前读取记录。

同步字节

同步字节是BINEX格式定义好的,如下表所示:

结构 存储顺序 CRC类型 可读方向 同步字节 反向字节
小端 常规 正向 0xc2 = [11000010]
大端 常规 正向 0xe2 = [11100010]
小端 增强 正向 0xc8 = [11001000]
大端 增强 正向 0xe8 = [11101000]
小端 常规 双向 0xd2 = [11010010] 0xb4 = [10110100]
大端 常规 双向 0xf2 = [11110010] 0xb0 = [10110000]
小端 增强 双向 0xd8 = [11011000] 0xe4 = [11100100]
大端 增强 双向 0xf8 = [11111000] 0xe0 = [11100000]

同步字节的编码是字母’B’、‘b’、‘R’、‘r’、‘H’、‘h’、'X’和’x’的ASCII码加上0x80得到的。
观察还可以发现,反向字节是同步字节按位取反然后再反序得到的。

记录ID

记录的ID是一个ubnxi类型的值,ubnxi类型即unsigned BINEX integer,是一个可变长度的类型,为1~4个字节,其规则是若前一个字节的最高位(bit7)为1,则还有下一个字节,否则没有。于是有以下4种情况:

  • 1字节:[0xxxxxxx] 取值范围 0-127
  • 2字节:[1xxxxxxx][0xxxxxxx] 取值范围 128-16383
  • 3字节:[1xxxxxxx][1xxxxxxx][0xxxxxxx] 取值范围 16384-2097151
  • 4字节:[1xxxxxxx][1xxxxxxx][1xxxxxxx][xxxxxxxx] 取值范围 2097152-536870911

记录ID的 (0-127) 被保留作为公共领域的标准,目前已分配的是:

  • 0x00 = 0 站点等的配置数据
  • 0x01 = 1 GNSS导航信息如星历等
  • 0x02 = 2 同0x7f
  • 0x03 = 3 同0x7d
  • 0x04 = 4 同0x7e
  • 0x05 = 5 处理结果,如PVT解算结果
  • 0x7d = 125 接收机内部状态数据
  • 0x7e = 126 辅助站点数据
  • 0x7f = 127 GNSS观测数据

其他ID (128-536870911) 可以被分配给其他组织,如:

  • 0x80 - 0x87 分给了 COSMIC/UCAR
  • 0x88 - 0xa7 分给了 Ashtech Precision Products
  • 0xa8 - 0xaf 分给了 Topcon Positioning Systems
  • 0xb0 - 0xb3 分给了 GPS Solutions, Inc.
  • 0xb4 - 0xb7 分给了 NRCan for IGS Real-Time Working Group GNSS development
  • 0xb8 - 0xbf 分给了 JPL
  • 0xc0 - 0xc3 分给了 CU Boulder
记录长度

记录长度也是一个ubnxi类型的值,表示的是紧跟在记录长度这个值之后的记录消息的长度。

记录消息

其内容格式取决于消息类型。

CRC

分两类:常规型和增强型。按不同记录长度又分不同的校验方式。如下表:

类型 记录长度(字节) CRC码长度 校验方式
常规 0 ~ 127 1 所有字节8位XOR
常规 128 ~ 4095 2 x 16 + x 12 + x 5 + x 0 x^{16} + x^{12} + x^5 + x^0
常规 4096 ~ 1048575 4 x 32 + x 26 + x 23 + x 22 + x 16 + x 12 + x 11 + x 10 + x 8 + x 7 + x 5 + x 4 + x 2 + x 1 + x 0 x^{32} + x^{26} + x^{23} + x^{22} + x^{16} + x^{12} + x^{11} + x^{10} + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + x^0
常规 >= 1048576 16 128位MD5
增强 0 ~ 127 2 x 16 + x 12 + x 5 + x 0 x^{16} + x^{12} + x^5 + x^0
增强 128 ~ 1048575 4 x 32 + x 26 + x 23 + x 22 + x 16 + x 12 + x 11 + x 10 + x 8 + x 7 + x 5 + x 4 + x 2 + x 1 + x 0 x^{32} + x^{26} + x^{23} + x^{22} + x^{16} + x^{12} + x^{11} + x^{10} + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + x^0
增强 >= 1048576 16 128位MD5
反向消息长度

反向消息长度是一个ubnxi类型的值,表示的是紧跟其后的记录消息的长度(反向看,即包括CRC、记录消息、记录长度、记录ID和同步字节的总长度)。它主要是用来方便从后往前读取记录。要注意的是它是字节顺序也是反序的。

观测值记录

常用的观测值记录(记录ID 0x7f,子记录ID 0x05)格式如下:

内容名称 数据类型 数据长度(字节) 内容描述
子记录ID uint1 1 固定为0x05
时间标签 uint4+uint2 6 前4字节是从1980年1月6日开始的分钟数,后2字节是剩余的毫秒数
卫星数量和标志 uint1 1 低6位表示卫星数量减一,第6位表示是否有系统时间头信息,第7位表示是否有接收机钟差信息。
[接收机钟差] 0 或 3 前面标志决定是否有此内容。若有,低22位表示纳秒,有符号整形(2c22b),高2位为毫秒重置消息
[系统时间头] 0 或 1 前面标志决定是否有此内容。若有,低4位表示时间标签所参考的卫星系统ID,若无,默认参考GPS系统。高4位n表示后面的系统时间偏差中提供了多少个参考时间偏差。
[系统时间偏差] 0 或 4n 前面系统时间头中的n决定是否有此内容。若n>0,表示有n个参考。每个参考中低4位表示所参考的卫星系统ID,高24位(2c24b)表示钟差,纳秒。

后面跟着的就是一组或者多组卫星观测数据信息,每一组的格式如下:

内容名称 数据类型 数据长度(字节) 内容描述
卫星ID uint1 1 卫星ID
卫星系统和观测信息 uint1 1 低4位为卫星系统ID,4~6位表示有多少个观测信息块(最多7个),第7位表示卫星状态是否不健康。

下面是一个(可以有多个)观测信息块的信息:

内容名称 数据类型 数据长度(字节) 内容描述
观测码 uint1 1 低5位为观测码ID。第7位表示是否有观测标志在后面。
[观测标志0] uint1 0 或 1 确定后面是否有多普勒信息和周跳信息,确定载波精度及测距值所占位数,确定是否有下一个观测标志。
[观测标志1] uint1 0 或 1 确定伪距、载波是否平滑,是否使能多路径抑制,确定是否有下一个观测标志。
[观测标志2] uint1 0 或 1 2~5位表示GLONASS系统观测的频率信息,确定是否有下一个观测标志。
[观测标志3] uint1 0 或 1 保留,确定是否有下一个观测标志(因为最多4个,所以后面应该没有了)。基本没有用。
载噪比 uint1 1 载噪比的一部分,精度0.4 dBHz,范围0.0 ~ 102.0 dBHz。
伪距 5, 3, 或 2 由是否是参考观测信息及观测标志0来确定是几个字节。最高2位是载噪比的一部分,精度0.1 dBHz,范围-0.2 dBHz ~ +0.1 dBHz。其他位表示伪距值,精度1mm。
载波 3 载波与伪距的差值信息
[多普勒信息] 2c24b 0 或 3 由观测标志0决定是否有,精度 1/256 Hz,范围 -32767 ~ +32767 Hz。
[周跳信息] uint1 或 uint2 0, 1, 或 2 由观测标志0决定是否有,有几个字节。
参考

https://binex.unavco.org/binex.html

发布了63 篇原创文章 · 获赞 16 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/tyst08/article/details/103322572
今日推荐