一、概述
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 | 反向同步字节,也包含大小端控制位 |
对比两种结构可以发现,后一种结构比前一种多了总字节数和反向同步字节两个部分,其目的是方便从后往前读取记录。
同步字节的编码是字母’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类型的值,表示的是紧跟在记录长度这个值之后的记录消息的长度。
其内容格式取决于消息类型。
分两类:常规型和增强型。按不同记录长度又分不同的校验方式。如下表:
反向消息长度
反向消息长度是一个ubnxi类型的值,表示的是紧跟其后的记录消息的长度(反向看,即包括CRC、记录消息、记录长度、记录ID和同步字节的总长度)。它主要是用来方便从后往前读取记录。要注意的是它是字节顺序也是反序的。
观测值记录
常用的观测值记录(记录ID 0x7f,子记录ID 0x05)格式如下:
后面跟着的就是一组或者多组卫星观测数据信息,每一组的格式如下:
下面是一个(可以有多个)观测信息块的信息:
参考