GREAT-UPD 开源软件使用笔记

本文详细介绍了武汉大学李星星教授团队开发的GREAT-UPD软件,用于估计GNSS相位小数偏差(UPD)。软件支持GPS、GLONASS、Galileo和BDS系统,通过数据下载、预处理和UPD估计三个步骤,实现UPD的分离,恢复模糊度的整数特性。内容包括数据下载、周跳探测、UPD估计的脚本使用方法及配置文件详解。
摘要由CSDN通过智能技术生成

参考
https://blog.csdn.net/weixin_41341009/article/details/111225552

一、预备知识

1、软件简介

开源论文:https://link.springer.com/article/10.1007/s10291-020-01070-2
开源代码:https://www.ngs.noaa.gov/gps-toolbox/GREAT-UPD.htm
代码下载地址2
GREAT 团队主页【iGMAS创新中心】:http://igmas.users.sgg.whu.edu.cn/home
系统频点:https://blog.csdn.net/Gou_Hailong/article/details/114849937

这款软件是武汉大学李星星教授团队在 GPS Solutions 所开源的一款估计相位小数偏差产品(Uncalibrated Phase Delays, UPD)的软件,并且还提供了配套的数据下载、软件调用、数据绘图分析的脚本。软件支持的系统和频点如下:

在这里插入图片描述

  • 支持GPS, GLONASS, Galileo, BDS
  • GPS 125, GLO 12, GAL 157, BDS 276
  • 好像不支持北斗3

2、基本原理

参考文献
[1]李星星. GNSS精密单点定位及非差模糊度快速确定方法研究[D].武汉大学,2013.

UPD全称为Uncalibrated Phase Delays,未校准的相位硬件延迟。在PPP解算中,UPD会被模糊度吸收,从而导致模糊度失去了整周特性。

关于恢复模糊度整数特性的的方法有三种:

  • UPD分离:将卫星端 UPD 估计出来,然后浮点模糊度减去UPD就可恢复整数特性。
  • 整数钟:估计吸收UPD的卫星钟差,UPD被钟差吸收,钟差被扣掉后,就可以实现模糊度整数特性的恢复。
  • 钟差去耦:分别对伪距的钟差和载波相位的钟差进行了精确估计, 将伪距和载波相位的硬件延迟偏差与模糊度进行分离,成功实现了非差模糊度的正确固定。

GREAT-UPD 使用的就是第一种方法,下面给出IF组合计算EWL, WL, NL的公式
在这里插入图片描述

二、实操笔记

首先来看一下软件包中都有什么:

├─bin
│  ├─Linux
│  ├─Macintosh
│  └─Windows
├─doc
│  └─UPD_config
├─sample data
│  └─UPD_2020001
│      ├─ambflag
│      ├─ambflag23
│      ├─ambupd
│      ├─gnss
│      ├─obs
│      ├─result
│      └─XML
├─src
│  ├─app
│  ├─LibGnut
│  │  ├─gall
│  │  ├─gcoders
│  │  ├─gdata
│  │  ├─gio
│  │  ├─gmodels
│  │  ├─gset
│  │  ├─gutils
│  │  └─pugixml
│  │      └─src
│  ├─LibMat
│  │  ├─gutils
│  │  └─newmat
│  └─LibUPD
│      ├─gall
│      ├─gambfix
│      ├─gcoders
│      ├─gdata
│      ├─gproc
│      ├─gset
│      └─gutils
└─util
    ├─batch_process
    │  └─__pycache__
    ├─PreEdit
    │  ├─Linux
    │  ├─Macintosh
    │  ├─PreEdit_config
    │  ├─PreEdit_sample
    │  │  ├─2020
    │  │  │  └─001
    │  │  └─2020001
    │  │      └─ambflag
    │  └─Windows
    └─upd_analysis
        ├─NL&EWL_epoch
        ├─upd_res
        └─WL&EWL
  • bin:这里面是一些可执行程序,在不同的平台下提供了相应的版本,支持的平台有linux, Macintosh, windows
  • doc:这里面有一些配置文件的示例和帮助文档GREAT-UPD_1.0.pdf
  • sample data:这里面是一个算例,时间是2020年DOY01的
  • src:估计UPD的源码
  • util:一些脚本和工具,注意PreEdit是一个周跳探测的小工具

如果想要详细研究UPD估计的代码的话,需要按照帮助文档GREAT-UPD_1.0.pdf第3章Installation来进行软件的安装并仔细阅读和调试,由于时间成本比较大,暂且不论。如果只把这个软件当作一个小工具使用的话,只需要搞懂util中的脚本并且会调用bin中的可执行程序即可。

PS: 在看下面的内容之前,笔者建议读者先通读一边帮助文档,并且着重看一下附录中的文件结构和内容。

