pride的模糊度固定时pride_pppar的重要部分,但是我在看模糊度固定部分的代码时却有很多疑惑。
如其他常见的PPP模糊度固定一样,pride软件的模糊度固定同样采用无电离层组合。但是其fcb的使用让人捉摸不透,希望有看懂的前辈指点一二。
arsig.f90
该程序是arsig
可执行程序的主程序。我对其处理过程的浅陋理解如下:
get_arsig_args(FCB)
函数,将模糊度固定所需的配置参数保存到了FCB
结构体中。#函数作用:获取模糊度解算所需配置参数
#所在文件夹:src/arsig
#输出: FCB结构体
subroutine get_arsig_args(FCB)
* 打开配置文件-config_template;
* 将配置文件中的‘Session time’通过简化儒略日的形式保存到FCB%jd0 、FCB%sod0、FCB%jd1、FCB%sod1中;
* 将‘Interval’保存到FCB%dintv中;
* 定义结果文件文件名;
* 将‘+GPS Satellites’中的GPS卫星prn保存到FCB%prn(FCB%nprn),总卫星数:FCB%nprn;
* 若使用lambda方法固定模糊度,则FCB%lsearch为真,否则为假;
* 将‘Common observing’保存到FCB%insec_common,用于与浮点模糊度有效时间进行对比。
* 将‘Cutoff elevation’保存到FCB%cutoff;
* 将‘Critical search’保存到FCB%maxdel、FCB%minsav、FCB%chisq、FCB%ratio。分别为:最大删除模糊度/最小保留模糊度/卡方检验统计量/比值试验临界值;
* 将‘Widelane decision’保存到FCB%wl_maxdev, FCB%wl_maxsig, FCB%wl_alpha中,分别为锥函数的阈值偏差(=0.4 in Dong和Bock;/ 锥形函数的阈值σ(=0.33 in Dong和Bock;/ 判定函数的错误率
Narrowlane decision = 0.15 0.15 1000.
* 将‘Narrowlane decision’保存到FCB%nl_maxdev, FCB%nl_maxsig, FCB%nl_alpha,含义如上;
read_invnormal(FCB, PM, QN, AS)
函数;否则,调用read_ambiguity(FCB, AS)
函数直接读取。由于pride软件lambda模块未开源,所以笔者在这里只看了非lambda方法固定模糊度,下面未说明都是如此。# 函数作用:读取非差模糊度估计值
# 所在文件夹:src/arsig
# 参数:
输入:FCB --模糊度相关结构体
输出:AS --单站初始浮点模糊度结构体
subroutine read_ambiguity(FCB, AS)
* 打开最小二乘生成的模糊度文件amb_
* 读取非差模糊度估计值,将高度角小于FCB%cutoff或者宽巷模糊度方差乘3后大于0.2或者模糊度有效时间小于FCB%insec_common(最小共同时间)的模糊度舍弃。并统计读取非差模糊度的个数。
* 并将amb_文件中的无电离层组合模糊度、宽巷模糊度及它们的均方根误差保存在结构体AS中,分别用AS%xamb、AS%xrwl、AS%xrms和AS%xswl表示。
* 并计算出其模糊度起止时间的所在历元,保存在结构体AS%iepc中。
* 即每个测站将会有AS%now个合格的模糊度。
define_sat_pairs(FCB, AS, ASD)
,对每个测站定义所有的卫星对。形成星间单差。利用星间单差求解模糊度可以消去卫星端相位偏差。#函数作用:定义每个测站对应的卫星对
#所在位置:src/arsig
#参数:
输入:FCB --解算模糊度相关结构体
AS --测站非差模糊度结构体
输出:ASD --星间单差模糊度
subroutine define_sat_pairs(FCB, AS, ASD)
* 按卫星号循环,先形成卫星对(采用的方法没看明白)
* 计算特定卫星对的星间单差宽巷模糊度及其方差(简单的相减)
* 将结果保存到ASD机构体中
fix_ambiguity(FCB, AS, ASD)
#函数作用:固定单站模糊度
#所在位置:src/arsig
#参数:
输入: FCB --与模糊度相关结构体
输出: AS --测站模糊度结构体
ASD --单差模糊度结构体
subroutine fix_ambiguity(FCB, AS, ASD)
* 对所有单差模糊度进行循环
* 调用函数bdeci固定宽巷模糊度,并生成一个prob和alpha
* 如果prob大于0 并且 alpha小于FCB%wl_alpha(从配置文件读取的),则令ASD%(isd)%id = 1,及这个id等于1时是固定了宽巷单差模糊度,同时,固定的宽巷模糊度个数(nwlfx)+1,。
* 利用星间单差无电离层模糊度(直接相减)和浮点单差宽巷模糊度计算单差浮点窄巷模糊度和方差。
* 同样的方法调用bdeci函数固定窄巷模糊度,如果窄巷也成功固定,则令ASD%(isd)%id = 0,及id等于0时宽窄巷都已经固定,同时,宽窄巷都固定的个数(nwnfx)+1.
* 通过ASD()%dec的值,及bdeci函数输出的alpha结果对ASD进行排序。
* 调用check_amb_depend()函数挑选出每个测站独立的单差
* AS结构体中仅保留每个测站固定宽巷模糊度的独立单差(不懂为神马)
find_indep(indp, FCB, SD, AS, ASD)
函数找出每个测站独立的卫星对 indp:独立卫星对的个数
SD: 独立单差模糊度
;write_ambcon(indp, SD, FCB, AS)
函数生成固定模糊度文件con_有几个疑问:
# 这里为什么是ASD(1)?
call fix_ambiguity(FCB, AS, ASD(1))