2011-10-01 18:45:20 +00:00
/*!
* \ file GPS_L1_CA . h
2012-01-03 07:31:32 +00:00
* \ brief Defines system parameters for GPS L1 C / A signal and NAV data
2011-10-01 18:45:20 +00:00
* \ author Javier Arribas , 2011. jarribas ( at ) cttc . es
*
2020-07-28 14:57:15 +00:00
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2011-10-01 18:45:20 +00:00
*
2020-12-30 12:35:06 +00:00
* GNSS - SDR is a Global Navigation Satellite System software - defined receiver .
2011-10-01 18:45:20 +00:00
* This file is part of GNSS - SDR .
*
2020-12-30 12:35:06 +00:00
* Copyright ( C ) 2010 - 2020 ( see AUTHORS file for a list of contributors )
2020-02-08 00:20:02 +00:00
* SPDX - License - Identifier : GPL - 3.0 - or - later
2011-10-01 18:45:20 +00:00
*
2020-07-28 14:57:15 +00:00
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2011-10-01 18:45:20 +00:00
*/
2020-02-08 09:10:46 +00:00
# ifndef GNSS_SDR_GPS_L1_CA_H
# define GNSS_SDR_GPS_L1_CA_H
2011-10-01 18:45:20 +00:00
2018-02-26 02:15:53 +00:00
# include "MATH_CONSTANTS.h"
2018-12-09 21:00:09 +00:00
# include "gnss_frequencies.h"
2018-08-13 23:13:07 +00:00
# include <cstdint>
2018-03-03 01:03:39 +00:00
# include <utility> // std::pair
2018-12-09 21:00:09 +00:00
# include <vector>
2018-02-26 02:15:53 +00:00
2020-11-01 12:37:19 +00:00
/** \addtogroup Core
* \ { */
/** \addtogroup System_Parameters
* \ { */
2012-01-16 18:27:31 +00:00
2011-11-22 17:21:54 +00:00
// carrier and code frequencies
2020-07-01 17:39:25 +00:00
constexpr double GPS_L1_FREQ_HZ = FREQ1 ; //!< L1 [Hz]
constexpr double GPS_L1_CA_CODE_RATE_CPS = 1.023e6 ; //!< GPS L1 C/A code rate [chips/s]
constexpr double GPS_L1_CA_CODE_LENGTH_CHIPS = 1023.0 ; //!< GPS L1 C/A code length [chips]
constexpr double GPS_L1_CA_CODE_PERIOD_S = 0.001 ; //!< GPS L1 C/A code period [seconds]
2020-07-04 17:13:42 +00:00
constexpr double GPS_L1_CA_CHIP_PERIOD_S = 9.7752e-07 ; //!< GPS L1 C/A chip period [seconds]
2020-07-01 17:39:25 +00:00
constexpr uint32_t GPS_L1_CA_CODE_PERIOD_MS = 1U ; //!< GPS L1 C/A code period [ms]
constexpr uint32_t GPS_L1_CA_BIT_PERIOD_MS = 20U ; //!< GPS L1 C/A bit period [ms]
2018-12-03 16:58:18 +00:00
- Major changes:
- The executable file and the default configuration file is now changed from "./install/mercurio" and "./conf/mercurio.conf" to "./install/gnss-sdr" and "./conf/gnss-sdr.conf", respectively.
- Configuration file structure changed to define in a single entry the internal sampling frequency (after the signal conditioner). NOTICE that this change affects the all the adapters (acquisition, tracking, telemetry_decoder, observables, and PVT). All the adapters are now modified to work with this feature.
- Moved several in-line GPS L1 CA parameters (a.k.a magic numbers..) to ./src/core/system_parameters/GPS_L1_CA.h definition file.
- Tracking blocks now uses DOUBLE values in their outputs.
- Observables and PVT now are separated. PVT and their associated libraries are moved to ./src/algorithms/PVT
- Temporarily disabled the RINEX output (I am working on that!)
- GNSS-SDR screen output now gives extended debug information of the receiver status and events. In the future, this output will be redirected to a log file.
- Bug fixes:
- FILE_SIGNAL_SOURCE now works correctly when the user configures GNSS-SDR to process the entire file.
- GPS_L1_CA_DLL_PLL now computes correctly the PRN start values.
- GPS_L1_CA_DLL_FLL_PLL now computes correctly the PRN start values.
- Several modifications in GPS_L1_CA_Telemetry_Decoder, GPS_L1_CA_Observables, and GPS_L1_CA_PVT modules to fix the GPS position computation.
- New features
- Tracking blocks perform a signal integrity check against NaN outliers before the correlation process.
- Tracking and PVT binary dump options are now documented and we provide MATLAB libraries and sample files to read it. Available in ./utils/matlab" and "./utils/matlab/libs"
- Observables output rate can be configured. This option enables the GPS L1 CA PVT computation at a maximum rate of 1ms.
- GPS_L1_CA_PVT now can perform a moving average Latitude, Longitude, and Altitude output for each of the Observables output. It is configurable using the configuration file.
- Added Google Earth compatible Keyhole Markup Language (KML) output writer class (./src/algorithms/PVT/libs/kml_printer.h and ./src/algorithms/PVT/libs/kml_printer.cc ). You can see the receiver position directly using Google Earth.
- We provide a master configuration file which includes an in-line documentation with all the new (and old) options. It can be found in ./conf/master.conf
git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@84 64b25241-fba3-4117-9849-534c7e92360d
2011-12-07 17:59:34 +00:00
/*!
2012-01-03 05:38:45 +00:00
* \ brief Maximum Time - Of - Arrival ( TOA ) difference between satellites for a receiver operated on Earth surface is 20 ms
- Major changes:
- The executable file and the default configuration file is now changed from "./install/mercurio" and "./conf/mercurio.conf" to "./install/gnss-sdr" and "./conf/gnss-sdr.conf", respectively.
- Configuration file structure changed to define in a single entry the internal sampling frequency (after the signal conditioner). NOTICE that this change affects the all the adapters (acquisition, tracking, telemetry_decoder, observables, and PVT). All the adapters are now modified to work with this feature.
- Moved several in-line GPS L1 CA parameters (a.k.a magic numbers..) to ./src/core/system_parameters/GPS_L1_CA.h definition file.
- Tracking blocks now uses DOUBLE values in their outputs.
- Observables and PVT now are separated. PVT and their associated libraries are moved to ./src/algorithms/PVT
- Temporarily disabled the RINEX output (I am working on that!)
- GNSS-SDR screen output now gives extended debug information of the receiver status and events. In the future, this output will be redirected to a log file.
- Bug fixes:
- FILE_SIGNAL_SOURCE now works correctly when the user configures GNSS-SDR to process the entire file.
- GPS_L1_CA_DLL_PLL now computes correctly the PRN start values.
- GPS_L1_CA_DLL_FLL_PLL now computes correctly the PRN start values.
- Several modifications in GPS_L1_CA_Telemetry_Decoder, GPS_L1_CA_Observables, and GPS_L1_CA_PVT modules to fix the GPS position computation.
- New features
- Tracking blocks perform a signal integrity check against NaN outliers before the correlation process.
- Tracking and PVT binary dump options are now documented and we provide MATLAB libraries and sample files to read it. Available in ./utils/matlab" and "./utils/matlab/libs"
- Observables output rate can be configured. This option enables the GPS L1 CA PVT computation at a maximum rate of 1ms.
- GPS_L1_CA_PVT now can perform a moving average Latitude, Longitude, and Altitude output for each of the Observables output. It is configurable using the configuration file.
- Added Google Earth compatible Keyhole Markup Language (KML) output writer class (./src/algorithms/PVT/libs/kml_printer.h and ./src/algorithms/PVT/libs/kml_printer.cc ). You can see the receiver position directly using Google Earth.
- We provide a master configuration file which includes an in-line documentation with all the new (and old) options. It can be found in ./conf/master.conf
git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@84 64b25241-fba3-4117-9849-534c7e92360d
2011-12-07 17:59:34 +00:00
*
2012-01-03 05:38:45 +00:00
* According to the GPS orbit model described in [ 1 ] Pag . 32.
* It should be taken into account to set the buffer size for the PRN start timestamp in the pseudoranges block .
* [ 1 ] J . Bao - Yen Tsui , Fundamentals of Global Positioning System Receivers . A Software Approach , John Wiley & Sons ,
* Inc . , Hoboken , NJ , 2 nd edition , 2005.
- Major changes:
- The executable file and the default configuration file is now changed from "./install/mercurio" and "./conf/mercurio.conf" to "./install/gnss-sdr" and "./conf/gnss-sdr.conf", respectively.
- Configuration file structure changed to define in a single entry the internal sampling frequency (after the signal conditioner). NOTICE that this change affects the all the adapters (acquisition, tracking, telemetry_decoder, observables, and PVT). All the adapters are now modified to work with this feature.
- Moved several in-line GPS L1 CA parameters (a.k.a magic numbers..) to ./src/core/system_parameters/GPS_L1_CA.h definition file.
- Tracking blocks now uses DOUBLE values in their outputs.
- Observables and PVT now are separated. PVT and their associated libraries are moved to ./src/algorithms/PVT
- Temporarily disabled the RINEX output (I am working on that!)
- GNSS-SDR screen output now gives extended debug information of the receiver status and events. In the future, this output will be redirected to a log file.
- Bug fixes:
- FILE_SIGNAL_SOURCE now works correctly when the user configures GNSS-SDR to process the entire file.
- GPS_L1_CA_DLL_PLL now computes correctly the PRN start values.
- GPS_L1_CA_DLL_FLL_PLL now computes correctly the PRN start values.
- Several modifications in GPS_L1_CA_Telemetry_Decoder, GPS_L1_CA_Observables, and GPS_L1_CA_PVT modules to fix the GPS position computation.
- New features
- Tracking blocks perform a signal integrity check against NaN outliers before the correlation process.
- Tracking and PVT binary dump options are now documented and we provide MATLAB libraries and sample files to read it. Available in ./utils/matlab" and "./utils/matlab/libs"
- Observables output rate can be configured. This option enables the GPS L1 CA PVT computation at a maximum rate of 1ms.
- GPS_L1_CA_PVT now can perform a moving average Latitude, Longitude, and Altitude output for each of the Observables output. It is configurable using the configuration file.
- Added Google Earth compatible Keyhole Markup Language (KML) output writer class (./src/algorithms/PVT/libs/kml_printer.h and ./src/algorithms/PVT/libs/kml_printer.cc ). You can see the receiver position directly using Google Earth.
- We provide a master configuration file which includes an in-line documentation with all the new (and old) options. It can be found in ./conf/master.conf
git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@84 64b25241-fba3-4117-9849-534c7e92360d
2011-12-07 17:59:34 +00:00
*/
2020-07-04 17:13:42 +00:00
constexpr double MAX_TOA_DELAY_MS = 20.0 ;
2011-10-01 18:45:20 +00:00
2020-07-04 17:13:42 +00:00
// optimum parameters
constexpr uint32_t GPS_L1_CA_OPT_ACQ_FS_SPS = 2000000 ; //!< Sampling frequency that maximizes the acquisition SNR while using a non-multiple of chip rate
2015-11-23 22:05:52 +00:00
// OBSERVABLE HISTORY DEEP FOR INTERPOLATION
2020-07-01 17:39:25 +00:00
constexpr int32_t GPS_L1_CA_HISTORY_DEEP = 100 ;
2015-11-30 12:59:31 +00:00
2012-01-03 07:31:32 +00:00
// NAVIGATION MESSAGE DEMODULATION AND DECODING
2020-07-04 17:13:42 +00:00
constexpr double GPS_CA_PREAMBLE_DURATION_S = 0.160 ;
2020-07-01 17:39:25 +00:00
constexpr int32_t GPS_CA_PREAMBLE_LENGTH_BITS = 8 ;
constexpr int32_t GPS_CA_PREAMBLE_LENGTH_SYMBOLS = 160 ;
constexpr int32_t GPS_CA_PREAMBLE_DURATION_MS = 160 ;
constexpr int32_t GPS_CA_TELEMETRY_RATE_BITS_SECOND = 50 ; //!< NAV message bit rate [bits/s]
constexpr int32_t GPS_CA_TELEMETRY_SYMBOLS_PER_BIT = 20 ;
constexpr int32_t GPS_CA_TELEMETRY_RATE_SYMBOLS_SECOND = GPS_CA_TELEMETRY_RATE_BITS_SECOND * GPS_CA_TELEMETRY_SYMBOLS_PER_BIT ; //!< NAV message bit rate [symbols/s]
constexpr int32_t GPS_WORD_LENGTH = 4 ; //!< CRC + GPS WORD (-2 -1 0 ... 29) Bits = 4 bytes
constexpr int32_t GPS_SUBFRAME_LENGTH = 40 ; //!< GPS_WORD_LENGTH x 10 = 40 bytes
constexpr int32_t GPS_SUBFRAME_BITS = 300 ; //!< Number of bits per subframe in the NAV message [bits]
constexpr int32_t GPS_SUBFRAME_SECONDS = 6 ; //!< Subframe duration [seconds]
constexpr int32_t GPS_SUBFRAME_MS = 6000 ; //!< Subframe duration [seconds]
constexpr int32_t GPS_WORD_BITS = 30 ; //!< Number of bits per word in the NAV message [bits]
2020-07-04 17:13:42 +00:00
constexpr char GPS_CA_PREAMBLE [ 9 ] = " 10001011 " ;
constexpr char GPS_CA_PREAMBLE_SYMBOLS_STR [ 161 ] = " 1111111111111111111100000000000000000000000000000000000000000000000000000000000011111111111111111111000000000000000000001111111111111111111111111111111111111111 " ;
2011-10-01 18:45:20 +00:00
// GPS NAVIGATION MESSAGE STRUCTURE
2021-07-24 11:47:52 +00:00
// NAVIGATION MESSAGE FIELDS POSITIONS (from IS-GPS-200M Appendix II)
2011-10-01 18:45:20 +00:00
// SUBFRAME 1-5 (TLM and HOW)
2012-01-03 05:38:45 +00:00
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > TOW ( { { 31 , 17 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > INTEGRITY_STATUS_FLAG ( { { 23 , 1 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > ALERT_FLAG ( { { 48 , 1 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > ANTI_SPOOFING_FLAG ( { { 49 , 1 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > SUBFRAME_ID ( { { 50 , 3 } } ) ;
2012-01-03 05:38:45 +00:00
2011-10-01 18:45:20 +00:00
// SUBFRAME 1
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > GPS_WEEK ( { { 61 , 10 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > CA_OR_P_ON_L2 ( { { 71 , 2 } } ) ; //*
const std : : vector < std : : pair < int32_t , int32_t > > SV_ACCURACY ( { { 73 , 4 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > SV_HEALTH ( { { 77 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > L2_P_DATA_FLAG ( { { 91 , 1 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > T_GD ( { { 197 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double T_GD_LSB = TWO_N31 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > IODC ( { { 83 , 2 } , { 211 , 8 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > T_OC ( { { 219 , 16 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr int32_t T_OC_LSB = static_cast < int32_t > ( TWO_P4 ) ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > A_F2 ( { { 241 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double A_F2_LSB = TWO_N55 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > A_F1 ( { { 249 , 16 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double A_F1_LSB = TWO_N43 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > A_F0 ( { { 271 , 22 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double A_F0_LSB = TWO_N31 ;
2011-10-01 18:45:20 +00:00
// SUBFRAME 2
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > IODE_SF2 ( { { 61 , 8 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > C_RS ( { { 69 , 16 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double C_RS_LSB = TWO_N5 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > DELTA_N ( { { 91 , 16 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double DELTA_N_LSB = PI_TWO_N43 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > M_0 ( { { 107 , 8 } , { 121 , 24 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double M_0_LSB = PI_TWO_N31 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > C_UC ( { { 151 , 16 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double C_UC_LSB = TWO_N29 ;
2020-02-26 17:16:04 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > ECCENTRICITY ( { { 167 , 8 } , { 181 , 24 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double ECCENTRICITY_LSB = TWO_N33 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > C_US ( { { 211 , 16 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double C_US_LSB = TWO_N29 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > SQRT_A ( { { 227 , 8 } , { 241 , 24 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double SQRT_A_LSB = TWO_N19 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > T_OE ( { { 271 , 16 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr int32_t T_OE_LSB = static_cast < int32_t > ( TWO_P4 ) ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > FIT_INTERVAL_FLAG ( { { 271 , 1 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > AODO ( { { 272 , 5 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr int32_t AODO_LSB = 900 ;
2011-10-01 18:45:20 +00:00
// SUBFRAME 3
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > C_IC ( { { 61 , 16 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double C_IC_LSB = TWO_N29 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > OMEGA_0 ( { { 77 , 8 } , { 91 , 24 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double OMEGA_0_LSB = PI_TWO_N31 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > C_IS ( { { 121 , 16 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double C_IS_LSB = TWO_N29 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > I_0 ( { { 137 , 8 } , { 151 , 24 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double I_0_LSB = PI_TWO_N31 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > C_RC ( { { 181 , 16 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double C_RC_LSB = TWO_N5 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > OMEGA ( { { 197 , 8 } , { 211 , 24 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double OMEGA_LSB = PI_TWO_N31 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > OMEGA_DOT ( { { 241 , 24 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double OMEGA_DOT_LSB = PI_TWO_N43 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > IODE_SF3 ( { { 271 , 8 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > I_DOT ( { { 279 , 14 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double I_DOT_LSB = PI_TWO_N43 ;
2011-10-01 18:45:20 +00:00
// SUBFRAME 4-5
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > SV_DATA_ID ( { { 61 , 2 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > SV_PAGE ( { { 63 , 6 } } ) ;
2011-10-01 18:45:20 +00:00
// SUBFRAME 4
2012-01-03 05:38:45 +00:00
//! \todo read all pages of subframe 4
// Page 18 - Ionospheric and UTC data
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > ALPHA_0 ( { { 69 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double ALPHA_0_LSB = TWO_N30 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > ALPHA_1 ( { { 77 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double ALPHA_1_LSB = TWO_N27 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > ALPHA_2 ( { { 91 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double ALPHA_2_LSB = TWO_N24 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > ALPHA_3 ( { { 99 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double ALPHA_3_LSB = TWO_N24 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > BETA_0 ( { { 107 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double BETA_0_LSB = TWO_P11 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > BETA_1 ( { { 121 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double BETA_1_LSB = TWO_P14 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > BETA_2 ( { { 129 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double BETA_2_LSB = TWO_P16 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > BETA_3 ( { { 137 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double BETA_3_LSB = TWO_P16 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > A_1 ( { { 151 , 24 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double A_1_LSB = TWO_N50 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > A_0 ( { { 181 , 24 } , { 211 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double A_0_LSB = TWO_N30 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > T_OT ( { { 219 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double T_OT_LSB = TWO_P12 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > WN_T ( { { 227 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double WN_T_LSB = 1 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > DELTAT_LS ( { { 241 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double DELTAT_LS_LSB = 1 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > WN_LSF ( { { 249 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double WN_LSF_LSB = 1 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > DN ( { { 257 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double DN_LSB = 1 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > DELTAT_LSF ( { { 271 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr double DELTAT_LSF_LSB = 1 ;
2012-01-03 05:38:45 +00:00
2012-01-03 19:35:56 +00:00
// Page 25 - Antispoofing, SV config and SV health (PRN 25 -32)
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV25 ( { { 229 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV26 ( { { 241 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV27 ( { { 247 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV28 ( { { 253 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV29 ( { { 259 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV30 ( { { 271 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV31 ( { { 277 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV32 ( { { 283 , 6 } } ) ;
2012-01-03 19:35:56 +00:00
2012-01-03 05:38:45 +00:00
// SUBFRAME 5
//! \todo read all pages of subframe 5
2012-01-03 19:35:56 +00:00
// page 25 - Health (PRN 1 - 24)
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > T_OA ( { { 69 , 8 } } ) ;
2020-07-01 17:39:25 +00:00
constexpr int32_t T_OA_LSB = TWO_P12 ;
2018-08-13 23:13:07 +00:00
const std : : vector < std : : pair < int32_t , int32_t > > WN_A ( { { 77 , 8 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV1 ( { { 91 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV2 ( { { 97 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV3 ( { { 103 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV4 ( { { 109 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV5 ( { { 121 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV6 ( { { 127 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV7 ( { { 133 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV8 ( { { 139 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV9 ( { { 151 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV10 ( { { 157 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV11 ( { { 163 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV12 ( { { 169 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV13 ( { { 181 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV14 ( { { 187 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV15 ( { { 193 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV16 ( { { 199 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV17 ( { { 211 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV18 ( { { 217 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV19 ( { { 223 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV20 ( { { 229 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV21 ( { { 241 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV22 ( { { 247 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV23 ( { { 253 , 6 } } ) ;
const std : : vector < std : : pair < int32_t , int32_t > > HEALTH_SV24 ( { { 259 , 6 } } ) ;
2012-01-03 19:35:56 +00:00
2020-11-01 12:37:19 +00:00
/** \} */
/** \} */
2020-02-08 09:10:46 +00:00
# endif // GNSS_SDR_GPS_L1_CA_H