前言
GF组合,又称为几何无关组合,使用双频载波数据进行计算,RTKLIB中在PPP算法和RTK算法中用不同方式实现。
一、ppp算法中gf原理
公式推导如下:
PPP中gf代码
代码如下(示例):
/* detect cycle slip by geometry free phase jump -----------------------------*/
static void detslp_gf(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav)
{
double g0,g1;
int i,j;
trace(4,"detslp_gf: n=%d\n",n);
for (i=0;i<n&&i<MAXOBS;i++) {
if ((g1=gfmeas(obs+i,nav))==0.0) continue;//----当前历元的值g1(t)=lam1*L1(t)-lam2*L2(t)
g0=rtk->ssat[obs[i].sat-1].gf[0];//----前一历元的值g1(t-1)=lam1*L1(t-1)-lam2*L2(t-1)
rtk->ssat[obs[i].sat-1].gf[0]=g1;//----当前历元进行存储
trace(4,"detslip_gf: sat=%2d gf0=%8.3f gf1=%8.3f\n",obs[i].sat,g0,g1);
//---g1(t)与g1(t-1)进行对比判断
//---rtk->opt.thresslip这个阈值设置可以参考gamp设置,跟高度角和前后历元间隔时间关联起来
if (g0!=0.0&&fabs(g1-g0)>rtk->opt.thresslip)
{
trace(3,"detslip_gf: slip detected sat=%2d gf=%8.3f->%8.3f\n",
obs[i].sat,g0,g1);
for (j=0;j<rtk->opt.nf;j++) rtk->ssat[obs[i].sat-1].slip[j]|=1;
}
}
}
有时电离层比较活跃,电离层一次差残余误差大,故在实际gnss数据处理中,会再历元间做二次差,再次消弱电离层误差。
二、rtkpos算法中gf原理
公式推导如下:
rktpos中代码如下:
/* detect cycle slip by geometry free phase jump -----------------------------*/
static void detslp_gf(rtk_t *rtk, const obsd_t *obs, int i, int j,
const nav_t *nav)
{
int k,sat=obs[i].sat;
double gf0,gf1;
trace(4,"detslp_gf: i=%d j=%d\n",i,j);
/* skip check if slip already detected */
//-----如果slip的bit0位为1,说明有周跳,返回-------------------
for (k=0;k<rtk->opt.nf;k++)
if (rtk->ssat[sat-1].slip[k]&1) return;
for (k=1;k<rtk->opt.nf;k++) {
/* calc SD geomotry free LC of phase between freq0 and freqk */
// gf1(t)= {L1(t)频点的(流动站载波L)-(基站的载波L)}- {L2(t)频点的(流动站载波L)-(基站的载波L)}
//------一次性可以探测基站和流动站的周跳------------------------------
if ((gf1=gfobs(obs,i,j,k,nav))==0.0) continue;
//------t-1时候的gf-------------------
gf0=rtk->ssat[sat-1].gf[k-1]; /* retrieve previous gf */
rtk->ssat[sat-1].gf[k-1]=gf1; /* save current gf for next epoch */
if (gf0!=0.0&&fabs(gf1-gf0)>rtk->opt.thresslip) {//----------这个阈值设定可以跟高度角和时间关联起来
rtk->ssat[sat-1].slip[0]|=1;
rtk->ssat[sat-1].slip[k]|=1;
errmsg(rtk,"slip detected GF jump (sat=%2d L1-L%d dGF=%.3f)\n",
sat,k+1,gf0-gf1);
}
}
}
三、总结
在ppp定位算法中,只有流动站的数据,故只能用单站GF探测;在rtkpos中,有基站和流动站的数据,用双站GF探测更加省时。
注:基站数据一般情况下环境都是开阔环境下的,数据质量都比较好;流动站数据环境复杂些;因此,在周跳探测的时候最好分开进行周跳探测。