Changeset 11085 in ntrip for trunk/BNC/src/ssrQc.cpp


Ignore:
Timestamp:
Oct 14, 2026, 11:47:57 AM (3 days ago)
Author:
stuerze
Message:

yaw angle information added to ssrQC

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/ssrQc.cpp

    r11081 r11085  
    182182           << "Checks: epochs and update intervals, gaps (interval > 2 x max(declared, median)), latency,"
    183183           << " completeness w.r.t. healthy broadcast ephemerides," << endl
    184            << "IOD matching, code and phase bias signals, code biases of the reference signals, clock jumps > "
     184           << "IOD matching, code and phase bias signals, yaw angle, code biases of the reference signals, clock jumps > "
    185185           << MAX_CLK_JUMP << " m, largest orbit corrections" << endl;
    186186    }
    … …  
    416416      _phaseSignals[staSys].insert(QString::fromStdString(frqBias._rnxType2ch));
    417417    }
     418    // Yaw angle: new RTCM-SSR has an indicator, old RTCM-SSR and IGS-SSR always
     419    // carry the field, providers without attitude information send zeros
     420    t_satStat& stat = _satStat[QString::fromStdString(bias._staID) + ' ' +
     421                               QString::fromStdString(bias._prn.toString())];
     422    stat.numPB++;
     423    bool yawProvided = (bias._ssrFormat == ssrRtcmNew) ? (bias._satYawInfoInd != 0)
     424                                                       : (bias._yaw != 0.0 || bias._yawRate != 0.0);
     425    if (yawProvided) {
     426      stat.numYaw++;
     427    }
    418428  }
    419429}
    … …  
    707717    if (final) {
    708718      endTime = _staLast.value(staID, _lastTime);
     719      if (endTime < _intervalStart) { // stream without data in the last interval
     720        endTime = _lastTime;
     721      }
    709722    }
    710723    out << endl << "=== SSR QC " << staID.toStdString() << ' '
    … …  
    746759    for (char sys : systems) {
    747760      QMap<QString, unsigned> missOrb, missClk, missCB, missPB, iodUnknown, unhealthy, noEph,
    748                               jumps, missRef;
     761                              jumps, missRef, noYaw, yawPartly;
     762      unsigned numPB = 0, numYaw = 0, yawSats = 0;
    749763      double maxRadial = 0.0, maxAlongCross = 0.0;
    750764      QString maxRadialPrn, maxAlongCrossPrn;
    … …  
    792806        if (stat.refBiasOK) {
    793807          biasIF.push_back(stat.biasIF);
     808        }
     809        if (stat.numPB) {
     810          numPB  += stat.numPB;
     811          numYaw += stat.numYaw;
     812          if (stat.numYaw) {
     813            yawSats++;
     814            if (stat.numYaw < stat.numPB) {
     815              yawPartly[prn] = stat.numPB - stat.numYaw;
     816            }
     817          }
     818          else {
     819            noYaw[prn] = 0;
     820          }
    794821        }
    795822      }
    … …  
    843870        lines << "phase bias signals: " + sigs.join(" ");
    844871      }
     872      if (numPB) {
     873        if (numYaw == 0) {
     874          lines << "yaw angle: not provided";
     875        }
     876        else {
     877          lines << QString("yaw angle: provided for %1 of %2 satellites (%3 % of the phase bias records)")
     878                   .arg(yawSats).arg(yawSats + noYaw.size()).arg(100.0 * numYaw / numPB, 0, 'f', 1);
     879          addSats("phase biases without yaw angle", noYaw);
     880          addSats("phase biases partly without yaw angle (records)", yawPartly);
     881        }
     882      }
    845883      addSats(QString("clock jumps > %1 m").arg(MAX_CLK_JUMP), jumps);
    846884      if (!maxRadialPrn.isEmpty()) {
Note: See TracChangeset for help on using the changeset viewer.