1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-06-14 09:16:51 +00:00

Sort constants, avoid duplication of Galileo physical constants

This commit is contained in:
Carles Fernandez 2020-07-04 19:13:42 +02:00
parent 8340eab627
commit 1e742afbc4
No known key found for this signature in database
GPG Key ID: 4C583C52B0C3877D
10 changed files with 109 additions and 96 deletions

View File

@ -21,7 +21,6 @@
#ifndef GNSS_SDR_BEIDOU_B1I_H
#define GNSS_SDR_BEIDOU_B1I_H
#include "MATH_CONSTANTS.h"
#include <cstdint>
// carrier and code frequencies
@ -29,21 +28,21 @@ constexpr double BEIDOU_B1I_FREQ_HZ = 1.561098e9; //!< B1I [Hz]
constexpr double BEIDOU_B1I_CODE_RATE_CPS = 2.046e6; //!< Beidou B1I code rate [chips/s]
constexpr double BEIDOU_B1I_CODE_LENGTH_CHIPS = 2046.0; //!< Beidou B1I code length [chips]
constexpr double BEIDOU_B1I_CODE_PERIOD_S = 0.001; //!< Beidou B1I code period [seconds]
constexpr uint32_t BEIDOU_B1I_CODE_PERIOD_MS = 1; //!< Beidou B1I code period [ms]
constexpr int32_t BEIDOU_B1I_SECONDARY_CODE_LENGTH = 20;
constexpr char BEIDOU_B1I_SECONDARY_CODE_STR[] = "00000100110101001110";
constexpr char BEIDOU_B1I_GEO_PREAMBLE_SYMBOLS_STR[] = "1111110000001100001100";
constexpr int32_t BEIDOU_B1I_GEO_PREAMBLE_LENGTH_SYMBOLS = 22;
constexpr char BEIDOU_B1I_D2_SECONDARY_CODE_STR[] = "00";
constexpr double BEIDOU_B1I_PREAMBLE_DURATION_S = 0.220;
constexpr uint32_t BEIDOU_B1I_CODE_PERIOD_MS = 1; //!< Beidou B1I code period [ms]
constexpr uint32_t BEIDOU_B1I_PREAMBLE_LENGTH_BITS = 11;
constexpr uint32_t BEIDOU_B1I_PREAMBLE_LENGTH_SYMBOLS = 220;
constexpr double BEIDOU_B1I_PREAMBLE_DURATION_S = 0.220;
constexpr int32_t BEIDOU_B1I_SECONDARY_CODE_LENGTH = 20;
constexpr int32_t BEIDOU_B1I_GEO_PREAMBLE_LENGTH_SYMBOLS = 22;
constexpr int32_t BEIDOU_B1I_PREAMBLE_DURATION_MS = 220;
constexpr int32_t BEIDOU_B1I_TELEMETRY_RATE_BITS_SECOND = 50;
constexpr int32_t BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT = 20;
constexpr int32_t BEIDOU_B1I_GEO_TELEMETRY_SYMBOLS_PER_BIT = 2;
constexpr int32_t BEIDOU_B1I_TELEMETRY_SYMBOL_PERIOD_MS = BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B1I_CODE_PERIOD_MS;
constexpr int32_t BEIDOU_B1I_TELEMETRY_SYMBOL_PERIOD_MS = static_cast<const int32_t>(static_cast<uint32_t>(BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT) * BEIDOU_B1I_CODE_PERIOD_MS);
constexpr int32_t BEIDOU_B1I_TELEMETRY_RATE_SYMBOLS_SECOND = BEIDOU_B1I_TELEMETRY_RATE_BITS_SECOND * BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT;
constexpr char BEIDOU_B1I_SECONDARY_CODE_STR[21] = "00000100110101001110";
constexpr char BEIDOU_B1I_GEO_PREAMBLE_SYMBOLS_STR[23] = "1111110000001100001100";
constexpr char BEIDOU_B1I_D2_SECONDARY_CODE_STR[3] = "00";
#endif // GNSS_SDR_BEIDOU_B1I_H

View File

