Gamit_GLOBK学习笔记5之数据处理

前几节都是在说如何进行数据准备的,其中一些数据需要下载,还有一些数据则需要手动更新与生成。当这些数据基本准备完毕之后,就可开始正式处理数据了。

一、基本思路

单日解的基本处理流程如下所示:
links.day -> sh_makexp -> sh_makexp ->sh_sp3fit -> makej -> sh_check_sess -> fixdrv -> 执行bat文件

二、建立DOY目录

2.1 链接tables文件

考虑到gamit基本上都是以日为单位来处理数据的,所以需要按DOY建立一个目录,仅放置当前所需要处理的数据所涉及的所有数据。采用复制方式太过于浪费磁盘空间,所以只使用链接。考虑到手动链接易错且费时费力,GAMIT提供了工具links.day方便解决了该问题。基本用法如下:

links.day year doy expt
    year :  年份
    doy  :  Day of Year
    expt :  用四个字符代表的本次项目名

本次就可以这样做:

$ cd test/001
$ links.day 2015 001 test

这样就在该目录下生成许多链接文件,而且均指向../tables目录下面的内容(可以使用ls -la查看)。

由于test/tables中一些文件并不存在,所以至少会存在一些死链接(该链接指向的文件不存在),至少包含:

core met.grid  met.list

如果在控制文件sestbl.中设置了不进行大气改正,死链接还可以包含:

atl.list atl.grid atml.list atml.grid map.grid map.list

除了这些链接以外,其它的链接一般要保证不是死链接,如果出现了,务必检查test/tables里面的文件,或者更换该链接所对应的文件。其中list与grid的关系在前面的章节中已经加以说明,此处不再详叙。

2.2 链接星历和观测值文件

links.day该命令并没有帮助链接相应日期的星历和观测值文件,需要手动链接,命令如下:

# 链接星历文件
$ ln -s ../igs/igs18254.sp3 ./
# 链接广播星历文件
$ ln -s ../brdc/brdc0010.sp3 ./
# 链接观测值文件(此处采用了通配符?)
$ ln -s ../rinex/????0010.15o ./

三、生成批处理目录

3.1 sh_makexp

sh_makexp是批处理命令,其主要是调用makexp程序实现(makexp是交互式地实现,不利于批处理)

  • 更新session.info文件(可选择的内容)
  • 生成控制文件(作为makex,makej,fixdrv和bctoc输入文件)

输入文件有:

session.info (只需要有文件头即可,里面内容会更新)
RINEX file  (导航电文与观测值文件)
station.info

输出的文件有:

bctot.inp ( bctoc控制文件 )
dtest5.001 (fixdrv的输入文件)
makexp.out (makexp的输出信息文件,无用)
test.makex.batch (makex的输入文件)
session.info (makex的输入文件)
session.info.old (旧session.info备份)
sh_makexp -expt <expt> -orbt <orbt> [-yr <yr>] [-doy <doy>] [-nav <file>] [-apr <aprfile>] [-sinfo <sinfo>]
    -expt   4-character survey name for d-, i-, l-file names [required]
    -orbt   4-character orbit name for g-, j-, t-file names [required]
    -yr     <yr> 4 char year of the data to be processed. (yyyy) [default from session.info]
    -doy    <doy> Starting day of year of data to be processed. (ddd) [default from session.info]
    -nav    <file> Name of rinex navigation file to be used. [Default eorbty.ddd]
    -apr    <file> Name of the apriori coordinate file, may be l-file or apr file [Default lexpty.ddd]
    -sinfo  <sinfo> Processing interval (secs), start time (hh mm), number of epochs (num).
    -srin   Search all rinex files, for data matching ddd.

如果手动配置好了session.info里面的内容,那么不需要-doy,-nav,-apr,-sinfo这些参数了。当然在大多时候session.info是要更新的。则相应的命令如下所示:

$ sh_makexp -expt test -orbt igsf -yr 2015 -doy 001  -srin -nav brdc0010.15n -sinfo 30 00 00 2880
# 处理成功后输出的最后一句
STATUS :170521:0849:40.0 MAKEXP/makexp: Normal end in Program MAKEXP

之前使用sh_upd_stnfo生成的station.info里面里面session信息都是当天生效的,所以结束结束时间正好与观测值时间相同,所以会出现这样的警告消息:

WARNING:170521:0849:40.0 MAKEXP//lib/rstnfo: Station.info entry WUHN 2015   1  0  0  0  2015   1 23 59 30 ends early for session but may be ok for station

这样的警告消息可以忽略,如果看着不舒服,可以手动将station.info中相应的session的结束时间弄地稍长一点。但是注意,session的时间段是不允许出现重复的,所以一般情况下尽量也不要修改。

