From 8e4a26887cf8b2678dae7dbcaff695a8a2301d73 Mon Sep 17 00:00:00 2001 From: Marc Majoral Date: Tue, 5 Oct 2021 21:18:43 +0200 Subject: [PATCH 1/2] updated the FPGA tracking module following the changes made in commit ed93af11ac5bfc674c12bf688e254c725537a81b (Oct 21, 2020) to the SW tracking (added tracking monitors) --- .../dll_pll_veml_tracking_fpga.cc | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc index fce909dff..9dcade032 100644 --- a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc +++ b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc @@ -1493,6 +1493,7 @@ int dll_pll_veml_tracking_fpga::general_work(int noutput_items __attribute__((un auto **out = reinterpret_cast(&output_items[0]); Gnss_Synchro current_synchro_data = Gnss_Synchro(); current_synchro_data.Flag_valid_symbol_output = false; + bool loss_of_lock = false; while ((!current_synchro_data.Flag_valid_symbol_output) && (!d_stop_tracking)) { @@ -1616,10 +1617,9 @@ int dll_pll_veml_tracking_fpga::general_work(int noutput_items __attribute__((un if (!cn0_and_tracking_lock_status(d_code_period)) { clear_tracking_vars(); - d_state = 1; // loss-of-lock detected - - // send something to let the scheduler know that it has to keep on calling general work and to finish the loop - // current_synchro_data.Flag_valid_symbol_output=1; + d_state = 1; // loss-of-lock detected + loss_of_lock = true; // Set the flag so that the negative indication can be generated + current_synchro_data = *d_acquisition_gnss_synchro; // Fill in the Gnss_Synchro object with basic info } else { @@ -1818,10 +1818,9 @@ int dll_pll_veml_tracking_fpga::general_work(int noutput_items __attribute__((un if (!cn0_and_tracking_lock_status(d_code_period * static_cast(d_trk_parameters.extend_correlation_symbols))) { clear_tracking_vars(); - d_state = 1; // loss-of-lock detected - - // send something to let the scheduler know that it has to keep on calling general work and to finish the loop - // current_synchro_data.Flag_valid_symbol_output=1; + d_state = 1; // loss-of-lock detected + loss_of_lock = true; // Set the flag so that the negative indication can be generated + current_synchro_data = *d_acquisition_gnss_synchro; // Fill in the Gnss_Synchro object with basic info } else { @@ -1941,10 +1940,9 @@ int dll_pll_veml_tracking_fpga::general_work(int noutput_items __attribute__((un if (!cn0_and_tracking_lock_status(d_code_period * static_cast(d_trk_parameters.extend_correlation_symbols))) { clear_tracking_vars(); - d_state = 1; // loss-of-lock detected - - // send something to let the scheduler know that it has to keep on calling general work and to finish the loop - // current_synchro_data.Flag_valid_symbol_output=1; + d_state = 1; // loss-of-lock detected + loss_of_lock = true; // Set the flag so that the negative indication can be generated + current_synchro_data = *d_acquisition_gnss_synchro; // Fill in the Gnss_Synchro object with basic info } else { @@ -1999,10 +1997,11 @@ int dll_pll_veml_tracking_fpga::general_work(int noutput_items __attribute__((un } } - if (current_synchro_data.Flag_valid_symbol_output) + if (current_synchro_data.Flag_valid_symbol_output || loss_of_lock) { current_synchro_data.fs = static_cast(d_trk_parameters.fs_in); current_synchro_data.Tracking_sample_counter = d_sample_counter_next; // d_sample_counter; + current_synchro_data.Flag_valid_symbol_output = !loss_of_lock; *out[0] = current_synchro_data; return 1; } From 299be53c22f7de6ecfea35cac971735219cf5c4c Mon Sep 17 00:00:00 2001 From: Marc Majoral Date: Tue, 5 Oct 2021 21:38:32 +0200 Subject: [PATCH 2/2] updated the FPGA tracking module following the changes made in commit 58c2a432393caadafdd352b7a5b66c4a209d2d62 (Oct 4, 2021) for the SW tracking (improving the reliability of GPS L1 CA symbol synchronization) --- .../gnuradio_blocks/dll_pll_veml_tracking_fpga.cc | 14 ++++++++++++-- .../gnuradio_blocks/dll_pll_veml_tracking_fpga.h | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc index 9dcade032..3f54943c4 100644 --- a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc +++ b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc @@ -132,8 +132,8 @@ dll_pll_veml_tracking_fpga::dll_pll_veml_tracking_fpga(const Dll_Pll_Conf_Fpga & d_trk_parameters.y_intercept = 1.0; // symbol integration: 20 trk symbols (20 ms) = 1 tlm bit // set the bit transition pattern in secondary code to obtain bit synchronization - d_secondary_code_length = static_cast(GPS_CA_BIT_TRANSITION_SYMBOLS_LENGTH_SYMBOLS); - d_secondary_code_string = GPS_CA_BIT_TRANSITION_SYMBOLS_STR; + d_secondary_code_length = static_cast(GPS_CA_PREAMBLE_LENGTH_SYMBOLS); + d_secondary_code_string = GPS_CA_PREAMBLE_SYMBOLS_STR; d_symbols_per_bit = GPS_CA_TELEMETRY_SYMBOLS_PER_BIT; } else if (d_signal_type == "2S") @@ -466,6 +466,7 @@ dll_pll_veml_tracking_fpga::dll_pll_veml_tracking_fpga(const Dll_Pll_Conf_Fpga & d_stop_tracking = false; d_acc_carrier_phase_initialized = false; + d_Flag_PLL_180_deg_phase_locked = false; } @@ -585,6 +586,14 @@ bool dll_pll_veml_tracking_fpga::acquire_secondary() if (abs(corr_value) == static_cast(d_secondary_code_length)) { + if (corr_value < 0) + { + d_Flag_PLL_180_deg_phase_locked = true; + } + else + { + d_Flag_PLL_180_deg_phase_locked = false; + } return true; } @@ -2002,6 +2011,7 @@ int dll_pll_veml_tracking_fpga::general_work(int noutput_items __attribute__((un current_synchro_data.fs = static_cast(d_trk_parameters.fs_in); current_synchro_data.Tracking_sample_counter = d_sample_counter_next; // d_sample_counter; current_synchro_data.Flag_valid_symbol_output = !loss_of_lock; + current_synchro_data.Flag_PLL_180_deg_phase_locked = d_Flag_PLL_180_deg_phase_locked; *out[0] = current_synchro_data; return 1; } diff --git a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.h b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.h index d00385fb9..fae0911d6 100644 --- a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.h +++ b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.h @@ -240,6 +240,7 @@ private: bool d_current_extended_correlation_in_fpga; bool d_stop_tracking; bool d_sc_demodulate_enabled; + bool d_Flag_PLL_180_deg_phase_locked; };