TEQC 常用的文件编辑命令

前文介绍了 TEQC 程序的配置和数据转换功能的使用。本文将专注于介绍该程序的文件编辑功能。

如你所知,作为最常用的 GNSS 数据交换格式,RINEX 对数据组织格式的规定非常严格。况且,迄今为止,已经发布了多个 RINEX 格式版本,版本之间也互有差异。因此手动编辑出一份合乎规范的 RINEX 数据很困难。TEQC 程序提供了编辑 RINEX 数据的功能,使用这些功能可以轻松地提取、合并和编辑 RINEX 数据。特别在处理大量数据时,得益于 TEQC 的非交互特性,还可以很容易地使用脚本程序来操作 TEQC,事半功倍。

文件编辑命令

这一部分,将介绍 TEQC 程序编辑 RINEX 文件的操作命令。下面的命令均假设你已经配置好了 TEQC 程序,并且你对该程序的操作模式有一定的了解。如果你对这些知识尚不熟悉,建议首先查看之前的博文:TEQC 程序配置及其数据转换功能的使用

指定 TEQC 程序的输入文件时可以使用通配符,但是考虑到作为示例的命令在 Windows 和 Linux 等平台的通用性,因此示例中只使用了两个系统都支持的通配符。

数据提取

有时候你可能希望从已有的 RINEX 文件中抽取某一时间段内的观测数据作为一个新的 RINEX 文件,这涉及到时间窗口的操作。TEQC 对于时间窗口的操作方式为:

1
2
3
$ teqc [-st <StartTime>] [-e <EndTime>] <InputFile>        # 指定时间窗的起止时刻
$ teqc [-st <StartTime>] +d[hms] <DeltaTime> <InputFile> # 指定开始时刻与持续时间
$ teqc -d[hms] <DeltaTime> [-e <EndTime>] <InputFile> # 指定持续时间与结束时刻

这里的 <InputFile> 表示输入文件,[-st <StartTime>][-e <EndTime>] 分别表示时间窗口的起始时刻,而 +d[hms]-d[hms] 表示时间窗的持续时间。其中被 “[ ]” 包裹的参数表示该参数是可选的。对于开始时刻,默认为数据的首次观测时刻;对于结束时刻,默认为数据最后观测时刻。命令中指定时刻的方式为:

1
[[[[[[YY]YY]MM]dd]hh]mm]ss[.sss...]

这里的 [YY]YYMMddhhmmss.sss 分别表示年、月、日、时、分、秒及秒的小数部分。也就是说,只有整数秒是必需的,其它都可以省略。并且,可以在其中插入 “/” 、“_” 或 “:” 等作为分隔符以增强可读性。

对于其中的持续时间,可以采用时、分、秒等为单位计算:

1
2
3
-dh <number>   # 以小时为单位
-dm <number> # 以分钟为单位
-ds <number> # 以秒为单位

示例,对于观测时间为 2014 年 2 月 24 日全天的数据 demo0550.14o,提取从该天的 22:30:00 开始一直到观测结束的数据作为一个新的 RINEX 文件 demo0551.14o:

1
$ teqc -st 2014/02/24_22:30:00 demo0550.14o > demo0551.14o

提取从该天 8:30:00 到 10:30:00 的观测数据作为一个新的 RINEX 文件 demo0552.14o:

1
$ teqc -st 8:30:00 -e 10:30:00 demo0550.14o > demo0552.14o

提取从 7:00:00 开始,持续 1.5 小时的观测数据(即从 7 点到 8 点半)作为 demo0553.14o:

1
$ teqc -st 14/2/24_7:00:00 +dh 1.5 demo0550.14o > demo0553.14o

提取到 14:30:00 结束,持续时长为 30 分钟的观测数据(即从 14 点到 14 点半)作为 demo0554.14o:

1
$ teqc -dm 30 -e 14:30:00 demo0550.14o > demo0554.14o

文件分割

考虑这样一个需求:将文件 demo0550.14o 均匀切割成 12 份,每份包含 2 小时的观测数据。使用上一小节的数据提取命令可以完成这个任务,只是需要进行 12 次时间窗操作。但是 TEQC 还提供了更简单的方式:

1
$ teqc -tbin <DeltaTime>[dhms] <Site> <InputFile>

这里使用 -tbin <DeltaTime>[dhms] 指定观测时长,<Site> 指定观测站名以作为输出文件的前缀。对于这里的观测时长,可以以日、时、分、秒为单位。

示例,将 demo0550.14o 按每 2 小时一个文件分割:

1
$ teqc -tbin 2h demo demo0550.14o

该命令的输出为:

teqc: creating file ‘demo055a.14o’ …
teqc: creating file ‘demo055c.14o’ …
teqc: creating file ‘demo055e.14o’ …
teqc: creating file ‘demo055g.14o’ …
teqc: creating file ‘demo055i.14o’ …
teqc: creating file ‘demo055k.14o’ …
teqc: creating file ‘demo055m.14o’ …
teqc: creating file ‘demo055o.14o’ …
teqc: creating file ‘demo055q.14o’ …
teqc: creating file ‘demo055s.14o’ …
teqc: creating file ‘demo055u.14o’ …
teqc: creating file ‘demo055w.14o’ …

