Changeset 8961 in ntrip for trunk/BNC


Ignore:
Timestamp:
Jun 29, 2020, 10:09:16 AM (4 years ago)
Author:
stuerze
Message:

PPP update: pseudo obs tropo added

Location:
trunk/BNC/src
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/PPP/pppClient.cpp

    r8956 r8961  
    220220        satObs->setPseudoObsIono(t_frequency::G1, stecRef);
    221221      }
    222       satObs->printObsMinusComputed();
    223222      it++;
    224223    }
    225224  }
    226 
     225  if (_opt->_pseudoObsTropo) {
     226    vector<t_pppSatObs*>::iterator it = obsVector.begin();
     227    while (it != obsVector.end()) {
     228      t_pppSatObs* satObs = *it;
     229      if (satObs->isReference()) {
     230        satObs->setPseudoObsTropo();
     231      }
     232      it++;
     233    }
     234  }
     235/*
     236  vector<t_pppSatObs*>::iterator it = obsVector.begin();
     237      while (it != obsVector.end()) {
     238        t_pppSatObs* satObs = *it;
     239        satObs->printObsMinusComputed();
     240        it++;
     241      }
     242*/
    227243  return pseudoObsIono;
    228244}
  • trunk/BNC/src/PPP/pppFilter.cpp

    r8956 r8961  
    117117  // Init Datum Trafo
    118118  // ----------------------------------------
    119   if ((OPT->_obsModelType == OPT->DCMcodeBias ||
    120        OPT->_obsModelType == OPT->DCMphaseBias) &&
    121       (_numEpoProcessing == 1)) {
     119  if ((OPT->_obsModelType == OPT->DCMcodeBias   ||
     120       OPT->_obsModelType == OPT->DCMphaseBias) && (_numEpoProcessing == 1)) {
    122121    _numAllUsedLCs = 0;
    123122    for (unsigned iSys = 0; iSys < OPT->systems().size(); iSys++) {
    124123      char system = OPT->systems()[iSys];
    125124      _numAllUsedLCs += OPT->LCs(system).size();
    126       if (OPT->_pseudoObsIono && !epoch->pseudoObsIono()) {
     125      if (OPT->_pseudoObsIono && epoch->pseudoObsIono() == false) {
    127126        _numAllUsedLCs -= 1;  // GIM not used
    128127      }
    129128    }
    130     int maxObs = allObs.size() * _numAllUsedLCs;
     129    int modify = 0;
     130    if (OPT->_pseudoObsTropo) {
     131      modify  = -1;
     132    }
     133    // max Obs
     134    int maxObs = allObs.size() * (_numAllUsedLCs + modify);
     135    if (OPT->_pseudoObsIono && epoch->pseudoObsIono() == true) { // stecDiff w.r.t refSat
     136      maxObs -= 1;
     137    }
     138    if (OPT->_pseudoObsTropo) {
     139      maxObs += 1;  // once per station
     140    }
    131141    _datumTrafo->initAA(maxObs, _parlist->nPar());
    132142  }
     
    144154        _refPrn = (_obsPool->getRefSatMapElement(system))->prn();
    145155        if (_obsPool->hasHistoricalRefSat(_refPrn)) {
     156          LOG << epoTimeStr << " Warning: prevent to process erroneous refSat again!";
    146157          return failure;
    147158        }
     
    219230  }
    220231
    221   unsigned usedLCs = LCs.size(); //qDebug() << "usedLCs: " << usedLCs;
     232  unsigned usedLCs = LCs.size();
    222233  if (OPT->_pseudoObsIono && !pseudoObsIonoAvailable) {
    223234    usedLCs -= 1;  // GIM not used
    224235  }
     236
    225237  ColumnVector               xSav       = _xFlt;
    226238  SymmetricMatrix            QSav       = _QFlt;
    227239  string                     epoTimeStr = string(_epoTime);
    228240  const vector<t_pppParam*>& params     = _parlist->params();
    229   unsigned                   maxObs     = obsVector.size() * usedLCs;
    230   //unsigned                   maxObs     = 2 * usedLCs;
    231 
     241  int modify = 0;
     242  if (OPT->_pseudoObsTropo) {
     243    modify  = -1;
     244  }
     245  // max Obs
     246  unsigned maxObs = obsVector.size() * (usedLCs + modify);
    232247  if (OPT->_pseudoObsIono && pseudoObsIonoAvailable) { // stecDiff w.r.t refSat
    233248    maxObs -= 1;
     249  }
     250  if (OPT->_pseudoObsTropo) {
     251    maxObs +=1;   // tropo pseudo obs once per station
    234252  }
    235253
     
    257275        for (unsigned jj = 0; jj < usedLCs; jj++) {
    258276          const t_lc::type tLC = LCs[jj];
    259           if (tLC == t_lc::GIM &&  obs->isReference()) {continue;}
     277          if (tLC == t_lc::GIM && obs->isReference()) {continue;}
     278          if (tLC == t_lc::Tz0 && ii+1 != obsVector.size()) {continue;}
    260279          ++iObs;
    261280          usedObs.push_back(obs);
     
    417436          _slips[obs->prn()]._obsSlipCounter = obs->slipCounter();
    418437        }
    419 
    420438        if (_slips[obs->prn()]._biasJumpCounter != -1 &&
    421439            _slips[obs->prn()]._biasJumpCounter != obs->biasJumpCounter()) {
     
    468486t_irc t_pppFilter::resetAmb(t_prn prn, const vector<t_pppSatObs*>& obsVector,
    469487                            SymmetricMatrix* QSav, ColumnVector* xSav) {
    470 
     488                           
    471489  t_irc irc = failure;
    472490  vector<t_pppParam*>& params = _parlist->params();
     
    587605////////////////////////////////////////////////////////////////////////////
    588606void t_pppFilter::datumTransformation(const ColumnVector& xFltOld, const SymmetricMatrix& QFltOld) {
    589 
    590607  Matrix D21 = _datumTrafo->computeTrafoMatrix();
    591608  _QFlt << D21 * QFltOld * D21.t();
  • trunk/BNC/src/PPP/pppParlist.cpp

    r8956 r8961  
    141141  switch (_type) {
    142142  case crdX:
    143     if (tLC == t_lc::GIM) {return 0.0;}
     143    if (tLC == t_lc::GIM || tLC == t_lc::Tz0) {return 0.0;}
    144144    return (sta->xyzApr()[0] - obs->xc()[0]) / rhoV.NormFrobenius();
    145145  case crdY:
    146     if (tLC == t_lc::GIM) {return 0.0;}
     146    if (tLC == t_lc::GIM || tLC == t_lc::Tz0) {return 0.0;}
    147147    return (sta->xyzApr()[1] - obs->xc()[1]) / rhoV.NormFrobenius();
    148148  case crdZ:
    149     if (tLC == t_lc::GIM) {return 0.0;}
     149    if (tLC == t_lc::GIM || tLC == t_lc::Tz0) {return 0.0;}
    150150    return (sta->xyzApr()[2] - obs->xc()[2]) / rhoV.NormFrobenius();
    151151  case clkR:
    152     if (tLC == t_lc::GIM) {return 0.0;}
     152    if (tLC == t_lc::GIM || tLC == t_lc::Tz0) {return 0.0;}
    153153    return 1.0;
    154154  case offGG:
    155     if (tLC == t_lc::GIM) {return 0.0;}
     155    if (tLC == t_lc::GIM || tLC == t_lc::Tz0) {return 0.0;}
    156156    return (obs->prn().system() == 'R') ? 1.0 : 0.0;
    157157  case amb:
    158     if      (tLC == t_lc::GIM) {return 0.0;}
     158    if      (tLC == t_lc::GIM || tLC == t_lc::Tz0) {return 0.0;}
    159159    else if ((OPT->_obsModelType == OPT->IF)     ||
    160160             (OPT->_obsModelType == OPT->PPPRTK) ||
     
    181181    break;
    182182  case trp:
    183     if (tLC == t_lc::GIM) {return 0.0;}
    184     return  1.0 / sin(obs->eleSat());
     183    if      (tLC == t_lc::GIM) {
     184      return 0.0;
     185    }
     186    else if (tLC == t_lc::Tz0) {
     187      return 1.0;
     188    }
     189    else {
     190      return 1.0 / sin(obs->eleSat());
     191    }
    185192  case ion:
    186 
    187193    if (obs->prn() == _prn) {
    188194      if      (tLC == t_lc::c1) {
     
    203209    }
    204210    if (tLC == t_lc::GIM && _prn == refPrn) {
    205       return  1.0;
     211      return 1.0;
    206212    }
    207213    break;
    208214  case cBias1:
    209215    if  (tLC == t_lc::c1) {
    210       return  1.0;
     216      return 1.0;
    211217    }
    212218    else {
     
    216222  case cBias2:
    217223     if (tLC == t_lc::c2) {
    218       return  1.0;
     224      return 1.0;
    219225    }
    220226    else {
     
    224230  case pBias1:
    225231    if  (tLC == t_lc::l1) {
    226       return  1.0;
     232      return 1.0;
    227233    }
    228234    else {
     
    232238  case pBias2:
    233239    if  (tLC == t_lc::l2) {
    234       return  1.0;
     240      return 1.0;
    235241    }
    236242    else {
  • trunk/BNC/src/PPP/pppSatObs.cpp

    r8956 r8961  
    9292  for (unsigned ii = 0; ii < OPT->LCs(_prn.system()).size(); ii++) {
    9393    t_lc::type tLC = OPT->LCs(_prn.system())[ii];
    94     if (tLC == t_lc::GIM) {continue;}
     94    if (tLC == t_lc::GIM || tLC == t_lc::Tz0) {continue;}
    9595    if (!isValid(tLC)) {
    9696      _valid = false;
     
    190190    return;
    191191  case t_lc::GIM:
     192  case t_lc::Tz0:
    192193  case t_lc::dummy:
    193194  case t_lc::maxLc:
     
    218219    }
    219220    else {
    220       return _stecRefSat - _stecSat;
    221     }
     221      return _stecRefSat;
     222    }
     223  }
     224
     225  if (tLC == t_lc::Tz0) {
     226    return _model._tropo0;
    222227  }
    223228
     
    292297  if (tLC == t_lc::GIM) {
    293298    retVal = OPT->_sigmaGIMdiff * OPT->_sigmaGIMdiff;
     299  }
     300
     301  if (tLC == t_lc::Tz0) {
     302    retVal = OPT->_sigmaTz0 * OPT->_sigmaTz0;
    294303  }
    295304
     
    407416  // Tropospheric Delay
    408417  // ------------------
    409   _model._tropo = t_tropo::delay_saast(rRec, _model._eleSat);
     418  _model._tropo  = t_tropo::delay_saast(rRec, _model._eleSat);
     419  _model._tropo0 = t_tropo::delay_saast(rRec, M_PI/2.0);
    410420
    411421  // Code Biases
     
    570580  }
    571581  else if (tLC == t_lc::GIM) {
    572     cmpValue = 0.0;
     582    cmpValue =  _stecSat;
     583  }
     584  else if (tLC == t_lc::Tz0) {
     585    cmpValue = _model._tropo0;
    573586  }
    574587  else {
     
    633646  _stecRefSat = stecRefSat;
    634647}
     648
     649
     650//
     651////////////////////////////////////////////////////////////////////////////
     652void  t_pppSatObs::setPseudoObsTropo() {qDebug() << "setPseudoObsTropo";
     653  _tropo0 = _model._tropo0;
     654}
  • trunk/BNC/src/PPP/pppSatObs.h

    r8905 r8961  
    4646  double              getRes(t_lc::type tLC) const;
    4747  void                setPseudoObsIono(t_frequency::type freq, double stecRefSat);
     48  void                setPseudoObsTropo();
    4849  double              getIonoCodeDelay(t_frequency::type freq) {return _model._ionoCodeDelay[freq];}
    4950
     
    9495      _antEcc    = 0.0;
    9596      _tropo     = 0.0;
     97      _tropo0    = 0.0;
    9698      _tideEarth = 0.0;
    9799      _tideOcean = 0.0;
     
    114116    double _antEcc;
    115117    double _tropo;
     118    double _tropo0;
    116119    double _tideEarth;
    117120    double _tideOcean;
     
    142145  double                       _stecRefSat;
    143146  double                       _stecSat;
     147  double                       _tropo0;
    144148};
    145149
  • trunk/BNC/src/pppInclude.h

    r8905 r8961  
    4242class t_lc {
    4343 public:
    44   enum type {dummy = 0, l1, l2, c1, c2, lIF, cIF, MW, CL, GIM, maxLc};
     44  enum type {dummy = 0, l1, l2, c1, c2, lIF, cIF, MW, CL, GIM, Tz0, maxLc};
    4545
    4646  static bool includesPhase(type tt) {
     
    5656    case cIF:
    5757      return false;
    58     case dummy: 
    59     case maxLc: 
     58    case dummy:
     59    case maxLc:
    6060    case GIM:
     61    case Tz0:
    6162      return false;
    6263    }
     
    7677    case lIF:
    7778      return false;
    78     case dummy: 
    79     case maxLc: 
     79    case dummy:
     80    case maxLc:
    8081    case GIM:
     82    case Tz0:
    8183      return false;
    8284    }
     
    100102    case lIF: case cIF: case MW: case CL:
    101103      return t_frequency::dummy;
    102     case dummy: 
    103     case maxLc: 
     104    case dummy:
     105    case maxLc:
    104106    case GIM:
     107    case Tz0:
    105108      return t_frequency::dummy;
    106109    }
     
    119122    case cIF: return "cIF";
    120123    case GIM: return "GIM";
    121     case dummy:
    122     case maxLc:
     124    case Tz0: return "Tz0";
     125    case dummy:
     126    case maxLc:
    123127      return "";
    124128    }
  • trunk/BNC/src/pppMain.cpp

    r8956 r8961  
    185185    opt->_obsModelType   = t_pppOptions::IF;
    186186    opt->_pseudoObsIono  = false;
     187    opt->_pseudoObsTropo = false;
    187188    opt->_refSatRequired = false;
    188189#ifdef USE_PPP
    189190    // Pseudo Observations
    190191    if      (settings.value("PPP/pseudoObs").toString() == "Ionosphere") {
    191       opt->_pseudoObsIono = true;
     192      opt->_pseudoObsIono  = true;
     193      opt->_pseudoObsTropo = false;
     194    }
     195    else if (settings.value("PPP/pseudoObs").toString() == "Iono+Tropo") {
     196      opt->_pseudoObsIono  = true;
     197      opt->_pseudoObsTropo = true;
    192198    }
    193199    else if (settings.value("PPP/pseudoObs").toString() == "no") {
    194       opt->_pseudoObsIono = false;
     200      opt->_pseudoObsIono  = false;
     201      opt->_pseudoObsTropo = false;
    195202    }
    196203    // Observation Model
    197204    if      (settings.value("PPP/modelObs").toString() == "Ionosphere-free PPP") {
    198205      opt->_obsModelType = t_pppOptions::IF;
    199       opt->_pseudoObsIono = false;
     206      opt->_pseudoObsIono  = false;
     207      opt->_pseudoObsTropo = false;
    200208    }
    201209    else if (settings.value("PPP/modelObs").toString() == "PPP-RTK") {
    202210      opt->_obsModelType = t_pppOptions::PPPRTK;
    203       opt->_pseudoObsIono = false;
     211      opt->_pseudoObsIono  = false;
     212      opt->_pseudoObsTropo = false;
    204213    }
    205214    else if (settings.value("PPP/modelObs").toString() == "Uncombined PPP") {
     
    229238          opt->_LCsGPS.push_back(t_lc::GIM);
    230239        }
     240        if (opt->_pseudoObsTropo) {
     241          opt->_LCsGPS.push_back(t_lc::Tz0);
     242        }
    231243      }
    232244    }
     
    240252        if (opt->_pseudoObsIono) {
    241253          opt->_LCsGPS.push_back(t_lc::GIM);
     254        }
     255        if (opt->_pseudoObsTropo) {
     256          opt->_LCsGPS.push_back(t_lc::Tz0);
    242257        }
    243258      }
     
    256271          opt->_LCsGPS.push_back(t_lc::GIM);
    257272        }
     273        if (opt->_pseudoObsTropo) {
     274          opt->_LCsGPS.push_back(t_lc::Tz0);
     275        }
    258276      }
    259277    }
     
    268286        if (opt->_pseudoObsIono) {
    269287          opt->_LCsGLONASS.push_back(t_lc::GIM);
     288        }
     289        if (opt->_pseudoObsTropo) {
     290          opt->_LCsGPS.push_back(t_lc::Tz0);
    270291        }
    271292      }
     
    281302          opt->_LCsGLONASS.push_back(t_lc::GIM);
    282303        }
     304        if (opt->_pseudoObsTropo) {
     305          opt->_LCsGPS.push_back(t_lc::Tz0);
     306        }
    283307      }
    284308    }
     
    296320          opt->_LCsGLONASS.push_back(t_lc::GIM);
    297321        }
     322        if (opt->_pseudoObsTropo) {
     323          opt->_LCsGPS.push_back(t_lc::Tz0);
     324        }
    298325      }
    299326    }
     
    309336          opt->_LCsGalileo.push_back(t_lc::GIM);
    310337        }
     338        if (opt->_pseudoObsTropo) {
     339          opt->_LCsGPS.push_back(t_lc::Tz0);
     340        }
    311341      }
    312342    }
     
    320350        if (opt->_pseudoObsIono) {
    321351          opt->_LCsGalileo.push_back(t_lc::GIM);
     352        }
     353        if (opt->_pseudoObsTropo) {
     354          opt->_LCsGPS.push_back(t_lc::Tz0);
    322355        }
    323356      }
     
    336369          opt->_LCsGalileo.push_back(t_lc::GIM);
    337370        }
     371        if (opt->_pseudoObsTropo) {
     372          opt->_LCsGPS.push_back(t_lc::Tz0);
     373        }
    338374      }
    339375    }
     
    349385          opt->_LCsBDS.push_back(t_lc::GIM);
    350386        }
     387        if (opt->_pseudoObsTropo) {
     388          opt->_LCsGPS.push_back(t_lc::Tz0);
     389        }
    351390      }
    352391    }
     
    360399        if (opt->_pseudoObsIono) {
    361400          opt->_LCsBDS.push_back(t_lc::GIM);
     401        }
     402        if (opt->_pseudoObsTropo) {
     403          opt->_LCsGPS.push_back(t_lc::Tz0);
    362404        }
    363405      }
     
    375417        if (opt->_pseudoObsIono) {
    376418          opt->_LCsBDS.push_back(t_lc::GIM);
     419        }
     420        if (opt->_pseudoObsTropo) {
     421          opt->_LCsGPS.push_back(t_lc::Tz0);
    377422        }
    378423      }
     
    417462    opt->_aprSigPhaseBias = 1000.0;
    418463    // TODO: Find realistic values!!!!!!
    419     opt->_noiseIon        = 10.0;
     464    opt->_noiseIon        = 1.00;
    420465    opt->_noiseCodeBias   = 1.00;
    421466    opt->_noisePhaseBias  = 5.00;
    422     opt->_sigmaGIMdiff    = 2.00; //pseudo observation GIM: STEC(ref_sat) - STEC(sat)
     467    // pseudo observations
     468    opt->_sigmaGIMdiff    = 2.00; // Todo: add to bncWindow
     469    opt->_sigmaTz0        = 0.10;
    423470
    424471    _options << opt;
  • trunk/BNC/src/pppOptions.h

    r8905 r8961  
    5353  double                  _maxResL1;
    5454  double                  _sigmaGIMdiff;
    55   double                  _maxResGIMdiff;
     55  double                  _sigmaTz0;
    5656  bool                    _eleWgtCode;
    5757  bool                    _eleWgtPhase;
     
    7777  std::vector<t_lc::type> _LCsBDS;
    7878  bool                    _pseudoObsIono;
     79  bool                    _pseudoObsTropo;
    7980  bool                    _refSatRequired;
    8081};
  • trunk/BNC/src/pppWidgets.cpp

    r8905 r8961  
    155155#else
    156156  _modelObs->addItems(QString("Ionosphere-free PPP,Uncombined PPP,PPP-RTK,DCM with Code Biases,DCM with Phase Biases").split(","));
    157   _pseudoObs->addItems(QString("no,Ionosphere").split(","));
     157  _pseudoObs->addItems(QString("no,Ionosphere,Iono+Tropo").split(","));
    158158#endif
    159159
Note: See TracChangeset for help on using the changeset viewer.