1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-09-29 07:20:51 +00:00

Simplify initializations in system_parameters library

This commit is contained in:
Carles Fernandez 2020-06-10 10:15:59 +02:00
parent ffcd5b55da
commit 34a250246a
No known key found for this signature in database
GPG Key ID: 4C583C52B0C3877D
65 changed files with 1045 additions and 2580 deletions

View File

@ -159,7 +159,7 @@ bool gps_l1_ca_telemetry_decoder_gs::gps_word_parityCheck(uint32_t gpsword)
void gps_l1_ca_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satellite) void gps_l1_ca_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satellite)
{ {
d_nav.reset(); d_nav = Gps_Navigation_Message();
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
DLOG(INFO) << "Setting decoder Finite State Machine to satellite " << d_satellite; DLOG(INFO) << "Setting decoder Finite State Machine to satellite " << d_satellite;
d_nav.i_satellite_PRN = d_satellite.get_PRN(); d_nav.i_satellite_PRN = d_satellite.get_PRN();

View File

@ -93,14 +93,14 @@ void gps_l5_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satellite)
{ {
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
DLOG(INFO) << "GPS L5 CNAV telemetry decoder in channel " << this->d_channel << " set to satellite " << d_satellite; DLOG(INFO) << "GPS L5 CNAV telemetry decoder in channel " << this->d_channel << " set to satellite " << d_satellite;
d_CNAV_Message.reset(); d_CNAV_Message = Gps_CNAV_Navigation_Message();
} }
void gps_l5_telemetry_decoder_gs::set_channel(int32_t channel) void gps_l5_telemetry_decoder_gs::set_channel(int32_t channel)
{ {
d_channel = channel; d_channel = channel;
d_CNAV_Message.reset(); d_CNAV_Message = Gps_CNAV_Navigation_Message();
DLOG(INFO) << "GPS L5 CNAV channel set to " << channel; DLOG(INFO) << "GPS L5 CNAV channel set to " << channel;
// ############# ENABLE DATA FILE LOG ################# // ############# ENABLE DATA FILE LOG #################
if (d_dump == true) if (d_dump == true)

View File

@ -13,31 +13,19 @@ set(SYSTEM_PARAMETERS_SOURCES
gnss_signal.cc gnss_signal.cc
gps_navigation_message.cc gps_navigation_message.cc
gps_ephemeris.cc gps_ephemeris.cc
gps_iono.cc
gps_almanac.cc
gps_utc_model.cc gps_utc_model.cc
gps_acq_assist.cc
agnss_ref_time.cc
agnss_ref_location.cc
galileo_utc_model.cc galileo_utc_model.cc
galileo_ephemeris.cc galileo_ephemeris.cc
galileo_almanac.cc
galileo_almanac_helper.cc galileo_almanac_helper.cc
galileo_iono.cc
galileo_navigation_message.cc galileo_navigation_message.cc
beidou_dnav_navigation_message.cc beidou_dnav_navigation_message.cc
beidou_dnav_ephemeris.cc beidou_dnav_ephemeris.cc
beidou_dnav_iono.cc
beidou_dnav_almanac.cc
beidou_dnav_utc_model.cc
sbas_ephemeris.cc sbas_ephemeris.cc
galileo_fnav_message.cc galileo_fnav_message.cc
gps_cnav_ephemeris.cc gps_cnav_ephemeris.cc
gps_cnav_navigation_message.cc gps_cnav_navigation_message.cc
gps_cnav_iono.cc
gps_cnav_utc_model.cc gps_cnav_utc_model.cc
glonass_gnav_ephemeris.cc glonass_gnav_ephemeris.cc
glonass_gnav_almanac.cc
glonass_gnav_utc_model.cc glonass_gnav_utc_model.cc
glonass_gnav_navigation_message.cc glonass_gnav_navigation_message.cc
) )

View File

@ -1,29 +0,0 @@
/*!
* \file agnss_ref_location.cc
* \brief Interface of an Assisted GNSS REFERENCE LOCATION storage
*
* \author Javier Arribas, 2013. jarribas(at)cttc.es
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* -------------------------------------------------------------------------
*/
#include "agnss_ref_location.h"
Agnss_Ref_Location::Agnss_Ref_Location()
{
valid = false;
lat = 0.0;
lon = 0.0;
uncertainty = 0.0;
}

View File

@ -31,14 +31,15 @@
class Agnss_Ref_Location class Agnss_Ref_Location
{ {
public: public:
bool valid;
double lat;
double lon;
double uncertainty;
/*! /*!
* Default constructor * Default constructor
*/ */
Agnss_Ref_Location(); Agnss_Ref_Location() = default;
bool valid{};
double lat{};
double lon{};
double uncertainty{};
template <class Archive> template <class Archive>

View File

@ -1,30 +0,0 @@
/*!
* \file agnss_ref_time.cc
* \brief Interface of an Assisted GNSS REFERENCE TIME storage
*
* \author Javier Arribas, 2013. jarribas(at)cttc.es
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* -------------------------------------------------------------------------
*/
#include "agnss_ref_time.h"
Agnss_Ref_Time::Agnss_Ref_Time()
{
valid = false;
d_TOW = 0.0;
d_Week = 0.0;
d_tv_sec = 0.0;
d_tv_usec = 0.0;
}

View File

@ -31,15 +31,16 @@
class Agnss_Ref_Time class Agnss_Ref_Time
{ {
public: public:
bool valid;
double d_TOW;
double d_Week;
double d_tv_sec;
double d_tv_usec;
/*! /*!
* Default constructor * Default constructor
*/ */
Agnss_Ref_Time(); Agnss_Ref_Time() = default;
bool valid{};
double d_TOW{};
double d_Week{};
double d_tv_sec{};
double d_tv_usec{};
template <class Archive> template <class Archive>

View File

@ -1,38 +0,0 @@
/*!
* \file beidou_dnav_almanac.cc
* \brief Interface of a Beidou DNAV Almanac storage
*
* See http://en.beidou.gov.cn/SYSTEMS/Officialdocument/201902/P020190227601370045731.pdf
* \author Sergi Segura, 2018. sergi.segura.munoz(at)gmail.com
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* -------------------------------------------------------------------------
*/
#include "beidou_dnav_almanac.h"
Beidou_Dnav_Almanac::Beidou_Dnav_Almanac()
{
i_satellite_PRN = 0;
d_Delta_i = 0.0;
d_Toa = 0.0;
d_M_0 = 0.0;
d_e_eccentricity = 0.0;
d_sqrt_A = 0.0;
d_OMEGA0 = 0.0;
d_OMEGA = 0.0;
d_OMEGA_DOT = 0.0;
i_SV_health = 0;
d_A_f0 = 0.0;
d_A_f1 = 0.0;
}

View File

@ -31,23 +31,23 @@
class Beidou_Dnav_Almanac class Beidou_Dnav_Almanac
{ {
public: public:
unsigned int i_satellite_PRN; //!< SV PRN NUMBER
double d_Delta_i;
double d_Toa; //!< Almanac data reference time of week [s]
double d_M_0; //!< Mean Anomaly at Reference Time [semi-circles]
double d_e_eccentricity; //!< Eccentricity [dimensionless]
double d_sqrt_A; //!< Square Root of the Semi-Major Axis [sqrt(m)]
double d_OMEGA0; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles]
double d_OMEGA; //!< Argument of Perigee [semi-cicles]
double d_OMEGA_DOT; //!< Rate of Right Ascension [semi-circles/s]
int i_SV_health; // SV Health
double d_A_f0; //!< Coefficient 0 of code phase offset model [s]
double d_A_f1; //!< Coefficient 1 of code phase offset model [s/s]
/*! /*!
* Default constructor * Default constructor
*/ */
Beidou_Dnav_Almanac(); Beidou_Dnav_Almanac() = default;
unsigned int i_satellite_PRN{}; //!< SV PRN NUMBER
double d_Delta_i{};
double d_Toa{}; //!< Almanac data reference time of week [s]
double d_M_0{}; //!< Mean Anomaly at Reference Time [semi-circles]
double d_e_eccentricity{}; //!< Eccentricity [dimensionless]
double d_sqrt_A{}; //!< Square Root of the Semi-Major Axis [sqrt(m)]
double d_OMEGA0{}; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles]
double d_OMEGA{}; //!< Argument of Perigee [semi-cicles]
double d_OMEGA_DOT{}; //!< Rate of Right Ascension [semi-circles/s]
int i_SV_health{}; //!< SV Health
double d_A_f0{}; //!< Coefficient 0 of code phase offset model [s]
double d_A_f1{}; //!< Coefficient 1 of code phase offset model [s/s]
template <class Archive> template <class Archive>

View File

@ -22,66 +22,15 @@
#include "gnss_satellite.h" #include "gnss_satellite.h"
#include <cmath> #include <cmath>
Beidou_Dnav_Ephemeris::Beidou_Dnav_Ephemeris() Beidou_Dnav_Ephemeris::Beidou_Dnav_Ephemeris()
{ {
i_satellite_PRN = 0;
d_TOW = 0;
d_Crs = 0;
d_Delta_n = 0;
d_M_0 = 0;
d_Cuc = 0;
d_eccentricity = 0;
d_Cus = 0;
d_sqrt_A = 0;
d_Toe = 0;
d_Toc = 0;
d_Cic = 0;
d_OMEGA0 = 0;
d_Cis = 0;
d_i_0 = 0;
d_Crc = 0;
d_OMEGA = 0;
d_OMEGA_DOT = 0;
d_IDOT = 0;
i_BEIDOU_week = 0;
i_SV_accuracy = 0;
i_SV_health = 0;
d_AODE = 0;
d_TGD1 = 0;
d_TGD2 = 0;
d_AODC = 0; // Issue of Data, Clock
i_AODO = 0; // Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s]
d_AODC = 0;
b_fit_interval_flag = false;
d_spare1 = 0.0;
d_spare2 = 0.0;
i_sig_type = 0;
i_nav_type = 0;
d_A_f0 = 0; // Coefficient 0 of code phase offset model [s]
d_A_f1 = 0; // Coefficient 1 of code phase offset model [s/s]
d_A_f2 = 0; // Coefficient 2 of code phase offset model [s/s^2]
b_integrity_status_flag = false;
b_alert_flag = false; // If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk.
b_antispoofing_flag = false; // If true, the AntiSpoofing mode is ON in that SV
auto gnss_sat = Gnss_Satellite(); auto gnss_sat = Gnss_Satellite();
std::string _system("Beidou"); std::string _system("Beidou");
for (unsigned int i = 1; i < 36; i++) for (unsigned int i = 1; i < 36; i++)
{ {
satelliteBlock[i] = gnss_sat.what_block(_system, i); satelliteBlock[i] = gnss_sat.what_block(_system, i);
} }
d_satClkDrift = 0.0;
d_dtr = 0.0;
d_satpos_X = 0.0;
d_satpos_Y = 0.0;
d_satpos_Z = 0.0;
d_satvel_X = 0.0;
d_satvel_Y = 0.0;
d_satvel_Z = 0.0;
} }

View File

@ -41,44 +41,44 @@ public:
*/ */
Beidou_Dnav_Ephemeris(); Beidou_Dnav_Ephemeris();
unsigned int i_satellite_PRN; //!< SV PRN NUMBER unsigned int i_satellite_PRN{}; //!< SV PRN NUMBER
double d_TOW; //!< Time of BEIDOU Week of the ephemeris set (taken from subframes TOW) [s] double d_TOW{}; //!< Time of BEIDOU Week of the ephemeris set (taken from subframes TOW) [s]
double d_Crs; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m] double d_Crs{}; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m]
double d_Delta_n; //!< Mean Motion Difference From Computed Value [semi-circles/s] double d_Delta_n{}; //!< Mean Motion Difference From Computed Value [semi-circles/s]
double d_M_0; //!< Mean Anomaly at Reference Time [semi-circles] double d_M_0{}; //!< Mean Anomaly at Reference Time [semi-circles]
double d_Cuc; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] double d_Cuc{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad]
double d_eccentricity; //!< Eccentricity [dimensionless] double d_eccentricity{}; //!< Eccentricity [dimensionless]
double d_Cus; //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad] 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)] double d_sqrt_A{}; //!< Square Root of the Semi-Major Axis [sqrt(m)]
double d_Toe; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200K) [s] double d_Toe{}; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200K) [s]
double d_Toc; //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200K) [s] double d_Toc{}; //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200K) [s]
double d_Cic; //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad] 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_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] double d_Cis{}; //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad]
double d_i_0; //!< Inclination Angle at Reference Time [semi-circles] double d_i_0{}; //!< Inclination Angle at Reference Time [semi-circles]
double d_Crc; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m] double d_Crc{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m]
double d_OMEGA; //!< Argument of Perigee [semi-cicles] double d_OMEGA{}; //!< Argument of Perigee [semi-cicles]
double d_OMEGA_DOT; //!< Rate of Right Ascension [semi-circles/s] double d_OMEGA_DOT{}; //!< Rate of Right Ascension [semi-circles/s]
double d_IDOT; //!< Rate of Inclination Angle [semi-circles/s] double d_IDOT{}; //!< Rate of Inclination Angle [semi-circles/s]
int i_BEIDOU_week; //!< BEIDOU week number, aka WN [week] int i_BEIDOU_week{}; //!< BEIDOU week number, aka WN [week]
int 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-200K) int 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-200K)
int i_SV_health; int i_SV_health{};
double d_TGD1; //!< Estimated Group Delay Differential on B1I [s] double d_TGD1{}; //!< Estimated Group Delay Differential on B1I [s]
double d_TGD2; //!< Estimated Group Delay Differential on B2I [s] double d_TGD2{}; //!< Estimated Group Delay Differential on B2I [s]
double d_AODC; //!< Age of Data, Clock double d_AODC{}; //!< Age of Data, Clock
double d_AODE; //!< Age of Data, Ephemeris double d_AODE{}; //!< Age of Data, Ephemeris
int i_AODO; //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s] int i_AODO{}; //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s]
int i_sig_type; //!< BDS: data source (0:unknown,1:B1I,2:B1Q,3:B2I,4:B2Q,5:B3I,6:B3Q) */ int i_sig_type{}; //!< BDS: data source (0:unknown,1:B1I,2:B1Q,3:B2I,4:B2Q,5:B3I,6:B3Q) */
int i_nav_type; //!< BDS: nav type (0:unknown,1:IGSO/MEO,2:GEO) */ int i_nav_type{}; //!< BDS: nav type (0:unknown,1:IGSO/MEO,2:GEO) */
bool b_fit_interval_flag; //!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours. bool b_fit_interval_flag{}; //!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours.
double d_spare1; double d_spare1{};
double d_spare2; double d_spare2{};
double d_A_f0; //!< Coefficient 0 of code phase offset model [s] double d_A_f0{}; //!< Coefficient 0 of code phase offset model [s]
double d_A_f1; //!< Coefficient 1 of code phase offset model [s/s] double d_A_f1{}; //!< Coefficient 1 of code phase offset model [s/s]
double d_A_f2; //!< Coefficient 2 of code phase offset model [s/s^2] double d_A_f2{}; //!< Coefficient 2 of code phase offset model [s/s^2]
/*! \brief If true, enhanced level of integrity assurance. /*! \brief If true, enhanced level of integrity assurance.
* *
@ -90,23 +90,23 @@ public:
* times the upper bound value of the current broadcast URA index, for more than 5.2 seconds, without an * times the upper bound value of the current broadcast URA index, for more than 5.2 seconds, without an
* accompanying alert, is less than 1E-8 per hour. * accompanying alert, is less than 1E-8 per hour.
*/ */
bool b_integrity_status_flag; bool b_integrity_status_flag{};
bool b_alert_flag; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk. bool b_alert_flag{}; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk.
bool b_antispoofing_flag; //!< If true, the AntiSpoofing mode is ON in that SV bool b_antispoofing_flag{}; //!< If true, the AntiSpoofing mode is ON in that SV
// clock terms derived from ephemeris data // clock terms derived from ephemeris data
double d_satClkDrift; //!< GPS clock error double d_satClkDrift{}; //!< GPS clock error
double d_dtr; //!< relativistic clock correction term double d_dtr{}; //!< relativistic clock correction term
// satellite positions // satellite positions
double d_satpos_X; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis. double d_satpos_X{}; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis.
double d_satpos_Y; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system. double d_satpos_Y{}; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system.
double d_satpos_Z; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP). double d_satpos_Z{}; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP).
// Satellite velocity // Satellite velocity
double d_satvel_X; //!< Earth-fixed velocity coordinate x of the satellite [m] double d_satvel_X{}; //!< Earth-fixed velocity coordinate x of the satellite [m]
double d_satvel_Y; //!< Earth-fixed velocity coordinate y of the satellite [m] double d_satvel_Y{}; //!< Earth-fixed velocity coordinate y of the satellite [m]
double d_satvel_Z; //!< Earth-fixed velocity coordinate z of the satellite [m] double d_satvel_Z{}; //!< Earth-fixed velocity coordinate z of the satellite [m]
std::map<int, std::string> satelliteBlock; //!< Map that stores to which block the PRN belongs std::map<int, std::string> satelliteBlock; //!< Map that stores to which block the PRN belongs

View File

@ -1,33 +0,0 @@
/*!
* \file beidou_dnav_iono.cc
* \brief Interface of a BEIDOU IONOSPHERIC MODEL storage
* \author Sergi Segura, 2018. sergi.segura.munoz(at)gmail.com
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* -------------------------------------------------------------------------
*/
#include "beidou_dnav_iono.h"
Beidou_Dnav_Iono::Beidou_Dnav_Iono()
{
valid = false;
d_alpha0 = 0.0;
d_alpha1 = 0.0;
d_alpha2 = 0.0;
d_alpha3 = 0.0;
d_beta0 = 0.0;
d_beta1 = 0.0;
d_beta2 = 0.0;
d_beta3 = 0.0;
}

View File

@ -31,18 +31,18 @@
class Beidou_Dnav_Iono class Beidou_Dnav_Iono
{ {
public: public:
bool valid; //!< Valid flag Beidou_Dnav_Iono() = default; //!< Default constructor
// Ionospheric parameters
double d_alpha0; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s]
double d_alpha1; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle]
double d_alpha2; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2]
double d_alpha3; //!< Coefficient 3 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^3]
double d_beta0; //!< Coefficient 0 of a cubic equation representing the period of the model [s]
double d_beta1; //!< Coefficient 1 of a cubic equation representing the period of the model [s/semi-circle]
double d_beta2; //!< Coefficient 2 of a cubic equation representing the period of the model [s(semi-circle)^2]
double d_beta3; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3]
Beidou_Dnav_Iono(); //!< Default constructor bool valid{}; //!< Valid flag
// Ionospheric parameters
double d_alpha0{}; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s]
double d_alpha1{}; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle]
double d_alpha2{}; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2]
double d_alpha3{}; //!< Coefficient 3 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^3]
double d_beta0{}; //!< Coefficient 0 of a cubic equation representing the period of the model [s]
double d_beta1{}; //!< Coefficient 1 of a cubic equation representing the period of the model [s/semi-circle]
double d_beta2{}; //!< Coefficient 2 of a cubic equation representing the period of the model [s(semi-circle)^2]
double d_beta3{}; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3]
template <class Archive> template <class Archive>

View File

