在rtklib中,ppp的随机模型设置如下:
static double varerr(int sat, int sys, double el, int freq, int type, const prcopt_t *opt)
{
double fact=1.0,sinel=sin(el);
/* type 0:phase, 1:code */
if (type==1) fact*=opt->eratio[freq==0?0:1];
fact*=sys==SYS_GLO?EFACT_GLO:(sys==SYS_SBS?EFACT_SBS:EFACT_GPS);
if (sys==SYS_GPS||sys==SYS_QZS) {
if (freq==2) fact*=EFACT_GPS_L5; /* GPS/QZS L5 error factor */
}
if (opt->ionoopt==IONOOPT_IFLC) fact*=3.0;
return SQR(fact*opt->err[1])+SQR(fact*opt->err[2]/sinel);
}
输入参数分别是:卫星编号(rtklib的编号)、所属系统、卫星高度角、当前频率、测量类型(载波or测距码,分别为0 or 1)、结构体。
结构体中eratio
存储测距码相对于载波测量标准差的比例系数,通常为100,数组前两位分别为L1及L2载波;
结构体中err
第二位和第三位分别存储载波测量的标准差以及与卫星高度角相关的载波测量标准差,通常皆为0.003,实际应用中就是随机模型中的a,b。
故 根据程序可以看出,随机模型如下:
σ 2 = ( f a c t ∗ a ) 2 + ( f a c t ∗ b / s i n e l ) 2 \sigma^2 = (fact * a)^2 + (fact*b/sinel)^2 σ2=(fact∗a)2+(fact∗b/sinel)2
a,b为用户设置的噪声标准差,对于fact,以gps为基准,当使用载波测量,其为1.0,当使用测距码测量,其为1.0*测距码与载波的比例因子eratio,对于不同的系统,乘以各个系统对应的系数,对于L5载波,还要加一个针对L5载波的系数,另外,如果是消电离层组合,还要乘以3.0(因为消电离层组合约将噪声放大三倍)。
对于gamp也是类似的:
static double varerr(int sat, int sys, double el, int freq, int type,
const prcopt_t *opt)
{
double a=opt->err[1],b=opt->err[2];
double c=1.0,fact=1.0;
double sinel=sin(el);
fact=EFACT_GPS;
c=type?opt->err[0]:1.0; /* type=0:phase,1:code */
if (sys==SYS_GLO) {
fact=EFACT_GLO;
if (type) c=PPP_Glo.prcOpt_Ex.errRatioGLO;
}
else if (sys==SYS_CMP) {
if (type) c=PPP_Glo.prcOpt_Ex.errRatioBDS;
}
else if (sys==SYS_GAL) {
if (type) c=PPP_Glo.prcOpt_Ex.errRatioGAL;
}
else if (sys==SYS_QZS) {
if (type) c=PPP_Glo.prcOpt_Ex.errRatioQZS;
}
if (opt->ionoopt==IONOOPT_IF12) fact*=3.0;
return SQR(fact*c)*(SQR(a)+SQR(b/sinel));
}
ab分别为前面提到的载波测量的标准差以及与卫星高度角相关的载波测量标准差,c为不同系统的测距码与载波标准差的比例系数(err[0]存储gps系统测距码与载波标准差的比例系数),fact为系统间测量噪声系数。