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 x16+x12+x5+x0 |
常规 | 4096 ~ 1048575 | 4 | x 32 |