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

Last change on this file since 7246 was 7245, checked in by stuerze, 10 years ago

methods are added for the determination of the factorial and the assosiated Legendre functions

File size: 8.4 KB
RevLine 
[280]1// Part of BNC, a utility for retrieving decoding and
[464]2// converting GNSS data streams from NTRIP broadcasters.
[280]3//
[464]4// Copyright (C) 2007
[280]5// German Federal Agency for Cartography and Geodesy (BKG)
6// http://www.bkg.bund.de
[464]7// Czech Technical University Prague, Department of Geodesy
[280]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.
[83]24
25#ifndef BNCUTILS_H
26#define BNCUTILS_H
27
[3408]28#include <vector>
29
[83]30#include <QString>
[125]31#include <QDateTime>
[83]32
[2043]33#include <newmat.h>
[2063]34#include <bncconst.h>
[6799]35#include <ephemeris.h>
[2043]36
[5807]37void expandEnvVar(QString& str);
[83]38
[6812]39/**
40 * Return GPS leap seconds for a given UTC time
41 * @param year 4 digit year
42 * @param month month in year (1-12)
43 * @param day day in month (1-31)
44 * @return number of leap seconds since 6.1.1980
45 */
46int gnumleap(int year, int month, int day);
47
48/**
49 * Convert Moscow time into GPS or UTC. Note that parts of a second are not preserved
50 * and must be handled separately.
51 * @param week GPS week number (must be prefilled, contains fixed value afterwards)
52 * @param secOfWeek seconds in GPS week (must be prefilled, contains fixed value afterwards)
53 * @param mSecOfWeek milli seconds in GLONASS time
54 * @param fixnumleap when <code>true</code> then result is UTC time, otherwise it is GPS
55 * @return does not return a value, but updates first two arguments
56 */
57void updatetime(int *week, int *secOfWeek, int mSecOfWeek, bool fixnumleap);
58
[5807]59QDateTime dateAndTimeFromGPSweek(int GPSWeek, double GPSWeeks);
[125]60
[5807]61void currentGPSWeeks(int& week, double& sec);
[210]62
[5807]63QDateTime currentDateAndTimeGPS();
[1154]64
[5807]65QByteArray ggaString(const QByteArray& latitude, const QByteArray& longitude,
[6786]66 const QByteArray& height, const QString& ggaType);
[1381]67
[5807]68void RSW_to_XYZ(const ColumnVector& rr, const ColumnVector& vv,
69 const ColumnVector& rsw, ColumnVector& xyz);
[2043]70
[5807]71void XYZ_to_RSW(const ColumnVector& rr, const ColumnVector& vv,
72 const ColumnVector& xyz, ColumnVector& rsw);
[2988]73
[5807]74t_irc xyz2ell(const double* XYZ, double* Ell);
[2063]75
[7244]76void xyz2geoc(const double* XYZ, double* Geoc);
77
[5807]78void xyz2neu(const double* Ell, const double* xyz, double* neu);
[2065]79
[5807]80void neu2xyz(const double* Ell, const double* neu, double* xyz);
[2582]81
[5807]82void jacobiXYZ_NEU(const double* Ell, Matrix& jacobi);
[5752]83
[5807]84void jacobiEll_XYZ(const double* Ell, Matrix& jacobi);
[5752]85
[5807]86void covariXYZ_NEU(const SymmetricMatrix& Qxyz, const double* Ell,
87 SymmetricMatrix& Qneu);
[5752]88
[5807]89void covariNEU_XYZ(const SymmetricMatrix& Qneu, const double* Ell,
90 SymmetricMatrix& Qxyz);
[5752]91
[5807]92double Frac(double x);
[5753]93
[5807]94double Modulo(double x, double y);
[3044]95
[5807]96double nint(double val);
[3044]97
[5807]98ColumnVector rungeKutta4(double xi, const ColumnVector& yi, double dx, double* acc,
99 ColumnVector (*der)(double x, const ColumnVector& y, double* acc));
[3171]100
[5807]101void GPSweekFromDateAndTime(const QDateTime& dateTime, int& GPSWeek, double& GPSWeeks);
[3044]102
[5807]103void GPSweekFromYMDhms(int year, int month, int day, int hour, int min, double sec,
104 int& GPSWeek, double& GPSWeeks);
[3408]105
[5807]106void mjdFromDateAndTime(const QDateTime& dateTime, int& mjd, double& dayfrac);
[3664]107
[5807]108bool findInVector(const std::vector<QString>& vv, const QString& str);
[3664]109
[5807]110int readInt(const QString& str, int pos, int len, int& value);
[4338]111
[5807]112int readDbl(const QString& str, int pos, int len, double& value);
[5230]113
[5807]114void topos(double xRec, double yRec, double zRec, double xSat, double ySat, double zSat,
115 double& rho, double& eleSat, double& azSat);
[5310]116
[5807]117void deg2DMS(double decDeg, int& deg, int& min, double& sec);
118
119QString fortranFormat(double value, int width, int prec);
120
121void kalman(const Matrix& AA, const ColumnVector& ll, const DiagonalMatrix& PP,
[6167]122 SymmetricMatrix& QQ, ColumnVector& xx);
[5807]123
[5885]124double djul(long j1, long m1, double tt);
125
[5886]126double gpjd(double second, int nweek) ;
127
[5885]128void jdgp(double tjul, double & second, long & nweek);
129
[5886]130void jmt (double djul, long& jj, long& mm, double& dd);
131
[5910]132void stripWhiteSpace(std::string& str);
133
[6799]134double accuracyFromIndex(int index, t_eph::e_type type);
135
136int indexFromAccuracy(double accuracy, t_eph::e_type type);
137
[7245]138double associatedLegendreFunction(int n, int m, double t);
[7053]139
[7245]140int factorial(int n);
141
142
[7053]143// CRC24Q checksum calculation function (only full bytes supported).
144///////////////////////////////////////////////////////////////////
145unsigned long CRC24(long size, const unsigned char *buf);
146
147// RTCM3 GPS EPH encoding
148//////////////////////////////////////////////////////////
149#define GPSTOINT(type, value) static_cast<type>(round(value))
150
151#define GPSADDBITS(a, b) {bitbuffer = (bitbuffer<<(a)) \
152 |(GPSTOINT(long long,b)&((1ULL<<a)-1)); \
153 numbits += (a); \
154 while(numbits >= 8) { \
155 buffer[size++] = bitbuffer>>(numbits-8);numbits -= 8;}}
156
157#define GPSADDBITSFLOAT(a,b,c) {long long i = GPSTOINT(long long,(b)/(c)); \
158 GPSADDBITS(a,i)};
159
160// RTCM3 GLONASS EPH encoding
161//////////////////////////////////////////////////////////
162#define GLONASSTOINT(type, value) static_cast<type>(round(value))
163#define GLONASSADDBITS(a, b) {bitbuffer = (bitbuffer<<(a)) \
164 |(GLONASSTOINT(long long,b)&((1ULL<<(a))-1)); \
165 numbits += (a); \
166 while(numbits >= 8) { \
167 buffer[size++] = bitbuffer>>(numbits-8);numbits -= 8;}}
168#define GLONASSADDBITSFLOATM(a,b,c) {int s; long long i; \
169 if(b < 0.0) \
170 { \
171 s = 1; \
172 i = GLONASSTOINT(long long,(-b)/(c)); \
173 if(!i) s = 0; \
174 } \
175 else \
176 { \
177 s = 0; \
178 i = GLONASSTOINT(long long,(b)/(c)); \
179 } \
180 GLONASSADDBITS(1,s) \
181 GLONASSADDBITS(a-1,i)}
182
183// RTCM3 Galileo EPH encoding
184//////////////////////////////////////////////////////////
185#define GALILEOTOINT(type, value) static_cast<type>(round(value))
186#define GALILEOADDBITS(a, b) {bitbuffer = (bitbuffer<<(a)) \
187 |(GALILEOTOINT(long long,b)&((1LL<<a)-1)); \
188 numbits += (a); \
189 while(numbits >= 8) { \
190 buffer[size++] = bitbuffer>>(numbits-8);numbits -= 8;}}
191#define GALILEOADDBITSFLOAT(a,b,c) {long long i = GALILEOTOINT(long long,(b)/(c)); \
192 GALILEOADDBITS(a,i)};
193
194// RTCM3 SBAS EPH encoding
195//////////////////////////////////////////////////////////
196#define SBASTOINT(type, value) static_cast<type>(round(value))
197#define SBASADDBITS(a, b) {bitbuffer = (bitbuffer<<(a)) \
198 |(SBASTOINT(long long,b)&((1ULL<<a)-1)); \
199 numbits += (a); \
200 while(numbits >= 8) { \
201 buffer[size++] = bitbuffer>>(numbits-8);numbits -= 8;}}
202#define SBASADDBITSFLOAT(a,b,c) {long long i = SBASTOINT(long long,(b)/(c)); \
203 SBASADDBITS(a,i)};
204
205// RTCM3 BDS EPH encoding
206//////////////////////////////////////////////////////////
207#define BDSTOINT(type, value) static_cast<type>(round(value))
208#define BDSADDBITS(a, b) {bitbuffer = (bitbuffer<<(a)) \
209 |(BDSTOINT(long long,b)&((1ULL<<a)-1)); \
210 numbits += (a); \
211 while(numbits >= 8) { \
212 buffer[size++] = bitbuffer>>(numbits-8);numbits -= 8;}}
213#define BDSADDBITSFLOAT(a,b,c) {long long i = BDSTOINT(long long,(b)/(c)); \
214 BDSADDBITS(a,i)};
215
[83]216#endif
Note: See TracBrowser for help on using the repository browser.