Compute the corrected range from receiver at position Rx, to the GPS satellite given by SatID sat, as well as azimuth, elevation, etc., given a nominal timetag (either received or transmitted time) and a NavLibrary.
The corrected range is a combination of the raw range (geometric range) minus SV clock offsets. The raw range can be written as:
where,
The different methods in this class represent different methodologies for solving the above equation depending on the available input. See each method for the background in solving for geometric range.
Definition at line 84 of file EphemerisRange.hpp.
#include <EphemerisRange.hpp>
Public Attributes | |
double | azimuth |
double | azimuthGeodetic |
Triple | cosines |
double | elevation |
double | elevationGeodetic |
vshort | health |
vshort | iodc |
The IODC of the GPS LNAV ephemeris, invalid for other GNSSes. More... | |
double | rawrange |
The computed raw (geometric) range in meters. More... | |
double | relativity |
The relativity correction in meters. More... | |
double | svclkbias |
The satellite clock bias in meters. More... | |
double | svclkdrift |
The satellite clock drift in m/s. More... | |
Xvt | svPosVel |
The satellite position (m) and velocity (m/s) in ECEF coordinates. More... | |
CommonTime | transmit |
The computed transmit time of the signal. More... | |
Private Member Functions | |
void | updateCER (const Position &rx) |
|
inline |
Default constructor.
Definition at line 88 of file EphemerisRange.hpp.
double gnsstk::CorrectedEphemerisRange::ComputeAtReceiveTime | ( | const CommonTime & | trNom, |
const Position & | rx, | ||
const SatID | sat, | ||
NavLibrary & | navLib, | ||
NavSearchOrder | order = NavSearchOrder::User , |
||
SVHealth | xmitHealth = SVHealth::Any , |
||
NavValidityType | valid = NavValidityType::ValidOnly , |
||
const EllipsoidModel & | ellipsoid = GPSEllipsoid() |
||
) |
Compute the corrected range at RECEIVE time (receiver time frame), from rx to sat at trNom.
This method uses an iterative solution solving for the geometric range and the time of flight. An initial guess is used for the time of flight, a geometric range is computed, and a new time of flight is computed with the relationship of
[in] | trNom | Nominal receive time ( ![]() |
[in] | rx | Receiver position ( ![]() |
[in] | sat | Satellite ID to get the position for. |
[in] | navLib | The navigation data library to use for looking up satellite XVT. |
[in] | order | Specify whether to search by receiver behavior or by nearest to when in time. |
[in] | xmitHealth | The desired health status of the satellite transmitting the nav data. |
[in] | valid | Specify whether to search only for valid or invalid messages, or both. |
[in] | ellipsoid | Ellipsoid model to provide an ECEF rotation rate. |
Definition at line 65 of file EphemerisRange.cpp.
double gnsstk::CorrectedEphemerisRange::ComputeAtTransmitSvTime | ( | const CommonTime & | ttNom, |
const double & | pr, | ||
const Position & | rx, | ||
const SatID | sat, | ||
NavLibrary & | navLib, | ||
NavSearchOrder | order = NavSearchOrder::User , |
||
SVHealth | xmitHealth = SVHealth::Any , |
||
NavValidityType | valid = NavValidityType::ValidOnly , |
||
const EllipsoidModel & | ellipsoid = GPSEllipsoid() |
||
) |
Compute the corrected range at TRANSMIT time (SV time frame), from rx to sat at ttNom.
A similar methodology to ComputeAtTransmitTime but uses the SV's nominal transmit time and a pseudorange to estimate the receive time then geometric range.
[in] | ttNom | Nominal transmit time ( ![]() |
[in] | pr | Measured pseudorange to initialize time-of-flight ( ![]() |
[in] | rx | Receiver position ( ![]() |
[in] | sat | Satellite ID to get the position for. |
[in] | navLib | The navigation data library to use for looking up satellite XVT. |
[in] | order | Specify whether to search by receiver behavior or by nearest to when in time. |
[in] | xmitHealth | The desired health status of the satellite transmitting the nav data. |
[in] | valid | Specify whether to search only for valid or invalid messages, or both. |
[in] | ellipsoid | Ellipsoid model to provide an ECEF rotation rate. |
Definition at line 165 of file EphemerisRange.cpp.
double gnsstk::CorrectedEphemerisRange::ComputeAtTransmitTime | ( | const CommonTime & | trNom, |
const double & | pr, | ||
const Position & | rx, | ||
const SatID | sat, | ||
NavLibrary & | navLib, | ||
NavSearchOrder | order = NavSearchOrder::User , |
||
SVHealth | xmitHealth = SVHealth::Any , |
||
NavValidityType | valid = NavValidityType::ValidOnly , |
||
const EllipsoidModel & | ellipsoid = GPSEllipsoid() |
||
) |
Compute the corrected range at TRANSMIT time (receiver time frame) from rx to sat at trNom.
This uses a simple rearrangement of the RX pseudorange equation to determine a nominal time of signal transmission ( ).
The nominal transmission time is corrected with SV clock offsets to compute the true transmission time.
Note that any RX clock bias drops out as the bias is present in both the RX's timestamp ( ) and in the pseudorange. With the transmit time computed, a geometric range is computed using the equation described in class description.
[in] | trNom | Nominal recieve time ( ![]() |
[in] | pr | Measured pseudorange to initialize time-of-flight ( ![]() |
[in] | rx | Receiver position ( ![]() |
[in] | sat | Satellite ID to get the position for. |
[in] | navLib | The navigation data library to use for looking up satellite XVT. |
[in] | order | Specify whether to search by receiver behavior or by nearest to when in time. |
[in] | xmitHealth | The desired health status of the satellite transmitting the nav data. |
[in] | valid | Specify whether to search only for valid or invalid messages, or both. |
[in] | ellipsoid | Ellipsoid model to provide an ECEF rotation rate. |
Definition at line 102 of file EphemerisRange.cpp.
double gnsstk::CorrectedEphemerisRange::ComputeAtTransmitTime | ( | const CommonTime & | trNom, |
const Position & | rx, | ||
const SatID | sat, | ||
NavLibrary & | navLib, | ||
NavSearchOrder | order = NavSearchOrder::User , |
||
SVHealth | xmitHealth = SVHealth::Any , |
||
NavValidityType | valid = NavValidityType::ValidOnly , |
||
const EllipsoidModel & | ellipsoid = GPSEllipsoid() |
||
) |
Compute the corrected range at TRANSMIT time (receiver time frame), from rx to sat at trNom.
This uses the same methodology as ComputeAtTransmitTime with the pseudorange input, but instead of a using a direct pseudorange obseravation one is generated using the provided receiver position and the SV's position at the nominal receive time.
[in] | trNom | Nominal receive time ( ![]() |
[in] | rx | Receiver position ( ![]() |
[in] | sat | Satellite ID to get the position for. |
[in] | navLib | The navigation data library to use for looking up satellite XVT. |
[in] | order | Specify whether to search by receiver behavior or by nearest to when in time. |
[in] | xmitHealth | The desired health status of the satellite transmitting the nav data. |
[in] | valid | Specify whether to search only for valid or invalid messages, or both. |
[in] | ellipsoid | Ellipsoid model to provide an ECEF rotation rate. |
Definition at line 133 of file EphemerisRange.cpp.
Definition at line 200 of file EphemerisRange.cpp.
double gnsstk::CorrectedEphemerisRange::azimuth |
The satellite azimuth (spheroidal), as seen at the receiver, in degrees.
Definition at line 266 of file EphemerisRange.hpp.
double gnsstk::CorrectedEphemerisRange::azimuthGeodetic |
The satellite azimuth (geodetic), as seen at the receiver, in degrees.
Definition at line 272 of file EphemerisRange.hpp.
Triple gnsstk::CorrectedEphemerisRange::cosines |
The direction cosines of the satellite, as seen at the receiver (XYZ).
Definition at line 277 of file EphemerisRange.hpp.
double gnsstk::CorrectedEphemerisRange::elevation |
The satellite elevation (spheroidal), as seen at the receiver, in degrees.
Definition at line 263 of file EphemerisRange.hpp.
double gnsstk::CorrectedEphemerisRange::elevationGeodetic |
The satellite elevation (geodetic), as seen at the receiver, in degrees.
Definition at line 269 of file EphemerisRange.hpp.
vshort gnsstk::CorrectedEphemerisRange::health |
The health bits from the GPS LNAV ephemeris, invalid for other GNSSes
Definition at line 284 of file EphemerisRange.hpp.
vshort gnsstk::CorrectedEphemerisRange::iodc |
The IODC of the GPS LNAV ephemeris, invalid for other GNSSes.
Definition at line 281 of file EphemerisRange.hpp.
double gnsstk::CorrectedEphemerisRange::rawrange |
The computed raw (geometric) range in meters.
Definition at line 254 of file EphemerisRange.hpp.
double gnsstk::CorrectedEphemerisRange::relativity |
The relativity correction in meters.
Definition at line 260 of file EphemerisRange.hpp.
double gnsstk::CorrectedEphemerisRange::svclkbias |
The satellite clock bias in meters.
Definition at line 256 of file EphemerisRange.hpp.
double gnsstk::CorrectedEphemerisRange::svclkdrift |
The satellite clock drift in m/s.
Definition at line 258 of file EphemerisRange.hpp.
Xvt gnsstk::CorrectedEphemerisRange::svPosVel |
The satellite position (m) and velocity (m/s) in ECEF coordinates.
Definition at line 279 of file EphemerisRange.hpp.
CommonTime gnsstk::CorrectedEphemerisRange::transmit |
The computed transmit time of the signal.
Definition at line 274 of file EphemerisRange.hpp.