查看运行命令时的工作目录,就会发现输出的以上 12 个文件。

文件拼接

说过 RINEX 文件的提取与分割,下面介绍它的逆操作:将多个 RINEX 数据文件拼接为一个文件。因为 RINEX 格式的特殊性,不能简单地将 RINEX 文件头尾相接连接到一起。TEQC 程序对于 RINEX 拼接的命令方式为:

1
$ teqc [<options>] file1 file2 [file3 […]] > <OutputFile>

这里的 file1 file2 [file3 […]] 为输入文件列表,<OutputFile> 为输出文件,[<options>] 为可选的控制选项。

示例,将上文分割输出的 12 个文件拼接到一起,形成新的文件 temp0550.14o:

1
$ teqc demo055?.14o > temp0550.14o

如此生成的新文件 temp0550.14o,在拼接接缝处会保留原始文件的注释。如果你不想保留这些注释,可以添加 -phc 参数:

1
$ teqc -phc demo055?.14o > temp0550.14o

需要注意的是,只有观测时间上连续的文件才能拼接到一起。拼接不连续的观测数据会产生错误。

采样率抽取

现在的高频接收机,因为观测时数据采样率很高,导致观测文件的体积非常大。例如,对于一个站点采样率为 1Hz 的时长 24 小时的观测数据,能轻松达到 100 MB 以上。但有时我们进行数据处理时并不需要如此高的采样率。

TEQC 程序提供了对高频采样率数据抽稀转换成较低采样率数据的功能。操作方式为:

1
$ teqc [-O.int <OldInterval>] -O.dec <NewInterval> <InputFile> > <OutputFile>

这里的 <OldInterval> 为源文件采样间隔,<NewInterval> 为新文件采样间隔。对于采样间隔在 1 秒及以上的数据文件,源文件的采样间隔总是可以省略。因此处理采样间隔在 1 秒以上的数据时,这样的操作没有问题:

1
$ teqc -O.dec 30 demo0550.14o > temp0550.14o

但是,如果源文件的采样间隔在 1 秒以下时,最好使用 -O.int 参数指定源数据的采样间隔。因为如果输入数据的头文件中没有采样间隔信息的话,处理很可能会出错。如当源文件采样率为 10Hz 时:

1
$ teqc -O.int 0.1 -O.dec 30 demo0550.14o > temp0550.14o

观测卫星筛选

TEQC 程序可以对数据中的观测卫星进行编辑,如删除某一卫星的观测数据,甚至还可以一次性的去掉某一卫星系统的所有观测量。

要去除某些卫星的观测数据,只需在 “-” 号后跟上要去掉的卫星列表,多个卫星之间以逗号连接。下面的命令用于删除 GPS 卫星 G1 与 G5 的观测数据:

1
$ teqc -G1,5 demo0550.14o > temp0550.14o

执行该命令后,检查生成的新文件 temp0550.14o,发现 G01 和 G05 的观测数据被删除了。

对于连续的卫星列表,还可以用 “-” 指定起止卫星号。下面的命令将删除 GPS 卫星 G1 到 G5 的观测数据:

1
$ teqc -G1-5 demo0550.14o > temp0550.14o

执行该命令后,检查生成的新文件 temp0550.14o,发现 G01、G02、G03、G04、G05 的观测数据都被删除了。

如果你希望删除或保留某一卫星系统的数据,也可以直接对卫星系统进行操作。下面的命令将去除所有 Galileo 卫星:

1
$ teqc -E demo0550.14o > temp0550.14o

需要注意的是,截至本文撰写时,TEQC 程序并不能正确处理北斗系统(BDS)的卫星。因此所有经过 TEQC 程序处理的观测数据都将丢失北斗卫星的观测值。

观测量编辑

TEQC 程序还可以单独对观测量进行编辑,多个观测量列表可以用逗号分隔,也可以不加间隔符号。但我建议使用逗号进行分隔,这样看起来更清晰。对观测量进行选择时,既可以使用 -O.-obs 指定要删除的观测量,也可以使用 -O.obs 指定要保留的观测量。

下面的命令将观测量 L1、L2、P1、P2、C1、C2 删除:

1
$ teqc -O.-obs L1,L2,P1,P2,C1,C2 demo0550.14o > temp0550.14o

与上面的命令相反,下面的操作将只保留观测数据中的 L1、L2、P1、P2、C1、C2 观测量:

1
$ teqc -O.obs L1,L2,P1,P2,C1,C2 demo0550.14o > temp0550.14o

信息编辑

这里的信息编辑指对 RINEX 数据文件头(Header)中的信息进行添加、编辑、替换等操作。使用 TEQC 程序可以对 RINEX 格式的观测文件(Obs)、导航文件(Nav)和气象文件(Met)中的信息进行编辑。

查看一个 RINEX 文件的头文件信息使用 +meta 参数,命令如下:

1
$ teqc +meta <InputFile>