@ -26,187 +26,18 @@
#include <limits> // for std::numeric_limits #include <limits> // for std::numeric_limits
void Beidou_Dnav_Navigation_Message::reset() Beidou_Dnav_Navigation_Message::Beidou_Dnav_Navigation_Message()
{ {
// Control variable for message decoding
flag_eph_valid = false;
flag_iono_valid = false;
flag_utc_model_valid = false;
flag_crc_test = false;
flag_d1_sf1 = false;
flag_d1_sf2 = false;
flag_d1_sf3 = false;
flag_d1_sf4 = false;
flag_d1_sf5 = false;
flag_d1_sf5_p7 = false;
flag_d1_sf5_p8 = false;
flag_d1_sf5_p9 = false;
flag_d1_sf5_p10 = false;
flag_new_SOW_available = false;
d_previous_aode = 0.0;
flag_sf1_p1 = false;
flag_sf1_p2 = false;
flag_sf1_p3 = false;
flag_sf1_p4 = false;
flag_sf1_p5 = false;
flag_sf1_p6 = false;
flag_sf1_p7 = false;
flag_sf1_p8 = false;
flag_sf1_p9 = false;
flag_sf1_p10 = false;
// D2 NAV Decoding UNique Attributes
d_A_f1_msb_bits = 0;
d_A_f1_lsb_bits = 0;
d_Cuc_msb_bits = 0;
d_Cuc_lsb_bits = 0;
d_eccentricity_msb_bits = 0;
d_eccentricity_lsb_bits = 0;
d_Cic_msb_bits = 0;
d_Cic_lsb_bits = 0;
d_i_0_msb_bits = 0;
d_i_0_lsb_bits = 0;
d_OMEGA_msb_bits = 0;
d_OMEGA_lsb_bits = 0;
d_OMEGA_DOT_msb_bits = 0;
d_OMEGA_DOT_lsb_bits = 0;
// D2 NAV Decoding UNique Attributes
d_eccentricity_msb = 0;
d_eccentricity_lsb = 0;
d_SOW = 0.0;
d_SOW_SF1 = 0.0;
d_SOW_SF2 = 0.0;
d_SOW_SF3 = 0.0;
d_SOW_SF4 = 0.0;
d_SOW_SF5 = 0.0;
d_AODE = 0.0;
d_Crs = 0.0;
d_Delta_n = 0.0;
d_M_0 = 0.0;
d_Cuc = 0.0;
d_eccentricity = 0.0;
d_Cus = 0.0;
d_sqrt_A = 0.0;
d_Toe_sf2 = 0.0;
d_Toe_sf3 = 0.0;
d_Toe = 0.0;
d_Toc = 0.0;
d_Cic = 0.0;
d_OMEGA0 = 0.0;
d_Cis = 0.0;
d_i_0 = 0.0;
d_Crc = 0.0;
d_OMEGA = 0.0;
d_OMEGA_DOT = 0.0;
d_IDOT = 0.0;
i_BEIDOU_week = 0;
i_SV_accuracy = 0;
i_SV_health = 0;
d_TGD1 = 0.0;
d_TGD2 = 0.0;
d_AODC = -1.0;
// i_AODO = 0;
b_fit_interval_flag = false;
d_spare1 = 0.0;
d_spare2 = 0.0;
d_A_f0 = 0.0;
d_A_f1 = 0.0;
d_A_f2 = 0.0;
// clock terms
// d_master_clock=0;
d_dtr = 0.0;
d_satClkCorr = 0.0;
d_satClkDrift = 0.0;
// satellite positions
d_satpos_X = 0.0;
d_satpos_Y = 0.0;
d_satpos_Z = 0.0;
// info
i_channel_ID = 0;
i_satellite_PRN = 0;
i_signal_type = 0;
// time synchro
d_subframe_timestamp_ms = 0.0;
// flags
b_alert_flag = false;
b_integrity_status_flag = false;
b_antispoofing_flag = false;
// Ionosphere and UTC
flag_iono_valid = false;
flag_utc_model_valid = false;
d_alpha0 = 0.0;
d_alpha1 = 0.0;
d_alpha2 = 0.0;
d_alpha3 = 0.0;
d_beta0 = 0.0;
d_beta1 = 0.0;
d_beta2 = 0.0;
d_beta3 = 0.0;
d_A1UTC = 0.0;
d_A0UTC = 0.0;
d_DeltaT_LS = 0.0;
i_WN_LSF = 0;
i_DN = 0;
d_DeltaT_LSF = 0.0;
// Almanac
d_Toa = 0.0;
i_WN_A = 0;
for (int32_t i = 1; i < 36; i++)
{
almanacHealth[i] = 0;
}
// Satellite velocity
d_satvel_X = 0.0;
d_satvel_Y = 0.0;
d_satvel_Z = 0.0;
d_A1GPS = 0.0;
d_A0GPS = 0.0;
d_A1GAL = 0.0;
d_A0GAL = 0.0;
d_A1GLO = 0.0;
d_A0GLO = 0.0;
d_SQRT_A_ALMANAC = 0.0;
d_A1_ALMANAC = 0.0;
d_A0_ALMANAC = 0.0;
d_OMEGA0_ALMANAC = 0.0;
d_E_ALMANAC = 0.0;
d_DELTA_I = 0.0;
d_TOA = 0.0;
d_OMEGA_DOT_ALMANAC = 0.0;
d_OMEGA_ALMANAC = 0.0;
d_M0_ALMANAC = 0.0;
almanac_WN = 0;
d_toa2 = 0.0;
d_A_f0 = 0.0;
d_A_f1 = 0.0;
d_A_f2 = 0.0;
auto gnss_sat = Gnss_Satellite(); auto gnss_sat = Gnss_Satellite();
std::string _system("Beidou"); std::string _system("Beidou");
for (uint32_t i = 1; i < 36; i++) for (uint32_t i = 1; i < 36; i++)
{ {
satelliteBlock[i] = gnss_sat.what_block(_system, i); satelliteBlock[i] = gnss_sat.what_block(_system, i);
} }
} for (uint32_t i = 1; i < 36; i++)
{
almanacHealth[i] = 0;
Beidou_Dnav_Navigation_Message::Beidou_Dnav_Navigation_Message() }
{
reset();
} }
@ -1060,6 +891,7 @@ Beidou_Dnav_Iono Beidou_Dnav_Navigation_Message::get_iono()
return iono; return iono;
} }
Beidou_Dnav_Utc_Model Beidou_Dnav_Navigation_Message::get_utc_model() Beidou_Dnav_Utc_Model Beidou_Dnav_Navigation_Message::get_utc_model()
{ {
Beidou_Dnav_Utc_Model utc_model; Beidou_Dnav_Utc_Model utc_model;
@ -1084,6 +916,7 @@ Beidou_Dnav_Utc_Model Beidou_Dnav_Navigation_Message::get_utc_model()
return utc_model; return utc_model;
} }
bool Beidou_Dnav_Navigation_Message::have_new_ephemeris() // Check if we have a new ephemeris stored in the galileo navigation class bool Beidou_Dnav_Navigation_Message::have_new_ephemeris() // Check if we have a new ephemeris stored in the galileo navigation class
{ {
if (i_satellite_PRN > 0 and i_satellite_PRN < 6) if (i_satellite_PRN > 0 and i_satellite_PRN < 6)
@ -1139,6 +972,7 @@ bool Beidou_Dnav_Navigation_Message::have_new_ephemeris() // Check if we have a
return false; return false;
} }
bool Beidou_Dnav_Navigation_Message::have_new_iono() bool Beidou_Dnav_Navigation_Message::have_new_iono()
{ {
// the condition on flag_utc_model is added to have a time stamp for iono // the condition on flag_utc_model is added to have a time stamp for iono
@ -1150,6 +984,7 @@ bool Beidou_Dnav_Navigation_Message::have_new_iono()
return false; return false;
} }
bool Beidou_Dnav_Navigation_Message::have_new_utc_model() bool Beidou_Dnav_Navigation_Message::have_new_utc_model()
{ {
if (flag_d1_sf5_p9 == true and flag_d1_sf5_p10 == true) if (flag_d1_sf5_p9 == true and flag_d1_sf5_p10 == true)
@ -1164,6 +999,7 @@ bool Beidou_Dnav_Navigation_Message::have_new_utc_model()
return false; return false;
} }
bool Beidou_Dnav_Navigation_Message::have_new_almanac() bool Beidou_Dnav_Navigation_Message::have_new_almanac()
{ {
if ((flag_d1_sf4 == true) and (flag_d1_sf5 == true)) if ((flag_d1_sf4 == true) and (flag_d1_sf5 == true))
@ -1178,6 +1014,7 @@ bool Beidou_Dnav_Navigation_Message::have_new_almanac()
return false; return false;
} }
bool Beidou_Dnav_Navigation_Message::satellite_validation() bool Beidou_Dnav_Navigation_Message::satellite_validation()
{ {
bool flag_data_valid = false; bool flag_data_valid = false;

View File

@ -50,112 +50,111 @@ public:
Beidou_Dnav_Navigation_Message(); Beidou_Dnav_Navigation_Message();
// System flags for data processing // System flags for data processing
bool flag_eph_valid; bool flag_eph_valid{};
bool flag_utc_model_valid; bool flag_utc_model_valid{};
bool flag_iono_valid; bool flag_iono_valid{};
bool flag_d1_sf1; bool flag_d1_sf1{};
bool flag_d1_sf2; bool flag_d1_sf2{};
bool flag_d1_sf3; bool flag_d1_sf3{};
bool flag_d1_sf4; bool flag_d1_sf4{};
bool flag_d1_sf5; bool flag_d1_sf5{};
bool flag_new_SOW_available; bool flag_new_SOW_available{};
bool flag_crc_test; bool flag_crc_test{};
double d_previous_aode; double d_previous_aode{};
bool flag_d1_sf5_p7; //!< D1 NAV Message, Subframe 5, Page 09 decoded indicator bool flag_d1_sf5_p7{}; //!< D1 NAV Message, Subframe 5, Page 09 decoded indicator
bool flag_d1_sf5_p8; //!< D1 NAV Message, Subframe 5, Page 09 decoded indicator bool flag_d1_sf5_p8{}; //!< D1 NAV Message, Subframe 5, Page 09 decoded indicator
bool flag_d1_sf5_p9; //!< D1 NAV Message, Subframe 5, Page 09 decoded indicator bool flag_d1_sf5_p9{}; //!< D1 NAV Message, Subframe 5, Page 09 decoded indicator
bool flag_d1_sf5_p10; //!< D1 NAV Message, Subframe 5, Page 10 decoded indicator bool flag_d1_sf5_p10{}; //!< D1 NAV Message, Subframe 5, Page 10 decoded indicator
bool flag_sf1_p1{}; //!< D2 NAV Message, Subframe 1, Page 1 decoded indicator
bool flag_sf1_p1; //!< D2 NAV Message, Subframe 1, Page 1 decoded indicator bool flag_sf1_p2{}; //!< D2 NAV Message, Subframe 1, Page 2 decoded indicator
bool flag_sf1_p2; //!< D2 NAV Message, Subframe 1, Page 2 decoded indicator bool flag_sf1_p3{}; //!< D2 NAV Message, Subframe 1, Page 3 decoded indicator
bool flag_sf1_p3; //!< D2 NAV Message, Subframe 1, Page 3 decoded indicator bool flag_sf1_p4{}; //!< D2 NAV Message, Subframe 1, Page 4 decoded indicator
bool flag_sf1_p4; //!< D2 NAV Message, Subframe 1, Page 4 decoded indicator bool flag_sf1_p5{}; //!< D2 NAV Message, Subframe 1, Page 5 decoded indicator
bool flag_sf1_p5; //!< D2 NAV Message, Subframe 1, Page 5 decoded indicator bool flag_sf1_p6{}; //!< D2 NAV Message, Subframe 1, Page 6 decoded indicator
bool flag_sf1_p6; //!< D2 NAV Message, Subframe 1, Page 6 decoded indicator bool flag_sf1_p7{}; //!< D2 NAV Message, Subframe 1, Page 7 decoded indicator
bool flag_sf1_p7; //!< D2 NAV Message, Subframe 1, Page 7 decoded indicator bool flag_sf1_p8{}; //!< D2 NAV Message, Subframe 1, Page 8 decoded indicator
bool flag_sf1_p8; //!< D2 NAV Message, Subframe 1, Page 8 decoded indicator bool flag_sf1_p9{}; //!< D2 NAV Message, Subframe 1, Page 9 decoded indicator
bool flag_sf1_p9; //!< D2 NAV Message, Subframe 1, Page 9 decoded indicator bool flag_sf1_p10{}; //!< D2 NAV Message, Subframe 1, Page 10 decoded indicator
bool flag_sf1_p10; //!< D2 NAV Message, Subframe 1, Page 10 decoded indicator
// broadcast orbit 1 // broadcast orbit 1
double d_SOW; //!< Time of BeiDou Week of the ephemeris set (taken from subframes SOW) [s] double d_SOW{}; //!< Time of BeiDou Week of the ephemeris set (taken from subframes SOW) [s]
double d_SOW_SF1; //!< Time of BeiDou Week from HOW word of Subframe 1 [s] double d_SOW_SF1{}; //!< Time of BeiDou Week from HOW word of Subframe 1 [s]
double d_SOW_SF2; //!< Time of BeiDou Week from HOW word of Subframe 2 [s] double d_SOW_SF2{}; //!< Time of BeiDou Week from HOW word of Subframe 2 [s]
double d_SOW_SF3; //!< Time of BeiDou Week from HOW word of Subframe 3 [s] double d_SOW_SF3{}; //!< Time of BeiDou Week from HOW word of Subframe 3 [s]
double d_SOW_SF4; //!< Time of BeiDou Week from HOW word of Subframe 4 [s] double d_SOW_SF4{}; //!< Time of BeiDou Week from HOW word of Subframe 4 [s]
double d_SOW_SF5; //!< Time of BeiDou Week from HOW word of Subframe 5 [s] double d_SOW_SF5{}; //!< Time of BeiDou Week from HOW word of Subframe 5 [s]
double d_AODE; double d_AODE{};
double d_Crs; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m] double d_Crs{}; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m]
double d_Delta_n; //!< Mean Motion Difference From Computed Value [semi-circles/s] double d_Delta_n{}; //!< Mean Motion Difference From Computed Value [semi-circles/s]
double d_M_0; //!< Mean Anomaly at Reference Time [semi-circles] double d_M_0{}; //!< Mean Anomaly at Reference Time [semi-circles]
// broadcast orbit 2 // broadcast orbit 2
double d_Cuc; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] double d_Cuc{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad]
double d_eccentricity; //!< Eccentricity [dimensionless] double d_eccentricity{}; //!< Eccentricity [dimensionless]
double d_Cus; //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad] 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)] double d_sqrt_A{}; //!< Square Root of the Semi-Major Axis [sqrt(m)]
// broadcast orbit 3 // broadcast orbit 3
double d_Toe_sf2; //!< Ephemeris data reference time of week in subframe 2, D1 Message double d_Toe_sf2{}; //!< Ephemeris data reference time of week in subframe 2, D1 Message
double d_Toe_sf3; //!< Ephemeris data reference time of week in subframe 3, D1 Message double d_Toe_sf3{}; //!< Ephemeris data reference time of week in subframe 3, D1 Message
double d_Toe; //!< Ephemeris data reference time of week in subframe 1, D2 Message double d_Toe{}; //!< Ephemeris data reference time of week in subframe 1, D2 Message
double d_Toc; //!< clock data reference time [s] double d_Toc{}; //!< clock data reference time [s]
double d_Cic; //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad] 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_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] double d_Cis{}; //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad]
// broadcast orbit 4 // broadcast orbit 4
double d_i_0; //!< Inclination Angle at Reference Time [semi-circles] double d_i_0{}; //!< Inclination Angle at Reference Time [semi-circles]
double d_Crc; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m] double d_Crc{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m]
double d_OMEGA; //!< Argument of Perigee [semi-cicles] double d_OMEGA{}; //!< Argument of Perigee [semi-cicles]
double d_OMEGA_DOT; //!< Rate of Right Ascension [semi-circles/s] double d_OMEGA_DOT{}; //!< Rate of Right Ascension [semi-circles/s]
// broadcast orbit 5 // broadcast orbit 5
double d_IDOT; //!< Rate of Inclination Angle [semi-circles/s] double d_IDOT{}; //!< Rate of Inclination Angle [semi-circles/s]
int32_t i_BEIDOU_week; //!< BeiDou week number, aka WN [week] int32_t i_BEIDOU_week{}; //!< BeiDou week number, aka WN [week]
// broadcast orbit 6 // broadcast orbit 6
int32_t i_SV_accuracy; //!< User Range Accuracy (URA) index of the SV int32_t i_SV_accuracy{}; //!< User Range Accuracy (URA) index of the SV
int32_t i_SV_health; int32_t i_SV_health{};
double d_TGD1; //!< Estimated Group Delay Differential in B1 [s] double d_TGD1{}; //!< Estimated Group Delay Differential in B1 [s]
double d_TGD2; //!< Estimated Group Delay Differential in B2 [s] double d_TGD2{}; //!< Estimated Group Delay Differential in B2 [s]
double d_AODC; //!< Age of Data, Clock double d_AODC{}; //!< Age of Data, Clock
// broadcast orbit 7 // broadcast orbit 7
// int32_t i_AODO; //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s] // int32_t i_AODO{}; //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s]
bool b_fit_interval_flag; //!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours. bool b_fit_interval_flag{}; //!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours.
double d_spare1; double d_spare1{};
double d_spare2; double d_spare2{};
double d_A_f0; //!< Clock correction parameters. Coefficient 0 of code phase offset model [s] double d_A_f0{}; //!< Clock correction parameters. Coefficient 0 of code phase offset model [s]
double d_A_f1; //!< Clock correction parameters. Coefficient 1 of code phase offset model [s/s] double d_A_f1{}; //!< Clock correction parameters. Coefficient 1 of code phase offset model [s/s]
double d_A_f2; //!< Clock correction parameters. Coefficient 2 of code phase offset model [s/s^2] double d_A_f2{}; //!< Clock correction parameters. Coefficient 2 of code phase offset model [s/s^2]
// D2 NAV Message Decoding // D2 NAV Message Decoding
uint64_t d_A_f1_msb_bits; //!< Clock correction parameters, D2 NAV MSB uint64_t d_A_f1_msb_bits{}; //!< Clock correction parameters, D2 NAV MSB
uint64_t d_A_f1_lsb_bits; //!< Clock correction parameters, D2 NAV LSB uint64_t d_A_f1_lsb_bits{}; //!< Clock correction parameters, D2 NAV LSB
uint64_t d_Cuc_msb_bits; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] uint64_t d_Cuc_msb_bits{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad]
uint64_t d_Cuc_lsb_bits; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] uint64_t d_Cuc_lsb_bits{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad]
uint64_t d_eccentricity_msb; //!< Eccentricity [dimensionless] uint64_t d_eccentricity_msb{}; //!< Eccentricity [dimensionless]
uint64_t d_eccentricity_lsb; //!< Eccentricity [dimensionless] uint64_t d_eccentricity_lsb{}; //!< Eccentricity [dimensionless]
uint64_t d_Cic_msb_bits; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] uint64_t d_Cic_msb_bits{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad]
uint64_t d_Cic_lsb_bits; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] uint64_t d_Cic_lsb_bits{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad]
uint64_t d_eccentricity_msb_bits; //!< Eccentricity [dimensionless] uint64_t d_eccentricity_msb_bits{}; //!< Eccentricity [dimensionless]
uint64_t d_eccentricity_lsb_bits; uint64_t d_eccentricity_lsb_bits{};
uint64_t d_i_0_msb_bits; //!< Inclination Angle at Reference Time [semi-circles] uint64_t d_i_0_msb_bits{}; //!< Inclination Angle at Reference Time [semi-circles]
uint64_t d_i_0_lsb_bits; //!< Inclination Angle at Reference Time [semi-circles] uint64_t d_i_0_lsb_bits{}; //!< Inclination Angle at Reference Time [semi-circles]
uint64_t d_OMEGA_msb_bits; //!< Argument of Perigee [semi-cicles] uint64_t d_OMEGA_msb_bits{}; //!< Argument of Perigee [semi-cicles]
uint64_t d_OMEGA_lsb_bits; //!< Argument of Perigee [semi-cicles] uint64_t d_OMEGA_lsb_bits{}; //!< Argument of Perigee [semi-cicles]
uint64_t d_OMEGA_DOT_msb_bits; //!< Rate of Right Ascension [semi-circles/s] uint64_t d_OMEGA_DOT_msb_bits{}; //!< Rate of Right Ascension [semi-circles/s]
uint64_t d_OMEGA_DOT_lsb_bits; //!< Rate of Right Ascension [semi-circles/s] uint64_t d_OMEGA_DOT_lsb_bits{}; //!< Rate of Right Ascension [semi-circles/s]
// Almanac // Almanac
double d_Toa; //!< Almanac reference time [s] double d_Toa{}; //!< Almanac reference time [s]
int32_t i_WN_A; //!< Modulo 256 of the GPS week number to which the almanac reference time (d_Toa) is referenced int32_t i_WN_A{}; //!< Modulo 256 of the GPS week number to which the almanac reference time (d_Toa) is referenced
std::map<int32_t, int32_t> almanacHealth; //!< Map that stores the health information stored in the almanac std::map<int32_t, int32_t> almanacHealth; //!< Map that stores the health information stored in the almanac
std::map<int32_t, std::string> satelliteBlock; //!< Map that stores to which block the PRN belongs std::map<int32_t, std::string> satelliteBlock; //!< Map that stores to which block the PRN belongs
@ -172,73 +171,72 @@ public:
* times the upper bound value of the current broadcast URA index, for more than 5.2 seconds, without an * times the upper bound value of the current broadcast URA index, for more than 5.2 seconds, without an
* accompanying alert, is less than 1E-8 per hour. * accompanying alert, is less than 1E-8 per hour.
*/ */
bool b_integrity_status_flag; bool b_integrity_status_flag{};
bool b_alert_flag; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk. bool b_alert_flag{}; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk.
bool b_antispoofing_flag; //!< If true, the AntiSpoofing mode is ON in that SV bool b_antispoofing_flag{}; //!< If true, the AntiSpoofing mode is ON in that SV
// clock terms // clock terms
// double d_master_clock; // GPS transmission time // double d_master_clock{}; // GPS transmission time
double d_satClkCorr; // GPS clock error double d_satClkCorr{}; // GPS clock error
double d_dtr; // relativistic clock correction term double d_dtr{}; // relativistic clock correction term
double d_satClkDrift; double d_satClkDrift{};
// satellite positions // satellite positions
double d_satpos_X; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis. double d_satpos_X{}; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis.
double d_satpos_Y; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system. double d_satpos_Y{}; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system.
double d_satpos_Z; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP). double d_satpos_Z{}; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP).
// satellite identification info // satellite identification info
int32_t i_channel_ID; int32_t i_channel_ID{};
int32_t i_signal_type; //!< BDS: data source (0:unknown,1:B1I,2:B1Q,3:B2I,4:B2Q,5:B3I,6:B3Q) int32_t i_signal_type{}; //!< BDS: data source (0:unknown,1:B1I,2:B1Q,3:B2I,4:B2Q,5:B3I,6:B3Q)
uint32_t i_satellite_PRN; uint32_t i_satellite_PRN{};
// time synchro // time synchro
double d_subframe_timestamp_ms; // [ms] double d_subframe_timestamp_ms{}; // [ms]
// Ionospheric parameters // Ionospheric parameters
double d_alpha0; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s] double d_alpha0{}; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s]
double d_alpha1; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle] double d_alpha1{}; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle]
double d_alpha2; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2] double d_alpha2{}; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2]
double d_alpha3; //!< Coefficient 3 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^3] double d_alpha3{}; //!< Coefficient 3 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^3]
double d_beta0; //!< Coefficient 0 of a cubic equation representing the period of the model [s] double d_beta0{}; //!< Coefficient 0 of a cubic equation representing the period of the model [s]
double d_beta1; //!< Coefficient 1 of a cubic equation representing the period of the model [s/semi-circle] double d_beta1{}; //!< Coefficient 1 of a cubic equation representing the period of the model [s/semi-circle]
double d_beta2; //!< Coefficient 2 of a cubic equation representing the period of the model [s(semi-circle)^2] double d_beta2{}; //!< Coefficient 2 of a cubic equation representing the period of the model [s(semi-circle)^2]
double d_beta3; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3] double d_beta3{}; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3]
// UTC parameters // UTC parameters
double d_A1UTC; //!< 1st order term of a model that relates GPS and UTC time [s/s] double d_A1UTC{}; //!< 1st order term of a model that relates GPS and UTC time [s/s]
double d_A0UTC; //!< Constant of a model that relates GPS and UTC time [s] double d_A0UTC{}; //!< Constant of a model that relates GPS and UTC time [s]
double d_DeltaT_LS; //!< delta time due to leap seconds [s]. Number of leap seconds since 6-Jan-1980 as transmitted by the GPS almanac. double 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] int32_t i_WN_LSF{}; //!< Week number at the end of which the leap second becomes effective [weeks]
int32_t i_DN; //!< Day number (DN) at the end of which the leap second becomes effective [days] int32_t i_DN{}; //!< Day number (DN) at the end of which the leap second becomes effective [days]
double d_DeltaT_LSF; //!< Scheduled future or recent past (relative to NAV message upload) value of the delta time due to leap seconds [s] double d_DeltaT_LSF{}; //!< Scheduled future or recent past (relative to NAV message upload) value of the delta time due to leap seconds [s]
double d_A1GPS; double d_A1GPS{};
double d_A0GPS; double d_A0GPS{};
double d_A1GAL; double d_A1GAL{};
double d_A0GAL; double d_A0GAL{};
double d_A1GLO; double d_A1GLO{};
double d_A0GLO; double d_A0GLO{};
double d_SQRT_A_ALMANAC; double d_SQRT_A_ALMANAC{};
double d_A1_ALMANAC; double d_A1_ALMANAC{};
double d_A0_ALMANAC; double d_A0_ALMANAC{};
double d_OMEGA0_ALMANAC; double d_OMEGA0_ALMANAC{};
double d_E_ALMANAC; double d_E_ALMANAC{};
double d_DELTA_I; double d_DELTA_I{};
double d_TOA; double d_TOA{};
double d_OMEGA_DOT_ALMANAC; double d_OMEGA_DOT_ALMANAC{};
double d_OMEGA_ALMANAC; double d_OMEGA_ALMANAC{};
double d_M0_ALMANAC; double d_M0_ALMANAC{};
int32_t almanac_WN; int32_t almanac_WN{};
double d_toa2; double d_toa2{};
// Satellite velocity // Satellite velocity
double d_satvel_X; //!< Earth-fixed velocity coordinate x of the satellite [m] double d_satvel_X{}; //!< Earth-fixed velocity coordinate x of the satellite [m]
double d_satvel_Y; //!< Earth-fixed velocity coordinate y of the satellite [m] double d_satvel_Y{}; //!< Earth-fixed velocity coordinate y of the satellite [m]
double d_satvel_Z; //!< Earth-fixed velocity coordinate z of the satellite [m] double d_satvel_Z{}; //!< Earth-fixed velocity coordinate z of the satellite [m]
// public functions // public functions
void reset();
/*! /*!
* \brief Obtain a BDS SV Ephemeris class filled with current SV data * \brief Obtain a BDS SV Ephemeris class filled with current SV data

View File

@ -1,40 +0,0 @@
/*!
* \file beidou_dnav_utc_model.cc
* \brief Interface of a BeiDou UTC Model storage
* \author Damian Miralles, 2018. dmiralles2009(at)gmail.com
* \author Sergi Segura, 2018. sergi.segura.munoz(at)gmail.com
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* -------------------------------------------------------------------------
*/
#include "beidou_dnav_utc_model.h"
Beidou_Dnav_Utc_Model::Beidou_Dnav_Utc_Model()
{
valid = false;
d_A1_UTC = 0;
d_A0_UTC = 0;
d_DeltaT_LS = 0;
i_WN_LSF = 0;
i_DN = 0;
d_DeltaT_LSF = 0;
d_A0_GPS = 0;
d_A1_GPS = 0;
d_A0_GAL = 0;
d_A1_GAL = 0;
d_A0_GLO = 0;
d_A1_GLO = 0;
}

View File

