Changeset 8915 in ntrip for trunk/BNC


Ignore:
Timestamp:
Apr 9, 2020, 10:31:37 PM (5 years ago)
Author:
stuerze
Message:

minor changes regarding PPP

Location:
trunk/BNC/src/PPP
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/PPP/pppFilter.cpp

    r8912 r8915  
    3939  _obsPool = obsPool;
    4040  _refPrn  = t_prn();
     41  _datumTrafo = new t_datumTrafo();
    4142}
    4243
     
    4546t_pppFilter::~t_pppFilter() {
    4647  delete _parlist;
     48  delete _datumTrafo;
    4749}
    4850
     
    5153t_irc t_pppFilter::processEpoch(int num) {
    5254  _numSat     = 0;
    53   _numOfEpochProcessing = num;
     55  _numEpoProcessing = num;
    5456  const double maxSolGap = 60.0;
    5557
     
    119121      OPT->_obsModelType == OPT->DCMphaseBias) {
    120122    preProcessing = true;
     123    _numAllUsedLCs = 0;
    121124    for (unsigned iSys = 0; iSys < OPT->systems().size(); iSys++) {
    122125      char system = OPT->systems()[iSys];
     126      _numAllUsedLCs += OPT->LCs(system).size();
     127      if (OPT->_pseudoObsIono && !epoch->pseudoObsIono()) {
     128        _numAllUsedLCs -= 1;  // GIM not used
     129      }
    123130      if (OPT->_refSatRequired) {
    124131        _refPrn = (_obsPool->getRefSatMapElement(system))->prn();
     
    137144  }
    138145
     146  if (_numEpoProcessing == 1) {
     147    int maxObs = allObs.size() * _numAllUsedLCs;
     148    _datumTrafo->initAA(maxObs, _parlist->nPar());
     149  }
     150
    139151  // Process Satellite Systems separately
    140152  // ------------------------------------
    141   int numOfAllUsedLCs = 0;
    142153  preProcessing = false;
    143154  for (unsigned iSys = 0; iSys < OPT->systems().size(); iSys++) {
    144155    char system = OPT->systems()[iSys];
    145     numOfAllUsedLCs += OPT->LCs(system).size();
     156    (iSys) ? _datumTrafo->setFirstSystem(false) :
     157                 _datumTrafo->setFirstSystem(true);
    146158    if (OPT->_refSatRequired) {
    147159      _refPrn = (_obsPool->getRefSatMapElement(system))->prn();
     
    167179    _xFlt = xFltOld;
    168180    _QFlt = QFltOld;
    169     initDatumTransformation(numOfAllUsedLCs);
    170181  }
    171182  // close epoch processing
     
    264275    }
    265276
     277    if ((!preProcessing) &&
     278       (OPT->_obsModelType == OPT->DCMcodeBias ||
     279        OPT->_obsModelType == OPT->DCMphaseBias)) {
     280          _datumTrafo->updateIndices(maxObs);
     281      _datumTrafo->prepareAA(AA, _numEpoProcessing, _parlist->nPar());
     282    }
     283
    266284    // Check number of observations, truncate matrices
    267285    // -----------------------------------------------
     
    551569}
    552570
    553 //
    554 ////////////////////////////////////////////////////////////////////////////
    555 void t_pppFilter::initDatumTransformation(int numOfUsedLCs) {
    556 
    557   if (_numOfEpochProcessing == 1) {
    558            _AA1.ReSize(numOfUsedLCs, _parlist->nPar());
    559            _AA1 = 0.0;
    560      _AA2.ReSize(numOfUsedLCs, _parlist->nPar());
    561      _AA2 = 0.0;
    562   }
    563 }
    564 
    565 //
    566 ////////////////////////////////////////////////////////////////////////////
    567 void t_pppFilter::datumTransformation() {
    568 
    569   Matrix D21 = (_AA2.t() * _AA2).i() * _AA2.t() * _AA1;
    570 
    571   _QFlt = D21 * _QFlt * D21.t();
    572 }
    573 
    574 
    575 
    576 
     571// Compute datum transformation
     572////////////////////////////////////////////////////////////////////////////
     573void t_pppFilter::datumTransformation(void) {
     574  _QFlt = _datumTrafo->varCov(Q());
     575}
     576
  • trunk/BNC/src/PPP/pppFilter.h

    r8912 r8915  
    7575  };
    7676
     77  class t_datumTrafo{
     78  public:
     79    t_datumTrafo () {initIndices();}
     80    void initIndices() {_firstRow = 1; _lastRow = 0;}
     81    void setFirstSystem(bool firstSys) {_firstSys = firstSys;}
     82    bool firstSystem() {return _firstSys;}
     83    void updateIndices(int maxObs) {
     84      if (_firstSys) {
     85        initIndices();
     86      }
     87      else {
     88        _firstRow += maxObs;
     89      }
     90      _lastRow += maxObs;
     91    };
     92    void initAA(int maxObs, int numPar) {
     93      _AA1.ReSize(maxObs, numPar); _AA1 = 0.0;
     94      _AA2.ReSize(maxObs, numPar); _AA2 = 0.0;
     95    }
     96    void prepareAA(Matrix& AA, int _numEpoProcessing, int nPar) {
     97      Matrix& Prep = _AA2;
     98      if (_numEpoProcessing == 1) {
     99        Prep = _AA1;
     100      }
     101      Prep.SubMatrix(_firstRow, _lastRow, 1, nPar) = AA;
     102    }
     103    Matrix varCov(const SymmetricMatrix& QFlt) {
     104      Matrix D21 = (_AA2.t() * _AA2).i() * _AA2.t() * _AA1;
     105      return D21 * QFlt * D21.t();
     106    }
     107    int     _firstRow;
     108    int     _lastRow;
     109    Matrix  _AA1;
     110    Matrix  _AA2;
     111    bool    _firstSys;
     112  };
     113
    77114  t_irc processSystem(const std::vector<t_lc::type>& LCs,
    78115                      const std::vector<t_pppSatObs*>& obsVector,
     
    93130  void predictCovCrdPart(const SymmetricMatrix& QFltOld);
    94131
    95   void initDatumTransformation(int numOfAllUsedLCs);
    96 
    97132  bncTime         _epoTime;
    98133  t_pppParlist*   _parlist;
    99134  t_pppObsPool*   _obsPool;
     135  t_datumTrafo*   _datumTrafo;
    100136  SymmetricMatrix _QFlt;
    101   Matrix          _AA1;
    102   Matrix          _AA2;
    103137  ColumnVector    _xFlt;
    104138  ColumnVector    _x0;
    105139  t_slip          _slips[t_prn::MAXPRN+1];
    106140  int             _numSat;
    107   int             _numOfEpochProcessing;
     141  int             _numEpoProcessing;
     142  int             _numAllUsedLCs;
    108143  t_dop           _dop;
    109144  bncTime         _firstEpoTime;
Note: See TracChangeset for help on using the changeset viewer.