从 GAMIT/GLOBK 解算结果导出产品

熟悉 GAMIT/GLBOK 的读者可能知道:该软件不仅可以用来解算地面 GNSS 测站的位置,还能用来解算 GNSS 卫星的轨道。如果你有足够多且遍布全球的 GNSS 数据接收站,就可以使用它来做 GNSS 卫星定轨。并且在解算完成后将你的解算成果保存为通用的 IGS 产品格式。

本文将简介将 GAMIT/GLOBK 程序的解算结果导出为 IGS 产品的命令。主要包括两种操作:导出 SP3 精密星历文件和 SINEX 解算结果文件。

导出 SP3 文件

GAMIT/GLBOK 程序内部使用的星历主要为二进制的 T-文件,我们可以将其解算输出的 T-文件导出使用。该过程涉及的命令为 ttongs,该程序将 GAMIT 输出的星历表文件(T-文件)转化为标准的 SP3 精密轨道文件。

ttongs 命令接受的参数为:

1
$ ttongs <tfile> <fmt> <org> <type> <frame> <otlmod> <pcvmod> <filename> [<clkfile> <start> <stop>]

参数释义:

  • <tfile>:作为输入的 T-文件;
  • <fmt>:输出文件格式(SP1 或 SP3);
  • <org>:产品解算的机构;
  • <type>:轨道类型(FIT、EXT 或 BRD);
  • <frame>:5 字符的轨道坐标系;
  • <otlmod>:所使用的海潮文件模型;
  • <pcvmod>:所使用的天线相位中心改正模型;
  • <filename>:输出文件的文件名;
  • <clkfile>:输入的精密钟差文件(可选);
  • <start>:输出文件的开始时刻(可选);
  • <stop>:输出文件的结束时刻(可选)。

示例,将 tdemo7.211 文件转化为 SP3 文件 dem19600.sp3。其中坐标系为地固坐标系 IGS14,该坐标系为地心地固系(FIT),海潮模型为 FES2004,天线相位中心改正模型为 IGS14_1958:

1
$ ttongs tdemo7.211 sp3 institute fit IGS14 FES2004 IGS14_1958 dem19600.sp3

以上的命令输出的 SP3 文件的时长可能不止一天,这或许不是你想要的。你可以通过后面的参数来指定文件的起止时刻。但请注意:该程序接收的所有参数都是有顺序的,如果你希望忽略中间的项,必须其位置处使用 ' ' 代替。例如,指定输出的起止时刻,但不输入精密钟差文件:

1
$ ttongs tdemo7.211 sp3 institute fit ITR08 FES2004 IGS14_1958 dem19600.sp3 ' ' 2017 211 0 0 2017 211 23 45

导出 CLK 文件

GAMIT/GLOBK 程序默认不解算卫星钟差,解算卫星钟差的设置在 autcln.cmd 文件中。该文件中有以下两个配置项目:

  • apply_chs_clk:解算卫星钟差时的配置;
  • igs_clk:输出钟差解算结果的配置。

这两个项目的配置方式如下:

1
2
apply_phs_clk [MAX Iter] [Non-int] [Converged] [Over shoot]
igs_clk [clock-file name] [min rms] [max rms] [List of reference clocks]

apply_phs_clk 中,所有配置项都是可选的:MAX Iter 为解算时的最大迭代次数,该项的默认值为 30;Non-int 为估计钟差时应用非整数参数前的迭代次数,该项默认为 3;Converged 为百分比形式的所允许的每次迭代时单向残差 RMS 变化量;Over shoot 用于控制收敛速度,其默认值为 1.5,大于 2 将可能导致估计时出错。

igs_clk 配置项中,clock-file name 为所输出的 CLK 文件的 3 个前缀字符,程序将根据这 3 个字符加上 GPS 周等生成最终的文件名;在没有给出参考钟时,min rms 用于设置所使用的参考钟的上限,其单位为周期数,对于氢钟的推荐值为 20;max rms 用于设置在输出测站钟差时的 RMS 值的上限,高于该值的钟差不会输出(一般设置为 200 即可输出大部分的测站钟差);最后的 List of reference clocks 用于自定义作为参考钟的测站列表,该项是可选的。

配置示例:

apply_phs_clk 30 3 0.1 1.5
igs_clk mit 20 200

导出 SINEX 文件

单个导出

将 GAMIT/GLOBK 解算输出的二进制 H-文件导出为 SINEX,可使用 glbtosnx 命令,该程序以 .glb 或 .glx 文件作为输入数据。glbtosnx 程序接受的参数为:

1
$ glbtosnx <dir> <comments> <input> <output> [-h -s]

参数释义:

  • <dir>:SINEX 文件的输出文件夹;
  • <comments>:添加到 SINEX 中的注释文件;
  • <input>:输入的 GLOBK 二进制 H-文件;
  • <output>:输出的 SINEX 文件名。

同上文一样,如果你希望忽略中间的项,也可以使用 ' ' 代替。示例,将当前目录下的 h1707301200_demo.glx 导出为 dem19600.snx:

1
$ glbtosnx . ' ' h1707301200_demo.glx dem19600.snx

批量导出

如果你有多个二进制 H-文件需要转化,你可以试试 sh_glbtosnx 命令。该程序可以查找所有待转化的二进制 H-文件,然后生成一个可执行脚本。我们之后执行这个脚本即可实现批量操作。该命令的使用方式为:

1
$ sh_glbtosnx -f <files> -ext <extent>

参数释义:

  • -f <files>:待转化的 GLOBK 二进制 H-文件名;
  • -ext <extent>:H-文件的扩展名。

示例,首先执行 sh_glbtosnx 命令来生成一个批量转化脚本:

1
$ sh_glbtosnx -f h* -ext glx > glbtosnx.bat

上面的命令将搜索所有以 h 开头并以 glx 为扩展名的文件,生成一个用来转化它们的可执行脚本:glbtosnx.bat。接下来,我们就可以执行这个批量转化脚本将所有符合条件的二进制 H-文件转化为 SINEX 解文件:

1
$ csh glbtosnx.bat