@ -33,29 +33,29 @@
class Beidou_Dnav_Utc_Model class Beidou_Dnav_Utc_Model
{ {
public: public:
bool valid; Beidou_Dnav_Utc_Model() = default;
bool valid{};
// BeiDou UTC parameters // BeiDou UTC parameters
double d_A0_UTC; //!< BDT clock bias relative to UTC [s] double d_A0_UTC{}; //!< BDT clock bias relative to UTC [s]
double d_A1_UTC; //!< BDT clock rate relative to UTC [s/s] double d_A1_UTC{}; //!< BDT clock rate relative to UTC [s/s]
double d_DeltaT_LS; //!< Delta time due to leap seconds before the new leap second effective double d_DeltaT_LS{}; //!< Delta time due to leap seconds before the new leap second effective
int i_WN_LSF; //!< Week number of the new leap second int i_WN_LSF{}; //!< Week number of the new leap second
int i_DN; //!< Day number of week of the new leap second int i_DN{}; //!< Day number of week of the new leap second
double d_DeltaT_LSF; //!< Delta time due to leap seconds after the new leap second effective [s] double d_DeltaT_LSF{}; //!< Delta time due to leap seconds after the new leap second effective [s]
// BeiDou to GPS time corrections // BeiDou to GPS time corrections
double d_A0_GPS; //!< BDT clock bias relative to GPS time [s] double d_A0_GPS{}; //!< BDT clock bias relative to GPS time [s]
double d_A1_GPS; //!< BDT clock rate relative to GPS time [s/s] double d_A1_GPS{}; //!< BDT clock rate relative to GPS time [s/s]
// BeiDou to Galileo time corrections // BeiDou to Galileo time corrections
double d_A0_GAL; //!< BDT clock bias relative to GAL time [s] double d_A0_GAL{}; //!< BDT clock bias relative to GAL time [s]
double d_A1_GAL; //!< BDT clock rate relative to GAL time [s/s] double d_A1_GAL{}; //!< BDT clock rate relative to GAL time [s/s]
// BeiDou to GLONASS time corrections // BeiDou to GLONASS time corrections
double d_A0_GLO; //!< BDT clock bias relative to GLO time [s] double d_A0_GLO{}; //!< BDT clock bias relative to GLO time [s]
double d_A1_GLO; //!< BDT clock rate relative to GLO time [s/s] double d_A1_GLO{}; //!< BDT clock rate relative to GLO time [s/s]
Beidou_Dnav_Utc_Model();
template <class Archive> template <class Archive>
/* /*

View File

@ -1,41 +0,0 @@
/*!
* \file galileo_almanac.cc
* \brief Interface of a Galileo ALMANAC storage
* \author Carles Fernandez, 2018. cfernandez(at)cttc.cat
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* -------------------------------------------------------------------------
*/
#include "galileo_almanac.h"
Galileo_Almanac::Galileo_Almanac()
{
i_satellite_PRN = 0U;
i_Toa = 0;
i_WNa = 0;
i_IODa = 0;
d_Delta_i = 0.0;
d_M_0 = 0.0;
d_e_eccentricity = 0.0;
d_Delta_sqrt_A = 0.0;
d_OMEGA0 = 0.0;
d_OMEGA = 0.0;
d_OMEGA_DOT = 0.0;
d_A_f0 = 0.0;
d_A_f1 = 0.0;
E5b_HS = 0;
E1B_HS = 0;
E5a_HS = 0;
}

View File

@ -30,27 +30,27 @@
class Galileo_Almanac class Galileo_Almanac
{ {
public: public:
uint32_t i_satellite_PRN; //!< SV PRN NUMBER uint32_t i_satellite_PRN{}; //!< SV PRN NUMBER
int32_t i_Toa; int32_t i_Toa{};
int32_t i_WNa; int32_t i_WNa{};
int32_t i_IODa; int32_t i_IODa{};
double d_Delta_i; //!< Inclination at reference time relative to i0 = 56º [semi-circles] double d_Delta_i{}; //!< Inclination at reference time relative to i0 = 56º [semi-circles]
double d_M_0; //!< Mean Anomaly at Reference Time [semi-circles] double d_M_0{}; //!< Mean Anomaly at Reference Time [semi-circles]
double d_e_eccentricity; //!< Eccentricity [dimensionless] double d_e_eccentricity{}; //!< Eccentricity [dimensionless]
double d_Delta_sqrt_A; //!< Square Root of the Semi-Major Axis [sqrt(m)] double d_Delta_sqrt_A{}; //!< Square Root of the Semi-Major Axis [sqrt(m)]
double d_OMEGA0; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles] double d_OMEGA0{}; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles]
double d_OMEGA; //!< Argument of Perigee [semi-cicles] double d_OMEGA{}; //!< Argument of Perigee [semi-cicles]
double d_OMEGA_DOT; //!< Rate of Right Ascension [semi-circles/s] double d_OMEGA_DOT{}; //!< Rate of Right Ascension [semi-circles/s]
double d_A_f0; //!< Coefficient 0 of code phase offset model [s] double d_A_f0{}; //!< Coefficient 0 of code phase offset model [s]
double d_A_f1; //!< Coefficient 1 of code phase offset model [s/s] double d_A_f1{}; //!< Coefficient 1 of code phase offset model [s/s]
int32_t E5b_HS; int32_t E5b_HS{};
int32_t E1B_HS; int32_t E1B_HS{};
int32_t E5a_HS; int32_t E5a_HS{};
/*! /*!
* Default constructor * Default constructor
*/ */
Galileo_Almanac(); Galileo_Almanac() = default;
template <class Archive> template <class Archive>

View File

@ -19,64 +19,6 @@
#include "galileo_almanac_helper.h" #include "galileo_almanac_helper.h"
Galileo_Almanac_Helper::Galileo_Almanac_Helper()
{
// Word type 7: Almanac for SVID1 (1/2), almanac reference time and almanac reference week number
IOD_a_7 = 0;
WN_a_7 = 0;
t0a_7 = 0;
SVID1_7 = 0;
DELTA_A_7 = 0.0;
e_7 = 0.0;
omega_7 = 0.0;
delta_i_7 = 0.0;
Omega0_7 = 0.0;
Omega_dot_7 = 0.0;
M0_7 = 0.0;
// Word type 8: Almanac for SVID1 (2/2) and SVID2 (1/2)
IOD_a_8 = 0;
af0_8 = 0.0;
af1_8 = 0.0;
E5b_HS_8 = 0;
E1B_HS_8 = 0;
E5a_HS_8 = 0;
SVID2_8 = 0;
DELTA_A_8 = 0.0;
e_8 = 0.0;
omega_8 = 0.0;
delta_i_8 = 0.0;
Omega0_8 = 0.0;
Omega_dot_8 = 0.0;
// Word type 9: Almanac for SVID2 (2/2) and SVID3 (1/2)
IOD_a_9 = 0;
WN_a_9 = 0;
t0a_9 = 0;
M0_9 = 0.0;
af0_9 = 0.0;
af1_9 = 0.0;
E5b_HS_9 = 0;
E1B_HS_9 = 0;
E5a_HS_9 = 0;
SVID3_9 = 0;
DELTA_A_9 = 0.0;
e_9 = 0.0;
omega_9 = 0.0;
delta_i_9 = 0.0;
// Word type 10: Almanac for SVID3 (2/2)
IOD_a_10 = 0;
Omega0_10 = 0.0;
Omega_dot_10 = 0.0;
M0_10 = 0.0;
af0_10 = 0.0;
af1_10 = 0.0;
E5b_HS_10 = 0;
E1B_HS_10 = 0;
E5a_HS_10 = 0;
}
Galileo_Almanac Galileo_Almanac_Helper::get_almanac(int i) Galileo_Almanac Galileo_Almanac_Helper::get_almanac(int i)
{ {
Galileo_Almanac galileo_almanac; Galileo_Almanac galileo_almanac;

View File

@ -31,62 +31,63 @@
class Galileo_Almanac_Helper class Galileo_Almanac_Helper
{ {
public: public:
Galileo_Almanac_Helper() = default; //!< Default constructor
// Word type 7: Almanac for SVID1 (1/2), almanac reference time and almanac reference week number // Word type 7: Almanac for SVID1 (1/2), almanac reference time and almanac reference week number
int32_t IOD_a_7; int32_t IOD_a_7{};
int32_t WN_a_7; int32_t WN_a_7{};
int32_t t0a_7; int32_t t0a_7{};
int32_t SVID1_7; int32_t SVID1_7{};
double DELTA_A_7; double DELTA_A_7{};
double e_7; double e_7{};
double omega_7; double omega_7{};
double delta_i_7; double delta_i_7{};
double Omega0_7; double Omega0_7{};
double Omega_dot_7; double Omega_dot_7{};
double M0_7; double M0_7{};
// Word type 8: Almanac for SVID1 (2/2) and SVID2 (1/2) // Word type 8: Almanac for SVID1 (2/2) and SVID2 (1/2)
int32_t IOD_a_8; int32_t IOD_a_8{};
double af0_8; double af0_8{};
double af1_8; double af1_8{};
int32_t E5b_HS_8; int32_t E5b_HS_8{};
int32_t E1B_HS_8; int32_t E1B_HS_8{};
int32_t E5a_HS_8; int32_t E5a_HS_8{};
int32_t SVID2_8; int32_t SVID2_8{};
double DELTA_A_8; double DELTA_A_8{};
double e_8; double e_8{};
double omega_8; double omega_8{};
double delta_i_8; double delta_i_8{};
double Omega0_8; double Omega0_8{};
double Omega_dot_8; double Omega_dot_8{};
// Word type 9: Almanac for SVID2 (2/2) and SVID3 (1/2) // Word type 9: Almanac for SVID2 (2/2) and SVID3 (1/2)
int32_t IOD_a_9; int32_t IOD_a_9{};
int32_t WN_a_9; int32_t WN_a_9{};
int32_t t0a_9; int32_t t0a_9{};
double M0_9; double M0_9{};
double af0_9; double af0_9{};
double af1_9; double af1_9{};
int32_t E5b_HS_9; int32_t E5b_HS_9{};
int32_t E1B_HS_9; int32_t E1B_HS_9{};
int32_t E5a_HS_9; int32_t E5a_HS_9{};
int32_t SVID3_9; int32_t SVID3_9{};
double DELTA_A_9; double DELTA_A_9{};
double e_9; double e_9{};
double omega_9; double omega_9{};
double delta_i_9; double delta_i_9{};
// Word type 10: Almanac for SVID3 (2/2) // Word type 10: Almanac for SVID3 (2/2)
int32_t IOD_a_10; int32_t IOD_a_10{};
double Omega0_10; double Omega0_10{};
double Omega_dot_10; double Omega_dot_10{};
double M0_10; double M0_10{};
double af0_10; double af0_10{};
double af1_10; double af1_10{};
int32_t E5b_HS_10; int32_t E5b_HS_10{};
int32_t E1B_HS_10; int32_t E1B_HS_10{};
int32_t E5a_HS_10; int32_t E5a_HS_10{};
Galileo_Almanac_Helper(); //!< Default constructor
Galileo_Almanac get_almanac(int i); Galileo_Almanac get_almanac(int i);
}; };

View File

@ -22,67 +22,6 @@
#include <cmath> #include <cmath>
Galileo_Ephemeris::Galileo_Ephemeris()
{
flag_all_ephemeris = false;
IOD_ephemeris = 0;
IOD_nav_1 = 0;
SV_ID_PRN_4 = 0;
M0_1 = 0.0; // Mean anomaly at reference time [semi-circles]
delta_n_3 = 0.0; // Mean motion difference from computed value [semi-circles/sec]
e_1 = 0.0; // Eccentricity
A_1 = 0.0; // Square root of the semi-major axis [meters^1/2]
OMEGA_0_2 = 0.0; // Longitude of ascending node of orbital plane at weekly epoch [semi-circles]
i_0_2 = 0.0; // Inclination angle at reference time [semi-circles]
omega_2 = 0.0; // Argument of perigee [semi-circles]
OMEGA_dot_3 = 0.0; // Rate of right ascension [semi-circles/sec]
iDot_2 = 0.0; // Rate of inclination angle [semi-circles/sec]
C_uc_3 = 0.0; // Amplitude of the cosine harmonic correction term to the argument of latitude [radians]
C_us_3 = 0.0; // Amplitude of the sine harmonic correction term to the argument of latitude [radians]
C_rc_3 = 0.0; // Amplitude of the cosine harmonic correction term to the orbit radius [meters]
C_rs_3 = 0.0; // Amplitude of the sine harmonic correction term to the orbit radius [meters]
C_ic_4 = 0.0; // Amplitude of the cosine harmonic correction term to the angle of inclination [radians]
C_is_4 = 0.0; // Amplitude of the sine harmonic correction term to the angle of inclination [radians]
t0e_1 = 0; // Ephemeris reference time [s]
// Clock correction parameters
t0c_4 = 0; // Clock correction data reference Time of Week [sec]
af0_4 = 0.0; // SV clock bias correction coefficient [s]
af1_4 = 0.0; // SV clock drift correction coefficient [s/s]
af2_4 = 0.0; // SV clock drift rate correction coefficient [s/s^2]
// GST
WN_5 = 0;
TOW_5 = 0;
// SV status
SISA_3 = 0;
E5a_HS = 0;
E5b_HS_5 = 0;
E1B_HS_5 = 0;
E5a_DVS = false;
E5b_DVS_5 = false;
E1B_DVS_5 = false;
BGD_E1E5a_5 = 0.0; // E1-E5a Broadcast Group Delay [s]
BGD_E1E5b_5 = 0.0; // E1-E5b Broadcast Group Delay [s]
Galileo_satClkDrift = 0.0;
Galileo_dtr = 0.0;
// satellite positions
d_satpos_X = 0.0;
d_satpos_Y = 0.0;
d_satpos_Z = 0.0;
// Satellite velocity
d_satvel_X = 0.0;
d_satvel_Y = 0.0;
d_satvel_Z = 0.0;
i_satellite_PRN = 0U;
}
double Galileo_Ephemeris::Galileo_System_Time(double WN, double TOW) double Galileo_Ephemeris::Galileo_System_Time(double WN, double TOW)
{ {
/* GALIELO SYSTEM TIME, ICD 5.1.2 /* GALIELO SYSTEM TIME, ICD 5.1.2

View File

@ -34,71 +34,71 @@
class Galileo_Ephemeris class Galileo_Ephemeris
{ {
public: public:
Galileo_Ephemeris() = default;
/* Galileo ephemeris are 16 parameters and here are reported following the ICD order, paragraph 5.1.1. /* Galileo ephemeris are 16 parameters and here are reported following the ICD order, paragraph 5.1.1.
The number in the name after underscore (_1, _2, _3 and so on) refers to the page were we can find that parameter */ The number in the name after underscore (_1, _2, _3 and so on) refers to the page were we can find that parameter */
bool flag_all_ephemeris; bool flag_all_ephemeris{};
int32_t IOD_ephemeris; int32_t IOD_ephemeris{};
int32_t IOD_nav_1; int32_t IOD_nav_1{};
int32_t SV_ID_PRN_4; int32_t SV_ID_PRN_4{};
double M0_1; //!< Mean anomaly at reference time [semi-circles] double M0_1{}; //!< Mean anomaly at reference time [semi-circles]
double delta_n_3; //!< Mean motion difference from computed value [semi-circles/sec] double delta_n_3{}; //!< Mean motion difference from computed value [semi-circles/sec]
double e_1; //!< Eccentricity double e_1{}; //!< Eccentricity
double A_1; //!< Square root of the semi-major axis [meters^1/2] double A_1{}; //!< Square root of the semi-major axis [meters^1/2]
double OMEGA_0_2; //!< Longitude of ascending node of orbital plane at weekly epoch [semi-circles] double OMEGA_0_2{}; //!< Longitude of ascending node of orbital plane at weekly epoch [semi-circles]
double i_0_2; //!< Inclination angle at reference time [semi-circles] double i_0_2{}; //!< Inclination angle at reference time [semi-circles]
double omega_2; //!< Argument of perigee [semi-circles] double omega_2{}; //!< Argument of perigee [semi-circles]
double OMEGA_dot_3; //!< Rate of right ascension [semi-circles/sec] double OMEGA_dot_3{}; //!< Rate of right ascension [semi-circles/sec]
double iDot_2; //!< Rate of inclination angle [semi-circles/sec] double iDot_2{}; //!< Rate of inclination angle [semi-circles/sec]
double C_uc_3; //!< Amplitude of the cosine harmonic correction term to the argument of latitude [radians] double C_uc_3{}; //!< Amplitude of the cosine harmonic correction term to the argument of latitude [radians]
double C_us_3; //!< Amplitude of the sine harmonic correction term to the argument of latitude [radians] double C_us_3{}; //!< Amplitude of the sine harmonic correction term to the argument of latitude [radians]
double C_rc_3; //!< Amplitude of the cosine harmonic correction term to the orbit radius [meters] double C_rc_3{}; //!< Amplitude of the cosine harmonic correction term to the orbit radius [meters]
double C_rs_3; //!< Amplitude of the sine harmonic correction term to the orbit radius [meters] double C_rs_3{}; //!< Amplitude of the sine harmonic correction term to the orbit radius [meters]
double C_ic_4; //!< Amplitude of the cosine harmonic correction term to the angle of inclination [radians] double C_ic_4{}; //!< Amplitude of the cosine harmonic correction term to the angle of inclination [radians]
double C_is_4; //!< Amplitude of the sine harmonic correction term to the angle of inclination [radians] double C_is_4{}; //!< Amplitude of the sine harmonic correction term to the angle of inclination [radians]
int32_t t0e_1; //!< Ephemeris reference time [s] int32_t t0e_1{}; //!< Ephemeris reference time [s]
/*Clock correction parameters*/ /* Clock correction parameters */
int32_t t0c_4; //!< Clock correction data reference Time of Week [sec] int32_t t0c_4{}; //!< Clock correction data reference Time of Week [sec]
double af0_4; //!< SV clock bias correction coefficient [s] double af0_4{}; //!< SV clock bias correction coefficient [s]
double af1_4; //!< SV clock drift correction coefficient [s/s] double af1_4{}; //!< SV clock drift correction coefficient [s/s]
double af2_4; //!< SV clock drift rate correction coefficient [s/s^2] double af2_4{}; //!< SV clock drift rate correction coefficient [s/s^2]
/*GST*/ /* GST */
// Not belong to ephemeris set (page 1 to 4) // Not belong to ephemeris set (page 1 to 4)
int32_t WN_5; //!< Week number int32_t WN_5{}; //!< Week number
int32_t TOW_5; //!< Time of Week int32_t TOW_5{}; //!< Time of Week
double Galileo_satClkDrift; double Galileo_satClkDrift{};
double Galileo_dtr; //!< relativistic clock correction term double Galileo_dtr{}; //!< relativistic clock correction term
// SV status // SV status
int32_t SISA_3; int32_t SISA_3{};
int32_t E5a_HS; //!< E5a Signal Health Status int32_t E5a_HS{}; //!< E5a Signal Health Status
int32_t E5b_HS_5; //!< E5b Signal Health Status int32_t E5b_HS_5{}; //!< E5b Signal Health Status
int32_t E1B_HS_5; //!< E1B Signal Health Status int32_t E1B_HS_5{}; //!< E1B Signal Health Status
bool E5a_DVS; //!< E5a Data Validity Status bool E5a_DVS{}; //!< E5a Data Validity Status
bool E5b_DVS_5; //!< E5b Data Validity Status bool E5b_DVS_5{}; //!< E5b Data Validity Status
bool E1B_DVS_5; //!< E1B Data Validity Status bool E1B_DVS_5{}; //!< E1B Data Validity Status
double BGD_E1E5a_5; //!< E1-E5a Broadcast Group Delay [s] double BGD_E1E5a_5{}; //!< E1-E5a Broadcast Group Delay [s]
double BGD_E1E5b_5; //!< E1-E5b Broadcast Group Delay [s] double BGD_E1E5b_5{}; //!< E1-E5b Broadcast Group Delay [s]
// satellite positions // satellite positions
double d_satpos_X; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis. double d_satpos_X{}; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis.
double d_satpos_Y; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system. double d_satpos_Y{}; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system.
double d_satpos_Z; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP). double d_satpos_Z{}; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP).
// Satellite velocity // Satellite velocity
double d_satvel_X; //!< Earth-fixed velocity coordinate x of the satellite [m] double d_satvel_X{}; //!< Earth-fixed velocity coordinate x of the satellite [m]
double d_satvel_Y; //!< Earth-fixed velocity coordinate y of the satellite [m] double d_satvel_Y{}; //!< Earth-fixed velocity coordinate y of the satellite [m]
double d_satvel_Z; //!< Earth-fixed velocity coordinate z of the satellite [m] double d_satvel_Z{}; //!< Earth-fixed velocity coordinate z of the satellite [m]
uint32_t i_satellite_PRN; //!< SV PRN NUMBER uint32_t i_satellite_PRN{}; //!< SV PRN NUMBER
void satellitePosition(double transmitTime); //!< Computes the ECEF SV coordinates and ECEF velocity void satellitePosition(double transmitTime); //!< Computes the ECEF SV coordinates and ECEF velocity
double Galileo_System_Time(double WN, double TOW); //!< Galileo System Time (GST), ICD paragraph 5.1.2 double Galileo_System_Time(double WN, double TOW); //!< Galileo System Time (GST), ICD paragraph 5.1.2
double sv_clock_drift(double transmitTime); //!< Satellite Time Correction Algorithm, ICD 5.1.4 double sv_clock_drift(double transmitTime); //!< Satellite Time Correction Algorithm, ICD 5.1.4
double sv_clock_relativistic_term(double transmitTime); //!< Satellite Time Correction Algorithm, ICD 5.1.4 double sv_clock_relativistic_term(double transmitTime); //!< Satellite Time Correction Algorithm, ICD 5.1.4
Galileo_Ephemeris();
template <class Archive> template <class Archive>

View File

@ -33,143 +33,6 @@
using CRC_Galileo_FNAV_type = boost::crc_optimal<24, 0x1864CFBU, 0x0, 0x0, false, false>; using CRC_Galileo_FNAV_type = boost::crc_optimal<24, 0x1864CFBU, 0x0, 0x0, false, false>;
void Galileo_Fnav_Message::reset()
{
flag_CRC_test = false;
flag_all_ephemeris = false; //!< Flag indicating that all words containing ephemeris have been received
flag_ephemeris_1 = false; //!< Flag indicating that ephemeris 1/3 (word 2) have been received
flag_ephemeris_2 = false; //!< Flag indicating that ephemeris 2/3 (word 3) have been received
flag_ephemeris_3 = false; //!< Flag indicating that ephemeris 3/3 (word 4) have been received
flag_iono_and_GST = false; //!< Flag indicating that ionospheric and GST parameters (word 1) have been received
flag_TOW_1 = false;
flag_TOW_2 = false;
flag_TOW_3 = false;
flag_TOW_4 = false;
flag_TOW_set = false; //!< it is true when page 1,2,3 or 4 arrives
flag_utc_model = false; //!< Flag indicating that utc model parameters (word 4) have been received
flag_all_almanac = false; //!< Flag indicating that all almanac have been received
flag_almanac_1 = false; //!< Flag indicating that almanac 1/2 (word 5) have been received
flag_almanac_2 = false; //!< Flag indicating that almanac 2/2 (word 6) have been received
IOD_ephemeris = 0;
page_type = 0;
// WORD 1 SVID, Clock correction, SISA, Ionospheric correction, BGD, GST, Signal
// health and Data validity status
FNAV_SV_ID_PRN_1 = 0;
FNAV_IODnav_1 = -1;
FNAV_t0c_1 = 0;
FNAV_af0_1 = 0.0;
FNAV_af1_1 = 0.0;
FNAV_af2_1 = 0.0;
FNAV_SISA_1 = 0;
FNAV_ai0_1 = 0.0;
FNAV_ai1_1 = 0.0;
FNAV_ai2_1 = 0.0;
FNAV_region1_1 = false;
FNAV_region2_1 = false;
FNAV_region3_1 = false;
FNAV_region4_1 = false;
FNAV_region5_1 = false;
FNAV_BGD_1 = 0.0;
FNAV_E5ahs_1 = 0;
FNAV_WN_1 = 0;
FNAV_TOW_1 = 0;
FNAV_E5advs_1 = false;
// WORD 2 Ephemeris (1/3) and GST
FNAV_IODnav_2 = -2;
FNAV_M0_2 = 0.0;
FNAV_omegadot_2 = 0.0;
FNAV_e_2 = 0.0;
FNAV_a12_2 = 0.0;
FNAV_omega0_2 = 0.0;
FNAV_idot_2 = 0.0;
FNAV_WN_2 = 0;
FNAV_TOW_2 = 0;
// WORD 3 Ephemeris (2/3) and GST
FNAV_IODnav_3 = -3;
FNAV_i0_3 = 0.0;
FNAV_w_3 = 0.0;
FNAV_deltan_3 = 0.0;
FNAV_Cuc_3 = 0.0;
FNAV_Cus_3 = 0.0;
FNAV_Crc_3 = 0.0;
FNAV_Crs_3 = 0.0;
FNAV_t0e_3 = 0;
FNAV_WN_3 = 0;
FNAV_TOW_3 = 0;
// WORD 4 Ephemeris (3/3), GST-UTC conversion, GST-GPS conversion and TOW.
// Note that the clock is repeated in this page type
FNAV_IODnav_4 = -4;
FNAV_Cic_4 = 0.0;
FNAV_Cis_4 = 0.0;
FNAV_A0_4 = 0.0;
FNAV_A1_4 = 0.0;
FNAV_deltatls_4 = 0;
FNAV_t0t_4 = 0;
FNAV_WNot_4 = 0;
FNAV_WNlsf_4 = 0;
FNAV_DN_4 = 0;
FNAV_deltatlsf_4 = 0;
FNAV_t0g_4 = 0;
FNAV_A0g_4 = 0.0;
FNAV_A1g_4 = 0.0;
FNAV_WN0g_4 = 0;
FNAV_TOW_4 = 0;
// WORD 5 Almanac (SVID1 and SVID2(1/2)), Week Number and almanac reference time
FNAV_IODa_5 = 0;
FNAV_WNa_5 = 0;
FNAV_t0a_5 = 0;
FNAV_SVID1_5 = 0;
FNAV_Deltaa12_1_5 = 0.0;
FNAV_e_1_5 = 0.0;
FNAV_w_1_5 = 0.0;
FNAV_deltai_1_5 = 0.0;
FNAV_Omega0_1_5 = 0.0;
FNAV_Omegadot_1_5 = 0.0;
FNAV_M0_1_5 = 0.0;
FNAV_af0_1_5 = 0.0;
FNAV_af1_1_5 = 0.0;
FNAV_E5ahs_1_5 = 0U;
FNAV_SVID2_5 = 0;
FNAV_Deltaa12_2_5 = 0;
FNAV_e_2_5 = 0.0;
FNAV_w_2_5 = 0.0;
FNAV_deltai_2_5 = 0.0;
// WORD 6 Almanac (SVID2(2/2) and SVID3)
FNAV_IODa_6 = 0;
FNAV_Omega0_2_6 = 0.0;
FNAV_Omegadot_2_6 = 0.0;
FNAV_M0_2_6 = 0.0;
FNAV_af0_2_6 = 0.0;
FNAV_af1_2_6 = 0.0;
FNAV_E5ahs_2_6 = 0;
FNAV_SVID3_6 = 0;
FNAV_Deltaa12_3_6 = 0.0;
FNAV_e_3_6 = 0.0;
FNAV_w_3_6 = 0.0;
FNAV_deltai_3_6 = 0.0;
FNAV_Omega0_3_6 = 0.0;
FNAV_Omegadot_3_6 = 0.0;
FNAV_M0_3_6 = 0.0;
FNAV_af0_3_6 = 0.0;
FNAV_af1_3_6 = 0.0;
FNAV_E5ahs_3_6 = 0;
}
Galileo_Fnav_Message::Galileo_Fnav_Message()
{
reset();
}
void Galileo_Fnav_Message::split_page(const std::string& page_string) void Galileo_Fnav_Message::split_page(const std::string& page_string)
{ {

View File

@ -46,8 +46,9 @@
class Galileo_Fnav_Message class Galileo_Fnav_Message
{ {
public: public:
Galileo_Fnav_Message() = default;
void split_page(const std::string& page_string); void split_page(const std::string& page_string);
void reset();
bool have_new_ephemeris(); bool have_new_ephemeris();
bool have_new_iono_and_GST(); bool have_new_iono_and_GST();
bool have_new_utc_model(); bool have_new_utc_model();
@ -57,135 +58,133 @@ public:
Galileo_Utc_Model get_utc_model(); Galileo_Utc_Model get_utc_model();
Galileo_Almanac_Helper get_almanac(); Galileo_Almanac_Helper get_almanac();
Galileo_Fnav_Message(); bool flag_CRC_test{};
bool flag_all_ephemeris{}; //!< Flag indicating that all words containing ephemeris have been received
bool flag_ephemeris_1{}; //!< Flag indicating that ephemeris 1/3 (word 2) have been received
bool flag_ephemeris_2{}; //!< Flag indicating that ephemeris 2/3 (word 3) have been received
bool flag_ephemeris_3{}; //!< Flag indicating that ephemeris 3/3 (word 4) have been received
bool flag_CRC_test; bool flag_iono_and_GST{}; //!< Flag indicating that ionospheric and GST parameters (word 1) have been received
bool flag_all_ephemeris; //!< Flag indicating that all words containing ephemeris have been received bool flag_TOW_1{};
bool flag_ephemeris_1; //!< Flag indicating that ephemeris 1/3 (word 2) have been received bool flag_TOW_2{};
bool flag_ephemeris_2; //!< Flag indicating that ephemeris 2/3 (word 3) have been received bool flag_TOW_3{};
bool flag_ephemeris_3; //!< Flag indicating that ephemeris 3/3 (word 4) have been received bool flag_TOW_4{};
bool flag_TOW_set{}; //!< it is true when page 1,2,3 or 4 arrives
bool flag_utc_model{}; //!< Flag indicating that utc model parameters (word 4) have been received
bool flag_iono_and_GST; //!< Flag indicating that ionospheric and GST parameters (word 1) have been received bool flag_all_almanac{}; //!< Flag indicating that all almanac have been received
bool flag_TOW_1; bool flag_almanac_1{}; //!< Flag indicating that almanac 1/2 (word 5) have been received
bool flag_TOW_2; bool flag_almanac_2{}; //!< Flag indicating that almanac 2/2 (word 6) have been received
bool flag_TOW_3;
bool flag_TOW_4;
bool flag_TOW_set; //!< it is true when page 1,2,3 or 4 arrives
bool flag_utc_model; //!< Flag indicating that utc model parameters (word 4) have been received
bool flag_all_almanac; //!< Flag indicating that all almanac have been received int32_t IOD_ephemeris{};
bool flag_almanac_1; //!< Flag indicating that almanac 1/2 (word 5) have been received
bool flag_almanac_2; //!< Flag indicating that almanac 2/2 (word 6) have been received
int32_t IOD_ephemeris; int32_t page_type{};
int32_t page_type;
// WORD 1 SVID, Clock correction, SISA, Ionospheric correction, BGD, GST, Signal // WORD 1 SVID, Clock correction, SISA, Ionospheric correction, BGD, GST, Signal
// health and Data validity status // health and Data validity status
int32_t FNAV_SV_ID_PRN_1; int32_t FNAV_SV_ID_PRN_1{};
int32_t FNAV_IODnav_1; int32_t FNAV_IODnav_1{};
int32_t FNAV_t0c_1; int32_t FNAV_t0c_1{};
double FNAV_af0_1; double FNAV_af0_1{};
double FNAV_af1_1; double FNAV_af1_1{};
double FNAV_af2_1; double FNAV_af2_1{};
int32_t FNAV_SISA_1; int32_t FNAV_SISA_1{};
double FNAV_ai0_1; double FNAV_ai0_1{};
double FNAV_ai1_1; double FNAV_ai1_1{};
double FNAV_ai2_1; double FNAV_ai2_1{};
bool FNAV_region1_1; bool FNAV_region1_1{};
bool FNAV_region2_1; bool FNAV_region2_1{};
bool FNAV_region3_1; bool FNAV_region3_1{};
bool FNAV_region4_1; bool FNAV_region4_1{};
bool FNAV_region5_1; bool FNAV_region5_1{};
double FNAV_BGD_1; double FNAV_BGD_1{};
int32_t FNAV_E5ahs_1; int32_t FNAV_E5ahs_1{};
int32_t FNAV_WN_1; int32_t FNAV_WN_1{};
int32_t FNAV_TOW_1; int32_t FNAV_TOW_1{};
bool FNAV_E5advs_1; bool FNAV_E5advs_1{};
// WORD 2 Ephemeris (1/3) and GST // WORD 2 Ephemeris (1/3) and GST
int32_t FNAV_IODnav_2; int32_t FNAV_IODnav_2{};
double FNAV_M0_2; double FNAV_M0_2{};
double FNAV_omegadot_2; double FNAV_omegadot_2{};
double FNAV_e_2; double FNAV_e_2{};
double FNAV_a12_2; double FNAV_a12_2{};
double FNAV_omega0_2; double FNAV_omega0_2{};
double FNAV_idot_2; double FNAV_idot_2{};
int32_t FNAV_WN_2; int32_t FNAV_WN_2{};
int32_t FNAV_TOW_2; int32_t FNAV_TOW_2{};
// WORD 3 Ephemeris (2/3) and GST // WORD 3 Ephemeris (2/3) and GST
int32_t FNAV_IODnav_3; int32_t FNAV_IODnav_3{};
double FNAV_i0_3; double FNAV_i0_3{};
double FNAV_w_3; double FNAV_w_3{};
double FNAV_deltan_3; double FNAV_deltan_3{};
double FNAV_Cuc_3; double FNAV_Cuc_3{};
double FNAV_Cus_3; double FNAV_Cus_3{};
double FNAV_Crc_3; double FNAV_Crc_3{};
double FNAV_Crs_3; double FNAV_Crs_3{};
int32_t FNAV_t0e_3; int32_t FNAV_t0e_3{};
int32_t FNAV_WN_3; int32_t FNAV_WN_3{};
int32_t FNAV_TOW_3; int32_t FNAV_TOW_3{};
// WORD 4 Ephemeris (3/3), GST-UTC conversion, GST-GPS conversion and TOW. // WORD 4 Ephemeris (3/3), GST-UTC conversion, GST-GPS conversion and TOW.
// Note that the clock is repeated in this page type // Note that the clock is repeated in this page type
int32_t FNAV_IODnav_4; int32_t FNAV_IODnav_4{};
double FNAV_Cic_4; double FNAV_Cic_4{};
double FNAV_Cis_4; double FNAV_Cis_4{};
double FNAV_A0_4; double FNAV_A0_4{};
double FNAV_A1_4; double FNAV_A1_4{};
int32_t FNAV_deltatls_4; int32_t FNAV_deltatls_4{};
int32_t FNAV_t0t_4; int32_t FNAV_t0t_4{};
int32_t FNAV_WNot_4; int32_t FNAV_WNot_4{};
int32_t FNAV_WNlsf_4; int32_t FNAV_WNlsf_4{};
int32_t FNAV_DN_4; int32_t FNAV_DN_4{};
int32_t FNAV_deltatlsf_4; int32_t FNAV_deltatlsf_4{};
int32_t FNAV_t0g_4; int32_t FNAV_t0g_4{};
double FNAV_A0g_4; double FNAV_A0g_4{};
double FNAV_A1g_4; double FNAV_A1g_4{};
int32_t FNAV_WN0g_4; int32_t FNAV_WN0g_4{};
int32_t FNAV_TOW_4; int32_t FNAV_TOW_4{};
// WORD 5 Almanac (SVID1 and SVID2(1/2)), Week Number and almanac reference time // WORD 5 Almanac (SVID1 and SVID2(1/2)), Week Number and almanac reference time
int32_t FNAV_IODa_5; int32_t FNAV_IODa_5{};
int32_t FNAV_WNa_5; int32_t FNAV_WNa_5{};
int32_t FNAV_t0a_5; int32_t FNAV_t0a_5{};
int32_t FNAV_SVID1_5; int32_t FNAV_SVID1_5{};
double FNAV_Deltaa12_1_5; double FNAV_Deltaa12_1_5{};
double FNAV_e_1_5; double FNAV_e_1_5{};
double FNAV_w_1_5; double FNAV_w_1_5{};
double FNAV_deltai_1_5; double FNAV_deltai_1_5{};
double FNAV_Omega0_1_5; double FNAV_Omega0_1_5{};
double FNAV_Omegadot_1_5; double FNAV_Omegadot_1_5{};
double FNAV_M0_1_5; double FNAV_M0_1_5{};
double FNAV_af0_1_5; double FNAV_af0_1_5{};
double FNAV_af1_1_5; double FNAV_af1_1_5{};
uint32_t FNAV_E5ahs_1_5; uint32_t FNAV_E5ahs_1_5{};
int32_t FNAV_SVID2_5; int32_t FNAV_SVID2_5{};
double FNAV_Deltaa12_2_5; double FNAV_Deltaa12_2_5{};
double FNAV_e_2_5; double FNAV_e_2_5{};
double FNAV_w_2_5; double FNAV_w_2_5{};
double FNAV_deltai_2_5; double FNAV_deltai_2_5{};
// WORD 6 Almanac (SVID2(2/2) and SVID3) // WORD 6 Almanac (SVID2(2/2) and SVID3)
int32_t FNAV_IODa_6; int32_t FNAV_IODa_6{};
double FNAV_Omega0_2_6; double FNAV_Omega0_2_6{};
double FNAV_Omegadot_2_6; double FNAV_Omegadot_2_6{};
double FNAV_M0_2_6; double FNAV_M0_2_6{};
double FNAV_af0_2_6; double FNAV_af0_2_6{};
double FNAV_af1_2_6; double FNAV_af1_2_6{};
int32_t FNAV_E5ahs_2_6; int32_t FNAV_E5ahs_2_6{};
int32_t FNAV_SVID3_6; int32_t FNAV_SVID3_6{};
double FNAV_Deltaa12_3_6; double FNAV_Deltaa12_3_6{};
double FNAV_e_3_6; double FNAV_e_3_6{};
double FNAV_w_3_6; double FNAV_w_3_6{};
double FNAV_deltai_3_6; double FNAV_deltai_3_6{};
double FNAV_Omega0_3_6; double FNAV_Omega0_3_6{};
double FNAV_Omegadot_3_6; double FNAV_Omegadot_3_6{};
double FNAV_M0_3_6; double FNAV_M0_3_6{};
double FNAV_af0_3_6; double FNAV_af0_3_6{};
double FNAV_af1_3_6; double FNAV_af1_3_6{};
int32_t FNAV_E5ahs_3_6; int32_t FNAV_E5ahs_3_6{};
private: private:
bool _CRC_test(std::bitset<GALILEO_FNAV_DATA_FRAME_BITS> bits, uint32_t checksum); bool _CRC_test(std::bitset<GALILEO_FNAV_DATA_FRAME_BITS> bits, uint32_t checksum);
@ -193,9 +192,9 @@ private:
uint64_t read_navigation_unsigned(std::bitset<GALILEO_FNAV_DATA_FRAME_BITS> bits, const std::vector<std::pair<int32_t, int32_t>>& parameter); uint64_t read_navigation_unsigned(std::bitset<GALILEO_FNAV_DATA_FRAME_BITS> bits, const std::vector<std::pair<int32_t, int32_t>>& parameter);
int64_t read_navigation_signed(std::bitset<GALILEO_FNAV_DATA_FRAME_BITS> bits, const std::vector<std::pair<int32_t, int32_t>>& parameter); int64_t read_navigation_signed(std::bitset<GALILEO_FNAV_DATA_FRAME_BITS> bits, const std::vector<std::pair<int32_t, int32_t>>& parameter);
std::string omega0_1; std::string omega0_1{};
// std::string omega0_2; // std::string omega0_2{};
// bool omega_flag; // bool omega_flag{};
}; };
#endif // GNSS_SDR_GALILEO_FNAV_MESSAGE_H #endif // GNSS_SDR_GALILEO_FNAV_MESSAGE_H

View File

@ -1,39 +0,0 @@
/*!
* \file galileo_iono.cc
* \brief Interface of a GPS IONOSPHERIC MODEL storage
*
* \author Javier Arribas, 2013. jarribas(at)cttc.es
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* -------------------------------------------------------------------------
*/
#include "galileo_iono.h"
Galileo_Iono::Galileo_Iono()
{
// Ionospheric correction
ai0_5 = 0.0; // Effective Ionisation Level 1st order parameter [sfu]
ai1_5 = 0.0; // Effective Ionisation Level 2st order parameter [sfu/degree]
ai2_5 = 0.0; // Effective Ionisation Level 3st order parameter [sfu/degree]
// Ionospheric disturbance flag
Region1_flag_5 = false; // Ionospheric Disturbance Flag for region 1
Region2_flag_5 = false; // Ionospheric Disturbance Flag for region 2
Region3_flag_5 = false; // Ionospheric Disturbance Flag for region 3
Region4_flag_5 = false; // Ionospheric Disturbance Flag for region 4
Region5_flag_5 = false; // Ionospheric Disturbance Flag for region 5
TOW_5 = 0;
WN_5 = 0;
}

View File

@ -32,26 +32,26 @@
class Galileo_Iono class Galileo_Iono
{ {
public: public:
// Ionospheric correction
double ai0_5; //!< Effective Ionisation Level 1st order parameter [sfu]
double ai1_5; //!< Effective Ionisation Level 2st order parameter [sfu/degree]
double ai2_5; //!< Effective Ionisation Level 3st order parameter [sfu/degree]
// Ionospheric disturbance flag
bool Region1_flag_5; //!< Ionospheric Disturbance Flag for region 1
bool Region2_flag_5; //!< Ionospheric Disturbance Flag for region 2
bool Region3_flag_5; //!< Ionospheric Disturbance Flag for region 3
bool Region4_flag_5; //!< Ionospheric Disturbance Flag for region 4
bool Region5_flag_5; //!< Ionospheric Disturbance Flag for region 5
// from page 5 (UTC) to have a timestamp
int32_t TOW_5; //!< UTC data reference Time of Week [s]
int32_t WN_5; //!< UTC data reference Week number [week]
/*! /*!
* Default constructor * Default constructor
*/ */
Galileo_Iono(); Galileo_Iono() = default;
// Ionospheric correction
double ai0_5{}; //!< Effective Ionisation Level 1st order parameter [sfu]
double ai1_5{}; //!< Effective Ionisation Level 2st order parameter [sfu/degree]
double ai2_5{}; //!< Effective Ionisation Level 3st order parameter [sfu/degree]
// Ionospheric disturbance flag
bool Region1_flag_5{}; //!< Ionospheric Disturbance Flag for region 1
bool Region2_flag_5{}; //!< Ionospheric Disturbance Flag for region 2
bool Region3_flag_5{}; //!< Ionospheric Disturbance Flag for region 3
bool Region4_flag_5{}; //!< Ionospheric Disturbance Flag for region 4
bool Region5_flag_5{}; //!< Ionospheric Disturbance Flag for region 5
// from page 5 (UTC) to have a timestamp
int32_t TOW_5{}; //!< UTC data reference Time of Week [s]
int32_t WN_5{}; //!< UTC data reference Week number [week]
template <class Archive> template <class Archive>

View File

@ -31,194 +31,6 @@
using CRC_Galileo_INAV_type = boost::crc_optimal<24, 0x1864CFBU, 0x0, 0x0, false, false>; using CRC_Galileo_INAV_type = boost::crc_optimal<24, 0x1864CFBU, 0x0, 0x0, false, false>;
void Galileo_Navigation_Message::reset()
{
Page_type_time_stamp = 0;
flag_CRC_test = false;
flag_all_ephemeris = false; // flag indicating that all words containing ephemeris have been received
flag_ephemeris_1 = false; // flag indicating that ephemeris 1/4 (word 1) have been received
flag_ephemeris_2 = false; // flag indicating that ephemeris 2/4 (word 2) have been received
flag_ephemeris_3 = false; // flag indicating that ephemeris 3/4 (word 3) have been received
flag_ephemeris_4 = false; // flag indicating that ephemeris 4/4 (word 4) have been received
flag_iono_and_GST = false; // flag indicating that ionospheric parameters (word 5) have been received
flag_utc_model = false; // flag indicating that utc model parameters (word 6) have been received
flag_all_almanac = false; // flag indicating that all almanac have been received
flag_almanac_1 = false; // flag indicating that almanac 1/4 (word 7) have been received
flag_almanac_2 = false; // flag indicating that almanac 2/4 (word 8) have been received
flag_almanac_3 = false; // flag indicating that almanac 3/4 (word 9) have been received
flag_almanac_4 = false; // flag indicating that almanac 4/4 (word 10) have been received
flag_TOW_5 = false;
flag_TOW_set = false;
flag_GGTO = false;
flag_GGTO_1 = false;
flag_GGTO_2 = false;
flag_GGTO_3 = false;
flag_GGTO_4 = false;
IOD_ephemeris = 0;
// Word type 1: Ephemeris (1/4)
IOD_nav_1 = 0;
t0e_1 = 0;
M0_1 = 0.0;
e_1 = 0.0;
A_1 = 0.0;
// Word type 2: Ephemeris (2/4)
IOD_nav_2 = 0; // IOD_nav page 2
OMEGA_0_2 = 0.0; // Longitude of ascending node of orbital plane at weekly epoch [semi-circles]
i_0_2 = 0.0; // Inclination angle at reference time [semi-circles]
omega_2 = 0.0; // Argument of perigee [semi-circles]
iDot_2 = 0.0; // Rate of inclination angle [semi-circles/sec]
// Word type 3: Ephemeris (3/4) and SISA
IOD_nav_3 = 0;
OMEGA_dot_3 = 0.0; // Rate of right ascension [semi-circles/sec]
delta_n_3 = 0.0; // Mean motion difference from computed value [semi-circles/sec]
C_uc_3 = 0.0; // Amplitude of the cosine harmonic correction term to the argument of latitude [radians]
C_us_3 = 0.0; // Amplitude of the sine harmonic correction term to the argument of latitude [radians]
C_rc_3 = 0.0; // Amplitude of the cosine harmonic correction term to the orbit radius [meters]
C_rs_3 = 0.0; // Amplitude of the sine harmonic correction term to the orbit radius [meters]
SISA_3 = 0; //
// Word type 4: Ephemeris (4/4) and Clock correction parameter/
IOD_nav_4 = 0;
SV_ID_PRN_4 = 0;
C_ic_4 = 0.0; // Amplitude of the cosine harmonic correction term to the angle of inclination [radians]
C_is_4 = 0.0; // Amplitude of the sine harmonic correction term to the angle of inclination [radians]
// Clock correction parameters
t0c_4 = 0;
af0_4 = 0.0;
af1_4 = 0.0;
af2_4 = 0.0;
spare_4 = 0.0;
// Word type 5: Ionospheric correction, BGD, signal health and data validity status and GST
// Ionospheric correction
ai0_5 = 0.0;
ai1_5 = 0.0;
ai2_5 = 0.0;
// Ionospheric disturbance flag
Region1_flag_5 = false; // Region1_flag_5;
Region2_flag_5 = false;
Region3_flag_5 = false;
Region4_flag_5 = false;
Region5_flag_5 = false;
BGD_E1E5a_5 = 0.0;
BGD_E1E5b_5 = 0.0;
E5b_HS_5 = 0;
E1B_HS_5 = 0;
E5b_DVS_5 = false;
E1B_DVS_5 = false;
// GST
WN_5 = 0;
TOW_5 = 0;
spare_5 = 0.0;
// Word type 6: GST-UTC conversion parameters
A0_6 = 0.0;
A1_6 = 0.0;
Delta_tLS_6 = 0;
t0t_6 = 0;
WNot_6 = 0;
WN_LSF_6 = 0;
DN_6 = 0;
Delta_tLSF_6 = 0;
TOW_6 = 0;
// Word type 7: Almanac for SVID1 (1/2), almanac reference time and almanac reference week number
IOD_a_7 = 0;
WN_a_7 = 0;
t0a_7 = 0;
SVID1_7 = 0;
DELTA_A_7 = 0.0;
e_7 = 0.0;
omega_7 = 0.0;
delta_i_7 = 0.0;
Omega0_7 = 0.0;
Omega_dot_7 = 0.0;
M0_7 = 0.0;
// Word type 8: Almanac for SVID1 (2/2) and SVID2 (1/2)
IOD_a_8 = 0;
af0_8 = 0.0;
af1_8 = 0.0;
E5b_HS_8 = 0;
E1B_HS_8 = 0;
SVID2_8 = 0;
DELTA_A_8 = 0.0;
e_8 = 0.0;
omega_8 = 0.0;
delta_i_8 = 0.0;
Omega0_8 = 0.0;
Omega_dot_8 = 0.0;
// Word type 9: Almanac for SVID2 (2/2) and SVID3 (1/2)
IOD_a_9 = 0;
WN_a_9 = 0;
t0a_9 = 0;
M0_9 = 0.0;
af0_9 = 0.0;
af1_9 = 0.0;
E5b_HS_9 = 0;
E1B_HS_9 = 0;
SVID3_9 = 0;
DELTA_A_9 = 0.0;
e_9 = 0.0;
omega_9 = 0.0;
delta_i_9 = 0.0;
// Word type 10: Almanac for SVID3 (2/2) and GST-GPS conversion parameters
IOD_a_10 = 0;
Omega0_10 = 0.0;
Omega_dot_10 = 0.0;
M0_10 = 0.0;
af0_10 = 0.0;
af1_10 = 0.0;
E5b_HS_10 = 0;
E1B_HS_10 = 0;
// GST-GPS
A_0G_10 = 0.0;
A_1G_10 = 0.0;
t_0G_10 = 0;
WN_0G_10 = 0;
// Word type 0: I/NAV Spare Word
Time_0 = 0;
WN_0 = 0;
TOW_0 = 0;
flag_TOW_6 = false;
Galileo_satClkDrift = 0.0;
Galileo_dtr = 0.0;
// satellite positions
galileo_satpos_X = 0.0;
galileo_satpos_Y = 0.0;
galileo_satpos_Z = 0.0;
// Satellite velocity
galileo_satvel_X = 0.0;
galileo_satvel_Y = 0.0;
galileo_satvel_Z = 0.0;
}
Galileo_Navigation_Message::Galileo_Navigation_Message()
{
reset();
}
bool Galileo_Navigation_Message::CRC_test(std::bitset<GALILEO_DATA_FRAME_BITS> bits, uint32_t checksum) bool Galileo_Navigation_Message::CRC_test(std::bitset<GALILEO_DATA_FRAME_BITS> bits, uint32_t checksum)
{ {
CRC_Galileo_INAV_type CRC_Galileo; CRC_Galileo_INAV_type CRC_Galileo;

View File

@ -42,185 +42,185 @@
class Galileo_Navigation_Message class Galileo_Navigation_Message
{ {
public: public:
Galileo_Navigation_Message(); Galileo_Navigation_Message() = default;
int32_t Page_type_time_stamp; int32_t Page_type_time_stamp{};
std::string page_Even; std::string page_Even{};
bool flag_CRC_test; bool flag_CRC_test{};
bool flag_all_ephemeris; //!< Flag indicating that all words containing ephemeris have been received bool flag_all_ephemeris{}; //!< Flag indicating that all words containing ephemeris have been received
bool flag_ephemeris_1; //!< Flag indicating that ephemeris 1/4 (word 1) have been received bool flag_ephemeris_1{}; //!< Flag indicating that ephemeris 1/4 (word 1) have been received
bool flag_ephemeris_2; //!< Flag indicating that ephemeris 2/4 (word 2) have been received bool flag_ephemeris_2{}; //!< Flag indicating that ephemeris 2/4 (word 2) have been received
bool flag_ephemeris_3; //!< Flag indicating that ephemeris 3/4 (word 3) have been received bool flag_ephemeris_3{}; //!< Flag indicating that ephemeris 3/4 (word 3) have been received
bool flag_ephemeris_4; //!< Flag indicating that ephemeris 4/4 (word 4) have been received bool flag_ephemeris_4{}; //!< Flag indicating that ephemeris 4/4 (word 4) have been received
bool flag_iono_and_GST; //!< Flag indicating that ionospheric and GST parameters (word 5) have been received bool flag_iono_and_GST{}; //!< Flag indicating that ionospheric and GST parameters (word 5) have been received
bool flag_TOW_5; bool flag_TOW_5{};
bool flag_TOW_6; bool flag_TOW_6{};
bool flag_TOW_set; //!< it is true when page 5 or page 6 arrives bool flag_TOW_set{}; //!< it is true when page 5 or page 6 arrives
bool flag_utc_model; //!< Flag indicating that utc model parameters (word 6) have been received bool flag_utc_model{}; //!< Flag indicating that utc model parameters (word 6) have been received
bool flag_all_almanac; //!< Flag indicating that all almanac have been received bool flag_all_almanac{}; //!< Flag indicating that all almanac have been received
bool flag_almanac_1; //!< Flag indicating that almanac 1/4 (word 7) have been received bool flag_almanac_1{}; //!< Flag indicating that almanac 1/4 (word 7) have been received
bool flag_almanac_2; //!< Flag indicating that almanac 2/4 (word 8) have been received bool flag_almanac_2{}; //!< Flag indicating that almanac 2/4 (word 8) have been received
bool flag_almanac_3; //!< Flag indicating that almanac 3/4 (word 9) have been received bool flag_almanac_3{}; //!< Flag indicating that almanac 3/4 (word 9) have been received
bool flag_almanac_4; //!< Flag indicating that almanac 4/4 (word 10) have been received bool flag_almanac_4{}; //!< Flag indicating that almanac 4/4 (word 10) have been received
int32_t IOD_ephemeris; int32_t IOD_ephemeris{};
bool flag_GGTO; bool flag_GGTO{};
bool flag_GGTO_1; bool flag_GGTO_1{};
bool flag_GGTO_2; bool flag_GGTO_2{};
bool flag_GGTO_3; bool flag_GGTO_3{};
bool flag_GGTO_4; bool flag_GGTO_4{};
// Word type 1: Ephemeris (1/4) // Word type 1: Ephemeris (1/4)
int32_t IOD_nav_1; //!< IOD_nav page 1 int32_t IOD_nav_1{}; //!< IOD_nav page 1
int32_t t0e_1; //!< Ephemeris reference time [s] int32_t t0e_1{}; //!< Ephemeris reference time [s]
double M0_1; //!< Mean anomaly at reference time [semi-circles] double M0_1{}; //!< Mean anomaly at reference time [semi-circles]
double e_1; //!< Eccentricity double e_1{}; //!< Eccentricity
double A_1; //!< Square root of the semi-major axis [meters^1/2] double A_1{}; //!< Square root of the semi-major axis [meters^1/2]
// Word type 2: Ephemeris (2/4) // Word type 2: Ephemeris (2/4)
int32_t IOD_nav_2; //!< IOD_nav page 2 int32_t IOD_nav_2{}; //!< IOD_nav page 2
double OMEGA_0_2; //!< Longitude of ascending node of orbital plane at weekly epoch [semi-circles] double OMEGA_0_2{}; //!< Longitude of ascending node of orbital plane at weekly epoch [semi-circles]
double i_0_2; //!< Inclination angle at reference time [semi-circles] double i_0_2{}; //!< Inclination angle at reference time [semi-circles]
double omega_2; //!< Argument of perigee [semi-circles] double omega_2{}; //!< Argument of perigee [semi-circles]
double iDot_2; //!< Rate of inclination angle [semi-circles/sec] double iDot_2{}; //!< Rate of inclination angle [semi-circles/sec]
// Word type 3: Ephemeris (3/4) and SISA // Word type 3: Ephemeris (3/4) and SISA
int32_t IOD_nav_3; // int32_t IOD_nav_3{}; //
double OMEGA_dot_3; //!< Rate of right ascension [semi-circles/sec] double OMEGA_dot_3{}; //!< Rate of right ascension [semi-circles/sec]
double delta_n_3; //!< Mean motion difference from computed value [semi-circles/sec] double delta_n_3{}; //!< Mean motion difference from computed value [semi-circles/sec]
double C_uc_3; //!< Amplitude of the cosine harmonic correction term to the argument of latitude [radians] double C_uc_3{}; //!< Amplitude of the cosine harmonic correction term to the argument of latitude [radians]
double C_us_3; //!< Amplitude of the sine harmonic correction term to the argument of latitude [radians] double C_us_3{}; //!< Amplitude of the sine harmonic correction term to the argument of latitude [radians]
double C_rc_3; //!< Amplitude of the cosine harmonic correction term to the orbit radius [meters] double C_rc_3{}; //!< Amplitude of the cosine harmonic correction term to the orbit radius [meters]
double C_rs_3; //!< Amplitude of the sine harmonic correction term to the orbit radius [meters] double C_rs_3{}; //!< Amplitude of the sine harmonic correction term to the orbit radius [meters]
int32_t SISA_3; int32_t SISA_3{};
// Word type 4: Ephemeris (4/4) and Clock correction parameters*/ // Word type 4: Ephemeris (4/4) and Clock correction parameters*/
int32_t IOD_nav_4; // int32_t IOD_nav_4{}; //
int32_t SV_ID_PRN_4; // int32_t SV_ID_PRN_4{}; //
double C_ic_4; //!< Amplitude of the cosine harmonic correction term to the angle of inclination [radians] double C_ic_4{}; //!< Amplitude of the cosine harmonic correction term to the angle of inclination [radians]
double C_is_4; //!< Amplitude of the sine harmonic correction term to the angle of inclination [radians] double C_is_4{}; //!< Amplitude of the sine harmonic correction term to the angle of inclination [radians]
// Clock correction parameters // Clock correction parameters
int32_t t0c_4; //!< Clock correction data reference Time of Week [sec] int32_t t0c_4{}; //!< Clock correction data reference Time of Week [sec]
double af0_4; //!< SV clock bias correction coefficient [s] double af0_4{}; //!< SV clock bias correction coefficient [s]
double af1_4; //!< SV clock drift correction coefficient [s/s] double af1_4{}; //!< SV clock drift correction coefficient [s/s]
double af2_4; //!< clock drift rate correction coefficient [s/s^2] double af2_4{}; //!< clock drift rate correction coefficient [s/s^2]
double spare_4; double spare_4{};
// Word type 5: Ionospheric correction, BGD, signal health and data validity status and GST*/ // Word type 5: Ionospheric correction, BGD, signal health and data validity status and GST*/
// Ionospheric correction // Ionospheric correction
double ai0_5; //!< Effective Ionisation Level 1st order parameter [sfu] double ai0_5{}; //!< Effective Ionisation Level 1st order parameter [sfu]
double ai1_5; //!< Effective Ionisation Level 2st order parameter [sfu/degree] double ai1_5{}; //!< Effective Ionisation Level 2st order parameter [sfu/degree]
double ai2_5; //!< Effective Ionisation Level 3st order parameter [sfu/degree] double ai2_5{}; //!< Effective Ionisation Level 3st order parameter [sfu/degree]
// Ionospheric disturbance flag // Ionospheric disturbance flag
bool Region1_flag_5; //!< Ionospheric Disturbance Flag for region 1 bool Region1_flag_5{}; //!< Ionospheric Disturbance Flag for region 1
bool Region2_flag_5; //!< Ionospheric Disturbance Flag for region 2 bool Region2_flag_5{}; //!< Ionospheric Disturbance Flag for region 2
bool Region3_flag_5; //!< Ionospheric Disturbance Flag for region 3 bool Region3_flag_5{}; //!< Ionospheric Disturbance Flag for region 3
bool Region4_flag_5; //!< Ionospheric Disturbance Flag for region 4 bool Region4_flag_5{}; //!< Ionospheric Disturbance Flag for region 4
bool Region5_flag_5; //!< Ionospheric Disturbance Flag for region 5 bool Region5_flag_5{}; //!< Ionospheric Disturbance Flag for region 5
double BGD_E1E5a_5; //!< E1-E5a Broadcast Group Delay [s] double BGD_E1E5a_5{}; //!< E1-E5a Broadcast Group Delay [s]
double BGD_E1E5b_5; //!< E1-E5b Broadcast Group Delay [s] double BGD_E1E5b_5{}; //!< E1-E5b Broadcast Group Delay [s]
int32_t E5b_HS_5; //!< E5b Signal Health Status int32_t E5b_HS_5{}; //!< E5b Signal Health Status
int32_t E1B_HS_5; //!< E1B Signal Health Status int32_t E1B_HS_5{}; //!< E1B Signal Health Status
bool E5b_DVS_5; //!< E5b Data Validity Status bool E5b_DVS_5{}; //!< E5b Data Validity Status
bool E1B_DVS_5; //!< E1B Data Validity Status bool E1B_DVS_5{}; //!< E1B Data Validity Status
// GST // GST
int32_t WN_5; int32_t WN_5{};
int32_t TOW_5; int32_t TOW_5{};
double spare_5; double spare_5{};
// Word type 6: GST-UTC conversion parameters // Word type 6: GST-UTC conversion parameters
double A0_6; double A0_6{};
double A1_6; double A1_6{};
int32_t Delta_tLS_6; int32_t Delta_tLS_6{};
int32_t t0t_6; int32_t t0t_6{};
int32_t WNot_6; int32_t WNot_6{};
int32_t WN_LSF_6; int32_t WN_LSF_6{};
int32_t DN_6; int32_t DN_6{};
int32_t Delta_tLSF_6; int32_t Delta_tLSF_6{};
int32_t TOW_6; int32_t TOW_6{};
// Word type 7: Almanac for SVID1 (1/2), almanac reference time and almanac reference week number // Word type 7: Almanac for SVID1 (1/2), almanac reference time and almanac reference week number
int32_t IOD_a_7; int32_t IOD_a_7{};
int32_t WN_a_7; int32_t WN_a_7{};
int32_t t0a_7; int32_t t0a_7{};
int32_t SVID1_7; int32_t SVID1_7{};
double DELTA_A_7; double DELTA_A_7{};
double e_7; double e_7{};
double omega_7; double omega_7{};
double delta_i_7; double delta_i_7{};
double Omega0_7; double Omega0_7{};
double Omega_dot_7; double Omega_dot_7{};
double M0_7; double M0_7{};
// Word type 8: Almanac for SVID1 (2/2) and SVID2 (1/2) // Word type 8: Almanac for SVID1 (2/2) and SVID2 (1/2)
int32_t IOD_a_8; int32_t IOD_a_8{};
double af0_8; double af0_8{};
double af1_8; double af1_8{};
int32_t E5b_HS_8; int32_t E5b_HS_8{};
int32_t E1B_HS_8; int32_t E1B_HS_8{};
int32_t SVID2_8; int32_t SVID2_8{};
double DELTA_A_8; double DELTA_A_8{};
double e_8; double e_8{};
double omega_8; double omega_8{};
double delta_i_8; double delta_i_8{};
double Omega0_8; double Omega0_8{};
double Omega_dot_8; double Omega_dot_8{};
// Word type 9: Almanac for SVID2 (2/2) and SVID3 (1/2) // Word type 9: Almanac for SVID2 (2/2) and SVID3 (1/2)
int32_t IOD_a_9; int32_t IOD_a_9{};
int32_t WN_a_9; int32_t WN_a_9{};
int32_t t0a_9; int32_t t0a_9{};
double M0_9; double M0_9{};
double af0_9; double af0_9{};
double af1_9; double af1_9{};
int32_t E5b_HS_9; int32_t E5b_HS_9{};
int32_t E1B_HS_9; int32_t E1B_HS_9{};
int32_t SVID3_9; int32_t SVID3_9{};
double DELTA_A_9; double DELTA_A_9{};
double e_9; double e_9{};
double omega_9; double omega_9{};
double delta_i_9; double delta_i_9{};
// Word type 10: Almanac for SVID3 (2/2) and GST-GPS conversion parameters // Word type 10: Almanac for SVID3 (2/2) and GST-GPS conversion parameters
int32_t IOD_a_10; int32_t IOD_a_10{};
double Omega0_10; double Omega0_10{};
double Omega_dot_10; double Omega_dot_10{};
double M0_10; double M0_10{};
double af0_10; double af0_10{};
double af1_10; double af1_10{};
int32_t E5b_HS_10; int32_t E5b_HS_10{};
int32_t E1B_HS_10; int32_t E1B_HS_10{};
// GST-GPS conversion // GST-GPS conversion
double A_0G_10; //!< Constant term of the offset Delta t systems double A_0G_10{}; //!< Constant term of the offset Delta t systems
double A_1G_10; //!< Rate of change of the offset Delta t systems double A_1G_10{}; //!< Rate of change of the offset Delta t systems
int32_t t_0G_10; //!< Reference time for Galileo/GPS Time Offset (GGTO) data int32_t t_0G_10{}; //!< Reference time for Galileo/GPS Time Offset (GGTO) data
int32_t WN_0G_10; //!< Week Number of Galileo/GPS Time Offset (GGTO) reference int32_t WN_0G_10{}; //!< Week Number of Galileo/GPS Time Offset (GGTO) reference
// Word type 0: I/NAV Spare Word // Word type 0: I/NAV Spare Word
int32_t Time_0; int32_t Time_0{};
int32_t WN_0; int32_t WN_0{};
int32_t TOW_0; int32_t TOW_0{};
double Galileo_satClkDrift; double Galileo_satClkDrift{};
double Galileo_dtr; //!< Relativistic clock correction term double Galileo_dtr{}; //!< Relativistic clock correction term
// satellite positions // satellite positions
double galileo_satpos_X; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis. double galileo_satpos_X{}; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis.
double galileo_satpos_Y; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system. double galileo_satpos_Y{}; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system.
double galileo_satpos_Z; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP). double galileo_satpos_Z{}; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP).
// Satellite velocity // Satellite velocity
double galileo_satvel_X; //!< Earth-fixed velocity coordinate x of the satellite [m] double galileo_satvel_X{}; //!< Earth-fixed velocity coordinate x of the satellite [m]
double galileo_satvel_Y; //!< Earth-fixed velocity coordinate y of the satellite [m] double galileo_satvel_Y{}; //!< Earth-fixed velocity coordinate y of the satellite [m]
double galileo_satvel_Z; //!< Earth-fixed velocity coordinate z of the satellite [m] double galileo_satvel_Z{}; //!< Earth-fixed velocity coordinate z of the satellite [m]
/* /*
* \brief Takes in input a page (Odd or Even) of 120 bit, split it according ICD 4.3.2.3 and join Data_k with Data_j * \brief Takes in input a page (Odd or Even) of 120 bit, split it according ICD 4.3.2.3 and join Data_k with Data_j
@ -234,8 +234,6 @@ public:
*/ */
int32_t page_jk_decoder(const char* data_jk); int32_t page_jk_decoder(const char* data_jk);
void reset();
/* /*
* \brief Returns true if new Ephemeris has arrived. The flag is set to false when the function is executed * \brief Returns true if new Ephemeris has arrived. The flag is set to false when the function is executed
*/ */

View File

@ -20,25 +20,6 @@
#include "galileo_utc_model.h" #include "galileo_utc_model.h"
#include <cmath> #include <cmath>
Galileo_Utc_Model::Galileo_Utc_Model()
{
// Word type 6: GST-UTC conversion parameters
A0_6 = 0.0;
A1_6 = 0.0;
Delta_tLS_6 = 0;
t0t_6 = 0;
WNot_6 = 0;
WN_LSF_6 = 0;
DN_6 = 0;
Delta_tLSF_6 = 0;
flag_utc_model = false;
// GPS to Galileo GST conversion parameters
A_0G_10 = 0.0;
A_1G_10 = 0.0;
t_0G_10 = 0;
WN_0G_10 = 0;
}
double Galileo_Utc_Model::GST_to_UTC_time(double t_e, int32_t WN) double Galileo_Utc_Model::GST_to_UTC_time(double t_e, int32_t WN)
{ {

View File

@ -33,30 +33,30 @@
class Galileo_Utc_Model class Galileo_Utc_Model
{ {
public: public:
// Word type 6: GST-UTC conversion parameters
double A0_6;
double A1_6;
int32_t Delta_tLS_6;
int32_t t0t_6; //!< UTC data reference Time of Week [s]
int32_t WNot_6; //!< UTC data reference Week number [week]
int32_t WN_LSF_6;
int32_t DN_6;
int32_t Delta_tLSF_6;
bool flag_utc_model;
// GPS to Galileo GST conversion parameters
double A_0G_10;
double A_1G_10;
int32_t t_0G_10;
int32_t WN_0G_10;
// double TOW_6;
double GST_to_UTC_time(double t_e, int32_t WN); //!< GST-UTC Conversion Algorithm and Parameters
/*! /*!
* Default constructor * Default constructor
*/ */
Galileo_Utc_Model(); Galileo_Utc_Model() = default;
// Word type 6: GST-UTC conversion parameters
double A0_6{};
double A1_6{};
int32_t Delta_tLS_6{};
int32_t t0t_6{}; //!< UTC data reference Time of Week [s]
int32_t WNot_6{}; //!< UTC data reference Week number [week]
int32_t WN_LSF_6{};
int32_t DN_6{};
int32_t Delta_tLSF_6{};
bool flag_utc_model{};
// GPS to Galileo GST conversion parameters
double A_0G_10{};
double A_1G_10{};
int32_t t_0G_10{};
int32_t WN_0G_10{};
// double TOW_6;
double GST_to_UTC_time(double t_e, int32_t WN); //!< GST-UTC Conversion Algorithm and Parameters
template <class Archive> template <class Archive>

View File

@ -1,44 +0,0 @@
/*!
* \file glonass_gnav_almanac.cc
* \brief Interface of a GLONASS GNAV ALMANAC storage as described in GLONASS ICD (Edition 5.1)
* \note Code added as part of GSoC 2017 program
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
* \see <a href="http://russianspacesystems.ru/wp-content/uploads/2016/08/ICD_GLONASS_eng_v5.1.pdf">GLONASS ICD</a>
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* -------------------------------------------------------------------------
*/
#include "glonass_gnav_almanac.h"
Glonass_Gnav_Almanac::Glonass_Gnav_Almanac()
{
i_satellite_freq_channel = 0;
i_satellite_PRN = 0U;
i_satellite_slot_number = 0U;
d_n_A = 0.0;
d_H_n_A = 0.0;
d_lambda_n_A = 0.0;
d_t_lambda_n_A = 0.0;
d_Delta_i_n_A = 0.0;
d_Delta_T_n_A = 0.0;
d_Delta_T_n_A_dot = 0.0;
d_epsilon_n_A = 0.0;
d_omega_n_A = 0.0;
d_M_n_A = 0.0;
d_KP = 0.0;
d_tau_n_A = 0.0;
d_C_n = false;
d_l_n = false;
}

View File

@ -34,25 +34,30 @@
class Glonass_Gnav_Almanac class Glonass_Gnav_Almanac
{ {
public: public:
double d_n_A; //!< Conventional number of satellite within GLONASS space segment [dimensionless] /*!
double d_H_n_A; //!< Carrier frequency number of navigation RF signal transmitted by d_nA satellite as table 4.10 (0-31) [dimensionless] * Default constructor
double d_lambda_n_A; //!< Longitude of the first (within the d_NA day) ascending node of d_nA [radians] */
double d_t_lambda_n_A; //!< Time of first ascending node passage [s] Glonass_Gnav_Almanac() = default;
double d_Delta_i_n_A; //!< Correction of the mean value of inclination of d_n_A satellite at instant t_lambda_n_A [radians]
double d_Delta_T_n_A; //!< Correction to the mean value of Draconian period of d_n_A satellite at instant t_lambda_n_A [s / orbital period] double d_n_A{}; //!< Conventional number of satellite within GLONASS space segment [dimensionless]
double d_Delta_T_n_A_dot; //!< Rate of change of Draconian period of d_n_A satellite at instant t_lambda_n_A [s / orbital period^2] double d_H_n_A{}; //!< Carrier frequency number of navigation RF signal transmitted by d_nA satellite as table 4.10 (0-31) [dimensionless]
double d_epsilon_n_A; //!< Eccentricity of d_n_A satellite at instant t_lambda_n_A [dimensionless] double d_lambda_n_A{}; //!< Longitude of the first (within the d_NA day) ascending node of d_nA [radians]
double d_omega_n_A; //!< Argument of perigee of d_n_A satellite at instant t_lambdan_A [radians] double d_t_lambda_n_A{}; //!< Time of first ascending node passage [s]
double d_M_n_A; //!< Type of satellite n_A [dimensionless] double d_Delta_i_n_A{}; //!< Correction of the mean value of inclination of d_n_A satellite at instant t_lambda_n_A [radians]
double d_KP; //!< Notification on forthcoming leap second correction of UTC [dimensionless] double d_Delta_T_n_A{}; //!< Correction to the mean value of Draconian period of d_n_A satellite at instant t_lambda_n_A [s / orbital period]
double d_tau_n_A; //!< Coarse value of d_n_A satellite time correction to GLONASS time at instant t_lambdan_A[s] double d_Delta_T_n_A_dot{}; //!< Rate of change of Draconian period of d_n_A satellite at instant t_lambda_n_A [s / orbital period^2]
bool d_C_n; //!< Generalized “unhealthy flag” of n_A satellite at instant of almanac upload [dimensionless] double d_epsilon_n_A{}; //!< Eccentricity of d_n_A satellite at instant t_lambda_n_A [dimensionless]
bool d_l_n; //!< Health flag for nth satellite; ln = 0 indicates the n-th satellite is helthy, ln = 1 indicates malfunction of this nth satellite [dimensionless] double d_omega_n_A{}; //!< Argument of perigee of d_n_A satellite at instant t_lambdan_A [radians]
double d_M_n_A{}; //!< Type of satellite n_A [dimensionless]
double d_KP{}; //!< Notification on forthcoming leap second correction of UTC [dimensionless]
double d_tau_n_A{}; //!< Coarse value of d_n_A satellite time correction to GLONASS time at instant t_lambdan_A[s]
bool d_C_n{}; //!< Generalized “unhealthy flag” of n_A satellite at instant of almanac upload [dimensionless]
bool d_l_n{}; //!< Health flag for nth satellite; ln = 0 indicates the n-th satellite is helthy, ln = 1 indicates malfunction of this nth satellite [dimensionless]
// Satellite Identification Information // Satellite Identification Information
int32_t i_satellite_freq_channel; //!< SV Frequency Channel Number int32_t i_satellite_freq_channel{}; //!< SV Frequency Channel Number
uint32_t i_satellite_PRN; //!< SV PRN Number, equivalent to slot number for compatibility with GPS uint32_t i_satellite_PRN{}; //!< SV PRN Number, equivalent to slot number for compatibility with GPS
uint32_t i_satellite_slot_number; //!< SV Slot Number uint32_t i_satellite_slot_number{}; //!< SV Slot Number
template <class Archive> template <class Archive>
/*! /*!
@ -83,11 +88,6 @@ public:
archive& make_nvp("d_C_n", d_C_n); archive& make_nvp("d_C_n", d_C_n);
archive& make_nvp("d_l_n", d_l_n); archive& make_nvp("d_l_n", d_l_n);
} }
/*!
* Default constructor
*/
Glonass_Gnav_Almanac();
}; };
#endif #endif

View File

@ -27,52 +27,6 @@
#include <string> #include <string>
Glonass_Gnav_Ephemeris::Glonass_Gnav_Ephemeris()
{
d_m = 0.0; //!< String number within frame [dimensionless]
d_t_k = 0.0; //!< GLONASS Time (UTC(SU) + 3 h) referenced to the beginning of the frame within the current day [s]
d_t_b = 0.0; //!< Reference ephemeris relative time in GLONASS Time (UTC(SU) + 3 h). Index of a time interval within current day according to UTC(SU) + 03 hours 00 min. [s]
d_M = 0.0; //!< Type of satellite transmitting navigation signal [dimensionless]
d_gamma_n = 0.0; //!< Relative deviation of predicted carrier frequency value of n- satellite from nominal value at the instant tb [dimensionless]
d_tau_n = 0.0; //!< Correction to the nth satellite time (tn) relative to GLONASS time (te),
d_Xn = 0.0; //!< Earth-fixed coordinate x of the satellite in PZ-90.02 coordinate system [km].
d_Yn = 0.0; //!< Earth-fixed coordinate y of the satellite in PZ-90.02 coordinate system [km]
d_Zn = 0.0; //!< Earth-fixed coordinate z of the satellite in PZ-90.02 coordinate system [km]
d_VXn = 0.0; //!< Earth-fixed velocity coordinate x of the satellite in PZ-90.02 coordinate system [km/s]
d_VYn = 0.0; //!< Earth-fixed velocity coordinate y of the satellite in PZ-90.02 coordinate system [km/s]
d_VZn = 0.0; //!< Earth-fixed velocity coordinate z of the satellite in PZ-90.02 coordinate system [km/s]
d_AXn = 0.0; //!< Earth-fixed acceleration coordinate x of the satellite in PZ-90.02 coordinate system [km/s^2]
d_AYn = 0.0; //!< Earth-fixed acceleration coordinate y of the satellite in PZ-90.02 coordinate system [km/s^2]
d_AZn = 0.0; //!< Earth-fixed acceleration coordinate z of the satellite in PZ-90.02 coordinate system [km/s^2]
d_B_n = 0.0; //!< Health flag [dimensionless]
d_P = 0.0; //!< Technological parameter of control segment, indication the satellite operation mode in respect of time parameters [dimensionless]
d_N_T = 0.0; //!< Current date, calendar number of day within four-year interval starting from the 1-st of January in a leap year [days]
d_F_T = 0.0; //!< Parameter that provides the predicted satellite user range accuracy at time tb [dimensionless]
d_n = 0.0; //!< Index of the satellite transmitting given navigation signal. It corresponds to a slot number within GLONASS constellation
d_Delta_tau_n = 0.0; //!< Time difference between navigation RF signal transmitted in L2 sub- band and aviation RF signal transmitted in L1 sub-band by nth satellite. [dimensionless]
d_E_n = 0.0; //!< Characterises "age" of a current information [days]
d_P_1 = 0.0; //!< Flag of the immediate data updating [minutes]
d_P_2 = false; //!< Flag of oddness ("1") or evenness ("0") of the value of (tb) [dimensionless]
d_P_3 = false; //!< Flag indicating a number of satellites for which almanac is transmitted within given frame: "1" corresponds to 5 satellites and "0" corresponds to 4 satellites [dimensionless]
d_P_4 = false; //!< Flag to show that ephemeris parameters are present. "1" indicates that updated ephemeris or frequency/time parameters have been uploaded by the control segment [dimensionless]
d_l3rd_n = false; //!< Health flag for nth satellite; ln = 0 indicates the n-th satellite is helthy, ln = 1 indicates malfunction of this nth satellite [dimensionless]
d_l5th_n = false; //!< Health flag for nth satellite; ln = 0 indicates the n-th satellite is helthy, ln = 1 indicates malfunction of this nth satellite [dimensionless]
// Satellite Identification Information
i_satellite_freq_channel = 0; //!< SV Frequency Channel Number
i_satellite_PRN = 0U; //!< SV PRN Number, equivalent to slot number for compatibility with GPS
i_satellite_slot_number = 0U; //!< SV Slot Number
d_yr = 1972; //!< Current year, defaults to 1972 (UTC Epoch with leap seconds)
d_satClkDrift = 0.0; //!< GLONASS clock error
d_dtr = 0.0; //!< relativistic clock correction term
d_iode = 0.0; //!< Issue of data, ephemeris (Bit 0-6 of tb)
d_tau_c = 0.0;
d_TOW = 0.0; // tow of the start of frame
d_WN = 0.0; // week number of the start of frame
d_tod = 0.0;
}
boost::posix_time::ptime Glonass_Gnav_Ephemeris::compute_GLONASS_time(const double offset_time) const boost::posix_time::ptime Glonass_Gnav_Ephemeris::compute_GLONASS_time(const double offset_time) const
{ {
boost::posix_time::time_duration t(0, 0, offset_time + d_tau_c + d_tau_n); boost::posix_time::time_duration t(0, 0, offset_time + d_tau_c + d_tau_n);

View File

@ -39,50 +39,50 @@ public:
/*! /*!
* Default constructor * Default constructor
*/ */
Glonass_Gnav_Ephemeris(); Glonass_Gnav_Ephemeris() = default;
double d_m; //!< String number within frame [dimensionless] double d_m{}; //!< String number within frame [dimensionless]
double d_t_k; //!< GLONASS Time (UTC(SU) + 3 h) referenced to the beginning of the frame within the current day [s] double d_t_k{}; //!< GLONASS Time (UTC(SU) + 3 h) referenced to the beginning of the frame within the current day [s]
double d_t_b; //!< Reference ephemeris relative time in GLONASS Time (UTC(SU) + 3 h). Index of a time interval within current day according to UTC(SU) + 03 hours 00 min. [s] double d_t_b{}; //!< Reference ephemeris relative time in GLONASS Time (UTC(SU) + 3 h). Index of a time interval within current day according to UTC(SU) + 03 hours 00 min. [s]
double d_M; //!< Type of satellite transmitting navigation signal [dimensionless] double d_M{}; //!< Type of satellite transmitting navigation signal [dimensionless]
double d_gamma_n; //!< Relative deviation of predicted carrier frequency value of n- satellite from nominal value at the instant tb [dimensionless] double d_gamma_n{}; //!< Relative deviation of predicted carrier frequency value of n- satellite from nominal value at the instant tb [dimensionless]
double d_tau_n; //!< Correction to the nth satellite time (tn) relative to GLONASS time (te), double d_tau_n{}; //!< Correction to the nth satellite time (tn) relative to GLONASS time (te),
double d_Xn; //!< Earth-fixed coordinate x of the satellite in PZ-90.02 coordinate system [km]. double d_Xn{}; //!< Earth-fixed coordinate x of the satellite in PZ-90.02 coordinate system [km].
double d_Yn; //!< Earth-fixed coordinate y of the satellite in PZ-90.02 coordinate system [km] double d_Yn{}; //!< Earth-fixed coordinate y of the satellite in PZ-90.02 coordinate system [km]
double d_Zn; //!< Earth-fixed coordinate z of the satellite in PZ-90.02 coordinate system [km] double d_Zn{}; //!< Earth-fixed coordinate z of the satellite in PZ-90.02 coordinate system [km]
double d_VXn; //!< Earth-fixed velocity coordinate x of the satellite in PZ-90.02 coordinate system [km/s] double d_VXn{}; //!< Earth-fixed velocity coordinate x of the satellite in PZ-90.02 coordinate system [km/s]
double d_VYn; //!< Earth-fixed velocity coordinate y of the satellite in PZ-90.02 coordinate system [km/s] double d_VYn{}; //!< Earth-fixed velocity coordinate y of the satellite in PZ-90.02 coordinate system [km/s]
double d_VZn; //!< Earth-fixed velocity coordinate z of the satellite in PZ-90.02 coordinate system [km/s] double d_VZn{}; //!< Earth-fixed velocity coordinate z of the satellite in PZ-90.02 coordinate system [km/s]
double d_AXn; //!< Earth-fixed acceleration coordinate x of the satellite in PZ-90.02 coordinate system [km/s^2] double d_AXn{}; //!< Earth-fixed acceleration coordinate x of the satellite in PZ-90.02 coordinate system [km/s^2]
double d_AYn; //!< Earth-fixed acceleration coordinate y of the satellite in PZ-90.02 coordinate system [km/s^2] double d_AYn{}; //!< Earth-fixed acceleration coordinate y of the satellite in PZ-90.02 coordinate system [km/s^2]
double d_AZn; //!< Earth-fixed acceleration coordinate z of the satellite in PZ-90.02 coordinate system [km/s^2] double d_AZn{}; //!< Earth-fixed acceleration coordinate z of the satellite in PZ-90.02 coordinate system [km/s^2]
double d_B_n; //!< Health flag [dimensionless] double d_B_n{}; //!< Health flag [dimensionless]
double d_P; //!< Technological parameter of control segment, indication the satellite operation mode in respect of time parameters [dimensionless] double d_P{}; //!< Technological parameter of control segment, indication the satellite operation mode in respect of time parameters [dimensionless]
double d_N_T; //!< Current date, calendar number of day within four-year interval starting from the 1-st of January in a leap year [days] double d_N_T{}; //!< Current date, calendar number of day within four-year interval starting from the 1-st of January in a leap year [days]
double d_F_T; //!< Parameter that provides the predicted satellite user range accuracy at time tb [dimensionless] double d_F_T{}; //!< Parameter that provides the predicted satellite user range accuracy at time tb [dimensionless]
double d_n; //!< Index of the satellite transmitting given navigation signal. It corresponds to a slot number within GLONASS constellation double d_n{}; //!< Index of the satellite transmitting given navigation signal. It corresponds to a slot number within GLONASS constellation
double d_Delta_tau_n; //!< Time difference between navigation RF signal transmitted in L2 sub- band and aviation RF signal transmitted in L1 sub-band by nth satellite. [dimensionless] double d_Delta_tau_n{}; //!< Time difference between navigation RF signal transmitted in L2 sub- band and aviation RF signal transmitted in L1 sub-band by nth satellite. [dimensionless]
double d_E_n; //!< Characterises "age" of a current information [days] double d_E_n{}; //!< Characterises "age" of a current information [days]
double d_P_1; //!< Flag of the immediate data updating [minutes] double d_P_1{}; //!< Flag of the immediate data updating [minutes]
bool d_P_2; //!< Flag of oddness ("1") or evenness ("0") of the value of (tb) [dimensionless] bool d_P_2{}; //!< Flag of oddness ("1") or evenness ("0") of the value of (tb) [dimensionless]
bool d_P_3; //!< Flag indicating a number of satellites for which almanac is transmitted within given frame: "1" corresponds to 5 satellites and "0" corresponds to 4 satellites [dimensionless] bool d_P_3{}; //!< Flag indicating a number of satellites for which almanac is transmitted within given frame: "1" corresponds to 5 satellites and "0" corresponds to 4 satellites [dimensionless]
bool d_P_4; //!< Flag to show that ephemeris parameters are present. "1" indicates that updated ephemeris or frequency/time parameters have been uploaded by the control segment [dimensionless] bool d_P_4{}; //!< Flag to show that ephemeris parameters are present. "1" indicates that updated ephemeris or frequency/time parameters have been uploaded by the control segment [dimensionless]
bool d_l3rd_n; //!< Health flag for nth satellite; ln = 0 indicates the n-th satellite is healthy, ln = 1 indicates malfunction of this nth satellite [dimensionless] bool d_l3rd_n{}; //!< Health flag for nth satellite; ln = 0 indicates the n-th satellite is healthy, ln = 1 indicates malfunction of this nth satellite [dimensionless]
bool d_l5th_n; //!< Health flag for nth satellite; ln = 0 indicates the n-th satellite is healthy, ln = 1 indicates malfunction of this nth satellite [dimensionless] bool d_l5th_n{}; //!< Health flag for nth satellite; ln = 0 indicates the n-th satellite is healthy, ln = 1 indicates malfunction of this nth satellite [dimensionless]
// Immediate deliverables of ephemeris information // Immediate deliverables of ephemeris information
// Satellite Identification Information // Satellite Identification Information
int32_t i_satellite_freq_channel; //!< SV Frequency Channel Number int32_t i_satellite_freq_channel{}; //!< SV Frequency Channel Number
uint32_t i_satellite_PRN; //!< SV PRN Number, equivalent to slot number for compatibility with GPS uint32_t i_satellite_PRN{}; //!< SV PRN Number, equivalent to slot number for compatibility with GPS
uint32_t i_satellite_slot_number; //!< SV Slot Number uint32_t i_satellite_slot_number{}; //!< SV Slot Number
double d_yr; //!< Current year double d_yr = 1972.0; //!< Current year
double d_satClkDrift; //!< GLONASS clock error double d_satClkDrift{}; //!< GLONASS clock error
double d_dtr; //!< relativistic clock correction term double d_dtr{}; //!< relativistic clock correction term
double d_iode; //!< Issue of data, ephemeris (Bit 0-6 of tb) double d_iode{}; //!< Issue of data, ephemeris (Bit 0-6 of tb)
double d_tau_c; //!< GLONASST 2 UTC correction (todo) may be eliminated double d_tau_c{}; //!< GLONASST 2 UTC correction (todo) may be eliminated
double d_TOW; //!< GLONASST IN GPST seconds of week double d_TOW{}; //!< GLONASST IN GPST seconds of week
double d_WN; //!< GLONASST IN GPST week number of the start of frame double d_WN{}; //!< GLONASST IN GPST week number of the start of frame
double d_tod; //!< Time of Day since ephemeris where decoded double d_tod{}; //!< Time of Day since ephemeris where decoded
/*! /*!
* \brief Sets (\a d_satClkDrift)and returns the clock drift in seconds according to the User Algorithm for SV Clock Correction * \brief Sets (\a d_satClkDrift)and returns the clock drift in seconds according to the User Algorithm for SV Clock Correction

View File

@ -28,61 +28,8 @@
#include <ostream> // for operator<< #include <ostream> // for operator<<
void Glonass_Gnav_Navigation_Message::reset() Glonass_Gnav_Navigation_Message::Glonass_Gnav_Navigation_Message()
{ {
// Satellite Identification
i_satellite_PRN = 0U;
i_alm_satellite_slot_number = 0; // SV Orbit Slot Number
flag_update_slot_number = false;
// Ephmeris Flags
flag_all_ephemeris = false;
flag_ephemeris_str_1 = false;
flag_ephemeris_str_2 = false;
flag_ephemeris_str_3 = false;
flag_ephemeris_str_4 = false;
// Almanac Flags
flag_all_almanac = false;
flag_almanac_str_6 = false;
flag_almanac_str_7 = false;
flag_almanac_str_8 = false;
flag_almanac_str_9 = false;
flag_almanac_str_10 = false;
flag_almanac_str_11 = false;
flag_almanac_str_12 = false;
flag_almanac_str_13 = false;
flag_almanac_str_14 = false;
flag_almanac_str_15 = false;
// UTC and System Clocks Flags
flag_utc_model_valid = false; // If set, it indicates that the UTC model parameters are filled
flag_utc_model_str_5 = false; // Clock info send in string 5 of navigation data
flag_utc_model_str_15 = false; // Clock info send in string 15 of frame 5 of navigation data
// broadcast orbit 1
flag_TOW_set = false;
flag_TOW_new = false;
flag_CRC_test = false;
d_frame_ID = 0U;
d_string_ID = 0U;
i_channel_ID = 0;
// Clock terms
d_satClkCorr = 0.0;
d_dtr = 0.0;
d_satClkDrift = 0.0;
// Data update information
d_previous_tb = 0.0;
for (double& i : d_previous_Na)
{
i = 0.0;
}
std::map<int, std::string> satelliteBlock; // Map that stores to which block the PRN belongs
auto gnss_sat = Gnss_Satellite(); auto gnss_sat = Gnss_Satellite();
std::string _system("GLONASS"); std::string _system("GLONASS");
// TODO SHould number of channels be hardcoded? // TODO SHould number of channels be hardcoded?
@ -93,12 +40,6 @@ void Glonass_Gnav_Navigation_Message::reset()
} }
Glonass_Gnav_Navigation_Message::Glonass_Gnav_Navigation_Message()
{
reset();
}
bool Glonass_Gnav_Navigation_Message::CRC_test(std::bitset<GLONASS_GNAV_STRING_BITS> bits) bool Glonass_Gnav_Navigation_Message::CRC_test(std::bitset<GLONASS_GNAV_STRING_BITS> bits)
{ {
uint32_t sum_bits = 0; uint32_t sum_bits = 0;

View File

@ -48,53 +48,55 @@ public:
*/ */
Glonass_Gnav_Navigation_Message(); Glonass_Gnav_Navigation_Message();
bool flag_CRC_test; bool flag_CRC_test{};
uint32_t d_frame_ID; uint32_t d_frame_ID{};
uint32_t d_string_ID; uint32_t d_string_ID{};
bool flag_update_slot_number; bool flag_update_slot_number{};
int32_t i_channel_ID; int32_t i_channel_ID{};
uint32_t i_satellite_PRN; uint32_t i_satellite_PRN{};
Glonass_Gnav_Ephemeris gnav_ephemeris; //!< Ephemeris information decoded Glonass_Gnav_Ephemeris gnav_ephemeris{}; //!< Ephemeris information decoded
Glonass_Gnav_Utc_Model gnav_utc_model; //!< UTC model information Glonass_Gnav_Utc_Model gnav_utc_model{}; //!< UTC model information
Glonass_Gnav_Almanac gnav_almanac[GLONASS_CA_NBR_SATS]; //!< Almanac information for all 24 satellites Glonass_Gnav_Almanac gnav_almanac[GLONASS_CA_NBR_SATS]{}; //!< Almanac information for all 24 satellites
// Ephemeris Flags and control variables // Ephemeris Flags and control variables
bool flag_all_ephemeris; //!< Flag indicating that all strings containing ephemeris have been received bool flag_all_ephemeris{}; //!< Flag indicating that all strings containing ephemeris have been received
bool flag_ephemeris_str_1; //!< Flag indicating that ephemeris 1/4 (string 1) have been received bool flag_ephemeris_str_1{}; //!< Flag indicating that ephemeris 1/4 (string 1) have been received
bool flag_ephemeris_str_2; //!< Flag indicating that ephemeris 2/4 (string 2) have been received bool flag_ephemeris_str_2{}; //!< Flag indicating that ephemeris 2/4 (string 2) have been received
bool flag_ephemeris_str_3; //!< Flag indicating that ephemeris 3/4 (string 3) have been received bool flag_ephemeris_str_3{}; //!< Flag indicating that ephemeris 3/4 (string 3) have been received
bool flag_ephemeris_str_4; //!< Flag indicating that ephemeris 4/4 (string 4) have been received bool flag_ephemeris_str_4{}; //!< Flag indicating that ephemeris 4/4 (string 4) have been received
// Almanac Flags // Almanac Flags
bool flag_all_almanac; //!< Flag indicating that all almanac have been received bool flag_all_almanac{}; //!< Flag indicating that all almanac have been received
bool flag_almanac_str_6; //!< Flag indicating that almanac of string 6 have been received bool flag_almanac_str_6{}; //!< Flag indicating that almanac of string 6 have been received
bool flag_almanac_str_7; //!< Flag indicating that almanac of string 7 have been received bool flag_almanac_str_7{}; //!< Flag indicating that almanac of string 7 have been received
bool flag_almanac_str_8; //!< Flag indicating that almanac of string 8 have been received bool flag_almanac_str_8{}; //!< Flag indicating that almanac of string 8 have been received
bool flag_almanac_str_9; //!< Flag indicating that almanac of string 9 have been received bool flag_almanac_str_9{}; //!< Flag indicating that almanac of string 9 have been received
bool flag_almanac_str_10; //!< Flag indicating that almanac of string 10 have been received bool flag_almanac_str_10{}; //!< Flag indicating that almanac of string 10 have been received
bool flag_almanac_str_11; //!< Flag indicating that almanac of string 11 have been received bool flag_almanac_str_11{}; //!< Flag indicating that almanac of string 11 have been received
bool flag_almanac_str_12; //!< Flag indicating that almanac of string 12 have been received bool flag_almanac_str_12{}; //!< Flag indicating that almanac of string 12 have been received
bool flag_almanac_str_13; //!< Flag indicating that almanac of string 13 have been received bool flag_almanac_str_13{}; //!< Flag indicating that almanac of string 13 have been received
bool flag_almanac_str_14; //!< Flag indicating that almanac of string 14 have been received bool flag_almanac_str_14{}; //!< Flag indicating that almanac of string 14 have been received
bool flag_almanac_str_15; //!< Flag indicating that almanac of string 15 have been received bool flag_almanac_str_15{}; //!< Flag indicating that almanac of string 15 have been received
uint32_t i_alm_satellite_slot_number; //!< SV Orbit Slot Number uint32_t i_alm_satellite_slot_number{}; //!< SV Orbit Slot Number
// UTC and System Clocks Flags // UTC and System Clocks Flags
bool flag_utc_model_valid; //!< If set, it indicates that the UTC model parameters are filled bool flag_utc_model_valid{}; //!< If set, it indicates that the UTC model parameters are filled
bool flag_utc_model_str_5; //!< Clock info send in string 5 of navigation data bool flag_utc_model_str_5{}; //!< Clock info send in string 5 of navigation data
bool flag_utc_model_str_15; //!< Clock info send in string 15 of frame 5 of navigation data bool flag_utc_model_str_15{}; //!< Clock info send in string 15 of frame 5 of navigation data
bool flag_TOW_set; //!< Flag indicating when the TOW has been set bool flag_TOW_set{}; //!< Flag indicating when the TOW has been set
bool flag_TOW_new; //!< Flag indicating when a new TOW has been computed bool flag_TOW_new{}; //!< Flag indicating when a new TOW has been computed
double d_satClkCorr; //!< Satellite clock error double d_satClkCorr{}; //!< Satellite clock error
double d_dtr; //!< Relativistic clock correction term double d_dtr{}; //!< Relativistic clock correction term
double d_satClkDrift; //!< Satellite clock drift double d_satClkDrift{}; //!< Satellite clock drift
double d_previous_tb; //!< Previous iode for the Glonass_Gnav_Ephemeris object. Used to determine when new data arrives double d_previous_tb{}; //!< Previous iode for the Glonass_Gnav_Ephemeris object. Used to determine when new data arrives
double d_previous_Na[GLONASS_CA_NBR_SATS]; //!< Previous time for almanac of the Glonass_Gnav_Almanac object double d_previous_Na[GLONASS_CA_NBR_SATS]{}; //!< Previous time for almanac of the Glonass_Gnav_Almanac object
std::map<int, std::string> satelliteBlock; // Map that stores to which block the PRN belongs
/*! /*!
* \brief Compute CRC for GLONASS GNAV strings * \brief Compute CRC for GLONASS GNAV strings
@ -109,11 +111,6 @@ public:
*/ */
uint32_t get_frame_number(uint32_t satellite_slot_number); uint32_t get_frame_number(uint32_t satellite_slot_number);
/*!
* \brief Reset GLONASS GNAV Navigation Information
*/
void reset();
/*! /*!
* \brief Obtain a GLONASS GNAV SV Ephemeris class filled with current SV data * \brief Obtain a GLONASS GNAV SV Ephemeris class filled with current SV data
*/ */

View File

@ -21,18 +21,6 @@
#include "glonass_gnav_utc_model.h" #include "glonass_gnav_utc_model.h"
Glonass_Gnav_Utc_Model::Glonass_Gnav_Utc_Model()
{
valid = false;
d_tau_c = 0.0;
d_tau_gps = 0.0;
d_N_4 = 0.0;
d_N_A = 0.0;
d_B1 = 0.0;
d_B2 = 0.0;
}
double Glonass_Gnav_Utc_Model::utc_time(double glonass_time_corrected) double Glonass_Gnav_Utc_Model::utc_time(double glonass_time_corrected)
{ {
double t_utc; double t_utc;

View File

@ -37,16 +37,16 @@ public:
/*! /*!
* Default constructor * Default constructor
*/ */
Glonass_Gnav_Utc_Model(); Glonass_Gnav_Utc_Model() = default;
bool valid; bool valid{};
// Clock Parameters // Clock Parameters
double d_tau_c; //!< GLONASS time scale correction to UTC(SU) time. [s] double d_tau_c{}; //!< GLONASS time scale correction to UTC(SU) time. [s]
double d_tau_gps; //!< Correction to GPS time to GLONASS time [day] double d_tau_gps{}; //!< Correction to GPS time to GLONASS time [day]
double d_N_4; //!< Four year interval number starting from 1996 [4 year interval] double d_N_4{}; //!< Four year interval number starting from 1996 [4 year interval]
double d_N_A; //!< Calendar day number within the four-year period beginning since the leap year for Almanac data [days] double d_N_A{}; //!< Calendar day number within the four-year period beginning since the leap year for Almanac data [days]
double d_B1; //!< Coefficient to determine DeltaUT1 [s] double d_B1{}; //!< Coefficient to determine DeltaUT1 [s]
double d_B2; //!< Coefficient to determine DeltaUT1 [s/msd] double d_B2{}; //!< Coefficient to determine DeltaUT1 [s/msd]
/*! /*!
* \brief Computes the Coordinated Universal Time (UTC) and * \brief Computes the Coordinated Universal Time (UTC) and

View File

@ -22,12 +22,6 @@
#include <utility> #include <utility>
Gnss_Satellite::Gnss_Satellite()
{
Gnss_Satellite::reset();
}
Gnss_Satellite::Gnss_Satellite(const std::string& system_, uint32_t PRN_) Gnss_Satellite::Gnss_Satellite(const std::string& system_, uint32_t PRN_)
{ {
Gnss_Satellite::reset(); Gnss_Satellite::reset();

View File

@ -37,7 +37,7 @@
class Gnss_Satellite class Gnss_Satellite
{ {
public: public:
Gnss_Satellite(); //!< Default Constructor. Gnss_Satellite() = default; //!< Default Constructor.
Gnss_Satellite(const std::string& system_, uint32_t PRN_); //!< Concrete GNSS satellite Constructor. Gnss_Satellite(const std::string& system_, uint32_t PRN_); //!< Concrete GNSS satellite Constructor.
~Gnss_Satellite() = default; //!< Default Destructor. ~Gnss_Satellite() = default; //!< Default Destructor.
void update_PRN(uint32_t PRN); //!< Updates the PRN Number when information is decoded, only applies to GLONASS GNAV messages void update_PRN(uint32_t PRN); //!< Updates the PRN Number when information is decoded, only applies to GLONASS GNAV messages

View File

@ -20,11 +20,6 @@
#include "gnss_signal.h" #include "gnss_signal.h"
Gnss_Signal::Gnss_Signal()
{
this->signal = "";
}
Gnss_Signal::Gnss_Signal(const std::string& signal_) Gnss_Signal::Gnss_Signal(const std::string& signal_)
{ {

View File

@ -33,7 +33,7 @@
class Gnss_Signal class Gnss_Signal
{ {
public: public:
Gnss_Signal(); Gnss_Signal() = default;
explicit Gnss_Signal(const std::string& signal_); explicit Gnss_Signal(const std::string& signal_);
Gnss_Signal(const Gnss_Satellite& satellite_, const std::string& signal_); Gnss_Signal(const Gnss_Satellite& satellite_, const std::string& signal_);
~Gnss_Signal() = default; ~Gnss_Signal() = default;

View File

@ -1,37 +0,0 @@
/*!
* \file gps_acq_assist.cc
* \brief Interface of a GPS RRLL ACQUISITION ASSISTACE storage
*
* See https://www.gps.gov/technical/icwg/IS-GPS-200K.pdf Appendix II
* \author Javier Arribas, 2013. jarribas(at)cttc.es
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* -------------------------------------------------------------------------
*/
#include "gps_acq_assist.h"
Gps_Acq_Assist::Gps_Acq_Assist()
{
i_satellite_PRN = 0U;
d_TOW = 0.0;
d_Doppler0 = 0.0;
d_Doppler1 = 0.0;
dopplerUncertainty = 0.0;
Code_Phase = 0.0;
Code_Phase_int = 0.0;
GPS_Bit_Number = 0.0;
Code_Phase_window = 0.0;
Azimuth = 0.0;
Elevation = 0.0;
}

View File

@ -34,22 +34,22 @@
class Gps_Acq_Assist class Gps_Acq_Assist
{ {
public: public:
uint32_t i_satellite_PRN; //!< SV PRN NUMBER
double d_TOW; //!< Time Of Week assigned to the acquisition data
double d_Doppler0; //!< Doppler (0 order term) [Hz]
double d_Doppler1; //!< Doppler (1 order term) [Hz]
double dopplerUncertainty; //!< Doppler Uncertainty [Hz]
double Code_Phase; //!< Code phase [chips]
double Code_Phase_int; //!< Integer Code Phase [1 C/A code period]
double GPS_Bit_Number; //!< GPS Bit Number
double Code_Phase_window; //!< Code Phase search window [chips]
double Azimuth; //!< Satellite Azimuth [deg]
double Elevation; //!< Satellite Elevation [deg]
/*! /*!
* Default constructor * Default constructor
*/ */
Gps_Acq_Assist(); Gps_Acq_Assist() = default;
uint32_t i_satellite_PRN{}; //!< SV PRN NUMBER
double d_TOW{}; //!< Time Of Week assigned to the acquisition data
double d_Doppler0{}; //!< Doppler (0 order term) [Hz]
double d_Doppler1{}; //!< Doppler (1 order term) [Hz]
double dopplerUncertainty{}; //!< Doppler Uncertainty [Hz]
double Code_Phase{}; //!< Code phase [chips]
double Code_Phase_int{}; //!< Integer Code Phase [1 C/A code period]
double GPS_Bit_Number{}; //!< GPS Bit Number
double Code_Phase_window{}; //!< Code Phase search window [chips]
double Azimuth{}; //!< Satellite Azimuth [deg]
double Elevation{}; //!< Satellite Elevation [deg]
}; };
#endif #endif

View File

@ -1,40 +0,0 @@
/*!
* \file gps_almanac.cc
* \brief Interface of a GPS ALMANAC storage
*
* See https://www.gps.gov/technical/icwg/IS-GPS-200K.pdf Appendix II
* \author Javier Arribas, 2013. jarribas(at)cttc.es
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* -------------------------------------------------------------------------
*/
#include "gps_almanac.h"
Gps_Almanac::Gps_Almanac()
{
i_satellite_PRN = 0U;
d_Delta_i = 0.0;
i_Toa = 0;
i_WNa = 0;
d_M_0 = 0.0;
d_e_eccentricity = 0.0;
d_sqrt_A = 0.0;
d_OMEGA0 = 0.0;
d_OMEGA = 0.0;
d_OMEGA_DOT = 0.0;
i_SV_health = 0;
i_AS_status = 0;
d_A_f0 = 0.0;
d_A_f1 = 0.0;
}

View File

@ -32,25 +32,25 @@
class Gps_Almanac class Gps_Almanac
{ {
public: public:
uint32_t i_satellite_PRN; //!< SV PRN NUMBER
double d_Delta_i; //!< Inclination Angle at Reference Time (relative to i_0 = 0.30 semi-circles)
int32_t i_Toa; //!< Almanac data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200K) [s]
int32_t i_WNa; //!< Almanac week number
double d_M_0; //!< Mean Anomaly at Reference Time [semi-circles]
double d_e_eccentricity; //!< Eccentricity [dimensionless]
double d_sqrt_A; //!< Square Root of the Semi-Major Axis [sqrt(m)]
double d_OMEGA0; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles]
double d_OMEGA; //!< Argument of Perigee [semi-cicles]
double d_OMEGA_DOT; //!< Rate of Right Ascension [semi-circles/s]
int32_t i_SV_health; //!< SV Health
int32_t i_AS_status; //!< Anti-Spoofing Flags and SV Configuration
double d_A_f0; //!< Coefficient 0 of code phase offset model [s]
double d_A_f1; //!< Coefficient 1 of code phase offset model [s/s]
/*! /*!
* Default constructor * Default constructor
*/ */
Gps_Almanac(); Gps_Almanac() = default;
uint32_t i_satellite_PRN{}; //!< SV PRN NUMBER
double d_Delta_i{}; //!< Inclination Angle at Reference Time (relative to i_0 = 0.30 semi-circles)
int32_t i_Toa{}; //!< Almanac data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200K) [s]
int32_t i_WNa{}; //!< Almanac week number
double d_M_0{}; //!< Mean Anomaly at Reference Time [semi-circles]
double d_e_eccentricity{}; //!< Eccentricity [dimensionless]
double d_sqrt_A{}; //!< Square Root of the Semi-Major Axis [sqrt(m)]
double d_OMEGA0{}; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles]
double d_OMEGA{}; //!< Argument of Perigee [semi-cicles]
double d_OMEGA_DOT{}; //!< Rate of Right Ascension [semi-circles/s]
int32_t i_SV_health{}; //!< SV Health
int32_t i_AS_status{}; //!< Anti-Spoofing Flags and SV Configuration
double d_A_f0{}; //!< Coefficient 0 of code phase offset model [s]
double d_A_f1{}; //!< Coefficient 1 of code phase offset model [s/s]
template <class Archive> template <class Archive>

View File

@ -24,69 +24,6 @@
#include <cmath> #include <cmath>
Gps_CNAV_Ephemeris::Gps_CNAV_Ephemeris()
{
i_satellite_PRN = 0U;
d_Toe1 = -1;
d_Toe2 = -1;
d_TOW = 0;
d_Crs = 0.0;
d_M_0 = 0.0;
d_Cuc = 0.0;
d_e_eccentricity = 0.0;
d_Cus = 0.0;
d_Toc = 0;
d_Cic = 0.0;
d_OMEGA0 = 0.0;
d_Cis = 0.0;
d_i_0 = 0.0;
d_Crc = 0.0;
d_OMEGA = 0.0;
d_IDOT = 0.0;
i_GPS_week = 0;
d_TGD = 0.0; // Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s]
d_A_f0 = 0.0; // Coefficient 0 of code phase offset model [s]
d_A_f1 = 0.0; // Coefficient 1 of code phase offset model [s/s]
d_A_f2 = 0.0; // Coefficient 2 of code phase offset model [s/s^2]
b_integrity_status_flag = false;
b_alert_flag = false; // If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk.
b_antispoofing_flag = false; // If true, the AntiSpoofing mode is ON in that SV
d_satClkDrift = 0.0;
d_dtr = 0.0;
d_satpos_X = 0.0;
d_satpos_Y = 0.0;
d_satpos_Z = 0.0;
d_satvel_X = 0.0;
d_satvel_Y = 0.0;
d_satvel_Z = 0.0;
i_URA = 0;
i_signal_health = 0;
d_Top = 0;
d_DELTA_A = 0.0;
d_A_DOT = 0.0;
d_Delta_n = 0.0;
d_DELTA_DOT_N = 0.0;
d_DELTA_OMEGA_DOT = 0.0;
d_URA0 = 0.0;
d_URA1 = 0.0;
d_URA2 = 0.0;
d_ISCL1 = 0.0;
d_ISCL2 = 0.0;
d_ISCL5I = 0.0;
d_ISCL5Q = 0.0;
b_l2c_phasing_flag = false;
}
double Gps_CNAV_Ephemeris::check_t(double time) double Gps_CNAV_Ephemeris::check_t(double time)
{ {
double corrTime; double corrTime;

View File

@ -36,53 +36,53 @@ public:
/*! /*!
* Default constructor * Default constructor
*/ */
Gps_CNAV_Ephemeris(); Gps_CNAV_Ephemeris() = default;
uint32_t i_satellite_PRN; // SV PRN NUMBER uint32_t i_satellite_PRN{}; // SV PRN NUMBER
// Message Types 10 and 11 Parameters (1 of 2) // Message Types 10 and 11 Parameters (1 of 2)
int32_t i_GPS_week; //!< GPS week number, aka WN [week] int32_t i_GPS_week{}; //!< GPS week number, aka WN [week]
int32_t i_URA; //!< ED Accuracy Index int32_t i_URA{}; //!< ED Accuracy Index
int32_t i_signal_health; //!< Signal health (L1/L2/L5) int32_t i_signal_health{}; //!< Signal health (L1/L2/L5)
int32_t d_Top; //!< Data predict time of week int32_t d_Top{}; //!< Data predict time of week
double d_DELTA_A; //!< Semi-major axis difference at reference time double d_DELTA_A{}; //!< Semi-major axis difference at reference time
double d_A_DOT; //!< Change rate in semi-major axis double d_A_DOT{}; //!< Change rate in semi-major axis
double d_Delta_n; //!< Mean Motion Difference From Computed Value [semi-circles/s] double d_Delta_n{}; //!< Mean Motion Difference From Computed Value [semi-circles/s]
double d_DELTA_DOT_N; //!< Rate of mean motion difference from computed value double d_DELTA_DOT_N{}; //!< Rate of mean motion difference from computed value
double d_M_0; //!< Mean Anomaly at Reference Time [semi-circles] double d_M_0{}; //!< Mean Anomaly at Reference Time [semi-circles]
double d_e_eccentricity; //!< Eccentricity double d_e_eccentricity{}; //!< Eccentricity
double d_OMEGA; //!< Argument of Perigee [semi-cicles] double d_OMEGA{}; //!< Argument of Perigee [semi-cicles]
double d_OMEGA0; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-cicles] double d_OMEGA0{}; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-cicles]
int32_t d_Toe1; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200K) [s] int32_t d_Toe1{}; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200K) [s]
int32_t d_Toe2; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200K) [s] int32_t d_Toe2{}; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200K) [s]
double d_DELTA_OMEGA_DOT; //!< Rate of Right Ascension difference [semi-circles/s] double d_DELTA_OMEGA_DOT{}; //!< Rate of Right Ascension difference [semi-circles/s]
double d_i_0; //!< Inclination Angle at Reference Time [semi-circles] double d_i_0{}; //!< Inclination Angle at Reference Time [semi-circles]
double d_IDOT; //!< Rate of Inclination Angle [semi-circles/s] double d_IDOT{}; //!< Rate of Inclination Angle [semi-circles/s]
double d_Cis; //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad] double d_Cis{}; //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad]
double d_Cic; //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad] double d_Cic{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad]
double d_Crs; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m] double d_Crs{}; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m]
double d_Crc; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m] double d_Crc{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m]
double d_Cus; //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad] double d_Cus{}; //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad]
double d_Cuc; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] double d_Cuc{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad]
// Clock Correction and Accuracy Parameters // Clock Correction and Accuracy Parameters
int32_t d_Toc; //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200K) [s] int32_t d_Toc{}; //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200K) [s]
double d_A_f0; //!< Coefficient 0 of code phase offset model [s] double d_A_f0{}; //!< Coefficient 0 of code phase offset model [s]
double d_A_f1; //!< Coefficient 1 of code phase offset model [s/s] double d_A_f1{}; //!< Coefficient 1 of code phase offset model [s/s]
double d_A_f2; //!< Coefficient 2 of code phase offset model [s/s^2] double d_A_f2{}; //!< Coefficient 2 of code phase offset model [s/s^2]
double d_URA0; //!< NED Accuracy Index double d_URA0{}; //!< NED Accuracy Index
double d_URA1; //!< NED Accuracy Change Index double d_URA1{}; //!< NED Accuracy Change Index
double d_URA2; //!< NED Accuracy Change Rate Index double d_URA2{}; //!< NED Accuracy Change Rate Index
// Group Delay Differential Parameters // Group Delay Differential Parameters
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] 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]
double d_ISCL1; double d_ISCL1{};
double d_ISCL2; double d_ISCL2{};
double d_ISCL5I; double d_ISCL5I{};
double d_ISCL5Q; double d_ISCL5Q{};
int32_t d_TOW; //!< Time of GPS Week of the ephemeris set (taken from subframes TOW) [s] int32_t d_TOW{}; //!< Time of GPS Week of the ephemeris set (taken from subframes TOW) [s]
/*! \brief If true, enhanced level of integrity assurance. /*! \brief If true, enhanced level of integrity assurance.
* *
@ -94,24 +94,24 @@ public:
* times the upper bound value of the current broadcast URA index, for more than 5.2 seconds, without an * times the upper bound value of the current broadcast URA index, for more than 5.2 seconds, without an
* accompanying alert, is less than 1E-8 per hour. * accompanying alert, is less than 1E-8 per hour.
*/ */
bool b_integrity_status_flag; bool b_integrity_status_flag{};
bool b_l2c_phasing_flag; bool b_l2c_phasing_flag{};
bool b_alert_flag; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk. bool b_alert_flag{}; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk.
bool b_antispoofing_flag; //!< If true, the AntiSpoofing mode is ON in that SV bool b_antispoofing_flag{}; //!< If true, the AntiSpoofing mode is ON in that SV
// clock terms derived from ephemeris data // clock terms derived from ephemeris data
double d_satClkDrift; //!< GPS clock error double d_satClkDrift{}; //!< GPS clock error
double d_dtr; //!< relativistic clock correction term double d_dtr{}; //!< relativistic clock correction term
// satellite positions // satellite positions
double d_satpos_X; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis. double d_satpos_X{}; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis.
double d_satpos_Y; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system. double d_satpos_Y{}; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system.
double d_satpos_Z; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP). double d_satpos_Z{}; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP).
// Satellite velocity // Satellite velocity
double d_satvel_X; //!< Earth-fixed velocity coordinate x of the satellite [m] double d_satvel_X{}; //!< Earth-fixed velocity coordinate x of the satellite [m]
double d_satvel_Y; //!< Earth-fixed velocity coordinate y of the satellite [m] double d_satvel_Y{}; //!< Earth-fixed velocity coordinate y of the satellite [m]
double d_satvel_Z; //!< Earth-fixed velocity coordinate z of the satellite [m] double d_satvel_Z{}; //!< Earth-fixed velocity coordinate z of the satellite [m]
/*! /*!
* \brief Compute the ECEF SV coordinates and ECEF velocity * \brief Compute the ECEF SV coordinates and ECEF velocity

View File

@ -1,35 +0,0 @@
/*!
* \file gps_cnav_iono.cc
* \brief Interface of a GPS CNAV IONOSPHERIC MODEL storage
*
* See https://www.gps.gov/technical/icwg/IS-GPS-200K.pdf Appendix III
* \author Javier Arribas, 2015. jarribas(at)cttc.es
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* -------------------------------------------------------------------------
*/
#include "gps_cnav_iono.h"
Gps_CNAV_Iono::Gps_CNAV_Iono()
{
valid = false;
d_alpha0 = 0.0;
d_alpha1 = 0.0;
d_alpha2 = 0.0;
d_alpha3 = 0.0;
d_beta0 = 0.0;
d_beta1 = 0.0;
d_beta2 = 0.0;
d_beta3 = 0.0;
}

View File

@ -33,18 +33,18 @@
class Gps_CNAV_Iono class Gps_CNAV_Iono
{ {
public: public:
bool valid; //!< Valid flag Gps_CNAV_Iono() = default; //!< Default constructor
// Ionospheric parameters
double d_alpha0; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s]
double d_alpha1; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle]
double d_alpha2; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2]
double d_alpha3; //!< Coefficient 3 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^3]
double d_beta0; //!< Coefficient 0 of a cubic equation representing the period of the model [s]
double d_beta1; //!< Coefficient 1 of a cubic equation representing the period of the model [s/semi-circle]
double d_beta2; //!< Coefficient 2 of a cubic equation representing the period of the model [s(semi-circle)^2]
double d_beta3; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3]
Gps_CNAV_Iono(); //!< Default constructor bool valid{}; //!< Valid flag
// Ionospheric parameters
double d_alpha0{}; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s]
double d_alpha1{}; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle]
double d_alpha2{}; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2]
double d_alpha3{}; //!< Coefficient 3 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^3]
double d_beta0{}; //!< Coefficient 0 of a cubic equation representing the period of the model [s]
double d_beta1{}; //!< Coefficient 1 of a cubic equation representing the period of the model [s/semi-circle]
double d_beta2{}; //!< Coefficient 2 of a cubic equation representing the period of the model [s(semi-circle)^2]
double d_beta3{}; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3]
template <class Archive> template <class Archive>

