文章

CDDIS网站下GNSS相关数据解析(卫星星历部分)

本文介绍了CDDIS网站下 GNSS 相关的数据产品下载、命名方式解读、文件格式说明和文件下载地址。


核心参考文献:GNSS. CDDIS网站下 GNSS 相关的数据产品下载+命名方式解读+文件格式说明文件下载地址

1. 数据(data目录)

CDDIS存档包含来自永久GNSS接收器全球网络的GNSS数据,这些网络支持以30秒的采样率运行的IGS,并包含24小时的数据(UTC时间00:00-23:59)。 IGS分析中心每天都会检索这些数据以生产IGS产品。 这些产品,例如每日和每周的卫星星历,站的位置和速度,卫星和站的时钟信息以及地球自转参数,都将提交给CDDIS。

数据目录一览:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 **********************************************************************
                   Welcome to the CDDIS GPS Archive

The main directories are:
archive/gnss/data/
 /campaign                   GPS data from selected campaigns

 /daily/YYYY/DDD/YYd         Observation files for year YYYY and day DDD
                             (Hatanaka format)
                 /YYm        Met files for year YYYY and day DDD
                 /YYn        Navigation files for year YYYY and day DDD
                 /YYo        Observation files for year YYYY and day DDD
                 /YYs        Summary files for year YYYY and day DDD
                             (teqc output)
 /hourly/YYYY/DDD/HH         Hourly RINEX GPS files for year YYYY, day DDD,
                             and hour HH; observation (Hatanaka format),
                             navigation and met data

 /high-rate/YYYY/DDD/YYd/HH  Observation files for day YYDDD and hour HH
                             (Hatanaka format)
                    /YYm/HH  Met files for day YYDDD and hour HH
                    /YYn/HH  Navigation files for day YYDDD and hour HH

 /satellite/SATNAME/YYYY/DDD GPS data from on-board GPS receivers for
                             satellite SATNAME for year YYYY and day DDD

  /gnss/products/ionex/YYYY/DDD    Daily IONEX products for year YYYY and
                                  day DDD
               /trop/WWWW         Weekly GPS troposphere products for GPS
                                  week WWWW
                    /YYYY         Yearly GPS troposphere products for year
                                  YYYY 
                    /nrt/WWWW     Near real-time GPS troposphere products
                                  for GPS week WWWW
               /trop_cmp/YYYY/DDD Troposphere comparison results for year
                                  YYYY and day DDD
               /trop_new/YYYY/DDD New IGS troposphere product for year
                                  YYYY and day DDD
               /WWWW              Weekly GPS precise orbits, etc. for GPS
                                  week WWWW 

 All files are archived in UNIX compressed format.

 Contact Carey Noll (Carey.E.Noll@nasa.gov) for further information.
 **********************************************************************

 The local date and time is: %T

数据分为两种格式:

  • RINEX V2 format: YYYY/DDD/YYt/mmmmDDD#.YYt.Z
  • RINEX V3 format: YYYY/DDD/YYt/XXXXMRCCC_K_YYYYDDDHHMM_01D_30S_tt.FFF.g

RINEX V2 格式的每日 GNSS 数据使用 mmmmDDD#.YYt.Z 文件名约定,并且为UNIX压缩格式。 从2016年的数据开始,所有使用RINEX V3文件命名约定和gzip压缩格式的RINEX V3格式的每日GNSS数据均以RINEX V2格式的数据归档在/gnss/data/daily 区域的子目录中。

RINEX V2 格式文件名中字母的含义说明:

YYYY/DDD/YYt/mmmmDDD#.YYt.Z

code meaning
YYYY 4位,代表年
DDD 3位,年积日
YYt YY为年份的后两位数字,t表示不同数据类型,具体含义如下
  b = 组合广播星历数据
  n = GPS广播星历数据
  f = 北斗广播星历数据
  g = GLONASS广播星历数据
  l = Galileo广播星历数据
  i = IRNSS广播星历数据
  h = SBAS广播星历数据
  q = QZSS广播星历数据,同d
  m = 气象数据
  d = 高压缩的观测数据,后续用 crx2rnx.exe 转换为o文件
  o = 观测数据,同d
  s = 观测摘要文件(TEQC的输出)
  x = 混合广播星历数据