注意:gamit的程序均是默认在当前路径下执行,所以选取文件时不要加上路径参数,如brdc0010.15n就不能写成./brdc0010.15n

3.2 sh_sp3fit

sh_sp1fit该脚本是用于生成gamit的G-fileT-file(先生成G-file,然后调用arc模块,生成T-file),这两种文件命令规则基本相同,均为gxxxxy.doytxxxxxy.doy,其中xxxx为自定义的名称,y代表年份最后一位,doy代表年积日,例如:gtest5.001。下面是两种文件的具体内容。

G-file
ASCII文件,包含有所有卫星轨道的起始条件,主要为T-file服务。
T-file
二进制文件,表格化的当前session下的所有卫星的精密星历文件,使用均匀间隔的状态矢量表示(arc默认是15分钟),需要相同命名规则的G-file提供起始信息。

输入文件:

   sp3        精密星历文件   utl.        时长变化表
   pole.      极移表         nutabl.     章动表
   soltab.    太阳星历表     luntab.     月亮星历表
   leap.sec   跳秒文件       svnav.dat   卫星天线类型

输出文件:

G-file  T-file
spf3fit_xxxxydoy.fit   本次fit的总结文件
spf3fit_xxxxydoy.rms   本次fit的rms值文件
yxxxxy.doy  姿态文件(该文件已不再使用)
svs_xxxxyy.doy (暂时不知道是什么文件)

至于sh_sp3fit的用法此处就不再详叙,因为sh_sp3fit的说明文档就是相当详细的说明。而本次所使用的命令如下:

$ sh_sp3fit -f igs18254.sp3 -o igsf -d 2015 001 -r BERNE -t -u

其中-r的参数为指定太阳光压模型,默认提sestbl.中的设置,而BERNE则是Bernese的太阳光压模型,据说是比较好的太阳光压模型。

正常情况完成的情况下,会出现:

STATUS :170601:1359:31.0 ARC/arc: Normal stop in ARC (Name tigsf5.001)

如果想要排除某个卫星的轨道信息,则需要在当前目录下存在svs_exclude.dat文件,这个文件规则是这样的:

# 使用#号作为注释
# 年份 DOY PRN编号
yr doy sv

注1:PRN编号,PRN码指是的伪随机噪声码(pseudo random noise code),而PRN码编号是由两个数字组成,由于于不同的卫星的PRN码编号不相同,所以PRN码编号可以当作卫星的编号。

3.3 makej

makej的主要作用就是从卫星导航电文中抽取相应的卫星钟的信息,生成J-file.

输入文件

RINEX导航电文

输出文件

J-file(卫星钟文件)

J-file的命名规则为jxxxxy.doy
本次的命令如下:

$ makej brdc0010.15n jbrdc5.001

运行成功后会输出:

STATUS :170602:0305:29.0 MAKEJ/makej: Normal end in MAKEJ

3.4 sh_check_sess

sh_check_sess就是用于检查J-file,G-file以及sp3 file,从而保证session.info包含有正确的卫星。该脚本会更新session.info文件。该步骤为非必要步骤,但是如果不做的话,后面可能会因此而出错。由于之前使用sh_sp3fit和makej已经生成了J-file和G-file,故接下来至少要使用sh_check_sess利用J-file和G-file来更新下session.info。当然sh_check_sess也会读取svs_exclude.dat中的内容,将该文件包含的卫星剔除。

输入文件

导航电文

输出文件

session.info

sh_check_sess的使用方法很简单:

sh_check_sess  -sess <doy> -type <type> -file <name>
          <doy> is the 3 char doy of the session to check
          <type> file type to be checked (sp3, gfile or jfile)
          <name> name of the orbit file to check against session.info

故本次的命令为:

$ sh_check_sess -sess 001 -type gfile -file gigsf5.001
$ sh_check_sess -sess 001 -type jfile -file jbrdc5.001

3.5 makex

makex的主要目的就是用于生成X-fileK-file以及D-file,而这三个文件都是fixdiv模块所必需的。

X-file
ASCII码文件,GAMIT的观测值文件,类似于RINEX文件。命名规则为xsitey.doy,其中site为四个字符表示的站名。
K-file
ASCII码文件,接收机钟文件,由基站坐标+广播星历+伪距观测值加以确定。命名规则同上,为ksitey.doy
D-file
ASCII码文件,专用于fixdrv而用的文件,包含fixdrv所需要的文件,命名规则为dxxxxy.doy,其中xxxx代表工程名称。

输入文件:

xxxx.makex.batch 其中xxxx四个字符代表本次的工程名称,如本次的test
xxxx.makex.batch中所包含的所有文件

输出文件:

各测站的X-file 与 K-file
D-file
xxxx.makex.infor 处理过程的记录文件,一般情况下无用

