Changeset 9556 in ntrip for trunk


Ignore:
Timestamp:
Nov 30, 2021, 1:09:49 PM (9 months ago)
Author:
stuerze
Message:

update regarding PPP

Location:
trunk/BNC/src
Files:
4 edited

Legend:

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

    r9548 r9556  
    260260        }
    261261      }
     262    }
     263
     264    // Check number of observations
     265    // ----------------------------
     266    if (iObs == -1) {LOG << "iObs == -1\n";
     267      return failure;
     268    }
     269    if (OPT->_obsModelType == OPT->DCMcodeBias  ||
     270        OPT->_obsModelType == OPT->DCMphaseBias ||
     271        OPT->_pseudoObsIono) {
     272        double numSat = floor(iObs/2.0);
     273        if (numSat < 2.0) {
     274          LOG << sys <<  ": numsat " << numSat << " but at least 2 satellites would be required" << endl;
     275          return failure;
     276        }
    262277    }
    263278
     
    294309    }
    295310
    296     // Check number of observations, truncate matrices
    297     // -----------------------------------------------
    298     if (iObs == -1) {LOG << "iObs == -1\n";
    299       return failure;
    300     }
     311    // Truncate matrices
     312    // -----------------
    301313    AA = AA.Rows(1, iObs+1);
    302314    ll = ll.Rows(1, iObs+1);
     
    330342      t_pppSatObs* obs = usedObs[maxOutlierIndex];
    331343      t_pppParam* par = 0;
    332       LOG << epoTimeStr << " Outlier ("
    333           << ((preProcessing) ? "pre-processing) " : "fin-processing) ") << t_lc::toString(maxOutlierLC) << ' '
    334           << obs->prn().toString()                        << ' '
    335           << setw(8) << setprecision(4) << maxOutlier << endl;
    336344      for (unsigned iPar = 0; iPar < nPar; iPar++) {
    337345        t_pppParam* hlp = params[iPar];
     
    348356              t_lc::toString(maxOutlierLC) == "l2") ) {
    349357           _obsPool->setRefSatChangeRequired(sys, true);
     358           LOG << epoTimeStr << " Outlier ("
     359               << ((preProcessing) ? "pre-processing) " : "fin-processing) ") << t_lc::toString(maxOutlierLC) << ' '
     360               << obs->prn().toString()  << ' ' << setw(8) << setprecision(4) << maxOutlier << endl;
    350361           break;
    351362         }
     
    353364          if (par) {
    354365            par->setAmbResetCandidate();
    355             obs->setOutlier();
    356           }
    357           else {
    358             obs->setOutlier();
    359366          }
    360367        }
    361368      }
    362369      else {// fin-processing
     370        LOG << epoTimeStr << " Outlier " << t_lc::toString(maxOutlierLC) << ' '
     371            << obs->prn().toString()  << ' ' << setw(8) << setprecision(4) << maxOutlier << endl;
    363372        if (par) {
    364373          if (par->ambResetCandidate()) {
  • trunk/BNC/src/PPP/pppSatObs.cpp

    r9554 r9556  
    348348  retVal = sqrt(retVal);
    349349
    350   return retVal;
     350  // Elevation-Dependent Weighting
     351  // -----------------------------
     352  double cEle = 1.0;
     353  if ( (OPT->_eleWgtCode  && t_lc::includesCode(tLC)) ||
     354       (OPT->_eleWgtPhase && t_lc::includesPhase(tLC)) ) {
     355    double eleD = eleSat()*180.0/M_PI;
     356    double hlp  = fabs(90.0 - eleD);
     357    cEle = (1.0 + hlp*hlp*hlp*0.000004);
     358  }
     359
     360  return cEle * retVal;
    351361}
    352362
  • trunk/BNC/src/pppMain.cpp

    r9554 r9556  
    143143    QStringList hlp = iSta.next().split(",");
    144144
    145     if (hlp.size() < 10) {
     145    if (hlp.size() < 11) {
    146146      throw t_except("pppMain: wrong option staTable");
    147147    }
     
    181181    opt->_sigmaC1      = settings.value("PPP/sigmaC1").toDouble(); if (opt->_sigmaC1 <= 0.0)  opt->_sigmaC1  = 1.00;
    182182    opt->_sigmaL1      = settings.value("PPP/sigmaL1").toDouble(); if (opt->_sigmaL1 <= 0.0)  opt->_sigmaL1  = 0.01;
    183     opt->_sigmaGIM     = settings.value("PPP/sigmaGIM").toDouble();if (opt->_sigmaGIM <= 0.0) opt->_sigmaGIM = 4.00;
     183    opt->_sigmaGIM     = settings.value("PPP/sigmaGIM").toDouble();if (opt->_sigmaGIM <= 0.0) opt->_sigmaGIM = 5.00;
    184184    opt->_corrWaitTime = settings.value("PPP/corrWaitTime").toDouble();
    185185    if (!_realTime || opt->_corrMount.empty()) {
     
    215215      opt->_obsModelType = t_pppOptions::DCMcodeBias;
    216216      opt->_refSatRequired = true;
    217       opt->_noiseCodeBias  = 1e4;
     217      opt->_noiseCodeBias  = 1000.0;
    218218    }
    219219    else if (settings.value("PPP/modelObs").toString() == "DCM with Phase Biases") {
    220220      opt->_obsModelType = t_pppOptions::DCMphaseBias;
    221221      opt->_refSatRequired = true;
    222       opt->_noisePhaseBias = 1e4;
     222      opt->_noisePhaseBias = 1000.0;
    223223    }
    224224#endif
     
    416416    // Some default values
    417417    // -------------------
    418     opt->_aprSigAmb       = 1e4;
    419     opt->_aprSigIon       = 1e4;
    420     opt->_aprSigClk       = 3e5;
    421     opt->_aprSigOGR       = 1e4;
    422     opt->_aprSigOGE       = 1e4;
    423     opt->_aprSigOGC       = 1e4;
    424     opt->_aprSigCodeBias  = 1e4;
    425     opt->_aprSigPhaseBias = 1e4;
     418    opt->_aprSigAmb       = 1000.0;
     419    opt->_aprSigIon       = 1000.0;
     420    opt->_aprSigClk       = 1000.0;
     421    opt->_aprSigOGR       = 1000.0;
     422    opt->_aprSigOGE       = 1000.0;
     423    opt->_aprSigOGC       = 1000.0;
     424    opt->_aprSigCodeBias  = 1000.0;
     425    opt->_aprSigPhaseBias = 1000.0;
    426426
    427427    _options << opt;
  • trunk/BNC/src/pppWidgets.cpp

    r9552 r9556  
    206206  // WhatsThis, PPP (2)
    207207  // ------------------
    208   _staTable->setWhatsThis(tr("<p>Specify values for Sigma and white Noise of the Stations North, East and Height coordinate components in meters. Specify also a Sigma in meters for a priori model based Tropospheric delays and a Sigma in meters per second for the delay's Noise.</p><p>Specifying one record per Station is mandatory. BNC will only process data for stations which are listed here. To define a station, specify the 'Mountpoint' when in 'Real-Time Streams' mode or the 4-character station ID when in 'RINEX Files' mode.</p><p>'Sigma' is meant to describe the uncertainty of a single coordinate or tropospheric delay estimated for one epoch. 'Noise' is meant to describe the variation of estimates from epoch to epoch.</p><p><ul><li>A Sigma of 100.0 meters may be an appropriate choice e.g. for the initial N/E/H coordinates. However, this value may be significantly smaller (i.e. 0.01) for stations with well-known a priori coordinates.</li><li>A Noise of 100.0 meters for the estimated N/E/H coordinates may also be appropriate considering the potential movement of a rover position.</li><li>A value of 0.1 meters may be an appropriate Sigma for the a priori model based Tropospheric delay estimation.</li><li>Specify a Noise to describe the expected variation of the tropospheric effect over time. Supposing 1Hz observation data, specifying a value of 3e-6 would mean that the tropospheric effect may vary 3600 * 3e-6 = 0.01 meters per hour.</li><li>Specify a Noise to describe the expected variation of the ionospheric effect over time. Supposing 1Hz observation data, specifying a value of 6e-4 would mean that the ionospheric effect may vary 1800 * 5.5e-4 = 1.0 meters per half an hour.</li></ul></p><p>You can also specify a 'NMEA Port' to output coordinates in NMEA format through an IP port of your local host. <i>[key: PPP/staTable]</i></p>"));
     208  _staTable->setWhatsThis(tr("<p>Specify values for Sigma and white Noise of the Stations North, East and Height coordinate components in meters. Specify also a Sigma in meters for a priori model based Tropospheric delays and a Sigma in meters per second for the delay's Noise.</p><p>Specifying one record per Station is mandatory. BNC will only process data for stations which are listed here. To define a station, specify the 'Mountpoint' when in 'Real-Time Streams' mode or the 4-character station ID when in 'RINEX Files' mode.</p><p>'Sigma' is meant to describe the uncertainty of a single coordinate or tropospheric delay estimated for one epoch. 'Noise' is meant to describe the variation of estimates from epoch to epoch.</p><p><ul><li>A Sigma of 100.0 meters may be an appropriate choice e.g. for the initial N/E/H coordinates. However, this value may be significantly smaller (i.e. 0.01) for stations with well-known a priori coordinates.</li><li>A Noise of 100.0 meters for the estimated N/E/H coordinates may also be appropriate considering the potential movement of a rover position.</li><li>A value of 0.1 meters may be an appropriate Sigma for the a priori model based Tropospheric delay estimation.</li><li>Specify a Noise to describe the expected variation of the tropospheric effect over time. Supposing 1Hz observation data, specifying a value of 3e-6 would mean that the tropospheric effect may vary 3600 * 3e-6 = 0.01 meters per hour.</li><li>Specify a Noise to describe the expected variation of the ionospheric effect over time. Supposing 1Hz observation data, specifying a value of 0.1 would ba an apropriate choice.</li></ul></p><p>You can also specify a 'NMEA Port' to output coordinates in NMEA format through an IP port of your local host. <i>[key: PPP/staTable]</i></p>"));
    209209
    210210  // WhatsThis, PPP (3)
     
    580580     if (iCol == 5) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
    581581     if (iCol == 6) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
    582      if (iCol == 7) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0.1"));
    583      if (iCol == 8) _staTable->setItem(iRow, iCol, new QTableWidgetItem("3e-6"));
    584      if (iCol == 9) _staTable->setItem(iRow, iCol, new QTableWidgetItem("6e-4"));
     582     if (iCol == 7) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0.05"));
     583     if (iCol == 8) _staTable->setItem(iRow, iCol, new QTableWidgetItem("5e-5"));
     584     if (iCol == 9) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0.1"));
    585585     if (iCol == 10) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0"));
    586586  }
Note: See TracChangeset for help on using the changeset viewer.