GFZRNX 是由德国波兹坦地学研究中心(GFZ)开发的一款用于 GNSS 数据预处理(适用于 RINEX 2 与 3 版本格式)的程序,支持对 RINEX 格式的观测数据文件(Obs)、广播星历文件(Nav)和气象数据文件(Met)的操作。
前文已经介绍过该程序的配置和文件格式转换功能的使用,本文将以实例的方式介绍其文件编辑功能的使用方法,包括文件分割与拼接、数据提取、采样率抽取、观测卫星筛选和观测量编辑等。
文件编辑命令
文件分割
要使用程序的文件分割功能,只需在运行时添加 -split
参数,然后输入分割文件的时段长度,其中时长以秒为单位。
示例,将 SHAO 站于 2016 年 2 月 11 日全天的观测数据分割为 24 个时长为 1 小时的观测文件:
1 | $ gfzrnx -finp shao0420.16o -fout ::RX2:: -split 3600 |
上述命令中的 -fout ::RX2::
参数指定输出文件以 RINEX 2 的命名方式自动命名。运行该命令,将得到时长为 1 小时的 24 个观测文件:shao042a.16o、shao042b.16o 至 shao042x.16o。
查看输出的这些文件,你将发现它们已被自动转换为 RINEX 3 格式,别忘了这是程序默认的输出格式。但是这可能不是你想要的,如果希望文件分割前后观测数据的大版本号不变,可以在命令中添加 -kv
参数。即:
1 | $ gfzrnx -finp shao0420.16o -fout ::RX2:: -split 3600 -kv |
你也可能希望得到 RINEX 3 格式的输出文件,并且以 RINEX 3 格式的命名方式作为文件名。以下为一个示例:
1 | $ gfzrnx -finp shao0420.16o -fout ::RX3:: -split 3600 |
需要补充的是,目前该程序似乎存在一个 Bug。当指定分割后的文件时段长于 1 小时,程序将为输出文件命名为类似 “site0010.16o” 的形式。这样的后果是:当 -split
参数指定的时段长度大于 3600 秒,程序将只输出第一个时段的文件。因为后续输出的文件与第一个文件重名,造成程序终止。当然,如果你在命令中还添加了 -f
参数用于强制覆盖重名文件,那么将只得到最后一个时段的观测文件。因为之前输出的文件被覆盖了。鉴于此,要获得时长超过 1 小时的数据时,建议使用下文介绍的数据提取的操作方式。
数据提取
数据提取即从观测文件中提取任意一段时间的数据。在使用该功能时,使用 -epo_beg
参数来指定首历元开始时刻,使用 -d
参数指定以秒为单位的时长。其中输入的开始时刻可使用简化儒略日、GPS 周、年月日、年积日等多种形式。
依然以上文使用的 SHAO 站的观测数据为例。该天为 2016 年第 42 日,第 1883 GPS 周的星期四,对应的简化儒略日为 57429。示例,从 shao0420.16o 中提取 2 点开始,时长为 2 小时的观测数据:
1 | gfzrnx -finp shao0420.16o -epo_beg 2016-02-11_02:00:00 -d 7200 -kv > shao042c.16o |
运行这个命令后,将得到包含所需数据的文件 shao042c.16o。按照日期指定方式的不同,这个命令还可以如此改写:
1 | $ gfzrnx -finp shao0420.16o -epo_beg 18834_02:00:00 -d 7200 -kv > shao042c.16o # 日期以 GPS 周指定 |
文件拼接
说过文件分割与数据提取,现在介绍其逆操作——文件拼接。使用该功能时不需其它参数,只需以 -finp
参数指定要拼接的文件列表。其顺序可以是任意的,GFZRNX 程序能自动确定拼接的顺序。
下面的命令将前面文件分割时得到的 24 个文件中的前 3 个拼接到一起,并保持拼接前后文件的 RINEX 格式大版本号不变:
1 | $ gfzrnx -finp shao042a.16o shao042c.16o shao042b.16o -kv > shao0420.16o |
采样率抽取
高采样率的文件体积通常很大,重新进行采样率抽取可以对其瘦身。要应用该功能可以使用 -smp
参数指定输出文件的采样间隔:
下面的命令将采样间隔为 30 秒的源文件重采样为 60 秒:
1 | $ gfzrnx -finp shao0420.16o -smp 60 > shao0420_60s.16o |
运行该命令,得到采样间隔为 60 秒的观测文件 shao0420_60s.16o。
观测量编辑
GFZRNX 程序还支持直接对观测量进行编辑。要使用该功能,可以使用 -obs_types
参数来指定要保留的观测量列表。其中多个项目之间以逗号分隔。
下面的命令将在输出文件中删去除了 L1、L2、P1、P2、C1、C2 之外的观测量:
1 | $ gfzrnx -finp daej0420.16o -obs_types L1,L2,P1,P2,C1,C2 -kv > temp0420.16o |
如果不关心观测频段而只关心观测类型,还可以使用如下的命令:
1 | $ gfzrnx -finp daej0420.16o -obs_types L,P,C -kv > temp0420.16o |
或者只关心观测频段不关心观测类型,可以使用如下的命令:
1 | $ gfzrnx -finp daej0420.16o -obs_types 1,2 -kv > temp0420.16o |
观测卫星筛选
有些 GNSS 数据观测量较差,或者受数据处理程序所限,可能需要从观测数据中删除某些观测数据。GFZRNX 程序支持对卫星或卫星系统进行筛选。
-prn
参数和 -no_prn
参数用于对卫星进行筛选。其中 -prn
参数用于设置保留的卫星,而 -no_prn
参数用于设置要去除的卫星。对于多个卫星的操作,可以用逗号进行分隔,亦可使用“-”指定起止卫星号。
下面的命令将 GLONASS 卫星 R1 与 R5 的观测数据删除:
1 | $ gfzrnx -finp daej0420.16o -no_prn R01,R05 -kv > temp0420.16o #卫星号最好使用两位数字,否则易出错 |
运行命令后,检查输出的文件 temp0420.16o,发现其中 R1 与 R5 的观测数据被删去了。
下面的命令则用于删除从 R1 到 R5 之间所有卫星的观测:
1 | $ gfzrnx -finp daej0420.16o -no_prn R01-05 -kv > temp0420.16o |
运行命令后,检查输出的文件 temp0420.16o,发现其中 R1、R2、R3、R4、R5 的观测数据都被删去了。
-prn
参数的使用方式与 -no_prn
类似。以下的命令将在输出文件中只保留对从 G1 到 G30、从 R1 到 R10 卫星的观测:
1 | $ gfzrnx -finp daej0420.16o -prn G01-30,R01-10 -kv > temp0420.16o |
卫星系统筛选
除了使用 -prn
或 -no_prn
对某些卫星的数据进行操作,还可以使用 -satsys
参数直接对卫星系统的筛选,以下的命令将在观测文件中删去除 GPS 和 GLONASS 系统之外的所有卫星:
1 | $ gfzrnx -finp daej0420.16o -satsys GR -kv > temp2000.16o |
值得注意的是,受到 RINEX 2 标准的限制(RINEX 2.11 标准未定义北斗观测量),筛选包含北斗卫星的观测数据时可能会出现问题。具体表现为,当输出格式为 RINEX 2 时,虽然设置了保留北斗系统卫星,但输出文件中的北斗卫星观测量被空白取代。不过对星历文件操作是没有问题的。
下面的命令将从混合的星历数据中分离出北斗卫星的信息:
1 | $ gfzrnx -finp BRDC00IGS_R_20170420000_01D_MN.rnx -satsys C > brdc0420.17c |
运行命令后,得到只包含北斗卫星轨道信息的星历文件 brdc0420.17c。
星历重排序
上文对卫星系统筛选后输出的星历文件中,卫星轨道信息按卫星的 PRN 编号升序排列,这可能不是你想要的。通过 -ns
参数可以对其中的卫星轨道信息重新排序。该参数接受两个选项:prn
或 time
,其中 prn
指定输出文件中卫星轨道信息按照卫星 PRN 编号排序,而 time
则将按照发布时间排序。
示例,对输入的广播星历文件按照发布时间重新排序:
1 | $ gfzrnx -finp brdc0420.17n -ns time -kv > brdn0420.17n |
对输入的广播星历文件按照卫星的 PRN 编号重新排序:
1 | $ gfzrnx -finp brdc0420.17n -ns prn -kv > brdn0420.17n |