mmmm 4位,IGS测站的名字
# 1位,当一天中有多个文件的情况下,表示一天当中的第几个文件。通常为0表示一天当中的所有数据(一个文件)
.Z UNIX压缩文件

RINEX V3 格式文件名中字母的含义说明:

YYYY/DDD/YYt/XXXXMRCCC_K_YYYYDDDHHMM_01D_30S_tt.FFF.g

code meaning
YYYY 4位,代表年
DDD 3位,年积日
YYt YY为年份的后两位数字,t表示不同数据类型,具体含义如下
  b = 组合广播星历数据
  d = 高压缩的观测数据,后续用crx2rnx.exe转换为o文件
  f = 北斗广播星历数据
  g = GLONASS广播星历数据
  h = SBAS广播星历数据
  i = IRNSS广播星历数据
  l = Galileo广播星历数据
  m = 气象数据
  n = GPS广播星历数据
  o = 观测数据,同d
  q = QZSS广播星历数据
  s = 观测摘要文件(TEQC的输出)
  x = 混合广播星历数据
XXXX 4位,IGS测站的名字
M 标记编号(0-9)
R 接收机编号(0 - 9)
CCC ISO国家代码
K 数据来源,其中:
  R =从使用供应商或其他软件的接收数据
  S =从数据流(RTCM或其他)
  U =未知
HH 2位,小时
MM 2位,分钟
tt 数据类型,其中:
  GO = GPS观测数据
  RO = GLONASS观测数据
  EO = Galileo观测数据
  JO = QZSS观测数据
  CO = BDS观测数据
  IO = IRNSS观测数据
  SO = SBAS观测数据
  MO = 混合观测数据
  GN = GPS导航数据
  RN = GLONASS导航数据
  EN = Galileo导航数据
  JN = QZSS导航数据
  CN = BDS导航数据
  IN = IRNSS导航数据
  SN = SBAS导航数据
  MN = 导航数据(所有GNSS星座)
  MM = 气象观测数据
FFF rnx = RINEX
  crx = 高压缩的 RINEX
01D_30S 一般来说,这个字段有三类:
  01D_30S Daily 全天 采样30s
  01H_30S hourly 整个小时 采样30s
  15M_01S minutely 15分 采样1s

2. 广播星历(Broadcast ephemeris data)

广播星历是接收机直接从天线接收到的卫星所发射的信号中分离出来的。

除了观测数据外,很大一部分的GNSS站点还提供广播导航数据。CDDIS从这些站点发送的这些特定于站点的文件中创建每日广播星历文件;这些文件(一个用于GPS,另一个用于GLONASS)包含每天的唯一GPS或GLONASS卫星星历消息。在UTC一天开始时会创建一个类似的文件,并从每小时广播的导航文件中每小时更新一次。因此,用户可以每天或每小时下载一个文件,其中包含后处理所需的所有广播星历消息。

2.1. Daily GPS Broadcast Ephemeris Files

每日GPS广播星历文件是将单个站点的导航文件合并成一个可供用户使用的非冗余文件,而不是多个单独的导航文件。每天在BKG创建的文件包含来自欧洲站点的独特导航消息。日常文件的起始目录为:

1
2
3
4
5
6
https://cddis.nasa.gov/archive/gnss/data/daily/
将以下目录和文件名附加到起始目录:
YYYY/DDD/YYn/brdcDDD0.YYn.Z (合并GPS广播星历文件)
OR
YYYY/brdc/brdcDDD0.YYn.Z (合并GPS广播星历文件)
YYYY/DDD/YYn/ifagDDD0.YYn.Z (以往在BKG创建的每日文件)

2.2. Hourly GPS Broadcast Ephemeris Files

组合的广播星历文件是每小时从CDDIS上存档的所有每小时导航文件中生成的。 每小时导航文件包含具有当天TOE的所有广播消息,该消息在小时的顶部创建时可用。 每小时使用新的导航消息更新文件。

在UTC一天结束时,当生成文件的最终版本时,该文件将复制到每日目录中,并成为“每日”广播星历表文件。

每小时文件的起始目录是

https://cddis.nasa.gov/archive/gnss/data/hourly/ 将以下目录和文件名附加到起始目录:YYYY/DDD/hourDDDm.YYn.Z

2.3. Daily GLONASS Broadcast Ephemeris Files