@ -20,30 +20,28 @@
#ifndef GNSS_SDR_BEIDOU_B3I_H
#define GNSS_SDR_BEIDOU_B3I_H
#include "MATH_CONSTANTS.h"
#include <cstdint>
#include <string>
// carrier and code frequencies
constexpr double BEIDOU_B3I_FREQ_HZ = 1.268520e9; //!< BeiDou B3I [Hz]
constexpr double BEIDOU_B3I_CODE_RATE_CPS = 10.23e6; //!< BeiDou B3I code rate [chips/s]
constexpr double BEIDOU_B3I_CODE_LENGTH_CHIPS = 10230.0; //!< BeiDou B3I code length [chips]
constexpr double BEIDOU_B3I_CODE_PERIOD_S = 0.001; //!< BeiDou B3I code period [seconds]
constexpr uint32_t BEIDOU_B3I_CODE_PERIOD_MS = 1; //!< BeiDou B3I code period [ms]
constexpr int32_t BEIDOU_B3I_SECONDARY_CODE_LENGTH = 20;
constexpr char BEIDOU_B3I_SECONDARY_CODE_STR[] = "00000100110101001110";
constexpr char BEIDOU_B3I_GEO_PREAMBLE_SYMBOLS_STR[] = "1111110000001100001100";
constexpr int32_t BEIDOU_B3I_GEO_PREAMBLE_LENGTH_SYMBOLS = 22;
constexpr char BEIDOU_B3I_D2_SECONDARY_CODE_STR[] = "00";
constexpr double BEIDOU_B3I_PREAMBLE_DURATION_S = 0.220;
constexpr uint32_t BEIDOU_B3I_CODE_PERIOD_MS = 1; //!< BeiDou B3I code period [ms]
constexpr uint32_t BEIDOU_B3I_PREAMBLE_LENGTH_BITS = 11;
constexpr uint32_t BEIDOU_B3I_PREAMBLE_LENGTH_SYMBOLS = 220; // **************
constexpr double BEIDOU_B3I_PREAMBLE_DURATION_S = 0.220;
constexpr int32_t BEIDOU_B3I_SECONDARY_CODE_LENGTH = 20;
constexpr int32_t BEIDOU_B3I_GEO_PREAMBLE_LENGTH_SYMBOLS = 22;
constexpr int32_t BEIDOU_B3I_PREAMBLE_DURATION_MS = 220;
constexpr int32_t BEIDOU_B3I_TELEMETRY_RATE_BITS_SECOND = 50; //!< D1 NAV message bit rate [bits/s]
constexpr int32_t BEIDOU_B3I_TELEMETRY_SYMBOLS_PER_BIT = 20;
constexpr int32_t BEIDOU_B3I_GEO_TELEMETRY_SYMBOLS_PER_BIT = 2; // *************
constexpr int32_t BEIDOU_B3I_TELEMETRY_SYMBOL_PERIOD_MS = BEIDOU_B3I_TELEMETRY_SYMBOLS_PER_BIT * BEIDOU_B3I_CODE_PERIOD_MS;
constexpr int32_t BEIDOU_B3I_TELEMETRY_SYMBOL_PERIOD_MS = static_cast<const int32_t>(static_cast<uint32_t>(BEIDOU_B3I_TELEMETRY_SYMBOLS_PER_BIT) * BEIDOU_B3I_CODE_PERIOD_MS);
constexpr int32_t BEIDOU_B3I_TELEMETRY_RATE_SYMBOLS_SECOND = BEIDOU_B3I_TELEMETRY_RATE_BITS_SECOND * BEIDOU_B3I_TELEMETRY_SYMBOLS_PER_BIT;
constexpr char BEIDOU_B3I_SECONDARY_CODE_STR[21] = "00000100110101001110";
constexpr char BEIDOU_B3I_GEO_PREAMBLE_SYMBOLS_STR[23] = "1111110000001100001100";
constexpr char BEIDOU_B3I_D2_SECONDARY_CODE_STR[3] = "00";
#endif // GNSS_SDR_BEIDOU_B3I_H

View File

@ -33,27 +33,6 @@ constexpr double BEIDOU_DNAV_OMEGA_EARTH_DOT = 7.2921150e-5; //!< Earth rotatio
constexpr double BEIDOU_DNAV_GM = 3.986004418e14; //!< Universal gravitational constant times the mass of the Earth, [m^3/s^2] as defined in CGCS2000
constexpr double BEIDOU_DNAV_F = -4.442807309e-10; //!< Constant, [s/(m)^(1/2)] F=-2(GM)^.5/C^2
constexpr int32_t BEIDOU_DNAV_PREAMBLE_LENGTH_BITS = 11;
constexpr int32_t BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS = 11; // **************
constexpr int32_t BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS = 300;
constexpr uint32_t BEIDOU_DNAV_SUBFRAME_SYMBOLS = 300;
constexpr int32_t BEIDOU_DNAV_SUBFRAME_DATA_BITS = 300; //!< Number of bits per subframe in the NAV message [bits]
constexpr uint32_t BEIDOU_DNAV_WORDS_SUBFRAME = 10;
constexpr uint32_t BEIDOU_DNAV_WORD_LENGTH_BITS = 30;
constexpr char BEIDOU_DNAV_PREAMBLE[] = "11100010010";
// Number of leap seconds passed from the start of the GPS epoch up to the start of BeiDou epoch
constexpr int32_t BEIDOU_DNAV_BDT2GPST_LEAP_SEC_OFFSET = 14;
// Number of weeks passed from the start of the GPS epoch up to the start of BeiDou epoch
constexpr int32_t BEIDOU_DNAV_BDT2GPST_WEEK_NUM_OFFSET = 1356;
// BEIDOU D1 NAVIGATION MESSAGE STRUCTURE
// GENERAL
const std::vector<std::pair<int32_t, int32_t> > D1_PRE({{1, 11}});
const std::vector<std::pair<int32_t, int32_t> > D1_FRAID({{16, 3}});
const std::vector<std::pair<int32_t, int32_t> > D1_SOW({{19, 8}, {31, 12}});
const std::vector<std::pair<int32_t, int32_t> > D1_PNUM({{44, 7}});
// DNAV SCALE FACTORS
// EPH
constexpr double D1_TOC_LSB = TWO_P3;
@ -106,6 +85,28 @@ constexpr double D1_A1GLO_LSB = 0.1e-9;
constexpr double D1_A0UTC_LSB = TWO_N30;
constexpr double D1_A1UTC_LSB = TWO_N50;
constexpr int32_t BEIDOU_DNAV_PREAMBLE_LENGTH_BITS = 11;
constexpr int32_t BEIDOU_DNAV_PREAMBLE_LENGTH_SYMBOLS = 11; // **************
constexpr int32_t BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS = 300;
constexpr int32_t BEIDOU_DNAV_SUBFRAME_DATA_BITS = 300; //!< Number of bits per subframe in the NAV message [bits]
// Number of leap seconds passed from the start of the GPS epoch up to the start of BeiDou epoch
constexpr int32_t BEIDOU_DNAV_BDT2GPST_LEAP_SEC_OFFSET = 14;
// Number of weeks passed from the start of the GPS epoch up to the start of BeiDou epoch
constexpr int32_t BEIDOU_DNAV_BDT2GPST_WEEK_NUM_OFFSET = 1356;
constexpr uint32_t BEIDOU_DNAV_SUBFRAME_SYMBOLS = 300;
constexpr uint32_t BEIDOU_DNAV_WORDS_SUBFRAME = 10;
constexpr uint32_t BEIDOU_DNAV_WORD_LENGTH_BITS = 30;
constexpr char BEIDOU_DNAV_PREAMBLE[12] = "11100010010";
// BEIDOU D1 NAVIGATION MESSAGE STRUCTURE
// GENERAL
const std::vector<std::pair<int32_t, int32_t> > D1_PRE({{1, 11}});
const std::vector<std::pair<int32_t, int32_t> > D1_FRAID({{16, 3}});
const std::vector<std::pair<int32_t, int32_t> > D1_SOW({{19, 8}, {31, 12}});
const std::vector<std::pair<int32_t, int32_t> > D1_PNUM({{44, 7}});
// SUBFRAME 1
const std::vector<std::pair<int32_t, int32_t> > D1_SAT_H1({{43, 1}});
const std::vector<std::pair<int32_t, int32_t> > D1_AODC({{44, 5}});

