source: ntrip/trunk/BNC/src/bncutils.h@ 11020

Last change on this file since 11020 was 11019, checked in by stuerze, 8 days ago

added epoch/velocity fields to PPP coordinates file to allow BNC to propagate the reference coordinates related to a dedicated reference epoch to the current epoch

File size: 6.5 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 BNCUTILS_H
26#define BNCUTILS_H
27
28#include <vector>
29
30#include <QString>
31#include <QDateTime>
32
33#include <newmat.h>
34#include <bncconst.h>
35#include <ephemeris.h>
36
37class t_eph;
38
39const double RHO_DEG = 180.0 / M_PI;
40const double RHO_SEC = 3600.0 * 180.0 / M_PI;
41const double MJD_J2000 = 51544.5;
42
43static const QVector<int> ssrUpdateInt = QVector<int>() << 1 << 2 << 5 << 10 << 15 << 30
44 << 60 << 120 << 240 << 300 << 600
45 << 900 << 1800 << 3600 << 7200
46 << 10800;
47
48void expandEnvVar(QString& str);
49
50/**
51 * Return GPS leap seconds for a given UTC time
52 * @param year 4 digit year
53 * @param month month in year (1-12)
54 * @param day day in month (1-31)
55 * @return number of leap seconds since 6.1.1980
56 */
57int gnumleap(int year, int month, int day);
58
59/**
60 * Convert Moscow time into GPS or UTC. Note that parts of a second are not preserved
61 * and must be handled separately.
62 * @param week GPS week number (must be prefilled, contains fixed value afterwards)
63 * @param secOfWeek seconds in GPS week (must be prefilled, contains fixed value afterwards)
64 * @param mSecOfWeek milli seconds in GLONASS time
65 * @param fixnumleap when <code>true</code> then result is UTC time, otherwise it is GPS
66 * @return does not return a value, but updates first two arguments
67 */
68void updatetime(int *week, int *secOfWeek, int mSecOfWeek, bool fixnumleap);
69
70QDateTime dateAndTimeFromGPSweek(int GPSWeek, double GPSWeeks);
71
72void currentGPSWeeks(int& week, double& sec);
73double decimalYear(const bncTime& time);
74
75QDateTime currentDateAndTimeGPS();
76
77bool checkForWrongObsEpoch(bncTime obsEpoch);
78
79bool outDatedBcep(const t_eph *eph, bncTime tt);
80
81QByteArray ggaString(const QByteArray& latitude, const QByteArray& longitude,
82 const QByteArray& height, const QString& ggaType);
83
84void RSW_to_XYZ(const ColumnVector& rr, const ColumnVector& vv,
85 const ColumnVector& rsw, ColumnVector& xyz);
86
87void XYZ_to_RSW(const ColumnVector& rr, const ColumnVector& vv,
88 const ColumnVector& xyz, ColumnVector& rsw);
89
90t_irc xyz2ell(const double* XYZ, double* Ell);
91
92t_irc xyz2geoc(const double* XYZ, double* Geoc);
93
94void xyz2neu(const double* Ell, const double* xyz, double* neu);
95
96void neu2xyz(const double* Ell, const double* neu, double* xyz);
97
98void jacobiXYZ_NEU(const double* Ell, Matrix& jacobi);
99
100void jacobiEll_XYZ(const double* Ell, Matrix& jacobi);
101
102void covariXYZ_NEU(const SymmetricMatrix& Qxyz, const double* Ell,
103 SymmetricMatrix& Qneu);
104
105void covariNEU_XYZ(const SymmetricMatrix& Qneu, const double* Ell,
106 SymmetricMatrix& Qxyz);
107
108double Frac(double x);
109
110double Modulo(double x, double y);
111
112double nint(double val);
113
114ColumnVector rungeKutta4(double xi, const ColumnVector& yi, double dx, double* acc,
115 ColumnVector (*der)(double x, const ColumnVector& y, double* acc));
116
117void GPSweekFromDateAndTime(const QDateTime& dateTime, int& GPSWeek, double& GPSWeeks);
118
119void GPSweekFromYMDhms(int year, int month, int day, int hour, int min, double sec,
120 int& GPSWeek, double& GPSWeeks);
121
122void mjdFromDateAndTime(const QDateTime& dateTime, int& mjd, double& dayfrac);
123
124bool findInVector(const std::vector<QString>& vv, const QString& str);
125
126int readInt(const QString& str, int pos, int len, int& value);
127
128int readDbl(const QString& str, int pos, int len, double& value);
129
130void topos(double xRec, double yRec, double zRec, double xSat, double ySat, double zSat,
131 double& rho, double& eleSat, double& azSat);
132
133void deg2DMS(double decDeg, int& deg, int& min, double& sec);
134
135QString fortranFormat(double value, int width, int prec);
136
137void kalman(const Matrix& AA, const ColumnVector& ll, const DiagonalMatrix& PP,
138 SymmetricMatrix& QQ, ColumnVector& xx);
139
140void kalman(const std::vector<std::unique_ptr<const RowVector>>& AA,
141 const std::vector<double>& ll, const std::vector<double>& sigma,
142 SymmetricMatrix& QQ, ColumnVector& xx);
143
144double djul(long j1, long m1, double tt);
145
146double gpjd(double second, int nweek) ;
147
148void jdgp(double tjul, double & second, long & nweek);
149
150void jmt (double djul, long& jj, long& mm, double& dd);
151
152void stripWhiteSpace(std::string& str);
153
154double accuracyFromIndex(int index, t_eph::e_system system);
155
156int indexFromAccuracy(double accuracy, t_eph::e_system system);
157
158double fitIntervalFromFlag(int flag, double iodc, t_eph::e_system system);
159
160double associatedLegendreFunction(int n, int m, double t);
161
162double factorial(int n);
163
164double sqrtMod(double val);
165
166/** Convert RTCM3 lock-time indicator to lock time in seconds
167* depending on input message format. Returns -1 if format is
168* unknown or indicator is invalid
169*/
170double lti2sec(int type, int lti);
171
172// CRC24Q checksum calculation function (only full bytes supported).
173///////////////////////////////////////////////////////////////////
174unsigned long CRC24(long size, const unsigned char *buf);
175
176// Extracts k bits from position p and returns the extracted value as integer
177///////////////////////////////////////////////////////////////////
178unsigned bitExtracted(unsigned number, unsigned k, unsigned p);
179
180
181#endif
Note: See TracBrowser for help on using the repository browser.