Changeset 10955 in ntrip for trunk/BNC/src/bncantex.h


Ignore:
Timestamp:
Jul 3, 2026, 11:10:42 AM (6 weeks ago)
Author:
stuerze
Message:

Possibility to select how satellite attitude is modelled when converting Antenna Phase Center (APC) corrections to
Center-of-Mass (CoM) positions required for SP3 output

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/bncantex.h

    r10951 r10955  
    4646  double  rcvCorr(const std::string& antName, t_frequency::type frqType,
    4747                  double eleSat, double azSat, bool& found) const;
     48
     49  // Attitude model selection for satCoMcorrection().
     50  enum e_attMode {
     51    ATT_COMPUTED = 0,  // full model: GLONASS yaw-fixed + GPS noon/midnight turn
     52    ATT_NOMINAL  = 1,  // simple nominal Sun-pointing only (no maneuver model)
     53    ATT_EXTERNAL = 2,  // use caller-supplied externalYaw angle [rad]
     54  };
     55
    4856  t_irc   satCoMcorrection(const QString& prn, double Mjd,
    4957                           const ColumnVector& xSat, const ColumnVector& vSat,
    50                            ColumnVector& dx);
     58                           ColumnVector& dx,
     59                           e_attMode mode = ATT_COMPUTED,
     60                           double externalYaw = 0.0);
    5161
    52   // Drains and returns the diagnostic log accumulated by the GLONASS
    53   // yaw-fixed model (mode transitions, with beta/mu/rate at the time).
     62  // Drain and return diagnostic logs accumulated by the yaw models.
    5463  // Empty most of the time; only non-empty right after a transition.
    5564  QString takeGlonassYawLog() {
     
    5867    return s;
    5968  }
     69  QString takeGpsYawLog() {
     70    QString s = _gpsYawLog;
     71    _gpsYawLog.clear();
     72    return s;
     73  }
     74  QString takeOnYawLog() {
     75    QString s = _onYawLog;
     76    _onYawLog.clear();
     77    return s;
     78  }
    6079
    6180 private:
    62   // Per-satellite GLONASS yaw state, used to freeze the yaw angle while
    63   // the satellite cannot follow the nominal Sun-pointing attitude law
    64   // (see glonassYawAngle() below).
     81  // Per-satellite GLONASS yaw state: freezes the yaw angle while the
     82  // satellite cannot follow the nominal Sun-pointing law (Dilssner 2011).
    6583  class t_glonassYaw {
    6684   public:
     
    7795  };
    7896
     97  // Per-satellite GPS yaw state: rate-limits the yaw during noon/midnight
     98  // turns when the required yaw rate exceeds the block's mechanical maximum
     99  // (Kouba 2009/2015, Bar-Sever 1996).
     100  class t_gpsYaw {
     101   public:
     102    t_gpsYaw() {
     103      yaw         = 0.0;
     104      lastCallMjd = 0.0;
     105      valid       = false;
     106      inTurn      = false;
     107    }
     108    double yaw;
     109    double lastCallMjd;
     110    bool   valid;
     111    bool   inTurn;  // true while in a constrained noon/midnight turn
     112  };
     113
     114  // Per-satellite Galileo/BDS yaw state: tracks rate-limited rotation between
     115  // yaw-steering (psiNom) and orbit-normal mode (psi=0) when |beta| crosses
     116  // the constellation-specific threshold (Kouba 2017, Dai et al. 2015).
     117  class t_onYaw {
     118   public:
     119    t_onYaw() {
     120      yaw         = 0.0;
     121      lastCallMjd = 0.0;
     122      valid       = false;
     123      inON        = false;
     124    }
     125    double yaw;
     126    double lastCallMjd;
     127    bool   valid;
     128    bool   inON;  // true while satellite is in (or transitioning to) orbit-normal mode
     129  };
     130
    79131  QString _glonassYawLog;
     132  QString _gpsYawLog;
     133  QString _onYawLog;
    80134
    81135  double glonassYawAngle(const QString& prn, double Mjd, const ColumnVector& xSat,
    82136                          const ColumnVector& vSat, const ColumnVector& xSun);
    83137
     138  double gpsYawAngle(const QString& prn, const QString& blockType, double Mjd,
     139                     const ColumnVector& xSat, const ColumnVector& vSat,
     140                     const ColumnVector& xSun);
     141
     142  double onModeYawAngle(const QString& prn, double betaThr, double psiDotMax,
     143                        double Mjd, const ColumnVector& xSat,
     144                        const ColumnVector& vSat, const ColumnVector& xSun);
     145
     146  double galileoYawAngle(const QString& prn, const QString& blockType, double Mjd,
     147                         const ColumnVector& xSat, const ColumnVector& vSat,
     148                         const ColumnVector& xSun);
     149
     150  double bdsYawAngle(const QString& prn, const QString& blockType, double Mjd,
     151                     const ColumnVector& xSat, const ColumnVector& vSat,
     152                     const ColumnVector& xSun);
     153
    84154  QMap<QString, t_glonassYaw> _glonassYaw;
     155  QMap<QString, t_gpsYaw>     _gpsYaw;
     156  QMap<QString, t_onYaw>      _onYaw;
    85157
    86158  class t_frqMap {
     
    111183    }
    112184    QString                            antName;
     185    QString                            blockType;  // e.g. "IIF", "IIR-M", "IIA", "IIIA" (GPS only)
    113186    double                             zen1;
    114187    double                             zen2;
Note: See TracChangeset for help on using the changeset viewer.