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紧耦合,就需要考虑这个群延迟,把他当做待估参数,去估计它。