View File

@ -24,34 +24,8 @@
#include <limits> // for std::numeric_limits #include <limits> // for std::numeric_limits
void Gps_CNAV_Navigation_Message::reset()
{
b_flag_ephemeris_1 = false;
b_flag_ephemeris_2 = false;
b_flag_iono_valid = false;
b_flag_utc_valid = false;
// satellite positions
d_satpos_X = 0.0;
d_satpos_Y = 0.0;
d_satpos_Z = 0.0;
// info
i_channel_ID = 0;
i_satellite_PRN = 0U;
// Satellite velocity
d_satvel_X = 0.0;
d_satvel_Y = 0.0;
d_satvel_Z = 0.0;
d_TOW = 0;
}
Gps_CNAV_Navigation_Message::Gps_CNAV_Navigation_Message() Gps_CNAV_Navigation_Message::Gps_CNAV_Navigation_Message()
{ {
reset();
Gnss_Satellite gnss_satellite_ = Gnss_Satellite(); Gnss_Satellite gnss_satellite_ = Gnss_Satellite();
for (uint32_t prn_ = 1; prn_ < 33; prn_++) for (uint32_t prn_ = 1; prn_ < 33; prn_++)
{ {

View File

@ -47,30 +47,29 @@ public:
*/ */
Gps_CNAV_Navigation_Message(); Gps_CNAV_Navigation_Message();
int32_t d_TOW; int32_t d_TOW{};
bool b_flag_ephemeris_1; bool b_flag_ephemeris_1{};
bool b_flag_ephemeris_2; bool b_flag_ephemeris_2{};
bool b_flag_iono_valid; //!< If set, it indicates that the ionospheric parameters are filled and are not yet read by the get_iono bool b_flag_iono_valid{}; //!< If set, it indicates that the ionospheric parameters are filled and are not yet read by the get_iono
bool b_flag_utc_valid; //!< If set, it indicates that the utc parameters are filled and are not yet read by the get_utc_model bool b_flag_utc_valid{}; //!< If set, it indicates that the utc parameters are filled and are not yet read by the get_utc_model
std::map<int32_t, std::string> satelliteBlock; //!< Map that stores to which block the PRN belongs https://www.navcen.uscg.gov/?Do=constellationStatus std::map<int32_t, std::string> satelliteBlock; //!< Map that stores to which block the PRN belongs https://www.navcen.uscg.gov/?Do=constellationStatus
// satellite positions // satellite positions
double d_satpos_X; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis. double d_satpos_X{}; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis.
double d_satpos_Y; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system. double d_satpos_Y{}; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system.
double d_satpos_Z; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP). double d_satpos_Z{}; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP).
// satellite identification info // satellite identification info
int32_t i_channel_ID; int32_t i_channel_ID{};
uint32_t i_satellite_PRN; uint32_t i_satellite_PRN{};
// Satellite velocity // Satellite velocity
double d_satvel_X; //!< Earth-fixed velocity coordinate x of the satellite [m] double d_satvel_X{}; //!< Earth-fixed velocity coordinate x of the satellite [m]
double d_satvel_Y; //!< Earth-fixed velocity coordinate y of the satellite [m] double d_satvel_Y{}; //!< Earth-fixed velocity coordinate y of the satellite [m]
double d_satvel_Z; //!< Earth-fixed velocity coordinate z of the satellite [m] double d_satvel_Z{}; //!< Earth-fixed velocity coordinate z of the satellite [m]
// public functions // public functions
void reset();
void decode_page(std::bitset<GPS_CNAV_DATA_PAGE_BITS> data_bits); void decode_page(std::bitset<GPS_CNAV_DATA_PAGE_BITS> data_bits);
@ -109,9 +108,9 @@ private:
int64_t read_navigation_signed(std::bitset<GPS_CNAV_DATA_PAGE_BITS> bits, const std::vector<std::pair<int32_t, int32_t>>& parameter); int64_t read_navigation_signed(std::bitset<GPS_CNAV_DATA_PAGE_BITS> bits, const std::vector<std::pair<int32_t, int32_t>>& parameter);
bool read_navigation_bool(std::bitset<GPS_CNAV_DATA_PAGE_BITS> bits, const std::vector<std::pair<int32_t, int32_t>>& parameter); bool read_navigation_bool(std::bitset<GPS_CNAV_DATA_PAGE_BITS> bits, const std::vector<std::pair<int32_t, int32_t>>& parameter);
Gps_CNAV_Ephemeris ephemeris_record; Gps_CNAV_Ephemeris ephemeris_record{};
Gps_CNAV_Iono iono_record; Gps_CNAV_Iono iono_record{};
Gps_CNAV_Utc_Model utc_model_record; Gps_CNAV_Utc_Model utc_model_record{};
}; };
#endif #endif

