周跳探测——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

03-11
### LLI指令含义及用法 #### LLI指令概述 LLI(Load Linked Immediate)并不是标准RISC-V或MIPS等常见架构的标准指令名称。然而,在某些特定上下文中,“LLI”可能指代不同的概念。这里讨论的是基于提供的关于ori指令的描述来推测LLI的相关特性。 对于ori指令而言,其操作码为6'b001101,用于将一个16位立即数进行无符号扩展至32位并与指定源寄存器(rs)的内容做逻辑“或”运算,最终结果存储于目标寄存器(rt)[^1]。虽然这并非直接解释LLI指令的功能,但从相似性出发,可以推断LLI也可能涉及加载操作和即时数值处理。 #### 结构体定义中的LLI 在另一个引用中提到的结构体 `_chan_lli` 定义了两个成员变量 `bus_list` 和 `va_list`,分别表示DMA控制器使用的物理地址以及CPU可以直接访问的虚拟地址[^3]: ```c struct _chan_lli { dma_addr_t bus_list; void *va_list; }; ``` 此结构体通常应用于硬件编程场景下,特别是在涉及到DMA传输时,用来管理内存映射关系。它并不属于传统意义上的汇编语言指令集的一部分,而是更接近底层设备驱动开发领域内的数据结构设计模式。 #### LLVM工具链下的LLI命令 值得注意的是,还有一个名为`lli`的命令存在于LLVM项目之中,该命令负责执行由`.ll`(LLVM IR)文件编译得到的目标代码片段。通过管道符连接llvm-as与lli命令能够实现从人类可读形式(.ll文件)向机器码转换并立即运行的过程[^2]: ```bash llvm-as < printf.ll | lli ``` 上述命令展示了如何利用LLVM工具链快速测试编写好的IR代码段落而不必经历完整的构建流程。 尽管这些信息涵盖了不同层面的技术细节,但都围绕着“LLI”的主题展开论述。具体到某一种情况下的LLI指令意义还需结合实际应用场景加以理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值