该命令将输出输入数据的头文件信息。也可以使用 ++config 参数:

1
$ teqc ++config <InputFile>

该命令也能输出输入数据的头文件信息,但是其形式与上一个有些不同,你可以都试一试。

使用 TEQC 程序编辑头文件信息的命令格式如下:

1
$ teqc <options> <InputFile> > <OutputFile>

对于观测文件(Obs),常用的参数有(完整的信息编辑参数请查看文末整理出的列表):

1
2
3
4
5
6
-O.mo <Monument>       # 标志名
-O.ag <Agency> # 观测机构
-O.rt <Receiver Type> # 接收机类型
-O.at <Antenna Type> # 天线类型
-O.px <X> <Y> <Z> # 观测点的概略坐标(以米为单位)
-O.pe <H> <E> <N> # 天线的偏心改正(hEN,以米为单位)

示例,编辑 demo0550.14o,将观测机构修改为 “SDUST”,并形成新文件 temp0550.14o:

1
$ teqc -O.ag "SDUST" demo0550.14o > temp0550.14o

这里的 “SDUST” 也可以不加双引号。但如果字符串中有空格,就必须使用双引号包裹。例如,编辑文件 temp0550.14o,将接收机类型修改为 “TPS NETG3”,将天线类型修改为 “TPSCR.G3   TPSH”,并形成新文件 demo0550.14o:

1
$ teqc -O.rt "TPS NETG3" -O.at "TPSCR.G3        TPSH" temp0550.14o > demo0550.14o

如果你有很多项目和文件需要编辑,可以考虑将这些修改项写入一个文件。例如创建一个文件 meta.txt,在其中输入:

1
2
3
4
5
6
-O.ag "SDUST"
-O.mo "DEMO"
-O.rt "TPS NETG3"
-O.at "TPSCR.G3 TPSH"
-O.pe 0.5300 0.0000 0.0000
-O.px -2592140.0000 4468620.0000 3728260.0000

然后使用 -config 参数来读取该文件:

1
$ teqc -config meta.txt demo0550.14o > temp0550.14o

这样就可以同时将 meta.txt 文件中的所有项目进行修改。最后,如果你希望使用 TEQC 程序对大量的数据进行格式标准化操作,可以查看一下本站 GNSS 数据批量标准化脚本

完整的信息编辑参数列表

Obs 文件信息编辑参数

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
-O.ag[ency]         # 观测机构
-O.an # 天线号
-O.at # 天线类型
-O.c[omment] # 原头文件注释
+O.c[omment] # 添加新的注释
-O.d[ate] # 程序执行日期
-O.dec[imate] # 以指定的采样间隔进行数据抽取
-O.def_wf # 缺省的L1,L2载波的波长因子
-O.e[nd] # 最后观测的日期和时间
-O.int[erval,sec] # 采样间隔,单位秒
-O.mn # 标志号
-O.mo[nument] # 标志名
-O.mod_wf # 从不同的默认的波长因子中,为特定的卫星设置波长因子
-O.mov[ing] # 强制将天线位置设置为最初的运动状态
-O.o[perator] # 观测者
-O.-obs[_types] # 在输出文件中删除 _types 指定的观测值列表
-O.obs[_types] # 在输出文件中只保留 _types 指定的观测值列表
-O.pe[hEN,m] # 天线中心相对于地面点的偏心改正, 单位米
-O.pg[eo,ddm] # 标志的近似坐标(WGS-84),经度和纬度用小数表示,高层用米表示
-O.pr[ogram] # 生成 RINEX 文件的程序
-O.px[WGS84xyz,m] # 标志的近似坐标(WGS-84), 单位米
-O.r[un_by] # 运行程序的用户名
-O.rename_obs # 改变 # / TYPES OF OBSERV 中观测值类型的性质
-O.rn # 接收机号
-O.rt # 接收机类型
-O.rv # 接收机软件的版本
-O.s[ystem] # 卫星系统
-O.sl[ant] # 以地面点为中心的垂直天线改正、斜高、天线直径和垂直相位中心偏差
-O.st[art] # 开始观测的日期和时间
1
2
3
4
5
6
7
8
9
10
-N.a[alpha]         # 电离层 α 参数
-N.b[eta] # 电离层 β 参数
-N.c[omment] # 原头文件注释
+N.c[omment] # 增加新的注释
-N.d[ate] # 程序执行日期
-N.leap # UTC 时间模型的跳秒
-N.pr[ogram] # 生成 RINEX 文件的程序
-N.r[un_by] # 运行程序的用户名
-N.s[ystem] # 卫星系统
-N.UTC # UTC 时间模型

Met 文件信息编辑参数

1
2
3
4
5
6
7
8
-M.c[omment]        # 原头文件注释
+M.c[omment] # 增加新的注释
-M.d[ate] # 程序执行日期
-M.mo[nument] # 观测点名
-M.mn # 观测点号
-M.obs[_types] # 在文件的数据部分,列出气象观测值类型列表
-M.pr[ogram] # 生成 RINEX 文件的程序
-M.r[un_by] # 运行程序的名字