此处着重说一下xxxx.makex.batch这个文件,该文件是makex的输入和输出的控制文件,由sh_makexp产生,内容如下所示(#号后面的内容为注释内容,原文件中不存在):

# 前面12行为输入输出文件控制,首列为标识符,第二列为是否使用(1:使用,0:不使用),
# 第三列代表着路径
infor 1
sceno 1 session.info    # session.info
rinex 1 ./              # RINEX 观测值文件
ficaf 0
coord 1 ltest5.001      # lfile. 基站大致坐标文件
stnfo 1 station.info    # station.info
xfile 1 ./x             # 输出文件
svclk 1 ./jbrdc5.001    # J-file,卫星钟文件
clock 1 ./k             # 输出文件
wrorb 0
rdorb 1 ./brdc0010.15n  # 导航电文
extra 0
site year doy sn  sw  ver
(a4,1x,a4,1x,a3,1x,a1,2x,a3,1x,f4.2)
bjfs 2015 001 1  TRM 4.17
chan 2015 001 1  ASH 0.00
daej 2015 001 1  TRM 4.85
suwn 2015 001 1  TRM 4.85
wuhn 2015 001 1  TRM 4.80

故本次的命令为:

$ makex test.makex.batch

正常结束的结果如下,且不报其它的错误。

STATUS :170602:0841:19.0 MAKEX/makex: Normal End of MAKEX

可以查看一下生成的文件K-file和X-file及D-file:

$ ls |grep -E "k....5.001"
kbjfs5.001
kchan5.001
kdaej5.001
ksuwn5.001
kwuhn5.001
$ ls |grep -E "x....5.001"
xbjfs5.001
xchan5.001
xdaej5.001
xsuwn5.001
xwuhn5.001
$ ls |grep -E "d....5.001"
dtest5.001

3.6 fixdrv

fixdrv是一个生成批处理脚本的模块。该模块就是读取D-file中的内容,然后D-file中的内容以及相应的文件生成相适应的批处理脚本。fixdrv同时也会生成用于modelI-file

fixdrv生成的B-file有两种,一种是批处理文件,而另外一种则批处理模块的控制文件(即输入内容)。批处理文件只有一个,命名规则为bxxxxy.bat,其中xxxx表示工程名,而控制文件则相对较多,命名规则为bxxxxy.nnn,其中nnn为三位数的数字,基本代表着在批处理过程中的使用顺序。fixdrv与批处理模块内部过程较为复杂,本节不再详叙。

输入文件

D-file
D-file内部所列的文件
sestbl.
sittbl.

输出文件

两种B-file
I-file: 用于model的基站的钟差文件

其中D-file的内容如下所示:

1                   number of solutions (no longer used)
1                   number of sessions  (no longer used)
lscal0.034          L-file for all sessions
tigsf0.034          T-file for all sessions
iscal0.034          I-file for all sessions (end of global files)
jbrdc0.034          J-file for session 1
5                   number of stations (x-files)
x70010.034
xblyt0.034
xjplm0.034
xlnco0.034
xmath0.034

则本次的命令为:

$ fixdrv dtest5.001

生成的文件可以根据描述自行检查。

3.7 执行bat文件

批处理脚本才是真正gamit处理的过程,内部调用了model,arc,autcln,solve,cfmrg等模块的进行处理。与复杂的内部处理过程相比,使用方法却是最简单的,直接执行即可。显然该脚本是用csh写的,可以采用csh执行,也可以加上可执行权限,然后再执行该脚本。

本次的命令为:

$ csh btest5.bat

注意,如果由于之前操作失误,而出现了gamit.fatal文件,批处理脚本就不会执行,故在执行批处理前需要删除gamit.fatal文件

批处理模块由于中间过程较多,生成了大量的文件,其中最终的结果文件为H-file,为最终的基线结果文件。

四、本章命令小结

下面对本章所涉级的命令进行一次汇总,如下所示:

cd test/001
links.day 2015 001 test
ln -s ../igs/igs18254.sp3 ./
ln -s ../brdc/brdc0010.sp3 ./
ln -s ../rinex/????0010.15o ./
sh_makexp -expt test -orbt igsf -yr 2015 -doy 001  -srin -nav brdc0010.15n -sinfo 30 00 00 2880
sh_sp3fit -f igs18254.sp3 -o igsf -d 2015 001 -r BERNE -t -u
makej brdc0010.15n jbrdc5.001
sh_check_sess -sess 001 -type gfile -file gigsf5.001
sh_check_sess -sess 001 -type jfile -file jbrdc5.001
makex test.makex.batch
fixdrv dtest5.001
csh btest5.bat
此条目发表在GAMIT, GNSS, LINUX分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。