RTKLIB中relpos()函数之——ddres()函数

ddres()函数--> /* double-differenced residuals and partial derivatives */

功能:求出卡尔曼滤波中的新息v,量测方程的系数矩阵H和量测噪声R

函数代码过长,只做一个简单介绍

static int ddres(rtk_t *rtk, const nav_t *nav, double dt, const double *x,
                 const double *P, const int *sat, double *y, double *e,
                 double *azel, const int *iu, const int *ir, int ns, double *v,
                 double *H, double *R, int *vflg)

const double *x, const double *P
这两个变量是函数udstate()求出来的预测状态量X及其协方差

double *v, double *H, double *R
这三个变量用来存放求出的新息v,量测方程的系数矩阵H和量测噪声R

介绍一下多系统RTK的问题

 

由图中代码可以看出,RTKLIB中多系统RTK的策略是每个系统单独选一个参考星,与同系统的其他卫星作差,也就是松耦合。

图中代码可以写成

    for (m=0;m<5;m++) /* m=0:gps/sbs,1:glo,2:gal,3:bds,4:qzs */
    {
        for (f=opt->mode>PMODE_DGPS?0:nf;f<nf*2;f++) 
        {
            /* search reference satellite with highest elevation */
            for (i=-1,j=0;j<ns;j++) 
            {
                sysi=rtk->ssat[sat[j]-1].sys;
                if (!test_sys(sysi,m)) continue;
                if (!validobs(iu[j],ir[j],f,nf,y)) continue;
                if (i<0||azel[1+iu[j]*2]>=azel[1+iu[i]*2]) i=j;
            }
            if (i<0) continue;
            ......
        }
     }   

RTKLIB的使用手册中也提到了这一点

 接收机接受不同系统的信号时,即使信号频率相同,群延迟也不同。

如果想做多系统RTK紧耦合,就需要考虑这个群延迟,把他当做待估参数,去估计它。

原文地址:https://www.cnblogs.com/y-z-h/p/15370590.html