From e7e936f97e78860336263e39b75c4905cbcd33ee Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 15 Jul 2019 15:13:18 +0200 Subject: [PATCH] Use std::bitset instead of std::array --- .../libs/beidou_b1i_signal_processing.cc | 11 +- .../libs/beidou_b3i_signal_processing.cc | 154 ++++++++++-------- .../libs/gps_sdr_signal_processing.cc | 9 +- 3 files changed, 95 insertions(+), 79 deletions(-) diff --git a/src/algorithms/libs/beidou_b1i_signal_processing.cc b/src/algorithms/libs/beidou_b1i_signal_processing.cc index 7c883607c..504d7ee0d 100644 --- a/src/algorithms/libs/beidou_b1i_signal_processing.cc +++ b/src/algorithms/libs/beidou_b1i_signal_processing.cc @@ -32,17 +32,20 @@ #include "beidou_b1i_signal_processing.h" #include +#include +#include auto auxCeil = [](float x) { return static_cast(static_cast((x) + 1)); }; void beidou_b1i_code_gen_int(gsl::span _dest, int32_t _prn, uint32_t _chip_shift) { const uint32_t _code_length = 2046; - std::array G1{}; - std::array G2{}; + std::bitset<_code_length> G1{}; + std::bitset<_code_length> G2{}; + + std::bitset<11> G1_register(std::string("01010101010")); + std::bitset<11> G2_register(std::string("01010101010")); - std::array G1_register{false, true, false, true, false, true, false, true, false, true, false}; - std::array G2_register{false, true, false, true, false, true, false, true, false, true, false}; bool feedback1, feedback2; bool aux; uint32_t lcv, lcv2; diff --git a/src/algorithms/libs/beidou_b3i_signal_processing.cc b/src/algorithms/libs/beidou_b3i_signal_processing.cc index a3a1cfbfb..f5e62838a 100644 --- a/src/algorithms/libs/beidou_b3i_signal_processing.cc +++ b/src/algorithms/libs/beidou_b3i_signal_processing.cc @@ -32,85 +32,90 @@ #include "beidou_b3i_signal_processing.h" #include +#include +#include auto auxCeil = [](float x) { return static_cast(static_cast((x) + 1)); }; void beidou_b3i_code_gen_int(gsl::span _dest, signed int _prn, unsigned int _chip_shift) { const unsigned int _code_length = 10230; - std::array G1{}; - std::array G2{}; - std::array G1_register = {{true, true, true, true, true, true, true, true, true, true, true, true, true}}; - std::array G2_register = {{true, true, true, true, true, true, true, true, true, true, true, true, true}}; - std::array G1_register_reset = {{false, false, true, true, true, true, true, true, true, true, true, true, true}}; + std::bitset<_code_length> G1{}; + std::bitset<_code_length> G2{}; + auto G1_register = std::move(std::bitset<13>{}.set()); // All true {true, true, true, true, true, true, true, true, true, true, true, true, true}; + auto G2_register = std::move(std::bitset<13>{}.set()); // All true {true, true, true, true, true, true, true, true, true, true, true, true, true}; + auto G1_register_reset = std::move(std::bitset<13>{}.set()); + G1_register_reset.reset(0); + G1_register_reset.reset(1); // {false, false, true, true, true, true, true, true, true, true, true, true, true}; + bool feedback1, feedback2, aux; uint32_t lcv, lcv2, delay; int32_t prn_idx = _prn - 1; - std::array, 63> G2_register_shifted = - {{{{true, false, true, false, true, true, true, true, true, true, true, true, true}}, - {{true, true, true, true, false, false, false, true, false, true, false, true, true}}, - {{true, false, true, true, true, true, false, false, false, true, false, true, false}}, - {{true, true, true, true, true, true, true, true, true, true, false, true, true}}, - {{true, true, false, false, true, false, false, false, true, true, true, true, true}}, - {{true, false, false, true, false, false, true, true, false, false, true, false, false}}, - {{true, true, true, true, true, true, true, false, true, false, false, true, false}}, - {{true, true, true, false, true, true, true, true, true, true, true, false, true}}, - {{true, false, true, false, false, false, false, false, false, false, false, true, false}}, - {{false, false, true, false, false, false, false, false, true, true, false, true, true}}, - {{true, true, true, false, true, false, true, true, true, false, false, false, false}}, - {{false, false, true, false, true, true, false, false, true, true, true, true, false}}, - {{false, true, true, false, false, true, false, false, true, false, true, false, true}}, - {{false, true, true, true, false, false, false, true, false, false, true, true, false}}, - {{true, false, false, false, true, true, false, false, false, true, false, false, true}}, - {{true, true, true, false, false, false, true, true, true, true, true, false, false}}, - {{false, false, true, false, false, true, true, false, false, false, true, false, true}}, - {{false, false, false, false, false, true, true, true, false, true, true, false, false}}, - {{true, false, false, false, true, false, true, false, true, false, true, true, true}}, - {{false, false, false, true, false, true, true, false, true, true, true, true, false}}, - {{false, false, true, false, false, false, false, true, false, true, true, false, true}}, - {{false, false, true, false, true, true, false, false, false, true, false, true, false}}, - {{false, false, false, true, false, true, true, false, false, true, true, true, true}}, - {{false, false, true, true, false, false, true, true, false, false, false, true, false}}, - {{false, false, true, true, true, false, true, false, false, true, false, false, false}}, - {{false, true, false, false, true, false, false, true, false, true, false, false, true}}, - {{true, false, true, true, false, true, true, false, true, false, false, true, true}}, - {{true, false, true, false, true, true, true, true, false, false, false, true, false}}, - {{false, false, false, true, false, true, true, true, true, false, true, false, true}}, - {{false, true, true, true, true, true, true, true, true, true, true, true, true}}, - {{false, true, true, false, true, true, false, false, false, true, true, true, true}}, - {{true, false, true, false, true, true, false, false, false, true, false, false, true}}, - {{true, false, false, true, false, true, false, true, false, true, false, true, true}}, - {{true, true, false, false, true, true, false, true, false, false, true, false, true}}, - {{true, true, false, true, false, false, true, false, true, true, true, false, true}}, - {{true, true, true, true, true, false, true, true, true, false, true, false, false}}, - {{false, false, true, false, true, false, true, true, false, false, true, true, true}}, - {{true, true, true, false, true, false, false, false, true, false, false, false, false}}, - {{true, true, false, true, true, true, false, false, true, false, false, false, false}}, - {{true, true, false, true, false, true, true, false, false, true, true, true, false}}, - {{true, false, false, false, false, false, false, true, true, false, true, false, false}}, - {{false, true, false, true, true, true, true, false, true, true, false, false, true}}, - {{false, true, true, false, true, true, false, true, true, true, true, false, false}}, - {{true, true, false, true, false, false, true, true, true, false, false, false, true}}, - {{false, false, true, true, true, false, false, true, false, false, false, true, false}}, - {{false, true, false, true, false, true, true, false, false, false, true, false, true}}, - {{true, false, false, true, true, true, true, true, false, false, true, true, false}}, - {{true, true, true, true, true, false, true, false, false, true, false, false, false}}, - {{false, false, false, false, true, false, true, false, false, true, false, false, true}}, - {{true, false, false, false, false, true, false, true, false, true, true, false, false}}, - {{true, true, true, true, false, false, true, false, false, true, true, false, false}}, - {{false, true, false, false, true, true, false, false, false, true, true, true, true}}, - {{false, false, false, false, false, false, false, false, true, true, false, false, false}}, - {{true, false, false, false, false, false, false, false, false, false, true, false, false}}, - {{false, false, true, true, false, true, false, true, false, false, true, true, false}}, - {{true, false, true, true, false, false, true, false, false, false, true, true, false}}, - {{false, true, true, true, false, false, true, true, true, true, false, false, false}}, - {{false, false, true, false, true, true, true, false, false, true, false, true, false}}, - {{true, true, false, false, true, true, true, true, true, false, true, true, false}}, - {{true, false, false, true, false, false, true, false, false, false, true, false, true}}, - {{false, true, true, true, false, false, false, true, false, false, false, false, false}}, - {{false, false, true, true, false, false, true, false, false, false, false, true, false}}, - {{false, false, true, false, false, false, true, false, false, true, true, true, false}}}}; + const std::array, 63> G2_register_shifted = + {std::bitset<13>(std::string("1010111111111")), + std::bitset<13>(std::string("1111000101011")), + std::bitset<13>(std::string("1011110001010")), + std::bitset<13>(std::string("1111111111011")), + std::bitset<13>(std::string("1100100011111")), + std::bitset<13>(std::string("1001001100100")), + std::bitset<13>(std::string("1111111010010")), + std::bitset<13>(std::string("1110111111101")), + std::bitset<13>(std::string("1010000000010")), + std::bitset<13>(std::string("0010000011011")), + std::bitset<13>(std::string("1110101110000")), + std::bitset<13>(std::string("0010110011110")), + std::bitset<13>(std::string("0110010010101")), + std::bitset<13>(std::string("0111000100110")), + std::bitset<13>(std::string("1000110001001")), + std::bitset<13>(std::string("1110001111100")), + std::bitset<13>(std::string("0010011000101")), + std::bitset<13>(std::string("0000011101100")), + std::bitset<13>(std::string("1000101010111")), + std::bitset<13>(std::string("0001011011110")), + std::bitset<13>(std::string("0010000101101")), + std::bitset<13>(std::string("0010110001010")), + std::bitset<13>(std::string("0001011001111")), + std::bitset<13>(std::string("0011001100010")), + std::bitset<13>(std::string("0011101001000")), + std::bitset<13>(std::string("0100100101001")), + std::bitset<13>(std::string("1011011010011")), + std::bitset<13>(std::string("1010111100010")), + std::bitset<13>(std::string("0001011110101")), + std::bitset<13>(std::string("0111111111111")), + std::bitset<13>(std::string("0110110001111")), + std::bitset<13>(std::string("1010110001001")), + std::bitset<13>(std::string("1001010101011")), + std::bitset<13>(std::string("1100110100101")), + std::bitset<13>(std::string("1101001011101")), + std::bitset<13>(std::string("1111101110100")), + std::bitset<13>(std::string("0010101100111")), + std::bitset<13>(std::string("1110100010000")), + std::bitset<13>(std::string("1101110010000")), + std::bitset<13>(std::string("1101011001110")), + std::bitset<13>(std::string("1000000110100")), + std::bitset<13>(std::string("0101111011001")), + std::bitset<13>(std::string("0110110111100")), + std::bitset<13>(std::string("1101001110001")), + std::bitset<13>(std::string("0011100100010")), + std::bitset<13>(std::string("0101011000101")), + std::bitset<13>(std::string("1001111100110")), + std::bitset<13>(std::string("1111101001000")), + std::bitset<13>(std::string("0000101001001")), + std::bitset<13>(std::string("1000010101100")), + std::bitset<13>(std::string("1111001001100")), + std::bitset<13>(std::string("0100110001111")), + std::bitset<13>(std::string("0000000011000")), + std::bitset<13>(std::string("1000000000100")), + std::bitset<13>(std::string("0011010100110")), + std::bitset<13>(std::string("1011001000110")), + std::bitset<13>(std::string("0111001111000")), + std::bitset<13>(std::string("0010111001010")), + std::bitset<13>(std::string("1100111110110")), + std::bitset<13>(std::string("1001001000101")), + std::bitset<13>(std::string("0111000100000")), + std::bitset<13>(std::string("0011001000010")), + std::bitset<13>(std::string("0010001001110"))}; // A simple error check if ((prn_idx < 0) || (prn_idx > 63)) @@ -120,7 +125,14 @@ void beidou_b3i_code_gen_int(gsl::span _dest, signed int _prn, unsigned int // Assign shifted G2 register based on prn number G2_register = G2_register_shifted[prn_idx]; - std::reverse(G2_register.begin(), G2_register.end()); + + // std::reverse(G2_register.begin(), G2_register.end()); + for (std::size_t i = 0; i < 6; ++i) + { + bool t = G2_register[i]; + G2_register[i] = G2_register[13 - i - 1]; + G2_register[13 - i - 1] = t; + } // Generate G1 and G2 Register for (lcv = 0; lcv < _code_length; lcv++) @@ -145,7 +157,7 @@ void beidou_b3i_code_gen_int(gsl::span _dest, signed int _prn, unsigned int // Reset G1 register if sequence found if (G1_register == G1_register_reset) { - G1_register = {{true, true, true, true, true, true, true, true, true, true, true, true, true}}; + G1_register = std::move(std::bitset<13>{}.set()); // All true {{true, true, true, true, true, true, true, true, true, true, true, true, true}}; } } diff --git a/src/algorithms/libs/gps_sdr_signal_processing.cc b/src/algorithms/libs/gps_sdr_signal_processing.cc index a11ec8bd2..1a4483200 100644 --- a/src/algorithms/libs/gps_sdr_signal_processing.cc +++ b/src/algorithms/libs/gps_sdr_signal_processing.cc @@ -32,16 +32,17 @@ #include "gps_sdr_signal_processing.h" #include +#include auto auxCeil = [](float x) { return static_cast(static_cast((x) + 1)); }; void gps_l1_ca_code_gen_int(gsl::span _dest, int32_t _prn, uint32_t _chip_shift) { const uint32_t _code_length = 1023; - std::array G1{}; - std::array G2{}; - std::array G1_register{}; - std::array G2_register{}; + std::bitset<_code_length> G1{}; + std::bitset<_code_length> G2{}; + std::bitset<10> G1_register{}; + std::bitset<10> G2_register{}; bool feedback1, feedback2; bool aux; uint32_t lcv, lcv2;