Go to the documentation of this file.
61 const std::vector<double>& pseudoranges) {
63 if (frequencies.size() != pseudoranges.size()) {
65 "Mismatch between frequency and pseudorange array size");
70 if (frequencies.size() < 2) {
72 "Multiple frequency and range values are required.");
77 if (frequencies.size() > 2) {
79 "Only dual-frequency ionosphere correction is supported.");
85 const double gamma = (frequencies[0]/frequencies[1]) *
86 (frequencies[0]/frequencies[1]);
89 double icpr = (pseudoranges[1] - gamma * pseudoranges[0])/(1-gamma);
101 double azimuth = trx.
azimuth(svPos);
128 std::tie(success,
range, svXvt) =
143 std::tie(success,
range, svXvt) =
157 std::tie(success,
range, svXvt) =
176 double tofEstimate = rxLoc.
slantRange(svXvt.
x) / ellipsoid.
c();
184 std::tie(success,
range, rotatedSvXvt) =
192 double fakePsuedorange =
range -
195 std::tie(success,
range, rotatedSvXvt) =
200 svXvt = rotatedSvXvt;
222 double trop =
tropModel.correction(elevation);
double SvClockBiasCorrection(const gnsstk::Xvt &svXvt)
static std::tuple< bool, double, Xvt > fromNominalReceiveWithObs(const Position &rxPos, const CommonTime &receiveNominal, double pseudorange, NavLibrary &navLib, const NavSatelliteID &sat, const EllipsoidModel &ellipsoid, bool smallAngleApprox=false, SVHealth xmitHealth=SVHealth::Any, NavValidityType valid=NavValidityType::ValidOnly, NavSearchOrder order=NavSearchOrder::User)
double RawRange1(const Position &rxLoc, const SatID &satId, const CommonTime &timeReceived, NavLibrary &ephemeris, Xvt &svXvt)
static std::tuple< bool, double, Xvt > fromSvTransmit(const Position &rxPos, NavLibrary &navLib, const NavSatelliteID &sat, const CommonTime &transmit, const EllipsoidModel &ellipsoid, bool smallAngleApprox=false, SVHealth xmitHealth=SVHealth::Any, NavValidityType valid=NavValidityType::ValidOnly, NavSearchOrder order=NavSearchOrder::User, double seed=0.07, double threshold=1.e-13, int maxIter=5)
bool getXvt(const NavSatelliteID &sat, const CommonTime &when, Xvt &xvt, bool useAlm, SVHealth xmitHealth=SVHealth::Any, NavValidityType valid=NavValidityType::ValidOnly, NavSearchOrder order=NavSearchOrder::User)
static std::tuple< bool, double, Xvt > fromReceive(const Position &rxPos, const CommonTime &receive, NavLibrary &navLib, const NavSatelliteID &sat, const EllipsoidModel &ellipsoid, bool smallAngleApprox=false, SVHealth xmitHealth=SVHealth::Any, NavValidityType valid=NavValidityType::ValidOnly, NavSearchOrder order=NavSearchOrder::User, double seed=0.07, double threshold=1.e-13, int maxIter=5)
double RawRange4(const gnsstk::Position &rxLoc, const gnsstk::SatID &satId, const gnsstk::CommonTime &time, NavLibrary &ephemeris, gnsstk::Xvt &svXvt)
double azimuth(const Position &Target) const
double relcorr
relativity correction (standard 2R.V/c^2 term), seconds
static std::tuple< bool, double, Xvt > fromSvTransmitWithObs(const Position &rxPos, double pseudorange, NavLibrary &navLib, const NavSatelliteID &sat, const CommonTime &transmit, const EllipsoidModel &ellipsoid, bool smallAngleApprox=false, SVHealth xmitHealth=SVHealth::Any, NavValidityType valid=NavValidityType::ValidOnly, NavSearchOrder order=NavSearchOrder::User)
@ Any
Use in searches when you don't care about the SV health.
Triple x
Sat position ECEF Cartesian (X,Y,Z) meters.
double IonosphereModelCorrection(const gnsstk::IonoModelStore &ionoModel, const gnsstk::CommonTime &time, CarrierBand band, const gnsstk::Position &rxLoc, const gnsstk::Xvt &svXvt)
virtual double c() const noexcept
const double C_MPS
m/s, speed of light; this value defined by GPS but applies to GAL and GLO.
@ ValidOnly
Only load/find nav messages that pass validity checks.
double SvRelativityCorrection(gnsstk::Xvt &svXvt)
double clkdrift
satellite clock drift in seconds/second
gnsstk::Xvt getSvXvt(const gnsstk::SatID &satId, const gnsstk::CommonTime &time, NavLibrary &ephemeris)
double RawRange3(double pseudorange, const gnsstk::Position &rxLoc, const gnsstk::SatID &satId, const gnsstk::CommonTime &time, NavLibrary &ephemeris, gnsstk::Xvt &svXvt)
#define GNSSTK_ASSERT(CONDITION)
Provide an "ASSERT" type macro.
double TroposphereCorrection(const gnsstk::TropModel &tropModel, const gnsstk::Position &rxLoc, const gnsstk::Xvt &svXvt)
double RawRange2(double pseudorange, const Position &rxLoc, const SatID &satId, const CommonTime &time, NavLibrary &ephemeris, Xvt &svXvt)
double range(const Position &A, const Position &B)
double slantRange(const Triple &right) const noexcept
#define GNSSTK_THROW(exc)
double clkbias
Sat clock correction in seconds.
@ User
Return the latest message before the search time.
virtual double getCorrection(const CommonTime &time, const Position &rxgeo, double svel, double svaz, CarrierBand band=CarrierBand::L1) const
virtual double computeRelativityCorrection(void)
double elevation(const Position &Target) const
double IonosphereFreeRange(const std::vector< double > &frequencies, const std::vector< double > &pseudoranges)
gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:40