RTKLIB-PPP精密单点定位代码不完全解读

geodist(rtkcmn.c)

extern double geodist(const double *rs, const double *rr, double *e)

功能说明:
输入卫星和接收机在ECEF坐标系下的坐标,计算站星单位矢量(校正了地球自转)
假设测站坐标为 ( X R , Y R , Z R ) \left(X_{R}, Y_{R}, Z_{R}\right) (XR,YR,ZR),卫星坐标为 ( X S , Y S , Z S ) \left(X_{S}, Y_{S}, Z_{S}\right) (XS,YS,ZS) ω \omega ω为地球自转角速度, c c c为真空中光速,则由地球自转引起的距离改正为:
Δ D ω = ω c [ Y s ( X R − X s ) − X s ( Y R − Y s ) ] \Delta D_{\omega }=\frac{\omega}{c}\left[Y_{s}\left(X_{R}-X_{s}\right)-X_{s}\left(Y_{R}-Y_{s}\right)\right] ΔDω=cω[Ys(XRXs)Xs(YRYs)]
参数说明:

函数参数3double *rs       I   satellilte position (ecef at transmission) (m)
double *rr       I   receiver position (ecef at reception) (m)
double *e        O   line-of-sight vector (ecef)
return : geometric distance (m) (0>:error/no satellite position)

调用关系:
上级函数 ppp_res(ppp.c)

satazel(rtkcmn.c)

extern double satazel(const double *pos, const double *e, double *azel)

功能说明:
根据卫星坐标计算方位角和高度角
在这里插入图片描述
处理过程

站星矢量模<=0(即没有探测到卫星)或卫星高度角太小时,排除该颗卫星,exc[i]=1

参数说明:

函数参数3double *pos      I   geodetic position {lat,lon,h} (rad,m)
double *e        I   receiver-to-satellilte unit vevtor (ecef)
double *azel     IO  azimuth/elevation {az,el} (rad) (NULL: no output)
                              (0.0<=azel[0]<2*pi,-pi/2<=azel[1]<=pi/2)
return : elevation angle (rad)

调用关系:
上级函数 ppp_res(ppp.c)

model_trop(ppp.c)

static int model_trop(gtime_t time, const double *pos, const double *azel,
                      const prcopt_t *opt, const double *x, double *dtdx,
                      const nav_t *nav, double *dtrp, double *var)

功能说明:
根据不同的对流层模型计算对流层延迟
参数说明:

函数参数9个
gtime_t		time		I
const double	*pos		I	receiver position {lat,lon,h} (rad,m)
const double	*azel		I	[azimuth,elevation]
const prcopt_t	*opt		I	config参数
const double	*x		I	状态向量
double		*dtdx		O
const nav_t	*nav		I
double		*dtrp		O	对流层延迟
double		*var		O	

处理过程:
1.TROPOPT_SAAS,调用tropmodel(rtkcmn.c)
2.TROPOPT_SBAS,调用sbstropcorr
3.TROPOPT_EST或TROPOPT_ESTG或TROPOPT_ZTD,调用trop_model_prec

tropmodel(rtkcmn.c)

extern double tropmodel(gtime_t time, const double *pos, const double *azel,
                        double humi)

功能说明:
saastamoninen 模型估计对流层延迟
参数说明:

函数参数4个
gtime_t time     I   time
double *pos      I   receiver position {lat,lon,h} (rad,m)
double *azel     I   azimuth/elevation angle {az,el} (rad)
double humi      I   relative humidity
return : tropospheric delay (m)

处理过程:

1.根据接收机位置和时间计算压强pres和温度temp
2.计算水汽压力 e = 6.108 × exp ⁡ [ 17.15 T − 4684.0 T − 38.45 ] × h rel e=6.108 \times \exp \left[\frac{17.15 T-4684.0}{T-38.45}\right] \times h_{\text {rel}} e=6.108×exp[T38.4517.15T4684.0]×hrel
3.计算天顶角 z = π / 2 − e l z=\pi / 2-e l z=π/2el
4.估计对流层静力学延迟trph和湿延迟trpw
T h = 0.0022768 p 1.0 − 0.00266 cos ⁡ ( 2 ϕ ) − 0.00028 h × 1 0 − 3 × 1 cos ⁡ z T w = 0.0022768 ( 1255 T + 0.05 ) e × 1 cos ⁡ z T r = T h + T w \begin{array}{c} T_{h}=\frac{0.0022768 p}{1.0-0.00266 \cos (2 \phi)-0.00028 h \times 10^{-3}} \times \frac{1}{\cos z} \\ T_{w}=0.0022768\left(\frac{1255}{T}+0.05\right) e \times \frac{1}{\cos z} \\ T_{r}=T_{h}+T_{w} \end{array} Th=1.00.00266cos(2ϕ)0.00028h×1030.0022768p×cosz1Tw=0.0022768(T1255+0.05)e×cosz1Tr=Th+Tw

sbstropcorr(rtkcmn.c)

extern double sbstropcorr(gtime_t time, const double *pos, const double *azel,
                          double *var)

功能说明:
SBAS模型也叫EGNOS模型,它最大的好处时计算对流层天顶延迟时不需要实测的气象数据,只需要接收机高度和5个气象参数(气压、温度、水蒸气、温度下降率、水蒸气温度下降率)就能估计延迟。
参数说明:

gtime_t		time	I   time
double   	*pos    I   receiver position {lat,lon,height} (rad/m)
double   	*azel   I   satellite azimuth/elevation (rad)
double   	*var    O   variance of troposphric error (m^2)
return : slant tropospheric delay (m)