类似地,可以在GLONASS导航文件子目录中找到每日仅使用GLONASS的广播星历文件。每日仅使用glonass文件的起始目录为

https://cddis.nasa.gov/archive/gnss/data/daily/ 将以下目录和文件名附加到起始目录: YYYY/DDD/YYg/brdcDDD0.YYg.ZOR YYYY/brdc/brdcDDD0.YYg.Z

3. 产品(product目录)

产品目录一览:

https://cddis.nasa.gov/archive/gnss/products/

文件为:WWWW/AAAWWWWD_TYP.YYt.Z,其中:

code meaning
AAA International GNSS Service(IGS) 分析中心名称
WWWW GPS 周
D 星期(0-6,7表示每周)
TYP 解的类型,具体如下:
  eph Satellite orbit solution 卫星轨道解
  erp Earth orientation parameter solution 地球定向参数解
  sp3 Satellite orbit solution 卫星轨道解
  sum Orbit solution analysis summary 轨道解分析总结
.Z UNIX 压缩文件

分析中心名称缩写对应如下:

|code|meaning| | — | — | | cod | CODE(3 day long arc solution) | | cof | CODE(1 day solution) | | cox | CODE GLONASS only | | emr | NRCan | | emx | NRCan GLONASS only | | jpl | JPL | | mit | MIT | | ncl | University of Newcastle | | sio | SIO | 等等不再详述。

4. 精密星历

精密星历由自建跟踪站提供(一般为当地、符合气象、大气层的实际);可以较准确地提供轨道信息;事后计算;有偿服务;地面通讯获取。精密星历的获取需要根据GPS周来确定。

4.1. GPS 周

GPS周的计算方法参考:流浪猪头拯救地球. GPS周计算

GPS周(GPS Week)是GPS系统内部所采用的时间系统。 时间零点定义的为:1980年1月5日夜晚与1980年1月6日凌晨之间0点。最大时间单位是周(一周:604800秒)。由于在储存周数的时候,用了10个比特,2的10次方是1024,所以每1024周(即7168天)为一循环周期。

我们国家的北斗考虑到每1024周翻转一次过于频繁,所以就开了13个比特来存放周数,2的13次方为8192,大概是150多年翻转一次,我们这辈子恐怕没机会见到了,哈哈哈。

第一个GPS周循环点为1999年8月22日0时0分0秒。即从这一刻起,周数重新从0开始算起。星期记数规则是:Sunday为0,Monday为1,以此类推,依次记作0~6,GPS周记数为“GPS周 星期记数”。

