附录E. 模型与算法
E.1 时间系统
RTKLIB内部采用GPS时间进行GNSS数据处理和定位。UTC时间(协调世界时)是一个不连续时间,简而言之,它和GPS时间之间存在一个跳秒(或闰秒)的关系。GPS时间通常采用周数和周内秒来表示,其起始历元为1980年1月6日00:00:00 UTC。但是对于double类型变量来说,其距离精度只有0.04米(参考E.1.6/Q1)。因此,在实际运算时,RTKLIB调用C标准库中的时间结构体并定义了gtime_t
类型:
typedef struct {
time_t time; /* time (s) expressed by standard time_t */
double sec; /* fraction of second under 1 s */
} gtime_t;
time_t
通常通过一个无符号的32位整数来实现,表示从1970年1月1日00:00:00开始的总秒数。由于整数位的长度限制,gtime_t
无法处理1970年1月1日之前或2038年1月19日之后的时间。
gtime_t
中的sec
字段用于存储小数秒。sec
在距离上的分辨率为6.7×10⁻⁸米,足以满足GNSS高精度定位计算的需求。RTKLIB还提供了几个有用的API来处理gtime_t
,包括加、减以及时间格式的转换。
不同导航系统的时间定义有所差异,以下是所有时间系统特性的汇总。
表E.1-1 时间系统汇总
时间系统 | 连续性 | 起始历元 | 与UTC的关系 | 转换公式 |
---|---|---|---|---|
GPST | 连续 | 1980年1月6日00:00:00 UTC | UTC比GPST慢,差值为累积的闰秒数(ΔtLS) | tUTC=tGPST-ΔtLS |
GLONASST | 不连续 | 与UTC(SU)对齐 | UTC比GLONASST慢3小时,差值为固定偏移和闰秒数 | tUTC=tGLONSASST-10800 |
GST | 连续 | 1999年8月22日00:00:00 UTC | GST比UTC快13秒,与GPST对齐,但有1024周的差异和小时间偏移(GGTO) | 无直接公式,需考虑与GPST的对齐关系 |
QZSST | 连续 | 与GPST对齐 | QZSST与GPST具有相同的起始点和秒定义 | 无直接公式,可直接处理为GPST |
BDT | 连续 | 2006年1月1日00:00:00 UTC | BDT比GPST滞后14秒 | tBDT=tGPST-14 |
E.1.1 GPST(GPS时间)和UTC(协调世界时)
现在的UTC时间比GPST慢,因为它当前闰掉的时间为负数。GPST与UTC(协调世界时)之间的粗略转换可以简单地表示为:
其中,和分别是以秒为单位的UTC时间和GPS时间。是由于自1980年1月6日以来累积的闰秒(或跳秒)导致的UTC与GPST之间的时间差(秒)。的值如表E.1-1所示。
表E.1-2 GPST-UTC值(截至2025年2月,未来可能更新)
Time Since (in UTC) 𝛥𝑡𝐿𝑆 (s)
-----------------------------
1980-01-06 00:00:00 0
1981-07-01 00:00:00 1
1982-07-01 00:00:00 2
1983-07-01 00:00:00 3
1987-01-01 00:00:00 4
1988-01-01 00:00:00 5
1990-01-01 00:00:00 6
1991-01-01 00:00:00 7
1992-07-01 00:00:00 8
1993-07-01 00:00:00 9
1994-07-01 00:00:00 10
1996-01-01 00:00:00 11
1999-01-01 00:00:00 13
1997-07-01 00:00:00 12
2006-01-01 00:00:00 14
2009-01-01 00:00:00 15
2012-07-01 00:00:00 16
2015-07-01 00:00:00 17
2017-01-01 00:00:00 18
公式(E.1.1)或(E.1.2)的近似精度在几十纳秒以内。通过使用GPS导航消息中的UTC参数,我们可以更精确地将GPST与UTC之间的转换,公式如下:
其中,、、、、和是GPS导航消息中提供的UTC参数。更严格地说,公式(E.1.3)中的UTC是UTC(USNO),即美国本地实现的UTC。UTC与UTC(USNO)之间的差异可以在BIPM提供的T公报中获得,这种差异通常在纳秒级别。
E.1.2 GLONASST (GLONASS时间)
GLONASST(GLONASS时间)基于UTC(SU),因此它同样包含了闰秒。GLONASST还与当地时间对齐。因此,大致上,GLONASST中的时间可以转换为UTC中的时间。
更准确地说,GLONASS导航信息中的GLONASST的UTC参数应类似于GPST(GPS时间)和UTC转换的方式使用。忽略闰秒和3小时的时差,GLONASST与GPST的偏差通常在毫秒级,具体通过导航电文校正(GLONASS时间同步精度低于GPS)。
E.1.3 GST (Galileo时间)
伽利略系统时间(Galileo System Time,GST)与GPST类似,同样有周与周内秒组成。GST的起始历元为1999年8月22日00:00:00 UTC(这个时间刚好和GPS的起始时间1980年1月6日00:00:00 UTC相隔1024周)。在起始历元时,GST比UTC快13秒。GST是连续时间,不插入或删除闰秒。因此,GST与GPS时间(GPST)对齐,除了时间系统原点的1024周差异和一个小的时间偏移(Galileo/GPS时间差异,GGTO)。根据RINEX约定,伽利略周数与GPS周数相等。
上述GGTO由伽利略导航电文提供。
E.1.4 QZSST (QZSS时间)
QZSST(QZSS时间)与GPST(GPS时间)对齐。它与GPST具有相同的起始点和相同的秒定义,QZSST可以像GPST一样处理。
E.1.5 BDT (北斗时间)
北斗时间(BDT)也是一个连续时间系统(没有闰秒的插入或删除)。BDT的起始历元为2006年1月1日00:00:00 UTC。BDT与UTC之间的时间差被控制在100纳秒以内(模1秒)。因此,GPS时间(GPST)中的时间可以大致通过以下公式转换为BDT中的时间,精度约为200纳秒:
BDT同样需要使用北斗导航信息中的UTC参数,然后进行类似GPST与UTC之间的转换。
E.1.6 常见问题
Q1:为什么使用double类型表示GPS时间,距离精度是0.04米?
首先搞清楚要干嘛。这里是想说明以double类型来表示GPS时间,数值精度会很低。我们可以进行如下分析:
1. double 类型的精度
- double 类型是 64 位浮点数,遵循 IEEE 754 标准。
- 其尾数部分有 52 位,因此精度为:
2. GPS 时间的表示
- GPS 时间通常以周数(week)和周内秒(second of week)表示。
- 一周的总秒数为:
604800s (7天×86400s/天) - 用 double 类型表示 GPS 时间时,其最小分辨率为:
3. 时间分辨率转换为距离误差
- 光速 c 为:
- 时间分辨率对应的距离误差为(使用 double 类型表示 GPST 时的最小分辨率):
- 如果用double类型表示一个比604800更大的数值时候,距离误差还会比0.04m更大(当时间需要参与运算时,要考虑这个误差的;当时间只是用来标识与显示时,则可以不用管这个误差)。