RTKLIB V2.3.3源码关于北斗支持
疑似Bug
sp3 文件读取
在 preceph.c 中有函数 readsp3h() 需要将以下代码
if (ns==0) {
ns=(int)str2num(buff,4,2);
}
更改为
if (ns==0) {
ns=(int)str2num(buff,3,3);
}
否则将导致在读入混合精密星历时卫星数量读取错误,后续计算出现卫星数量不够
北斗参与解算
这个应该不算一个bug,只是需要注意如果需要使用RTKLIB源码处理GNSS数据的话,需要手动启用系统,在rtklib.h中定义如下宏启用北斗解算(其他导航系统同理)
#define ENACMP
此外,由于RTKLIB在单历元解算后会对结果进行卡方检验,但加入北斗后会导致卡方失败,于是需要注释 pntpos.c 里面 valsol() 的以下代码:
if (nv>nx&&vv>chisqr[nv-nx-1]) {
sprintf(msg,"chi-square error nv=%d vv=%.1f cs=%.1f",nv,vv,chisqr[nv-nx-1]);
return 0;
}
输出Rinex文件
目前V2.3.3中,Rinex的版本号不用小数表达,例如Rinex 3.02版本表达为302;而在V2.3.2中表达为3.02
// expression in V2.3.3
if (opt->rnxver<=299) { /* ver.2 */
fprintf(fp," %02d %02.0f %02.0f %02.0f %02.0f %010.7f %d%3d",
(int)ep[0]%100,ep[1],ep[2],ep[3],ep[4],ep[5],flag,ns);
for (i=0;i<ns;i++) {
if (i>0&&i%12==0) fprintf(fp,"\n%32s","");
fprintf(fp,"%-3s",sats[i]);
}
}
// expression in V2.3.2
if (opt->rnxver<=2.99) { /* ver.2 */
fprintf(fp," %02d %2.0f %2.0f %2.0f %2.0f%11.7f %d%3d",
(int)ep[0]%100,ep[1],ep[2],ep[3],ep[4],ep[5],flag,ns);
for (i=0;i<ns;i++) {
if (i>0&&i%12==0) fprintf(fp,"\n%32s","");
fprintf(fp,"%-3s",sats[i]);
}
}