关于RTKLIB V2.3.3的北斗支持

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]);
        }
    }
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值