Ignore:
Timestamp:
Nov 13, 2026, 6:46:33 PM (79 minutes ago)
Author:
stuerze
Message:

kalman filter combination improved

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/combination/bnccomb.cpp

    r11195 r11205  
    18701870  }
    18711871
    1872   const int nCon = (_method == filter) ? 1 + maxSat + excludedACs.size() : 0;
     1872  // ACs of this epoch, each with a zero-sum condition of its satellite offsets
     1873  QStringList epoACs;
     1874  for (int ii = 0; ii < corrs(sys).size(); ii++) {
     1875    if (!epoACs.contains(corrs(sys)[ii]->_acName)) {
     1876      epoACs << corrs(sys)[ii]->_acName;
     1877    }
     1878  }
     1879
     1880  const int nCon = (_method == filter) ? 1 + maxSat + epoACs.size() : 0;
    18731881
    18741882  AA.ReSize(nObs+nCon, nPar);  AA = 0.0;
    … …  
    19441952    int iCond = 1;
    19451953    QSet<int>     offExcluded; // offsets excluded from the zero-sum condition of their satellite
     1954    QSet<int>     offInDatum;  // offsets in the zero-sum condition of their satellite
    19461955    QSet<QString> acsInDatum;  // ACs with at least one offset in the zero-sum conditions
    19471956    // GNSS
    … …  
    19691978        if (offUsed.contains(iPar)) {
    19701979          AA(nObs+iCond, iPar) = 1.0;
     1980          offInDatum << iPar;
    19711981          acsInDatum.insert(_params[sys][iPar-1]->AC);
    19721982        }
    … …  
    19761986      }
    19771987    }
    1978     // ACs with all their offsets excluded from the zero-sum conditions above:
    1979     // the sum of their offsets is constrained to zero (otherwise not
    1980     // separable from the AC's epoch offset)
    1981     for (const QString& acName : excludedACs) {
     1988    // Zero-sum condition of the satellite offsets of each AC: without it, the
     1989    // AC epoch offsets can be shifted by a_i, compensated by the satellite
     1990    // offsets and, for a satellite not provided by all ACs, by its combined
     1991    // clock (shift: mean of a_i over the ACs providing it). This would leave
     1992    // the clocks of such satellites to the history of the filter (e.g. G13
     1993    // +1.4 m after a restart). With it, the AC epoch offset is the mean clock
     1994    // difference of the AC. Sum over the offsets in the satellite conditions
     1995    // above; for an AC with all its offsets excluded from them, over these
     1996    // (otherwise not separable from the AC's epoch offset).
     1997    for (const QString& acName : epoACs) {
    19821998      ++iCond;
    1983       if (acsInDatum.contains(acName)) {
    1984         continue;
    1985       }
    19861999      PP(nObs+iCond) = Ph;
    1987       for (int iPar : offExcluded) {
     2000      const QSet<int>& offAC = acsInDatum.contains(acName) ? offInDatum : offExcluded;
     2001      for (int iPar : offAC) {
    19882002        if (_params[sys][iPar-1]->AC == acName) {
    19892003          AA(nObs+iCond, iPar) = 1.0;
Note: See TracChangeset for help on using the changeset viewer.