1  #ifndef FILTER_H


2  #define FILTER_H


3 


4  #include <vector>


5  #include <newmat.h>


6  #include "pppInclude.h"


7  #include "pppParlist.h"


8  #include "bnctime.h"


9  #include "t_prn.h"


10 


11  namespace BNC_PPP {


12 


13  class t_pppParlist;


14  class t_pppObsPool;


15  class t_pppSatObs;


16 


17  class t_pppFilter {


18  public:


19  t_pppFilter();


20  ~t_pppFilter();


21 


22  t_irc processEpoch(t_pppObsPool* obsPool);


23 


24  const ColumnVector& x() const {return _xFlt;}


25  const SymmetricMatrix& Q() const {return _QFlt;}


26 


27  int numSat() const {return _numSat;}


28  double HDOP() const {return _dop.H;}


29  double HDOV() const {return _dop.V;}


30  double PDOP() const {return _dop.P;}


31  double GDOP() const {return _dop.G;}


32  double trp() const {


33  const std::vector<t_pppParam*>& par = _parlist>params();


34  for (unsigned ii = 0; ii < par.size(); ++ii) {


35  if (par[ii]>type() == t_pppParam::trp) {


36  return x()[ii];


37  }


38  }


39  return 0.0;


40  };


41  double trpStdev() const {


42  const std::vector<t_pppParam*>& par = _parlist>params();


43  for (unsigned ii = 0; ii < par.size(); ++ii) {


44  if (par[ii]>type() == t_pppParam::trp) {


45  return sqrt(Q()[ii][ii]);


46  }


47  }


48  return 0.0;


49  };


50 


51  private:


52  class t_slip {


53  public:


54  t_slip() {


55  _slip = false;


56  _obsSlipCounter = 1;


57  _biasJumpCounter = 1;


58  }


59  bool _slip;


60  int _obsSlipCounter;


61  int _biasJumpCounter;


62  };


63 


64  class t_dop {


65  public:


66  t_dop() {reset();}


67  void reset() {H = V = P = T = G = 0.0;}


68  double H;


69  double V;


70  double P;


71  double T;


72  double G;


73  };


74 


75  t_irc processSystem(const std::vector<t_lc::type>& LCs,


76  const std::vector<t_pppSatObs*>& obsVector,


77  bool pseudoObsIonoAvailable);


78 


79  t_irc detectCycleSlips(const std::vector<t_lc::type>& LCs,


80  const std::vector<t_pppSatObs*>& obsVector);


81 


82  t_irc resetAmb(t_prn prn, const std::vector<t_pppSatObs*>& obsVector, t_lc::type lc,


83  SymmetricMatrix* QSav = 0, ColumnVector* xSav = 0);


84 


85  void cmpDOP(const std::vector<t_pppSatObs*>& obsVector);


86 


87  void setStateVectorAndVarCovMatrix(const ColumnVector& xFltOld, const SymmetricMatrix& QFltOld,


88  bool setNeuNoiseToZero);


89 


90  void predictCovCrdPart(const SymmetricMatrix& QFltOld, bool setNeuNoiseToZero);


91 


92  bncTime _epoTime;


93  t_pppParlist* _parlist;


94  SymmetricMatrix _QFlt;


95  ColumnVector _xFlt;


96  ColumnVector _x0;


97  t_slip _slips[t_prn::MAXPRN+1];


98  int _numSat;


99  t_dop _dop;


100  bncTime _firstEpoTime;


101  bncTime _lastEpoTimeOK;


102  };


103 


104  }


105 


106  #endif

