前言
mw是利用L1和L2频点的伪距和载波观测数据组合进行周跳探测的一种方法,只能探测双频的数据。该方法由于包含伪距噪声,故也只能探测大的周跳值。mw方法适用于在宽项固定中进行周跳探测。
一、rtklib中MW方法代码如下
公式推导如下:
代码如下(示例):
/* detect slip by Melbourne-Wubbena linear combination jump ------------------*/
static void detslp_mw(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav)
{
double w0,w1;
int i,j;
trace(4,"detslp_mw: n=%d\n",n);
for (i=0;i<n&&i<MAXOBS;i++) {
if ((w1=mwmeas(obs+i,nav))==0.0) continue;
w0=rtk->ssat[obs[i].sat-1].mw[0];
rtk->ssat[obs[i].sat-1].mw[0]=w1;
trace(4,"detslip_mw: sat=%2d mw0=%8.3f mw1=%8.3f\n",obs[i].sat,w0,w1);
if (w0!=0.0&&fabs(w1-w0)>THRES_MW_JUMP) {
trace(3,"detslip_mw: slip detected sat=%2d mw=%8.3f->%8.3f\n",
obs[i].sat,w0,w1);
for (j=0;j<rtk->opt.nf;j++) rtk->ssat[obs[i].sat-1].slip[j]|=1;
}
}
}
/* Melbourne-Wubbena linear combination --------------------------------------*/
static double mwmeas(const obsd_t *obs, const nav_t *nav)
{
double freq1,freq2;
freq1=sat2freq(obs->sat,obs->code[0],nav);
freq2=sat2freq(obs->sat,obs->code[1],nav);
if (freq1==0.0||freq2==0.0||obs->L[0]==0.0||obs->L[1]==0.0||
obs->P[0]==0.0||obs->P[1]==0.0) return 0.0;
-----------------计算量------------------------
return (obs->L[0]-obs->L[1])*CLIGHT/(freq1-freq2)-
(freq1*obs->P[0]+freq2*obs->P[1])/(freq1+freq2);
}