Changeset 10665 in ntrip
- Timestamp:
- Jun 4, 2025, 11:58:08 AM (2 weeks ago)
- Location:
- trunk/BNC/src/combination
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/src/combination/bnccomb.cpp
r10619 r10665 976 976 // Check Satellite Positions for Outliers 977 977 // -------------------------------------- 978 if (checkOrbits(epoTime, sys, out) != success) { 978 if (checkOrbits(epoTime, sys, out, resCorr) != success) { 979 979 return failure; 980 980 } … … 1229 1229 ++iObs; 1230 1230 1231 if (corr->_acName == _masterOrbitAC[sys] && resCorr.find(prn) == resCorr.end()) {1232 resCorr[prn] = new cmbCorr(*corr);1233 }1234 1235 1231 for (int iPar = 1; iPar <= _params[sys].size(); iPar++) { 1236 1232 cmbParam* pp = _params[sys][iPar-1]; 1237 1233 AA(iObs, iPar) = pp->partial(sys, corr->_acName, prn); 1238 1234 } 1239 1240 ll(iObs) = (corr->_clkCorr._dClk * t_CST::c - corr->_satCodeBiasIF) - DotProduct(AA.Row(iObs), x0); 1235 // Consistency correction to keep the combined clock consistent to MeanOrb 1236 // ----------------------------------------------------------------------- 1237 double dC_radial = (corr->_diffRao.t() * resCorr[prn]->_orbCorr._xr).AsScalar() 1238 / (resCorr[prn]->_orbCorr._xr).norm_Frobenius(); 1239 1240 ll(iObs) = (corr->_clkCorr._dClk * t_CST::c - corr->_satCodeBiasIF + dC_radial) - DotProduct(AA.Row(iObs), x0); 1241 1241 1242 1242 PP(iObs, iObs) *= 1.0 / (corr->_weightFactor * corr->_weightFactor); … … 1288 1288 // Check Satellite Positions for Outliers 1289 1289 // -------------------------------------- 1290 if (checkOrbits(epoTime, sys, out) != success) { 1290 if (checkOrbits(epoTime, sys, out, resCorr) != success) { 1291 1291 return failure; 1292 1292 } … … 1295 1295 // ---------------------- 1296 1296 while (_running) { 1297 1298 // Remove Satellites that are not in Master1299 // ----------------------------------------1300 QMutableVectorIterator<cmbCorr*> it(corrs(sys));1301 while (it.hasNext()) {1302 cmbCorr* corr = it.next();1303 QString prnStr = corr->_prn;1304 bool foundMaster = false;1305 QVectorIterator<cmbCorr*> itHlp(corrs(sys));1306 while (itHlp.hasNext()) {1307 cmbCorr* corrHlp = itHlp.next();1308 QString prnHlp = corrHlp->_prn;1309 QString ACHlp = corrHlp->_acName;1310 if (ACHlp == _masterOrbitAC[sys] && prnStr == prnHlp) {1311 foundMaster = true;1312 break;1313 }1314 }1315 if (!foundMaster) {1316 delete corr;1317 it.remove();1318 }1319 }1320 1321 1297 // Count Number of Observations per Satellite and per AC 1322 1298 // ----------------------------------------------------- … … 1436 1412 // Check Satellite Positions for Outliers 1437 1413 //////////////////////////////////////////////////////////////////////////// 1438 t_irc bncComb::checkOrbits(bncTime epoTime, char sys, QTextStream& out) { 1414 t_irc bncComb::checkOrbits(bncTime epoTime, char sys, QTextStream& out, QMap<QString, cmbCorr*>& resCorr) { 1439 1415 1440 1416 // Switch to last ephemeris (if possible) … … 1510 1486 } 1511 1487 corr->_diffRao = corr->_orbCorr._xr - meanRao[prn].Rows(1,3); 1488 1512 1489 if (maxDiff.find(prn) == maxDiff.end()) { 1513 1490 maxDiff[prn] = corr; … … 1523 1500 1524 1501 if (_ACs.size() == 1) { 1502 QVectorIterator<cmbCorr*> it(corrs(sys)); 1503 while (it.hasNext()) { 1504 cmbCorr* corr = it.next(); 1505 QString prn = corr->_prn; 1506 if (corr->_acName == _masterOrbitAC[sys] && 1507 resCorr.find(prn) == resCorr.end()) { 1508 resCorr[prn] = new cmbCorr(*corr); 1509 } 1510 } 1511 // Remove satellites that are not in masterOrbit 1512 // and compute differences wrt. masterOrbit 1513 // ---------------------------------------------- 1514 QMutableVectorIterator<cmbCorr*> im(corrs(sys)); 1515 while (im.hasNext()) { 1516 cmbCorr* corr = im.next(); 1517 QString prn = corr->_prn; 1518 if (resCorr.find(prn) == resCorr.end()) { 1519 delete corr; 1520 im.remove(); 1521 } 1522 else { 1523 corr->_diffRao = resCorr[prn]->_orbCorr._xr - corr->_orbCorr._xr; 1524 } 1525 } 1525 1526 break; 1526 1527 } … … 1539 1540 else if (corr == maxDiff[prn]) { 1540 1541 double norm = corr->_diffRao.NormFrobenius(); 1541 if (norm > (_MAX_DISPLACEMENT)) { 1542 double facSys = 1.0; 1543 if (sys == 'C' && prn.mid(1,2).toInt() <= 16) { // BDS-2 1544 facSys *= 5.0; 1545 } 1546 if (norm > (_MAX_DISPLACEMENT * facSys)) { 1542 1547 out << epoTime.datestr().c_str() << " " 1543 1548 << epoTime.timestr().c_str() << " " … … 1553 1558 } 1554 1559 } 1555 1560 // Set master orbit 1561 // ----------------------------------------- 1556 1562 if (!removed) { 1563 QVectorIterator<cmbCorr*> it(corrs(sys)); 1564 while (it.hasNext()) { 1565 cmbCorr* corr = it.next(); 1566 QString prn = corr->_prn; 1567 if (corr->_acName == _masterOrbitAC[sys] && 1568 resCorr.find(prn) == resCorr.end()) { 1569 resCorr[prn] = new cmbCorr(*corr); 1570 } 1571 } 1572 // Remove satellites that are not in masterOrbit 1573 // and compute differences wrt. masterOrbit 1574 // ---------------------------------------------- 1575 QMutableVectorIterator<cmbCorr*> im(corrs(sys)); 1576 while (im.hasNext()) { 1577 cmbCorr* corr = im.next(); 1578 QString prn = corr->_prn; 1579 if (resCorr.find(prn) == resCorr.end()) { 1580 delete corr; 1581 im.remove(); 1582 } 1583 else { 1584 corr->_diffRao = resCorr[prn]->_orbCorr._xr - corr->_orbCorr._xr; 1585 } 1586 } 1557 1587 break; 1558 1588 } -
trunk/BNC/src/combination/bnccomb.h
r10619 r10665 244 244 void printResults(bncTime epoTime, QTextStream& out, const QMap<QString, cmbCorr*>& resCorr); 245 245 void switchToLastEph(t_eph* lastEph, cmbCorr* corr); 246 t_irc checkOrbits(bncTime epoTime, char sys, QTextStream& out); 246 t_irc checkOrbits(bncTime epoTime, char sys, QTextStream& out, QMap<QString, cmbCorr*>& resCorr); 247 247 bool excludeSat(const t_prn& prn, const QStringList excludeSats) const; 248 248 QVector<cmbCorr*>& corrs(char sys) {return _buffer[sys].corrs;}
Note:
See TracChangeset
for help on using the changeset viewer.