1、数据下载

GPS广播星历和精密星历的下载:https://blog.csdn.net/Gou_Hailong/article/details/100809806
CDDIS网站下 GNSS 相关的数据产品下载:https://blog.csdn.net/Gou_Hailong/article/details/109191352

数据下载的脚本在./util/batch_process目录下,先进去
在这里插入图片描述

1 下载DCB

# 看看怎么用的
python3 download_dcb.py -h
---------------------------------------
Purpose: Download CODE DCB Files                                          
  Usage: python dcb_download.py -y <year> -d <doy> -l <length> --dst=<dst>  
        -y              Year                                                
        -d              Day of Year                                         
        -l              Length of Days                                      
        --dst=          Directory of DCB Files                              
        -h|--help       Help Information

注意:帮助里面文件名给错了,应该是download_dcb.py,而不是dcb_download.py,使用示例:

./download_dcb.py -y 2022 -d 2 -l 2 --dst=./tmp
-----------------------------------
最后下载的文件有:
ls tmp		
P1C12201.DCB  P1P22201.DCB  P2C22201_RINEX.DCB

这个下载的是CODE的DCB,它是一个月给一个值,并且里面只含有GPSGLONASS系统的DCB。

2 下载观测文件

# 看看怎么用的
python3 download_obs.py -h
---------------------------------------
Purpose: Download GNSS Observation Files <priority: MGEX, then IGS>                                
  Usage: python obs_download.py -y <year> -d <doy> -l <length> --dst=<dst>  --site=<site_list_file>  
        -y              Year                                                                         
        -d              Day of Year                                                                  
        -l              Length of Days                                                               
        --dst=          Directory of Obs Files                                                       
        --site=         Site List                                                                    
        -h|--help       Help Information

注意上边帮助信息的文件名也写错了,这个要比DCB要多一个参数--site,下面创建一个测站列表文件

site_list_test
---------------------------------------
abpo
abmf

下面是使用示例:

python3 download_obs.py -y 2022 -d 2 -l 1 --dst=./tmp --site=site_list_test

运行上面的示例之后,可以发现没有反应,这是因为脚本用的是cddis.gsfc.nasa.govftp源,但是cddis在2020年10月31日宣布了暂停ftp匿名服务(上面两个链接有介绍文件路径,可参看),所以不能使用了。解决方法是,换成武大ftp源,可以将download_obs.py文件中

# 第21行
CDDIS_DOMAIN = "cddis.gsfc.nasa.gov" 
# 替换为
CDDIS_DOMAIN = "igs.gnsswhu.cn" 
# 再次调用脚本
python3 download_obs.py -y 2022 -d 2 -l 1 --dst=./tmp --site=site_list_test
# 然后就可以下载到观测文件了!
ls tmp/2022/002/
abmf0020.22o  abpo0020.22o

3 下载导航电文文件

# 看看怎么用的
python3 download_nav.py -h
---------------------------------------
Purpose: Download GNSS Navigation Files                                   
  Usage: python nav_download.py -y <year> -d <doy> -l <length> --dst=<dst>  
        -y              Year                                                
        -d              Day of Year                                         
        -l              Length of Days                                      
        --dst=          Directory of Nav Files                              
        -h|--help       Help Information

注意帮助里面的文件名写错了,这个使用的也是cddis的ftp源,将download_nav.py文件

# 第22行
CDDIS_DOMAIN = "cddis.gsfc.nasa.gov" 
# 替换为
CDDIS_DOMAIN = "igs.gnsswhu.cn" 
# 另外由于 whu 和 cddis 关于导航电文的文件路径不同,所以要复杂一些
# 第82行下面加一行
str_nav_m = f"BRDM00DLR_S_{new_year:04}{new_doy:03}0000_01D_MN.rnx.gz"
# 第92行删除,改成下面两行
gnss_tools.ftp_download(CDDIS_DOMAIN,f"/pub/gps/data/daily/{new_year:04}/brdc",str_daily_dst,str_nav_p)
gnss_tools.ftp_download(CDDIS_DOMAIN,f"/pub/gps/data/daily/{new_year:04}/brdc",str_daily_dst,str_nav_m)
# 另外将所有的 .*Z 替换为 *.gz, 运行下面的指令
python3 ./download_nav.py -y 2022 -d 2 -l 1 --dst=./tmp
# 然后就可以下载到导航电文了!
---------------------------------------
ls tmp/2022/002/
brdc0020.22g  brdc0020.22n  BRDM00DLR_S_20220020000_01D_MN.rnx

2、数据预处理

准备好所需要的文件

  • 观测o文件
  • DCB文件
  • 导航电文文件,我一般用长文件名BRDM00DLR_S_20220020000_01D_MN.rnx,并把文件名改成brdm0020.22p

