mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-01-06 07:20:34 +00:00
Update references to latest GPS ICDs
This commit is contained in:
parent
6289d920cc
commit
0c3ac1127b
@ -50,6 +50,8 @@ All notable changes to GNSS-SDR will be documented in this file.
|
||||
files make use of the new parameters' names.
|
||||
- Update GSL implementation to 0.38.1. See
|
||||
https://github.com/gsl-lite/gsl-lite/releases/tag/v0.38.1
|
||||
- Update references to the latest GPS ICDs (IS-GPS-200M, IS-GPS-800H,
|
||||
IS-GPS-705H) published in May, 2021.
|
||||
|
||||
### Improvements in Portability:
|
||||
|
||||
|
@ -12,9 +12,9 @@
|
||||
All the current GPS Interface Control Documents can be downloaded from <a href="https://www.gps.gov" target="_blank">GPS.gov</a>, the official U.S. Government webpage for GPS.
|
||||
|
||||
|
||||
\li GPS L1 and L2C: Global Positioning System Directorate, <a href="https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf" target="_blank"><b>Interface Specification IS-GPS-200 Revision L</b></a>. May, 2020.
|
||||
\li GPS L1C (available with first Block III launch): Global Positioning System Directorate, <a href="https://www.gps.gov/technical/icwg/IS-GPS-800G.pdf" target="_blank"><b>Interface Specification IS-GPS-800 Revision G</b></a>. May, 2020.
|
||||
\li GPS L5 (first Block IIF satellite launched on May, 2010): Global Positioning System Directorate, <a href="https://www.gps.gov/technical/icwg/IS-GPS-705G.pdf" target="_blank"><b>Interface Specification IS-GPS-705 Revision G</b></a>. May, 2020.
|
||||
\li GPS L1 and L2C: Global Positioning System Directorate, <a href="https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf" target="_blank"><b>Interface Specification IS-GPS-200 Revision M</b></a>. May, 2021.
|
||||
\li GPS L1C (available with first Block III launch): Global Positioning System Directorate, <a href="https://www.gps.gov/technical/icwg/IS-GPS-800H.pdf" target="_blank"><b>Interface Specification IS-GPS-800 Revision H</b></a>. May, 2021.
|
||||
\li GPS L5 (first Block IIF satellite launched on May, 2010): Global Positioning System Directorate, <a href="https://www.gps.gov/technical/icwg/IS-GPS-705H.pdf" target="_blank"><b>Interface Specification IS-GPS-705 Revision H</b></a>. May, 2021.
|
||||
|
||||
|
||||
|
||||
|
@ -62,7 +62,7 @@ and civilian users on a continuous, worldwide basis. Two GPS services are provid
|
||||
the Precise Positioning Service (PPS), available primarily to the military of the United
|
||||
States and its allies, and the Standard Positioning Service (SPS) open to civilian users.
|
||||
|
||||
\li <b>GPS L1</b>. Defined at <a href="https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf" target="_blank"><b>Interface Specification IS-GPS-200 Revision L</b></a>, this band is centered at \f$f_{\text{GPS L1}}=1575.42\f$ MHz. The complex baseband transmitted signal can be written as
|
||||
\li <b>GPS L1</b>. Defined at <a href="https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf" target="_blank"><b>Interface Specification IS-GPS-200 Revision M</b></a>, this band is centered at \f$f_{\text{GPS L1}}=1575.42\f$ MHz. The complex baseband transmitted signal can be written as
|
||||
\f{equation}{
|
||||
s^{\text{(GPS L1)}}_{T}(t)=e_{L1I}(t) + j e_{L1Q}(t)~,
|
||||
\f}
|
||||
@ -76,12 +76,12 @@ s^{\text{(GPS L1)}}_{T}(t)=e_{L1I}(t) + j e_{L1Q}(t)~,
|
||||
\f$L_{\text{P(Y)}}=6.1871 \cdot 10^{12}\f$, and \f$p(t)\f$ is a rectangular pulse of a chip-period duration centered at \f$t=0\f$ and filtered at the transmitter.
|
||||
According to the chip rate, the binary phase-shift keying modulations in the equations above are denoted as BPSK(10) and BPSK(1), respectively. The precision P codes (named Y codes whenever
|
||||
the anti-spoofing mode is activated, encrypting the code and thus denying non-U.S. military users) are sequences of \f$7\f$ days in length. Regarding the modernization plans for GPS, it
|
||||
is worthwhile to mention that there is a new civilian-use signal planned, called L1C and defined at <a href="https://www.gps.gov/technical/icwg/IS-GPS-800G.pdf" target="_blank"><b>Interface Specification IS-GPS-800 Revision G</b></a>,
|
||||
to be broadcast on the same L1 frequency that currently contains the C/A signal. The L1C will be available with first Block III launch, currently scheduled for 2013. The implementation will
|
||||
provide C/A code to ensure backward compatibility.
|
||||
is worthwhile to mention that there is a new civilian-use signal planned, called L1C and defined at <a href="https://www.gps.gov/technical/icwg/IS-GPS-800H.pdf" target="_blank"><b>Interface Specification IS-GPS-800 Revision H</b></a>,
|
||||
to be broadcast on the same L1 frequency that currently contains the C/A signal. The L1C is available with first Block III launch. The implementation
|
||||
provides C/A code to ensure backward compatibility.
|
||||
|
||||
|
||||
\li <b>GPS L2C</b>. Defined at <a href="https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf" target="_blank"><b>Interface Specification IS-GPS-200 Revision L</b></a>, is only available on
|
||||
\li <b>GPS L2C</b>. Defined at <a href="https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf" target="_blank"><b>Interface Specification IS-GPS-200 Revision M</b></a>, is only available on
|
||||
Block IIR-M and subsequent satellite blocks. Centered at \f$f_{\text{GPS L2}}=1227.60\f$ MHz, the signal structure is the same than in (\ref{eq:GPSL1}), with the precision code in the In-phase
|
||||
component, just as in (\ref{eq:L1CAI}) but with an optional presence of the navigation message \f$D_{\text{NAV}}\f$. For the Quadrature-phase component, three options are defined:
|
||||
\f{align}{ e_{L2CQ}(t) =& \sum_{l=-\infty}^{\infty} D_{\text{CNAV}} \Big[ [l]_{10230} \Big] \oplus \left( C_{\text{CL}} \Big[ |l|_{L_{\text{CL}}} \Big] p_{\text{\tiny{1/2}}} \left( t - lT_{c,L2C} \right) + \right.\\ {} &+ \left. C_{\text{CM}} \Big[ |l|_{L_{\text{CM}}} \Big] p_{\text{\tiny{1/2}}}\left(t - \left(l+\frac{3}{4}\right)T_{c,L2C}\right) \right),\\
|
||||
@ -94,7 +94,7 @@ component, just as in (\ref{eq:L1CAI}) but with an optional presence of the navi
|
||||
data than the NAV data. It is transmitted at \f$25\f$ bps with forward error correction (FEC) encoding, resulting in \f$50\f$ sps.
|
||||
|
||||
|
||||
\li <b>GPS L5</b>. The GPS L5 link, defined at <a href="https://www.gps.gov/technical/icwg/IS-GPS-705G.pdf" target="_blank"><b>Interface Specification IS-GPS-705 Revision G</b></a>, is only available
|
||||
\li <b>GPS L5</b>. The GPS L5 link, defined at <a href="https://www.gps.gov/technical/icwg/IS-GPS-705H.pdf" target="_blank"><b>Interface Specification IS-GPS-705 Revision H</b></a>, is only available
|
||||
in Block IIF (first satellite launched on May, 2010) and subsequent satellite blocks. Centered at \f$f_{\text{GPS L5}}=1176.45\f$ MHz, this signal in space can be written as:
|
||||
\f{equation}{
|
||||
s^{\text{(GPS L5)}}_{T}(t)=e_{L5I}(t) +j e_{L5Q}(t)~,
|
||||
|
@ -39,7 +39,7 @@ message GpsEphemeris {
|
||||
// GPS-specific parameters
|
||||
int32 code_on_L2 = 26; // If 1, P code ON in L2; if 2, C/A code ON in L2;
|
||||
bool L2_P_data_flag = 27; // When true, indicates that the NAV data stream was commanded OFF on the P-code of the L2 channel
|
||||
int32 SV_accuracy = 28; // User Range Accuracy (URA) index of the SV (reference paragraph 6.2.1) for the standard positioning service user (Ref 20.3.3.3.1.3 IS-GPS-200L)
|
||||
int32 SV_accuracy = 28; // User Range Accuracy (URA) index of the SV (reference paragraph 6.2.1) for the standard positioning service user (Ref 20.3.3.3.1.3 IS-GPS-200M)
|
||||
int32 SV_health = 29; // Satellite heath status
|
||||
double TGD = 30; // Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s]
|
||||
int32 IODC = 31; // Issue of Data, Clock
|
||||
|
@ -5083,7 +5083,7 @@ void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps
|
||||
|
||||
if (gps_ephemeris_iter->second.satelliteBlock.at(gps_ephemeris_iter->second.PRN) == "IIA")
|
||||
{
|
||||
// Block II/IIA (Table 20-XI IS-GPS-200L )
|
||||
// Block II/IIA (Table 20-XI IS-GPS-200M)
|
||||
if ((gps_ephemeris_iter->second.IODC > 239) && (gps_ephemeris_iter->second.IODC < 248))
|
||||
{
|
||||
curve_fit_interval = 8;
|
||||
@ -5113,9 +5113,9 @@ void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps
|
||||
if ((gps_ephemeris_iter->second.satelliteBlock.at(gps_ephemeris_iter->second.PRN) == "IIR") ||
|
||||
(gps_ephemeris_iter->second.satelliteBlock.at(gps_ephemeris_iter->second.PRN) == "IIR-M") ||
|
||||
(gps_ephemeris_iter->second.satelliteBlock.at(gps_ephemeris_iter->second.PRN) == "IIF") ||
|
||||
(gps_ephemeris_iter->second.satelliteBlock.at(gps_ephemeris_iter->second.PRN) == "IIIA"))
|
||||
(gps_ephemeris_iter->second.satelliteBlock.at(gps_ephemeris_iter->second.PRN) == "III"))
|
||||
{
|
||||
// Block IIR/IIR-M/IIF/IIIA (Table 20-XII IS-GPS-200L )
|
||||
// Block IIR/IIR-M/IIF/III/IIIF (Table 20-XII IS-GPS-200M)
|
||||
if ((gps_ephemeris_iter->second.IODC > 239) && (gps_ephemeris_iter->second.IODC < 248))
|
||||
{
|
||||
curve_fit_interval = 8;
|
||||
@ -5202,7 +5202,7 @@ void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map<int32_t, Gps
|
||||
line += std::string(5, ' ');
|
||||
// If there is no IODE in CNAV, so we check if Toe in message Type 10, Toe in Message type 11 and Toc in message types 30-37.
|
||||
// Whenever these three terms do not match, a data set cutover has occurred and new data must be collected.
|
||||
// See IS-GPS-200L, p. 155
|
||||
// See IS-GPS-200M, paragraph 20.3.3.4.1
|
||||
if (!((gps_ephemeris_iter->second.toe1 == gps_ephemeris_iter->second.toe2) && (gps_ephemeris_iter->second.toe1 == gps_ephemeris_iter->second.toc))) // Toe1: Toe in message type 10, Toe2: Toe in message type 11
|
||||
{
|
||||
// Toe1: Toe in message type 10, Toe2: Toe in message type 11,
|
||||
|
@ -20,7 +20,7 @@
|
||||
#include <array>
|
||||
#include <cmath> // for sin, cos, sqrt, abs, pow
|
||||
|
||||
const double STRP_PI = 3.1415926535898; // Pi as defined in IS-GPS-200L
|
||||
const double STRP_PI = 3.1415926535898; // Pi as defined in IS-GPS-200M, 30.3.3.1.3
|
||||
|
||||
arma::mat Skew_symmetric(const arma::vec &a)
|
||||
{
|
||||
|
@ -1734,7 +1734,7 @@ double timediff(gtime_t t1, gtime_t t2)
|
||||
*-----------------------------------------------------------------------------*/
|
||||
double timediffweekcrossover(gtime_t t1, gtime_t t2)
|
||||
{
|
||||
// as stated in IS-GPS-200L table 20-IV footnote among other parts of the ICD,
|
||||
// as stated in IS-GPS-200M table 20-IV footnote among other parts of the ICD,
|
||||
// if tk=(t - toe) > 302400s then tk = tk - s
|
||||
// if tk=(t - toe) < -302400s then tk = tk + 604800s
|
||||
double tk = difftime(t1.time, t2.time) + t1.sec - t2.sec;
|
||||
|
@ -29,8 +29,8 @@
|
||||
*
|
||||
*
|
||||
* References :
|
||||
* [1] IS-GPS-200L, Navstar GPS Space Segment/Navigation User Interfaces,
|
||||
* 7 March, 2006
|
||||
* [1] IS-GPS-200M, Navstar GPS Space Segment/Navigation User Interfaces,
|
||||
* May, 2021
|
||||
* [2] RTCA/DO-229C, Minimum operational performanc standards for global
|
||||
* positioning system/wide area augmentation system airborne equipment,
|
||||
* RTCA inc, November 28, 2001
|
||||
|
@ -162,7 +162,7 @@ bool gps_l1_ca_telemetry_decoder_gs::gps_word_parityCheck(uint32_t gpsword)
|
||||
{
|
||||
// XOR as many bits in parallel as possible. The magic constants pick
|
||||
// up bits which are to be XOR'ed together to implement the GPS parity
|
||||
// check algorithm described in IS-GPS-200L. This avoids lengthy shift-
|
||||
// check algorithm described in IS-GPS-200M. This avoids lengthy shift-
|
||||
// and-xor loops.
|
||||
const uint32_t d1 = gpsword & 0xFBFFBF00U;
|
||||
const uint32_t d2 = my_rotl::rotl(gpsword, 1U) & 0x07FFBF01U;
|
||||
|
@ -47,7 +47,7 @@ gps_l1_ca_telemetry_decoder_gs_sptr gps_l1_ca_make_telemetry_decoder_gs(
|
||||
const Tlm_Conf &conf);
|
||||
|
||||
/*!
|
||||
* \brief This class implements a block that decodes the NAV data defined in IS-GPS-200L
|
||||
* \brief This class implements a block that decodes the NAV data defined in IS-GPS-200M
|
||||
*/
|
||||
class gps_l1_ca_telemetry_decoder_gs : public gr::block
|
||||
{
|
||||
|
@ -48,7 +48,7 @@ gps_l2c_telemetry_decoder_gs_sptr gps_l2c_make_telemetry_decoder_gs(
|
||||
const Tlm_Conf &conf);
|
||||
|
||||
/*!
|
||||
* \brief This class implements a block that decodes CNAV data defined in IS-GPS-200L
|
||||
* \brief This class implements a block that decodes CNAV data defined in IS-GPS-200M
|
||||
*/
|
||||
class gps_l2c_telemetry_decoder_gs : public gr::block
|
||||
{
|
||||
|
@ -240,7 +240,7 @@ const std::vector<int32_t> GLONASS_GNAV_CRC_P_INDEX{66, 67, 68, 69, 70, 71, 72,
|
||||
const std::vector<int32_t> GLONASS_GNAV_CRC_Q_INDEX{9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85};
|
||||
|
||||
// GLONASS GNAV NAVIGATION MESSAGE STRUCTURE
|
||||
// NAVIGATION MESSAGE FIELDS POSITIONS (from IS-GPS-200L Appendix II)
|
||||
// NAVIGATION MESSAGE FIELDS POSITIONS
|
||||
|
||||
// FRAME 1-4
|
||||
// COMMON FIELDS
|
||||
|
@ -30,7 +30,7 @@
|
||||
|
||||
|
||||
// CNAV GPS NAVIGATION MESSAGE STRUCTURE
|
||||
// NAVIGATION MESSAGE FIELDS POSITIONS (from IS-GPS-200L Appendix III)
|
||||
// NAVIGATION MESSAGE FIELDS POSITIONS (from IS-GPS-200M Appendix III)
|
||||
|
||||
constexpr int32_t GPS_CNAV_DATA_PAGE_BITS = 300;
|
||||
|
||||
@ -159,8 +159,8 @@ constexpr int32_t CNAV_DN_LSB = 1;
|
||||
const std::vector<std::pair<int32_t, int32_t> > CNAV_DELTA_TLSF({{218, 8}});
|
||||
constexpr int32_t CNAV_DELTA_TLSF_LSB = 1;
|
||||
|
||||
constexpr double CNAV_A_REF = 26559710.0; // See IS-GPS-200L, pp. 161
|
||||
constexpr double CNAV_OMEGA_DOT_REF = -2.6e-9; // semicircles / s, see IS-GPS-200L pp. 160
|
||||
constexpr double CNAV_A_REF = 26559710.0; // [m] See IS-GPS-200M, Table 30-I.
|
||||
constexpr double CNAV_OMEGA_DOT_REF = -2.6e-9; // [semicircles / s], see IS-GPS-200M, Table 30-I.
|
||||
|
||||
// TODO: Add more frames (Almanac, etc...)
|
||||
|
||||
|
@ -73,7 +73,7 @@ constexpr char GPS_CA_PREAMBLE[9] = "10001011";
|
||||
constexpr char GPS_CA_PREAMBLE_SYMBOLS_STR[161] = "1111111111111111111100000000000000000000000000000000000000000000000000000000000011111111111111111111000000000000000000001111111111111111111111111111111111111111";
|
||||
|
||||
// GPS NAVIGATION MESSAGE STRUCTURE
|
||||
// NAVIGATION MESSAGE FIELDS POSITIONS (from IS-GPS-200L Appendix II)
|
||||
// NAVIGATION MESSAGE FIELDS POSITIONS (from IS-GPS-200M Appendix II)
|
||||
|
||||
// SUBFRAME 1-5 (TLM and HOW)
|
||||
|
||||
|
@ -28,8 +28,8 @@ constexpr double SPEED_OF_LIGHT_M_S = 299792458.0; //!< Speed of light in
|
||||
constexpr double SPEED_OF_LIGHT_M_MS = 299792.4580; //!< Speed of light in vacuum [m/ms]
|
||||
|
||||
// Physical constants for GPS
|
||||
constexpr double GPS_GM = 3.986005e14; //!< Universal gravitational constant times the mass of the Earth, [m^3/s^2] IS-GPS-200L, pag 96
|
||||
constexpr double GPS_F = -4.442807633e-10; //!< Constant, [s/(m)^(1/2)], IS-GPS-200L, pag. 95
|
||||
constexpr double GPS_GM = 3.986005e14; //!< Universal gravitational constant times the mass of the Earth, [m^3/s^2] IS-GPS-200M, 20.3.3.3.3.1
|
||||
constexpr double GPS_F = -4.442807633e-10; //!< Constant, [s/(m)^(1/2)], IS-GPS-200M, 20.3.3.3.3.1
|
||||
|
||||
// Physical constants for Galileo
|
||||
constexpr double GALILEO_GM = 3.986004418e14; //!< Geocentric gravitational constant[m^3/s^2], OS SIS ICD v2.0, pag. 44
|
||||
|
@ -44,7 +44,7 @@ public:
|
||||
*/
|
||||
Beidou_Dnav_Ephemeris();
|
||||
|
||||
int SV_accuracy{}; //!< User Range Accuracy (URA) index of the SV (reference paragraph 6.2.1) for the standard positioning service user (Ref 20.3.3.3.1.3 IS-GPS-200L)
|
||||
int SV_accuracy{}; //!< User Range Accuracy (URA) index of the SV (reference paragraph 5.2.4.5) for the standard positioning service user
|
||||
int SV_health{};
|
||||
double TGD1{}; //!< Estimated Group Delay Differential on B1I [s]
|
||||
double TGD2{}; //!< Estimated Group Delay Differential on B2I [s]
|
||||
|
@ -90,7 +90,6 @@ public:
|
||||
|
||||
/*!
|
||||
* \brief Sets (\a d_satClkDrift)and returns the clock drift in seconds according to the User Algorithm for SV Clock Correction
|
||||
* (IS-GPS-200L, 20.3.3.3.3.1)
|
||||
*/
|
||||
double sv_clock_drift(double transmitTime, double timeCorrUTC);
|
||||
|
||||
@ -169,7 +168,6 @@ private:
|
||||
/*
|
||||
* Accounts for the beginning or end of week crossover
|
||||
*
|
||||
* See paragraph 20.3.3.3.3.1 (IS-GPS-200L)
|
||||
* \param[in] - time in seconds
|
||||
* \param[out] - corrected time, in seconds
|
||||
*/
|
||||
|
@ -32,7 +32,7 @@ public:
|
||||
/*!
|
||||
* \brief Sets (\a satClkDrift) and (\a dtr), and returns the clock drift in
|
||||
* seconds according to the User Algorithm for SV Clock Correction
|
||||
* (IS-GPS-200L, 20.3.3.3.3.1, and Galileo OS SIS ICD, 5.1.4).
|
||||
* (IS-GPS-200M, 20.3.3.3.3.1, and Galileo OS SIS ICD, 5.1.4).
|
||||
*/
|
||||
double sv_clock_drift(double transmitTime);
|
||||
|
||||
|
@ -28,9 +28,9 @@
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This class is a storage for the GPS SV ALMANAC data as described in IS-GPS-200L
|
||||
* \brief This class is a storage for the GPS SV ALMANAC data as described in IS-GPS-200M
|
||||
*
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf Appendix II
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf Appendix II
|
||||
*/
|
||||
class Gps_Almanac : public Gnss_Almanac
|
||||
{
|
||||
|
@ -30,9 +30,9 @@
|
||||
|
||||
/*!
|
||||
* \brief This is a storage class for the GPS CNAV ephemeris data as described
|
||||
* in IS-GPS-200L
|
||||
* in IS-GPS-200M
|
||||
*
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf Appendix III
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf Appendix III
|
||||
*/
|
||||
class Gps_CNAV_Ephemeris : public Gnss_Ephemeris
|
||||
{
|
||||
@ -49,8 +49,8 @@ public:
|
||||
double Adot{}; //!< Change rate in semi-major axis
|
||||
double delta_ndot{}; //!< Rate of mean motion difference from computed value
|
||||
double delta_OMEGAdot{}; //!< Rate of Right Ascension difference [semi-circles/s]
|
||||
int32_t toe1{}; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200L) [s]
|
||||
int32_t toe2{}; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200L) [s]
|
||||
int32_t toe1{}; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200M) [s]
|
||||
int32_t toe2{}; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200M) [s]
|
||||
int32_t signal_health{}; //!< Signal health (L1/L2/L5)
|
||||
int32_t top{}; //!< Data predict time of week
|
||||
int32_t URA{}; //!< ED Accuracy Index
|
||||
|
@ -27,9 +27,9 @@
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This class is a storage for the GPS IONOSPHERIC data as described in IS-GPS-200L
|
||||
* \brief This class is a storage for the GPS IONOSPHERIC data as described in IS-GPS-200M
|
||||
*
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf Appendix III
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf Appendix III
|
||||
*/
|
||||
class Gps_CNAV_Iono : public Gps_Iono
|
||||
{
|
||||
|
@ -1,8 +1,8 @@
|
||||
/*!
|
||||
* \file gps_cnav_navigation_message.cc
|
||||
* \brief Implementation of a GPS CNAV Data message decoder as described in IS-GPS-200L
|
||||
* \brief Implementation of a GPS CNAV Data message decoder as described in IS-GPS-200M
|
||||
*
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf Appendix III
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf Appendix III
|
||||
* \author Javier Arribas, 2015. jarribas(at)cttc.es
|
||||
*
|
||||
* -----------------------------------------------------------------------------
|
||||
|
@ -37,9 +37,9 @@
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This class decodes a GPS CNAV Data message as described in IS-GPS-200L
|
||||
* \brief This class decodes a GPS CNAV Data message as described in IS-GPS-200M
|
||||
*
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf Appendix III
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf Appendix III
|
||||
*/
|
||||
class Gps_CNAV_Navigation_Message
|
||||
{
|
||||
|
@ -27,9 +27,9 @@
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This class is a storage for the GPS UTC MODEL data as described in in IS-GPS-200L
|
||||
* \brief This class is a storage for the GPS UTC MODEL data as described in in IS-GPS-200M
|
||||
*
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf Appendix III
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf Appendix III
|
||||
*/
|
||||
class Gps_CNAV_Utc_Model : public Gps_Utc_Model
|
||||
{
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file gps_ephemeris.cc
|
||||
* \brief Interface of a GPS EPHEMERIS storage and orbital model functions
|
||||
*
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf Appendix II
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf Appendix II
|
||||
* \author Javier Arribas, 2013. jarribas(at)cttc.es
|
||||
*
|
||||
* -----------------------------------------------------------------------------
|
||||
|
@ -33,9 +33,9 @@
|
||||
|
||||
/*!
|
||||
* \brief This class is a storage and orbital model functions for the GPS SV
|
||||
* ephemeris data as described in IS-GPS-200L
|
||||
* ephemeris data as described in IS-GPS-200M
|
||||
*
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf Appendix II
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf Appendix II
|
||||
*/
|
||||
class Gps_Ephemeris : public Gnss_Ephemeris
|
||||
{
|
||||
@ -47,7 +47,7 @@ public:
|
||||
|
||||
int32_t code_on_L2{}; //!< If 1, P code ON in L2; if 2, C/A code ON in L2;
|
||||
bool L2_P_data_flag{}; //!< When true, indicates that the NAV data stream was commanded OFF on the P-code of the L2 channel
|
||||
int32_t SV_accuracy{}; //!< User Range Accuracy (URA) index of the SV (reference paragraph 6.2.1) for the standard positioning service user (Ref 20.3.3.3.1.3 IS-GPS-200L)
|
||||
int32_t SV_accuracy{}; //!< User Range Accuracy (URA) index of the SV (reference paragraph 6.2.1) for the standard positioning service user (Ref 20.3.3.3.1.3 IS-GPS-200M)
|
||||
int32_t SV_health{}; //!< Satellite heath status
|
||||
double TGD{}; //!< Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s]
|
||||
int32_t IODC{}; //!< Issue of Data, Clock
|
||||
|
@ -28,9 +28,9 @@
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This class is a storage for the GPS IONOSPHERIC data as described in IS-GPS-200L
|
||||
* \brief This class is a storage for the GPS IONOSPHERIC data as described in IS-GPS-200M
|
||||
*
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf Appendix II
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf Appendix II
|
||||
*/
|
||||
class Gps_Iono
|
||||
{
|
||||
|
@ -1,9 +1,9 @@
|
||||
/*!
|
||||
* \file gps_navigation_message.cc
|
||||
* \brief Implementation of a GPS NAV Data message decoder as described in IS-GPS-200L
|
||||
* \brief Implementation of a GPS NAV Data message decoder as described in IS-GPS-200M
|
||||
* \author Javier Arribas, 2011. jarribas(at)cttc.es
|
||||
*
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf Appendix II
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf Appendix II
|
||||
*
|
||||
*
|
||||
* -----------------------------------------------------------------------------
|
||||
@ -135,7 +135,7 @@ int32_t Gps_Navigation_Message::subframe_decoder(char* subframe)
|
||||
switch (subframe_ID)
|
||||
{
|
||||
// --- Decode the sub-frame id -----------------------------------------
|
||||
// ICD (IS-GPS-200L Appendix II). https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf
|
||||
// ICD (IS-GPS-200M Appendix II). https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf
|
||||
case 1:
|
||||
// --- It is subframe 1 -------------------------------------
|
||||
// Compute the time of week (TOW) of the first sub-frames in the array ====
|
||||
@ -233,7 +233,7 @@ int32_t Gps_Navigation_Message::subframe_decoder(char* subframe)
|
||||
b_antispoofing_flag = read_navigation_bool(subframe_bits, ANTI_SPOOFING_FLAG);
|
||||
SV_data_ID = static_cast<int32_t>(read_navigation_unsigned(subframe_bits, SV_DATA_ID));
|
||||
SV_page = static_cast<int32_t>(read_navigation_unsigned(subframe_bits, SV_PAGE));
|
||||
if (SV_page > 24 && SV_page < 33) // Page 4 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200L, page 110)
|
||||
if (SV_page > 24 && SV_page < 33) // Page 4 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200M)
|
||||
{
|
||||
//! \TODO read almanac
|
||||
if (SV_data_ID != 0)
|
||||
@ -241,12 +241,12 @@ int32_t Gps_Navigation_Message::subframe_decoder(char* subframe)
|
||||
}
|
||||
}
|
||||
|
||||
if (SV_page == 52) // Page 13 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200L, page 110)
|
||||
if (SV_page == 52) // Page 13 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200M)
|
||||
{
|
||||
//! \TODO read Estimated Range Deviation (ERD) values
|
||||
}
|
||||
|
||||
if (SV_page == 56) // Page 18 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200L, page 110)
|
||||
if (SV_page == 56) // Page 18 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200M)
|
||||
{
|
||||
// Page 18 - Ionospheric and UTC data
|
||||
d_alpha0 = static_cast<double>(read_navigation_signed(subframe_bits, ALPHA_0));
|
||||
@ -284,7 +284,7 @@ int32_t Gps_Navigation_Message::subframe_decoder(char* subframe)
|
||||
// Reserved
|
||||
}
|
||||
|
||||
if (SV_page == 63) // Page 25 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200L, page 110)
|
||||
if (SV_page == 63) // Page 25 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200M)
|
||||
{
|
||||
// Page 25 Anti-Spoofing, SV config and almanac health (PRN: 25-32)
|
||||
//! \TODO Read Anti-Spoofing, SV config
|
||||
@ -317,7 +317,7 @@ int32_t Gps_Navigation_Message::subframe_decoder(char* subframe)
|
||||
{
|
||||
}
|
||||
}
|
||||
if (SV_page_5 == 51) // Page 25 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200L, page 110)
|
||||
if (SV_page_5 == 51) // Page 25 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200M)
|
||||
{
|
||||
i_Toa = static_cast<int32_t>(read_navigation_unsigned(subframe_bits, T_OA));
|
||||
i_Toa = i_Toa * T_OA_LSB;
|
||||
|
@ -38,9 +38,9 @@
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This class decodes a GPS NAV Data message as described in IS-GPS-200L
|
||||
* \brief This class decodes a GPS NAV Data message as described in IS-GPS-200M
|
||||
*
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf Appendix II
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf Appendix II
|
||||
*/
|
||||
class Gps_Navigation_Message
|
||||
{
|
||||
@ -72,7 +72,7 @@ public:
|
||||
|
||||
/*!
|
||||
* \brief Computes the Coordinated Universal Time (UTC) and
|
||||
* returns it in [s] (IS-GPS-200L, 20.3.3.5.2.4)
|
||||
* returns it in [s] (IS-GPS-200M, 20.3.3.5.2.4)
|
||||
*/
|
||||
double utc_time(const double gpstime_corrected) const;
|
||||
|
||||
@ -162,8 +162,8 @@ private:
|
||||
double d_Cus{}; // Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad]
|
||||
double d_sqrt_A{}; // Square Root of the Semi-Major Axis [sqrt(m)]
|
||||
// broadcast orbit 3
|
||||
int32_t d_Toe{}; // Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200L) [s]
|
||||
int32_t d_Toc{}; // clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200L) [s]
|
||||
int32_t d_Toe{}; // Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200M) [s]
|
||||
int32_t d_Toc{}; // clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200M) [s]
|
||||
double d_Cic{}; // Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad]
|
||||
double d_OMEGA0{}; // Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles]
|
||||
double d_Cis{}; // Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad]
|
||||
@ -178,7 +178,7 @@ private:
|
||||
int32_t i_GPS_week{}; // GPS week number, aka WN [week]
|
||||
bool b_L2_P_data_flag{}; // When true, indicates that the NAV data stream was commanded OFF on the P-code of the L2 channel
|
||||
// broadcast orbit 6
|
||||
int32_t i_SV_accuracy{}; // User Range Accuracy (URA) index of the SV (reference paragraph 6.2.1) for the standard positioning service user (Ref 20.3.3.3.1.3 IS-GPS-200L)
|
||||
int32_t i_SV_accuracy{}; // User Range Accuracy (URA) index of the SV (reference paragraph 6.2.1) for the standard positioning service user (Ref 20.3.3.3.1.3 IS-GPS-200M)
|
||||
int32_t i_SV_health{};
|
||||
double d_TGD{}; // Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s]
|
||||
int32_t d_IODC{}; // Issue of Data, Clock
|
||||
@ -226,10 +226,10 @@ private:
|
||||
double d_beta3{}; // Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3]
|
||||
|
||||
// UTC parameters
|
||||
double d_A0{}; // Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200L) [s]
|
||||
double d_A1{}; // 1st order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200L) [s/s]
|
||||
double d_A0{}; // Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200M) [s]
|
||||
double d_A1{}; // 1st order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200M) [s/s]
|
||||
|
||||
int32_t d_t_OT{}; // Reference time for UTC data (reference 20.3.4.5 and 20.3.3.5.2.4 IS-GPS-200L) [s]
|
||||
int32_t d_t_OT{}; // Reference time for UTC data (reference 20.3.4.5 and 20.3.3.5.2.4 IS-GPS-200M) [s]
|
||||
int32_t i_WN_T{}; // UTC reference week number [weeks]
|
||||
int32_t d_DeltaT_LS{}; // delta time due to leap seconds [s]. Number of leap seconds since 6-Jan-1980 as transmitted by the GPS almanac.
|
||||
int32_t i_WN_LSF{}; // Week number at the end of which the leap second becomes effective [weeks]
|
||||
|
@ -28,9 +28,9 @@
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This class is a storage for the GPS UTC MODEL data as described in IS-GPS-200L
|
||||
* \brief This class is a storage for the GPS UTC MODEL data as described in IS-GPS-200M
|
||||
*
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200L.pdf Appendix II
|
||||
* See https://www.gps.gov/technical/icwg/IS-GPS-200M.pdf Appendix II
|
||||
*/
|
||||
class Gps_Utc_Model
|
||||
{
|
||||
@ -41,10 +41,10 @@ public:
|
||||
Gps_Utc_Model() = default;
|
||||
|
||||
// UTC parameters
|
||||
double A0{}; //!< Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200L) [s]
|
||||
double A1{}; //!< 1st order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200L) [s/s]
|
||||
double A2{}; //!< 2nd order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200L) [s/s]
|
||||
int32_t tot{}; //!< Reference time for UTC data (reference 20.3.4.5 and 20.3.3.5.2.4 IS-GPS-200L) [s]
|
||||
double A0{}; //!< Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200M) [s]
|
||||
double A1{}; //!< 1st order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200M) [s/s]
|
||||
double A2{}; //!< 2nd order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200M) [s/s]
|
||||
int32_t tot{}; //!< Reference time for UTC data (reference 20.3.4.5 and 20.3.3.5.2.4 IS-GPS-200M) [s]
|
||||
int32_t WN_T{}; //!< UTC reference week number [weeks]
|
||||
int32_t DeltaT_LS{}; //!< Delta time due to leap seconds [s]. Number of leap seconds since 6-Jan-1980 as transmitted by the GPS almanac.
|
||||
int32_t WN_LSF{}; //!< Week number at the end of which the leap second becomes effective [weeks]
|
||||
|
Loading…
Reference in New Issue
Block a user