处理过程:
1.根据接收机所处纬度估计气象参数met[]
2.估计对流层天顶干延迟 d d r y = z d r y ( 1 − β H T ) g R d β d_{dry}=z_{dry}\left(1-\frac{\beta H}{T}\right)^{\frac{g}{R_{d} \beta}} ddry=zdry(1TβH)Rdβg Z dry  = 1 0 − 6 k 1 R d P g m Z_{\text {dry }}=\frac{10^{-6} k_{1} R_{d} P}{g_{m}} Zdry =gm106k1RdP
3.估计对流层天顶湿延迟 d w e t = z w e t ( 1 − β H T ) ( λ + 1 ) T R d β − 1 d_{wet}=z_{wet}\left(1-\frac{\beta H}{T}\right)^{\frac{(\lambda +1)T}{R_{d} \beta}-1} dwet=zwet(1TβH)Rdβ(λ+1)T1, Z w e t = 1 0 − 6 k 2 R 4 g m ( λ + 1 ) − β R d × e T Zwet =\frac{10^{-6} k_{2} R_{4}}{g_{m}(\lambda+1)-\beta R_{d}} \times \frac{e}{T} Zwet=gm(λ+1)βRd106k2R4×Te
其中 H H H是海平面接收机高度; T T T是海平面的温度值(K); β \beta β是温度下降率(K/m);Rd=287.054J/(kg.K); λ \lambda λ水蒸气湿度下降率; P P P海平面气压(mbar); e e e是水蒸气压(mbar)
4.计算投影函数m
这里cosz=sinel在这里插入图片描述
5.计算var

trop_model_prec(ppp.c)

static double trop_model_prec(gtime_t time, const double *pos,
                              const double *azel, const double *x, double *dtdx,
                              double *var)

功能说明:
用精密对流层模型计算对流层延迟
参数说明:

函数参数6个
gtime_t time     I   time
double   *pos    I   receiver position {lat,lon,height} (rad/m)
double   *azel   I   satellite azimuth/elevation (rad)
double	*x	I
double	*dtdx	O	对流层三个参数{湿延迟投影函数m_w,北电离层梯度系数,东电离层梯度系数},用于后续确定H阵
double   *var    O   variance of troposphric error (m^2)
return : tropospheric delay (m)

处理过程:
1.用saastamoinen模型估计对流层天顶延迟zhdtropmodel(rtkcmn.c)
2.调用NMF模型计算干投影函数m_h
3.计算湿投影函数 m = m + m ∗ cot ⁡ E l ∗ G N ∗ cos ⁡ A z + m ∗ cot ⁡ E l ∗ G E ∗ sin ⁡ A z m=m+m * \cot E l * G_{N} * \cos A z+m * \cot E l * G_{E} * \sin A z m=m+mcotElGNcosAz+mcotElGEsinAz
4.计算var
5.返回对流层延迟

model_iono(ppp.c)

static int model_iono(gtime_t time, const double *pos, const double *azel,
                      const prcopt_t *opt, int sat, const double *x,
                      const nav_t *nav, double *dion, double *var)

功能说明:
计算电离层延迟
参数说明:

gtime_t  time I   time
double    *pos    I   receiver position {lat,lon,height} (rad/m)
double    *azel   I   satellite azimuth/elevation (rad)
prcopt_t *opt  I processing options
int	sat	I	satellite number
double	*x	I
nav_t	*nav	I
double	*dion	O
double	*var	O

处理过程:
1.IONOOPT_SBAS时调用sbsioncorr(sbas.c)
2.IONOOPT_TEC时调用iontec(ionex.c),细节参考spp代码解析
3.IONOOPT_BRDC时调用ionmodel(rtkcmn.c)细节参考spp代码解析
4.IONOOPT_EST时直接估计
5.IONOOPT_IFLC时跳过先不估计
6.IONOOPT_STEC时调用pppcorr_stec(ppp_corr.c)

corr_meas(ppp.c)

static void corr_meas(const obsd_t *obs, const nav_t *nav, const double *azel,
                      const prcopt_t *opt, const double *dantr,
                      const double *dants, double phw, double *L, double *P,
                      double *Lc, double *Pc)

功能说明:
对伪距P和载波相位L观测值进行修正,包括卫星天线相位/接收机天线相位/相位缠绕/dcb;根据系统选择不同的组合观测频点,把无电离层组合观测值放入Lc/Pc中
参数说明:

函数参数11个
obsd_t		*obs		I	observation data
nav_t		*nav		I	navigation data
double		*azel		I	[azimuth,elevation]
prcopt_t	*opt		I	processing options
double		*dantr		I	接收机天线相位修正
double		*dants		I	卫星天线相位修正
double		phw		I	相位缠绕修正
double 		*L		O	修正后的相位观测值
double		*P  		O 	修正后的伪距观测值
double  	*Lc  		O	修正后的无电离层组合相位观测值
double  	*Pc  		O 	修正后的无电离层组合伪距观测值

调用关系:
上级函数 corr_meas(ppp.c)ppp_res(ppp.c) udbias_ppp(ppp.c)下级函数 satsys(rtkcmn.c) testsnr(rtkcmn.c)
处理过程:

1.根据输入的卫星天线相位修正数/接收机天线相位修正数/相位缠绕修正数对L和P观测值进行修正;
2.当星历为EPHOPT_SSRAPC或EPHOPT_SSRCOM时进行SSR码修正;否则进行dcb修正;修正值存储在L[],P[]中;
3.无电离层组合模型:伽利略/SBAS/北斗系统选用L1/L5组合观测;其它选用L1/L2组合观测;组合观测值存储在Lc[],Pc[]中。

  • 11
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值