Changeset 10251 in ntrip
- Timestamp:
- Nov 20, 2023, 10:23:42 PM (12 months ago)
- Location:
- trunk/BNC/src
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/src/PPP/pppClient.cpp
r10237 r10251 231 231 while (it != obsVector.end()) { 232 232 t_pppSatObs* pppSatObs = *it; 233 char sys = pppSatObs->prn().system();234 233 bool codeBiasesAvailable = false; 235 t_frequency::type fType1 = t_lc::toFreq(sys,t_lc::c1); 236 t_frequency::type fType2 = t_lc::toFreq(sys,t_lc::c2); 237 if (pppSatObs->getCodeBias(fType1) && 238 pppSatObs->getCodeBias(fType2)) { 239 codeBiasesAvailable = true; 234 if (pppSatObs->getCodeBias(pppSatObs->fType1()) && 235 pppSatObs->getCodeBias(pppSatObs->fType2())) { 236 codeBiasesAvailable = true; 240 237 } 241 238 if (codeBiasesAvailable) { … … 247 244 } 248 245 } 249 246 return; 250 247 } 251 248 -
trunk/BNC/src/PPP/pppFilter.cpp
r10250 r10251 307 307 const vector<t_pppSatObs*> &obsVector) { 308 308 309 const double SLIP = 20 .0;309 const double SLIP = 200.0; 310 310 string epoTimeStr = string(_epoTime); 311 311 const vector<t_pppParam*> ¶ms = _parlist->params(); -
trunk/BNC/src/PPP/pppParlist.cpp
r10232 r10251 179 179 else { 180 180 if (_tLC == t_lc::l1) { 181 return obs->lambda(t_lc::l1) * phaseCoeff[ t_lc::toFreq(obs->prn().system(),t_lc::l1)];181 return obs->lambda(t_lc::l1) * phaseCoeff[obs->fType1()]; 182 182 } 183 183 else if (_tLC == t_lc::l2) { 184 return obs->lambda(t_lc::l2) * phaseCoeff[ t_lc::toFreq(obs->prn().system(),t_lc::l2)];184 return obs->lambda(t_lc::l2) * phaseCoeff[obs->fType2()]; 185 185 } 186 186 } … … 198 198 if (obs->prn() == _prn) { 199 199 if (tLC == t_lc::c1) { 200 return ionoCoeff[ t_lc::toFreq(obs->prn().system(),t_lc::c1)];200 return ionoCoeff[obs->fType1()]; 201 201 } 202 202 else if (tLC == t_lc::c2) { 203 return ionoCoeff[ t_lc::toFreq(obs->prn().system(),t_lc::c2)];203 return ionoCoeff[obs->fType2()]; 204 204 } 205 205 else if (tLC == t_lc::l1) { 206 return ionoCoeff[ t_lc::toFreq(obs->prn().system(),t_lc::l1)];206 return ionoCoeff[obs->fType1()]; 207 207 } 208 208 else if (tLC == t_lc::l2) { 209 return ionoCoeff[ t_lc::toFreq(obs->prn().system(),t_lc::l2)];209 return ionoCoeff[obs->fType2()]; 210 210 } 211 211 else if (tLC == t_lc::GIM) { … … 414 414 } 415 415 416 if (OPT->_ obsModelType == OPT->PPPRTK || OPT->_pseudoObsIono) {416 if (OPT->_ionoModelType == OPT->PPP_RTK || OPT->_pseudoObsIono) { 417 417 vector<t_pppParam*>::iterator it = _params.begin(); 418 418 while (it != _params.end()) { … … 502 502 // Ionosphere 503 503 // ---------- 504 if (OPT->_ obsModelType == OPT->UncombPPP) {504 if (OPT->_ionoModelType == OPT->est) { 505 505 for (unsigned jj = 0; jj < obsVector.size(); jj++) { 506 506 const t_pppSatObs* satObs = obsVector[jj]; 507 required.push_back(new t_pppParam(t_pppParam::ion, satObs->prn(), t_lc::dummy)); 507 char sys = satObs->prn().system(); 508 std::vector<t_lc::type> LCs = OPT->LCs(sys); 509 if (std::find(LCs.begin(), LCs.end(), t_lc::cIF) == LCs.end() && 510 std::find(LCs.begin(), LCs.end(), t_lc::lIF) == LCs.end()) { 511 required.push_back(new t_pppParam(t_pppParam::ion, satObs->prn(), t_lc::dummy)); 512 } 508 513 } 509 514 } … … 512 517 for (unsigned jj = 0; jj < obsVector.size(); jj++) { 513 518 const t_pppSatObs* satObs = obsVector[jj]; 514 const vector<t_lc::type>& ambLCs = OPT->ambLCs(satObs->prn().system()); 519 char sys = satObs->prn().system(); 520 const vector<t_lc::type>& ambLCs = OPT->ambLCs(sys); 515 521 for (unsigned ii = 0; ii < ambLCs.size(); ii++) { 516 522 required.push_back(new t_pppParam(t_pppParam::amb, satObs->prn(), ambLCs[ii], &obsVector)); … … 520 526 // Receiver Code Biases 521 527 // -------------------- 522 if (OPT->_ obsModelType == OPT->PPPRTK) {528 if (OPT->_ionoModelType == OPT->PPP_RTK) { 523 529 std::vector<t_lc::type> lc; 524 530 if (_usedSystems.contains('G')) { … … 589 595 // Receiver Phase Biases 590 596 // --------------------- 591 if (OPT->_ obsModelType == OPT->PPPRTK) {597 if (OPT->_ionoModelType == OPT->PPP_RTK) { 592 598 std::vector<t_lc::type> lc; 593 599 if (_usedSystems.contains('G')) { -
trunk/BNC/src/PPP/pppSatObs.cpp
r10231 r10251 46 46 _stecSat = 0.0; 47 47 _signalPriorities = QString::fromStdString(OPT->_signalPriorities); 48 if (!_signalPriorities.size()) {49 _signalPriorities = "G:12&CWPSLX R:12&CP E:1&CBX E:5&QIX C:26&IQX";50 }51 52 48 for (unsigned ii = 0; ii < t_frequency::max; ii++) { 53 49 _obs[ii] = 0; … … 66 62 // 67 63 //////////////////////////////////////////////////////////////////////////// 68 void t_pppSatObs::prepareObs(const t_satObs& pppSatObs) { 64 void t_pppSatObs::prepareObs(const t_satObs& pppSatObs) {//cout << "SATELLITE: " << _prn.toString() << endl; 69 65 70 66 _model.reset(); 67 68 std::vector<char> bb = OPT->frqBands(_prn.system()); 69 char frqNum1 = '0'; 70 if (bb.size() >= 1) { 71 frqNum1 = bb[0]; 72 } 73 char frqNum2 = '0'; 74 if (bb.size() == 2) { 75 frqNum2 = bb[1]; 76 } 71 77 72 78 // Select pseudo-ranges and phase observations … … 74 80 QStringList priorList = _signalPriorities.split(" ", QString::SkipEmptyParts); 75 81 string preferredAttrib; 76 char obsSys = pppSatObs._prn.system(); //cout << "SATELLITE: " << pppSatObs._prn.toString() << endl;77 82 for (unsigned iFreq = 1; iFreq < t_frequency::max; iFreq++) { 78 83 t_frequency::type frqType = static_cast<t_frequency::type>(iFreq); 79 84 char frqSys = t_frequency::toString(frqType)[0]; //cout << "frqSys: " << frqSys << endl; 80 85 char frqNum = t_frequency::toString(frqType)[1]; //cout << "frqNum: " << frqNum << endl; 81 if (obsSys != frqSys) { 86 if (frqSys != _prn.system()) { 87 continue; 88 } 89 if (frqNum != frqNum1 && 90 frqNum != frqNum2 ) { 82 91 continue; 83 92 } … … 100 109 //cout << "observation2char: " << obs->_rnxType2ch << " vs. " << obsType.toStdString().c_str()<< endl; 101 110 if (obs->_rnxType2ch == obsType.toStdString() && 102 obs->_codeValid && obs->_code &&111 obs->_codeValid && obs->_code && 103 112 obs->_phaseValid && obs->_phase) { 104 113 _obs[iFreq] = new t_frqObs(*obs); //cout << "================> newObs: " << obs->_rnxType2ch <<endl; … … 112 121 // Used frequency types 113 122 // -------------------- 114 _fType1 = t_ lc::toFreq(_prn.system(),t_lc::l1);115 _fType2 = t_ lc::toFreq(_prn.system(),t_lc::l2);123 _fType1 = t_frqBand::toFreq(_prn.system(), frqNum1); 124 _fType2 = t_frqBand::toFreq(_prn.system(), frqNum2); 116 125 117 126 // Check whether all required frequencies available … … 524 533 } 525 534 const t_frqObs* obs = _obs[iFreq]; 526 if (obs && obs->_rnxType2ch == bias._rnxType2ch) { 535 if (obs && 536 obs->_rnxType2ch == bias._rnxType2ch) { 527 537 _model._codeBias[iFreq] = bias._value; 528 538 } … … 551 561 } 552 562 const t_frqObs* obs = _obs[iFreq]; 553 if (obs && obs->_rnxType2ch == bias._rnxType2ch) { 563 if (obs && 564 obs->_rnxType2ch == bias._rnxType2ch) { 554 565 _model._phaseBias[iFreq] = bias._value; 555 566 } … … 606 617 _model._set = true; 607 618 608 //printModel();619 printModel(); 609 620 610 621 return success; … … 619 630 620 631 << "\n======================= " << endl 621 << "PPP STRATEGY : " << OPT->_obsmodelTypeStr.at((int)OPT->_obsModelType).toLocal8Bit().constData()632 << "PPP " 622 633 << ((OPT->_pseudoObsIono) ? " with pseudo-observations for STEC" : "") << endl 623 634 << "RHO : " << setw(12) << setprecision(3) << _model._rho << endl … … 701 712 t_frequency::type tFreq = it->first; 702 713 dispPart += it->second * (_model._antPCO[tFreq] - _model._codeBias[tFreq]); 703 if (OPT->PPP RTK) {714 if (OPT->PPP_RTK) { 704 715 dispPart += it->second * (_model._ionoCodeDelay[tFreq]); 705 716 } … … 709 720 dispPart += it->second * (_model._antPCO[tFreq] - _model._phaseBias[tFreq] + 710 721 _model._windUp * t_CST::lambda(tFreq, _channel)); 711 if (OPT->PPP RTK) {722 if (OPT->PPP_RTK) { 712 723 dispPart += it->second * (- _model._ionoCodeDelay[tFreq]); 713 724 } -
trunk/BNC/src/PPP/pppSatObs.h
r10034 r10251 50 50 double getIonoCodeDelay(t_frequency::type freq) {return _model._ionoCodeDelay[freq];} 51 51 double getCodeBias(t_frequency::type freq) {return _model._codeBias[freq];} 52 t_frequency::type fType1() const {return _fType1;} 53 t_frequency::type fType2() const {return _fType2;} 52 54 53 55 // RINEX -
trunk/BNC/src/bncconst.h
r9765 r10251 33 33 public: 34 34 enum type {dummy = 0, 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 35 // GPS 36 G1, // L1 / 1575.42 37 G2, // L2 / 1227.60 38 G5, // L5 / 1176.45 39 // GLONASS 40 R1, // G1 / 1602 + k * 9/16 (k = -7 .. +12) 41 R4, // G1a / 1600.995 42 R2, // G2 / 1246 + k * 7/16 (k = -7 .. +12) 43 R6, // G2a / 1248.06 44 R3, // G3 / 1202.025 45 // Galileo 46 E1, // E1 / 1575.42 47 E5, // E5a / 1176.45 48 E7, // E5b / 1207.140 49 E8, // E5(E5a+E5b) / 1191.795 50 E6, // E6 / 1278.75 51 // QZSS 52 J1, // L1 / 1575.42 53 J2, // L2 / 1227.60 54 J5, // L5 / 1176.45 55 J6, // L6 / 1278.75 56 // BDS 57 C2, // B1 / 1561.098 (BDS 2/3 signals) 58 C1, // B1C, B1A / 1575.42 (BDS-3 signals) 59 C5, // B2a / 1176.45 (BDS-3 signals) 60 C7, // B2, B2b / 1207.14 (BDS-2 signals) 61 C8, // B2(B2a+B2b) / 1191.795 (BDS-3 signals) 62 C6, // B3,B3A / 1268.52 63 // IRNSS 64 I5, // L5 / 1176.45 65 I9, // S / 2492.028 66 // SBAS 67 S1, // L1 / 1575.42 68 S5, // L5 / 1176.45 69 max}; 70 70 71 71 static std::string toString(type tt) { -
trunk/BNC/src/bncmain.cpp
r10244 r10251 233 233 " PPP/logPath {Directory for PPP log files [character string]}\n" 234 234 " PPP/antexFile {ANTEX file, full path [character string]}\n" 235 #ifdef USE_PPP 235 #ifdef USE_PPP 236 236 " PPP/blqFile {BLQ file, full path [character string]}\n" 237 237 " PPP/ionoMount {VTEC mountpoint, [char string]}\n" 238 238 " PPP/ionoFile {VTEC file, full path [char string]}\n" 239 #endif 239 #endif 240 240 " PPP/nmeaPath {Directory for NMEA output files [character string]}\n" 241 241 " PPP/snxtroPath {Directory for SINEX troposphere output files [character string]}\n" … … 248 248 "\n" 249 249 "PPP Client Panel 2 keys:\n" 250 " PPP/lcGPS {Select observations from GPS code and/or phase data [character string; Pi&Li|Pi|Li|no]}\n" 251 " PPP/lcGLONASS {Select observations from GLONASS code and/or phase data [character string: Pi&Li|Pi|Li|no]}\n" 252 " PPP/lcGalileo {Select observations from Galileo code and/or phase data [character string: Pi&Li|Pi|Li|no]}\n" 253 " PPP/lcBDS {Select observations from BDS code and/or phase data [character string: Pi&Li|Pi|Li|no]}\n" 254 " PPP/modelObs {select observation model [character string: Uncombined PPP|Ionosphere-free PPP]}\n" 250 " PPP/lcGPS {Select the kind of linear combination from GPS code and/or phase data [character string: Pi&Li|Pi|Li|P1&L1|P1|L1|P3&L3|P3|L3|no]}\n" 251 " PPP/lcGLONASS {Select the kind of linear combination from GLONASS code and/or phase data [character string: Pi&Li|Pi|Li|P1&L1|P1|L1|P3&L3|P3|L3|no]}\n" 252 " PPP/lcGalileo {Select the kind of linear combination from Galileo code and/or phase data [character string: Pi&Li|Pi|Li|P1&L1|P1|L1|P3&L3|P3|L3|no]}\n" 253 " PPP/lcBDS {Select the kind of linear combination from BDS code and/or phase data [character string: Pi&Li|Pi|Li|P1&L1|P1|L1|P3&L3|P3|L3|no]}\n" 255 254 " PPP/sigmaC1 {Sigma for code observations in meters [floating-point number]}\n" 256 255 " PPP/sigmaL1 {Sigma for phase observations in meters [floating-point number]}\n" … … 264 263 " PPP/seedingTime {Seeding time span for Quick Start [integer number of seconds]}\n" 265 264 #ifdef USE_PPP 266 " PPP/ pseudoOb {Select pseudo observations [character string: no|Ionosphere]}\n"265 " PPP/constraints {Specify, whether ionospheric constraints in form of pseudo-observations shall be added [character string: no|Ionosphere: pseudo-obs]}\n" 267 266 " PPP/sigmaGIM {Sigma for GIM pseudo observations in meters [floating-point number]}\n" 268 267 " PPP/maxResGIM {Maximal residuum for GIM pseudo observations in meters [floating-point number]}\n" -
trunk/BNC/src/bncwindow.cpp
r10244 r10251 1041 1041 pppLayout1->addWidget(new QLabel(" SNX TRO solution type"),ir, 6); 1042 1042 pppLayout1->addWidget(_pppWidgets._snxtroSolType, ir, 7, Qt::AlignRight); 1043 1044 1043 #endif 1045 1044 pppLayout1->setRowStretch(ir+1, 999); … … 1080 1079 pppLayout2->addWidget(_pppWidgets._minEle, ir, 7);_pppWidgets._minEle->setMaximumWidth(8*ww); 1081 1080 ++ir; 1082 pppLayout2->addWidget(new QLabel("Model Obs"), ir, 0, Qt::AlignLeft); 1083 pppLayout2->addWidget(_pppWidgets._modelObs, ir, 1); 1084 pppLayout2->addWidget(new QLabel("Wait for clock corr."), ir, 3, Qt::AlignLeft); 1085 pppLayout2->addWidget(_pppWidgets._corrWaitTime, ir, 4); 1081 #ifdef USE_PPP 1082 pppLayout2->addWidget(new QLabel("Constraints"), ir, 0, Qt::AlignLeft); 1083 pppLayout2->addWidget(_pppWidgets._constraints, ir, 1); 1084 pppLayout2->addWidget(new QLabel("Sigma GIM"), ir, 3, Qt::AlignLeft); 1085 pppLayout2->addWidget(_pppWidgets._sigmaGIM, ir, 4); _pppWidgets._sigmaGIM->setMaximumWidth(8*ww); 1086 #endif 1087 pppLayout2->addItem(new QSpacerItem(8*ww, 0), ir, 5); 1088 pppLayout2->addWidget(new QLabel("Wait for clock corr."), ir, 6, Qt::AlignLeft); 1089 pppLayout2->addWidget(_pppWidgets._corrWaitTime, ir, 7); 1090 ++ir; 1091 pppLayout2->addItem(new QSpacerItem(8*ww, 0), ir, 2); 1092 #ifdef USE_PPP 1093 pppLayout2->addWidget(new QLabel("Max Res GIM"), ir, 3, Qt::AlignLeft); 1094 pppLayout2->addWidget(_pppWidgets._maxResGIM, ir, 4); _pppWidgets._maxResGIM->setMaximumWidth(8*ww); 1095 #endif 1086 1096 pppLayout2->addWidget(new QLabel("Seeding (sec)"), ir, 6, Qt::AlignLeft); 1087 1097 pppLayout2->addWidget(_pppWidgets._seedingTime, ir, 7);_pppWidgets._seedingTime->setMaximumWidth(8*ww); 1088 ++ir;1089 pppLayout2->addWidget(new QLabel("Pseudo Obs"), ir, 0, Qt::AlignLeft);1090 pppLayout2->addWidget(_pppWidgets._pseudoObs, ir, 1);1091 pppLayout2->addItem(new QSpacerItem(8*ww, 0), ir, 2);1092 pppLayout2->addWidget(new QLabel("Sigma GIM"), ir, 3, Qt::AlignLeft);1093 pppLayout2->addWidget(_pppWidgets._sigmaGIM, ir, 4); _pppWidgets._sigmaGIM->setMaximumWidth(8*ww);1094 pppLayout2->addItem(new QSpacerItem(8*ww, 0), ir, 5);1095 pppLayout2->addWidget(new QLabel("Max Res GIM"), ir, 6, Qt::AlignLeft);1096 pppLayout2->addWidget(_pppWidgets._maxResGIM, ir, 7); _pppWidgets._maxResGIM->setMaximumWidth(8*ww);1097 1098 ++ir; 1098 1099 pppLayout2->addWidget(new QLabel(""), ir, 8); … … 1505 1506 // WhatsThis, PPP (3) 1506 1507 // ------------------ 1507 _pppWidgets._lcGPS->setWhatsThis(tr("<p>Specify which kind of GPS observations you want to use</p><p><ul><li>Specifying 'Pi' means that you request BNC to use code data of two frequencies.</li><li>Specifying 'Li' means that you request BNC to use phase data of two frequencies.</li> <li>Specifying 'Pi&Li' means that you request BNC to use both, code and phase data of two frequencies.</li></ul></p><p>Specifying 'no' means that you don't want BNC to use GPS data. <i>[key: PPP/lcGPS]</i></p>")); 1508 _pppWidgets._lcGLONASS->setWhatsThis(tr("<p>Specify which kind of GLONASS observations you want to use</p><p><ul><li>Specifying 'Pi' means that you request BNC to use code data of two frequencies.</li><li>Specifying'Li' means that you request BNC to use phase data of two frequencies.</li> <li>Specifying'Pi&Li' means that you request BNC to use both, code and phase data of two frequencies.</li></ul></p><p>Specifying 'no' means that you don't want BNC to use GLONASS data. <i>[key: PPP/lcGLONASS]</i></p>")); 1509 _pppWidgets._lcGalileo->setWhatsThis(tr("<p>Specify which kind of Galileo observations you want to use</p><p><ul><li>Specifying 'Pi' means that you request BNC to use code data of two frequencies.</li><li>Specifying'Li' means that you request BNC to use phase data of two frequencies.</li> <li>Specifying'Pi&Li' means that you request BNC to use both, code and phase data of two frequencies.</li></ul></p><p>Specifying 'no' means that you don't want BNC to use Galileo data. <i>[key: PPP/lcGalileo]</i></p>")); 1510 _pppWidgets._lcBDS->setWhatsThis(tr("<p>Specify which kind of BDS observations you want to use</p><p><ul><li>Specifying 'Pi' means that you request BNC to use code data from two frequencies.</li><li>Specifying'Li' means that you request BNC to use phase data of two frequencies.</li> <li>Specifying'Pi&Li' means that you request BNC to use both, code and phase data of two frequencies.</li></ul></p><p>Specifying 'no' means that you don't want BNC to use BDS data. <i>[key: PPP/lcBDS]</i></p>")); 1511 _pppWidgets._modelObs->setWhatsThis(tr("<p>Specify which kind of PPP model you want to use:</p><p><ul><li>Uncombined PPP</li><li>Iopnosphere-free PPP</li><li>PPP-RTK (currently not activated because of an incomplete standardized SSR model)</li><li></p><p>[key: PPP/modelObs]</i></p>")); 1512 _pppWidgets._pseudoObs->setWhatsThis(tr("<p>Specify whether pseudo observations regarding the Ionosphere shall be used. Please note, this is useful, as soon as the ionospheric information is more accurate than the code data accuracy. <i>[key: PPP/pseudoObs]</i></p>")); 1513 _pppWidgets._sigmaC1->setWhatsThis(tr("<p>Enter a Sigma for GPS C1 code observations in meters.</p><p>The higher the sigma you enter, the less the contribution of GPS C1 code observations to a PPP solution from combined code and phase data. 2.0 is likely to be an appropriate choice.</p><p>Default is an empty option field, meaning<br>'Sigma C1 = 2.0' <i>[key: PPP/sigmaC1]</i></p>")); 1514 _pppWidgets._sigmaL1->setWhatsThis(tr("<p>Enter a Sigma for GPS L1 phase observations in meters.</p><p>The higher the sigma you enter, the less the contribution of GPS L1 phase observations to a PPP solutions from combined code and phase data. 0.02 is likely to be an appropriate choice.</p><p>Default is an empty option field, meaning<br>'Sigma L1 = 0.02' <i>[key: PPP/sigmaL1]</i></p>")); 1508 _pppWidgets._lcGPS->setWhatsThis(tr("<p>Specify which kind of GPS observations you want to use and on which kind of linear combination the GPS ambiguity resolutions shall be based:</p><p><ul>" 1509 #ifdef USE_PPP_SSR_I 1510 "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>" 1511 "<li>'P3' means that the inonosphere-free linear combination of code data shall be used.</li>" 1512 #else 1513 "<li>'Pi&Li' means that uncombined code and phase data of two frequencies shall be used.</li>" 1514 "<li>'Pi' means that uncombined code data of two frequencies shall be used.</li>" 1515 "<li>'Li' means that uncombined phase data of two frequencies shall be used.</li> " 1516 "<li>'P1&L1' means that uncombined code and phase data of one frequency shall be used.</li>" 1517 "<li>'P1' means that uncombined code data of one frequency shall be used.</li>" 1518 "<li>'L1' means that uncombined phase data of one frequency shall be used.</li> " 1519 "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>" 1520 "<li>'P3' means that the inonosphere-free linear combination of code data shall be used.</li>" 1521 "<li>'L3' means that the inonosphere-free linear combination of phase data shall be used.</li> " 1522 #endif 1523 "<li>'no' means that you don't want BNC to use GPS data.</li></ul></p><p><i>[key: PPP/lcGPS]</i></p>")); 1524 _pppWidgets._lcGLONASS->setWhatsThis(tr("<p>Specify which kind of GLONASS observations you want to use and on which kind of linear combination the GLONASS ambiguity resolutions shall be based:</p><p><ul>" 1525 #ifdef USE_PPP_SSR_I 1526 "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>" 1527 "<li>'P3' means that the inonosphere-free linear combination of code data shall be used.</li>" 1528 "<li>'L3' means that the inonosphere-free linear combination of phase data shall be used.</li> " 1529 #else 1530 "<li>'Pi&Li' means that uncombined code and phase data of two frequencies shall be used.</li>" 1531 "<li>'Pi' means that uncombined code data of two frequencies shall be used.</li>" 1532 "<li>'Li' means that uncombined phase data of two frequencies shall be used.</li> " 1533 "<li>'P1&L1' means that uncombined code and phase data of one frequency shall be used.</li>" 1534 "<li>'P1' means that uncombined code data of one frequency shall be used.</li>" 1535 "<li>'L1' means that uncombined phase data of one frequency shall be used.</li> " 1536 "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>" 1537 "<li>'P3' means that the inonosphere-free linear combination of code data shall be used.</li>" 1538 "<li>'L3' means that the inonosphere-free linear combination of phase data shall be used.</li> " 1539 #endif 1540 "<li>'no' means that you don't want BNC to use GLONASS data.</li></ul></p><p><i>[key: PPP/lcGLONASS]</i></p>")); 1541 _pppWidgets._lcGalileo->setWhatsThis(tr("<p>Specify which kind of Galileo observations you want to use and on which kind of linear combination the Galileo ambiguity resolutions shall be based:</p><p><ul>" 1542 #ifdef USE_PPP_SSR_I 1543 "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>" 1544 "<li>'P3' means that the inonosphere-free linear combination of code data shall be used.</li>" 1545 "<li>'L3' means that the inonosphere-free linear combination of phase data shall be used.</li> " 1546 #else 1547 "<li>'Pi&Li' means that uncombined code and phase data of two frequencies shall be used.</li>" 1548 "<li>'Pi' means that uncombined code data of two frequencies shall be used.</li>" 1549 "<li>'Li' means that uncombined phase data of two frequencies shall be used.</li> " 1550 "<li>'P1&L1' means that uncombined code and phase data of one frequency shall be used.</li>" 1551 "<li>'P1' means that uncombined code data of one frequency shall be used.</li>" 1552 "<li>'L1' means that uncombined phase data of one frequency shall be used.</li> " 1553 "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>" 1554 "<li>'P3' means that the inonosphere-free linear combination of code data shall be used.</li>" 1555 "<li>'L3' means that the inonosphere-free linear combination of phase data shall be used.</li> " 1556 #endif 1557 "<li>'no' means that you don't want BNC to use Galileo data.</li></ul></p><p><i>[key: PPP/lcGalileo]</i></p>")); 1558 _pppWidgets._lcBDS->setWhatsThis(tr("<p>Specify which kind of BDS observations you want to use and on which kind of linear combination the BDS ambiguity resolutions shall be based:</p><p><ul>" 1559 #ifdef USE_PPP_SSR_I 1560 "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>" 1561 "<li>'P3' means that the inonosphere-free linear combination of code data shall be used.</li>" 1562 "<li>'L3' means that the inonosphere-free linear combination of phase data shall be used.</li> " 1563 #else 1564 "<li>'Pi&Li' means that uncombined code and phase data of two frequencies shall be used.</li>" 1565 "<li>'Pi' means that uncombined code data of two frequencies shall be used.</li>" 1566 "<li>'Li' means that uncombined phase data of two frequencies shall be used.</li> " 1567 "<li>'P1&L1' means that uncombined code and phase data of one frequency shall be used.</li>" 1568 "<li>'P1' means that uncombined code data of one frequency shall be used.</li>" 1569 "<li>'L1' means that uncombined phase data of one frequency shall be used.</li> " 1570 "<li>'P3&L3' means that the inonosphere-free linear combination of code and phase data shall be used.</li>" 1571 "<li>'P3' means that the inonosphere-free linear combination of code data shall be used.</li>" 1572 "<li>'L3' means that the inonosphere-free linear combination of phase data shall be used.</li> " 1573 #endif 1574 "<li>'no' means that you don't want BNC to use BDS data.</li></ul></p><p><i>[key: PPP/lcBDS]</i></p>")); 1575 _pppWidgets._constraints->setWhatsThis(tr("<p>Specify, whether ionospheric constraints in form of pseudo-observations shall be added. Please note, this is only valid, if no ionosphere-free linear-combination is used and only helpful as soon as the ionosphere information is more accurate than the code data accuracy. <i>[key: PPP/constraints]</i></p>")); 1576 _pppWidgets._sigmaC1->setWhatsThis(tr("<p>Enter a Sigma for GPS C1 code observations in meters.</p><p>The higher the sigma you enter, the less the contribution of GPS C1 code observations to a PPP solution from combined code and phase data. 1.0 is likely to be an appropriate choice.</p><p>Default is an empty option field, meaning<br>'Sigma C1 = 1.0' <i>[key: PPP/sigmaC1]</i></p>")); 1577 _pppWidgets._sigmaL1->setWhatsThis(tr("<p>Enter a Sigma for GPS L1 phase observations in meters.</p><p>The higher the sigma you enter, the less the contribution of GPS L1 phase observations to a PPP solutions from combined code and phase data. 0.01 is likely to be an appropriate choice.</p><p>Default is an empty option field, meaning<br>'Sigma L1 = 0.01' <i>[key: PPP/sigmaL1]</i></p>")); 1578 #ifdef USE_PPP 1515 1579 _pppWidgets._sigmaGIM->setWhatsThis(tr("<p>Enter a Sigma for GIM pseudo observations in meters.</p><p>The higher the sigma you enter, the less the contribution of GIM pseudo observations to a PPP solution. 5.0 is likely to be an appropriate choice.</p><p>Default is an empty option field, meaning<br>'Sigma GIM = 5.0' <i>[key: PPP/sigmaGIM]</i></p>")); 1516 _pppWidgets._maxResC1->setWhatsThis(tr("<p>Specify a maximum for residuals from GPS C1 code observations in a PPP solution. '3.0' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res C1 = 3.0' <i>[key: PPP/maxResC1]</i></p>")); 1517 _pppWidgets._maxResL1->setWhatsThis(tr("<p>Specify a maximum for residuals from GPS L1 phase observations in a PPP solution. '0.03' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res L1 = 0.03' <i>[key: PPP/maxResL1]</i></p>")); 1518 _pppWidgets._maxResGIM->setWhatsThis(tr("<p>Specify a maximum for residuals from GIM pseudo observations in a PPP solution. '3.0' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res GIM = 3.0' <i>[key: PPP/maxResGIM]</i></p>")); 1580 #endif 1581 _pppWidgets._maxResC1->setWhatsThis(tr("<p>Specify a maximum for residuals from GPS C1 code observations in a PPP solution. '2.0' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res C1 = 2.0' <i>[key: PPP/maxResC1]</i></p>")); 1582 _pppWidgets._maxResL1->setWhatsThis(tr("<p>Specify a maximum for residuals from GPS L1 phase observations in a PPP solution. '0.02' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res L1 = 0.02' <i>[key: PPP/maxResL1]</i></p>")); 1583 #ifdef USE_PPP 1584 _pppWidgets._maxResGIM->setWhatsThis(tr("<p>Specify a maximum for residuals from GIM pseudo observations in a PPP solution. '2.0' meters may be an appropriate choice for that.</p><p>If the maximum is exceeded, contributions from the corresponding observation will be ignored in the PPP solution.</p><p>Default is an empty option field, meaning<br>'Max Res GIM = 2.0' <i>[key: PPP/maxResGIM]</i></p>")); 1585 #endif 1519 1586 _pppWidgets._eleWgtCode->setWhatsThis(tr("<p>Tic 'Ele Wgt Code' to use satellite Elevation depending Weights for Code observations in the PPP solution. <i>[key: PPP/eleWgtCode]</i></p>")); 1520 1587 _pppWidgets._eleWgtPhase->setWhatsThis(tr("<p>Tic 'Ele Wgt Phase' to use satellite Elevation depending Weights for Phase observations in the PPP solution. <i>[key: PPP/eleWgtPhase]</i></p>")); -
trunk/BNC/src/pppInclude.h
r9547 r10251 38 38 std::string _log; 39 39 bool _error; 40 }; 41 42 43 class t_frqBand { 44 public: 45 static t_frequency::type toFreq(char sys, char bb) { 46 switch (bb) { 47 case '1': 48 if (sys == 'G') return t_frequency::G1; 49 else if (sys == 'R') return t_frequency::R1; 50 else if (sys == 'E') return t_frequency::E1; 51 else if (sys == 'C') return t_frequency::C1; 52 else return t_frequency::dummy; 53 case '2': 54 if (sys == 'G') return t_frequency::G2; 55 else if (sys == 'R') return t_frequency::R2; 56 else if (sys == 'C') return t_frequency::C2; 57 else return t_frequency::dummy; 58 case '5': 59 if (sys == 'G') return t_frequency::G5; 60 else if (sys == 'E') return t_frequency::E5; 61 else if (sys == 'C') return t_frequency::C5; 62 else return t_frequency::dummy; 63 case '6': 64 if (sys == 'E') return t_frequency::E6; 65 else if (sys == 'C') return t_frequency::C6; 66 else return t_frequency::dummy; 67 case '7': 68 if (sys == 'E') return t_frequency::E7; 69 else if (sys == 'C') return t_frequency::C7; 70 else return t_frequency::dummy; 71 case '8': 72 if (sys == 'E') return t_frequency::E8; 73 else if (sys == 'C') return t_frequency::C8; 74 else return t_frequency::dummy; 75 } 76 return t_frequency::dummy; 77 } 40 78 }; 41 79 -
trunk/BNC/src/pppMain.cpp
r10250 r10251 162 162 #ifdef USE_PPP 163 163 opt->_signalPriorities = hlp[10].toStdString(); 164 if (!opt->_signalPriorities.size()) { 165 opt->_signalPriorities = "G:12&CWPSLX R:12&CP E:1&CBX E:5&QIX C:26&IQX"; 166 } 164 167 #endif 165 168 if (_realTime) { … … 189 192 opt->_corrWaitTime = 0; 190 193 } 191 opt->_obsModelType = t_pppOptions::IF; 194 192 195 opt->_pseudoObsIono = false; 193 196 opt->_refSatRequired = false; 194 #ifdef USE_PPP 197 #ifdef USE_PPP_SSR_I 198 if (settings.value("PPP/lcGPS").toString() == "P3&L3") { 199 opt->_LCsGPS.push_back(t_lc::cIF); 200 opt->_LCsGPS.push_back(t_lc::lIF); 201 } 202 if (settings.value("PPP/lcGPS").toString() == "P3") { 203 opt->_LCsGPS.push_back(t_lc::cIF); 204 } 205 if (settings.value("PPP/lcGLONASS").toString() == "P3&L3") { 206 opt->_LCsGLONASS.push_back(t_lc::cIF); 207 opt->_LCsGLONASS.push_back(t_lc::lIF); 208 } 209 if (settings.value("PPP/lcGLONASS").toString() == "P3") { 210 opt->_LCsGLONASS.push_back(t_lc::cIF); 211 } 212 if (settings.value("PPP/lcGLONASS").toString() == "L3") { 213 opt->_LCsGLONASS.push_back(t_lc::lIF); 214 } 215 if (settings.value("PPP/lcGalileo").toString() == "P3&L3") { 216 opt->_LCsGalileo.push_back(t_lc::cIF); 217 opt->_LCsGalileo.push_back(t_lc::lIF); 218 } 219 if (settings.value("PPP/lcGalileo").toString() == "P3") { 220 opt->_LCsGalileo.push_back(t_lc::cIF); 221 } 222 if (settings.value("PPP/lcGalileo").toString() == "L3") { 223 opt->_LCsGalileo.push_back(t_lc::lIF); 224 } 225 if (settings.value("PPP/lcBDS").toString() == "P3&L3") { 226 opt->_LCsBDS.push_back(t_lc::cIF); 227 opt->_LCsBDS.push_back(t_lc::lIF); 228 } 229 if (settings.value("PPP/lcBDS").toString() == "P3") { 230 opt->_LCsBDS.push_back(t_lc::cIF); 231 } 232 if (settings.value("PPP/lcBDS").toString() == "L3") { 233 opt->_LCsBDS.push_back(t_lc::lIF); 234 } 235 #else 195 236 // Pseudo Observations 196 if (settings.value("PPP/ pseudoObs").toString() == "no") {237 if (settings.value("PPP/constraints").toString() == "no") { 197 238 opt->_pseudoObsIono = false; 198 } 199 else if (settings.value("PPP/pseudoObs").toString() == "Ionosphere") { 239 opt->_refSatRequired = false; 240 opt->_ionoModelType = opt->est; 241 } 242 else if (settings.value("PPP/constraints").toString() == "Ionosphere: pseudo-obs") { 200 243 opt->_pseudoObsIono = true; 201 } 202 // Observation Model 203 if (settings.value("PPP/modelObs").toString() == "Ionosphere-free PPP") { 204 opt->_obsModelType = t_pppOptions::IF; 205 opt->_pseudoObsIono = false; 206 } 207 else if (settings.value("PPP/modelObs").toString() == "PPP-RTK") { 208 opt->_obsModelType = t_pppOptions::PPPRTK; 209 opt->_pseudoObsIono = false; 210 } 211 else if (settings.value("PPP/modelObs").toString() == "Uncombined PPP") { 212 opt->_obsModelType = t_pppOptions::UncombPPP; 213 if (opt->_pseudoObsIono) { 214 opt->_refSatRequired = true; 215 } 216 } 217 #endif 244 opt->_refSatRequired = true; 245 opt->_ionoModelType = opt->est; 246 } 218 247 // GPS 219 248 if (settings.value("PPP/lcGPS").toString() == "Pi&Li") { 220 if (opt->_obsModelType == t_pppOptions::IF) { 221 opt->_LCsGPS.push_back(t_lc::cIF); 222 opt->_LCsGPS.push_back(t_lc::lIF); 223 } 224 else { 249 opt->_LCsGPS.push_back(t_lc::c1); 250 opt->_LCsGPS.push_back(t_lc::c2); 251 opt->_LCsGPS.push_back(t_lc::l1); 252 opt->_LCsGPS.push_back(t_lc::l2); 253 if (opt->_pseudoObsIono) { 254 opt->_LCsGPS.push_back(t_lc::GIM); 255 } 256 } 257 if (settings.value("PPP/lcGPS").toString() == "Pi") { 258 opt->_LCsGPS.push_back(t_lc::c1); 259 opt->_LCsGPS.push_back(t_lc::c2); 260 if (opt->_pseudoObsIono) { 261 opt->_LCsGPS.push_back(t_lc::GIM); 262 } 263 } 264 if (settings.value("PPP/lcGPS").toString() == "Li") { 265 opt->_LCsGPS.push_back(t_lc::l1); 266 opt->_LCsGPS.push_back(t_lc::l2); 267 if (opt->_pseudoObsIono) { 268 opt->_LCsGPS.push_back(t_lc::GIM); 269 } 270 } 271 if (settings.value("PPP/lcGPS").toString() == "P1&L1") { 272 opt->_LCsGPS.push_back(t_lc::c1); 273 opt->_LCsGPS.push_back(t_lc::l1); 274 if (opt->_pseudoObsIono) { 275 opt->_LCsGPS.push_back(t_lc::GIM); 276 } 277 } 278 if (settings.value("PPP/lcGPS").toString() == "P1") { 225 279 opt->_LCsGPS.push_back(t_lc::c1); 226 opt->_LCsGPS.push_back(t_lc::c2);227 opt->_LCsGPS.push_back(t_lc::l1);228 opt->_LCsGPS.push_back(t_lc::l2);229 280 if (opt->_pseudoObsIono) { 230 281 opt->_LCsGPS.push_back(t_lc::GIM); 231 282 } 232 } 233 } 234 if (settings.value("PPP/lcGPS").toString() == "Pi") { 235 if (opt->_obsModelType == t_pppOptions::IF) { 236 opt->_LCsGPS.push_back(t_lc::cIF); 237 } 238 else { 239 opt->_LCsGPS.push_back(t_lc::c1); 240 opt->_LCsGPS.push_back(t_lc::c2); 241 if (opt->_pseudoObsIono) { 242 opt->_LCsGPS.push_back(t_lc::GIM); 243 } 244 } 245 } 246 if (settings.value("PPP/lcGPS").toString() == "Li") { 247 if (opt->_obsModelType == t_pppOptions::IF) { 248 opt->_LCsGPS.push_back(t_lc::lIF); 249 } 250 else { 251 opt->_LCsGPS.push_back(t_lc::l1); 252 opt->_LCsGPS.push_back(t_lc::l2); 253 if (opt->_pseudoObsIono) { 254 opt->_LCsGPS.push_back(t_lc::GIM); 255 } 256 } 283 } 284 if (settings.value("PPP/lcGPS").toString() == "L1") { 285 opt->_LCsGPS.push_back(t_lc::l1); 286 if (opt->_pseudoObsIono) { 287 opt->_LCsGPS.push_back(t_lc::GIM); 288 } 289 } 290 if (settings.value("PPP/lcGPS").toString() == "P3&L3") { 291 opt->_LCsGPS.push_back(t_lc::cIF); 292 opt->_LCsGPS.push_back(t_lc::lIF); 293 } 294 if (settings.value("PPP/lcGPS").toString() == "P3") { 295 opt->_LCsGPS.push_back(t_lc::cIF); 296 } 297 if (settings.value("PPP/lcGPS").toString() == "L3") { 298 opt->_LCsGPS.push_back(t_lc::lIF); 257 299 } 258 300 // GLONASS 259 301 if (settings.value("PPP/lcGLONASS").toString() == "Pi&Li") { 260 if (opt->_obsModelType == t_pppOptions::IF) { 261 opt->_LCsGLONASS.push_back(t_lc::cIF); 262 opt->_LCsGLONASS.push_back(t_lc::lIF); 263 } 264 else { 302 opt->_LCsGLONASS.push_back(t_lc::c1); 303 opt->_LCsGLONASS.push_back(t_lc::c2); 304 opt->_LCsGLONASS.push_back(t_lc::l1); 305 opt->_LCsGLONASS.push_back(t_lc::l2); 306 if (opt->_pseudoObsIono) { 307 opt->_LCsGLONASS.push_back(t_lc::GIM); 308 } 309 } 310 if (settings.value("PPP/lcGLONASS").toString() == "Pi") { 311 opt->_LCsGLONASS.push_back(t_lc::c1); 312 opt->_LCsGLONASS.push_back(t_lc::c2); 313 if (opt->_pseudoObsIono) { 314 opt->_LCsGLONASS.push_back(t_lc::GIM); 315 } 316 } 317 if (settings.value("PPP/lcGLONASS").toString() == "Li") { 318 opt->_LCsGLONASS.push_back(t_lc::l1); 319 opt->_LCsGLONASS.push_back(t_lc::l2); 320 if (opt->_pseudoObsIono) { 321 opt->_LCsGLONASS.push_back(t_lc::GIM); 322 } 323 } 324 if (settings.value("PPP/lcGLONASS").toString() == "P1&L1") { 325 opt->_LCsGLONASS.push_back(t_lc::c1); 326 opt->_LCsGLONASS.push_back(t_lc::l1); 327 if (opt->_pseudoObsIono) { 328 opt->_LCsGLONASS.push_back(t_lc::GIM); 329 } 330 } 331 if (settings.value("PPP/lcGLONASS").toString() == "P1") { 265 332 opt->_LCsGLONASS.push_back(t_lc::c1); 266 opt->_LCsGLONASS.push_back(t_lc::c2);267 opt->_LCsGLONASS.push_back(t_lc::l1);268 opt->_LCsGLONASS.push_back(t_lc::l2);269 333 if (opt->_pseudoObsIono) { 270 334 opt->_LCsGLONASS.push_back(t_lc::GIM); 271 335 } 272 } 273 } 274 if (settings.value("PPP/lcGLONASS").toString() == "Pi") { 275 if (opt->_obsModelType == t_pppOptions::IF) { 276 opt->_LCsGLONASS.push_back(t_lc::cIF); 277 } 278 else { 279 opt->_LCsGLONASS.push_back(t_lc::c1); 280 opt->_LCsGLONASS.push_back(t_lc::c2); 281 if (opt->_pseudoObsIono) { 282 opt->_LCsGLONASS.push_back(t_lc::GIM); 283 } 284 } 285 } 286 if (settings.value("PPP/lcGLONASS").toString() == "Li") { 287 if (opt->_obsModelType == t_pppOptions::IF) { 288 opt->_LCsGLONASS.push_back(t_lc::lIF); 289 } 290 else { 291 opt->_LCsGLONASS.push_back(t_lc::l1); 292 opt->_LCsGLONASS.push_back(t_lc::l2); 293 if (opt->_pseudoObsIono) { 294 opt->_LCsGLONASS.push_back(t_lc::GIM); 295 } 296 } 336 } 337 if (settings.value("PPP/lcGLONASS").toString() == "L1") { 338 opt->_LCsGLONASS.push_back(t_lc::l1); 339 if (opt->_pseudoObsIono) { 340 opt->_LCsGLONASS.push_back(t_lc::GIM); 341 } 342 } 343 if (settings.value("PPP/lcGLONASS").toString() == "P3&L3") { 344 opt->_LCsGLONASS.push_back(t_lc::cIF); 345 opt->_LCsGLONASS.push_back(t_lc::lIF); 346 } 347 if (settings.value("PPP/lcGLONASS").toString() == "P3") { 348 opt->_LCsGLONASS.push_back(t_lc::cIF); 349 } 350 if (settings.value("PPP/lcGLONASS").toString() == "L3") { 351 opt->_LCsGLONASS.push_back(t_lc::lIF); 297 352 } 298 353 // Galileo 299 354 if (settings.value("PPP/lcGalileo").toString() == "Pi&Li") { 300 if (opt->_obsModelType == t_pppOptions::IF) { 301 opt->_LCsGalileo.push_back(t_lc::cIF); 302 opt->_LCsGalileo.push_back(t_lc::lIF); 303 } 304 else { 355 opt->_LCsGalileo.push_back(t_lc::c1); 356 opt->_LCsGalileo.push_back(t_lc::c2); 357 opt->_LCsGalileo.push_back(t_lc::l1); 358 opt->_LCsGalileo.push_back(t_lc::l2); 359 if (opt->_pseudoObsIono) { 360 opt->_LCsGalileo.push_back(t_lc::GIM); 361 } 362 } 363 if (settings.value("PPP/lcGalileo").toString() == "Pi") { 364 opt->_LCsGalileo.push_back(t_lc::c1); 365 opt->_LCsGalileo.push_back(t_lc::c2); 366 if (opt->_pseudoObsIono) { 367 opt->_LCsGalileo.push_back(t_lc::GIM); 368 } 369 } 370 if (settings.value("PPP/lcGalileo").toString() == "Li") { 371 opt->_LCsGalileo.push_back(t_lc::l1); 372 opt->_LCsGalileo.push_back(t_lc::l2); 373 if (opt->_pseudoObsIono) { 374 opt->_LCsGalileo.push_back(t_lc::GIM); 375 } 376 } 377 if (settings.value("PPP/lcGalileo").toString() == "P1&L1") { 378 opt->_LCsGalileo.push_back(t_lc::c1); 379 opt->_LCsGalileo.push_back(t_lc::l1); 380 if (opt->_pseudoObsIono) { 381 opt->_LCsGalileo.push_back(t_lc::GIM); 382 } 383 } 384 if (settings.value("PPP/lcGalileo").toString() == "P1") { 305 385 opt->_LCsGalileo.push_back(t_lc::c1); 306 opt->_LCsGalileo.push_back(t_lc::c2);307 opt->_LCsGalileo.push_back(t_lc::l1);308 opt->_LCsGalileo.push_back(t_lc::l2);309 386 if (opt->_pseudoObsIono) { 310 387 opt->_LCsGalileo.push_back(t_lc::GIM); 311 388 } 312 } 313 } 314 if (settings.value("PPP/lcGalileo").toString() == "Pi") { 315 if (opt->_obsModelType == t_pppOptions::IF) { 316 opt->_LCsGalileo.push_back(t_lc::cIF); 317 } 318 else { 319 opt->_LCsGalileo.push_back(t_lc::c1); 320 opt->_LCsGalileo.push_back(t_lc::c2); 321 if (opt->_pseudoObsIono) { 322 opt->_LCsGalileo.push_back(t_lc::GIM); 323 } 324 } 325 } 326 if (settings.value("PPP/lcGalileo").toString() == "Li") { 327 if (opt->_obsModelType == t_pppOptions::IF) { 328 opt->_LCsGalileo.push_back(t_lc::lIF); 329 } 330 else { 331 opt->_LCsGalileo.push_back(t_lc::l1); 332 opt->_LCsGalileo.push_back(t_lc::l2); 333 if (opt->_pseudoObsIono) { 334 opt->_LCsGalileo.push_back(t_lc::GIM); 335 } 336 } 389 } 390 if (settings.value("PPP/lcGalileo").toString() == "L1") { 391 opt->_LCsGalileo.push_back(t_lc::l1); 392 if (opt->_pseudoObsIono) { 393 opt->_LCsGalileo.push_back(t_lc::GIM); 394 } 395 } 396 if (settings.value("PPP/lcGalileo").toString() == "P3&L3") { 397 opt->_LCsGalileo.push_back(t_lc::cIF); 398 opt->_LCsGalileo.push_back(t_lc::lIF); 399 } 400 if (settings.value("PPP/lcGalileo").toString() == "P3") { 401 opt->_LCsGalileo.push_back(t_lc::cIF); 402 } 403 if (settings.value("PPP/lcGalileo").toString() == "L3") { 404 opt->_LCsGalileo.push_back(t_lc::lIF); 337 405 } 338 406 // BDS 339 407 if (settings.value("PPP/lcBDS").toString() == "Pi&Li") { 340 if (opt->_obsModelType == t_pppOptions::IF) { 341 opt->_LCsBDS.push_back(t_lc::cIF); 342 opt->_LCsBDS.push_back(t_lc::lIF); 343 } 344 else { 408 opt->_LCsBDS.push_back(t_lc::c1); 409 opt->_LCsBDS.push_back(t_lc::c2); 410 opt->_LCsBDS.push_back(t_lc::l1); 411 opt->_LCsBDS.push_back(t_lc::l2); 412 if (opt->_pseudoObsIono) { 413 opt->_LCsBDS.push_back(t_lc::GIM); 414 } 415 } 416 if (settings.value("PPP/lcBDS").toString() == "Pi") { 417 opt->_LCsBDS.push_back(t_lc::c1); 418 opt->_LCsBDS.push_back(t_lc::c2); 419 if (opt->_pseudoObsIono) { 420 opt->_LCsBDS.push_back(t_lc::GIM); 421 } 422 } 423 if (settings.value("PPP/lcBDS").toString() == "Li") { 424 opt->_LCsBDS.push_back(t_lc::l1); 425 opt->_LCsBDS.push_back(t_lc::l2); 426 if (opt->_pseudoObsIono) { 427 opt->_LCsBDS.push_back(t_lc::GIM); 428 } 429 } 430 if (settings.value("PPP/lcBDS").toString() == "P1&L1") { 431 opt->_LCsBDS.push_back(t_lc::c1); 432 opt->_LCsBDS.push_back(t_lc::l1); 433 if (opt->_pseudoObsIono) { 434 opt->_LCsBDS.push_back(t_lc::GIM); 435 } 436 } 437 if (settings.value("PPP/lcBDS").toString() == "P1") { 345 438 opt->_LCsBDS.push_back(t_lc::c1); 346 opt->_LCsBDS.push_back(t_lc::c2);347 opt->_LCsBDS.push_back(t_lc::l1);348 opt->_LCsBDS.push_back(t_lc::l2);349 439 if (opt->_pseudoObsIono) { 350 440 opt->_LCsBDS.push_back(t_lc::GIM); 351 441 } 352 } 353 } 354 if (settings.value("PPP/lcBDS").toString() == "Pi") { 355 if (opt->_obsModelType == t_pppOptions::IF) { 356 opt->_LCsBDS.push_back(t_lc::cIF); 357 } 358 else { 359 opt->_LCsBDS.push_back(t_lc::c1); 360 opt->_LCsBDS.push_back(t_lc::c2); 361 if (opt->_pseudoObsIono) { 362 opt->_LCsBDS.push_back(t_lc::GIM); 363 } 364 } 365 } 366 if (settings.value("PPP/lcBDS").toString() == "Li") { 367 if (opt->_obsModelType == t_pppOptions::IF) { 368 opt->_LCsBDS.push_back(t_lc::lIF); 369 } 370 else { 371 opt->_LCsBDS.push_back(t_lc::l1); 372 opt->_LCsBDS.push_back(t_lc::l2); 373 if (opt->_pseudoObsIono) { 374 opt->_LCsBDS.push_back(t_lc::GIM); 375 } 376 } 377 } 442 } 443 if (settings.value("PPP/lcBDS").toString() == "L1") { 444 opt->_LCsBDS.push_back(t_lc::l1); 445 if (opt->_pseudoObsIono) { 446 opt->_LCsBDS.push_back(t_lc::GIM); 447 } 448 } 449 if (settings.value("PPP/lcBDS").toString() == "P3&L3") { 450 opt->_LCsBDS.push_back(t_lc::cIF); 451 opt->_LCsBDS.push_back(t_lc::lIF); 452 } 453 if (settings.value("PPP/lcBDS").toString() == "P3") { 454 opt->_LCsBDS.push_back(t_lc::cIF); 455 } 456 if (settings.value("PPP/lcBDS").toString() == "L3") { 457 opt->_LCsBDS.push_back(t_lc::lIF); 458 } 459 460 QString priorStr = QString::fromStdString(opt->_signalPriorities); 461 QStringList priorList = priorStr.split(" ", QString::SkipEmptyParts); 462 QStringList hlpList; 463 vector<char> systems = opt->systems(); 464 for (unsigned iSys= 0; iSys < systems.size(); iSys++) { 465 char sys = systems[iSys]; 466 for (int ii = 0; ii < priorList.size(); ii++) { 467 if (priorList[ii].indexOf(":") != -1) { 468 hlpList = priorList[ii].split(":", QString::SkipEmptyParts); 469 if (hlpList.size() == 2 && hlpList[0].length() == 1 && hlpList[0][0] == sys) { 470 hlpList = hlpList[1].split("&", QString::SkipEmptyParts); 471 if (hlpList.size() == 2) { 472 for (int jj = 0; jj < hlpList[0].size(); jj++) { 473 char bb = hlpList[0][jj].toLatin1(); 474 if (sys == 'G' && opt->_frqBandsGPS.size() < 2) { 475 opt->_frqBandsGPS.push_back(bb); 476 } 477 else if (sys == 'R' && opt->_frqBandsGLONASS.size() < 2) { 478 opt->_frqBandsGLONASS.push_back(bb); 479 } 480 else if (sys == 'E' && opt->_frqBandsGalileo.size() < 2) { 481 opt->_frqBandsGalileo.push_back(bb); 482 } 483 else if (sys == 'C' && opt->_frqBandsBDS.size() < 2) { 484 opt->_frqBandsBDS.push_back(bb); 485 } 486 } 487 } 488 } 489 } 490 } 491 } 492 #endif 493 494 378 495 // Information from the coordinate file 379 496 // ------------------------------------ -
trunk/BNC/src/pppOptions.cpp
r8905 r10251 79 79 // 80 80 ////////////////////////////////////////////////////////////////////////////// 81 const std::vector<char>& t_pppOptions::frqBands(char system) const { 82 83 if (system == 'R') { 84 return _frqBandsGLONASS; 85 } 86 else if (system == 'E') { 87 return _frqBandsGalileo; 88 } 89 else if (system == 'C') { 90 return _frqBandsBDS; 91 } 92 else { 93 return _frqBandsGPS; 94 } 95 } 96 97 // 98 ////////////////////////////////////////////////////////////////////////////// 81 99 bool t_pppOptions::useOrbClkCorr() const { 82 100 if (_realTime) { -
trunk/BNC/src/pppOptions.h
r10034 r10251 11 11 class t_pppOptions { 12 12 public: 13 enum e_type {IF, UncombPPP, PPPRTK};13 enum iono_type {est,PPP_RTK}; 14 14 t_pppOptions(); 15 15 ~t_pppOptions(); … … 17 17 std::vector<char> systems() const; 18 18 const std::vector<t_lc::type>& LCs(char system) const; 19 const std::vector<char>& frqBands(char system) const; 19 20 std::vector<t_lc::type> ambLCs(char system) const; 20 21 std::vector<t_lc::type> codeLCs(char system) const; … … 27 28 } 28 29 29 e_type _obsModelType; 30 QStringList _obsmodelTypeStr = QStringList() 31 << "IF PPP" 32 << "Uncombined PPP"; 30 iono_type _ionoModelType; 33 31 bool _realTime; 34 32 std::string _crdFile; … … 77 75 std::vector<t_lc::type> _LCsGalileo; 78 76 std::vector<t_lc::type> _LCsBDS; 77 std::vector<char> _frqBandsGPS; 78 std::vector<char> _frqBandsGLONASS; 79 std::vector<char> _frqBandsGalileo; 80 std::vector<char> _frqBandsBDS; 79 81 bool _pseudoObsIono; 80 82 bool _refSatRequired; -
trunk/BNC/src/pppWidgets.cpp
r10250 r10251 85 85 _lcGalileo = new QComboBox(); _lcGalileo ->setObjectName("PPP/lcGalileo"); _widgets << _lcGalileo; 86 86 _lcBDS = new QComboBox(); _lcBDS ->setObjectName("PPP/lcBDS"); _widgets << _lcBDS; 87 _modelObs = new QComboBox(); _modelObs ->setObjectName("PPP/modelObs"); _widgets << _modelObs; 88 _pseudoObs = new QComboBox(); _pseudoObs ->setObjectName("PPP/pseudoObs"); _widgets << _pseudoObs; 87 _constraints = new QComboBox(); _constraints ->setObjectName("PPP/constraints"); _widgets << _constraints; 89 88 _sigmaC1 = new QLineEdit(); _sigmaC1 ->setObjectName("PPP/sigmaC1"); _widgets << _sigmaC1; 90 89 _sigmaL1 = new QLineEdit(); _sigmaL1 ->setObjectName("PPP/sigmaL1"); _widgets << _sigmaL1; … … 116 115 _dataSource->addItems(QString(",Real-Time Streams,RINEX Files").split(",")); 117 116 connect(_dataSource, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotEnableWidgets())); 118 connect(_pseudoObs, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotEnableWidgets())); 119 connect(_modelObs, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotEnableWidgets())); 117 connect(_constraints, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotEnableWidgets())); 120 118 connect(_snxtroPath, SIGNAL(textChanged(const QString &)), this, SLOT(slotPPPTextChanged())); 121 119 connect(_snxtroAc, SIGNAL(textChanged(const QString &)), this, SLOT(slotPPPTextChanged())); … … 130 128 _lcGPS->addItems(QString("P3,P3&L3").split(",")); 131 129 #else 132 _lcGPS->addItems(QString("Pi&Li,Pi,Li, no").split(","));130 _lcGPS->addItems(QString("Pi&Li,Pi,Li,P1&L1,P1,L1,P3&L3,P3,L3,no").split(",")); 133 131 #endif 134 132 … … 136 134 #ifdef USE_PPP_SSR_I 137 135 _lcGLONASS->addItems(QString("no,P3,L3,P3&L3").split(",")); 138 #else 139 _lcGLONASS->addItems(QString("Pi&Li,Pi,Li, no").split(","));136 #else 137 _lcGLONASS->addItems(QString("Pi&Li,Pi,Li,P1&L1,P1,L1,P3&L3,P3,L3,no").split(",")); 140 138 #endif 141 139 … … 143 141 #ifdef USE_PPP_SSR_I 144 142 _lcGalileo->addItems(QString("no,P3,L3,P3&L3").split(",")); 145 #else 146 _lcGalileo->addItems(QString("Pi&Li,Pi,Li, no").split(","));143 #else 144 _lcGalileo->addItems(QString("Pi&Li,Pi,Li,P1&L1,P1,L1,P3&L3,P3,L3,no").split(",")); 147 145 #endif 148 146 149 147 _lcBDS->setEditable(false); 150 #ifdef USE_PPP_SSR_I148 #ifdef USE_PPP_SSR_I 151 149 _lcBDS->addItems(QString("no,P3,L3,P3&L3").split(",")); 152 #else 153 _lcBDS->addItems(QString("Pi&Li,Pi,Li, no").split(","));150 #else 151 _lcBDS->addItems(QString("Pi&Li,Pi,Li,P1&L1,P1,L1,P3&L3,P3,L3,no").split(",")); 154 152 #endif 155 153 156 _modelObs->setEditable(false); 157 _pseudoObs->setEditable(false); 158 #ifdef USE_PPP_SSR_I 159 _modelObs->addItems(QString("Ionosphere-free PPP").split(",")); 160 _pseudoObs->addItems(QString("no").split(",")); 161 #else 162 _modelObs->addItems(QString("Uncombined PPP,Ionosphere-free PPP").split(",")); 163 _pseudoObs->addItems(QString("no,Ionosphere").split(",")); 154 #ifdef USE_PPP 155 _constraints->setEditable(false); 156 _constraints->addItems(QString("no,Ionosphere: pseudo-obs").split(",")); 164 157 #endif 165 166 158 _snxtroSampl->setEditable(false); 167 159 _snxtroSampl->addItems(QString("1 sec,5 sec,10 sec,30 sec,60 sec,300 sec").split(",")); … … 218 210 // WhatsThis, PPP (3) 219 211 // ------------------ 220 _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. You can also specify a 'NMEA Port' to output coordinates in NMEA format through an IP port of your local host. Specify a list of signal priorities for the observations that shall be used for PPP.</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 9-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></ul></p><p>'Signal Priorities' can be specified as equal for all systems, as system specific or as system and frequency specific. Default for all PPP models is the following list of 'Signal Priorities': <ul><li>'G:12&CWPSLX R:12&CP E:1&CBX E:5&QIX C:26&IQX'</li></ul><p>But it is recommended to specify it in more detail per individual station, e.g.:</p> <ul> <li>'G:12&W R:12&P E:1&C E:5&Q C:26&I'</li> </ul> <p> <i>[key: PPP/staTable]</i></p>")); 221 212 #ifdef USE_PPP 213 _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. You can also specify a 'NMEA Port' to output coordinates in NMEA format through an IP port of your local host. Specify a list of signal priorities for the observations that shall be used for PPP.</p>" 214 "<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></ul></p>" 215 "<p>'Signal Priorities' can be specified as system (G,R,E,C) and frequency specific. Two frequency bands per GNSS are allowed and will be considered. The following frequency bands are available for selection: <ul>" 216 "<li>G: 1, 2, 5</li>" 217 "<li>R: 1, 2</li>" 218 "<li>E: 1, 5, 6, 7, 8</li>" 219 "<li>C: 1, 2, 5, 6, 7, 8</li>" 220 "</ul>" 221 "<p>'Default is the following list of 'Signal Priorities': <ul><li>'G:12&CWPSLX R:12&CP E:1&CBX E:5&QIX C:26&IQX'</li></ul>" 222 "<p>But it is recommended to specify it in more detail per individual station, e.g.:</p> <ul> <li>'G:12&W R:12&P E:1&C E:5&Q C:26&I'</li></ul> " 223 "<p> <i>[key: PPP/staTable]</i></p>")); 224 #else 225 _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. 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>")); 226 #endif 222 227 // WhatsThis, PPP (4) 223 228 // ------------------ … … 262 267 delete _lcGalileo; 263 268 delete _lcBDS; 264 delete _modelObs; 265 delete _pseudoObs; 269 delete _constraints; 266 270 delete _sigmaC1; 267 271 delete _sigmaL1; … … 314 318 _lcBDS->setCurrentIndex(ii); 315 319 } 316 ii = _modelObs->findText(settings.value(_modelObs->objectName()).toString()); 317 if (ii != -1) { 318 _modelObs->setCurrentIndex(ii); 319 } 320 ii = _pseudoObs->findText(settings.value(_pseudoObs->objectName()).toString()); 321 if (ii != -1) { 322 _pseudoObs->setCurrentIndex(ii); 320 ii = _constraints->findText(settings.value(_constraints->objectName()).toString()); 321 if (ii != -1) { 322 _constraints->setCurrentIndex(ii); 323 323 } 324 324 ii = _snxtroIntr->findText(settings.value(_snxtroIntr->objectName()).toString()); … … 477 477 settings.setValue(_lcGalileo ->objectName(), _lcGalileo ->currentText()); 478 478 settings.setValue(_lcBDS ->objectName(), _lcBDS ->currentText()); 479 settings.setValue(_modelObs ->objectName(), _modelObs ->currentText()); 480 settings.setValue(_pseudoObs ->objectName(), _pseudoObs ->currentText()); 479 settings.setValue(_constraints ->objectName(), _constraints ->currentText()); 481 480 settings.setValue(_sigmaC1 ->objectName(), _sigmaC1 ->text()); 482 481 settings.setValue(_sigmaL1 ->objectName(), _sigmaL1 ->text()); … … 520 519 const static QPalette paletteGray(QColor(230, 230, 230)); 521 520 522 bool allDisabled = _dataSource->currentText() == ""; 523 bool realTime = _dataSource->currentText() == "Real-Time Streams"; 524 bool rinexFiles = _dataSource->currentText() == "RINEX Files"; 525 bool enablePseudoObs; 526 if (_modelObs->currentText() == "PPP-RTK" || 527 _modelObs->currentText() == "Ionosphere-free PPP") { 528 enablePseudoObs = false; 529 } 530 else { 531 enablePseudoObs = true; 532 } 533 bool pseudoObsUsed = _pseudoObs->currentText() == "Ionosphere"; 521 bool allDisabled = _dataSource->currentText() == ""; 522 bool realTime = _dataSource->currentText() == "Real-Time Streams"; 523 bool rinexFiles = _dataSource->currentText() == "RINEX Files"; 524 bool pseudoObsIono = _constraints->currentText() == "Ionosphere: pseudo-obs"; 534 525 535 526 QListIterator<QWidget*> it(_widgets); … … 568 559 } 569 560 570 if (enablePseudoObs) { 571 _pseudoObs->setEnabled(true); 572 if (pseudoObsUsed) { 573 _sigmaGIM->setEnabled(true); 574 _maxResGIM->setEnabled(true); 575 } else { 576 _sigmaGIM->setEnabled(false); 577 _maxResGIM->setEnabled(false); 578 } 561 562 if (pseudoObsIono) { 563 _sigmaGIM->setEnabled(true); 564 _maxResGIM->setEnabled(true); 579 565 } else { 580 _pseudoObs->setEnabled(false);581 566 _sigmaGIM->setEnabled(false); 582 567 _maxResGIM->setEnabled(false); -
trunk/BNC/src/pppWidgets.h
r10127 r10251 69 69 QComboBox* _lcGalileo; 70 70 QComboBox* _lcBDS; 71 QComboBox* _modelObs; 72 QComboBox* _pseudoObs; 71 QComboBox* _constraints; 73 72 QLineEdit* _sigmaC1; 74 73 QLineEdit* _sigmaL1;
Note:
See TracChangeset
for help on using the changeset viewer.