View File

@ -63,6 +63,7 @@ set(SYSTEM_PARAMETERS_HEADERS
beidou_dnav_almanac.h
beidou_dnav_utc_model.h
display.h
Galileo_constants.h
Galileo_E1.h
Galileo_E5a.h
Galileo_E5b.h

View File

@ -43,12 +43,9 @@ 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]
constexpr double GPS_L1_CA_CHIP_PERIOD_S = 9.7752e-07; //!< GPS L1 C/A chip period [seconds]
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]
constexpr double GPS_L1_CA_CHIP_PERIOD_S = 9.7752e-07; //!< GPS L1 C/A chip period [seconds]
// 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
/*!
* \brief Maximum Time-Of-Arrival (TOA) difference between satellites for a receiver operated on Earth surface is 20 ms
@ -58,19 +55,20 @@ constexpr uint32_t GPS_L1_CA_OPT_ACQ_FS_SPS = 2000000; //!< Sampling frequency
* [1] J. Bao-Yen Tsui, Fundamentals of Global Positioning System Receivers. A Software Approach, John Wiley & Sons,
* Inc., Hoboken, NJ, 2nd edition, 2005.
*/
constexpr double MAX_TOA_DELAY_MS = 20;
constexpr double MAX_TOA_DELAY_MS = 20.0;
constexpr double GPS_STARTOFFSET_MS = 68.802; // [ms] Initial signal travel time (only for old ls_pvt implementation)
// 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
// OBSERVABLE HISTORY DEEP FOR INTERPOLATION
constexpr int32_t GPS_L1_CA_HISTORY_DEEP = 100;
// NAVIGATION MESSAGE DEMODULATION AND DECODING
constexpr char GPS_CA_PREAMBLE[] = "10001011";
constexpr char GPS_CA_PREAMBLE_SYMBOLS_STR[] = "1111111111111111111100000000000000000000000000000000000000000000000000000000000011111111111111111111000000000000000000001111111111111111111111111111111111111111";
constexpr double GPS_CA_PREAMBLE_DURATION_S = 0.160;
constexpr int32_t GPS_CA_PREAMBLE_LENGTH_BITS = 8;
constexpr int32_t GPS_CA_PREAMBLE_LENGTH_SYMBOLS = 160;
constexpr double GPS_CA_PREAMBLE_DURATION_S = 0.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;
@ -81,6 +79,8 @@ constexpr int32_t GPS_SUBFRAME_BITS = 300;
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]
constexpr char GPS_CA_PREAMBLE[9] = "10001011";
constexpr char GPS_CA_PREAMBLE_SYMBOLS_STR[161] = "1111111111111111111100000000000000000000000000000000000000000000000000000000000011111111111111111111000000000000000000001111111111111111111111111111111111111111";
// GPS NAVIGATION MESSAGE STRUCTURE
// NAVIGATION MESSAGE FIELDS POSITIONS (from IS-GPS-200K Appendix II)

View File