数据预处理就是使用软件包自带的小工具PreEdit来进行周跳探测,笔者是在linux 系统下测试的,所以首先需要让其可执行

cd ./util/PreEdit/Linux
chmod +x GREAT-PreEdit
# 看看怎么用的
export LD_LIBRARY_PATH=./
./GREAT-PreEdit -h
---------------------------------------
GREAT/TURBOEDIT [0.9.0] compiled: Aug  5 2020 16:13:12 ($Rev: 2448 $)

Usage: 

    -h|--help              .. this help                          
    -V int                 .. version                            
    -v int                 .. verbosity level                    
    -x file                .. configuration input file           
    --                     .. configuration from stdinp          
    -l file                .. log output file                    
    -X                     .. output default configuration in XML

可以看到,直接调用小工具的话,后面跟-x cfg_xx.xml -l logfile.log即可,配置文件的配置可以参看帮助文档中附录,或者样例里面的xml文件。更重要的是,软件包中还提供了自己生成配置文件的脚本,在linux平台下的调用方法是

Linux:
export LD_LIBRARY_PATH=../Linux
python ../../batch_process/PreEdit.py -c PreEdit_Linux.ini
python ../../batch_process/PreEdit.py --config=PreEdit_Linux.ini

值得注意的是,需要首先将*.ini文件中的各项给出准确的值:像路径,最好给绝对路径(默认是在./util/PreEdit/PreEdit_sample路径下调用的脚本),然后时间、测站列表、工作路径、原始数据路径都要给出。

ps: 个人感觉这个脚本很鸡肋,因为无论如何都要更改配置,还不如直接改xml的配置,但是如果再对脚本进行一些扩充,将其改成可以批量生成xml并运行程序的脚本,那这个脚本的意义就很大了。

3、UPD估计

在进行UPD估计之前,首先要准备好所需文件

  • 观测o文件
  • DCB文件
  • ambflag周跳文件:数据预处理得到
  • 导航电文p文件
  • ambupd浮点模糊度文件:这个文件需要自己生成,就是做一个PPP,将浮点模糊度存起来,文件内容结构参见附录。ps: 这个没有专业知识和代码的话,生成起来确实有些困难。
  • ifcb文件:如果要估计EWL UPD的话,需要估计 GPS 的 IFCB,并且需要23频的周跳文件ambflg23这个文件也要自己生成

UPD估计的可执行文件路径为

./bin/Linux
chmod +x GREAT-UPD		# 令其可执行
# 看看怎么用的
export LD_LIBRARY_PATH=./
./GREAT-UPD -h
---------------------------------------
GREAT/UPD [0.9.0] compiled: Aug  5 2020 15:57:06 ($Rev: 2448 $)

Usage: 

    -h|--help              .. this help                          
    -V int                 .. version                            
    -v int                 .. verbosity level                    
    -x file                .. configuration input file           
    --                     .. configuration from stdinp          
    -l file                .. log output file                    
    -X                     .. output default configuration in XML

可以看到,直接调用小工具的话,后面跟-x cfg_xx.xml -l logfile.log即可,配置文件的配置可以参看帮助文档中附录,或者样例里面的xml文件。

三、算例的运行

为了更清晰的表达脚本的调用方法,这里举一个例子,就一起来把软件包中的算例给跑一下吧。首先算例所在目录为sample data/UPD_2020001,为了不“污染”原始算例,先在./sample data/目录下建个副本,取个名字叫UPD_2020001m,将必要的文件拷进去,文件中要有

ambupd  gnss  obs  site_list  upd_Linux.ini

就相当于,现在已经下载好了数据,并且准备好了所需的ambupdifcb文件。下面在linux下进行数据预处理和UPD估计,其他系统操作类似。

另外,文件夹中有空格会很烦,所以将sample data文件夹改名为sample_data

1、数据预处理

下面就要做数据预处理——周跳探测

cd ./util/PreEdit/PreEdit_sample 	# 进入数据预处理配置文件所在路径
cp PreEdit_Linux.ini PreEdit_Linuxm.ini	# 防止原始文件被污染,下面改 PreEdit_Linuxm.ini 文件

1 12频周跳探测

然后将PreEdit_Linuxm.ini内容改为

[project]
ymd_beg = 2020-01-01
ymd_end = 2020-01-01
hms_beg = 00:00:00
hms_end = 23:55:0
satsys = GREC
sitelist = ./site_list
interval = 30
ref_xml = ../PreEdit_config/PreEdit12.xml
work_dir = ../../../sample_data/UPD_2020001m
software = ../Linux/GREAT-PreEdit

[process]
minimum_elev = 7

