mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-15 12:40:35 +00:00
bds b1i: Adding geo satellites tracking and setting up structure for d2 nav decoding
This commit is contained in:
parent
0c4b8b25f1
commit
7cdd2ee477
@ -136,6 +136,8 @@ beidou_b1i_telemetry_decoder_cc::beidou_b1i_telemetry_decoder_cc(
|
|||||||
d_channel = 0;
|
d_channel = 0;
|
||||||
flag_SOW_set = false;
|
flag_SOW_set = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -265,6 +267,7 @@ void beidou_b1i_telemetry_decoder_cc::decode_subframe(double *frame_symbols, int
|
|||||||
if (d_nav.have_new_ephemeris() == true)
|
if (d_nav.have_new_ephemeris() == true)
|
||||||
{
|
{
|
||||||
// get object for this SV (mandatory)
|
// get object for this SV (mandatory)
|
||||||
|
d_nav.i_satellite_PRN = d_satellite.get_PRN();
|
||||||
std::shared_ptr<Beidou_Dnav_Ephemeris> tmp_obj = std::make_shared<Beidou_Dnav_Ephemeris>(d_nav.get_ephemeris());
|
std::shared_ptr<Beidou_Dnav_Ephemeris> tmp_obj = std::make_shared<Beidou_Dnav_Ephemeris>(d_nav.get_ephemeris());
|
||||||
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
|
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
|
||||||
LOG(INFO) << "BEIDOU DNAV Ephemeris have been received in channel" << d_channel << " from satellite " << d_satellite;
|
LOG(INFO) << "BEIDOU DNAV Ephemeris have been received in channel" << d_channel << " from satellite " << d_satellite;
|
||||||
|
@ -98,7 +98,7 @@ dll_pll_veml_tracking::dll_pll_veml_tracking(const Dll_Pll_Conf &conf_) : gr::bl
|
|||||||
d_code_chip_rate = 0.0;
|
d_code_chip_rate = 0.0;
|
||||||
d_secondary_code_length = 0U;
|
d_secondary_code_length = 0U;
|
||||||
d_secondary_code_string = nullptr;
|
d_secondary_code_string = nullptr;
|
||||||
d_gps_l1ca_preambles_symbols = nullptr;
|
d_preambles_symbols = nullptr;
|
||||||
signal_type = std::string(trk_parameters.signal);
|
signal_type = std::string(trk_parameters.signal);
|
||||||
|
|
||||||
std::map<std::string, std::string> map_signal_pretty_name;
|
std::map<std::string, std::string> map_signal_pretty_name;
|
||||||
@ -134,7 +134,8 @@ dll_pll_veml_tracking::dll_pll_veml_tracking(const Dll_Pll_Conf &conf_) : gr::bl
|
|||||||
uint16_t preambles_bits[GPS_CA_PREAMBLE_LENGTH_BITS] = GPS_PREAMBLE;
|
uint16_t preambles_bits[GPS_CA_PREAMBLE_LENGTH_BITS] = GPS_PREAMBLE;
|
||||||
|
|
||||||
// preamble bits to sampled symbols
|
// preamble bits to sampled symbols
|
||||||
d_gps_l1ca_preambles_symbols = static_cast<int32_t *>(volk_gnsssdr_malloc(GPS_CA_PREAMBLE_LENGTH_SYMBOLS * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
d_preamble_length_symbols = GPS_CA_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
|
d_preambles_symbols = static_cast<int32_t *>(volk_gnsssdr_malloc(GPS_CA_PREAMBLE_LENGTH_SYMBOLS * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
||||||
int32_t n = 0;
|
int32_t n = 0;
|
||||||
for (uint16_t preambles_bit : preambles_bits)
|
for (uint16_t preambles_bit : preambles_bits)
|
||||||
{
|
{
|
||||||
@ -142,11 +143,11 @@ dll_pll_veml_tracking::dll_pll_veml_tracking(const Dll_Pll_Conf &conf_) : gr::bl
|
|||||||
{
|
{
|
||||||
if (preambles_bit == 1)
|
if (preambles_bit == 1)
|
||||||
{
|
{
|
||||||
d_gps_l1ca_preambles_symbols[n] = 1;
|
d_preambles_symbols[n] = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
d_gps_l1ca_preambles_symbols[n] = -1;
|
d_preambles_symbols[n] = -1;
|
||||||
}
|
}
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
@ -278,19 +279,19 @@ dll_pll_veml_tracking::dll_pll_veml_tracking(const Dll_Pll_Conf &conf_) : gr::bl
|
|||||||
systemName = "Beidou";
|
systemName = "Beidou";
|
||||||
if (signal_type == "B1")
|
if (signal_type == "B1")
|
||||||
{
|
{
|
||||||
d_signal_carrier_freq = BEIDOU_B1I_FREQ_HZ;
|
// GEO Satellites use different secondary code
|
||||||
d_code_period = BEIDOU_B1I_CODE_PERIOD;
|
d_signal_carrier_freq = BEIDOU_B1I_FREQ_HZ;
|
||||||
d_code_chip_rate = BEIDOU_B1I_CODE_RATE_HZ;
|
d_code_period = BEIDOU_B1I_CODE_PERIOD;
|
||||||
d_code_length_chips = static_cast<unsigned int>(BEIDOU_B1I_CODE_LENGTH_CHIPS);
|
d_code_chip_rate = BEIDOU_B1I_CODE_RATE_HZ;
|
||||||
d_symbols_per_bit = BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT;
|
d_code_length_chips = static_cast<unsigned int>(BEIDOU_B1I_CODE_LENGTH_CHIPS);
|
||||||
d_correlation_length_ms = 1;
|
d_symbols_per_bit = BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT;
|
||||||
d_code_samples_per_chip = 1;
|
d_correlation_length_ms = 1;
|
||||||
d_secondary = true;
|
d_code_samples_per_chip = 1;
|
||||||
trk_parameters.track_pilot = false;
|
d_secondary = true;
|
||||||
interchange_iq = false;
|
trk_parameters.track_pilot = false;
|
||||||
d_secondary_code_length = static_cast<unsigned int>(BEIDOU_B1I_SECONDARY_CODE_LENGTH);
|
interchange_iq = false;
|
||||||
d_secondary_code_string = const_cast<std::string *>(&BEIDOU_B1I_SECONDARY_CODE_STR);
|
d_secondary_code_length = static_cast<unsigned int>(BEIDOU_B1I_SECONDARY_CODE_LENGTH);
|
||||||
|
d_secondary_code_string = const_cast<std::string *>(&BEIDOU_B1I_SECONDARY_CODE_STR);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -573,6 +574,42 @@ void dll_pll_veml_tracking::start_tracking()
|
|||||||
else if (systemName == "Beidou" and signal_type == "B1")
|
else if (systemName == "Beidou" and signal_type == "B1")
|
||||||
{
|
{
|
||||||
beidou_b1i_code_gen_float(d_tracking_code, d_acquisition_gnss_synchro->PRN, 0);
|
beidou_b1i_code_gen_float(d_tracking_code, d_acquisition_gnss_synchro->PRN, 0);
|
||||||
|
// Update secondary code settings for geo satellites
|
||||||
|
if(d_acquisition_gnss_synchro->PRN > 0 and d_acquisition_gnss_synchro->PRN < 6)
|
||||||
|
{
|
||||||
|
d_symbols_per_bit = 2;
|
||||||
|
d_correlation_length_ms = 1;
|
||||||
|
d_code_samples_per_chip = 1;
|
||||||
|
d_secondary = false;
|
||||||
|
trk_parameters.track_pilot = false;
|
||||||
|
interchange_iq = false;
|
||||||
|
d_secondary_code_length = 0;
|
||||||
|
d_secondary_code_string = const_cast<std::string *>(&BEIDOU_B1I_D2_SECONDARY_CODE_STR);
|
||||||
|
|
||||||
|
// preamble bits to sampled symbols
|
||||||
|
d_preamble_length_symbols = 22;
|
||||||
|
d_preambles_symbols = static_cast<int32_t *>(volk_gnsssdr_malloc(22 * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
||||||
|
int32_t n = 0;
|
||||||
|
uint16_t preambles_bits[BEIDOU_B1I_PREAMBLE_LENGTH_BITS] = {1,1,1,0,0,0,1,0,0,1,0};
|
||||||
|
for (uint16_t preambles_bit : preambles_bits)
|
||||||
|
{
|
||||||
|
for (uint32_t j = 0; j < d_symbols_per_bit; j++)
|
||||||
|
{
|
||||||
|
if (preambles_bit == 1)
|
||||||
|
{
|
||||||
|
d_preambles_symbols[n] = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d_preambles_symbols[n] = -1;
|
||||||
|
}
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
d_symbol_history.resize(22); // Change fixed buffer size
|
||||||
|
d_symbol_history.clear();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
multicorrelator_cpu.set_local_code_and_taps(d_code_samples_per_chip * d_code_length_chips, d_tracking_code, d_local_code_shift_chips);
|
multicorrelator_cpu.set_local_code_and_taps(d_code_samples_per_chip * d_code_length_chips, d_tracking_code, d_local_code_shift_chips);
|
||||||
@ -621,7 +658,7 @@ dll_pll_veml_tracking::~dll_pll_veml_tracking()
|
|||||||
{
|
{
|
||||||
if (signal_type == "1C")
|
if (signal_type == "1C")
|
||||||
{
|
{
|
||||||
volk_gnsssdr_free(d_gps_l1ca_preambles_symbols);
|
volk_gnsssdr_free(d_preambles_symbols);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (d_dump_file.is_open())
|
if (d_dump_file.is_open())
|
||||||
@ -1470,21 +1507,21 @@ int dll_pll_veml_tracking::general_work(int noutput_items __attribute__((unused)
|
|||||||
d_symbol_history.push_back(d_Prompt->real());
|
d_symbol_history.push_back(d_Prompt->real());
|
||||||
//******* preamble correlation ********
|
//******* preamble correlation ********
|
||||||
int32_t corr_value = 0;
|
int32_t corr_value = 0;
|
||||||
if ((d_symbol_history.size() == GPS_CA_PREAMBLE_LENGTH_SYMBOLS)) // and (d_make_correlation or !d_flag_frame_sync))
|
if ((d_symbol_history.size() == d_preamble_length_symbols)) // and (d_make_correlation or !d_flag_frame_sync))
|
||||||
{
|
{
|
||||||
for (uint32_t i = 0; i < GPS_CA_PREAMBLE_LENGTH_SYMBOLS; i++)
|
for (uint32_t i = 0; i < d_preamble_length_symbols; i++)
|
||||||
{
|
{
|
||||||
if (d_symbol_history.at(i) < 0) // symbols clipping
|
if (d_symbol_history.at(i) < 0) // symbols clipping
|
||||||
{
|
{
|
||||||
corr_value -= d_gps_l1ca_preambles_symbols[i];
|
corr_value -= d_preambles_symbols[i];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
corr_value += d_gps_l1ca_preambles_symbols[i];
|
corr_value += d_preambles_symbols[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (corr_value == GPS_CA_PREAMBLE_LENGTH_SYMBOLS)
|
if (corr_value == d_preamble_length_symbols)
|
||||||
{
|
{
|
||||||
//std::cout << "Preamble detected at tracking!" << std::endl;
|
//std::cout << "Preamble detected at tracking!" << std::endl;
|
||||||
next_state = true;
|
next_state = true;
|
||||||
@ -1533,6 +1570,7 @@ int dll_pll_veml_tracking::general_work(int noutput_items __attribute__((unused)
|
|||||||
current_synchro_data.Prompt_Q = static_cast<double>((*d_Prompt).imag());
|
current_synchro_data.Prompt_Q = static_cast<double>((*d_Prompt).imag());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
current_synchro_data.Code_phase_samples = d_rem_code_phase_samples;
|
current_synchro_data.Code_phase_samples = d_rem_code_phase_samples;
|
||||||
current_synchro_data.Carrier_phase_rads = d_acc_carrier_phase_rad;
|
current_synchro_data.Carrier_phase_rads = d_acc_carrier_phase_rad;
|
||||||
current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz;
|
current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz;
|
||||||
|
@ -107,7 +107,8 @@ private:
|
|||||||
std::string *d_secondary_code_string;
|
std::string *d_secondary_code_string;
|
||||||
std::string signal_pretty_name;
|
std::string signal_pretty_name;
|
||||||
|
|
||||||
int32_t *d_gps_l1ca_preambles_symbols;
|
int32_t *d_preambles_symbols;
|
||||||
|
int32_t d_preamble_length_symbols;
|
||||||
boost::circular_buffer<float> d_symbol_history;
|
boost::circular_buffer<float> d_symbol_history;
|
||||||
|
|
||||||
//tracking state machine
|
//tracking state machine
|
||||||
|
@ -56,6 +56,7 @@ const double BEIDOU_B1I_CHIP_PERIOD = 4.8875e-07; //!< beidou b1I c
|
|||||||
const int BEIDOU_B1I_SECONDARY_CODE_LENGTH = 20;
|
const int BEIDOU_B1I_SECONDARY_CODE_LENGTH = 20;
|
||||||
const std::string BEIDOU_B1I_SECONDARY_CODE = "00000100110101001110";
|
const std::string BEIDOU_B1I_SECONDARY_CODE = "00000100110101001110";
|
||||||
const std::string BEIDOU_B1I_SECONDARY_CODE_STR = "00000100110101001110";
|
const std::string BEIDOU_B1I_SECONDARY_CODE_STR = "00000100110101001110";
|
||||||
|
const std::string BEIDOU_B1I_D2_SECONDARY_CODE_STR = "00";
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Maximum Time-Of-Arrival (TOA) difference between satellites for a receiver operated on Earth surface is 20 ms
|
* \brief Maximum Time-Of-Arrival (TOA) difference between satellites for a receiver operated on Earth surface is 20 ms
|
||||||
|
Loading…
Reference in New Issue
Block a user