@ -22,7 +22,6 @@
#define GNSS_SDR_GPS_L5_H
#include "GPS_CNAV.h"
#include "MATH_CONSTANTS.h"
#include "gnss_frequencies.h"
#include <cstdint>
@ -39,16 +38,18 @@ constexpr double GPS_L5_F = -4.442807633e-10; //!< Constant, [s/(m
// carrier and code frequencies
constexpr double GPS_L5_FREQ_HZ = FREQ5; //!< L5 [Hz]
constexpr double GPS_L5I_CODE_RATE_CPS = 10.23e6; //!< GPS L5i code rate [chips/s]
constexpr int32_t GPS_L5I_CODE_LENGTH_CHIPS = 10230; //!< GPS L5i code length [chips]
constexpr double GPS_L5I_PERIOD_S = 0.001; //!< GPS L5 code period [seconds]
constexpr int32_t GPS_L5I_PERIOD_MS = 1; //!< GPS L5 code period [ms]
constexpr double GPS_L5I_SYMBOL_PERIOD_S = 0.01; //!< GPS L5 symbol period [seconds]
constexpr int32_t GPS_L5I_SYMBOL_PERIOD_MS = 10; //!< GPS L5 symbol period [ms]
constexpr double GPS_L5I_CODE_RATE_CPS = 10.23e6; //!< GPS L5I code rate [chips/s]
constexpr double GPS_L5I_PERIOD_S = 0.001; //!< GPS L5I code period [seconds]
constexpr double GPS_L5I_SYMBOL_PERIOD_S = 0.01; //!< GPS L5I symbol period [seconds]
constexpr double GPS_L5Q_CODE_RATE_CPS = 10.23e6; //!< GPS L5i code rate [chips/s]
constexpr int32_t GPS_L5Q_CODE_LENGTH_CHIPS = 10230; //!< GPS L5i code length [chips]
constexpr double GPS_L5Q_PERIOD_S = 0.001; //!< GPS L5 code period [seconds]
constexpr double GPS_L5Q_CODE_RATE_CPS = 10.23e6; //!< GPS L5Q code rate [chips/s]
constexpr double GPS_L5Q_PERIOD_S = 0.001; //!< GPS L5Q code period [seconds]
constexpr int32_t GPS_L5I_CODE_LENGTH_CHIPS = 10230; //!< GPS L5I code length [chips]
constexpr int32_t GPS_L5I_PERIOD_MS = 1; //!< GPS L5I code period [ms]
constexpr int32_t GPS_L5I_SYMBOL_PERIOD_MS = 10; //!< GPS L5I symbol period [ms]
constexpr int32_t GPS_L5Q_CODE_LENGTH_CHIPS = 10230; //!< GPS L5Q code length [chips]
constexpr int32_t GPS_L5_HISTORY_DEEP = 5;
@ -176,9 +177,9 @@ constexpr int32_t GPS_L5_CNAV_DATA_PAGE_SYMBOLS = 600;
constexpr int32_t GPS_L5_CNAV_DATA_PAGE_DURATION_S = 6;
constexpr int32_t GPS_L5I_NH_CODE_LENGTH = 10;
constexpr int32_t GPS_L5I_NH_CODE[10] = {0, 0, 0, 0, 1, 1, 0, 1, 0, 1};
constexpr char GPS_L5I_NH_CODE_STR[] = "0000110101";
constexpr int32_t GPS_L5Q_NH_CODE_LENGTH = 20;
constexpr int32_t GPS_L5Q_NH_CODE[20] = {0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0};
constexpr char GPS_L5Q_NH_CODE_STR[] = "00000100110101001110";
constexpr char GPS_L5I_NH_CODE_STR[11] = "0000110101";
constexpr char GPS_L5Q_NH_CODE_STR[21] = "00000100110101001110";
#endif // GNSS_SDR_GPS_L5_H

View File

