|
|
|
@@ -32,85 +32,90 @@
|
|
|
|
|
|
|
|
|
|
#include "beidou_b3i_signal_processing.h"
|
|
|
|
|
#include <array>
|
|
|
|
|
#include <bitset>
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
|
|
auto auxCeil = [](float x) { return static_cast<int>(static_cast<long>((x) + 1)); };
|
|
|
|
|
|
|
|
|
|
void beidou_b3i_code_gen_int(gsl::span<int> _dest, signed int _prn, unsigned int _chip_shift)
|
|
|
|
|
{
|
|
|
|
|
const unsigned int _code_length = 10230;
|
|
|
|
|
std::array<bool, _code_length> G1{};
|
|
|
|
|
std::array<bool, _code_length> G2{};
|
|
|
|
|
std::array<bool, 13> G1_register = {{true, true, true, true, true, true, true, true, true, true, true, true, true}};
|
|
|
|
|
std::array<bool, 13> G2_register = {{true, true, true, true, true, true, true, true, true, true, true, true, true}};
|
|
|
|
|
std::array<bool, 13> 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<std::array<bool, 13>, 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<std::bitset<13>, 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<int> _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<int> _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}};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|