GPS周与儒略日转换代码(https://github.com/fernandoferreiratbe/gpsweek-converter):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# _*_ encoding: utf-8 _*_

class Converter:

    # noinspection PyMethodMayBeStatic
    def convert_julian_date_to_gps_week(self, julian_date: float):
        gps_week = ((julian_date - 2444245) // 7)

        return int(gps_week)

    # noinspection PyMethodMayBeStatic
    def convert_gps_week_to_julian_date(self, gps_week: int, day_of_week: int = 0):
        if gps_week is None:
            raise ValueError('GPS Week can not be None.')

        if day_of_week not in range(0, 7):
            raise ValueError('Day of week out of range 0-6.')

        julian_day = (7.0 * gps_week + 2444245.0 + day_of_week)

        return julian_day

或者采用在线计算的方式(https://www.labsat.co.uk/index.php/en/gps-time-calculator)。

比如想找2020年元旦的精密星历数据,经过计算知道那一天是GPS周第2086周,所以进入2086目录下去下载相应数据。

5. 精密星历文件

目前IGS精密星历主要分为三种:最终精密星历(IGS Final,标识为 IGS)、快速精密星历(IGS Rapid,标识为 IGR)、以及超快速精密星历(IGS Ultra-Rapid,标识为 IGU)。对应的精密钟差也有这三种。其中超快速精密星历又分为观测的部分和预测的部分。

IGS 会综合所有分析中心的产品(比如SIO,MIT等)加权平均得到最终的产品(标识为IGS、IGR、IGU)。他们的延时、精度等指标如下表所示。在实际工作中,我们可以根据项目对时间及精度的要求,选取不同类型的文件来使用。

名称 延时 更新率 更新时间 采样率 精度
最终精密星历 IGS 12-18天 每周 每周四 15min ~2.5cm
快速精密星历 IGR 17-41小时 每天 17:00 UTC 15min ~2.5cm
超快速精密星历(观测) IGU 3-9小时 6小时 03, 09, 15, 21 UTC 15min ~3cm
超快速精密星历(预测) IGU 实时 6小时 03, 09, 15, 21 UTC 15min ~5cm

IGS 精密星历采用sp3格式,sp3文件的存储方式为 ASCII 文本文件,内容包括表头信息以及文件体,文件体中每隔15分钟给出卫星的位置,有时还给出卫星的速度。如果需要其他时刻的卫星位置,可以由给出的卫星位置进行插值得到。关于sp3文件的详细说明可以参考官方文档。

与广播星历不一样,精密星历并不是用开普勒参数给出的,而是直接给出卫星在 ITRF框架中的坐标值 ITRF(International Terrestrial Reference Frame 国际地球参考框架)框架是由 IERS(国际地球自转服务)发布的,ITRF 的构成是基于VLBI、LLR、SLR、GPS 和 DORIS 等空间大地测量技术的观测数据,由 IERS中心局分析得到的全球站坐标和速度场。自1988 年起,IERS 已经发布 ITRF88、ITRF89、ITRF90、ITRF9 1、ITRF92、ITRF93、ITRF94、ITRF96、ITRF2000、ITRF2005、ITRF2008、ITRF2014 等全球参考框架。

下面是从igs20863.sp3文件中截取的开头部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#cP2020  1  1  0  0  0.00000000      96 ORBIT IGS14 HLM  IGS
## 2086 259200.00000000   900.00000000 58849 0.0000000000000
+   32   G01G02G03G04G05G06G07G08G09G10G11G12G13G14G15G16G17
+        G18G19G20G21G22G23G24G25G26G27G28G29G30G31G32  0  0
+          0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
+          0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
+          0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
++         2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2
++         2  2  2  2  2  2  2  2  3  2  2  2  2  2  2  0  0
++         0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
++         0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
++         0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
%c G  cc GPS ccc cccc cccc cccc cccc ccccc ccccc ccccc ccccc
%c cc cc ccc ccc cccc cccc cccc cccc ccccc ccccc ccccc ccccc
%f  1.2500000  1.025000000  0.00000000000  0.000000000000000
%f  0.0000000  0.000000000  0.00000000000  0.000000000000000
%i    0    0    0    0      0      0      0      0         0
%i    0    0    0    0      0      0      0      0         0
/* FINAL ORBIT COMBINATION FROM WEIGHTED AVERAGE OF:        
/* cod emr esa gfz grg jpl mit ngs sio                      
/* REFERENCED TO IGS TIME (IGST) AND TO WEIGHTED MEAN POLE:
/* PCV:IGS14_2086 OL/AL:FES2004  NONE     Y  ORB:CMB CLK:CMB
*  2020  1  1  0  0  0.00000000
PG01   9888.347661 -19617.637150 -14892.695413   -247.874423 12 10  5  71       
PG02 -21823.783543  13971.156772  -4920.780210   -377.229970 10  9  7  81       
PG03  -1601.529966 -16464.253025 -20857.441401    -63.370799  8  7 11 105       
PG04   1221.994671 -26086.976634  -4781.101677    -27.923755 12  4  5 109       
PG05 -19154.192243   5721.537965  17444.937173     -5.436142  7  8  6  88       
PG06 -21150.813850   2402.751626 -15853.420427   -169.653500  9  7  8 106       
PG07  -7307.639840 -13757.950583  21767.441209   -182.185020  6  6  5  99       
PG08   7039.047666 -21245.446842  14152.046835    -18.646350  8  5  7  94       
PG09  -6875.945629 -25134.252934   5050.629544   -121.818618  9  8  4 109       
PG10  24015.414289  11544.134960   1555.732288   -193.008701  8  8  8 103       
PG11   7282.297820 -25005.780611  -6416.591136   -403.117157  9  8  7  95       
PG12  -3612.078652  14754.643360 -22024.819114    167.238453  6  6  5 121       
PG13 -12822.251931  14077.120706  18359.989020    -22.958664  7  7  7  85       
PG14  15097.782136    719.539797 -21518.284406    -41.480187  8  9  3  98       
PG15  -5026.428258  22304.034935  12884.805910   -261.734981  8  6  5  83       
PG16  20065.806133  -2268.606859  17288.279253   -108.806027  7  8  6  98       
PG17 -13302.574437 -12501.633252 -18888.874080    190.733864  6  5  7  99       
PG18  15683.730129 -20086.062189  -7815.214505 999999.999999
PG19 -14744.295897  -4057.283573 -22007.637771   -218.643006  9  7  9 107       
PG20  18932.638979  14547.678555  11749.766535    527.763846 11 10 11  93       
PG21  10191.957706  12064.511376  22150.584734    -62.423168 10  8 11  69       
PG22   7023.579706 -14225.418680 -21077.053685   -780.142685  9  7  9  70       
PG23  -1206.975660 -26081.394867  -3218.011480   -145.988210 10  4  6 100       
PG24 -10589.076575  20789.036009 -12534.802874     -6.933769  9  7  4 109       
PG25  11115.892105  17563.783060 -16907.847503    -16.767205  8  8  6 106       
PG26  24809.687134   2652.030547   9387.846884    117.742691  8 10  8 116       
PG27  12654.914692 -10785.577586  20515.681941   -167.508526  8  5  8  92       
PG28 -22961.626731 -13197.537237    783.057544    747.765166  6  8  6  95       
PG29   4498.761624  25678.893062   4992.306129      4.083857 10 10  6  67       
PG30 -17217.300944  -5541.835900  19540.416589   -118.767102  6  7  7  87       
PG31  22625.699147  -4025.359523 -13738.508642    -13.516273  7  9  7  90       
PG32  14835.028318  11206.018688 -18957.170663    172.050190  9 10  5 104       
*  2020  1  1  0 15  0.00000000
PG01  11218.886280 -20435.428221 -12620.054414   -247.885427 11 10  5  55       
PG02 -21416.153632  13234.932709  -7652.201926   -377.236434  9  9  6  89       
PG03    658.942604 -15624.793321 -21537.118493    -63.377346  7  7 10  93       
PG04   1551.226922 -25415.284695  -7518.401629    -27.928395 11  5  6  93       
PG05 -20891.993883   4906.521003  15635.291423     -5.436689  7  8  5  80       
PG06 -19726.065274   1101.751537 -17715.564454   -169.663056  9  6  7 113
... ... ...

简单介绍一下

  • 第一行,时间,2020年1月1日,IGS14 表示座标系 采用ITRF2014框架。
  • 第二行,2086表示GPS周,259200表示累计秒数(3天*86400)
  • 第三/四行,包含32颗GPS卫星的轨道位置
  • 第23行表示从第24行开始的这一组卫星轨道位置对应的时间
  • 第56行表示从第57行开始的这一组卫星轨道位置对应的时间,与前一数据块相差15分钟
  • 第24行为第一个卫星的位置和钟差信息,位置单位为km,精度到mm,包含xyz三个方向。时钟单位为ms,精度为ps。最后四个数为xyz位置和钟差的标准差。
  • 标准差的值要结合第15行的浮点基准值来计算,比如第一颗卫星x方向标准差为12,结合第15行第一个浮点基准值1.25,标准差计算为 $1.25^{12} = 14.5519 mm$。钟差计算方法类似,不过用的第二个基准值1.025。

官网有抓取爬虫的代码和教程。示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import requests

url='https://cddis.nasa.gov/archive/gnss/products/'
dest = 'C:/GPS/'

### determine GPS week range
GPSweek_start = 2086
GPSweek_end = 2087

for i in range(GPSweek_end-GPSweek_start):
    gpsw = str(GPSweek_start+i)
    for d in range(7):
        filename = '/igs'+gpsw+str(d)+'.sp3.Z' # e.g., igs20860.sp3.Z
        path = url + gpsw + filename
        r=requests.get(path)
        destf = dest + filename
        with open(destf, "wb") as f:
            for chunk in r.iter_content(chunk_size=1000):
                f.write(chunk)
        f.close()

注意需要将 .netrc 文件放在指定位置后,将该位置加入到系统环境变量中,变量名为 HOME。然后采用 python 即可抓取数据。同样也可以采用cURL 工具,请参考这里

本文由作者按照 CC BY 4.0 进行授权