Changeset 11099 in ntrip
- Timestamp:
- Oct 19, 2026, 10:30:14 AM (less than one hour ago)
- Location:
- trunk/BNC
- Files:
-
- 3 edited
-
CHANGELOG.md (modified) (1 diff)
-
src/combination/bnccomb.cpp (modified) (5 diffs)
-
src/combination/bnccomb.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/CHANGELOG.md
r11098 r11099 11 11 - ADDED: Combination: hourly report of AC satellites persistently rejected as outliers, and of satellites skipped because fewer than 2 ACs provide corrections 12 12 - CHANGED: Combination: the orbits of a system come from the first stream in the table providing that system; after an outage of that stream, BNC switches back to it once it delivers again for 60 s (before, a single missing epoch moved the orbits permanently to another stream) 13 - CHANGED: Combination: the random walk of the AC satellite offsets is defined per time (1 cm per 10 s) instead of per epoch, so the result no longer depends on the sampling interval (at 5 s the offsets were sqrt(2) noisier per hour) 14 - CHANGED: Combination: an AC excluded from the clock datum because of inconsistent code biases is used again only after 12 passing checks in a row (1 hour), not after the first one (a borderline AC changed the clock datum every 5 minutes) 13 15 - ADDED: Combination of APC (SSRA) and CoM (SSRC) streams together: with an ANTEX file the combination is done in the CoM frame, the orbits of the APC streams are converted to CoM; ACs not combined because of a different reference point are reported 14 16 - ADDED: Option 'Reference Signals' (key ssrRefSignals): reference signals of the satellite clocks per GNSS for the combination (AC clock referral, code biases from the Bias SINEX file) and the SSR QC, default IGS Real-Time convention G:1W&2W R:1P&2P E:1C&5Q C:2I&6I J:1C&2L S:1C&5Q, e.g. for a switch of BDS to C1P/C5P or of QZSS to L1/L5 -
trunk/BNC/src/combination/bnccomb.cpp
r11098 r11099 34 34 35 35 const double sig0_offACSat = 1000.0; 36 const double sigP_offACSat = 0.01; 36 const double sigP_offACSat = 0.01; // per REF_SAMPL_offACSat, scaled with the time between the epochs 37 const double REF_SAMPL_offACSat = 10.0; // [s] 37 38 38 39 const double sig0_clkSat = 100.0; … … 1183 1184 // Prediction Step 1184 1185 // --------------- 1186 // The random walk of the AC satellite offsets is defined per time, not per 1187 // epoch (sigP_offACSat per REF_SAMPL_offACSat seconds), so that the result 1188 // does not depend on the combination sampling interval 1189 double dt = _lastFilterEpoch[sys].valid() ? epoTime - _lastFilterEpoch[sys] : double(_cmbSampl); 1190 if (dt <= 0.0) { 1191 dt = double(_cmbSampl); 1192 } 1193 _lastFilterEpoch[sys] = epoTime; 1185 1194 int nPar = _params[sys].size(); 1186 1195 ColumnVector x0(nPar); … … 1194 1203 } 1195 1204 else { 1196 _QQ[sys](iPar,iPar) += pp->sigP * pp->sigP; 1205 double fac = (pp->type == cmbParam::offACSat) ? dt / REF_SAMPL_offACSat : 1.0; 1206 _QQ[sys](iPar,iPar) += pp->sigP * pp->sigP * fac; 1197 1207 } 1198 1208 x0(iPar) = pp->xx; … … 1349 1359 double slope = (sxx > 0.0) ? sxy / sxx : 0.0; 1350 1360 double corrCoeff = (sxx > 0.0 && syy > 0.0) ? sxy / sqrt(sxx * syy) : 0.0; 1361 // Hysteresis: a flagged AC is used for the clock datum again only after 1362 // REINCLUDE_CHECKS passing checks in a row (1 hour). Right after the 1363 // exclusion the offsets are reset and not yet converged, so a single 1364 // passing check does not prove consistency; a borderline AC would 1365 // otherwise change the clock datum every few minutes. 1366 const int REINCLUDE_CHECKS = 12; 1351 1367 if (spread < MIN_SPREAD || slope < MIN_SLOPE || corrCoeff < MIN_CORR) { 1368 if (_biasInconsistent.contains(key) && ++_biasConsistentChecks[key] < REINCLUDE_CHECKS) { 1369 continue; 1370 } 1371 _biasConsistentChecks.remove(key); 1352 1372 if (_biasInconsistent.remove(key)) { 1353 1373 QString msg = QString("%1 %2 code biases consistent with its clocks again, " … … 1372 1392 .arg(acName).arg(sys).arg(refSig).arg(nn) 1373 1393 .arg(spread, 0, 'f', 3).arg(slope, 0, 'f', 2).arg(corrCoeff, 0, 'f', 2); 1394 _biasConsistentChecks[key] = 0; 1374 1395 if (!_biasInconsistent.contains(key)) { 1375 1396 _biasInconsistent.insert(key); -
trunk/BNC/src/combination/bnccomb.h
r11098 r11099 257 257 QMap<QString, bncTime> _biasCheckWarned; // last inconsistency warning per AC and system 258 258 QSet<QString> _biasInconsistent; // AC+system excluded from the clock datum 259 QMap<QString, int> _biasConsistentChecks; // flagged AC+system: passing checks in a row 260 QMap<char, bncTime> _lastFilterEpoch; // per system: last epoch of the filter prediction 259 261 void checkBiasConsistency(bncTime epoTime, char sys, QTextStream& out); 260 262 void checkPersistentOutliers(bncTime epoTime, char sys, QTextStream& out);
Note:
See TracChangeset
for help on using the changeset viewer.
