Go to the documentation of this file.
51 : clkBias(
std::numeric_limits<double>::quiet_NaN()),
52 freqBias(
std::numeric_limits<double>::quiet_NaN()),
55 P1(-1),
P2(-1),
P3(-1), P4(-1),
58 tauDelta(
std::numeric_limits<double>::quiet_NaN()),
85 xvt.
x[0] =
pos[0]*1.e3;
86 xvt.
x[1] =
pos[1]*1.e3;
87 xvt.
x[2] =
pos[2]*1.e3;
88 xvt.
v[0] =
vel[0]*1.e3;
89 xvt.
v[1] =
vel[1]*1.e3;
90 xvt.
v[2] =
vel[2]*1.e3;
106 initialState(0) =
pos[0]*1000.0;
107 initialState(2) =
pos[1]*1000.0;
108 initialState(4) =
pos[2]*1000.0;
109 initialState(1) =
vel[0]*1000.0;
110 initialState(3) =
vel[1]*1000.0;
111 initialState(5) =
vel[2]*1000.0;
112 accel(0) =
acc[0]*1000.0;
113 accel(1) =
acc[1]*1000.0;
114 accel(2) =
acc[2]*1000.0;
117 if ((when -
Toe) < 0.0)
119 rkStep =
step*(-1.0);
122 double tolerance(1e-9);
130 if ((workEpoch + rkStep) > when)
132 rkStep = (when - workEpoch);
137 if ((workEpoch + rkStep) < when)
139 rkStep = (when - workEpoch);
143 tempRes = initialState + k1*rkStep/2.0;
145 tempRes = initialState + k2*rkStep/2.0;
147 tempRes = initialState + k3*rkStep;
149 initialState = initialState +
150 (k1/6.0 + k2/3.0 + k3/3.0 + k4/6.0) * rkStep;
153 if (std::fabs(when - workEpoch) < tolerance)
158 xvt.
x[0] = initialState(0);
159 xvt.
x[1] = initialState(2);
160 xvt.
x[2] = initialState(4);
161 xvt.
v[0] = initialState(1);
162 xvt.
v[1] = initialState(3);
163 xvt.
v[2] = initialState(5);
203 ios::fmtflags oldFlags = s.flags();
205 s.setf(ios::fixed, ios::floatfield);
206 s.setf(ios::right, ios::adjustfield);
207 s.setf(ios::uppercase);
211 s <<
"****************************************************************"
212 <<
"************" << endl
213 <<
"GLONASS ORB/CLK (IMMEDIATE) PARAMETERS"
222 string otform(
"%7.0s %3a-%1w:%02H:%02M:%02S %3P");
223 s <<
" STRING OVERHEAD" << endl << endl
224 <<
" SOD DOW:HH:MM:SS" << endl
225 << left << setw(11) <<
"STR1" << right
227 << left << setw(11) <<
"STR2" << right
229 << left << setw(11) <<
"STR3" << right
231 << left << setw(11) <<
"STR4" << right
235 string tform(
"%02m/%02d/%Y %03j %02H:%02M:%02S %7.0s %P");
236 s <<
" TIMES OF INTEREST" << endl
237 <<
" MM/DD/YYYY DOY HH:MM:SS SOD" << endl
242 <<
"Parameter Value" << endl;
244 s.setf(ios::scientific, ios::floatfield);
245 s.setf(ios::right, ios::adjustfield);
246 s.setf(ios::uppercase);
251 << setw(16) <<
pos[0] <<
" km, "
252 << setw(16) <<
vel[0] <<
" km/s, "
253 << setw(16) <<
acc[0] <<
" km/s**2"
256 << setw(16) <<
pos[1] <<
" km, "
257 << setw(16) <<
vel[1] <<
" km/s, "
258 << setw(16) <<
acc[1] <<
" km/s**2"
261 << setw(16) <<
pos[2] <<
" km, "
262 << setw(16) <<
vel[2] <<
" km/s, "
263 << setw(16) <<
acc[2] <<
" km/s**2"
265 <<
"tau " << setw(16) <<
clkBias <<
" sec" << endl
266 <<
"gamma " << setw(16) <<
freqBias <<
" sec/sec" << endl
267 <<
"tauDelta " << setw(16) <<
tauDelta <<
" sec (interfreq bias)"
270 s.setf(ios::fixed, ios::floatfield);
272 s <<
"t_b " << setw(16) <<
tb <<
" increments" << endl
273 <<
"P " << setw(16) <<
static_cast<int>(
opStatus)
275 <<
"P1 " << setw(16) <<
P1 <<
" encoded:"
276 <<
" Time interval = " <<
interval <<
" minutes"
278 <<
"P2 " << setw(16) <<
P2 <<
" encoded:";
282 s <<
" even epoch time";
285 s <<
" odd epoch time";
292 <<
"P3 " << setw(16) <<
P3 <<
" encoded: ";
296 s <<
"4 satellites in almanac strings";
299 s <<
"5 satellites in almanac strings";
306 <<
"P4 " << setw(16) <<
P4 <<
" data set change flag" << endl
307 <<
"slot " << setw(16) <<
slot << endl
308 <<
"F_T " << setw(16) <<
accIndex <<
" encoded, "
310 <<
"N_t " << setw(16) <<
dayCount <<
" day of quadrennial"
312 <<
"E " << setw(16) <<
aod <<
" age of info in days" << endl
313 <<
"M " << setw(16) <<
static_cast<int>(
satType)
315 <<
"B " << setw(16) << (unsigned)
healthBits <<
" encoded: ";
325 <<
"l (String3) " << setw(16) <<
lhealth <<
" encoded: ";
339 <<
" frequency number";
343 s <<
"H " <<
" unknown"
344 <<
" frequency number";
355 string tform(
"%02H:%02M:%02S");
356 string tform2(
"%02m/%02d/%4Y %03j %02H:%02M:%02S");
373 case 0: retVal = 1.0;
break;
374 case 1: retVal = 2.0;
break;
375 case 2: retVal = 2.5;
break;
376 case 3: retVal = 4.0;
break;
377 case 4: retVal = 5.0;
break;
378 case 5: retVal = 7.0;
break;
379 case 6: retVal = 10.0;
break;
380 case 7: retVal = 12.0;
break;
381 case 8: retVal = 14.0;
break;
382 case 9: retVal = 16.0;
break;
383 case 10: retVal = 32.0;
break;
384 case 11: retVal = 64.0;
break;
385 case 12: retVal = 128.0;
break;
386 case 13: retVal = 256.0;
break;
387 case 14: retVal = 512.0;
break;
405 double year(
static_cast<double>(ytime.
year));
407 int temp(
static_cast<int>(floor(365.25 * (
year - 1.0))) + doy);
408 double jd(
static_cast<double>(
temp)+ 1721409.5);
410 double jc((jd - 2451545.0)/36525.0);
412 double sid(24110.54841 + jc * (8640184.812866
413 + jc * (0.093104 - jc * 0.0000062)));
415 sid = fmod(sid, 24.0);
430 const double mu = pz90.
gm();
431 const double ae = pz90.
a();
432 const double j02 = -pz90.
j20();
435 double x(inState(0));
436 double y(inState(2));
437 double z(inState(4));
438 double r2(x*x +
y*
y + z*z);
439 double r(std::sqrt(r2));
446 double k1(-1.5*j02*xmu*rho*rho);
447 double cm(k1*(1.0-5.0*zr2));
449 double cmz(k1*(3.0-5.0*zr2));
451 double gloAx(k2*xr + (we*we*x) + (2.0*we*inState(3)) + accel(0));
453 double gloAy(k2*yr + (we*we*
y) + (-2.0*we*inState(1)) + accel(1));
454 double gloAz((cmz-xmu)*zr + accel(2));
@ PZ90
The reference frame used by Glonass.
std::string getSignalString() const
static double getSiderealTime(const CommonTime &time)
CommonTime xmit3
Transmit time for string 3.
int id
Satellite identifier, e.g. PRN.
void dump(std::ostream &s, DumpDetail dl) const override
CommonTime getUserTime() const override
SVHealth health
SV health status.
virtual double a() const noexcept
unsigned slot
Slot number (n).
gnsstk::Xvt::HealthStatus toXvtHealth(SVHealth e)
Cast SVHealth to Xvt::HealthStatus.
NavMessageType messageType
T max(const SparseMatrix< T > &SM)
Maximum element - return 0 if empty.
unsigned dayCount
Days since Jan 1 of most recent leap year (N_T).
RefFrame frame
reference frame of this data
Triple pos
Satellite position at tb in km.
CommonTime endFit
Time at end of fit interval.
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
void dumpTerse(std::ostream &s) const
virtual double angVelocity() const noexcept
Triple v
satellite velocity in ECEF Cartesian, meters/second
GLOFNavPCode opStatus
Operational status flag.
NavMessageID signal
Source signal identification for this navigation message data.
CommonTime xmit4
Transmit time for string 4.
@ Unknown
Unknown or uninitialized stategy value.
gnsstk::Matrix< double > P1
double relcorr
relativity correction (standard 2R.V/c^2 term), seconds
Triple vel
Satellite velocity at tb in km/s.
virtual double j20() const noexcept
ObsID obs
Carrier, tracking code, etc.
Triple x
Sat position ECEF Cartesian (X,Y,Z) meters.
double tauDelta
Inter-frequency bias.
page HOWTO subpage DoxygenGuide Documenting Your Code page DoxygenGuide Documenting Your Code todo Flesh out this document section doctips Tips for Documenting When defining make sure that the prototype is identical between the cpp and hpp including both the namespaces and the parameter names for you have std::string as the return type in the hpp file and string as the return type in the cpp Doxygen may get confused and autolink to the cpp version with no documentation If you don t use the same parameter names between the cpp and hpp that will also confuse Doxygen Don t put type information in return or param documentation It doesn t really add anything and will often cause Doxygen to complain and not produce the documentation< br > use note Do not put a comma after a param name unless you mean to document multiple parameters< br/> the output stream</code >< br/> y
gnsstk::Matrix< double > P2
unsigned P4
Flag 1=ephemeris present/uploaded. 0=nope.
unsigned aod
Age of data in days (E_n).
double getAccuracy() const
Returns the accuracy in meters as defined in Table 4.4 of the ICD.
unsigned P1
Flag for interval between adjacent t_b.
SatID sat
ID of satellite to which the nav data applies.
double clkdrift
satellite clock drift in seconds/second
CommonTime beginFit
Time at beginning of fit interval.
bool lhealth
Health flag? Different from B_n and C_n?
virtual double gm() const noexcept
unsigned accIndex
User accuracy index (F_T).
@ Full
Include all detailed information.
unsigned P2
Flag of oddness (=1) or evenness (=0) of t_b.
CommonTime xmit2
Transmit time for string 2 (eph) or odd string.
HealthStatus health
Health status of satellite at ref time.
@ Terse
Aptly named, multiple lines of output with no labels.
bool freqOffsWild
True=Treat freqOffs as a wildcard when matching.
DumpDetail
Specify level of detail for dump output.
double clkBias
Satellite clock bias in sec (tau_n).
std::string printTime(const CommonTime &t, const std::string &fmt)
int freqOffs
GLONASS frequency offset.
unsigned interval
P1 interval (minutes, see PNBGLOFNavDataFactory).
Vector< double > derivative(const Vector< double > &inState, const Vector< double > &accel) const
Function implementing the derivative of GLONASS orbital model.
@ Ephemeris
Precision orbits for the transmitting SV.
double step
Integration step for Runge-Kutta algorithm (1 second by default)
unsigned P3
Flag 1=5 almanac sats in frame, 0=4 almanac sats.
Triple acc
Satellite acceleration at tb in km/s**2.
#define DEBUGTRACE_FUNCTION()
GLOFNavSatType satType
Satellite type (M_n: GLONASS or GLONASS-M).
double clkbias
Sat clock correction in seconds.
unsigned tb
Epoch index with Moscow day.
uint8_t healthBits
The 3-bit B_n value (look at bit 2 not 0 or 1).
double freqBias
Satellite relative frequency bias (gamma_n).
bool getXvt(const CommonTime &when, Xvt &xvt, const ObsID &=ObsID()) override
bool validate() const override
virtual double computeRelativityCorrection(void)
gnsstk::Matrix< double > P3
gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:39