針對當前歷元狀態量對上一歷元估計出的模糊度繼承程度不同可分為三種模式: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; } } }