我是靠谱客的博主 无限夕阳,最近开发中收集的这篇文章主要介绍rtklib学习——DCB改正,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  GNSS差分码偏差(DCB,Differential Code Bias),有时也称IFB(Inter-Frequency Bias),是由不同类型的GNSS信号在卫星和接收机不同通道产生的时间延迟(硬件延迟/码偏差)差异,按照频率相同或者不同又可以细分为频内偏差(Intra-Frequency Bias)和频间偏差(Inter-Frequency Bias)。

我们以L1频点为例,把L1的卫星钟差为基准,L2的卫星钟差为:
δ 2 s a t = δ 1 s a t + ( b 2 s a t − b 1 s a t ) = δ f 1 s a t + D C B 12 s a t delta _2^{sat} = delta _1^{sat} + (b_2^{sat} - b_1^{sat}) = delta _{f1}^{sat} + DCB_{12}^{sat} δ2sat=δ1sat+(b2satb1sat)=δf1sat+DCB12sat
其中 δ delta δ 为卫星钟差,b为该卫星的硬件延迟,该表示为L1L2频点的DCB。

我们对无电离层组合的钟差考虑
δ I F s a t = f 1 2 δ 1 s a t − f 2 2 δ 2 s a t f 1 2 − f 2 2 = f 1 2 δ 1 s a t − f 2 2 ( δ 1 s a t − D C B 12 s a t ) f 1 2 − f 2 2 = δ 1 s a t − f 2 2 D C B 12 s a t f 1 2 − f 2 2 delta _{IF}^{sat} = {{f_1^2delta _1^{sat} - f_2^2delta _2^{sat}} over {f_1^2 - f_2^2}} = {{f_1^2delta _1^{sat} - f_2^2(delta _1^{sat} - DCB_{12}^{sat})} over {f_1^2 - f_2^2}} = delta _1^{sat} - {{f_2^2DCB_{12}^{sat}} over {f_1^2 - f_2^2}} δIFsat=f12f22f12δ1satf22δ2sat=f12f22f12δ1satf22(δ1satDCB12sat)=δ1satf12f22f22DCB12sat
对于个别系统来说,习惯性把 f 2 2 D C B 12 s a t f 1 2 − f 2 2 {{f_2^2DCB_{12}^{sat}} over {f_1^2 - f_2^2}} f12f22f22DCB12sat看作TGD。
GPS广播星历中的钟差都是基于无电离层组合的钟差,故钟差关系为
δ 1 s a t = δ I F s a t − T G D = δ I F s a t + f 2 2 D C B 12 s a t f 1 2 − f 2 2 delta _1^{sat} = delta _{IF}^{sat} - TGD = delta _{IF}^{sat} + {{f_2^2DCB_{12}^{sat}} over {f_1^2 - f_2^2}} δ1sat=δIFsatTGD=δIFsat+f12f22f22DCB12sat δ 2 s a t = δ I F s a t − ( f 1 f 2 ) 2 T G D = δ I F s a t + f 1 2 f 1 2 − f 2 2 D C B 12 s a t delta _2^{sat} = delta _{IF}^{sat} - {left( {{{{f_1}} over {{f_2}}}} right)^2}TGD = delta _{IF}^{sat} + {{f_1^2} over {f_1^2 - f_2^2}}DCB_{12}^{sat} δ2sat=δIFsat(f2f1)2TGD=δIFsat+f12f22f12DCB12sat
**需要注意的:**在DCB改正的时候都是基于什么频点,改正过程中频点的基准要确定。

上述讨论的时频率之间的DCB,在系统中还与不同的码(通道)有关,例如C1和P1码之间 D C B P 1 C 1 DCB_{P1C1} DCBP1C1

几种常用的频点转换公式
在这里插入图片描述
rtklib提供的DCB读取并未涉及到对标准格式(2016年后)的读取,通过格式说明编写了以下的DCB读取,格式中实际上提供了DSB、OSB、ISB三种偏差改正信息,只读取了DSB。

    while (fgets(buff,sizeof(buff),fp)) {
        
        if (strstr(buff, "-BIAS/SOLUTION ")) break;
        setstr(Dsbias, buff + 24, 10);
        if      (strstr(Dsbias,"C1C  C1W") || strstr(Dsbias, "C1X  C5X")) type=1;
        else if (strstr(Dsbias,"C2C  C2W") || strstr(Dsbias, "C1P  C5P")) type=2;
        else if (strstr(Dsbias,"C2W  C2S") || strstr(Dsbias, "C1D  C5D")) type=3;
        else if (strstr(Dsbias, "C2W  C2L") || strstr(Dsbias, "C1X  C6I")) type = 4;
        else if (strstr(Dsbias, "C2W  C2X") || strstr(Dsbias, "C1P  C6I")) type = 5;
        else if (strstr(Dsbias, "C1C  C2W") || strstr(Dsbias, "C1D  C6I")) type = 6;
        else if (strstr(Dsbias, "C1C  C5Q") || strstr(Dsbias, "C2I  C6I")) type = 7;
        else if (strstr(Dsbias, "C1C  C5X") || strstr(Dsbias, "C1X  C7Z")) type = 8;
        else if (strstr(Dsbias, "C1W  C2W") || strstr(Dsbias, "C1X  C8X")) type = 9;
        if (!type) continue;
        setstr(str1, buff + 11, 3);  setstr(str2, buff + 15, 4);
        if ((cbias=str2num(buff,82,9))==0.0) continue;
        
        if (sta&&(!strcmp(str1,"G")||!strcmp(str1,"R") || !strcmp(str1, "E") || !strcmp(str1, "C") || !strcmp(str1, "J"))) { /* receiver DCB */
            for (i=0;i<MAXRCV;i++) {
                if (!strcmp(sta[i].name,str2)) break;
            }
            if (i<MAXRCV) {
                p=strchr(syscodesbias, str1[0]);
                j=(int)(p-syscodesbias);
                nav->rbias[i][j][type-1]=cbias*1E-9*CLIGHT; /* ns -> m */
            }
        }
        else if ((sat=satid2no(str1))) { /* satellite dcb */
            nav->cbias[sat-1][type-1]=cbias*1E-9*CLIGHT; /* ns -> m */
        }
    }

DCB格式代码下载:https://download.csdn.net/download/weixin_44994338/19022518

最后

以上就是无限夕阳为你收集整理的rtklib学习——DCB改正的全部内容,希望文章能够帮你解决rtklib学习——DCB改正所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部