TEQC 常用的文件编辑命令
前文介绍了 TEQC 程序的配置和数据转换功能的使用。本文将专注于介绍该程序的文件编辑功能。
如你所知,作为最常用的 GNSS 数据交换格式,RINEX 对数据组织格式的规定非常严格。况且,迄今为止,已经发布了多个 RINEX 格式版本,版本之间也互有差异。因此手动编辑出一份合乎规范的 RINEX 数据很困难。TEQC 程序提供了编辑 RINEX 数据的功能,使用这些功能可以轻松地提取、合并和编辑 RINEX 数据。特别在处理大量数据时,得益于 TEQC 的非交互特性,还可以很容易地使用脚本程序来操作 TEQC,事半功倍。
文件编辑命令
这一部分,将介绍 TEQC 程序编辑 RINEX 文件的操作命令。下面的命令均假设你已经配置好了 TEQC 程序,并且你对该程序的操作模式有一定的了解。如果你对这些知识尚不熟悉,建议首先查看之前的博文:TEQC 程序配置及其数据转换功能的使用。
指定 TEQC 程序的输入文件时可以使用通配符,但是考虑到作为示例的命令在 Windows 和 Linux 等平台的通用性,因此示例中只使用了两个系统都支持的通配符。
数据提取
有时候你可能希望从已有的 RINEX 文件中抽取某一时间段内的观测数据作为一个新的 RINEX 文件,这涉及到时间窗口的操作。TEQC 对于时间窗口的操作方式为:
1 | $ teqc [-st <StartTime>] [-e <EndTime>] <InputFile> # 指定时间窗的起止时刻 |
这里的 <InputFile>
表示输入文件,[-st <StartTime>]
、[-e <EndTime>]
分别表示时间窗口的起始时刻,而 +d[hms]
和 -d[hms]
表示时间窗的持续时间。其中被 “[ ]” 包裹的参数表示该参数是可选的。对于开始时刻,默认为数据的首次观测时刻;对于结束时刻,默认为数据最后观测时刻。命令中指定时刻的方式为:
1 | [[[[[[YY]YY]MM]dd]hh]mm]ss[.sss...] |
这里的 [YY]YY
、MM
、dd
、hh
、mm
、ss
、.sss
分别表示年、月、日、时、分、秒及秒的小数部分。也就是说,只有整数秒是必需的,其它都可以省略。并且,可以在其中插入 “/” 、“_” 或 “:” 等作为分隔符以增强可读性。
对于其中的持续时间,可以采用时、分、秒等为单位计算:
1 | -dh <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 | -O.mo <Monument> # 标志名 |
示例,编辑 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 | -O.ag "SDUST" |
然后使用 -config
参数来读取该文件:
1 | $ teqc -config meta.txt demo0550.14o > temp0550.14o |
这样就可以同时将 meta.txt 文件中的所有项目进行修改。最后,如果你希望使用 TEQC 程序对大量的数据进行格式标准化操作,可以查看一下本站 GNSS 数据批量标准化脚本。
完整的信息编辑参数列表
Obs 文件信息编辑参数
1 | -O.ag[ency] # 观测机构 |
Nav 文件信息编辑参数
1 | -N.a[alpha] # 电离层 α 参数 |
Met 文件信息编辑参数
1 | -M.c[omment] # 原头文件注释 |