北斗多频多系统卫星端硬件延迟改正(DCB OSB)

卫星端硬件延迟改正通常有两种做法:1、DCB文件改正 2、OSB文件改正(推荐)

下面推导北斗系统DCB改正公式(采用 CAS GFZ产品)

发布的精密星历和精密钟差产品BDS2和BDS3均采用B1I、B3I无电离层组合模型进行参数估计。

在传统的无电离层组合观测数据处理中,该项误差包含在钟差参数中,不需要单独考虑该误差。但是如果用户端不采用同样的无电离层组合,则必须对每个频率上的观测值进行DCB改正。所以对于BDS3 B1C和B2a等新频点无电离层组合,需要将卫星端硬件时延偏差考虑进去

1、无电离层组合

信号频率BDS-2BDS-3
B1I1561.098C2I C2Q C2XC2I C2Q C2X
B2I1207.14C7I C7Q C7X
B3I1268.52C6I C6Q C6XC6I C6Q C6X
B1C1574.42C1D C1P C1X
B2a1176.45C5D C5P C5X
B2b1207.14C7D C7P C7Z
B2(B2a+B2b)1191.795C8D C8P C8X
无电离层组合CASDLR
B1I-B2IC2I-C7IC2I-C7I
B1I-B3IC2I-C6IC2I-C6I
B1I-B1CC1X-C2I
B1I-B2aC2I-C5X
B1I-B2bC2I-C7Z
B1I-B2abC2I-C8X
B2I-B3I
B3I-B1CC1X-C6I/C1P-C6I
B3I-B2a
B3I-B2b
B3I-B2ab
B1C-B2aC1X-C5X/C1P-C5P
B1C-B2bC1X-C7X
B1C-B2abC1X-C8X

CASDLR提供不同种类的DCB产品

B1IB2IB3IB1CB2aB2bB2(B2a+B2b)分别对应f1f2f3f4f5f6f7

北斗双频无电离层组合

以下为14种多频无电离层组合DCB改正:

B1I-B2I无电离层组合(CAS、DLR产品)

B1I-B1C无电离层组合(DLR产品)

B1I-B2a无电离层组合(DLR产品)

B1I-B2b无电离层组合(DLR产品)

B1I-B2ab无电离层组合(DLR产品)

B2I-B3I无电离层组合(CAS产品)

B1C-B3I无电离层组合 (CAS产品)

B3I-B2a无电离层组合(CAS产品)

B3I-B2b无电离层组合(CAS产品)

B3I-B2ab无电离层组合(CAS产品)

B1C-B2a无电离层组合(CAS产品)

B1C-B2b无电离层组合(CAS产品)

B1C-B2ab无电离层组合(CAS产品)

2、非差非组合

参考文献:李昕博士《多频率多星座GNSS快速精密定位关键技术研究 》

我选用第二种方法,通过差分码偏差产品进行改正。

OSB改正(推荐)

非常方便且同时配合UPD产品,以下是OSB文件读取程序

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include<map>

struct OSBData {
    string time1;
    string time2;
    double value;
    double STD;
};

 map<string,map<int,map<string, OSBData>>>readOSBData(const string& filename) {
       map<string, map<int, map<string, OSBData>>>obscontainers;
       map<int, map<string, OSBData>> obscontainer;
       map<string, OSBData>obscontainer_;

       ifstream file(filename);
       if (!file.is_open()) {
           std::cerr << "Failed to open file: " << filename << std::endl;
           return {};
       }
       string line;
       std::string system;
       int prn;
       std::string code;
       std::string time1;
       std::string time2;
       double value;
       double STD;

       while (std::getline(file, line)) {
           if (line.find("OSB ") != std::string::npos && line.find(" ns") != std::string::npos)
           {

               std::istringstream iss(line);
               std::string item;


               while (iss >> item) {
                   iss >> item;
                   iss >> item;
                   system = item.substr(0, 1);
                   prn = stoi(item.substr(1));  
                   iss >> item;
                   code = item;
                   iss >> item;
                   time1 = item;
                   iss >> item;
                   time2 = item;
                   iss >> item;
                   iss >> item;
                   value = stod(item);
                   iss >> item;
                   STD = stod(item);
                   obscontainer_[code] = { time1, time2, value, STD };
                   obscontainer[prn] = obscontainer_;
                   obscontainers[system] = obscontainer;
               }

           }
       }
       file.close();

       return obscontainers;
   }


此程序很简单,还需要根据自己的程序修改读入的time1 time2,容器为:

“GNSS系统”[卫星号][code] .value or std;

由于本人水平有限,如果公式推导有误,请大家批评指正,目前重构PPP代码中,欢迎交流。

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值