View File

@ -20,20 +20,6 @@
#include "gps_cnav_utc_model.h" #include "gps_cnav_utc_model.h"
#include <cmath> #include <cmath>
Gps_CNAV_Utc_Model::Gps_CNAV_Utc_Model()
{
valid = false;
d_A2 = 0.0;
d_A1 = 0.0;
d_A0 = 0.0;
d_t_OT = 0;
i_WN_T = 0;
d_DeltaT_LS = 0;
i_WN_LSF = 0;
i_DN = 0;
d_DeltaT_LSF = 0;
}
double Gps_CNAV_Utc_Model::utc_time(double gpstime_corrected, int32_t i_GPS_week) double Gps_CNAV_Utc_Model::utc_time(double gpstime_corrected, int32_t i_GPS_week)
{ {

View File

@ -32,22 +32,22 @@
class Gps_CNAV_Utc_Model class Gps_CNAV_Utc_Model
{ {
public: public:
bool valid;
// UTC parameters
double d_A2; //!< 2nd order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200K) [s/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-200K) [s/s]
double d_A0; //!< Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200K) [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-200K) [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]
int32_t i_DN; //!< Day number (DN) at the end of which the leap second becomes effective [days]
int32_t d_DeltaT_LSF; //!< Scheduled future or recent past (relative to NAV message upload) value of the delta time due to leap seconds [s]
/*! /*!
* Default constructor * Default constructor
*/ */
Gps_CNAV_Utc_Model(); Gps_CNAV_Utc_Model() = default;
bool valid{};
// UTC parameters
double d_A2{}; //!< 2nd order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200K) [s/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-200K) [s/s]
double d_A0{}; //!< Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200K) [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-200K) [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]
int32_t i_DN{}; //!< Day number (DN) at the end of which the leap second becomes effective [days]
int32_t d_DeltaT_LSF{}; //!< Scheduled future or recent past (relative to NAV message upload) value of the delta time due to leap seconds [s]
/*! /*!
* \brief Computes the Coordinated Universal Time (UTC) and * \brief Computes the Coordinated Universal Time (UTC) and

View File

@ -24,65 +24,15 @@
#include "gnss_satellite.h" #include "gnss_satellite.h"
#include <cmath> #include <cmath>
Gps_Ephemeris::Gps_Ephemeris() Gps_Ephemeris::Gps_Ephemeris()
{ {
i_satellite_PRN = 0U;
d_TOW = 0;
d_Crs = 0.0;
d_Delta_n = 0.0;
d_M_0 = 0.0;
d_Cuc = 0.0;
d_e_eccentricity = 0.0;
d_Cus = 0.0;
d_sqrt_A = 0.0;
d_Toe = 0;
d_Toc = 0;
d_Cic = 0.0;
d_OMEGA0 = 0.0;
d_Cis = 0.0;
d_i_0 = 0.0;
d_Crc = 0.0;
d_OMEGA = 0.0;
d_OMEGA_DOT = 0.0;
d_IDOT = 0.0;
i_code_on_L2 = 0;
i_GPS_week = 0;
b_L2_P_data_flag = false;
i_SV_accuracy = 0;
i_SV_health = 0;
d_IODE_SF2 = 0;
d_IODE_SF3 = 0;
d_TGD = 0.0; // Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s]
d_IODC = 0; // Issue of Data, Clock
i_AODO = 0; // Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s]
b_fit_interval_flag = false; // indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours.
d_spare1 = 0.0;
d_spare2 = 0.0;
d_A_f0 = 0.0; // Coefficient 0 of code phase offset model [s]
d_A_f1 = 0.0; // Coefficient 1 of code phase offset model [s/s]
d_A_f2 = 0.0; // Coefficient 2 of code phase offset model [s/s^2]
b_integrity_status_flag = false;
b_alert_flag = false; // If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk.
b_antispoofing_flag = false; // If true, the AntiSpoofing mode is ON in that SV
auto gnss_sat = Gnss_Satellite(); auto gnss_sat = Gnss_Satellite();
std::string _system("GPS"); std::string _system("GPS");
for (uint32_t i = 1; i < 33; i++) for (uint32_t i = 1; i < 33; i++)
{ {
satelliteBlock[i] = gnss_sat.what_block(_system, i); satelliteBlock[i] = gnss_sat.what_block(_system, i);
} }
d_satClkDrift = 0.0;
d_dtr = 0.0;
d_satpos_X = 0.0;
d_satpos_Y = 0.0;
d_satpos_Z = 0.0;
d_satvel_X = 0.0;
d_satvel_Y = 0.0;
d_satvel_Z = 0.0;
} }
@ -115,7 +65,6 @@ double Gps_Ephemeris::sv_clock_drift(double transmitTime)
// } // }
// d_satClkDrift = d_A_f0 + d_A_f1 * dt + d_A_f2 * (dt * dt); // d_satClkDrift = d_A_f0 + d_A_f1 * dt + d_A_f2 * (dt * dt);
double dt; double dt;
dt = check_t(transmitTime - d_Toc); dt = check_t(transmitTime - d_Toc);
d_satClkDrift = d_A_f0 + d_A_f1 * dt + d_A_f2 * (dt * dt) + sv_clock_relativistic_term(transmitTime); d_satClkDrift = d_A_f0 + d_A_f1 * dt + d_A_f2 * (dt * dt) + sv_clock_relativistic_term(transmitTime);

View File

@ -41,43 +41,43 @@ public:
*/ */
Gps_Ephemeris(); Gps_Ephemeris();
uint32_t i_satellite_PRN; // SV PRN NUMBER uint32_t i_satellite_PRN{}; // SV PRN NUMBER
int32_t d_TOW; //!< Time of GPS Week of the ephemeris set (taken from subframes TOW) [s] int32_t d_TOW{}; //!< Time of GPS Week of the ephemeris set (taken from subframes TOW) [s]
double d_Crs; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m] double d_Crs{}; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m]
double d_Delta_n; //!< Mean Motion Difference From Computed Value [semi-circles/s] double d_Delta_n{}; //!< Mean Motion Difference From Computed Value [semi-circles/s]
double d_M_0; //!< Mean Anomaly at Reference Time [semi-circles] double d_M_0{}; //!< Mean Anomaly at Reference Time [semi-circles]
double d_Cuc; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] double d_Cuc{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad]
double d_e_eccentricity; //!< Eccentricity [dimensionless] double d_e_eccentricity{}; //!< Eccentricity [dimensionless]
double d_Cus; //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad] 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)] double d_sqrt_A{}; //!< Square Root of the Semi-Major Axis [sqrt(m)]
int32_t d_Toe; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200K) [s] int32_t d_Toe{}; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200K) [s]
int32_t d_Toc; //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200K) [s] int32_t d_Toc{}; //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200K) [s]
double d_Cic; //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad] 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_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] double d_Cis{}; //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad]
double d_i_0; //!< Inclination Angle at Reference Time [semi-circles] double d_i_0{}; //!< Inclination Angle at Reference Time [semi-circles]
double d_Crc; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m] double d_Crc{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m]
double d_OMEGA; //!< Argument of Perigee [semi-cicles] double d_OMEGA{}; //!< Argument of Perigee [semi-cicles]
double d_OMEGA_DOT; //!< Rate of Right Ascension [semi-circles/s] double d_OMEGA_DOT{}; //!< Rate of Right Ascension [semi-circles/s]
double d_IDOT; //!< Rate of Inclination Angle [semi-circles/s] double d_IDOT{}; //!< Rate of Inclination Angle [semi-circles/s]
int32_t i_code_on_L2; //!< If 1, P code ON in L2; if 2, C/A code ON in L2; int32_t i_code_on_L2{}; //!< If 1, P code ON in L2; if 2, C/A code ON in L2;
int32_t i_GPS_week; //!< GPS week number, aka WN [week] 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 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
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-200K) 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-200K)
int32_t i_SV_health; 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] 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 int32_t d_IODC{}; //!< Issue of Data, Clock
int32_t d_IODE_SF2; //!< Issue of Data, Ephemeris (IODE), subframe 2 int32_t d_IODE_SF2{}; //!< Issue of Data, Ephemeris (IODE), subframe 2
int32_t d_IODE_SF3; //!< Issue of Data, Ephemeris(IODE), subframe 3 int32_t d_IODE_SF3{}; //!< Issue of Data, Ephemeris(IODE), subframe 3
int32_t i_AODO; //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s] int32_t i_AODO{}; //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s]
bool b_fit_interval_flag; //!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours. bool b_fit_interval_flag{}; //!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours.
double d_spare1; double d_spare1{};
double d_spare2; double d_spare2{};
double d_A_f0; //!< Coefficient 0 of code phase offset model [s] double d_A_f0{}; //!< Coefficient 0 of code phase offset model [s]
double d_A_f1; //!< Coefficient 1 of code phase offset model [s/s] double d_A_f1{}; //!< Coefficient 1 of code phase offset model [s/s]
double d_A_f2; //!< Coefficient 2 of code phase offset model [s/s^2] double d_A_f2{}; //!< Coefficient 2 of code phase offset model [s/s^2]
// Flags // Flags
@ -91,23 +91,23 @@ public:
* times the upper bound value of the current broadcast URA index, for more than 5.2 seconds, without an * times the upper bound value of the current broadcast URA index, for more than 5.2 seconds, without an
* accompanying alert, is less than 1E-8 per hour. * accompanying alert, is less than 1E-8 per hour.
*/ */
bool b_integrity_status_flag; bool b_integrity_status_flag{};
bool b_alert_flag; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk. bool b_alert_flag{}; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk.
bool b_antispoofing_flag; //!< If true, the AntiSpoofing mode is ON in that SV bool b_antispoofing_flag{}; //!< If true, the AntiSpoofing mode is ON in that SV
// clock terms derived from ephemeris data // clock terms derived from ephemeris data
double d_satClkDrift; //!< GPS clock error double d_satClkDrift{}; //!< GPS clock error
double d_dtr; //!< relativistic clock correction term double d_dtr{}; //!< relativistic clock correction term
// satellite positions // satellite positions
double d_satpos_X; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis. double d_satpos_X{}; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis.
double d_satpos_Y; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system. double d_satpos_Y{}; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system.
double d_satpos_Z; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP). double d_satpos_Z{}; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP).
// Satellite velocity // Satellite velocity
double d_satvel_X; //!< Earth-fixed velocity coordinate x of the satellite [m] double d_satvel_X{}; //!< Earth-fixed velocity coordinate x of the satellite [m]
double d_satvel_Y; //!< Earth-fixed velocity coordinate y of the satellite [m] double d_satvel_Y{}; //!< Earth-fixed velocity coordinate y of the satellite [m]
double d_satvel_Z; //!< Earth-fixed velocity coordinate z of the satellite [m] double d_satvel_Z{}; //!< Earth-fixed velocity coordinate z of the satellite [m]
std::map<int, std::string> satelliteBlock; //!< Map that stores to which block the PRN belongs https://www.navcen.uscg.gov/?Do=constellationStatus std::map<int, std::string> satelliteBlock; //!< Map that stores to which block the PRN belongs https://www.navcen.uscg.gov/?Do=constellationStatus

