RTKLIB中模糊度固定之——instantaneous、continuous和fix-and-hold三种固定模式的异同
针对当前历元状态量对上一历元估计出的模糊度继承程度不同可分为三种模式:instantaneous、continuous和fix-and-hold
1. 先说instantaneous和 continuous、fix-and-hold两个之间的区别
Instantaneous = Integer Ambiguity Resolution
instantaneous不继承上一个历元估计的模糊度的结果,每个历元单独初始化模糊度
具体可以参考状态更新中的代码,部分代码如下:
/* reset phase-bias if instantaneous AR or expire obs outage counter */ for (i=1;i<=MAXSAT;i++) { reset=++rtk->ssat[i-1].outc[k]>(uint32_t)rtk->opt.maxout; if (rtk->opt.modear==ARMODE_INST&&rtk->x[IB(i,k,&rtk->opt)]!=0.0) { initx(rtk,0.0,0.0,IB(i,k,&rtk->opt)); } else if (reset&&rtk->x[IB(i,k,&rtk->opt)]!=0.0) { initx(rtk,0.0,0.0,IB(i,k,&rtk->opt)); trace(3,"udbias : obs outage counter overflow (sat=%3d L%d n=%d)\n", i,k+1,rtk->ssat[i-1].outc[k]); rtk->ssat[i-1].outc[k]=0; } if (rtk->opt.modear!=ARMODE_INST&&reset) { rtk->ssat[i-1].lock[k]=-rtk->opt.minlock; } } /* reset phase-bias if detecting cycle slip */ for (i=0;i<ns;i++) { j=IB(sat[i],k,&rtk->opt); rtk->P[j+j*rtk->nx]+=rtk->opt.prn[0]*rtk->opt.prn[0]*fabs(tt); slip=rtk->ssat[sat[i]-1].slip[k]; if (rtk->opt.ionoopt==IONOOPT_IFLC) slip|=rtk->ssat[sat[i]-1].slip[1]; if (rtk->opt.modear==ARMODE_INST||!(slip&1)) continue; rtk->x[j]=0.0; rtk->ssat[sat[i]-1].lock[k]=-rtk->opt.minlock; }
2. 再说一下continuous和fix-and-hold的区别
模糊度的浮点解储存在数组 rtk->x 中,固定解储存在数组 rtk->xa 中
continuous模式是让当前历元估计出的模糊度浮点解(rtk->x )当做下一个历元状态量中的模糊度(或称为下一个历元模糊度的初值)
fix-and-hold模式用结算出的固定解( rtk->xa)当量测对估计出的模糊度浮点解(rtk->x )进行了约束(或叫更新、融合),然后将约束后的
模糊度浮点解(rtk->x )当做下一个历元状态量中的模糊度(或称为下一个历元模糊度的初值)
具体代码可看函数 holdamb()
/* resolve integer ambiguity by LAMBDA */ if (stat!=SOLQ_NONE&&resamb_LAMBDA(rtk,bias,xa)>1) { if (zdres(0,obs,nu,rs,dts,var,svh,nav,xa,opt,0,y,e,azel,freq)) { /* post-fit reisiduals for fixed solution */ nv=ddres(rtk,nav,dt,xa,NULL,sat,y,e,azel,freq,iu,ir,ns,v,NULL,R, vflg); /* validation of fixed solution */ if (valpos(rtk,v,R,vflg,nv,4.0)) { /* hold integer ambiguity */ if (++rtk->nfix>=rtk->opt.minfix&& rtk->opt.modear==ARMODE_FIXHOLD) { holdamb(rtk,xa); } stat=SOLQ_FIX; } } }