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

Fixed Carrier phase observable initialization. GNSS-SDR Observables quality verified with RTK positioning modes using RINEX files

This commit is contained in:
Javier 2020-03-07 12:57:48 +01:00
parent 79a47a8a49
commit e4dd4349c6
3 changed files with 19 additions and 1 deletions

View File

@ -1945,7 +1945,8 @@ void rtklib_pvt_gs::initialize_and_apply_carrier_phase_offset()
default:
break;
}
initial_carrier_phase_offset_estimation_rads.at(observables_iter->second.Channel_ID) = (PI_2 * observables_iter->second.Pseudorange_m / wavelength_m) - observables_iter->second.Carrier_phase_rads;
double wrap_carrier_phase_rad = fmod(observables_iter->second.Carrier_phase_rads, PI_2);
initial_carrier_phase_offset_estimation_rads.at(observables_iter->second.Channel_ID) = PI_2 * round(observables_iter->second.Pseudorange_m / wavelength_m) - observables_iter->second.Carrier_phase_rads + wrap_carrier_phase_rad;
channel_initialized.at(observables_iter->second.Channel_ID) = true;
DLOG(INFO) << "initialized carrier phase at channel " << observables_iter->second.Channel_ID;
}

View File

@ -529,6 +529,7 @@ dll_pll_veml_tracking::dll_pll_veml_tracking(const Dll_Pll_Conf &conf_) : gr::bl
}
}
d_corrected_doppler = false;
d_acc_carrier_phase_initialized = false;
}
@ -757,6 +758,7 @@ void dll_pll_veml_tracking::start_tracking()
d_pull_in_transitory = true;
d_Prompt_circular_buffer.clear();
d_corrected_doppler = false;
d_acc_carrier_phase_initialized = false;
}
@ -1021,6 +1023,16 @@ void dll_pll_veml_tracking::run_dll_pll()
}
void dll_pll_veml_tracking::check_carrier_phase_coherent_initialization(uint64_t sample_counter)
{
if (d_acc_carrier_phase_initialized == false)
{
double T_rx = static_cast<double>(sample_counter) / trk_parameters.fs_in;
d_acc_carrier_phase_rad = -d_rem_carr_phase_rad;
d_acc_carrier_phase_initialized = true;
}
}
void dll_pll_veml_tracking::clear_tracking_vars()
{
std::fill_n(d_correlator_outs.begin(), d_n_correlator_taps, gr_complex(0.0, 0.0));
@ -1819,6 +1831,7 @@ int dll_pll_veml_tracking::general_work(int noutput_items __attribute__((unused)
do_correlation_step(in);
save_correlation_results();
// check lock status
if (!cn0_and_tracking_lock_status(d_code_period * static_cast<double>(trk_parameters.extend_correlation_symbols)))
{
@ -1829,6 +1842,7 @@ int dll_pll_veml_tracking::general_work(int noutput_items __attribute__((unused)
{
run_dll_pll();
update_tracking_vars();
check_carrier_phase_coherent_initialization(d_sample_counter + static_cast<uint64_t>(d_current_prn_length_samples));
if (d_current_data_symbol == 0)
{
// enable write dump file this cycle (valid DLL/PLL cycle)

View File

@ -78,6 +78,8 @@ private:
void log_data();
int32_t save_matfile();
void check_carrier_phase_coherent_initialization(uint64_t sample_counter);
// tracking configuration vars
Dll_Pll_Conf trk_parameters;
bool d_veml;
@ -107,6 +109,7 @@ private:
boost::circular_buffer<float> d_dll_filt_history;
// tracking state machine
int32_t d_state;
bool d_acc_carrier_phase_initialized;
// Integration period in samples
int32_t d_correlation_length_ms;