source: ntrip/trunk/BNC/src/PPP_SSR_I/pppFilter.h @ 7627

Last change on this file since 7627 was 7627, checked in by stuerze, 4 years ago

some value initialization in constructor is added

  • Property svn:keywords set to Author Date Id Rev URL;svn:eol-style=native
  • Property svn:mime-type set to text/plain
File size: 7.1 KB
Line 
1// Part of BNC, a utility for retrieving decoding and
2// converting GNSS data streams from NTRIP broadcasters.
3//
4// Copyright (C) 2007
5// German Federal Agency for Cartography and Geodesy (BKG)
6// http://www.bkg.bund.de
7// Czech Technical University Prague, Department of Geodesy
8// http://www.fsv.cvut.cz
9//
10// Email: euref-ip@bkg.bund.de
11//
12// This program is free software; you can redistribute it and/or
13// modify it under the terms of the GNU General Public License
14// as published by the Free Software Foundation, version 2.
15//
16// This program is distributed in the hope that it will be useful,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19// GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program; if not, write to the Free Software
23// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24
25#ifndef PPPFILTER_H
26#define PPPFILTER_H
27
28#include <QtCore>
29#include <QtNetwork>
30#include <newmat.h>
31
32#include "bncconst.h"
33#include "bnctime.h"
34
35class bncAntex;
36
37namespace BNC_PPP {
38
39class t_pppClient;
40class t_pppOptions;
41class t_epoData;
42class t_satData;
43class t_tides;
44
45class t_satData {
46 public:
47  t_satData() {
48    obsIndex = 0;
49    P1       = 0.0;
50    P2       = 0.0;
51    P5       = 0.0;
52    P7       = 0.0;
53    P3       = 0.0;
54    L1       = 0.0;
55    L2       = 0.0;
56    L5       = 0.0;
57    L7       = 0.0;
58    L3       = 0.0;
59    lkA      = 0.0;
60    lkB      = 0.0;
61    clk      = 0.0;
62    eleSat   = 0.0;
63    azSat    = 0.0;
64    rho      = 0.0;
65    slipFlag = false;
66    lambda3  = 0.0;
67  }
68  ~t_satData() {}
69  bncTime      tt;
70  QString      prn;
71  double       P1;
72  double       P2;
73  double       P5;
74  double       P7;
75  double       P3;
76  double       L1;
77  double       L2;
78  double       L5;
79  double       L7;
80  double       L3;
81  ColumnVector xx;
82  ColumnVector vv;
83  double       clk;
84  double       eleSat;
85  double       azSat;
86  double       rho;
87  bool         slipFlag;
88  double       lambda3;
89  double       lkA;
90  double       lkB;
91  unsigned     obsIndex;
92  char system() const {return prn.toAscii()[0];}
93};
94
95class t_epoData {
96 public:
97  t_epoData() {}
98
99  ~t_epoData() {
100    clear();
101  }
102
103  void clear() {
104    QMapIterator<QString, t_satData*> it(satData);
105    while (it.hasNext()) {
106      it.next();
107      delete it.value();
108    }
109    satData.clear();
110    tt.reset();
111  }
112
113  void deepCopy(const t_epoData* from) {
114    clear();
115    tt = from->tt;
116    QMapIterator<QString, t_satData*> it(from->satData);
117    while (it.hasNext()) {
118      it.next();
119      satData[it.key()] = new t_satData(*it.value());
120    }
121  }
122
123  unsigned sizeSys(char system) const {
124    unsigned ans = 0;
125    QMapIterator<QString, t_satData*> it(satData);
126    while (it.hasNext()) {
127      it.next();
128      if (it.value()->system() == system) {
129        ++ans;
130      }
131    }
132    return ans;
133  }
134  unsigned sizeAll() const {return satData.size();}
135
136  bncTime                   tt;
137  QMap<QString, t_satData*> satData;
138};
139
140class t_pppParam {
141 public:
142  enum parType {CRD_X, CRD_Y, CRD_Z, RECCLK, TROPO, AMB_L3,
143                GLONASS_OFFSET, GALILEO_OFFSET, BDS_OFFSET};
144  t_pppParam(parType typeIn, int indexIn, const QString& prn);
145  ~t_pppParam();
146  double partial(t_satData* satData, bool phase);
147  bool isCrd() const {
148    return (type == CRD_X || type == CRD_Y || type == CRD_Z);
149  }
150  parType  type;
151  double   xx;
152  int      index;
153  int      index_old;
154  int      numEpo;
155  QString  prn;
156};
157
158class t_pppFilter {
159 public:
160  t_pppFilter(t_pppClient* pppClient);
161  ~t_pppFilter();
162  t_irc update(t_epoData* epoData);
163  bncTime time()  const {return _time;}
164  const SymmetricMatrix& Q() const {return _QQ;}
165  const ColumnVector& neu() const {return _neu;}
166  int    numSat() const {return _numSat;}
167  double PDOP()   const {return _pDop;}
168  double x()      const {return _params[0]->xx;}
169  double y()      const {return _params[1]->xx;}
170  double z()      const {return _params[2]->xx;}
171  double clk()    const {return _params[3]->xx;}
172  double trp0()   {return delay_saast(M_PI/2.0);}
173  double trp() const {
174    for (int ii = 0; ii < _params.size(); ++ii) {
175      t_pppParam* pp = _params[ii];
176      if (pp->type == t_pppParam::TROPO) {
177        return pp->xx;
178      }
179    }
180    return 0.0;
181  }
182  double trpStdev() const {
183    for (int ii = 0; ii < _params.size(); ++ii) {
184      t_pppParam* pp = _params[ii];
185      if (pp->type == t_pppParam::TROPO) {
186        return sqrt(Q()[ii][ii]);
187      }
188    }
189    return 0.0;
190  }
191  double Glonass_offset() const {
192    for (int ii = 0; ii < _params.size(); ++ii) {
193      t_pppParam* pp = _params[ii];
194      if (pp->type == t_pppParam::GLONASS_OFFSET) {
195        return pp->xx;
196      }
197    }
198    return 0.0;
199  }
200  double Galileo_offset() const {
201    for (int ii = 0; ii < _params.size(); ++ii) {
202      t_pppParam* pp = _params[ii];
203      if (pp->type == t_pppParam::GALILEO_OFFSET) {
204        return pp->xx;
205      }
206    }
207    return 0.0;
208  }
209  double Bds_offset() const {
210    for (int ii = 0; ii < _params.size(); ++ii) {
211      t_pppParam* pp = _params[ii];
212      if (pp->type == t_pppParam::BDS_OFFSET) {
213        return pp->xx;
214      }
215    }
216    return 0.0;
217  }
218 private:
219  void   reset();
220  t_irc  cmpBancroft(t_epoData* epoData);
221  void   cmpEle(t_satData* satData);
222  void   addAmb(t_satData* satData);
223  void   addObs(int iPhase, unsigned& iObs, t_satData* satData,
224                Matrix& AA, ColumnVector& ll, DiagonalMatrix& PP);
225  QByteArray printRes(int iPhase, const ColumnVector& vv,
226                      const QMap<QString, t_satData*>& satDataMap);
227  void   findMaxRes(const ColumnVector& vv,
228                    const QMap<QString, t_satData*>& satData,
229                    QString& prnGPS, QString& prnGlo,
230                    double& maxResGPS, double& maxResGlo);
231  double cmpValue(t_satData* satData, bool phase);
232  double delay_saast(double Ele);
233  void   predict(int iPhase, t_epoData* epoData);
234  t_irc  update_p(t_epoData* epoData);
235  QString outlierDetection(int iPhase, const ColumnVector& vv,
236                           QMap<QString, t_satData*>& satData);
237
238  double windUp(const QString& prn, const ColumnVector& rSat,
239                const ColumnVector& rRec);
240
241  bncTime  _startTime;
242
243  void rememberState(t_epoData* epoData);
244  void restoreState(t_epoData* epoData);
245
246  t_irc selectSatellites(const QString& lastOutlierPrn,
247                         QMap<QString, t_satData*>& satData);
248
249  void bancroft(const Matrix& BBpass, ColumnVector& pos);
250
251  void cmpDOP(t_epoData* epoData);
252
253  t_pppClient*          _pppClient;
254  bncTime               _time;
255  bncTime               _lastTimeOK;
256  QVector<t_pppParam*>  _params;
257  SymmetricMatrix       _QQ;
258  QVector<t_pppParam*>  _params_sav;
259  SymmetricMatrix       _QQ_sav;
260  t_epoData*            _epoData_sav;
261  ColumnVector          _xcBanc;
262  ColumnVector          _ellBanc;
263  QMap<QString, double> _windUpTime;
264  QMap<QString, double> _windUpSum;
265  QStringList           _outlierGPS;
266  QStringList           _outlierGlo;
267  bncAntex*             _antex;
268  t_tides*              _tides;
269  ColumnVector          _neu;
270  int                   _numSat;
271  double                _pDop;
272};
273
274}
275
276#endif
Note: See TracBrowser for help on using the repository browser.