天天看點

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​=f12​−f22​f12​​ρ1​−f12​−f22​f22​​ρ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​=f12​−f22​f12​​(ρ1​+Dp1c1​)−f12​−f22​f22​​(ρ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​+Dp1c1​−Tgd​)​=(ρ1​+Dp1c1​)−1−γTgd​​

對照上面的代碼可以看出,RTKLIB 中就是這樣進行單頻 DCB 校正的。上面代碼中函數gettgd傳回 T g d T_{gd} Tgd​ 的值。