View File

@ -1,35 +0,0 @@
/*!
* \file gps_iono.cc
* \brief Interface of a GPS IONOSPHERIC MODEL storage
*
* See https://www.gps.gov/technical/icwg/IS-GPS-200K.pdf Appendix II
* \author Javier Arribas, 2013. jarribas(at)cttc.es
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2019 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* -------------------------------------------------------------------------
*/
#include "gps_iono.h"
Gps_Iono::Gps_Iono()
{
valid = false;
d_alpha0 = 0.0;
d_alpha1 = 0.0;
d_alpha2 = 0.0;
d_alpha3 = 0.0;
d_beta0 = 0.0;
d_beta1 = 0.0;
d_beta2 = 0.0;
d_beta3 = 0.0;
}

View File

@ -33,18 +33,18 @@
class Gps_Iono class Gps_Iono
{ {
public: public:
bool valid; //!< Valid flag bool valid{}; //!< Valid flag
// Ionospheric parameters // Ionospheric parameters
double d_alpha0; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s] double d_alpha0{}; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s]
double d_alpha1; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle] double d_alpha1{}; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle]
double d_alpha2; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2] double d_alpha2{}; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2]
double d_alpha3; //!< Coefficient 3 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^3] double d_alpha3{}; //!< Coefficient 3 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^3]
double d_beta0; //!< Coefficient 0 of a cubic equation representing the period of the model [s] double d_beta0{}; //!< Coefficient 0 of a cubic equation representing the period of the model [s]
double d_beta1; //!< Coefficient 1 of a cubic equation representing the period of the model [s/semi-circle] double d_beta1{}; //!< Coefficient 1 of a cubic equation representing the period of the model [s/semi-circle]
double d_beta2; //!< Coefficient 2 of a cubic equation representing the period of the model [s(semi-circle)^2] double d_beta2{}; //!< Coefficient 2 of a cubic equation representing the period of the model [s(semi-circle)^2]
double d_beta3; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3] double d_beta3{}; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3]
Gps_Iono(); //!< Default constructor Gps_Iono() = default; //!< Default constructor
template <class Archive> template <class Archive>

