[关闭]
@MinLily 2020-05-21T14:19:32.000000Z 字数 3795 阅读 2055

RTKlib相对定位源码解析 - 周跳检测函数 detslp_mw,detslp_gf

GNSS RTKlib 相对定位


在此输入正文
首先是ppp.c中的两个周跳检测函数(detslp_mw和detslp_gf),由于PPP中的detslp_ll直接根据LLI进行周跳判断,比较简单,根据Rinex中对LLI的定义即可明白,因此不进行解析。

rtkpos.c中的周跳检测函数包括detslp_ll、detslp_gf_L1L2、detslp_gf_L1L5、detslp_dop,其中detslp_gf_L1L2、detslp_gf_L1L5与PPP中的detslp_gf相似,只不过这里使用的是双差后的载波相位。另外对detslp_ll和detslp_dop提出两点疑问:
1. detslp_dop函数由于clock-jump的问题,所以暂时没有使用。Clock-jump是指多普勒测量值中的时钟漂移吗?还是历元的跳变?
2. rtkpost.c中detslp_ll比较重要的特点是考虑了半周跳变化的情况,如果半周跳标志(LLI=2)前后两个历元发生变化,则认为有周跳。如果一直维持半周跳情况,并没有将slip的第0位置1,在之后的处理中仍然会使用该数据,这样似乎不太合理?
3. rtkpost.c中detslp_ll,如果是后向滤波,除了2中提到的半周跳处理,感觉原始数据中LLI似乎没有起到作用?

我所基于的代码版本是RTKlib 2.4.3的一个拓展版本RTKexplore Demo5,这个版本主要针对低成本的GNSS定位。该版本整体算法并未做较大更改,只是针对低成本接收机进行了完善。

detslp_mw

  1. static void detslp_mw(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav)
  1. * args : rtk_t *rtk IO gps solution structure
  2. * obsd_t *obs I satellite observations
  3. * int n I number of the user(rover) observations at current epoch
  4. * nav_t *nav I satellite navigation data
  5. /* detect slip by Melbourne-Wubbena linear combination jump ------------------*/
  6. static void detslp_mw(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav)
  7. {
  8. double w0,w1;
  9. int i,j;
  10. trace(4,"detslp_mw: n=%d\n",n);
  11. for (i=0;i<n&&i<MAXOBS;i++) {
  12. if ((w1=mwmeas(obs+i,nav))==0.0) continue;
  13. w0=rtk->ssat[obs[i].sat-1].mw;
  14. rtk->ssat[obs[i].sat-1].mw=w1;
  15. trace(4,"detslip_mw: sat=%2d mw0=%8.3f mw1=%8.3f\n",obs[i].sat,w0,w1);
  16. if (w0!=0.0&&fabs(w1-w0)>THRES_MW_JUMP) {
  17. trace(3,"detslip_mw: slip detected sat=%2d mw=%8.3f->%8.3f\n",
  18. obs[i].sat,w0,w1);
  19. for (j=0;j<rtk->opt.nf;j++) rtk->ssat[obs[i].sat-1].slip[j]|=1;
  20. }
  21. }
  22. }

detslp_gf

  1. static void detslp_gf(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav)
  1. * args : rtk_t *rtk IO gps solution structure
  2. * obsd_t *obs I satellite observations
  3. * int n I number of the user(rover) observations at current epoch
  4. * nav_t *nav I satellite navigation data
  5. /* detect cycle slip by geometry free phase jump -----------------------------*/
  6. static void detslp_gf(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav)
  7. {
  8. double g0,g1;
  9. int i,j;
  10. trace(4,"detslp_gf: n=%d\n",n);
  11. for (i=0;i<n&&i<MAXOBS;i++) {
  12. if ((g1=gfmeas(obs+i,nav))==0.0) continue;
  13. g0=rtk->ssat[obs[i].sat-1].gf;
  14. rtk->ssat[obs[i].sat-1].gf=g1;
  15. trace(4,"detslip_gf: sat=%2d gf0=%8.3f gf1=%8.3f\n",obs[i].sat,g0,g1);
  16. if (g0!=0.0&&fabs(g1-g0)>rtk->opt.thresslip) {
  17. trace(3,"detslip_gf: slip detected sat=%2d gf=%8.3f->%8.3f\n",
  18. obs[i].sat,g0,g1);
  19. for (j=0;j<rtk->opt.nf;j++) rtk->ssat[obs[i].sat-1].slip[j]|=1;
  20. }
  21. }
  22. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注