[data]
nav_dir = ../../../sample_data/UPD_2020001m/gnss
obs_dir = ../../../sample_data/UPD_2020001m/obs
ambflag_dir = ../../../sample_data/UPD_2020001m/ambflag

这个目录下的site_list文件中,只有两个测站,为了多对一些测站进行周跳探测进而后续利用这些测站进行UPD估计,我们用./sample_data/UPD_2020001m/site_list将其替换掉。接着逐次运行下面的指令

# 所在目录为 ./util/PreEdit/PreEdit_sample
export LD_LIBRARY_PATH=../Linux
python ../../batch_process/PreEdit.py -c PreEdit_Linuxm.ini

等一会就会在路径../../../sample_data/UPD_2020001m/ambflag下生成周跳文件

1 23频周跳探测

依次运行下面的指令

cp PreEdit_Linuxm.ini PreEdit_Linuxm2.ini

然后将PreEdit_Linuxm2.ini文件内容改为

[project]
ymd_beg = 2020-01-01
ymd_end = 2020-01-01
hms_beg = 00:00:00
hms_end = 23:55:0
satsys = GREC
sitelist = ./site_list
interval = 30
ref_xml = ../PreEdit_config/PreEdit23.xml
work_dir = ../../../sample_data/UPD_2020001m
software = ../Linux/GREAT-PreEdit

[process]
minimum_elev = 7

[data]
nav_dir = ../../../sample_data/UPD_2020001m/gnss
obs_dir = ../../../sample_data/UPD_2020001m/obs
ambflag_dir = ../../../sample_data/UPD_2020001m/ambflag23

然后运行

# 所在目录为 ./util/PreEdit/PreEdit_sample
python ../../batch_process/PreEdit.py -c PreEdit_Linuxm2.ini

通过上面的操作,我们已经生成了12频和23频的周跳文件

ambflag
ambflag23

2、UPD 估计

下面进入路径./sample_data/UPD_2020001m,然后我们现在有的数据:

ls 
------------------------------------
ambflag  ambflag23  ambupd  gnss  obs  PreEdit.xml  site_list  upd_Linux.ini
------------------------------------
cp upd_Linux.ini upd_Linux1.ini		# 备份原 config 文件

1 WL & NL UPD

然后修改upd_Linux1.ini文件的内容如下:

[project]
; Begin Time: Year-Mon-Day
ymd_beg = 2020-01-01
ymd_end = 2020-01-01
hms_beg = 00:00:00
hms_end = 23:59:30
satsys = G
sitelist = ./site_list
interval = 30
work_dir = .
software = ../../bin/Linux/GREAT-UPD

[process]
; UPD Mode : WL or NL or EWL or EWL_EPOCH or WL+NL[first WL, then NL]
upd_mode = WL+NL
sat_rm = G04

[data]
; File Directory
dcb_dir = ./gnss
nav_dir = ./gnss
obs_dir = ./obs
upd_dir = .
ifcb_dir = 
ambflag_dir = ./ambflag
ambupd_dir = ./ambupd

接着运行程序

python ../../util/batch_process/upd.py -c upd_Linux1.ini

过一会就会生成 WL, NL upd 文件

2 EWL UPD

cp upd_Linux1.ini upd_Linux2.ini

修改upd_Linux2.ini的文件内容如下:

[project]
; Begin Time: Year-Mon-Day
ymd_beg = 2020-01-01
ymd_end = 2020-01-01
hms_beg = 00:00:00
hms_end = 23:59:30
satsys = G
sitelist = ./site_list
interval = 30
work_dir = .
software = ../../bin/Linux/GREAT-UPD


[process]
; UPD Mode : WL or NL or EWL or EWL_EPOCH or WL+NL[first WL, then NL]
upd_mode = EWL
sat_rm = G04

[data]
; File Directory
dcb_dir = ./gnss
nav_dir = ./gnss
obs_dir = ./obs
upd_dir = .
ifcb_dir = ./gnss
ambflag_dir = ./ambflag23
ambupd_dir = ./ambupd

然后运行指令

python ../../util/batch_process/upd.py -c upd_Linux2.ini 

最后就生成 EWL UPD 了。

注意:这只是GPS系统UPD产品的生成,其他系统只需更改satsys = G即可!

ps:
1、目前笔者只会估计单天的UPD,不知可不可以进行多天 UPD 的批量生成
2、关于 ambupd 文件和 ifcb 文件的生成,笔者还未知,所以只会跑所给算例,如果知道这两种文件的生成方式,那么就可以模仿所给算例生成其他天的 UPD。
3、脚本目前还不太智能,因为需要手动配置ini文件,后面如果可以扩充一下,改成批量自动配置ini文件,然后再调用程序就好了。

  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪猪头拯救地球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值