View File

@ -27,120 +27,18 @@ m * \file gps_navigation_message.cc
#include <limits> // for std::numeric_limits #include <limits> // for std::numeric_limits
void Gps_Navigation_Message::reset() Gps_Navigation_Message::Gps_Navigation_Message()
{ {
b_valid_ephemeris_set_flag = false;
d_TOW = 0;
d_TOW_SF1 = 0;
d_TOW_SF2 = 0;
d_TOW_SF3 = 0;
d_TOW_SF4 = 0;
d_TOW_SF5 = 0;
d_IODE_SF2 = 0;
d_IODE_SF3 = 0;
d_Crs = 0.0;
d_Delta_n = 0.0;
d_M_0 = 0.0;
d_Cuc = 0.0;
d_e_eccentricity = 0.0;
d_Cus = 0.0;
d_sqrt_A = 0.0;
d_Toe = 0;
d_Toc = 0;
d_Cic = 0.0;
d_OMEGA0 = 0.0;
d_Cis = 0.0;
d_i_0 = 0.0;
d_Crc = 0.0;
d_OMEGA = 0.0;
d_OMEGA_DOT = 0.0;
d_IDOT = 0.0;
i_code_on_L2 = 0;
i_GPS_week = 0;
b_L2_P_data_flag = false;
i_SV_accuracy = 0;
i_SV_health = 0;
d_TGD = 0.0;
d_IODC = -1;
i_AODO = 0;
b_fit_interval_flag = false;
d_spare1 = 0.0;
d_spare2 = 0.0;
d_A_f0 = 0.0;
d_A_f1 = 0.0;
d_A_f2 = 0.0;
// clock terms
// d_master_clock=0;
d_dtr = 0.0;
d_satClkCorr = 0.0;
d_satClkDrift = 0.0;
// satellite positions
d_satpos_X = 0.0;
d_satpos_Y = 0.0;
d_satpos_Z = 0.0;
// info
i_channel_ID = 0;
i_satellite_PRN = 0U;
// time synchro
d_subframe_timestamp_ms = 0.0;
// flags
b_alert_flag = false;
b_integrity_status_flag = false;
b_antispoofing_flag = false;
// Ionosphere and UTC
flag_iono_valid = false;
flag_utc_model_valid = false;
d_alpha0 = 0.0;
d_alpha1 = 0.0;
d_alpha2 = 0.0;
d_alpha3 = 0.0;
d_beta0 = 0.0;
d_beta1 = 0.0;
d_beta2 = 0.0;
d_beta3 = 0.0;
d_A2 = 0.0;
d_A1 = 0.0;
d_A0 = 0.0;
d_t_OT = 0;
i_WN_T = 0;
d_DeltaT_LS = 0;
i_WN_LSF = 0;
i_DN = 0;
d_DeltaT_LSF = 0;
// Almanac
i_Toa = 0;
i_WN_A = 0;
for (int32_t i = 1; i < 32; i++)
{
almanacHealth[i] = 0;
}
// Satellite velocity
d_satvel_X = 0.0;
d_satvel_Y = 0.0;
d_satvel_Z = 0.0;
auto gnss_sat = Gnss_Satellite(); auto gnss_sat = Gnss_Satellite();
std::string _system("GPS"); std::string _system("GPS");
for (uint32_t i = 1; i < 33; i++) for (uint32_t i = 1; i < 33; i++)
{ {
satelliteBlock[i] = gnss_sat.what_block(_system, i); satelliteBlock[i] = gnss_sat.what_block(_system, i);
} }
} for (int32_t i = 1; i < 33; i++)
{
almanacHealth[i] = 0;
Gps_Navigation_Message::Gps_Navigation_Message() }
{
reset();
} }