@ -22,6 +22,7 @@
#ifndef GNSS_SDR_GALILEO_E1_H
#define GNSS_SDR_GALILEO_E1_H
#include "Galileo_constants.h"
#include "MATH_CONSTANTS.h"
#include "gnss_frequencies.h"
#include <cstddef> // for size_t
@ -30,24 +31,15 @@
#include <vector>
// Physical constants
constexpr double GALILEO_PI = 3.1415926535898; //!< Pi as defined in GALILEO ICD
constexpr double GALILEO_TWO_PI = 6.283185307179600; //!< 2*Pi as defined in GALILEO ICD
constexpr double GALILEO_GM = 3.986004418e14; //!< Geocentric gravitational constant[m^3/s^2]
constexpr double GALILEO_OMEGA_EARTH_DOT = 7.2921151467e-5; //!< Mean angular velocity of the Earth [rad/s]
constexpr double GALILEO_C_M_S = 299792458.0; //!< The speed of light, [m/s]
constexpr double GALILEO_C_M_MS = 299792.4580; //!< The speed of light, [m/ms]
constexpr double GALILEO_F = -4.442807309e-10; //!< Constant, [s/(m)^(1/2)]
// carrier and code frequencies
constexpr double GALILEO_E1_FREQ_HZ = FREQ1; //!< Galileo E1 carrier frequency [Hz]
constexpr double GALILEO_E1_CODE_CHIP_RATE_CPS = 1.023e6; //!< Galileo E1 code rate [chips/s]
constexpr double GALILEO_E1_CODE_PERIOD_S = 0.004; //!< Galileo E1 code period [s]
constexpr int32_t GALILEO_E1_CODE_PERIOD_MS = 4; //!< Galileo E1 code period [ms]
constexpr double GALILEO_E1_SUB_CARRIER_A_RATE_HZ = 1.023e6; //!< Galileo E1 sub-carrier 'a' rate [Hz]
constexpr double GALILEO_E1_SUB_CARRIER_B_RATE_HZ = 6.138e6; //!< Galileo E1 sub-carrier 'b' rate [Hz]
constexpr double GALILEO_E1_B_CODE_LENGTH_CHIPS = 4092.0; //!< Galileo E1-B code length [chips]
constexpr double GALILEO_E1_B_SYMBOL_RATE_BPS = 250.0; //!< Galileo E1-B symbol rate [bits/second]
constexpr int32_t GALILEO_E1_CODE_PERIOD_MS = 4; //!< Galileo E1 code period [ms]
constexpr int32_t GALILEO_E1_B_SAMPLES_PER_SYMBOL = 1; //!< (Galileo_E1_CODE_CHIP_RATE_HZ / Galileo_E1_B_CODE_LENGTH_CHIPS) / Galileo_E1_B_SYMBOL_RATE_BPS
constexpr int32_t GALILEO_E1_C_SECONDARY_CODE_LENGTH = 25; //!< Galileo E1-C secondary code length [chips]
constexpr int32_t GALILEO_E1_NUMBER_OF_CODES = 50;
@ -56,15 +48,11 @@ constexpr int32_t GALILEO_E1_NUMBER_OF_CODES = 50;
// optimum parameters
constexpr uint32_t GALILEO_E1_OPT_ACQ_FS_SPS = 2000000; //!< Sampling frequency that maximizes the acquisition SNR while using a non-multiple of chip rate
constexpr int32_t GALILEO_E1_HISTORY_DEEP = 100; //!< Observable history length for interpotalion
// Galileo INAV Telemetry structure
constexpr char GALILEO_INAV_PREAMBLE[] = "0101100000";
constexpr int32_t GALILEO_INAV_PREAMBLE_LENGTH_BITS = 10;
constexpr double GALILEO_INAV_PAGE_PART_WITH_PREABLE_SECONDS = 2.0 + GALILEO_INAV_PREAMBLE_LENGTH_BITS * GALILEO_E1_CODE_PERIOD_S;
constexpr double GALILEO_INAV_PAGE_PART_WITH_PREABLE_SECONDS = 2.0 + (static_cast<double>(GALILEO_INAV_PREAMBLE_LENGTH_BITS) * GALILEO_E1_CODE_PERIOD_S);
constexpr int32_t GALILEO_INAV_PREAMBLE_PERIOD_SYMBOLS = 250;
constexpr int32_t GALILEO_INAV_PAGE_PART_SYMBOLS = 250; //!< Each Galileo INAV pages are composed of two parts (even and odd) each of 250 symbols, including preamble. See Galileo ICD 4.3.2
constexpr int32_t GALILEO_INAV_PAGE_SYMBOLS = 500; //!< The complete Galileo INAV page length
@ -79,6 +67,9 @@ constexpr int32_t GALILEO_DATA_JK_BITS = 128;
constexpr int32_t GALILEO_DATA_FRAME_BITS = 196;
constexpr int32_t GALILEO_DATA_FRAME_BYTES = 25;
constexpr char GALILEO_INAV_PREAMBLE[11] = "0101100000";
constexpr char GALILEO_E1_C_SECONDARY_CODE[26] = "0011100000001010110110010";
const std::vector<std::pair<int32_t, int32_t>> TYPE({{1, 6}});
const std::vector<std::pair<int32_t, int32_t>> PAGE_TYPE_BIT({{1, 6}});
@ -394,6 +385,4 @@ constexpr char GALILEO_E1_C_PRIMARY_CODE[GALILEO_E1_NUMBER_OF_CODES][1024] = {
"CD7AAC98501F29507EA4E0183E8A40D2E5117E47BB5D18D01A3732DE4C821DFE86521CBEA7DB29BE1148BD544ECC681689BCD1B41EAF755310B7659342F8EE11CB41550CC30E566E192796B66C1A83C0B28BACCFA6C393043A0A2CB89712BC1CCB174DE58E66896AF39C1CEED1E05B0435F8CF6FD920D100F51584FE24879987399481DBF27DDB6286B6353919E552E669290CE02AB4CD5113D7F484229F379C7332767EC69E4336439B05DE1C1E3563DD303A4F580BFF20A40E49CB0822F715ED0221EBCDB5DBAD751124B1715E82F37488265135B6C8BBCF4F801ECC4D3525FF189493AD4EFF0C042B070C4CA8FB1FDF43D79F06A6E4E3D35D7B07D4B728D5DC54EEDACBBBA1EDDCDC07ADF7DFCFEF835E44DF1FF66DAF2A7BAEBE218AC3B15E183044D6A8A89B3C101B40BED97ED5DF93BBC1B84931D56B8C822A6D058AC74CFA4C85D8B456698E82D5B7574C17B041E5F4BEED09F75012355CBC322B822C63F10C18A8F279E9A0E18E1FEF183D23E13894E31F6D046956FE8A647558228F6D4D6910151EC03937876B6ED7A078D33DAEB3F2239353BB8181E62B286BBC41588DE10F478A5CE5B508F205A41820356767B0A0ED4B8DB9EFE348362E9A90D6C30218B295B338B51C09239D02FC8A1E7DAAAB60AC37F5E67CFC88EEF69567B5C81A03B449F4ED38B9D295A36AA3503173F6F6F66D93CE72D753076040FACDE",
"ADDCEDB50E907D20E826E6E8A0D30C20C74B2DF204EA784BAE9F618CAE33A3C937729DF9CB10BA2A4C33E0182A37200C0CC509729D828B8A2A20F283AC4F9306596684EA3FB5492A4C9F2DB459E7531C9F9C0950E7D9E93B3EE5912AE7E39AC8F4EC14B18F24E325003F477E347C5AC1B67CDB11AF3BBBBCD0AC3703024B5767AA67A208254F798684BFD1D3EACD757EEC77254950A146620400DB95E694574F739A991EBA771EBBDFF1056BB39A77DBE0636A032E17141332F951C57C6C90F348F165E3ABDD60D429D5D6BEC7E3E3463806F819EB2D212B3528A5EDE51F235AD100A35E890955F8A1DC51FDCB53EABCA2540997DD054C1F5B29462995B876B44D085904E55E1B838BEF600A992EB49CE078DF75AF3D0F137685AC0D07F0BE1EB87B63A41E74DDE869C8A683BDE60AF5D77FF18F7137495BCEFD0ED28F62F9C3E25D332B5F861D999FCDC0B4851A984A4DBB53401FD40351ADA4335C702BCC8D900C737507B990BDDBE91D201E3A0946DC968D43FD10D04B0B76667FF5B4291C2124B0124C6B710A6D1BCFAEB016B9DEEB0F7A4FE044CA4EA0CCD84B7682617C3A545071EC295B0663B3F577D562DE1D9DD80DE6A1EFD6D5991EB5246F1597B86D0E9A90CF6DB0EB2B8E7BAE9431E567F01AA98502C773742246467ABF911A91A51F6C1B9E0C3233DC1A37D17DB91A5F0F661B0EB5886964456C7818601BD0C"};
constexpr char GALILEO_E1_C_SECONDARY_CODE[] = "0011100000001010110110010";
#endif // GNSS_SDR_GALILEO_E1_H

