周跳探测——LLI

前言


周跳探测是卫星定位解算中非常重要的数据预处理步骤,基本上把周跳问题处理好,整个数据干净了,后面的模糊度固定就能省事不少,因此,把相关的方法整理一下,以后看到有新的论文方法也记录下来,不断提高自己的水平。

一、LLI标志

LLI(Loss of Lock Indicator)表示失锁标识符,它的范围为0~7,转化为二进制格式000-111,即有3个bit位。其中bit 0和bit 1仅用于相位。

官方解释:【北斗/全球卫星导航系统(GNSS)接收机数据自主交换格式】

(1)0 或空格:正常或未知
(2)Bit0 置位:先前与当前观测值之间失锁,可能发生了周跳(只针对相位观测值)。
(3)Bit1 置位:接收机进行半周模糊度解算,或程序不能处理半周数据而跳过该观测值的记录(只对当前历元有效)。
(4)Bit2 置位:bit 2置1表示为反欺骗(AS)下的观测值(可能会受到噪声增加的影响)[官方说明书上没有说明,今天用某型号的板卡才发现有这个问题,标志位LLI=4的时候,伪距和载波观测值有问题,用上面其他周跳探测方法没有探测出来]。

rtklib中代码和增加AS探测代码如下:

/* detect cycle slip by LLI --------------------------------------------------*/
static void detslp_ll(rtk_t *rtk, const obsd_t *obs, int i, int rcv)
{
    uint32_t slip,LLI;
    int f,sat=obs[i].sat;
    
    trace(4,"detslp_ll: i=%d rcv=%d\n",i,rcv);
    
    for (f=0;f<rtk->opt.nf;f++)
	{
		//------没有载波数据和标志为0,或者前后历元时间间隔大---------------
        if ((obs[i].L[f]==0.0&&obs[i].LLI[f]==0)||
            fabs(timediff(obs[i].time,rtk->ssat[sat-1].pt[rcv-1][f]))<DTTOL)
		{
            continue;
        } 
        /* restore previous LLI */
        if (rcv==1) LLI=getbitu(&rtk->ssat[sat-1].slip[f],0,2); /* rover */
        else        LLI=getbitu(&rtk->ssat[sat-1].slip[f],2,2); /* base  */
        
        /* detect slip by cycle slip flag in LLI */
        if (rtk->tt>=0.0) 
		{ /* forward */
            if (obs[i].LLI[f]&1) //------bit0为1,表明当前历元可能发生了周跳-----------
			{
                errmsg(rtk,"slip detected forward (sat=%2d rcv=%d F=%d LLI=%x)\n",
                       sat,rcv,f+1,obs[i].LLI[f]);
            }
            slip=obs[i].LLI[f];
        }
        else
		{ /* backward */
            if (LLI&1)//-----------前一历元bit0位为1,表明前一历元发生可能发生了周跳
			{
                errmsg(rtk,"slip detected backward (sat=%2d rcv=%d F=%d LLI=%x)\n",
                       sat,rcv,f+1,LLI);
            }
            slip=LLI;
        }
        /* detect slip by parity unknown flag transition in LLI */
		//----(LLI&2)&&!(obs[i].LLI[f]&2)--前一历元bit1 位为1并且当前历元bit1位不为1;
		//----(!(LLI&2)&&(obs[i].LLI[f]&2) ----前一历元bit1 位为0且当前历元bit1位为1;
		//----即前后历元的bit1位不相同,表明可能发生了半周跳。
        if (((LLI&2)&&!(obs[i].LLI[f]&2))||(!(LLI&2)&&(obs[i].LLI[f]&2)))
		{
            errmsg(rtk,"slip detected half-cyc (sat=%2d rcv=%d F=%d LLI=%x->%x)\n",
                   sat,rcv,f+1,LLI,obs[i].LLI[f]);
            slip|=1;//将slip的bit0位置为1;
        }
      
      //表示为反欺骗(AS)下的观测值(可能会受到噪声增加的影响)
     if(obs[i].LLI[f]&0x04)
    {
       slip|=1;//将slip的bit0位置为1;
     }
        /* save current LLI */
        if (rcv==1) setbitu(&rtk->ssat[sat-1].slip[f],0,2,obs[i].LLI[f]);
        else        setbitu(&rtk->ssat[sat-1].slip[f],2,2,obs[i].LLI[f]);
        
        /* save slip and half-cycle valid flag */
        rtk->ssat[sat-1].slip[f]|=(uint8_t)slip;
        rtk->ssat[sat-1].half[f]=(obs[i].LLI[f]&2)?0:1;
    }
}

理论上只要板卡足够好,它自身的LLI标志就能把载波数据的周跳、半周跳告知你,就不需要其他探测方法了。LLI的是从信道方面探测周跳的,效果应该比我们从数据方法探测周跳更灵敏。

有的板卡或许LLI探测太灵敏了,把没有问题的数据也当作周跳进行标志,可能会导致观测数据不足,故有时会把LLI周跳探测方法关闭。

北斗/全球卫星导航系统(GNSS)接收机数据自主交换格式文档
链接: http://www.beidou.gov.cn/zt/bdbz/201712/W020171226815455305615.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值