Index: trunk/BNC/src/PPP/pppFilter.cpp =================================================================== --- trunk/BNC/src/PPP/pppFilter.cpp (revision 9555) +++ trunk/BNC/src/PPP/pppFilter.cpp (revision 9556) @@ -260,4 +260,19 @@ } } + } + + // Check number of observations + // ---------------------------- + if (iObs == -1) {LOG << "iObs == -1\n"; + return failure; + } + if (OPT->_obsModelType == OPT->DCMcodeBias || + OPT->_obsModelType == OPT->DCMphaseBias || + OPT->_pseudoObsIono) { + double numSat = floor(iObs/2.0); + if (numSat < 2.0) { + LOG << sys << ": numsat " << numSat << " but at least 2 satellites would be required" << endl; + return failure; + } } @@ -294,9 +309,6 @@ } - // Check number of observations, truncate matrices - // ----------------------------------------------- - if (iObs == -1) {LOG << "iObs == -1\n"; - return failure; - } + // Truncate matrices + // ----------------- AA = AA.Rows(1, iObs+1); ll = ll.Rows(1, iObs+1); @@ -330,8 +342,4 @@ t_pppSatObs* obs = usedObs[maxOutlierIndex]; t_pppParam* par = 0; - LOG << epoTimeStr << " Outlier (" - << ((preProcessing) ? "pre-processing) " : "fin-processing) ") << t_lc::toString(maxOutlierLC) << ' ' - << obs->prn().toString() << ' ' - << setw(8) << setprecision(4) << maxOutlier << endl; for (unsigned iPar = 0; iPar < nPar; iPar++) { t_pppParam* hlp = params[iPar]; @@ -348,4 +356,7 @@ t_lc::toString(maxOutlierLC) == "l2") ) { _obsPool->setRefSatChangeRequired(sys, true); + LOG << epoTimeStr << " Outlier (" + << ((preProcessing) ? "pre-processing) " : "fin-processing) ") << t_lc::toString(maxOutlierLC) << ' ' + << obs->prn().toString() << ' ' << setw(8) << setprecision(4) << maxOutlier << endl; break; } @@ -353,12 +364,10 @@ if (par) { par->setAmbResetCandidate(); - obs->setOutlier(); - } - else { - obs->setOutlier(); } } } else {// fin-processing + LOG << epoTimeStr << " Outlier " << t_lc::toString(maxOutlierLC) << ' ' + << obs->prn().toString() << ' ' << setw(8) << setprecision(4) << maxOutlier << endl; if (par) { if (par->ambResetCandidate()) { Index: trunk/BNC/src/PPP/pppSatObs.cpp =================================================================== --- trunk/BNC/src/PPP/pppSatObs.cpp (revision 9555) +++ trunk/BNC/src/PPP/pppSatObs.cpp (revision 9556) @@ -348,5 +348,15 @@ retVal = sqrt(retVal); - return retVal; + // Elevation-Dependent Weighting + // ----------------------------- + double cEle = 1.0; + if ( (OPT->_eleWgtCode && t_lc::includesCode(tLC)) || + (OPT->_eleWgtPhase && t_lc::includesPhase(tLC)) ) { + double eleD = eleSat()*180.0/M_PI; + double hlp = fabs(90.0 - eleD); + cEle = (1.0 + hlp*hlp*hlp*0.000004); + } + + return cEle * retVal; } Index: trunk/BNC/src/pppMain.cpp =================================================================== --- trunk/BNC/src/pppMain.cpp (revision 9555) +++ trunk/BNC/src/pppMain.cpp (revision 9556) @@ -143,5 +143,5 @@ QStringList hlp = iSta.next().split(","); - if (hlp.size() < 10) { + if (hlp.size() < 11) { throw t_except("pppMain: wrong option staTable"); } @@ -181,5 +181,5 @@ opt->_sigmaC1 = settings.value("PPP/sigmaC1").toDouble(); if (opt->_sigmaC1 <= 0.0) opt->_sigmaC1 = 1.00; opt->_sigmaL1 = settings.value("PPP/sigmaL1").toDouble(); if (opt->_sigmaL1 <= 0.0) opt->_sigmaL1 = 0.01; - opt->_sigmaGIM = settings.value("PPP/sigmaGIM").toDouble();if (opt->_sigmaGIM <= 0.0) opt->_sigmaGIM = 4.00; + opt->_sigmaGIM = settings.value("PPP/sigmaGIM").toDouble();if (opt->_sigmaGIM <= 0.0) opt->_sigmaGIM = 5.00; opt->_corrWaitTime = settings.value("PPP/corrWaitTime").toDouble(); if (!_realTime || opt->_corrMount.empty()) { @@ -215,10 +215,10 @@ opt->_obsModelType = t_pppOptions::DCMcodeBias; opt->_refSatRequired = true; - opt->_noiseCodeBias = 1e4; + opt->_noiseCodeBias = 1000.0; } else if (settings.value("PPP/modelObs").toString() == "DCM with Phase Biases") { opt->_obsModelType = t_pppOptions::DCMphaseBias; opt->_refSatRequired = true; - opt->_noisePhaseBias = 1e4; + opt->_noisePhaseBias = 1000.0; } #endif @@ -416,12 +416,12 @@ // Some default values // ------------------- - opt->_aprSigAmb = 1e4; - opt->_aprSigIon = 1e4; - opt->_aprSigClk = 3e5; - opt->_aprSigOGR = 1e4; - opt->_aprSigOGE = 1e4; - opt->_aprSigOGC = 1e4; - opt->_aprSigCodeBias = 1e4; - opt->_aprSigPhaseBias = 1e4; + opt->_aprSigAmb = 1000.0; + opt->_aprSigIon = 1000.0; + opt->_aprSigClk = 1000.0; + opt->_aprSigOGR = 1000.0; + opt->_aprSigOGE = 1000.0; + opt->_aprSigOGC = 1000.0; + opt->_aprSigCodeBias = 1000.0; + opt->_aprSigPhaseBias = 1000.0; _options << opt; Index: trunk/BNC/src/pppWidgets.cpp =================================================================== --- trunk/BNC/src/pppWidgets.cpp (revision 9555) +++ trunk/BNC/src/pppWidgets.cpp (revision 9556) @@ -206,5 +206,5 @@ // WhatsThis, PPP (2) // ------------------ - _staTable->setWhatsThis(tr("
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.
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.
'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.
You can also specify a 'NMEA Port' to output coordinates in NMEA format through an IP port of your local host. [key: PPP/staTable]
")); + _staTable->setWhatsThis(tr("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.
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.
'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.
You can also specify a 'NMEA Port' to output coordinates in NMEA format through an IP port of your local host. [key: PPP/staTable]
")); // WhatsThis, PPP (3) @@ -580,7 +580,7 @@ if (iCol == 5) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0")); if (iCol == 6) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0")); - if (iCol == 7) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0.1")); - if (iCol == 8) _staTable->setItem(iRow, iCol, new QTableWidgetItem("3e-6")); - if (iCol == 9) _staTable->setItem(iRow, iCol, new QTableWidgetItem("6e-4")); + if (iCol == 7) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0.05")); + if (iCol == 8) _staTable->setItem(iRow, iCol, new QTableWidgetItem("5e-5")); + if (iCol == 9) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0.1")); if (iCol == 10) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0")); }