View File

@ -33,11 +33,11 @@ constexpr double GALILEO_E5A_FREQ_HZ = FREQ5; //!< Galileo E5a c
constexpr double GALILEO_E5A_CODE_CHIP_RATE_CPS = 1.023e7; //!< Galileo E5a code rate [chips/s]
constexpr double GALILEO_E5A_I_TIERED_CODE_PERIOD_S = 0.020; //!< Galileo E5a-I tiered code period [s]
constexpr double GALILEO_E5A_Q_TIERED_CODE_PERIOD_S = 0.100; //!< Galileo E5a-Q tiered code period [s]
constexpr double GALILEO_E5A_CODE_PERIOD_S = 0.001; //!< Galileo E5a primary code period [s]
constexpr int32_t GALILEO_E5A_CODE_LENGTH_CHIPS = 10230; //!< Galileo E5a primary code length [chips]
constexpr int32_t GALILEO_E5A_I_SECONDARY_CODE_LENGTH = 20; //!< Galileo E5a-I secondary code length [chips]
constexpr int32_t GALILEO_E5A_Q_SECONDARY_CODE_LENGTH = 100; //!< Galileo E5a-Q secondary code length [chips]
constexpr double GALILEO_E5A_CODE_PERIOD_S = 0.001; //!< Galileo E1 primary code period [s]
constexpr int32_t GALILEO_E5A_CODE_PERIOD_MS = 1; //!< Galileo E1 primary code period [ms]
constexpr int32_t GALILEO_E5A_CODE_PERIOD_MS = 1; //!< Galileo E5a primary code period [ms]
constexpr int32_t GALILEO_E5A_SYMBOL_RATE_BPS = 50; //!< Galileo E5a symbol rate [bits/second]
constexpr int32_t GALILEO_E5A_NUMBER_OF_CODES = 50;
@ -52,7 +52,6 @@ constexpr uint32_t GALILEO_E5A_OPT_ACQ_FS_SPS = 10000000; //!< Sampling frequen
// F/NAV message structure
constexpr int32_t GALILEO_FNAV_PREAMBLE_LENGTH_BITS = 12;
constexpr char GALILEO_FNAV_PREAMBLE[] = "101101110000";
constexpr int32_t GALILEO_FNAV_CODES_PER_SYMBOL = 20; // (chip rate/ code length)/telemetry bps
constexpr int32_t GALILEO_FNAV_CODES_PER_PREAMBLE = 240; // bits preamble * codes/symbol
constexpr int32_t GALILEO_FNAV_SYMBOLS_PER_PAGE = 500; // Total symbols per page including preamble. See Galileo ICD 4.2.2
@ -66,6 +65,8 @@ constexpr int32_t GALILEO_FNAV_PAGE_TYPE_BITS = 6;
constexpr int32_t GALILEO_FNAV_DATA_FRAME_BITS = 214;
constexpr int32_t GALILEO_FNAV_DATA_FRAME_BYTES = 27;
constexpr char GALILEO_FNAV_PREAMBLE[13] = "101101110000";
const std::vector<std::pair<int32_t, int32_t>> FNAV_PAGE_TYPE_BIT({{1, 6}});
/* WORD 1 iono corrections. FNAV (Galileo E5a message)*/