View File

@ -47,57 +47,57 @@ public:
*/ */
Gps_Navigation_Message(); Gps_Navigation_Message();
bool b_valid_ephemeris_set_flag; // flag indicating that this ephemeris set have passed the validation check bool b_valid_ephemeris_set_flag{}; // flag indicating that this ephemeris set have passed the validation check
// broadcast orbit 1 // broadcast orbit 1
int32_t d_TOW; //!< Time of GPS Week of the ephemeris set (taken from subframes TOW) [s] int32_t d_TOW{}; //!< Time of GPS Week of the ephemeris set (taken from subframes TOW) [s]
int32_t d_TOW_SF1; //!< Time of GPS Week from HOW word of Subframe 1 [s] int32_t d_TOW_SF1{}; //!< Time of GPS Week from HOW word of Subframe 1 [s]
int32_t d_TOW_SF2; //!< Time of GPS Week from HOW word of Subframe 2 [s] int32_t d_TOW_SF2{}; //!< Time of GPS Week from HOW word of Subframe 2 [s]
int32_t d_TOW_SF3; //!< Time of GPS Week from HOW word of Subframe 3 [s] int32_t d_TOW_SF3{}; //!< Time of GPS Week from HOW word of Subframe 3 [s]
int32_t d_TOW_SF4; //!< Time of GPS Week from HOW word of Subframe 4 [s] int32_t d_TOW_SF4{}; //!< Time of GPS Week from HOW word of Subframe 4 [s]
int32_t d_TOW_SF5; //!< Time of GPS Week from HOW word of Subframe 5 [s] int32_t d_TOW_SF5{}; //!< Time of GPS Week from HOW word of Subframe 5 [s]
int32_t d_IODE_SF2; int32_t d_IODE_SF2{};
int32_t d_IODE_SF3; int32_t d_IODE_SF3{};
double d_Crs; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m] double d_Crs{}; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m]
double d_Delta_n; //!< Mean Motion Difference From Computed Value [semi-circles/s] double d_Delta_n{}; //!< Mean Motion Difference From Computed Value [semi-circles/s]
double d_M_0; //!< Mean Anomaly at Reference Time [semi-circles] double d_M_0{}; //!< Mean Anomaly at Reference Time [semi-circles]
// broadcast orbit 2 // broadcast orbit 2
double d_Cuc; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] double d_Cuc{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad]
double d_e_eccentricity; //!< Eccentricity [dimensionless] double d_e_eccentricity{}; //!< Eccentricity [dimensionless]
double d_Cus; //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad] 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)] double d_sqrt_A{}; //!< Square Root of the Semi-Major Axis [sqrt(m)]
// broadcast orbit 3 // broadcast orbit 3
int32_t d_Toe; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200K) [s] int32_t d_Toe{}; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200K) [s]
int32_t d_Toc; //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200K) [s] int32_t d_Toc{}; //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200K) [s]
double d_Cic; //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad] 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_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] double d_Cis{}; //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad]
// broadcast orbit 4 // broadcast orbit 4
double d_i_0; //!< Inclination Angle at Reference Time [semi-circles] double d_i_0{}; //!< Inclination Angle at Reference Time [semi-circles]
double d_Crc; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m] double d_Crc{}; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m]
double d_OMEGA; //!< Argument of Perigee [semi-cicles] double d_OMEGA{}; //!< Argument of Perigee [semi-cicles]
double d_OMEGA_DOT; //!< Rate of Right Ascension [semi-circles/s] double d_OMEGA_DOT{}; //!< Rate of Right Ascension [semi-circles/s]
// broadcast orbit 5 // broadcast orbit 5
double d_IDOT; //!< Rate of Inclination Angle [semi-circles/s] double d_IDOT{}; //!< Rate of Inclination Angle [semi-circles/s]
int32_t i_code_on_L2; //!< If 1, P code ON in L2; if 2, C/A code ON in L2; int32_t i_code_on_L2{}; //!< If 1, P code ON in L2; if 2, C/A code ON in L2;
int32_t i_GPS_week; //!< GPS week number, aka WN [week] 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 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 // 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-200K) 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-200K)
int32_t i_SV_health; 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] 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 int32_t d_IODC{}; //!< Issue of Data, Clock
// broadcast orbit 7 // broadcast orbit 7
int32_t i_AODO; //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s] int32_t i_AODO{}; //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s]
bool b_fit_interval_flag; //!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours. bool b_fit_interval_flag{}; //!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours.
double d_spare1; double d_spare1{};
double d_spare2; double d_spare2{};
double d_A_f0; //!< Coefficient 0 of code phase offset model [s] double d_A_f0{}; //!< Coefficient 0 of code phase offset model [s]
double d_A_f1; //!< Coefficient 1 of code phase offset model [s/s] double d_A_f1{}; //!< Coefficient 1 of code phase offset model [s/s]
double d_A_f2; //!< Coefficient 2 of code phase offset model [s/s^2] double d_A_f2{}; //!< Coefficient 2 of code phase offset model [s/s^2]
// Almanac // Almanac
int32_t i_Toa; //!< Almanac reference time [s] int32_t i_Toa{}; //!< Almanac reference time [s]
int32_t i_WN_A; //!< Modulo 256 of the GPS week number to which the almanac reference time (i_Toa) is referenced int32_t i_WN_A{}; //!< Modulo 256 of the GPS week number to which the almanac reference time (i_Toa) is referenced
std::map<int32_t, int32_t> almanacHealth; //!< Map that stores the health information stored in the almanac std::map<int32_t, int32_t> almanacHealth; //!< Map that stores the health information stored in the almanac
std::map<int32_t, std::string> satelliteBlock; //!< Map that stores to which block the PRN belongs https://www.navcen.uscg.gov/?Do=constellationStatus std::map<int32_t, std::string> satelliteBlock; //!< Map that stores to which block the PRN belongs https://www.navcen.uscg.gov/?Do=constellationStatus
@ -114,58 +114,57 @@ public:
* times the upper bound value of the current broadcast URA index, for more than 5.2 seconds, without an * times the upper bound value of the current broadcast URA index, for more than 5.2 seconds, without an
* accompanying alert, is less than 1E-8 per hour. * accompanying alert, is less than 1E-8 per hour.
*/ */
bool b_integrity_status_flag; bool b_integrity_status_flag{};
bool b_alert_flag; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk. bool b_alert_flag{}; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk.
bool b_antispoofing_flag; //!< If true, the AntiSpoofing mode is ON in that SV bool b_antispoofing_flag{}; //!< If true, the AntiSpoofing mode is ON in that SV
// clock terms // clock terms
// double d_master_clock; // GPS transmission time // double d_master_clock{}; // GPS transmission time
double d_satClkCorr; // GPS clock error double d_satClkCorr{}; // GPS clock error
double d_dtr; // relativistic clock correction term double d_dtr{}; // relativistic clock correction term
double d_satClkDrift; double d_satClkDrift{};
// satellite positions // satellite positions
double d_satpos_X; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis. double d_satpos_X{}; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis.
double d_satpos_Y; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system. double d_satpos_Y{}; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system.
double d_satpos_Z; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP). double d_satpos_Z{}; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP).
// satellite identification info // satellite identification info
int32_t i_channel_ID; int32_t i_channel_ID{};
uint32_t i_satellite_PRN; uint32_t i_satellite_PRN{};
// time synchro // time synchro
double d_subframe_timestamp_ms; // [ms] double d_subframe_timestamp_ms{}; // [ms]
// Ionospheric parameters // Ionospheric parameters
bool flag_iono_valid; //!< If set, it indicates that the ionospheric parameters are filled (page 18 has arrived and decoded) bool flag_iono_valid{}; //!< If set, it indicates that the ionospheric parameters are filled (page 18 has arrived and decoded)
double d_alpha0; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s] double d_alpha0{}; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s]
double d_alpha1; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle] double d_alpha1{}; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle]
double d_alpha2; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2] double d_alpha2{}; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2]
double d_alpha3; //!< Coefficient 3 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^3] double d_alpha3{}; //!< Coefficient 3 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^3]
double d_beta0; //!< Coefficient 0 of a cubic equation representing the period of the model [s] double d_beta0{}; //!< Coefficient 0 of a cubic equation representing the period of the model [s]
double d_beta1; //!< Coefficient 1 of a cubic equation representing the period of the model [s/semi-circle] double d_beta1{}; //!< Coefficient 1 of a cubic equation representing the period of the model [s/semi-circle]
double d_beta2; //!< Coefficient 2 of a cubic equation representing the period of the model [s(semi-circle)^2] double d_beta2{}; //!< Coefficient 2 of a cubic equation representing the period of the model [s(semi-circle)^2]
double d_beta3; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3] double d_beta3{}; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3]
// UTC parameters // UTC parameters
bool flag_utc_model_valid; //!< If set, it indicates that the UTC model parameters are filled bool flag_utc_model_valid{}; //!< If set, it indicates that the UTC model parameters are filled
double d_A0; //!< Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200K) [s] double d_A0{}; //!< Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200K) [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-200K) [s/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-200K) [s/s]
double d_A2; //!< 2nd order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200K) [s/s] double d_A2{}; //!< 2nd order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200K) [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-200K) [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-200K) [s]
int32_t i_WN_T; //!< UTC reference week number [weeks] 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 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] int32_t i_WN_LSF{}; //!< Week number at the end of which the leap second becomes effective [weeks]
int32_t i_DN; //!< Day number (DN) at the end of which the leap second becomes effective [days] int32_t i_DN{}; //!< Day number (DN) at the end of which the leap second becomes effective [days]
int32_t d_DeltaT_LSF; //!< Scheduled future or recent past (relative to NAV message upload) value of the delta time due to leap seconds [s] int32_t d_DeltaT_LSF{}; //!< Scheduled future or recent past (relative to NAV message upload) value of the delta time due to leap seconds [s]
// Satellite velocity // Satellite velocity
double d_satvel_X; //!< Earth-fixed velocity coordinate x of the satellite [m] double d_satvel_X{}; //!< Earth-fixed velocity coordinate x of the satellite [m]
double d_satvel_Y; //!< Earth-fixed velocity coordinate y of the satellite [m] double d_satvel_Y{}; //!< Earth-fixed velocity coordinate y of the satellite [m]
double d_satvel_Z; //!< Earth-fixed velocity coordinate z of the satellite [m] double d_satvel_Z{}; //!< Earth-fixed velocity coordinate z of the satellite [m]
// public functions // public functions
void reset();
/*! /*!
* \brief Obtain a GPS SV Ephemeris class filled with current SV data * \brief Obtain a GPS SV Ephemeris class filled with current SV data

View File

@ -21,21 +21,6 @@
#include <cmath> #include <cmath>
Gps_Utc_Model::Gps_Utc_Model()
{
valid = false;
d_A0 = 0.0;
d_A1 = 0.0;
d_A2 = 0.0;
d_t_OT = 0;
i_WN_T = 0;
d_DeltaT_LS = 0;
i_WN_LSF = 0;
i_DN = 0;
d_DeltaT_LSF = 0;
}
double Gps_Utc_Model::utc_time(double gpstime_corrected, int32_t i_GPS_week) double Gps_Utc_Model::utc_time(double gpstime_corrected, int32_t i_GPS_week)
{ {
double t_utc; double t_utc;

View File

@ -32,22 +32,22 @@
class Gps_Utc_Model class Gps_Utc_Model
{ {
public: public:
bool valid;
// UTC parameters
double d_A0; //!< Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200K) [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-200K) [s/s]
double d_A2; //!< 2nd order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200K) [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-200K) [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]
int32_t i_DN; //!< Day number (DN) at the end of which the leap second becomes effective [days]
int32_t d_DeltaT_LSF; //!< Scheduled future or recent past (relative to NAV message upload) value of the delta time due to leap seconds [s]
/*! /*!
* Default constructor * Default constructor
*/ */
Gps_Utc_Model(); Gps_Utc_Model() = default;
bool valid{};
// UTC parameters
double d_A0{}; //!< Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200K) [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-200K) [s/s]
double d_A2{}; //!< 2nd order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200K) [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-200K) [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]
int32_t i_DN{}; //!< Day number (DN) at the end of which the leap second becomes effective [days]
int32_t d_DeltaT_LSF{}; //!< Scheduled future or recent past (relative to NAV message upload) value of the delta time due to leap seconds [s]
template <class Archive> template <class Archive>
/* /*

View File

@ -30,17 +30,20 @@
class Sbas_Ephemeris class Sbas_Ephemeris
{ {
public: public:
Sbas_Ephemeris() = default;
int i_prn{}; //!< PRN number
int i_t0{}; //!< Reference epoch time (GPST)
double d_tof{}; //!< Time of message frame (GPST)
int i_sv_ura{}; //!< SV accuracy (URA index), not standardized
bool b_sv_do_not_use{}; //!< Health status (false:do not use / true:usable)
double d_pos[3]{}; //!< Satellite position (m) (ECEF)
double d_vel[3]{}; //!< Satellite velocity (m/s) (ECEF)
double d_acc[3]{}; //!< Satellite acceleration (m/s^2) (ECEF)
double d_af0{}; //!< Satellite clock-offset (s)
double d_af1{}; //!< Satellite drift (s/s)
void print(std::ostream &out); void print(std::ostream &out);
int i_prn; //!< PRN number
int i_t0; //!< Reference epoch time (GPST)
double d_tof; //!< Time of message frame (GPST)
int i_sv_ura; //!< SV accuracy (URA index), not standardized
bool b_sv_do_not_use; //!< Health status (false:do not use / true:usable)
double d_pos[3]; //!< Satellite position (m) (ECEF)
double d_vel[3]; //!< Satellite velocity (m/s) (ECEF)
double d_acc[3]; //!< Satellite acceleration (m/s^2) (ECEF)
double d_af0; //!< Satellite clock-offset (s)
double d_af1; //!< Satellite drift (s/s)
}; };

View File

@ -33,8 +33,7 @@ TEST(GlonassGnavNavigationMessageTest, CRCTestSuccess)
// Variables declarations in code // Variables declarations in code
bool test_result; bool test_result;
std::bitset<GLONASS_GNAV_STRING_BITS> string_bits(std::string("0010100100001100000000000000000000000000110011110001100000000000000001100100011000000")); std::bitset<GLONASS_GNAV_STRING_BITS> string_bits(std::string("0010100100001100000000000000000000000000110011110001100000000000000001100100011000000"));
Glonass_Gnav_Navigation_Message gnav_nav_message; auto gnav_nav_message = Glonass_Gnav_Navigation_Message();
gnav_nav_message.reset();
// Call function to test // Call function to test
test_result = gnav_nav_message.CRC_test(string_bits); test_result = gnav_nav_message.CRC_test(string_bits);
@ -55,8 +54,7 @@ TEST(GlonassGnavNavigationMessageTest, CRCTestFailure)
bool test_result; bool test_result;
// Constructor of string to bitset will flip the order of the bits. Needed for CRC computation // Constructor of string to bitset will flip the order of the bits. Needed for CRC computation
std::bitset<GLONASS_GNAV_STRING_BITS> string_bits(std::string("0111100100001100000000000000000000000000110011110001100000000000000001100100011000000")); std::bitset<GLONASS_GNAV_STRING_BITS> string_bits(std::string("0111100100001100000000000000000000000000110011110001100000000000000001100100011000000"));
Glonass_Gnav_Navigation_Message gnav_nav_message; auto gnav_nav_message = Glonass_Gnav_Navigation_Message();
gnav_nav_message.reset();
// Call function to test // Call function to test
test_result = gnav_nav_message.CRC_test(string_bits); test_result = gnav_nav_message.CRC_test(string_bits);