我是靠谱客的博主 精明大雁,最近开发中收集的这篇文章主要介绍GPS从入门到放弃(十五)--- DCB差分码偏差,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

GPS从入门到放弃(十五)— DCB差分码偏差

概念

DCB(Differential Code Bias 差分码偏差)是全球卫星导航系统(GNSS)中,通过不同信号得到的观测值之间存在的系统性偏差。

DCB是由卫星和接收机硬件延迟的影响造成的。一般来说接收机端的DCB可以跟接收机钟差一起解算,被接收机钟差所吸收;而卫星端的DCB在精密定位中必须得到补偿。

DCB主要有两种,即相同频率不同码之间存在的偏差(如P1-C1、P2-C2等),以及不同频率之间存在的偏差(如P1-P2)。

数据来源

目前DCB数据来源主要有两个组织:IGS 和 CODE。

IGS(International GNSS Service)组织是国际最权威的GNSS精密应用服务组织之一。随着GPS的现代化以及BDS和Galileo等导航系统的建设,IGS于2011年开始建立多模GNSS实验跟踪网(MGEX, Multi-GNSS Experiment),用于多模GNSS导航信号监测及相关技术研究。基于MGEX多系统观测数据,德国宇航中心(DLR)自2013年起开始向IGS组织提交包括BDS、GPS、GLONASS及Galileo在内的多系统DCB产品。自2015年起,武汉的中国科学院测量与地球物理研究所(IGG of CAS)成为全球第二家向IGS提交多系统DCB产品的机构。这些数据可以在 ftp://cddis.nasa.gov/gnss/products/bias/ 下载。

瑞士伯尼尔大学的欧洲定轨中心(CODE:Centre for Orbit Determination in Europe)也提供DCB产品下载,其历史更加悠久。下面是其FTP下载地址:ftp://ftp.aiub.unibe.ch/CODE/ 。

应用实现

对于双频接收机,在电离层延时中我们得到经过电离层校正后的伪距为
ρ 1 , 2 = f 1 2 f 1 2 − f 2 2 ρ 1 − f 2 2 f 1 2 − f 2 2 ρ 2 rho_{1,2} = frac{f_1^2}{f_1^2-f_2^2}rho_1-frac{f_2^2}{f_1^2-f_2^2}rho_2 ρ1,2=f12f22f12ρ1f12f22f22ρ2

如果再加上DCB校正 D p 1 c 1 D_{p1c1} Dp1c1 D p 2 c 2 D_{p2c2} Dp2c2,令 γ = f 1 2 / f 2 2 gamma = {f_1^2}/{f_2^2} γ=f12/f22,则有
ρ 1 , 2 = f 1 2 f 1 2 − f 2 2 ( ρ 1 + D p 1 c 1 ) − f 2 2 f 1 2 − f 2 2 ( ρ 2 + D p 2 c 2 ) = γ ( ρ 1 + D p 1 c 1 ) − ( ρ 2 + D p 2 c 2 ) γ − 1 rho_{1,2} = frac{f_1^2}{f_1^2-f_2^2}(rho_1+D_{p1c1})-frac{f_2^2}{f_1^2-f_2^2}(rho_2+D_{p2c2}) = frac{gamma(rho_1+D_{p1c1})-(rho_2+D_{p2c2})}{gamma-1} ρ1,2=f12f22f12(ρ1+Dp1c1)f12f22f22(ρ2+Dp2c2)=γ1γ(ρ1+Dp1c1)(ρ2+Dp2c2)

RTKLIB 中的单点定位就是用这种方式进行计算的。可以参考如下代码:

gamma=SQR(lam[j])/SQR(lam[i]); /* f1^2/f2^2 */
P1=obs->P[i];
P2=obs->P[j];
P1_P2=nav->cbias[obs->sat-1][0];
P1_C1=nav->cbias[obs->sat-1][1];
P2_C2=nav->cbias[obs->sat-1][2];

/* if no P1-P2 DCB, use TGD instead */
if (P1_P2==0.0&&(sys&(SYS_GPS|SYS_GAL|SYS_QZS))) {
    P1_P2=(1.0-gamma)*gettgd(obs->sat,nav);
}
if (opt->ionoopt==IONOOPT_IFLC) { /* dual-frequency */

    if (P1==0.0||P2==0.0) return 0.0;
    if (obs->code[i]==CODE_L1C) P1+=P1_C1; /* C1->P1 */
    if (obs->code[j]==CODE_L2C) P2+=P2_C2; /* C2->P2 */

    /* iono-free combination */
    PC=(gamma*P1-P2)/(gamma-1.0);
}
else { /* single-frequency */

    if (P1==0.0) return 0.0;
    if (obs->code[i]==CODE_L1C) P1+=P1_C1; /* C1->P1 */
    PC=P1-P1_P2/(1.0-gamma);
}

对于单频接收机,没有不同频率间的 DCB,我们可以使用群波延迟 T g d T_{gd} Tgd 来替代。在GPS导航电文的第一子帧中有群波延迟参数 T g d T_{gd} Tgd,我们用类似与双频的方式来计算校正后的伪距,有:
ρ c = γ ( ρ 1 + D p 1 c 1 ) − ( ρ 1 + D p 1 c 1 − T g d ) γ − 1 = ( ρ 1 + D p 1 c 1 ) − T g d 1 − γ rho_c = frac{gamma(rho_1+D_{p1c1})-(rho_1 + D_{p1c1}- T_{gd})}{gamma-1}=(rho_1+D_{p1c1}) - frac{T_{gd}}{1-gamma} ρc=γ1γ(ρ1+Dp1c1)(ρ1+Dp1c1Tgd)=(ρ1+Dp1c1)1γTgd

对照上面的代码可以看出,RTKLIB 中就是这样进行单频 DCB 校正的。上面代码中函数gettgd返回 T g d T_{gd} Tgd 的值。

最后

以上就是精明大雁为你收集整理的GPS从入门到放弃(十五)--- DCB差分码偏差的全部内容,希望文章能够帮你解决GPS从入门到放弃(十五)--- DCB差分码偏差所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部