View File

@ -29,15 +29,6 @@
#include <vector>
// Physical constants
constexpr double GALILEO_PI = 3.1415926535898; //!< Pi as defined in GALILEO ICD
constexpr double GALILEO_TWO_PI = 6.283185307179600; //!< 2*Pi as defined in GALILEO ICD
constexpr double GALILEO_GM = 3.986004418e14; //!< Geocentric gravitational constant[m^3/s^2]
constexpr double GALILEO_OMEGA_EARTH_DOT = 7.2921151467e-5; //!< Mean angular velocity of the Earth [rad/s]
constexpr double GALILEO_C_M_S = 299792458.0; //!< The speed of light, [m/s]
constexpr double GALILEO_C_M_MS = 299792.4580; //!< The speed of light, [m/ms]
constexpr double GALILEO_F = -4.442807309e-10; //!< Constant, [s/(m)^(1/2)]
// Carrier and code frequencies
constexpr double GALILEO_E5B_FREQ_HZ = FREQ7; //!< Galileo E5b carrier frequency [Hz]
constexpr double GALILEO_E5B_CODE_CHIP_RATE_CPS = 1.023e7; //!< Galileo E5b code rate [chips/s]
@ -57,10 +48,8 @@ constexpr int32_t GALILEO_E5B_HISTORY_DEEP = 100;
constexpr uint32_t GALILEO_E5B_OPT_ACQ_FS_SPS = 10000000; //!< Sampling frequency that maximizes the acquisition SNR while using a non-multiple of chip rate
// Galileo I/NAV message structure
constexpr char GALILEO_INAV_PREAMBLE[] = "0101100000";
constexpr int32_t GALILEO_INAV_PREAMBLE_LENGTH_BITS = 10;
constexpr double GALILEO_INAV_PAGE_PART_WITH_PREABLE_SECONDS = 2.04; //!< Page Duration + (Galileo I/NAV Preamble bits)*(Galileo E5b-I tiered Code Period(seconds))
constexpr int32_t GALILEO_INAV_PREAMBLE_LENGTH_BITS = 10;
constexpr int32_t GALILEO_INAV_PREAMBLE_PERIOD_SYMBOLS = 250;
constexpr int32_t GALILEO_INAV_PAGE_PART_SYMBOLS = 250; //!< Each Galileo INAV pages are composed of two parts (even and odd) each of 250 symbols, including preamble. See Galileo ICD 4.3.2
constexpr int32_t GALILEO_INAV_PAGE_SYMBOLS = 500; //!< The complete Galileo INAV page length
@ -74,6 +63,11 @@ constexpr int32_t GALILEO_PAGE_TYPE_BITS = 6;
constexpr int32_t GALILEO_DATA_JK_BITS = 128;
constexpr int32_t GALILEO_DATA_FRAME_BITS = 196;
constexpr int32_t GALILEO_DATA_FRAME_BYTES = 25;
constexpr char GALILEO_INAV_PREAMBLE[11] = "0101100000";
// Galileo E5b-I secondary code
constexpr char GALILEO_E5B_I_SECONDARY_CODE[5] = "1110";
const std::vector<std::pair<int32_t, int32_t>> TYPE({{1, 6}});
const std::vector<std::pair<int32_t, int32_t>> PAGE_TYPE_BIT({{1, 6}});
@ -395,10 +389,6 @@ constexpr char GALILEO_E5B_Q_PRIMARY_CODE[GALILEO_E5B_NUMBER_OF_CODES][2559] = {
"37AF4FFE6FC0F844F8BE37B431A60B3FD62FFD1E73B410D218F58B791E84A90E0AACB7F5956987001AF46748C6C573D3D9857FB1D18F916DF21863CAFFFD853ABE3AE024DAF4B5443C97F24A4FFA884D085C118ECFDD2C66A0DA98903C7CCA662790CEF0908F67CCA1EDFEE31D71D47889AD299B1FE272EE0B04D8B21CE6C00F05961D69DB9F0F1FEDEF4F6065B86A59D92E697C8E3EF1B112C844EF77C3EDD0648E02268DE35A4951F3BE26D9E2D7CE455D92292E48987830170CDF2096D5B3C136A0EDD548E73AAD4A6A79523600504CF34AFB9EB85F03E793364048999AF55BF3A6B347C530018F546678784860106535D2C73B44C4BAD39AE74426E8CA0AE666E7FA8C51AF6B6DCEFC4F5584FCD29960BB9298353052570364A1936E9E0118D7D6C0BA3E50AF8B3ED56CB535F454135ED900EF59114E10AD6E53B908F73B5ADFDDDAB01C95CBFA739B7F8A199714C26ADCCBFA46B96D4D4C79050408B65357241AD7BF55349F085B8C040F65287DD442CAD5A2A970959ED5B00AAC659BA6AF7CE5C26EBE51E4A471CAE001D74B13C71DF072E978F9647D75123092FA856604BE736B6D03DF1C8656746E0906FE462375759EDF12793C475446B8CE6E2EFF44B164C2E7477AA22F50C348A2BDDB65E6B1F021B5216897ADE7FBC70A0767E5149234E84FD7AF5FB9F22074129C8E4E15F935F451E36AA17F50B1BB698C302ECCFEF8B4CC229ED8937CD4BC5F8876938CBAA810BCAB0751EE66DA1AA2857B54534EFA4D03D5E1F681D15A179BEEB40630868A2070D0C659E7EA3FD26308F5CD6D75B97803C017E18D4673F6B453ED694B32083260C43C40EF81AD8CA230426AFB9020D8942A2A23D4022ED50979CF8537680D96B6CC165F9ADBEE540CAB59E2126FD5CE6852B8613C346BEDD11A46CCD6A04134FA298692C7CCB34457B8D0EA863C37383C4E990AD3918DC532FAF8B15D8F610A85B03C2CC4650FB1BB8C05C1C0A0AD75D2E80358D2376BD4AECDA2172A3250D59884A5728A74876F736B4D24CCD5EF1F833A6A4C6F2FF8648D073823DED852109B67BC9BD487E2BA991D958B2FFE34B403F355B7F935CF8A63037C8C6100459863F58419847B389D92DDA586AC3A3539148E81C810FDB6AC7EE0E731DDBCCB9A3DC646C8EC2FD37C77D365B5E257BA519D07C4D87342117CEEF0687D686090FD1F002274149E3EA39A2A91B0227170A6CBCFAB70E3F74F3F8BA317A5642E8846110FF20F2E0DFFE5818C24432BB94A2C4AFFF87A7C72BA3E206B300ED5E5AA7624DD7BF84A52E4B7B56B2353F2052883EBD1E9CB7AA55EA24EF402881E13381C0C76B35719D3D8EFED5C8B823F77A1A203E3DFB83E51BBF0FEE41CD5B975DAC38AF8FCC0527BE1828426F11D3ED5676897D756EB3FE2C34A51F6FB9136AC656893826D6881BB5A6250302934393CDAF906B2F03BD8865CF5BE9DCF78DFCDEC0711B6712ADFDD6A2A71FAB1D6FE40CFF4BB1267D169FAEDBCF21F1379B58CC76731093BF233951FEDCA86A2BD505F9E10ACF169943F20846A341D85297DB02288BC9EFAA7B43691DD53CBFC170B4FD7D3E11FF76C30B922C8AA205A376F94D61066749C2C7387CE7EC5C6952AB7C9F12E7C11489AD879F8ED43015D1C63FEDE9EB223D52D79BE1E2242F9B92A5C64C8B6D5C36498A9A8F862473C081A58004ADE1B4EBD4C4C0AA5978074FF22AD2CE1A70E2E1945F9B14E3D537E07C930864EB4C09DDA24B74264FA45903008E42059DEFE5CA0C04D45A44B716EE0BE551C47CE7D23182370FB896B9AB080"};
// Galileo E5b-I secondary code
constexpr char GALILEO_E5B_I_SECONDARY_CODE[] = "1110";
// Galileo E5b-Q secondary codes
constexpr size_t GALILEO_E5B_Q_SECONDARY_CODE_STR_LENGTH = 100;
constexpr char GALILEO_E5B_Q_SECONDARY_CODE[GALILEO_E5B_NUMBER_OF_CODES][101] = {

View File

@ -0,0 +1,33 @@
/*!
* \file Galileo_constants.h
* \brief Defines constants for Galileo
* \author Carles Fernandez-Prades, 2020. cfernandez(at)cttc.es
*
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2020 (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
*
* -------------------------------------------------------------------------
*/
#ifndef GNSS_SDR_GALILEO_CONSTANTS_H
#define GNSS_SDR_GALILEO_CONSTANTS_H
// Physical constants for Galileo
constexpr double GALILEO_PI = 3.1415926535898; //!< Pi as defined in GALILEO ICD
constexpr double GALILEO_TWO_PI = 6.283185307179600; //!< 2*Pi as defined in GALILEO ICD
constexpr double GALILEO_GM = 3.986004418e14; //!< Geocentric gravitational constant[m^3/s^2]
constexpr double GALILEO_OMEGA_EARTH_DOT = 7.2921151467e-5; //!< Mean angular velocity of the Earth [rad/s]
constexpr double GALILEO_C_M_S = 299792458.0; //!< The speed of light, [m/s]
constexpr double GALILEO_C_M_MS = 299792.4580; //!< The speed of light, [m/ms]
constexpr double GALILEO_F = -4.442807309e-10; //!< Constant, [s/(m)^(1/2)]
#endif // GNSS_SDR_GALILEO_CONSTANTS_H