1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-12-15 04:30:33 +00:00

Correct Carrier Phase observable for inverted PLL lock in L2,L5 E1, and E5

This commit is contained in:
Javier 2020-03-09 11:38:48 +01:00
parent 4a9dcff5b9
commit f73a4ac950
5 changed files with 39 additions and 0 deletions

View File

@ -757,6 +757,12 @@ int galileo_telemetry_decoder_gs::general_work(int noutput_items __attribute__((
// todo: Galileo to GPS time conversion should be moved to observable block.
// current_symbol.TOW_at_current_symbol_ms -= delta_t; // Galileo to GPS TOW
if (flag_PLL_180_deg_phase_locked == true)
{
// correct the accumulated phase for the Costas loop phase shift, if required
current_symbol.Carrier_phase_rads += GALILEO_PI;
}
if (d_dump == true)
{
// MULTIPLEXED FILE RECORDING - Record results to file

View File

@ -74,6 +74,7 @@ gps_l2c_telemetry_decoder_gs::gps_l2c_telemetry_decoder_gs(
cnav_msg_decoder_init(&d_cnav_decoder);
d_sample_counter = 0;
flag_PLL_180_deg_phase_locked = false;
}
@ -175,6 +176,14 @@ int gps_l2c_telemetry_decoder_gs::general_work(int noutput_items __attribute__((
// check if new CNAV frame is available
if (flag_new_cnav_frame == true)
{
if (d_cnav_decoder.part1.invert == true or d_cnav_decoder.part1.invert == true)
{
flag_PLL_180_deg_phase_locked = true;
}
else
{
flag_PLL_180_deg_phase_locked = false;
}
std::bitset<GPS_L2_CNAV_DATA_PAGE_BITS> raw_bits;
// Expand packet bits to bitsets. Notice the reverse order of the bits sequence, required by the CNAV message decoder
for (uint32_t i = 0; i < GPS_L2_CNAV_DATA_PAGE_BITS; i++)
@ -225,6 +234,14 @@ int gps_l2c_telemetry_decoder_gs::general_work(int noutput_items __attribute__((
d_flag_valid_word = false;
}
}
if (flag_PLL_180_deg_phase_locked == true)
{
// correct the accumulated phase for the Costas loop phase shift, if required
current_synchro_data.Carrier_phase_rads += GPS_L2_PI;
}
current_synchro_data.TOW_at_current_symbol_ms = round(d_TOW_at_current_symbol * 1000.0);
current_synchro_data.Flag_valid_word = d_flag_valid_word;

View File

@ -83,6 +83,7 @@ private:
uint64_t d_last_valid_preamble;
uint32_t d_max_symbols_without_valid_frame;
bool flag_PLL_180_deg_phase_locked;
double d_TOW_at_current_symbol;
double d_TOW_at_Preamble;
bool d_flag_valid_word;

View File

@ -69,6 +69,7 @@ gps_l5_telemetry_decoder_gs::gps_l5_telemetry_decoder_gs(
cnav_msg_decoder_init(&d_cnav_decoder);
d_sample_counter = 0;
flag_PLL_180_deg_phase_locked = false;
}
@ -167,6 +168,14 @@ int gps_l5_telemetry_decoder_gs::general_work(int noutput_items __attribute__((u
// check if new CNAV frame is available
if (cnav_msg_decoder_add_symbol(&d_cnav_decoder, symbol_clip, &msg, &delay) == true)
{
if (d_cnav_decoder.part1.invert == true or d_cnav_decoder.part1.invert == true)
{
flag_PLL_180_deg_phase_locked = true;
}
else
{
flag_PLL_180_deg_phase_locked = false;
}
std::bitset<GPS_L5_CNAV_DATA_PAGE_BITS> raw_bits;
// Expand packet bits to bitsets. Notice the reverse order of the bits sequence, required by the CNAV message decoder
for (uint32_t i = 0; i < GPS_L5_CNAV_DATA_PAGE_BITS; i++)
@ -238,6 +247,11 @@ int gps_l5_telemetry_decoder_gs::general_work(int noutput_items __attribute__((u
if (d_flag_valid_word == true)
{
if (flag_PLL_180_deg_phase_locked == true)
{
// correct the accumulated phase for the Costas loop phase shift, if required
current_synchro_data.Carrier_phase_rads += GPS_L5_PI;
}
current_synchro_data.TOW_at_current_symbol_ms = d_TOW_at_current_symbol_ms;
current_synchro_data.Flag_valid_word = d_flag_valid_word;

View File

@ -75,6 +75,7 @@ private:
cnav_msg_decoder_t d_cnav_decoder{};
bool flag_PLL_180_deg_phase_locked;
uint32_t d_TOW_at_current_symbol_ms;
uint32_t d_TOW_at_Preamble_ms;
bool d_flag_valid_word;