mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-30 23:03:05 +00:00 
			
		
		
		
	Update rem_carrier_phase and minor changes
This commit is contained in:
		| @@ -57,7 +57,7 @@ GpsL1CaDllPllTracking::GpsL1CaDllPllTracking( | |||||||
|     int fs_in_deprecated = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); |     int fs_in_deprecated = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); | ||||||
|     int fs_in = configuration->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); |     int fs_in = configuration->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); | ||||||
|     trk_param.fs_in = fs_in; |     trk_param.fs_in = fs_in; | ||||||
|     trk_param.use_high_dynamics_resampler = configuration->property(role + ".high_dyn", false); |     trk_param.high_dyn = configuration->property(role + ".high_dyn", false); | ||||||
|     if (configuration->property(role + ".cp_smoother_length", 10) < 1) |     if (configuration->property(role + ".cp_smoother_length", 10) < 1) | ||||||
|         { |         { | ||||||
|             trk_param.smoother_length = 1; |             trk_param.smoother_length = 1; | ||||||
|   | |||||||
| @@ -356,7 +356,7 @@ dll_pll_veml_tracking::dll_pll_veml_tracking(const Dll_Pll_Conf &conf_) : gr::bl | |||||||
|         { |         { | ||||||
|             // Extra correlator for the data component |             // Extra correlator for the data component | ||||||
|             correlator_data_cpu.init(2 * trk_parameters.vector_length, 1); |             correlator_data_cpu.init(2 * trk_parameters.vector_length, 1); | ||||||
|             correlator_data_cpu.set_high_dynamics_resampler(trk_parameters.use_high_dynamics_resampler); |             correlator_data_cpu.set_high_dynamics_resampler(trk_parameters.high_dyn); | ||||||
|             d_data_code = static_cast<float *>(volk_gnsssdr_malloc(2 * d_code_length_chips * sizeof(float), volk_gnsssdr_get_alignment())); |             d_data_code = static_cast<float *>(volk_gnsssdr_malloc(2 * d_code_length_chips * sizeof(float), volk_gnsssdr_get_alignment())); | ||||||
|         } |         } | ||||||
|     else |     else | ||||||
| @@ -365,7 +365,7 @@ dll_pll_veml_tracking::dll_pll_veml_tracking(const Dll_Pll_Conf &conf_) : gr::bl | |||||||
|         } |         } | ||||||
|  |  | ||||||
|     // --- Initializations --- |     // --- Initializations --- | ||||||
|     multicorrelator_cpu.set_high_dynamics_resampler(trk_parameters.use_high_dynamics_resampler); |     multicorrelator_cpu.set_high_dynamics_resampler(trk_parameters.high_dyn); | ||||||
|     // Initial code frequency basis of NCO |     // Initial code frequency basis of NCO | ||||||
|     d_code_freq_chips = d_code_chip_rate; |     d_code_freq_chips = d_code_chip_rate; | ||||||
|     // Residual code phase (in chips) |     // Residual code phase (in chips) | ||||||
| @@ -717,6 +717,7 @@ void dll_pll_veml_tracking::do_correlation_step(const gr_complex *input_samples) | |||||||
|     // ################# CARRIER WIPEOFF AND CORRELATORS ############################## |     // ################# CARRIER WIPEOFF AND CORRELATORS ############################## | ||||||
|     // perform carrier wipe-off and compute Early, Prompt and Late correlation |     // perform carrier wipe-off and compute Early, Prompt and Late correlation | ||||||
|     multicorrelator_cpu.set_input_output_vectors(d_correlator_outs, input_samples); |     multicorrelator_cpu.set_input_output_vectors(d_correlator_outs, input_samples); | ||||||
|  |     float tmp_f = d_rem_carr_phase_rad; | ||||||
|     multicorrelator_cpu.Carrier_wipeoff_multicorrelator_resampler( |     multicorrelator_cpu.Carrier_wipeoff_multicorrelator_resampler( | ||||||
|         d_rem_carr_phase_rad, |         d_rem_carr_phase_rad, | ||||||
|         d_carrier_phase_step_rad, d_carrier_phase_rate_step_rad, |         d_carrier_phase_step_rad, d_carrier_phase_rate_step_rad, | ||||||
| @@ -730,7 +731,7 @@ void dll_pll_veml_tracking::do_correlation_step(const gr_complex *input_samples) | |||||||
|         { |         { | ||||||
|             correlator_data_cpu.set_input_output_vectors(d_Prompt_Data, input_samples); |             correlator_data_cpu.set_input_output_vectors(d_Prompt_Data, input_samples); | ||||||
|             correlator_data_cpu.Carrier_wipeoff_multicorrelator_resampler( |             correlator_data_cpu.Carrier_wipeoff_multicorrelator_resampler( | ||||||
|                 d_rem_carr_phase_rad, |                 tmp_f, | ||||||
|                 d_carrier_phase_step_rad, d_carrier_phase_rate_step_rad, |                 d_carrier_phase_step_rad, d_carrier_phase_rate_step_rad, | ||||||
|                 static_cast<float>(d_rem_code_phase_chips) * static_cast<float>(d_code_samples_per_chip), |                 static_cast<float>(d_rem_code_phase_chips) * static_cast<float>(d_code_samples_per_chip), | ||||||
|                 static_cast<float>(d_code_phase_step_chips) * static_cast<float>(d_code_samples_per_chip), |                 static_cast<float>(d_code_phase_step_chips) * static_cast<float>(d_code_samples_per_chip), | ||||||
| @@ -814,7 +815,7 @@ void dll_pll_veml_tracking::update_tracking_vars() | |||||||
|     cp_diff += d_carrier_phase_step_rad;  // The new cp value is added to the previous in order to obtain the difference |     cp_diff += d_carrier_phase_step_rad;  // The new cp value is added to the previous in order to obtain the difference | ||||||
|     // carrier phase rate step (NCO phase increment rate per sample) [rads/sample^2] |     // carrier phase rate step (NCO phase increment rate per sample) [rads/sample^2] | ||||||
|     cp_diff /= static_cast<double>(d_current_prn_length_samples); |     cp_diff /= static_cast<double>(d_current_prn_length_samples); | ||||||
|     if (trk_parameters.use_high_dynamics_resampler) |     if (trk_parameters.high_dyn) | ||||||
|         { |         { | ||||||
|             d_cp_history.push_back(cp_diff); |             d_cp_history.push_back(cp_diff); | ||||||
|             if (d_cp_history.full()) |             if (d_cp_history.full()) | ||||||
| @@ -823,11 +824,14 @@ void dll_pll_veml_tracking::update_tracking_vars() | |||||||
|                 } |                 } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |     // Now the remnant carrier phase is computed in the Carrier Wipeoff function | ||||||
|     // remnant carrier phase to prevent overflow in the code NCO |     // remnant carrier phase to prevent overflow in the code NCO | ||||||
|     d_rem_carr_phase_rad += d_carrier_phase_step_rad * static_cast<double>(d_current_prn_length_samples); |     //d_rem_carr_phase_rad += (d_carrier_phase_step_rad * static_cast<double>(d_current_prn_length_samples) + 0.5 * d_carrier_phase_rate_step_rad * static_cast<double>(d_current_prn_length_samples) * static_cast<double>(d_current_prn_length_samples)); | ||||||
|     d_rem_carr_phase_rad = fmod(d_rem_carr_phase_rad, PI_2); |     //d_rem_carr_phase_rad = fmod(d_rem_carr_phase_rad, PI_2); | ||||||
|  |  | ||||||
|  |  | ||||||
|     // carrier phase accumulator |     // carrier phase accumulator | ||||||
|     d_acc_carrier_phase_rad -= d_carrier_phase_step_rad * static_cast<double>(d_current_prn_length_samples); |     d_acc_carrier_phase_rad -= (d_carrier_phase_step_rad * static_cast<double>(d_current_prn_length_samples) + 0.5 * d_carrier_phase_rate_step_rad * static_cast<double>(d_current_prn_length_samples) * static_cast<double>(d_current_prn_length_samples)); | ||||||
|  |  | ||||||
|     //################### DLL COMMANDS ################################################# |     //################### DLL COMMANDS ################################################# | ||||||
|     // code phase step (Code resampler phase increment per sample) [chips/sample] |     // code phase step (Code resampler phase increment per sample) [chips/sample] | ||||||
| @@ -974,7 +978,7 @@ void dll_pll_veml_tracking::log_data(bool integrating) | |||||||
|                     // carrier and code frequency |                     // carrier and code frequency | ||||||
|                     tmp_float = d_carrier_doppler_hz; |                     tmp_float = d_carrier_doppler_hz; | ||||||
|                     d_dump_file.write(reinterpret_cast<char *>(&tmp_float), sizeof(float)); |                     d_dump_file.write(reinterpret_cast<char *>(&tmp_float), sizeof(float)); | ||||||
|                     // carrier phase rate [Hz/s^2] |                     // carrier phase rate [Hz/s] | ||||||
|                     tmp_float = d_carrier_phase_rate_step_rad * trk_parameters.fs_in * trk_parameters.fs_in / PI_2; |                     tmp_float = d_carrier_phase_rate_step_rad * trk_parameters.fs_in * trk_parameters.fs_in / PI_2; | ||||||
|                     d_dump_file.write(reinterpret_cast<char *>(&tmp_float), sizeof(float)); |                     d_dump_file.write(reinterpret_cast<char *>(&tmp_float), sizeof(float)); | ||||||
|                     tmp_float = d_code_freq_chips; |                     tmp_float = d_code_freq_chips; | ||||||
|   | |||||||
| @@ -151,7 +151,7 @@ private: | |||||||
|     boost::circular_buffer<double> d_cp_history; |     boost::circular_buffer<double> d_cp_history; | ||||||
|     // remaining code phase and carrier phase between tracking loops |     // remaining code phase and carrier phase between tracking loops | ||||||
|     double d_rem_code_phase_samples; |     double d_rem_code_phase_samples; | ||||||
|     double d_rem_carr_phase_rad; |     float d_rem_carr_phase_rad; | ||||||
|  |  | ||||||
|     // PLL and DLL filter library |     // PLL and DLL filter library | ||||||
|     Tracking_2nd_DLL_filter d_code_loop_filter; |     Tracking_2nd_DLL_filter d_code_loop_filter; | ||||||
|   | |||||||
| @@ -127,7 +127,7 @@ void cpu_multicorrelator_real_codes::update_local_code(int correlator_length_sam | |||||||
|  |  | ||||||
| // Overload Carrier_wipeoff_multicorrelator_resampler to ensure back compatibility | // Overload Carrier_wipeoff_multicorrelator_resampler to ensure back compatibility | ||||||
| bool cpu_multicorrelator_real_codes::Carrier_wipeoff_multicorrelator_resampler( | bool cpu_multicorrelator_real_codes::Carrier_wipeoff_multicorrelator_resampler( | ||||||
|     float rem_carrier_phase_in_rad, |     float& rem_carrier_phase_in_rad, | ||||||
|     float phase_step_rad, |     float phase_step_rad, | ||||||
|     float phase_rate_step_rad, |     float phase_rate_step_rad, | ||||||
|     float rem_code_phase_chips, |     float rem_code_phase_chips, | ||||||
| @@ -148,6 +148,7 @@ bool cpu_multicorrelator_real_codes::Carrier_wipeoff_multicorrelator_resampler( | |||||||
|         { |         { | ||||||
|             volk_gnsssdr_32fc_32f_rotator_dot_prod_32fc_xn(d_corr_out, d_sig_in, std::exp(lv_32fc_t(0.0, -phase_step_rad)), phase_offset_as_complex, const_cast<const float**>(d_local_codes_resampled), d_n_correlators, signal_length_samples); |             volk_gnsssdr_32fc_32f_rotator_dot_prod_32fc_xn(d_corr_out, d_sig_in, std::exp(lv_32fc_t(0.0, -phase_step_rad)), phase_offset_as_complex, const_cast<const float**>(d_local_codes_resampled), d_n_correlators, signal_length_samples); | ||||||
|         } |         } | ||||||
|  |     rem_carrier_phase_in_rad = std::arg(std::conj(phase_offset_as_complex[0])); | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| // Overload Carrier_wipeoff_multicorrelator_resampler to ensure back compatibility | // Overload Carrier_wipeoff_multicorrelator_resampler to ensure back compatibility | ||||||
|   | |||||||
| @@ -53,7 +53,7 @@ public: | |||||||
|     bool set_input_output_vectors(std::complex<float> *corr_out, const std::complex<float> *sig_in); |     bool set_input_output_vectors(std::complex<float> *corr_out, const std::complex<float> *sig_in); | ||||||
|     void update_local_code(int correlator_length_samples, float rem_code_phase_chips, float code_phase_step_chips, float code_phase_rate_step_chips = 0.0); |     void update_local_code(int correlator_length_samples, float rem_code_phase_chips, float code_phase_step_chips, float code_phase_rate_step_chips = 0.0); | ||||||
|     // Overload Carrier_wipeoff_multicorrelator_resampler to ensure back compatibility |     // Overload Carrier_wipeoff_multicorrelator_resampler to ensure back compatibility | ||||||
|     bool Carrier_wipeoff_multicorrelator_resampler(float rem_carrier_phase_in_rad, float phase_step_rad, float phase_rate_step_rad, float rem_code_phase_chips, float code_phase_step_chips, float code_phase_rate_step_chips, int signal_length_samples); |     bool Carrier_wipeoff_multicorrelator_resampler(float &rem_carrier_phase_in_rad, float phase_step_rad, float phase_rate_step_rad, float rem_code_phase_chips, float code_phase_step_chips, float code_phase_rate_step_chips, int signal_length_samples); | ||||||
|     bool Carrier_wipeoff_multicorrelator_resampler(float rem_carrier_phase_in_rad, float phase_step_rad, float rem_code_phase_chips, float code_phase_step_chips, float code_phase_rate_step_chips, int signal_length_samples); |     bool Carrier_wipeoff_multicorrelator_resampler(float rem_carrier_phase_in_rad, float phase_step_rad, float rem_code_phase_chips, float code_phase_step_chips, float code_phase_rate_step_chips, int signal_length_samples); | ||||||
|     bool free(); |     bool free(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -36,7 +36,7 @@ | |||||||
| Dll_Pll_Conf::Dll_Pll_Conf() | Dll_Pll_Conf::Dll_Pll_Conf() | ||||||
| { | { | ||||||
|     /* DLL/PLL tracking configuration */ |     /* DLL/PLL tracking configuration */ | ||||||
|     use_high_dynamics_resampler = true; |     high_dyn = true; | ||||||
|     smoother_length = 10; |     smoother_length = 10; | ||||||
|     fs_in = 0.0; |     fs_in = 0.0; | ||||||
|     vector_length = 0U; |     vector_length = 0U; | ||||||
|   | |||||||
| @@ -56,7 +56,7 @@ public: | |||||||
|     float early_late_space_narrow_chips; |     float early_late_space_narrow_chips; | ||||||
|     float very_early_late_space_narrow_chips; |     float very_early_late_space_narrow_chips; | ||||||
|     int32_t extend_correlation_symbols; |     int32_t extend_correlation_symbols; | ||||||
|     bool use_high_dynamics_resampler; |     bool high_dyn; | ||||||
|     int32_t cn0_samples; |     int32_t cn0_samples; | ||||||
|     int32_t carrier_lock_det_mav_samples; |     int32_t carrier_lock_det_mav_samples; | ||||||
|     int32_t cn0_min; |     int32_t cn0_min; | ||||||
|   | |||||||
| @@ -45,6 +45,7 @@ bool tracking_dump_reader::read_binary_obs() | |||||||
|             d_dump_file.read(reinterpret_cast<char *>(&PRN_start_sample_count), sizeof(uint64_t)); |             d_dump_file.read(reinterpret_cast<char *>(&PRN_start_sample_count), sizeof(uint64_t)); | ||||||
|             d_dump_file.read(reinterpret_cast<char *>(&acc_carrier_phase_rad), sizeof(float)); |             d_dump_file.read(reinterpret_cast<char *>(&acc_carrier_phase_rad), sizeof(float)); | ||||||
|             d_dump_file.read(reinterpret_cast<char *>(&carrier_doppler_hz), sizeof(float)); |             d_dump_file.read(reinterpret_cast<char *>(&carrier_doppler_hz), sizeof(float)); | ||||||
|  |             d_dump_file.read(reinterpret_cast<char *>(&carrier_doppler_rate_hz_s), sizeof(float)); | ||||||
|             d_dump_file.read(reinterpret_cast<char *>(&code_freq_chips), sizeof(float)); |             d_dump_file.read(reinterpret_cast<char *>(&code_freq_chips), sizeof(float)); | ||||||
|             d_dump_file.read(reinterpret_cast<char *>(&carr_error_hz), sizeof(float)); |             d_dump_file.read(reinterpret_cast<char *>(&carr_error_hz), sizeof(float)); | ||||||
|             d_dump_file.read(reinterpret_cast<char *>(&carr_error_filt_hz), sizeof(float)); |             d_dump_file.read(reinterpret_cast<char *>(&carr_error_filt_hz), sizeof(float)); | ||||||
| @@ -83,7 +84,7 @@ int64_t tracking_dump_reader::num_epochs() | |||||||
| { | { | ||||||
|     std::ifstream::pos_type size; |     std::ifstream::pos_type size; | ||||||
|     int number_of_double_vars = 1; |     int number_of_double_vars = 1; | ||||||
|     int number_of_float_vars = 17; |     int number_of_float_vars = 18; | ||||||
|     int epoch_size_bytes = sizeof(uint64_t) + sizeof(double) * number_of_double_vars + |     int epoch_size_bytes = sizeof(uint64_t) + sizeof(double) * number_of_double_vars + | ||||||
|                            sizeof(float) * number_of_float_vars + sizeof(unsigned int); |                            sizeof(float) * number_of_float_vars + sizeof(unsigned int); | ||||||
|     std::ifstream tmpfile(d_dump_filename.c_str(), std::ios::binary | std::ios::ate); |     std::ifstream tmpfile(d_dump_filename.c_str(), std::ios::binary | std::ios::ate); | ||||||
|   | |||||||
| @@ -63,6 +63,7 @@ public: | |||||||
|  |  | ||||||
|     // carrier and code frequency |     // carrier and code frequency | ||||||
|     float carrier_doppler_hz; |     float carrier_doppler_hz; | ||||||
|  |     float carrier_doppler_rate_hz_s; | ||||||
|     float code_freq_chips; |     float code_freq_chips; | ||||||
|  |  | ||||||
|     // PLL commands |     // PLL commands | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Antonio Ramos
					Antonio Ramos