GLOFNavEph.cpp
Go to the documentation of this file.
1 //==============================================================================
2 //
3 // This file is part of GNSSTk, the ARL:UT GNSS Toolkit.
4 //
5 // The GNSSTk is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU Lesser General Public License as published
7 // by the Free Software Foundation; either version 3.0 of the License, or
8 // any later version.
9 //
10 // The GNSSTk is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with GNSSTk; if not, write to the Free Software Foundation,
17 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
18 //
19 // This software was developed by Applied Research Laboratories at the
20 // University of Texas at Austin.
21 // Copyright 2004-2022, The Board of Regents of The University of Texas System
22 //
23 //==============================================================================
24 
25 
26 //==============================================================================
27 //
28 // This software was developed by Applied Research Laboratories at the
29 // University of Texas at Austin, under contract to an agency or agencies
30 // within the U.S. Department of Defense. The U.S. Government retains all
31 // rights to use, duplicate, distribute, disclose, or release this software.
32 //
33 // Pursuant to DoD Directive 523024
34 //
35 // DISTRIBUTION STATEMENT A: This software has been approved for public
36 // release, distribution is unlimited.
37 //
38 //==============================================================================
39 #include "GLOFNavEph.hpp"
40 #include "TimeString.hpp"
41 #include "PZ90Ellipsoid.hpp"
42 #include "YDSTime.hpp"
43 #include "DebugTrace.hpp"
44 
45 using namespace std;
46 
47 namespace gnsstk
48 {
49  GLOFNavEph ::
50  GLOFNavEph()
51  : clkBias(std::numeric_limits<double>::quiet_NaN()),
52  freqBias(std::numeric_limits<double>::quiet_NaN()),
53  healthBits(-1),
54  tb(-1),
55  P1(-1), P2(-1), P3(-1), P4(-1),
56  interval(-1),
57  opStatus(GLOFNavPCode::Unknown),
58  tauDelta(std::numeric_limits<double>::quiet_NaN()),
59  aod(-1),
60  accIndex(-1),
61  dayCount(-1),
62  // recommended by ICD, good balance of performance and accuracy
63  step(60.0)
64  {
66  msgLenSec = 8.0;
67  }
68 
69 
70  bool GLOFNavEph ::
71  validate() const
72  {
74  return true;
75  }
76 
77 
78  bool GLOFNavEph ::
79  getXvt(const CommonTime& when, Xvt& xvt, const ObsID& oid)
80  {
82  // If the exact epoch is found, let's return the values
83  if (when == Toe)
84  {
85  xvt.x[0] = pos[0]*1.e3; // m
86  xvt.x[1] = pos[1]*1.e3; // m
87  xvt.x[2] = pos[2]*1.e3; // m
88  xvt.v[0] = vel[0]*1.e3; // m/sec
89  xvt.v[1] = vel[1]*1.e3; // m/sec
90  xvt.v[2] = vel[2]*1.e3; // m/sec
91  // In the GLONASS system, 'clkbias' already includes the
92  // relativistic correction, therefore we must substract
93  // the latter from the former.
95  // Added negation here to match the SP3 sign
96  xvt.clkbias = -(clkBias + freqBias * (when - Toe) - xvt.relcorr);
97  xvt.clkdrift = freqBias;
98  xvt.frame = RefFrame(RefFrameSys::PZ90, when);
99  xvt.health = toXvtHealth(health);
100  return true;
101  }
102  Vector<double> initialState(6), accel(3), k1(6), k2(6), k3(6),
103  k4(6), tempRes(6);
104  // Convert broadcast values from km to m, which is what the
105  // differential equations use.
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;
115  // Integrate satellite state to desired epoch using the given step
116  double rkStep(step);
117  if ((when - Toe) < 0.0)
118  {
119  rkStep = step*(-1.0);
120  }
121  CommonTime workEpoch(Toe);
122  double tolerance(1e-9);
123  bool done(false);
124  while (!done)
125  {
126  // If we are about to overstep, change the stepsize appropriately
127  // to hit our target final time.
128  if (rkStep > 0.0)
129  {
130  if ((workEpoch + rkStep) > when)
131  {
132  rkStep = (when - workEpoch);
133  }
134  }
135  else
136  {
137  if ((workEpoch + rkStep) < when)
138  {
139  rkStep = (when - workEpoch);
140  }
141  }
142  k1 = derivative(initialState, accel);
143  tempRes = initialState + k1*rkStep/2.0;
144  k2 = derivative(tempRes, accel);
145  tempRes = initialState + k2*rkStep/2.0;
146  k3 = derivative(tempRes, accel);
147  tempRes = initialState + k3*rkStep;
148  k4 = derivative(tempRes, accel);
149  initialState = initialState +
150  (k1/6.0 + k2/3.0 + k3/3.0 + k4/6.0) * rkStep;
151  // If we are within tolerance of the target time, we are done.
152  workEpoch += rkStep;
153  if (std::fabs(when - workEpoch) < tolerance)
154  {
155  done = true;
156  }
157  } // while (!done)
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);
164  // In the GLONASS system, 'clkbias' already includes the relativistic
165  // correction, therefore we must substract the late from the former.
167  // Added negation here to match the SP3 sign
168  xvt.clkbias = -(clkBias + freqBias * (when - Toe) - xvt.relcorr);
169  xvt.clkdrift = freqBias;
170  xvt.frame = RefFrame(RefFrameSys::PZ90, when);
171  xvt.health = toXvtHealth(health);
172  return true;
173  }
174 
175 
178  {
180  return mr + 2.0;
181  }
182 
183 
184  void GLOFNavEph ::
186  {
188  // See PNBGLOFNavDataFactory::processEph for more info
189  unsigned kludge = (interval > 0 ? interval : 30);
190  // half the interval in seconds = interval*60/2 = interval*30
191  endFit = Toe + (kludge*30.0 + 30.0);
192  }
193 
194 
195  void GLOFNavEph ::
196  dump(std::ostream& s, DumpDetail dl) const
197  {
198  if (dl == DumpDetail::Terse)
199  {
200  dumpTerse(s);
201  return;
202  }
203  ios::fmtflags oldFlags = s.flags();
204 
205  s.setf(ios::fixed, ios::floatfield);
206  s.setf(ios::right, ios::adjustfield);
207  s.setf(ios::uppercase);
208  s.precision(0);
209  s.fill(' ');
210 
211  s << "****************************************************************"
212  << "************" << endl
213  << "GLONASS ORB/CLK (IMMEDIATE) PARAMETERS"
214  << endl
215  << endl
216  << getSignalString() << endl;
217 
218  // the rest is full details, so just return if Full is not asked for.
219  if (dl != DumpDetail::Full)
220  return;
221 
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
226  << printTime(timeStamp, otform) << endl
227  << left << setw(11) << "STR2" << right
228  << printTime(xmit2, otform) << endl
229  << left << setw(11) << "STR3" << right
230  << printTime(xmit3, otform) << endl
231  << left << setw(11) << "STR4" << right
232  << printTime(xmit4, otform) << endl << endl;
233 
234 
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
238  << "Begin Valid: " << printTime(beginFit,tform) << endl
239  << "Orbit Epoch: " << printTime(Toe,tform) << endl
240  << "End Valid: " << printTime(endFit,tform) << endl
241  << endl
242  << "Parameter Value" << endl;
243 
244  s.setf(ios::scientific, ios::floatfield);
245  s.setf(ios::right, ios::adjustfield);
246  s.setf(ios::uppercase);
247  s.precision(6);
248  s.fill(' ');
249 
250  s << "X, X', X'' "
251  << setw(16) << pos[0] << " km, "
252  << setw(16) << vel[0] << " km/s, "
253  << setw(16) << acc[0] << " km/s**2"
254  << endl
255  << "Y, Y', Y'' "
256  << setw(16) << pos[1] << " km, "
257  << setw(16) << vel[1] << " km/s, "
258  << setw(16) << acc[1] << " km/s**2"
259  << endl
260  << "Z, Z', Z'' "
261  << setw(16) << pos[2] << " km, "
262  << setw(16) << vel[2] << " km/s, "
263  << setw(16) << acc[2] << " km/s**2"
264  << endl
265  << "tau " << setw(16) << clkBias << " sec" << endl
266  << "gamma " << setw(16) << freqBias << " sec/sec" << endl
267  << "tauDelta " << setw(16) << tauDelta << " sec (interfreq bias)"
268  << endl;
269 
270  s.setf(ios::fixed, ios::floatfield);
271  s.precision(0);
272  s << "t_b " << setw(16) << tb << " increments" << endl
273  << "P " << setw(16) << static_cast<int>(opStatus)
274  << " encoded: " << StringUtils::asString(opStatus) << endl
275  << "P1 " << setw(16) << P1 << " encoded:"
276  << " Time interval = " << interval << " minutes"
277  << endl
278  << "P2 " << setw(16) << P2 << " encoded:";
279  switch (P2)
280  {
281  case 0:
282  s << " even epoch time";
283  break;
284  case 1:
285  s << " odd epoch time";
286  break;
287  default:
288  s << " ?????";
289  break;
290  }
291  s << endl
292  << "P3 " << setw(16) << P3 << " encoded: ";
293  switch (P3)
294  {
295  case 0:
296  s << "4 satellites in almanac strings";
297  break;
298  case 1:
299  s << "5 satellites in almanac strings";
300  break;
301  default:
302  s << "?????";
303  break;
304  }
305  s << endl
306  << "P4 " << setw(16) << P4 << " data set change flag" << endl
307  << "slot " << setw(16) << slot << endl
308  << "F_T " << setw(16) << accIndex << " encoded, "
309  << setw(5) << getAccuracy() << " m" << endl
310  << "N_t " << setw(16) << dayCount << " day of quadrennial"
311  << endl
312  << "E " << setw(16) << aod << " age of info in days" << endl
313  << "M " << setw(16) << static_cast<int>(satType)
314  << " encoded: " << StringUtils::asString(satType) << endl
315  << "B " << setw(16) << (unsigned)healthBits << " encoded: ";
316  if (healthBits & 0x0004)
317  {
318  s << " MALFUNCTION";
319  }
320  else
321  {
322  s << " Functional";
323  }
324  s << endl
325  << "l (String3) " << setw(16) << lhealth << " encoded: ";
326  if (lhealth == 0)
327  {
328  s << " healthy";
329  }
330  else
331  {
332  s << " unhealthy";
333  }
334  s << endl
335  << "Health (B&l)" << setw(16) << StringUtils::asString(health) << endl;
336  if (!signal.obs.freqOffsWild)
337  {
338  s << "H " << setw(16) << signal.obs.freqOffs
339  <<" frequency number";
340  }
341  else
342  {
343  s << "H " << " unknown"
344  <<" frequency number";
345  }
346  s << endl;
347 
348  s.flags(oldFlags);
349  }
350 
351 
352  void GLOFNavEph ::
353  dumpTerse(std::ostream& s) const
354  {
355  string tform("%02H:%02M:%02S");
356  string tform2("%02m/%02d/%4Y %03j %02H:%02M:%02S");
357  s << " " << setw(2) << signal.sat.id << " "
358  << printTime(beginFit,tform) << " ! "
359  << printTime(Toe,tform2) << " ! "
360  << printTime(endFit,tform) << " "
361  << lhealth << " "
362  << healthBits << " "
363  << endl;
364  }
365 
366 
367  double GLOFNavEph ::
369  {
370  double retVal = 0.0;
371  switch (accIndex)
372  {
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;
388  case 15:
389  default:
390  retVal = 0.0;
391  }
392  return retVal;
393  }
394 
395 
396  double GLOFNavEph ::
398  {
399  // The following algorithm is based on the paper:
400  // Aoki, S., Guinot,B., Kaplan, G. H., Kinoshita, H., McCarthy, D. D.
401  // and P.K. Seidelmann. 'The New Definition of Universal Time'.
402  // Astronomy and Astrophysics, 105, 359-361, 1982.
403  // Get the Julian Day at 0 hours UT (jd)
404  YDSTime ytime(time);
405  double year(static_cast<double>(ytime.year));
406  int doy(ytime.doy);
407  int temp(static_cast<int>(floor(365.25 * (year - 1.0))) + doy);
408  double jd(static_cast<double>(temp)+ 1721409.5);
409  // Compute the Julian centuries (36525 days)
410  double jc((jd - 2451545.0)/36525.0);
411  // Compute the sidereal time, in seconds
412  double sid(24110.54841 + jc * (8640184.812866
413  + jc * (0.093104 - jc * 0.0000062)));
414  sid = sid / 3600.0;
415  sid = fmod(sid, 24.0);
416  if(sid < 0.0)
417  {
418  sid = sid + 24.0;
419  }
420  return sid;
421  } // getSidTime()
422 
423 
425  derivative(const Vector<double>& inState, const Vector<double>& accel)
426  const
427  {
428  // We will need some important PZ90 ellipsoid values
429  PZ90Ellipsoid pz90;
430  const double mu = pz90.gm(); // 398600.44e9;
431  const double ae = pz90.a(); // 6378136
432  const double j02 = -pz90.j20(); // 1082625.7e-9
433  const double we = pz90.angVelocity(); // 7.292115e-5
434  // Let's start getting the current satellite position and velocity
435  double x(inState(0)); // X coordinate
436  double y(inState(2)); // Y coordinate
437  double z(inState(4)); // Z coordinate
438  double r2(x*x + y*y + z*z);
439  double r(std::sqrt(r2));
440  double xmu(mu/r2);
441  double rho(ae/r);
442  double xr(x/r);
443  double yr(y/r);
444  double zr(z/r);
445  double zr2(zr*zr);
446  double k1(-1.5*j02*xmu*rho*rho);
447  double cm(k1*(1.0-5.0*zr2));
448  // ICD says 1-5, which is incorrect.
449  double cmz(k1*(3.0-5.0*zr2));
450  double k2(cm-xmu);
451  double gloAx(k2*xr + (we*we*x) + (2.0*we*inState(3)) + accel(0));
452  // ICD says +2, which is incorrect.
453  double gloAy(k2*yr + (we*we*y) + (-2.0*we*inState(1)) + accel(1));
454  double gloAz((cmz-xmu)*zr + accel(2));
455  Vector<double> dxt(6, 0.0);
456  dxt(0) = inState(1); // Set X' = Vx
457  dxt(1) = gloAx; // Set Vx' = gloAx
458  dxt(2) = inState(3); // Set Y' = Vy
459  dxt(3) = gloAy; // Set Vy' = gloAy
460  dxt(4) = inState(5); // Set Z' = Vz
461  dxt(5) = gloAz; // Set Vz' = gloAz
462  return dxt;
463  } // derivative()
464 }
YDSTime.hpp
gnsstk::RefFrameSys::PZ90
@ PZ90
The reference frame used by Glonass.
gnsstk::NavData::getSignalString
std::string getSignalString() const
Definition: NavData.cpp:86
gnsstk::GLOFNavEph::getSiderealTime
static double getSiderealTime(const CommonTime &time)
Definition: GLOFNavEph.cpp:397
gnsstk::NavData::msgLenSec
double msgLenSec
Definition: NavData.hpp:199
gnsstk::GLOFNavEph::xmit3
CommonTime xmit3
Transmit time for string 3.
Definition: GLOFNavEph.hpp:113
gnsstk::SatID::id
int id
Satellite identifier, e.g. PRN.
Definition: SatID.hpp:154
gnsstk::GLOFNavEph::dump
void dump(std::ostream &s, DumpDetail dl) const override
Definition: GLOFNavEph.cpp:196
gnsstk::GLOFNavEph::getUserTime
CommonTime getUserTime() const override
Definition: GLOFNavEph.cpp:177
gnsstk::GLOFNavData::health
SVHealth health
SV health status.
Definition: GLOFNavData.hpp:71
example6.year
year
Definition: example6.py:64
gnsstk::YDSTime
Definition: YDSTime.hpp:58
gnsstk::PZ90Ellipsoid::a
virtual double a() const noexcept
Definition: PZ90Ellipsoid.hpp:60
gnsstk::GLOFNavData::slot
unsigned slot
Slot number (n).
Definition: GLOFNavData.hpp:69
gnsstk::toXvtHealth
gnsstk::Xvt::HealthStatus toXvtHealth(SVHealth e)
Cast SVHealth to Xvt::HealthStatus.
Definition: SVHealth.cpp:43
gnsstk::NavMessageID::messageType
NavMessageType messageType
Definition: NavMessageID.hpp:97
gnsstk::max
T max(const SparseMatrix< T > &SM)
Maximum element - return 0 if empty.
Definition: SparseMatrix.hpp:881
gnsstk::GLOFNavEph::Toe
CommonTime Toe
Definition: GLOFNavEph.hpp:132
example5.oid
oid
Definition: example5.py:29
gnsstk::GLOFNavEph::dayCount
unsigned dayCount
Days since Jan 1 of most recent leap year (N_T).
Definition: GLOFNavEph.hpp:131
gnsstk::Xvt::frame
RefFrame frame
reference frame of this data
Definition: Xvt.hpp:156
gnsstk::GLOFNavEph::pos
Triple pos
Satellite position at tb in km.
Definition: GLOFNavEph.hpp:115
gnsstk::NavFit::endFit
CommonTime endFit
Time at end of fit interval.
Definition: NavFit.hpp:55
gnsstk::StringUtils::asString
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
Definition: IonexStoreStrategy.cpp:46
gnsstk::GLOFNavEph::dumpTerse
void dumpTerse(std::ostream &s) const
Definition: GLOFNavEph.cpp:353
gnsstk::PZ90Ellipsoid::angVelocity
virtual double angVelocity() const noexcept
Definition: PZ90Ellipsoid.hpp:97
gnsstk::Xvt::v
Triple v
satellite velocity in ECEF Cartesian, meters/second
Definition: Xvt.hpp:152
gnsstk::GLOFNavEph::opStatus
GLOFNavPCode opStatus
Operational status flag.
Definition: GLOFNavEph.hpp:127
gnsstk::RefFrame
Definition: RefFrame.hpp:53
gnsstk::NavData::signal
NavMessageID signal
Source signal identification for this navigation message data.
Definition: NavData.hpp:175
gnsstk::GLOFNavEph::xmit4
CommonTime xmit4
Transmit time for string 4.
Definition: GLOFNavEph.hpp:114
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::IonexStoreStrategy::Unknown
@ Unknown
Unknown or uninitialized stategy value.
P1
gnsstk::Matrix< double > P1
Definition: Matrix_LUDecomp_T.cpp:49
gnsstk::Xvt::relcorr
double relcorr
relativity correction (standard 2R.V/c^2 term), seconds
Definition: Xvt.hpp:155
gnsstk::NavData::timeStamp
CommonTime timeStamp
Definition: NavData.hpp:173
example4.temp
temp
Definition: example4.py:35
gnsstk::GLOFNavEph::vel
Triple vel
Satellite velocity at tb in km/s.
Definition: GLOFNavEph.hpp:116
PZ90Ellipsoid.hpp
gnsstk::PZ90Ellipsoid::j20
virtual double j20() const noexcept
Definition: PZ90Ellipsoid.hpp:122
gnsstk::NavSignalID::obs
ObsID obs
Carrier, tracking code, etc.
Definition: NavSignalID.hpp:95
gnsstk::Xvt::x
Triple x
Sat position ECEF Cartesian (X,Y,Z) meters.
Definition: Xvt.hpp:151
gnsstk::GLOFNavEph::tauDelta
double tauDelta
Inter-frequency bias.
Definition: GLOFNavEph.hpp:128
y
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
Definition: DOCUMENTING.dox:15
P2
gnsstk::Matrix< double > P2
Definition: Matrix_LUDecomp_T.cpp:49
gnsstk::YDSTime::doy
int doy
Definition: YDSTime.hpp:185
gnsstk::YDSTime::year
int year
Definition: YDSTime.hpp:184
gnsstk::GLOFNavEph::P4
unsigned P4
Flag 1=ephemeris present/uploaded. 0=nope.
Definition: GLOFNavEph.hpp:125
gnsstk::GLOFNavEph::aod
unsigned aod
Age of data in days (E_n).
Definition: GLOFNavEph.hpp:129
example4.time
time
Definition: example4.py:103
gnsstk::ObsID
Definition: ObsID.hpp:82
gnsstk::GLOFNavEph::getAccuracy
double getAccuracy() const
Returns the accuracy in meters as defined in Table 4.4 of the ICD.
Definition: GLOFNavEph.cpp:368
gnsstk::GLOFNavEph::P1
unsigned P1
Flag for interval between adjacent t_b.
Definition: GLOFNavEph.hpp:122
gnsstk::NavSatelliteID::sat
SatID sat
ID of satellite to which the nav data applies.
Definition: NavSatelliteID.hpp:169
gnsstk::CommonTime
Definition: CommonTime.hpp:84
gnsstk::Xvt::clkdrift
double clkdrift
satellite clock drift in seconds/second
Definition: Xvt.hpp:154
gnsstk::NavFit::beginFit
CommonTime beginFit
Time at beginning of fit interval.
Definition: NavFit.hpp:54
gnsstk::Xvt
Definition: Xvt.hpp:60
gnsstk::GLOFNavData::lhealth
bool lhealth
Health flag? Different from B_n and C_n?
Definition: GLOFNavData.hpp:70
gnsstk::PZ90Ellipsoid::gm
virtual double gm() const noexcept
Definition: PZ90Ellipsoid.hpp:102
gnsstk::GLOFNavEph::accIndex
unsigned accIndex
User accuracy index (F_T).
Definition: GLOFNavEph.hpp:130
gnsstk::DumpDetail::Full
@ Full
Include all detailed information.
gnsstk::GLOFNavEph::P2
unsigned P2
Flag of oddness (=1) or evenness (=0) of t_b.
Definition: GLOFNavEph.hpp:123
gnsstk::Vector< double >
gnsstk::GLOFNavData::xmit2
CommonTime xmit2
Transmit time for string 2 (eph) or odd string.
Definition: GLOFNavData.hpp:67
example6.interval
interval
Definition: example6.py:75
gnsstk::Xvt::health
HealthStatus health
Health status of satellite at ref time.
Definition: Xvt.hpp:157
gnsstk::DumpDetail::Terse
@ Terse
Aptly named, multiple lines of output with no labels.
gnsstk::ObsID::freqOffsWild
bool freqOffsWild
True=Treat freqOffs as a wildcard when matching.
Definition: ObsID.hpp:204
gnsstk::DumpDetail
DumpDetail
Specify level of detail for dump output.
Definition: DumpDetail.hpp:51
gnsstk::GLOFNavEph::clkBias
double clkBias
Satellite clock bias in sec (tau_n).
Definition: GLOFNavEph.hpp:118
gnsstk::PZ90Ellipsoid
Definition: PZ90Ellipsoid.hpp:54
gnsstk::GLOFNavEph::fixFit
void fixFit()
Definition: GLOFNavEph.cpp:185
gnsstk::printTime
std::string printTime(const CommonTime &t, const std::string &fmt)
Definition: TimeString.cpp:64
gnsstk::ObsID::freqOffs
int freqOffs
GLONASS frequency offset.
Definition: ObsID.hpp:203
DebugTrace.hpp
std
Definition: Angle.hpp:142
gnsstk::GLOFNavEph::interval
unsigned interval
P1 interval (minutes, see PNBGLOFNavDataFactory).
Definition: GLOFNavEph.hpp:126
gnsstk::GLOFNavEph::derivative
Vector< double > derivative(const Vector< double > &inState, const Vector< double > &accel) const
Function implementing the derivative of GLONASS orbital model.
Definition: GLOFNavEph.cpp:425
gnsstk::NavMessageType::Ephemeris
@ Ephemeris
Precision orbits for the transmitting SV.
gnsstk::GLOFNavEph::step
double step
Integration step for Runge-Kutta algorithm (1 second by default)
Definition: GLOFNavEph.hpp:134
GLOFNavEph.hpp
gnsstk::GLOFNavEph::P3
unsigned P3
Flag 1=5 almanac sats in frame, 0=4 almanac sats.
Definition: GLOFNavEph.hpp:124
gnsstk::GLOFNavEph::acc
Triple acc
Satellite acceleration at tb in km/s**2.
Definition: GLOFNavEph.hpp:117
DEBUGTRACE_FUNCTION
#define DEBUGTRACE_FUNCTION()
Definition: DebugTrace.hpp:117
gnsstk::GLOFNavData::satType
GLOFNavSatType satType
Satellite type (M_n: GLONASS or GLONASS-M).
Definition: GLOFNavData.hpp:68
gnsstk::Xvt::clkbias
double clkbias
Sat clock correction in seconds.
Definition: Xvt.hpp:153
gnsstk::GLOFNavEph::tb
unsigned tb
Epoch index with Moscow day.
Definition: GLOFNavEph.hpp:121
gnsstk::GLOFNavEph::healthBits
uint8_t healthBits
The 3-bit B_n value (look at bit 2 not 0 or 1).
Definition: GLOFNavEph.hpp:120
gnsstk::GLOFNavEph::freqBias
double freqBias
Satellite relative frequency bias (gamma_n).
Definition: GLOFNavEph.hpp:119
gnsstk::GLOFNavEph::getXvt
bool getXvt(const CommonTime &when, Xvt &xvt, const ObsID &=ObsID()) override
Definition: GLOFNavEph.cpp:79
gnsstk::GLOFNavEph::validate
bool validate() const override
Definition: GLOFNavEph.cpp:71
gnsstk::Xvt::computeRelativityCorrection
virtual double computeRelativityCorrection(void)
Definition: Xvt.cpp:98
example3.mu
int mu
Definition: example3.py:36
P3
gnsstk::Matrix< double > P3
Definition: Matrix_LUDecomp_T.cpp:49
TimeString.hpp
gnsstk::GLOFNavPCode
GLOFNavPCode
Definition: GLOFNavPCode.hpp:56


gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:39