From bcad6db988f499b545b9da1abb82e5eef260ae28 Mon Sep 17 00:00:00 2001 From: Vlad P Date: Thu, 14 Jul 2022 12:45:54 +0300 Subject: [PATCH] Implement processing of BeiDou PRN34..PRN63 Signed-off-by: Vlad P --- src/algorithms/libs/beidou_b1i_signal_replica.cc | 14 ++++++-------- src/algorithms/libs/rtklib/rtklib.h | 2 +- .../system_parameters/beidou_dnav_ephemeris.cc | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/algorithms/libs/beidou_b1i_signal_replica.cc b/src/algorithms/libs/beidou_b1i_signal_replica.cc index 513a78cac..88e22c78b 100644 --- a/src/algorithms/libs/beidou_b1i_signal_replica.cc +++ b/src/algorithms/libs/beidou_b1i_signal_replica.cc @@ -26,11 +26,9 @@ const auto AUX_CEIL = [](float x) { return static_cast(static_cast dest, int32_t prn, uint32_t chip_shift) { constexpr uint32_t code_length = 2046; - const std::array delays = {712 /*PRN1*/, 1581, 1414, 1550, 581, 771, 1311, 1043, 1549, 359, 710, 1579, 1548, 1103, 579, 769, 358, 709, 1411, 1547, - 1102, 578, 357, 1577, 1410, 1546, 1101, 707, 1576, 1409, 1545, 354 /*PRN32*/, - 705}; - const std::array phase1 = {1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 8, 8, 8, 9, 9, 10}; - const std::array phase2 = {3, 4, 5, 6, 8, 9, 10, 11, 7, 4, 5, 6, 8, 9, 10, 11, 5, 6, 8, 9, 10, 11, 6, 8, 9, 10, 11, 8, 9, 10, 11, 9, 10, 11, 10, 11, 11}; + const std::array phase1 = {1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 8, 8, 8, 9, 9, 10, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 6, 8, 9, 9, 3, 5, 7, 4, 4, 5, 5, 5, 5, 6}; + const std::array phase2 = {3, 4, 5, 6, 8, 9, 10, 11, 7, 4, 5, 6, 8, 9, 10, 11, 5, 6, 8, 9, 10, 11, 6, 8, 9, 10, 11, 8, 9, 10, 11, 9, 10, 11, 10, 11, 11, 7, 4, 6, 8, 10, 11, 5, 9, 6, 8, 10, 11, 9, 9, 10, 11, 7, 7, 9, 5, 9, 6, 8, 10, 11, 9}; + const std::array phase3 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3}; std::bitset G1{}; std::bitset G2{}; @@ -50,7 +48,7 @@ void beidou_b1i_code_gen_int(own::span dest, int32_t prn, uint32_t chip prn_idx = prn - 1; // A simple error check - if ((prn_idx < 0) || (prn_idx > 32)) + if ((prn_idx < 0) || (prn_idx > 62)) { return; } @@ -59,7 +57,7 @@ void beidou_b1i_code_gen_int(own::span dest, int32_t prn, uint32_t chip for (lcv = 0; lcv < code_length; lcv++) { G1[lcv] = G1_register[0]; - G2[lcv] = G2_register[-(phase1[prn_idx] - 11)] xor G2_register[-(phase2[prn_idx] - 11)]; + G2[lcv] = G2_register[-(phase1[prn_idx] - 11)] xor G2_register[-(phase2[prn_idx] - 11)] xor (phase3[prn_idx] ? G2_register[-(phase3[prn_idx] - 11)] : 0); feedback1 = G1_register[0] xor G1_register[1] xor G1_register[2] xor G1_register[3] xor G1_register[4] xor G1_register[10]; feedback2 = G2_register[0] xor G2_register[2] xor G2_register[3] xor G2_register[6] xor G2_register[7] xor G2_register[8] xor G2_register[9] xor G2_register[10]; @@ -75,7 +73,7 @@ void beidou_b1i_code_gen_int(own::span dest, int32_t prn, uint32_t chip } // Set the delay - delay = code_length - delays[prn_idx] * 0; // ********************************* + delay = code_length; //********************************** delay += chip_shift; delay %= code_length; diff --git a/src/algorithms/libs/rtklib/rtklib.h b/src/algorithms/libs/rtklib/rtklib.h index 379e75b75..216183d48 100644 --- a/src/algorithms/libs/rtklib/rtklib.h +++ b/src/algorithms/libs/rtklib/rtklib.h @@ -202,7 +202,7 @@ const int NSYSQZS = 0; #define ENABDS #ifdef ENABDS const int MINPRNBDS = 1; //!< min satellite sat number of BeiDou -const int MAXPRNBDS = 37; //!< max satellite sat number of BeiDou +const int MAXPRNBDS = 63; //!< max satellite sat number of BeiDou const int NSATBDS = (MAXPRNBDS - MINPRNBDS + 1); //!< number of BeiDou satellites const int NSYSBDS = 1; #else diff --git a/src/core/system_parameters/beidou_dnav_ephemeris.cc b/src/core/system_parameters/beidou_dnav_ephemeris.cc index b3a5e41ee..0b12e7754 100644 --- a/src/core/system_parameters/beidou_dnav_ephemeris.cc +++ b/src/core/system_parameters/beidou_dnav_ephemeris.cc @@ -22,7 +22,7 @@ Beidou_Dnav_Ephemeris::Beidou_Dnav_Ephemeris() { auto gnss_sat = Gnss_Satellite(); const std::string _system("Beidou"); - for (unsigned int i = 1; i < 36; i++) + for (unsigned int i = 1; i < 64; i++) { satelliteBlock[i] = gnss_sat.what_block(_system, i); }