mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 07:13:03 +00:00 
			
		
		
		
	Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into galileo-e6
This commit is contained in:
		| @@ -36,11 +36,16 @@ GpsL1CaPcpsOpenClAcquisition::GpsL1CaPcpsOpenClAcquisition( | ||||
|     const ConfigurationInterface* configuration, | ||||
|     const std::string& role, | ||||
|     unsigned int in_streams, | ||||
|     unsigned int out_streams) : role_(role), | ||||
|                                 in_streams_(in_streams), | ||||
|                                 out_streams_(out_streams) | ||||
|     unsigned int out_streams) | ||||
|     : configuration_(configuration), | ||||
|       gnss_synchro_(nullptr), | ||||
|       role_(role), | ||||
|       threshold_(0.0), | ||||
|       channel_(0), | ||||
|       doppler_step_(0), | ||||
|       in_streams_(in_streams), | ||||
|       out_streams_(out_streams) | ||||
| { | ||||
|     configuration_ = configuration; | ||||
|     const std::string default_item_type("gr_complex"); | ||||
|     std::string default_dump_filename = "./data/acquisition.dat"; | ||||
|  | ||||
| @@ -98,11 +103,6 @@ GpsL1CaPcpsOpenClAcquisition::GpsL1CaPcpsOpenClAcquisition( | ||||
|             LOG(WARNING) << item_type_ << " unknown acquisition item type"; | ||||
|         } | ||||
|  | ||||
|     channel_ = 0; | ||||
|     threshold_ = 0.0; | ||||
|     doppler_step_ = 0; | ||||
|     gnss_synchro_ = nullptr; | ||||
|  | ||||
|     if (in_streams_ > 1) | ||||
|         { | ||||
|             LOG(ERROR) << "This implementation only supports one input stream"; | ||||
|   | ||||
| @@ -64,20 +64,42 @@ galileo_e5a_noncoherentIQ_acquisition_caf_cc::galileo_e5a_noncoherentIQ_acquisit | ||||
|     bool both_signal_components_, | ||||
|     int CAF_window_hz_, | ||||
|     int Zero_padding_, | ||||
|     bool enable_monitor_output) : gr::block("galileo_e5a_noncoherentIQ_acquisition_caf_cc", | ||||
|                                       gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|                                       gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))) | ||||
|     bool enable_monitor_output) | ||||
|     : gr::block("galileo_e5a_noncoherentIQ_acquisition_caf_cc", | ||||
|           gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|           gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))), | ||||
|       d_dump_filename(dump_filename), | ||||
|       d_gnss_synchro(nullptr), | ||||
|       d_fs_in(fs_in), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_threshold(0), | ||||
|       d_doppler_freq(0), | ||||
|       d_mag(0), | ||||
|       d_input_power(0.0), | ||||
|       d_test_statistics(0), | ||||
|       d_state(0), | ||||
|       d_samples_per_ms(samples_per_ms), | ||||
|       d_samples_per_code(samples_per_code), | ||||
|       d_CAF_window_hz(CAF_window_hz_), | ||||
|       d_buffer_count(0), | ||||
|       d_doppler_resolution(0), | ||||
|       d_doppler_max(static_cast<int>(doppler_max)), | ||||
|       d_doppler_step(250), | ||||
|       d_fft_size(static_cast<int>(sampled_ms) * d_samples_per_ms), | ||||
|       d_num_doppler_bins(0), | ||||
|       d_gr_stream_buffer(0), | ||||
|       d_channel(0), | ||||
|       d_max_dwells(max_dwells), | ||||
|       d_well_count(0), | ||||
|       d_code_phase(0), | ||||
|       d_bit_transition_flag(bit_transition_flag), | ||||
|       d_active(false), | ||||
|       d_dump(dump), | ||||
|       d_both_signal_components(both_signal_components_), | ||||
|       d_enable_monitor_output(enable_monitor_output) | ||||
| { | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     d_sample_counter = 0ULL;  // SAMPLE COUNTER | ||||
|     d_active = false; | ||||
|     d_state = 0; | ||||
|     d_fs_in = fs_in; | ||||
|     d_samples_per_ms = samples_per_ms; | ||||
|     d_samples_per_code = samples_per_code; | ||||
|     d_max_dwells = max_dwells; | ||||
|     d_well_count = 0; | ||||
|     d_doppler_max = static_cast<int>(doppler_max); | ||||
|  | ||||
|     if (Zero_padding_ > 0) | ||||
|         { | ||||
|             d_sampled_ms = 1; | ||||
| @@ -86,15 +108,6 @@ galileo_e5a_noncoherentIQ_acquisition_caf_cc::galileo_e5a_noncoherentIQ_acquisit | ||||
|         { | ||||
|             d_sampled_ms = sampled_ms; | ||||
|         } | ||||
|     d_fft_size = static_cast<int>(sampled_ms) * d_samples_per_ms; | ||||
|     d_mag = 0; | ||||
|     d_input_power = 0.0; | ||||
|     d_num_doppler_bins = 0; | ||||
|     d_bit_transition_flag = bit_transition_flag; | ||||
|     d_buffer_count = 0; | ||||
|     d_both_signal_components = both_signal_components_; | ||||
|     d_CAF_window_hz = CAF_window_hz_; | ||||
|     d_enable_monitor_output = enable_monitor_output; | ||||
|  | ||||
|     d_inbuffer = std::vector<gr_complex>(d_fft_size); | ||||
|     d_fft_code_I_A = std::vector<gr_complex>(d_fft_size); | ||||
| @@ -120,19 +133,6 @@ galileo_e5a_noncoherentIQ_acquisition_caf_cc::galileo_e5a_noncoherentIQ_acquisit | ||||
|  | ||||
|     d_fft_if = gnss_fft_fwd_make_unique(d_fft_size); | ||||
|     d_ifft = gnss_fft_rev_make_unique(d_fft_size); | ||||
|  | ||||
|     d_dump = dump; | ||||
|     d_dump_filename = dump_filename; | ||||
|  | ||||
|     d_doppler_resolution = 0; | ||||
|     d_threshold = 0; | ||||
|     d_doppler_step = 250; | ||||
|     d_gnss_synchro = nullptr; | ||||
|     d_code_phase = 0; | ||||
|     d_doppler_freq = 0; | ||||
|     d_test_statistics = 0; | ||||
|     d_channel = 0; | ||||
|     d_gr_stream_buffer = 0; | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -52,46 +52,43 @@ galileo_pcps_8ms_acquisition_cc::galileo_pcps_8ms_acquisition_cc( | ||||
|     int32_t samples_per_code, | ||||
|     bool dump, | ||||
|     const std::string &dump_filename, | ||||
|     bool enable_monitor_output) : gr::block("galileo_pcps_8ms_acquisition_cc", | ||||
|                                       gr::io_signature::make(1, 1, static_cast<int>(sizeof(gr_complex) * sampled_ms * samples_per_ms)), | ||||
|                                       gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))) | ||||
|     bool enable_monitor_output) | ||||
|     : gr::block("galileo_pcps_8ms_acquisition_cc", | ||||
|           gr::io_signature::make(1, 1, static_cast<int>(sizeof(gr_complex) * sampled_ms * samples_per_ms)), | ||||
|           gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))), | ||||
|       d_dump_filename(dump_filename), | ||||
|       d_gnss_synchro(nullptr), | ||||
|       d_fs_in(fs_in), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_threshold(0), | ||||
|       d_doppler_freq(0), | ||||
|       d_mag(0), | ||||
|       d_input_power(0.0), | ||||
|       d_test_statistics(0), | ||||
|       d_state(0), | ||||
|       d_samples_per_ms(samples_per_ms), | ||||
|       d_samples_per_code(samples_per_code), | ||||
|       d_channel(0), | ||||
|       d_doppler_resolution(0), | ||||
|       d_doppler_max(doppler_max), | ||||
|       d_doppler_step(0), | ||||
|       d_sampled_ms(sampled_ms), | ||||
|       d_max_dwells(max_dwells), | ||||
|       d_well_count(0), | ||||
|       d_fft_size(d_sampled_ms * d_samples_per_ms), | ||||
|       d_num_doppler_bins(0), | ||||
|       d_code_phase(0), | ||||
|       d_active(false), | ||||
|       d_dump(dump), | ||||
|       d_enable_monitor_output(enable_monitor_output) | ||||
| { | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     d_sample_counter = 0ULL;  // SAMPLE COUNTER | ||||
|     d_active = false; | ||||
|     d_state = 0; | ||||
|     d_fs_in = fs_in; | ||||
|     d_samples_per_ms = samples_per_ms; | ||||
|     d_samples_per_code = samples_per_code; | ||||
|     d_sampled_ms = sampled_ms; | ||||
|     d_max_dwells = max_dwells; | ||||
|     d_well_count = 0; | ||||
|     d_doppler_max = doppler_max; | ||||
|     d_fft_size = d_sampled_ms * d_samples_per_ms; | ||||
|     d_mag = 0; | ||||
|     d_input_power = 0.0; | ||||
|     d_num_doppler_bins = 0; | ||||
|  | ||||
|     d_fft_code_A = std::vector<gr_complex>(d_fft_size, lv_cmake(0.0F, 0.0F)); | ||||
|     d_fft_code_B = std::vector<gr_complex>(d_fft_size, lv_cmake(0.0F, 0.0F)); | ||||
|     d_magnitude = std::vector<float>(d_fft_size, 0.0F); | ||||
|     d_fft_if = gnss_fft_fwd_make_unique(d_fft_size); | ||||
|     d_ifft = gnss_fft_rev_make_unique(d_fft_size); | ||||
|  | ||||
|     // For dumping samples into a file | ||||
|     d_dump = dump; | ||||
|     d_dump_filename = dump_filename; | ||||
|  | ||||
|     d_enable_monitor_output = enable_monitor_output; | ||||
|  | ||||
|     d_doppler_resolution = 0; | ||||
|     d_threshold = 0; | ||||
|     d_doppler_step = 0; | ||||
|     d_gnss_synchro = nullptr; | ||||
|     d_code_phase = 0; | ||||
|     d_doppler_freq = 0; | ||||
|     d_test_statistics = 0; | ||||
|     d_channel = 0; | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -41,30 +41,41 @@ pcps_acquisition_fine_doppler_cc_sptr pcps_make_acquisition_fine_doppler_cc(cons | ||||
| pcps_acquisition_fine_doppler_cc::pcps_acquisition_fine_doppler_cc(const Acq_Conf &conf_) | ||||
|     : gr::block("pcps_acquisition_fine_doppler_cc", | ||||
|           gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|           gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))) | ||||
|           gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))), | ||||
|       d_dump_filename(conf_.dump_filename), | ||||
|       d_gnss_synchro(nullptr), | ||||
|       acq_parameters(conf_), | ||||
|       d_fs_in(conf_.fs_in), | ||||
|       d_dump_number(0), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_threshold(0), | ||||
|       d_test_statistics(0), | ||||
|       d_positive_acq(0), | ||||
|       d_state(0), | ||||
|       d_samples_per_ms(static_cast<int>(conf_.samples_per_ms)), | ||||
|       d_max_dwells(conf_.max_dwells), | ||||
|       d_config_doppler_max(conf_.doppler_max), | ||||
|       d_num_doppler_points(0), | ||||
|       d_well_count(0), | ||||
|       d_n_samples_in_buffer(0), | ||||
|       d_fft_size(d_samples_per_ms), | ||||
|       d_gnuradio_forecast_samples(d_fft_size), | ||||
|       d_doppler_step(0), | ||||
|       d_channel(0), | ||||
|       d_dump_channel(0), | ||||
|       d_active(false), | ||||
|       d_dump(conf_.dump) | ||||
| { | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     acq_parameters = conf_; | ||||
|     d_sample_counter = 0ULL;  // SAMPLE COUNTER | ||||
|     d_active = false; | ||||
|     d_fs_in = conf_.fs_in; | ||||
|     d_samples_per_ms = static_cast<int>(conf_.samples_per_ms); | ||||
|     d_config_doppler_max = conf_.doppler_max; | ||||
|     d_fft_size = d_samples_per_ms; | ||||
|     // HS Acquisition | ||||
|     d_max_dwells = conf_.max_dwells; | ||||
|     d_gnuradio_forecast_samples = d_fft_size; | ||||
|     d_state = 0; | ||||
|  | ||||
|     d_fft_codes = volk_gnsssdr::vector<gr_complex>(d_fft_size); | ||||
|     d_magnitude = volk_gnsssdr::vector<float>(d_fft_size); | ||||
|     d_10_ms_buffer = volk_gnsssdr::vector<gr_complex>(50 * d_samples_per_ms); | ||||
|     d_fft_if = gnss_fft_fwd_make_unique(d_fft_size); | ||||
|     d_ifft = gnss_fft_rev_make_unique(d_fft_size); | ||||
|  | ||||
|     // For dumping samples into a file | ||||
|     d_dump = conf_.dump; | ||||
|     d_dump_filename = conf_.dump_filename; | ||||
|  | ||||
|     // this implementation can only produce dumps in channel 0 | ||||
|     // todo: migrate config parameters to the unified acquisition config class | ||||
|     if (d_dump) | ||||
|         { | ||||
|             std::string dump_path; | ||||
| @@ -96,21 +107,6 @@ pcps_acquisition_fine_doppler_cc::pcps_acquisition_fine_doppler_cc(const Acq_Con | ||||
|                     d_dump = false; | ||||
|                 } | ||||
|         } | ||||
|  | ||||
|     d_n_samples_in_buffer = 0; | ||||
|     d_threshold = 0; | ||||
|     d_num_doppler_points = 0; | ||||
|     d_doppler_step = 0; | ||||
|     d_gnss_synchro = nullptr; | ||||
|     d_code_phase = 0; | ||||
|     d_doppler_freq = 0; | ||||
|     d_test_statistics = 0; | ||||
|     d_well_count = 0; | ||||
|     d_channel = 0; | ||||
|     d_positive_acq = 0; | ||||
|     d_dump_number = 0; | ||||
|     d_dump_channel = 0;  // this implementation can only produce dumps in channel 0 | ||||
|     // todo: migrate config parameters to the unified acquisition config class | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -219,7 +219,6 @@ private: | ||||
|     int64_t d_dump_number; | ||||
|     uint64_t d_sample_counter; | ||||
|  | ||||
|     float d_doppler_freq; | ||||
|     float d_threshold; | ||||
|     float d_test_statistics; | ||||
|  | ||||
| @@ -227,15 +226,14 @@ private: | ||||
|     int d_state; | ||||
|     int d_samples_per_ms; | ||||
|     int d_max_dwells; | ||||
|     int d_gnuradio_forecast_samples; | ||||
|     int d_config_doppler_max; | ||||
|     int d_num_doppler_points; | ||||
|     int d_well_count; | ||||
|     int d_n_samples_in_buffer; | ||||
|     int d_fft_size; | ||||
|     int d_gnuradio_forecast_samples; | ||||
|     unsigned int d_doppler_step; | ||||
|     unsigned int d_channel; | ||||
|     unsigned int d_code_phase; | ||||
|     unsigned int d_dump_channel; | ||||
|  | ||||
|     bool d_active; | ||||
|   | ||||
| @@ -47,48 +47,45 @@ pcps_assisted_acquisition_cc_sptr pcps_make_assisted_acquisition_cc( | ||||
| pcps_assisted_acquisition_cc::pcps_assisted_acquisition_cc( | ||||
|     int32_t max_dwells, uint32_t sampled_ms, int32_t doppler_max, int32_t doppler_min, | ||||
|     int64_t fs_in, int32_t samples_per_ms, bool dump, const std::string &dump_filename, | ||||
|     bool enable_monitor_output) : gr::block("pcps_assisted_acquisition_cc", | ||||
|                                       gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|                                       gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))) | ||||
|     bool enable_monitor_output) | ||||
|     : gr::block("pcps_assisted_acquisition_cc", | ||||
|           gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|           gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))), | ||||
|       d_dump_filename(dump_filename), | ||||
|       d_gnss_synchro(nullptr), | ||||
|       d_fs_in(fs_in), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_threshold(0), | ||||
|       d_doppler_freq(0), | ||||
|       d_input_power(0.0), | ||||
|       d_test_statistics(0), | ||||
|       d_doppler_resolution(0), | ||||
|       d_channel(0), | ||||
|       d_sampled_ms(sampled_ms), | ||||
|       d_code_phase(0), | ||||
|       d_samples_per_ms(samples_per_ms), | ||||
|       d_fft_size(d_sampled_ms * d_samples_per_ms), | ||||
|       d_max_dwells(max_dwells), | ||||
|       d_gnuradio_forecast_samples(d_fft_size * 4), | ||||
|       d_doppler_max(0), | ||||
|       d_doppler_min(0), | ||||
|       d_config_doppler_max(doppler_max), | ||||
|       d_config_doppler_min(doppler_min), | ||||
|       d_num_doppler_points(0), | ||||
|       d_doppler_step(0), | ||||
|       d_state(0), | ||||
|       d_well_count(0), | ||||
|       d_active(false), | ||||
|       d_disable_assist(false), | ||||
|       d_dump(dump), | ||||
|       d_enable_monitor_output(enable_monitor_output) | ||||
| { | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     d_sample_counter = 0ULL;  // SAMPLE COUNTER | ||||
|     d_active = false; | ||||
|     d_fs_in = fs_in; | ||||
|     d_samples_per_ms = samples_per_ms; | ||||
|     d_sampled_ms = sampled_ms; | ||||
|     d_config_doppler_max = doppler_max; | ||||
|     d_config_doppler_min = doppler_min; | ||||
|     d_fft_size = d_sampled_ms * d_samples_per_ms; | ||||
|     // HS Acquisition | ||||
|     d_max_dwells = max_dwells; | ||||
|     d_gnuradio_forecast_samples = d_fft_size * 4; | ||||
|     d_input_power = 0.0; | ||||
|     d_state = 0; | ||||
|     d_disable_assist = false; | ||||
|  | ||||
|     d_fft_codes = std::vector<gr_complex>(d_fft_size); | ||||
|  | ||||
|     d_fft_if = gnss_fft_fwd_make_unique(d_fft_size); | ||||
|     d_ifft = gnss_fft_rev_make_unique(d_fft_size); | ||||
|  | ||||
|     // For dumping samples into a file | ||||
|     d_dump = dump; | ||||
|     d_dump_filename = dump_filename; | ||||
|  | ||||
|     d_enable_monitor_output = enable_monitor_output; | ||||
|  | ||||
|     d_doppler_resolution = 0; | ||||
|     d_threshold = 0; | ||||
|     d_doppler_max = 0; | ||||
|     d_doppler_min = 0; | ||||
|     d_num_doppler_points = 0; | ||||
|     d_doppler_step = 0; | ||||
|     d_gnss_synchro = nullptr; | ||||
|     d_code_phase = 0; | ||||
|     d_doppler_freq = 0; | ||||
|     d_test_statistics = 0; | ||||
|     d_well_count = 0; | ||||
|     d_channel = 0; | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -219,7 +219,16 @@ private: | ||||
|     float d_doppler_freq; | ||||
|     float d_input_power; | ||||
|     float d_test_statistics; | ||||
|  | ||||
|     uint32_t d_doppler_resolution; | ||||
|     uint32_t d_channel; | ||||
|     uint32_t d_sampled_ms; | ||||
|     uint32_t d_code_phase; | ||||
|  | ||||
|     int32_t d_samples_per_ms; | ||||
|  | ||||
|     uint32_t d_fft_size; | ||||
|  | ||||
|     int32_t d_max_dwells; | ||||
|     int32_t d_gnuradio_forecast_samples; | ||||
|     int32_t d_doppler_max; | ||||
| @@ -230,11 +239,6 @@ private: | ||||
|     int32_t d_doppler_step; | ||||
|     int32_t d_state; | ||||
|     int32_t d_well_count; | ||||
|     uint32_t d_doppler_resolution; | ||||
|     uint32_t d_channel; | ||||
|     uint32_t d_sampled_ms; | ||||
|     uint32_t d_fft_size; | ||||
|     uint32_t d_code_phase; | ||||
|  | ||||
|     bool d_active; | ||||
|     bool d_disable_assist; | ||||
|   | ||||
| @@ -57,25 +57,37 @@ pcps_cccwsr_acquisition_cc::pcps_cccwsr_acquisition_cc( | ||||
|     int32_t samples_per_code, | ||||
|     bool dump, | ||||
|     const std::string &dump_filename, | ||||
|     bool enable_monitor_output) : gr::block("pcps_cccwsr_acquisition_cc", | ||||
|                                       gr::io_signature::make(1, 1, static_cast<int>(sizeof(gr_complex) * sampled_ms * samples_per_ms)), | ||||
|                                       gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))) | ||||
|     bool enable_monitor_output) | ||||
|     : gr::block("pcps_cccwsr_acquisition_cc", | ||||
|           gr::io_signature::make(1, 1, static_cast<int>(sizeof(gr_complex) * sampled_ms * samples_per_ms)), | ||||
|           gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))), | ||||
|       d_dump_filename(dump_filename), | ||||
|       d_gnss_synchro(nullptr), | ||||
|       d_fs_in(fs_in), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_threshold(0), | ||||
|       d_doppler_freq(0), | ||||
|       d_mag(0), | ||||
|       d_input_power(0.0), | ||||
|       d_test_statistics(0), | ||||
|       d_state(0), | ||||
|       d_samples_per_ms(samples_per_ms), | ||||
|       d_samples_per_code(samples_per_code), | ||||
|       d_doppler_resolution(0), | ||||
|       d_doppler_max(doppler_max), | ||||
|       d_doppler_step(0), | ||||
|       d_sampled_ms(sampled_ms), | ||||
|       d_max_dwells(max_dwells), | ||||
|       d_well_count(0), | ||||
|       d_fft_size(d_sampled_ms * d_samples_per_ms), | ||||
|       d_num_doppler_bins(0), | ||||
|       d_code_phase(0), | ||||
|       d_channel(0), | ||||
|       d_active(false), | ||||
|       d_dump(dump), | ||||
|       d_enable_monitor_output(enable_monitor_output) | ||||
| { | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     d_sample_counter = 0ULL;  // SAMPLE COUNTER | ||||
|     d_active = false; | ||||
|     d_state = 0; | ||||
|     d_fs_in = fs_in; | ||||
|     d_samples_per_ms = samples_per_ms; | ||||
|     d_samples_per_code = samples_per_code; | ||||
|     d_sampled_ms = sampled_ms; | ||||
|     d_max_dwells = max_dwells; | ||||
|     d_well_count = 0; | ||||
|     d_doppler_max = doppler_max; | ||||
|     d_fft_size = d_sampled_ms * d_samples_per_ms; | ||||
|     d_mag = 0; | ||||
|     d_input_power = 0.0; | ||||
|     d_num_doppler_bins = 0; | ||||
|  | ||||
|     d_fft_code_data = std::vector<gr_complex>(d_fft_size); | ||||
|     d_fft_code_pilot = std::vector<gr_complex>(d_fft_size); | ||||
| @@ -87,21 +99,6 @@ pcps_cccwsr_acquisition_cc::pcps_cccwsr_acquisition_cc( | ||||
|  | ||||
|     d_fft_if = gnss_fft_fwd_make_unique(d_fft_size); | ||||
|     d_ifft = gnss_fft_rev_make_unique(d_fft_size); | ||||
|  | ||||
|     // For dumping samples into a file | ||||
|     d_dump = dump; | ||||
|     d_dump_filename = dump_filename; | ||||
|  | ||||
|     d_enable_monitor_output = enable_monitor_output; | ||||
|  | ||||
|     d_doppler_resolution = 0; | ||||
|     d_threshold = 0; | ||||
|     d_doppler_step = 0; | ||||
|     d_gnss_synchro = nullptr; | ||||
|     d_code_phase = 0; | ||||
|     d_doppler_freq = 0; | ||||
|     d_test_statistics = 0; | ||||
|     d_channel = 0; | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -76,34 +76,38 @@ pcps_opencl_acquisition_cc::pcps_opencl_acquisition_cc( | ||||
|     bool bit_transition_flag, | ||||
|     bool dump, | ||||
|     const std::string &dump_filename, | ||||
|     bool enable_monitor_output) : gr::block("pcps_opencl_acquisition_cc", | ||||
|                                       gr::io_signature::make(1, 1, static_cast<int>(sizeof(gr_complex) * sampled_ms * samples_per_ms)), | ||||
|                                       gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))) | ||||
|     bool enable_monitor_output) | ||||
|     : gr::block("pcps_opencl_acquisition_cc", | ||||
|           gr::io_signature::make(1, 1, static_cast<int>(sizeof(gr_complex) * sampled_ms * samples_per_ms)), | ||||
|           gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))), | ||||
|       d_cl_fft_batch_size(1), | ||||
|       d_dump_filename(dump_filename), | ||||
|       d_fs_in(fs_in), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_mag(0), | ||||
|       d_input_power(0.0), | ||||
|       d_samples_per_ms(samples_per_ms), | ||||
|       d_samples_per_code(samples_per_code), | ||||
|       d_state(0), | ||||
|       d_doppler_max(doppler_max), | ||||
|       d_sampled_ms(sampled_ms), | ||||
|       d_max_dwells(max_dwells), | ||||
|       d_well_count(0), | ||||
|       d_fft_size(d_sampled_ms * d_samples_per_ms), | ||||
|       d_fft_size_pow2(pow(2, ceil(log2(2 * d_fft_size)))), | ||||
|       d_num_doppler_bins(0), | ||||
|       d_in_dwell_count(0), | ||||
|       d_bit_transition_flag(bit_transition_flag), | ||||
|       d_active(false), | ||||
|       d_core_working(false), | ||||
|       d_dump(dump), | ||||
|       d_enable_monitor_output(enable_monitor_output) | ||||
| { | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     d_sample_counter = 0ULL;  // SAMPLE COUNTER | ||||
|     d_active = false; | ||||
|     d_state = 0; | ||||
|     d_core_working = false; | ||||
|     d_fs_in = fs_in; | ||||
|     d_samples_per_ms = samples_per_ms; | ||||
|     d_samples_per_code = samples_per_code; | ||||
|     d_sampled_ms = sampled_ms; | ||||
|     d_max_dwells = max_dwells; | ||||
|     d_well_count = 0; | ||||
|     d_doppler_max = doppler_max; | ||||
|     d_fft_size = d_sampled_ms * d_samples_per_ms; | ||||
|     d_fft_size_pow2 = pow(2, ceil(log2(2 * d_fft_size))); | ||||
|     d_mag = 0; | ||||
|     d_input_power = 0.0; | ||||
|     d_num_doppler_bins = 0; | ||||
|     d_bit_transition_flag = bit_transition_flag; | ||||
|     d_in_dwell_count = 0; | ||||
|     d_cl_fft_batch_size = 1; | ||||
|  | ||||
|     d_in_buffer = std::vector<std::vector<gr_complex>>(d_max_dwells, std::vector<gr_complex>(d_fft_size)); | ||||
|     d_magnitude = std::vector<float>(d_fft_size); | ||||
|     d_fft_codes = std::vector<gr_complex>(_fft_size_pow2); | ||||
|     d_fft_codes = std::vector<gr_complex>(d_fft_size_pow2); | ||||
|     d_zero_vector = std::vector<gr_complex>(d_fft_size_pow2 - d_fft_size, 0.0); | ||||
|  | ||||
|     d_opencl = init_opencl_environment("math_kernel.cl"); | ||||
| @@ -116,12 +120,6 @@ pcps_opencl_acquisition_cc::pcps_opencl_acquisition_cc( | ||||
|             // Inverse FFT | ||||
|             d_ifft = gnss_fft_rev_make_unique(d_fft_size); | ||||
|         } | ||||
|  | ||||
|     // For dumping samples into a file | ||||
|     d_dump = dump; | ||||
|     d_dump_filename = dump_filename; | ||||
|  | ||||
|     d_enable_monitor_output = enable_monitor_output; | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -59,29 +59,40 @@ pcps_quicksync_acquisition_cc::pcps_quicksync_acquisition_cc( | ||||
|     bool bit_transition_flag, | ||||
|     bool dump, | ||||
|     const std::string& dump_filename, | ||||
|     bool enable_monitor_output) : gr::block("pcps_quicksync_acquisition_cc", | ||||
|                                       gr::io_signature::make(1, 1, static_cast<int>(sizeof(gr_complex) * sampled_ms * samples_per_ms)), | ||||
|                                       gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))) | ||||
|     bool enable_monitor_output) | ||||
|     : gr::block("pcps_quicksync_acquisition_cc", | ||||
|           gr::io_signature::make(1, 1, static_cast<int>(sizeof(gr_complex) * sampled_ms * samples_per_ms)), | ||||
|           gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))), | ||||
|       d_dump_filename(dump_filename), | ||||
|       d_gnss_synchro(nullptr), | ||||
|       d_fs_in(fs_in), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_noise_floor_power(0), | ||||
|       d_threshold(0), | ||||
|       d_doppler_freq(0), | ||||
|       d_mag(0), | ||||
|       d_input_power(0.0), | ||||
|       d_test_statistics(0), | ||||
|       d_samples_per_ms(samples_per_ms), | ||||
|       d_samples_per_code(samples_per_code), | ||||
|       d_state(0), | ||||
|       d_channel(0), | ||||
|       d_folding_factor(folding_factor), | ||||
|       d_doppler_resolution(0), | ||||
|       d_doppler_max(doppler_max), | ||||
|       d_doppler_step(0), | ||||
|       d_sampled_ms(sampled_ms), | ||||
|       d_max_dwells(max_dwells), | ||||
|       d_well_count(0), | ||||
|       d_fft_size((d_samples_per_code) / d_folding_factor), | ||||
|       d_num_doppler_bins(0), | ||||
|       d_code_phase(0), | ||||
|       d_bit_transition_flag(bit_transition_flag), | ||||
|       d_active(false), | ||||
|       d_dump(dump), | ||||
|       d_enable_monitor_output(enable_monitor_output) | ||||
| { | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     d_sample_counter = 0ULL;  // SAMPLE COUNTER | ||||
|     d_active = false; | ||||
|     d_state = 0; | ||||
|     d_fs_in = fs_in; | ||||
|     d_samples_per_ms = samples_per_ms; | ||||
|     d_samples_per_code = samples_per_code; | ||||
|     d_sampled_ms = sampled_ms; | ||||
|     d_max_dwells = max_dwells; | ||||
|     d_well_count = 0; | ||||
|     d_doppler_max = doppler_max; | ||||
|     d_mag = 0; | ||||
|     d_input_power = 0.0; | ||||
|     d_num_doppler_bins = 0; | ||||
|     d_bit_transition_flag = bit_transition_flag; | ||||
|     d_folding_factor = folding_factor; | ||||
|  | ||||
|     // fft size is reduced. | ||||
|     d_fft_size = (d_samples_per_code) / d_folding_factor; | ||||
|  | ||||
|     d_fft_codes = std::vector<gr_complex>(d_fft_size); | ||||
|     d_magnitude = std::vector<float>(d_samples_per_code * d_folding_factor); | ||||
| @@ -96,24 +107,8 @@ pcps_quicksync_acquisition_cc::pcps_quicksync_acquisition_cc( | ||||
|     d_fft_if = gnss_fft_fwd_make_unique(d_fft_size); | ||||
|     d_ifft = gnss_fft_rev_make_unique(d_fft_size); | ||||
|  | ||||
|     // For dumping samples into a file | ||||
|     d_dump = dump; | ||||
|     d_dump_filename = dump_filename; | ||||
|  | ||||
|     d_enable_monitor_output = enable_monitor_output; | ||||
|  | ||||
|     d_code_folded = std::vector<gr_complex>(d_fft_size, lv_cmake(0.0F, 0.0F)); | ||||
|  | ||||
|     d_signal_folded = std::vector<gr_complex>(d_fft_size); | ||||
|     d_noise_floor_power = 0; | ||||
|     d_doppler_resolution = 0; | ||||
|     d_threshold = 0; | ||||
|     d_doppler_step = 0; | ||||
|     d_gnss_synchro = nullptr; | ||||
|     d_code_phase = 0; | ||||
|     d_doppler_freq = 0; | ||||
|     d_test_statistics = 0; | ||||
|     d_channel = 0; | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -75,49 +75,46 @@ pcps_tong_acquisition_cc::pcps_tong_acquisition_cc( | ||||
|     uint32_t tong_max_dwells, | ||||
|     bool dump, | ||||
|     const std::string &dump_filename, | ||||
|     bool enable_monitor_output) : gr::block("pcps_tong_acquisition_cc", | ||||
|                                       gr::io_signature::make(1, 1, static_cast<int>(sizeof(gr_complex) * sampled_ms * samples_per_ms)), | ||||
|                                       gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))) | ||||
|     bool enable_monitor_output) | ||||
|     : gr::block("pcps_tong_acquisition_cc", | ||||
|           gr::io_signature::make(1, 1, static_cast<int>(sizeof(gr_complex) * sampled_ms * samples_per_ms)), | ||||
|           gr::io_signature::make(0, 1, sizeof(Gnss_Synchro))), | ||||
|       d_dump_filename(dump_filename), | ||||
|       d_gnss_synchro(nullptr), | ||||
|       d_fs_in(fs_in), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_threshold(0), | ||||
|       d_doppler_freq(0), | ||||
|       d_mag(0), | ||||
|       d_input_power(0.0), | ||||
|       d_test_statistics(0), | ||||
|       d_state(0), | ||||
|       d_samples_per_ms(samples_per_ms), | ||||
|       d_samples_per_code(samples_per_code), | ||||
|       d_channel(0), | ||||
|       d_doppler_resolution(0), | ||||
|       d_doppler_max(doppler_max), | ||||
|       d_doppler_step(0), | ||||
|       d_sampled_ms(sampled_ms), | ||||
|       d_dwell_count(0), | ||||
|       d_tong_init_val(tong_init_val), | ||||
|       d_tong_max_val(tong_max_val), | ||||
|       d_tong_max_dwells(tong_max_dwells), | ||||
|       d_tong_count(d_tong_init_val), | ||||
|       d_fft_size(d_sampled_ms * d_samples_per_ms), | ||||
|       d_num_doppler_bins(0), | ||||
|       d_code_phase(0), | ||||
|       d_active(false), | ||||
|       d_dump(dump), | ||||
|       d_enable_monitor_output(enable_monitor_output) | ||||
| { | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     d_sample_counter = 0ULL;  // SAMPLE COUNTER | ||||
|     d_active = false; | ||||
|     d_state = 0; | ||||
|     d_fs_in = fs_in; | ||||
|     d_samples_per_ms = samples_per_ms; | ||||
|     d_samples_per_code = samples_per_code; | ||||
|     d_sampled_ms = sampled_ms; | ||||
|     d_dwell_count = 0; | ||||
|     d_tong_max_val = tong_max_val; | ||||
|     d_tong_max_dwells = tong_max_dwells; | ||||
|     d_tong_init_val = tong_init_val; | ||||
|     d_tong_count = d_tong_init_val; | ||||
|     d_doppler_max = doppler_max; | ||||
|     d_fft_size = d_sampled_ms * d_samples_per_ms; | ||||
|     d_mag = 0; | ||||
|     d_input_power = 0.0; | ||||
|     d_num_doppler_bins = 0; | ||||
|  | ||||
|     d_fft_codes = std::vector<gr_complex>(d_fft_size); | ||||
|     d_magnitude = std::vector<float>(d_fft_size); | ||||
|  | ||||
|     d_fft_if = gnss_fft_fwd_make_unique(d_fft_size); | ||||
|     d_ifft = gnss_fft_rev_make_unique(d_fft_size); | ||||
|  | ||||
|     // For dumping samples into a file | ||||
|     d_dump = dump; | ||||
|     d_dump_filename = dump_filename; | ||||
|  | ||||
|     d_enable_monitor_output = enable_monitor_output; | ||||
|  | ||||
|     d_doppler_resolution = 0; | ||||
|     d_threshold = 0; | ||||
|     d_doppler_step = 0; | ||||
|     d_gnss_synchro = nullptr; | ||||
|     d_code_phase = 0; | ||||
|     d_doppler_freq = 0; | ||||
|     d_test_statistics = 0; | ||||
|     d_channel = 0; | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -231,10 +231,10 @@ private: | ||||
|     uint32_t d_doppler_step; | ||||
|     uint32_t d_sampled_ms; | ||||
|     uint32_t d_dwell_count; | ||||
|     uint32_t d_tong_count; | ||||
|     uint32_t d_tong_init_val; | ||||
|     uint32_t d_tong_max_val; | ||||
|     uint32_t d_tong_max_dwells; | ||||
|     uint32_t d_tong_count; | ||||
|     uint32_t d_fft_size; | ||||
|     uint32_t d_num_doppler_bins; | ||||
|     uint32_t d_code_phase; | ||||
|   | ||||
| @@ -42,7 +42,6 @@ GpsL1CaKfTracking::GpsL1CaKfTracking( | ||||
|     int order = configuration->property(role + ".order", 2); | ||||
|     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 f_if = configuration->property(role + ".if", 0); | ||||
|     bool dump = configuration->property(role + ".dump", false); | ||||
|     float dll_bw_hz = configuration->property(role + ".dll_bw_hz", static_cast<float>(2.0)); | ||||
|     if (FLAGS_dll_bw_hz != 0.0) | ||||
| @@ -66,7 +65,6 @@ GpsL1CaKfTracking::GpsL1CaKfTracking( | ||||
|             item_size_ = sizeof(gr_complex); | ||||
|             tracking_ = gps_l1_ca_kf_make_tracking_cc( | ||||
|                 order, | ||||
|                 f_if, | ||||
|                 fs_in, | ||||
|                 vector_length, | ||||
|                 dump, | ||||
|   | ||||
| @@ -78,37 +78,57 @@ Galileo_E1_Tcp_Connector_Tracking_cc::Galileo_E1_Tcp_Connector_Tracking_cc( | ||||
|     float dll_bw_hz __attribute__((unused)), | ||||
|     float early_late_space_chips, | ||||
|     float very_early_late_space_chips, | ||||
|     size_t port_ch0) : gr::block("Galileo_E1_Tcp_Connector_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|                            gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) | ||||
|     size_t port_ch0) | ||||
|     : gr::block("Galileo_E1_Tcp_Connector_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|           gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))), | ||||
|       d_vector_length(vector_length), | ||||
|       d_dump(dump), | ||||
|       d_acquisition_gnss_synchro(nullptr), | ||||
|       d_channel(0), | ||||
|       d_fs_in(fs_in), | ||||
|       d_correlation_length_samples(d_vector_length), | ||||
|       d_n_correlator_taps(5), | ||||
|       d_early_late_spc_chips(early_late_space_chips), | ||||
|       d_very_early_late_spc_chips(very_early_late_space_chips), | ||||
|       d_rem_code_phase_samples(0.0), | ||||
|       d_next_rem_code_phase_samples(0), | ||||
|       d_rem_carr_phase_rad(0.0), | ||||
|       d_acq_code_phase_samples(0.0), | ||||
|       d_acq_carrier_doppler_hz(0.0), | ||||
|       d_code_freq_chips(GALILEO_E1_CODE_CHIP_RATE_CPS), | ||||
|       d_carrier_doppler_hz(0.0), | ||||
|       d_acc_carrier_phase_rad(0.0), | ||||
|       d_acc_code_phase_secs(0.0), | ||||
|       d_code_phase_samples(0), | ||||
|       d_port_ch0(port_ch0), | ||||
|       d_port(0), | ||||
|       d_listen_connection(true), | ||||
|       d_control_id(0), | ||||
|       d_current_prn_length_samples(static_cast<int32_t>(d_vector_length)), | ||||
|       d_next_prn_length_samples(0), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_acq_sample_stamp(0), | ||||
|       d_cn0_estimation_counter(0), | ||||
|       d_carrier_lock_test(1), | ||||
|       d_CN0_SNV_dB_Hz(0), | ||||
|       d_carrier_lock_threshold(static_cast<float>(FLAGS_carrier_lock_th)), | ||||
|       d_carrier_lock_fail_counter(0), | ||||
|       d_enable_tracking(false), | ||||
|       d_pull_in(false), | ||||
|       d_dump_filename(dump_filename) | ||||
| { | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     this->set_relative_rate(1.0 / vector_length); | ||||
|     // Telemetry message port input | ||||
|     this->message_port_register_in(pmt::mp("telemetry_to_trk")); | ||||
|     // initialize internal vars | ||||
|     d_dump = dump; | ||||
|     d_fs_in = fs_in; | ||||
|     d_vector_length = vector_length; | ||||
|     d_dump_filename = dump_filename; | ||||
|  | ||||
|     // Initialize tracking  ========================================== | ||||
|     // -- DLL variables -------------------------------------------------------- | ||||
|     d_early_late_spc_chips = early_late_space_chips;            // Define early-late offset (in chips) | ||||
|     d_very_early_late_spc_chips = very_early_late_space_chips;  // Define very-early-late offset (in chips) | ||||
|  | ||||
|     // -- TCP CONNECTOR variables -------------------------------------------------------- | ||||
|     d_port_ch0 = port_ch0; | ||||
|     d_port = 0; | ||||
|     d_listen_connection = true; | ||||
|     d_control_id = 0; | ||||
|     d_Prompt_buffer = volk_gnsssdr::vector<gr_complex>(FLAGS_cn0_samples); | ||||
|  | ||||
|     // Initialization of local code replica | ||||
|     // Get space for a vector with the sinboc(1,1) replica sampled 2x/chip | ||||
|     d_ca_code.resize(2 * GALILEO_E1_B_CODE_LENGTH_CHIPS, gr_complex(0.0, 0.0)); | ||||
|     d_ca_code = volk_gnsssdr::vector<gr_complex>(2 * GALILEO_E1_B_CODE_LENGTH_CHIPS, gr_complex(0.0, 0.0)); | ||||
|  | ||||
|     // correlator outputs (scalar) | ||||
|     d_n_correlator_taps = 5;  // Very-Early, Early, Prompt, Late, Very-Late | ||||
|     d_correlator_outs.resize(d_n_correlator_taps, gr_complex(0.0, 0.0)); | ||||
|     d_correlator_outs = volk_gnsssdr::vector<gr_complex>(d_n_correlator_taps, gr_complex(0.0, 0.0)); | ||||
|     // map memory pointers of correlator outputs | ||||
|     d_Very_Early = &d_correlator_outs[0]; | ||||
|     d_Early = &d_correlator_outs[1]; | ||||
| @@ -124,46 +144,9 @@ Galileo_E1_Tcp_Connector_Tracking_cc::Galileo_E1_Tcp_Connector_Tracking_cc( | ||||
|     d_local_code_shift_chips[3] = d_early_late_spc_chips; | ||||
|     d_local_code_shift_chips[4] = d_very_early_late_spc_chips; | ||||
|  | ||||
|     d_correlation_length_samples = d_vector_length; | ||||
|  | ||||
|     multicorrelator_cpu.init(2 * d_correlation_length_samples, d_n_correlator_taps); | ||||
|  | ||||
|     // --- Perform initializations ------------------------------ | ||||
|     // define initial code frequency basis of NCO | ||||
|     d_code_freq_chips = GALILEO_E1_CODE_CHIP_RATE_CPS; | ||||
|     // define residual code phase (in chips) | ||||
|     d_rem_code_phase_samples = 0.0; | ||||
|     // define residual carrier phase | ||||
|     d_rem_carr_phase_rad = 0.0; | ||||
|  | ||||
|     // sample synchronization | ||||
|     d_sample_counter = 0ULL; | ||||
|     d_acq_sample_stamp = 0; | ||||
|  | ||||
|     d_enable_tracking = false; | ||||
|     d_pull_in = false; | ||||
|  | ||||
|     d_current_prn_length_samples = static_cast<int32_t>(d_vector_length); | ||||
|  | ||||
|     // CN0 estimation and lock detector buffers | ||||
|     d_cn0_estimation_counter = 0; | ||||
|     d_Prompt_buffer = volk_gnsssdr::vector<gr_complex>(FLAGS_cn0_samples); | ||||
|     d_carrier_lock_test = 1; | ||||
|     d_CN0_SNV_dB_Hz = 0; | ||||
|     d_carrier_lock_fail_counter = 0; | ||||
|     d_carrier_lock_threshold = static_cast<float>(FLAGS_carrier_lock_th); | ||||
|     systemName["E"] = std::string("Galileo"); | ||||
|  | ||||
|     d_acquisition_gnss_synchro = nullptr; | ||||
|     d_channel = 0; | ||||
|     d_next_rem_code_phase_samples = 0; | ||||
|     d_acq_code_phase_samples = 0.0; | ||||
|     d_acq_carrier_doppler_hz = 0.0; | ||||
|     d_acc_carrier_phase_rad = 0.0; | ||||
|     d_acc_code_phase_secs = 0.0; | ||||
|     d_code_phase_samples = 0; | ||||
|     d_next_prn_length_samples = 0; | ||||
|     d_carrier_doppler_hz = 0.0; | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -104,8 +104,56 @@ glonass_l1_ca_dll_pll_c_aid_tracking_cc::glonass_l1_ca_dll_pll_c_aid_tracking_cc | ||||
|     float pll_bw_narrow_hz, | ||||
|     float dll_bw_narrow_hz, | ||||
|     int32_t extend_correlation_ms, | ||||
|     float early_late_space_chips) : gr::block("glonass_l1_ca_dll_pll_c_aid_tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|                                         gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) | ||||
|     float early_late_space_chips) | ||||
|     : gr::block("glonass_l1_ca_dll_pll_c_aid_tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|           gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))), | ||||
|       d_dump_filename(dump_filename), | ||||
|       d_acquisition_gnss_synchro(nullptr), | ||||
|       d_fs_in(fs_in), | ||||
|       d_glonass_freq_ch(0), | ||||
|       d_early_late_spc_chips(early_late_space_chips), | ||||
|       d_vector_length(vector_length), | ||||
|       d_channel(0), | ||||
|       d_n_correlator_taps(3), | ||||
|       d_rem_code_phase_samples(0.0), | ||||
|       d_rem_code_phase_chips(0.0), | ||||
|       d_rem_carrier_phase_rad(0.0), | ||||
|       d_rem_code_phase_integer_samples(0), | ||||
|       d_acq_code_phase_samples(0.0), | ||||
|       d_acq_carrier_doppler_hz(0.0), | ||||
|       d_dll_bw_hz(dll_bw_hz), | ||||
|       d_pll_bw_hz(pll_bw_hz), | ||||
|       d_dll_bw_narrow_hz(dll_bw_narrow_hz), | ||||
|       d_pll_bw_narrow_hz(pll_bw_narrow_hz), | ||||
|       d_code_freq_chips(GLONASS_L1_CA_CODE_RATE_CPS), | ||||
|       d_code_phase_step_chips(0.0), | ||||
|       d_carrier_doppler_hz(0.0), | ||||
|       d_carrier_frequency_hz(0.0), | ||||
|       d_carrier_doppler_old_hz(0.0), | ||||
|       d_carrier_phase_step_rad(0.0), | ||||
|       d_acc_carrier_phase_cycles(0.0), | ||||
|       d_code_phase_samples(0.0), | ||||
|       d_pll_to_dll_assist_secs_Ti(0.0), | ||||
|       d_code_error_chips_Ti(0.0), | ||||
|       d_code_error_filt_chips_s(0.0), | ||||
|       d_code_error_filt_chips_Ti(0.0), | ||||
|       d_carr_phase_error_secs_Ti(0.0), | ||||
|       d_preamble_timestamp_s(0.0), | ||||
|       d_extend_correlation_ms(extend_correlation_ms), | ||||
|       d_correlation_length_samples(static_cast<int32_t>(d_vector_length)), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_acq_sample_stamp(0), | ||||
|       d_cn0_estimation_counter(0), | ||||
|       d_carrier_lock_test(1), | ||||
|       d_CN0_SNV_dB_Hz(0), | ||||
|       d_carrier_lock_threshold(FLAGS_carrier_lock_th), | ||||
|       d_carrier_lock_fail_counter(0), | ||||
|       d_enable_extended_integration(false), | ||||
|       d_preamble_synchronized(false), | ||||
|       d_enable_tracking(false), | ||||
|       d_pull_in(false), | ||||
|       d_acc_carrier_phase_initialized(false), | ||||
|       d_dump(dump) | ||||
| { | ||||
|     // Telemetry bit synchronization message port input | ||||
|     this->message_port_register_in(pmt::mp("preamble_timestamp_s")); | ||||
| @@ -122,31 +170,16 @@ glonass_l1_ca_dll_pll_c_aid_tracking_cc::glonass_l1_ca_dll_pll_c_aid_tracking_cc | ||||
| #endif | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     this->message_port_register_in(pmt::mp("telemetry_to_trk")); | ||||
|     // initialize internal vars | ||||
|     d_dump = dump; | ||||
|     d_fs_in = fs_in; | ||||
|     d_vector_length = vector_length; | ||||
|     d_dump_filename = dump_filename; | ||||
|     d_correlation_length_samples = static_cast<int32_t>(d_vector_length); | ||||
|  | ||||
|     // Initialize tracking  ========================================== | ||||
|     d_pll_bw_hz = pll_bw_hz; | ||||
|     d_dll_bw_hz = dll_bw_hz; | ||||
|     d_pll_bw_narrow_hz = pll_bw_narrow_hz; | ||||
|     d_dll_bw_narrow_hz = dll_bw_narrow_hz; | ||||
|     d_extend_correlation_ms = extend_correlation_ms; | ||||
|     d_code_loop_filter.set_DLL_BW(d_dll_bw_hz); | ||||
|     d_carrier_loop_filter.set_params(10.0, d_pll_bw_hz, 2); | ||||
|  | ||||
|     // --- DLL variables -------------------------------------------------------- | ||||
|     d_early_late_spc_chips = early_late_space_chips;  // Define early-late offset (in chips) | ||||
|  | ||||
|     // Initialization of local code replica | ||||
|     // Get space for a vector with the C/A code replica sampled 1x/chip | ||||
|     d_ca_code = volk_gnsssdr::vector<gr_complex>(static_cast<size_t>(GLONASS_L1_CA_CODE_LENGTH_CHIPS)); | ||||
|  | ||||
|     // correlator outputs (scalar) | ||||
|     d_n_correlator_taps = 3;  // Early, Prompt, and Late | ||||
|     // correlator outputs | ||||
|     d_correlator_outs = volk_gnsssdr::vector<gr_complex>(d_n_correlator_taps); | ||||
|  | ||||
|     d_local_code_shift_chips = volk_gnsssdr::vector<float>(d_n_correlator_taps); | ||||
| @@ -157,59 +190,10 @@ glonass_l1_ca_dll_pll_c_aid_tracking_cc::glonass_l1_ca_dll_pll_c_aid_tracking_cc | ||||
|  | ||||
|     multicorrelator_cpu.init(2 * d_correlation_length_samples, d_n_correlator_taps); | ||||
|  | ||||
|     // --- Perform initializations ------------------------------ | ||||
|     // define initial code frequency basis of NCO | ||||
|     d_code_freq_chips = GLONASS_L1_CA_CODE_RATE_CPS; | ||||
|     // define residual code phase (in chips) | ||||
|     d_rem_code_phase_samples = 0.0; | ||||
|     // define residual carrier phase | ||||
|     d_rem_carrier_phase_rad = 0.0; | ||||
|  | ||||
|     // sample synchronization | ||||
|     d_sample_counter = 0ULL;  // (from trk to tlm) | ||||
|     d_acq_sample_stamp = 0; | ||||
|     d_enable_tracking = false; | ||||
|     d_pull_in = false; | ||||
|  | ||||
|     // CN0 estimation and lock detector buffers | ||||
|     d_cn0_estimation_counter = 0; | ||||
|     d_Prompt_buffer = volk_gnsssdr::vector<gr_complex>(FLAGS_cn0_samples); | ||||
|     d_carrier_lock_test = 1; | ||||
|     d_CN0_SNV_dB_Hz = 0; | ||||
|     d_carrier_lock_fail_counter = 0; | ||||
|     d_carrier_lock_threshold = FLAGS_carrier_lock_th; | ||||
|  | ||||
|     systemName["R"] = std::string("Glonass"); | ||||
|  | ||||
|     set_relative_rate(1.0 / static_cast<double>(d_vector_length)); | ||||
|  | ||||
|     d_acquisition_gnss_synchro = nullptr; | ||||
|     d_channel = 0; | ||||
|     d_acq_code_phase_samples = 0.0; | ||||
|     d_acq_carrier_doppler_hz = 0.0; | ||||
|     d_carrier_doppler_hz = 0.0; | ||||
|     d_code_error_filt_chips_Ti = 0.0; | ||||
|     d_acc_carrier_phase_cycles = 0.0; | ||||
|     d_code_phase_samples = 0.0; | ||||
|  | ||||
|     d_pll_to_dll_assist_secs_Ti = 0.0; | ||||
|     d_rem_code_phase_chips = 0.0; | ||||
|     d_code_phase_step_chips = 0.0; | ||||
|     d_carrier_phase_step_rad = 0.0; | ||||
|     d_enable_extended_integration = false; | ||||
|     d_preamble_synchronized = false; | ||||
|     d_rem_code_phase_integer_samples = 0; | ||||
|     d_code_error_chips_Ti = 0.0; | ||||
|     d_code_error_filt_chips_s = 0.0; | ||||
|     d_carr_phase_error_secs_Ti = 0.0; | ||||
|     d_preamble_timestamp_s = 0.0; | ||||
|  | ||||
|     d_carrier_frequency_hz = 0.0; | ||||
|     d_carrier_doppler_old_hz = 0.0; | ||||
|  | ||||
|     d_glonass_freq_ch = 0; | ||||
|  | ||||
|     d_acc_carrier_phase_initialized = false; | ||||
|     // set_min_output_buffer((int64_t)300); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -102,8 +102,56 @@ glonass_l1_ca_dll_pll_c_aid_tracking_sc::glonass_l1_ca_dll_pll_c_aid_tracking_sc | ||||
|     float pll_bw_narrow_hz, | ||||
|     float dll_bw_narrow_hz, | ||||
|     int32_t extend_correlation_ms, | ||||
|     float early_late_space_chips) : gr::block("glonass_l1_ca_dll_pll_c_aid_tracking_sc", gr::io_signature::make(1, 1, sizeof(lv_16sc_t)), | ||||
|                                         gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) | ||||
|     float early_late_space_chips) | ||||
|     : gr::block("glonass_l1_ca_dll_pll_c_aid_tracking_sc", gr::io_signature::make(1, 1, sizeof(lv_16sc_t)), | ||||
|           gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))), | ||||
|       d_acquisition_gnss_synchro(nullptr), | ||||
|       d_dump_filename(dump_filename), | ||||
|       d_fs_in(fs_in), | ||||
|       d_glonass_freq_ch(0), | ||||
|       d_early_late_spc_chips(early_late_space_chips), | ||||
|       d_vector_length(vector_length), | ||||
|       d_channel(0), | ||||
|       d_n_correlator_taps(3), | ||||
|       d_rem_code_phase_samples(0.0), | ||||
|       d_rem_code_phase_chips(0.0), | ||||
|       d_rem_carrier_phase_rad(0.0), | ||||
|       d_rem_code_phase_integer_samples(0), | ||||
|       d_acq_code_phase_samples(0.0), | ||||
|       d_acq_carrier_doppler_hz(0.0), | ||||
|       d_dll_bw_hz(dll_bw_hz), | ||||
|       d_pll_bw_hz(pll_bw_hz), | ||||
|       d_dll_bw_narrow_hz(dll_bw_narrow_hz), | ||||
|       d_pll_bw_narrow_hz(pll_bw_narrow_hz), | ||||
|       d_code_freq_chips(GLONASS_L1_CA_CODE_RATE_CPS), | ||||
|       d_code_phase_step_chips(0.0), | ||||
|       d_carrier_doppler_hz(0.0), | ||||
|       d_carrier_frequency_hz(0.0), | ||||
|       d_carrier_doppler_old_hz(0.0), | ||||
|       d_carrier_phase_step_rad(0.0), | ||||
|       d_acc_carrier_phase_cycles(0.0), | ||||
|       d_code_phase_samples(0.0), | ||||
|       d_pll_to_dll_assist_secs_Ti(0.0), | ||||
|       d_carr_phase_error_secs_Ti(0.0), | ||||
|       d_code_error_chips_Ti(0.0), | ||||
|       d_preamble_timestamp_s(0.0), | ||||
|       d_extend_correlation_ms(extend_correlation_ms), | ||||
|       d_code_error_filt_chips_s(0.0), | ||||
|       d_code_error_filt_chips_Ti(0.0), | ||||
|       d_correlation_length_samples(static_cast<int32_t>(d_vector_length)), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_acq_sample_stamp(0), | ||||
|       d_cn0_estimation_counter(0), | ||||
|       d_carrier_lock_test(1), | ||||
|       d_CN0_SNV_dB_Hz(0), | ||||
|       d_carrier_lock_threshold(FLAGS_carrier_lock_th), | ||||
|       d_carrier_lock_fail_counter(0), | ||||
|       d_enable_extended_integration(false), | ||||
|       d_preamble_synchronized(false), | ||||
|       d_enable_tracking(false), | ||||
|       d_pull_in(false), | ||||
|       d_acc_carrier_phase_initialized(false), | ||||
|       d_dump(dump) | ||||
| { | ||||
|     // Telemetry bit synchronization message port input | ||||
|     this->message_port_register_in(pmt::mp("preamble_timestamp_s")); | ||||
| @@ -119,31 +167,14 @@ glonass_l1_ca_dll_pll_c_aid_tracking_sc::glonass_l1_ca_dll_pll_c_aid_tracking_sc | ||||
| #endif | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     this->message_port_register_in(pmt::mp("telemetry_to_trk")); | ||||
|     // initialize internal vars | ||||
|     d_dump = dump; | ||||
|     d_fs_in = fs_in; | ||||
|     d_vector_length = vector_length; | ||||
|     d_dump_filename = dump_filename; | ||||
|     d_correlation_length_samples = static_cast<int32_t>(d_vector_length); | ||||
|  | ||||
|     // Initialize tracking  ========================================== | ||||
|     d_pll_bw_hz = pll_bw_hz; | ||||
|     d_dll_bw_hz = dll_bw_hz; | ||||
|     d_pll_bw_narrow_hz = pll_bw_narrow_hz; | ||||
|     d_dll_bw_narrow_hz = dll_bw_narrow_hz; | ||||
|     d_code_loop_filter.set_DLL_BW(d_dll_bw_hz); | ||||
|     d_carrier_loop_filter.set_params(10.0, d_pll_bw_hz, 2); | ||||
|     d_extend_correlation_ms = extend_correlation_ms; | ||||
|  | ||||
|     // --- DLL variables -------------------------------------------------------- | ||||
|     d_early_late_spc_chips = early_late_space_chips;  // Define early-late offset (in chips) | ||||
|  | ||||
|     // Initialization of local code replica | ||||
|     // Get space for a vector with the C/A code replica sampled 1x/chip | ||||
|     d_ca_code = volk_gnsssdr::vector<gr_complex>(static_cast<size_t>(GLONASS_L1_CA_CODE_LENGTH_CHIPS)); | ||||
|     d_ca_code_16sc = volk_gnsssdr::vector<lv_16sc_t>(static_cast<size_t>(GLONASS_L1_CA_CODE_LENGTH_CHIPS)); | ||||
|     // correlator outputs (scalar) | ||||
|     d_n_correlator_taps = 3;  // Early, Prompt, and Late | ||||
|  | ||||
|     d_correlator_outs_16sc = volk_gnsssdr::vector<lv_16sc_t>(d_n_correlator_taps); | ||||
|  | ||||
| @@ -155,58 +186,11 @@ glonass_l1_ca_dll_pll_c_aid_tracking_sc::glonass_l1_ca_dll_pll_c_aid_tracking_sc | ||||
|  | ||||
|     multicorrelator_cpu_16sc.init(2 * d_correlation_length_samples, d_n_correlator_taps); | ||||
|  | ||||
|     // -- Perform initializations ------------------------------ | ||||
|     // define initial code frequency basis of NCO | ||||
|     d_code_freq_chips = GLONASS_L1_CA_CODE_RATE_CPS; | ||||
|     // define residual code phase (in chips) | ||||
|     d_rem_code_phase_samples = 0.0; | ||||
|     // define residual carrier phase | ||||
|     d_rem_carrier_phase_rad = 0.0; | ||||
|  | ||||
|     // sample synchronization | ||||
|     d_sample_counter = 0ULL;  // (from trk to tlm) | ||||
|     d_acq_sample_stamp = 0; | ||||
|     d_enable_tracking = false; | ||||
|     d_pull_in = false; | ||||
|  | ||||
|     // CN0 estimation and lock detector buffers | ||||
|     d_cn0_estimation_counter = 0; | ||||
|     d_Prompt_buffer = volk_gnsssdr::vector<gr_complex>(FLAGS_cn0_samples); | ||||
|     d_carrier_lock_test = 1; | ||||
|     d_CN0_SNV_dB_Hz = 0; | ||||
|     d_carrier_lock_fail_counter = 0; | ||||
|     d_carrier_lock_threshold = FLAGS_carrier_lock_th; | ||||
|  | ||||
|     systemName["R"] = std::string("Glonass"); | ||||
|  | ||||
|     set_relative_rate(1.0 / static_cast<double>(d_vector_length)); | ||||
|  | ||||
|     d_acquisition_gnss_synchro = nullptr; | ||||
|     d_channel = 0; | ||||
|     d_acq_code_phase_samples = 0.0; | ||||
|     d_acq_carrier_doppler_hz = 0.0; | ||||
|     d_carrier_doppler_hz = 0.0; | ||||
|     d_acc_carrier_phase_cycles = 0.0; | ||||
|     d_code_phase_samples = 0.0; | ||||
|     d_enable_extended_integration = false; | ||||
|     d_preamble_synchronized = false; | ||||
|     d_rem_code_phase_integer_samples = 0; | ||||
|     d_code_error_chips_Ti = 0.0; | ||||
|     d_pll_to_dll_assist_secs_Ti = 0.0; | ||||
|     d_rem_code_phase_chips = 0.0; | ||||
|     d_code_phase_step_chips = 0.0; | ||||
|     d_carrier_phase_step_rad = 0.0; | ||||
|     d_code_error_filt_chips_s = 0.0; | ||||
|     d_code_error_filt_chips_Ti = 0.0; | ||||
|     d_preamble_timestamp_s = 0.0; | ||||
|     d_carr_phase_error_secs_Ti = 0.0; | ||||
|  | ||||
|     d_carrier_frequency_hz = 0.0; | ||||
|     d_carrier_doppler_old_hz = 0.0; | ||||
|  | ||||
|     d_glonass_freq_ch = 0; | ||||
|  | ||||
|     d_acc_carrier_phase_initialized = false; | ||||
|     // set_min_output_buffer((int64_t)300); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -77,32 +77,53 @@ Glonass_L1_Ca_Dll_Pll_Tracking_cc::Glonass_L1_Ca_Dll_Pll_Tracking_cc( | ||||
|     const std::string &dump_filename, | ||||
|     float pll_bw_hz, | ||||
|     float dll_bw_hz, | ||||
|     float early_late_space_chips) : gr::block("Glonass_L1_Ca_Dll_Pll_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|                                         gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) | ||||
|     float early_late_space_chips) | ||||
|     : gr::block("Glonass_L1_Ca_Dll_Pll_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|           gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))), | ||||
|       d_acquisition_gnss_synchro(nullptr), | ||||
|       d_dump_filename(dump_filename), | ||||
|       d_fs_in(fs_in), | ||||
|       d_glonass_freq_ch(0), | ||||
|       d_early_late_spc_chips(early_late_space_chips), | ||||
|       d_vector_length(vector_length), | ||||
|       d_channel(0), | ||||
|       d_rem_code_phase_samples(0.0), | ||||
|       d_rem_code_phase_chips(0.0), | ||||
|       d_rem_carr_phase_rad(0.0), | ||||
|       d_acq_code_phase_samples(0.0), | ||||
|       d_acq_carrier_doppler_hz(0.0), | ||||
|       d_code_freq_chips(GLONASS_L1_CA_CODE_RATE_CPS), | ||||
|       d_code_phase_step_chips(0.0), | ||||
|       d_carrier_doppler_hz(0.0), | ||||
|       d_carrier_doppler_phase_step_rad(0.0), | ||||
|       d_carrier_frequency_hz(0.0), | ||||
|       d_carrier_phase_step_rad(0.0), | ||||
|       d_acc_carrier_phase_rad(0.0), | ||||
|       d_code_phase_samples(0.0), | ||||
|       d_n_correlator_taps(3), | ||||
|       d_current_prn_length_samples(static_cast<int32_t>(d_vector_length)), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_acq_sample_stamp(0), | ||||
|       d_carrier_lock_test(1), | ||||
|       d_CN0_SNV_dB_Hz(0), | ||||
|       d_carrier_lock_threshold(FLAGS_carrier_lock_th), | ||||
|       d_carrier_lock_fail_counter(0), | ||||
|       d_cn0_estimation_counter(0), | ||||
|       d_enable_tracking(false), | ||||
|       d_pull_in(false), | ||||
|       d_acc_carrier_phase_initialized(false), | ||||
|       d_dump(dump) | ||||
| { | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     this->message_port_register_in(pmt::mp("telemetry_to_trk")); | ||||
|     // initialize internal vars | ||||
|     d_dump = dump; | ||||
|     d_fs_in = fs_in; | ||||
|     d_vector_length = vector_length; | ||||
|     d_dump_filename = dump_filename; | ||||
|  | ||||
|     d_current_prn_length_samples = static_cast<int32_t>(d_vector_length); | ||||
|  | ||||
|     // Initialize tracking  ========================================== | ||||
|     d_code_loop_filter.set_DLL_BW(dll_bw_hz); | ||||
|     d_carrier_loop_filter.set_PLL_BW(pll_bw_hz); | ||||
|  | ||||
|     // --- DLL variables ------------------------------------------------------- | ||||
|     d_early_late_spc_chips = early_late_space_chips;  // Define early-late offset (in chips) | ||||
|  | ||||
|     // Initialization of local code replica | ||||
|     // Get space for a vector with the C/A code replica sampled 1x/chip | ||||
|     d_ca_code = volk_gnsssdr::vector<gr_complex>(static_cast<size_t>(GLONASS_L1_CA_CODE_LENGTH_CHIPS)); | ||||
|  | ||||
|     // correlator outputs (scalar) | ||||
|     d_n_correlator_taps = 3;  // Early, Prompt, and Late | ||||
|     d_correlator_outs = volk_gnsssdr::vector<gr_complex>(d_n_correlator_taps); | ||||
|  | ||||
|     d_local_code_shift_chips = volk_gnsssdr::vector<float>(d_n_correlator_taps); | ||||
| @@ -113,48 +134,10 @@ Glonass_L1_Ca_Dll_Pll_Tracking_cc::Glonass_L1_Ca_Dll_Pll_Tracking_cc( | ||||
|  | ||||
|     multicorrelator_cpu.init(2 * d_current_prn_length_samples, d_n_correlator_taps); | ||||
|  | ||||
|     // --- Perform initializations ------------------------------ | ||||
|     // define initial code frequency basis of NCO | ||||
|     d_code_freq_chips = GLONASS_L1_CA_CODE_RATE_CPS; | ||||
|     // define residual code phase (in chips) | ||||
|     d_rem_code_phase_samples = 0.0; | ||||
|     // define residual carrier phase | ||||
|     d_rem_carr_phase_rad = 0.0; | ||||
|  | ||||
|     // sample synchronization | ||||
|     d_sample_counter = 0ULL; | ||||
|     // d_sample_counter_seconds = 0; | ||||
|     d_acq_sample_stamp = 0; | ||||
|  | ||||
|     d_enable_tracking = false; | ||||
|     d_pull_in = false; | ||||
|  | ||||
|     // CN0 estimation and lock detector buffers | ||||
|     d_cn0_estimation_counter = 0; | ||||
|     d_Prompt_buffer = volk_gnsssdr::vector<gr_complex>(FLAGS_cn0_samples); | ||||
|     d_carrier_lock_test = 1; | ||||
|     d_CN0_SNV_dB_Hz = 0; | ||||
|     d_carrier_lock_fail_counter = 0; | ||||
|     d_carrier_lock_threshold = FLAGS_carrier_lock_th; | ||||
|  | ||||
|     systemName["R"] = std::string("Glonass"); | ||||
|  | ||||
|     d_acquisition_gnss_synchro = nullptr; | ||||
|     d_channel = 0; | ||||
|     d_acq_code_phase_samples = 0.0; | ||||
|     d_acq_carrier_doppler_hz = 0.0; | ||||
|     d_carrier_doppler_hz = 0.0; | ||||
|     d_carrier_doppler_phase_step_rad = 0.0; | ||||
|     d_carrier_frequency_hz = 0.0; | ||||
|     d_acc_carrier_phase_rad = 0.0; | ||||
|     d_code_phase_samples = 0.0; | ||||
|     d_rem_code_phase_chips = 0.0; | ||||
|     d_code_phase_step_chips = 0.0; | ||||
|     d_carrier_phase_step_rad = 0.0; | ||||
|  | ||||
|     d_glonass_freq_ch = 0; | ||||
|  | ||||
|     d_acc_carrier_phase_initialized = false; | ||||
|     set_relative_rate(1.0 / static_cast<double>(d_vector_length)); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -101,8 +101,56 @@ glonass_l2_ca_dll_pll_c_aid_tracking_cc::glonass_l2_ca_dll_pll_c_aid_tracking_cc | ||||
|     float pll_bw_narrow_hz, | ||||
|     float dll_bw_narrow_hz, | ||||
|     int32_t extend_correlation_ms, | ||||
|     float early_late_space_chips) : gr::block("glonass_l2_ca_dll_pll_c_aid_tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|                                         gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) | ||||
|     float early_late_space_chips) | ||||
|     : gr::block("glonass_l2_ca_dll_pll_c_aid_tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|           gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))), | ||||
|       d_dump_filename(dump_filename), | ||||
|       d_acquisition_gnss_synchro(nullptr), | ||||
|       d_fs_in(fs_in), | ||||
|       d_glonass_freq_ch(0), | ||||
|       d_early_late_spc_chips(early_late_space_chips), | ||||
|       d_vector_length(vector_length), | ||||
|       d_channel(0), | ||||
|       d_n_correlator_taps(3), | ||||
|       d_rem_code_phase_samples(0.0), | ||||
|       d_rem_code_phase_chips(0.0), | ||||
|       d_rem_carrier_phase_rad(0.0), | ||||
|       d_rem_code_phase_integer_samples(0), | ||||
|       d_acq_code_phase_samples(0.0), | ||||
|       d_acq_carrier_doppler_hz(0.0), | ||||
|       d_dll_bw_hz(dll_bw_hz), | ||||
|       d_pll_bw_hz(pll_bw_hz), | ||||
|       d_dll_bw_narrow_hz(dll_bw_narrow_hz), | ||||
|       d_pll_bw_narrow_hz(pll_bw_narrow_hz), | ||||
|       d_code_freq_chips(GLONASS_L2_CA_CODE_RATE_CPS), | ||||
|       d_code_phase_step_chips(0.0), | ||||
|       d_carrier_doppler_hz(0.0), | ||||
|       d_carrier_frequency_hz(0.0), | ||||
|       d_carrier_doppler_old_hz(0.0), | ||||
|       d_carrier_phase_step_rad(0.0), | ||||
|       d_acc_carrier_phase_cycles(0.0), | ||||
|       d_code_phase_samples(0.0), | ||||
|       d_pll_to_dll_assist_secs_Ti(0.0), | ||||
|       d_code_error_chips_Ti(0.0), | ||||
|       d_code_error_filt_chips_s(0.0), | ||||
|       d_code_error_filt_chips_Ti(0.0), | ||||
|       d_carr_phase_error_secs_Ti(0.0), | ||||
|       d_preamble_timestamp_s(0.0), | ||||
|       d_extend_correlation_ms(extend_correlation_ms), | ||||
|       d_correlation_length_samples(static_cast<int32_t>(d_vector_length)), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_acq_sample_stamp(0), | ||||
|       d_cn0_estimation_counter(0), | ||||
|       d_carrier_lock_test(1), | ||||
|       d_CN0_SNV_dB_Hz(0), | ||||
|       d_carrier_lock_threshold(FLAGS_carrier_lock_th), | ||||
|       d_carrier_lock_fail_counter(0), | ||||
|       d_enable_extended_integration(false), | ||||
|       d_preamble_synchronized(false), | ||||
|       d_enable_tracking(false), | ||||
|       d_pull_in(false), | ||||
|       d_acc_carrier_phase_initialized(false), | ||||
|       d_dump(dump) | ||||
| { | ||||
|     // Telemetry bit synchronization message port input | ||||
|     this->message_port_register_in(pmt::mp("preamble_timestamp_s")); | ||||
| @@ -119,31 +167,14 @@ glonass_l2_ca_dll_pll_c_aid_tracking_cc::glonass_l2_ca_dll_pll_c_aid_tracking_cc | ||||
| #endif | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     this->message_port_register_in(pmt::mp("telemetry_to_trk")); | ||||
|     // initialize internal vars | ||||
|     d_dump = dump; | ||||
|     d_fs_in = fs_in; | ||||
|     d_vector_length = vector_length; | ||||
|     d_dump_filename = dump_filename; | ||||
|     d_correlation_length_samples = static_cast<int32_t>(d_vector_length); | ||||
|  | ||||
|     // Initialize tracking  ========================================== | ||||
|     d_pll_bw_hz = pll_bw_hz; | ||||
|     d_dll_bw_hz = dll_bw_hz; | ||||
|     d_pll_bw_narrow_hz = pll_bw_narrow_hz; | ||||
|     d_dll_bw_narrow_hz = dll_bw_narrow_hz; | ||||
|     d_extend_correlation_ms = extend_correlation_ms; | ||||
|     d_code_loop_filter.set_DLL_BW(d_dll_bw_hz); | ||||
|     d_carrier_loop_filter.set_params(10.0, d_pll_bw_hz, 2); | ||||
|  | ||||
|     // --- DLL variables -------------------------------------------------------- | ||||
|     d_early_late_spc_chips = early_late_space_chips;  // Define early-late offset (in chips) | ||||
|  | ||||
|     // Initialization of local code replica | ||||
|     // Get space for a vector with the C/A code replica sampled 1x/chip | ||||
|     d_ca_code = volk_gnsssdr::vector<gr_complex>(static_cast<size_t>(GLONASS_L2_CA_CODE_LENGTH_CHIPS)); | ||||
|  | ||||
|     // correlator outputs (scalar) | ||||
|     d_n_correlator_taps = 3;  // Early, Prompt, and Late | ||||
|     d_correlator_outs = volk_gnsssdr::vector<gr_complex>(d_n_correlator_taps); | ||||
|  | ||||
|     d_local_code_shift_chips = volk_gnsssdr::vector<float>(d_n_correlator_taps); | ||||
| @@ -154,59 +185,11 @@ glonass_l2_ca_dll_pll_c_aid_tracking_cc::glonass_l2_ca_dll_pll_c_aid_tracking_cc | ||||
|  | ||||
|     multicorrelator_cpu.init(2 * d_correlation_length_samples, d_n_correlator_taps); | ||||
|  | ||||
|     // --- Perform initializations ------------------------------ | ||||
|     // define initial code frequency basis of NCO | ||||
|     d_code_freq_chips = GLONASS_L2_CA_CODE_RATE_CPS; | ||||
|     // define residual code phase (in chips) | ||||
|     d_rem_code_phase_samples = 0.0; | ||||
|     // define residual carrier phase | ||||
|     d_rem_carrier_phase_rad = 0.0; | ||||
|  | ||||
|     // sample synchronization | ||||
|     d_sample_counter = 0ULL;  // (from trk to tlm) | ||||
|     d_acq_sample_stamp = 0; | ||||
|     d_enable_tracking = false; | ||||
|     d_pull_in = false; | ||||
|  | ||||
|     // CN0 estimation and lock detector buffers | ||||
|     d_cn0_estimation_counter = 0; | ||||
|     d_Prompt_buffer = volk_gnsssdr::vector<gr_complex>(FLAGS_cn0_samples); | ||||
|     d_carrier_lock_test = 1; | ||||
|     d_CN0_SNV_dB_Hz = 0; | ||||
|     d_carrier_lock_fail_counter = 0; | ||||
|     d_carrier_lock_threshold = FLAGS_carrier_lock_th; | ||||
|  | ||||
|     systemName["R"] = std::string("Glonass"); | ||||
|  | ||||
|     set_relative_rate(1.0 / static_cast<double>(d_vector_length)); | ||||
|  | ||||
|     d_acquisition_gnss_synchro = nullptr; | ||||
|     d_channel = 0; | ||||
|     d_acq_code_phase_samples = 0.0; | ||||
|     d_acq_carrier_doppler_hz = 0.0; | ||||
|     d_carrier_doppler_hz = 0.0; | ||||
|     d_code_error_filt_chips_Ti = 0.0; | ||||
|     d_acc_carrier_phase_cycles = 0.0; | ||||
|     d_code_phase_samples = 0.0; | ||||
|  | ||||
|     d_pll_to_dll_assist_secs_Ti = 0.0; | ||||
|     d_rem_code_phase_chips = 0.0; | ||||
|     d_code_phase_step_chips = 0.0; | ||||
|     d_carrier_phase_step_rad = 0.0; | ||||
|     d_enable_extended_integration = false; | ||||
|     d_preamble_synchronized = false; | ||||
|     d_rem_code_phase_integer_samples = 0; | ||||
|     d_code_error_chips_Ti = 0.0; | ||||
|     d_code_error_filt_chips_s = 0.0; | ||||
|     d_carr_phase_error_secs_Ti = 0.0; | ||||
|     d_preamble_timestamp_s = 0.0; | ||||
|  | ||||
|     d_carrier_frequency_hz = 0.0; | ||||
|     d_carrier_doppler_old_hz = 0.0; | ||||
|  | ||||
|     d_glonass_freq_ch = 0; | ||||
|  | ||||
|     d_acc_carrier_phase_initialized = false; | ||||
|     // set_min_output_buffer((int64_t)300); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -100,8 +100,56 @@ glonass_l2_ca_dll_pll_c_aid_tracking_sc::glonass_l2_ca_dll_pll_c_aid_tracking_sc | ||||
|     float pll_bw_narrow_hz, | ||||
|     float dll_bw_narrow_hz, | ||||
|     int32_t extend_correlation_ms, | ||||
|     float early_late_space_chips) : gr::block("glonass_l1_ca_dll_pll_c_aid_tracking_sc", gr::io_signature::make(1, 1, sizeof(lv_16sc_t)), | ||||
|                                         gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) | ||||
|     float early_late_space_chips) | ||||
|     : gr::block("glonass_l1_ca_dll_pll_c_aid_tracking_sc", gr::io_signature::make(1, 1, sizeof(lv_16sc_t)), | ||||
|           gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))), | ||||
|       d_dump_filename(dump_filename), | ||||
|       d_acquisition_gnss_synchro(nullptr), | ||||
|       d_fs_in(fs_in), | ||||
|       d_glonass_freq_ch(0), | ||||
|       d_early_late_spc_chips(early_late_space_chips), | ||||
|       d_vector_length(vector_length), | ||||
|       d_channel(0), | ||||
|       d_n_correlator_taps(3), | ||||
|       d_rem_code_phase_samples(0.0), | ||||
|       d_rem_code_phase_chips(0.0), | ||||
|       d_rem_carrier_phase_rad(0.0), | ||||
|       d_rem_code_phase_integer_samples(0), | ||||
|       d_acq_code_phase_samples(0.0), | ||||
|       d_acq_carrier_doppler_hz(0.0), | ||||
|       d_dll_bw_hz(dll_bw_hz), | ||||
|       d_pll_bw_hz(pll_bw_hz), | ||||
|       d_dll_bw_narrow_hz(dll_bw_narrow_hz), | ||||
|       d_pll_bw_narrow_hz(pll_bw_narrow_hz), | ||||
|       d_code_freq_chips(GLONASS_L2_CA_CODE_RATE_CPS), | ||||
|       d_code_phase_step_chips(0.0), | ||||
|       d_carrier_doppler_hz(0.0), | ||||
|       d_carrier_frequency_hz(0.0), | ||||
|       d_carrier_doppler_old_hz(0.0), | ||||
|       d_carrier_phase_step_rad(0.0), | ||||
|       d_acc_carrier_phase_cycles(0.0), | ||||
|       d_code_phase_samples(0.0), | ||||
|       d_pll_to_dll_assist_secs_Ti(0.0), | ||||
|       d_carr_phase_error_secs_Ti(0.0), | ||||
|       d_code_error_chips_Ti(0.0), | ||||
|       d_preamble_timestamp_s(0.0), | ||||
|       d_extend_correlation_ms(extend_correlation_ms), | ||||
|       d_code_error_filt_chips_s(0.0), | ||||
|       d_code_error_filt_chips_Ti(0.0), | ||||
|       d_correlation_length_samples(static_cast<int32_t>(d_vector_length)), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_acq_sample_stamp(0), | ||||
|       d_carrier_lock_test(1), | ||||
|       d_CN0_SNV_dB_Hz(0), | ||||
|       d_carrier_lock_threshold(FLAGS_carrier_lock_th), | ||||
|       d_carrier_lock_fail_counter(0), | ||||
|       d_cn0_estimation_counter(0), | ||||
|       d_enable_extended_integration(false), | ||||
|       d_preamble_synchronized(false), | ||||
|       d_enable_tracking(false), | ||||
|       d_pull_in(false), | ||||
|       d_acc_carrier_phase_initialized(false), | ||||
|       d_dump(dump) | ||||
| { | ||||
|     // Telemetry bit synchronization message port input | ||||
|     this->message_port_register_in(pmt::mp("preamble_timestamp_s")); | ||||
| @@ -117,33 +165,15 @@ glonass_l2_ca_dll_pll_c_aid_tracking_sc::glonass_l2_ca_dll_pll_c_aid_tracking_sc | ||||
| #endif | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     this->message_port_register_in(pmt::mp("telemetry_to_trk")); | ||||
|     // initialize internal vars | ||||
|     d_dump = dump; | ||||
|     d_fs_in = fs_in; | ||||
|     d_vector_length = vector_length; | ||||
|     d_dump_filename = dump_filename; | ||||
|     d_correlation_length_samples = static_cast<int32_t>(d_vector_length); | ||||
|  | ||||
|     // Initialize tracking  ========================================== | ||||
|     d_pll_bw_hz = pll_bw_hz; | ||||
|     d_dll_bw_hz = dll_bw_hz; | ||||
|     d_pll_bw_narrow_hz = pll_bw_narrow_hz; | ||||
|     d_dll_bw_narrow_hz = dll_bw_narrow_hz; | ||||
|     d_code_loop_filter.set_DLL_BW(d_dll_bw_hz); | ||||
|     d_carrier_loop_filter.set_params(10.0, d_pll_bw_hz, 2); | ||||
|     d_extend_correlation_ms = extend_correlation_ms; | ||||
|  | ||||
|     // --- DLL variables -------------------------------------------------------- | ||||
|     d_early_late_spc_chips = early_late_space_chips;  // Define early-late offset (in chips) | ||||
|  | ||||
|     // Initialization of local code replica | ||||
|     // Get space for a vector with the C/A code replica sampled 1x/chip | ||||
|     d_ca_code = volk_gnsssdr::vector<gr_complex>(static_cast<size_t>(GLONASS_L2_CA_CODE_LENGTH_CHIPS)); | ||||
|     d_ca_code_16sc = volk_gnsssdr::vector<lv_16sc_t>(static_cast<size_t>(GLONASS_L2_CA_CODE_LENGTH_CHIPS)); | ||||
|  | ||||
|     // correlator outputs (scalar) | ||||
|     d_n_correlator_taps = 3;  // Early, Prompt, and Late | ||||
|  | ||||
|     d_correlator_outs_16sc = volk_gnsssdr::vector<lv_16sc_t>(d_n_correlator_taps); | ||||
|     d_local_code_shift_chips = volk_gnsssdr::vector<float>(d_n_correlator_taps); | ||||
|     // Set TAPs delay values [chips] | ||||
| @@ -153,58 +183,11 @@ glonass_l2_ca_dll_pll_c_aid_tracking_sc::glonass_l2_ca_dll_pll_c_aid_tracking_sc | ||||
|  | ||||
|     multicorrelator_cpu_16sc.init(2 * d_correlation_length_samples, d_n_correlator_taps); | ||||
|  | ||||
|     // -- Perform initializations ------------------------------ | ||||
|     // define initial code frequency basis of NCO | ||||
|     d_code_freq_chips = GLONASS_L2_CA_CODE_RATE_CPS; | ||||
|     // define residual code phase (in chips) | ||||
|     d_rem_code_phase_samples = 0.0; | ||||
|     // define residual carrier phase | ||||
|     d_rem_carrier_phase_rad = 0.0; | ||||
|  | ||||
|     // sample synchronization | ||||
|     d_sample_counter = 0ULL;  // (from trk to tlm) | ||||
|     d_acq_sample_stamp = 0; | ||||
|     d_enable_tracking = false; | ||||
|     d_pull_in = false; | ||||
|  | ||||
|     // CN0 estimation and lock detector buffers | ||||
|     d_cn0_estimation_counter = 0; | ||||
|     d_Prompt_buffer = volk_gnsssdr::vector<gr_complex>(FLAGS_cn0_samples); | ||||
|     d_carrier_lock_test = 1; | ||||
|     d_CN0_SNV_dB_Hz = 0; | ||||
|     d_carrier_lock_fail_counter = 0; | ||||
|     d_carrier_lock_threshold = FLAGS_carrier_lock_th; | ||||
|  | ||||
|     systemName["R"] = std::string("Glonass"); | ||||
|  | ||||
|     set_relative_rate(1.0 / static_cast<double>(d_vector_length)); | ||||
|  | ||||
|     d_acquisition_gnss_synchro = nullptr; | ||||
|     d_channel = 0; | ||||
|     d_acq_code_phase_samples = 0.0; | ||||
|     d_acq_carrier_doppler_hz = 0.0; | ||||
|     d_carrier_doppler_hz = 0.0; | ||||
|     d_acc_carrier_phase_cycles = 0.0; | ||||
|     d_code_phase_samples = 0.0; | ||||
|     d_enable_extended_integration = false; | ||||
|     d_preamble_synchronized = false; | ||||
|     d_rem_code_phase_integer_samples = 0; | ||||
|     d_code_error_chips_Ti = 0.0; | ||||
|     d_pll_to_dll_assist_secs_Ti = 0.0; | ||||
|     d_rem_code_phase_chips = 0.0; | ||||
|     d_code_phase_step_chips = 0.0; | ||||
|     d_carrier_phase_step_rad = 0.0; | ||||
|     d_code_error_filt_chips_s = 0.0; | ||||
|     d_code_error_filt_chips_Ti = 0.0; | ||||
|     d_preamble_timestamp_s = 0.0; | ||||
|     d_carr_phase_error_secs_Ti = 0.0; | ||||
|  | ||||
|     d_carrier_frequency_hz = 0.0; | ||||
|     d_carrier_doppler_old_hz = 0.0; | ||||
|  | ||||
|     d_glonass_freq_ch = 0; | ||||
|  | ||||
|     d_acc_carrier_phase_initialized = false; | ||||
|     // set_min_output_buffer((int64_t)300); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -78,32 +78,53 @@ Glonass_L2_Ca_Dll_Pll_Tracking_cc::Glonass_L2_Ca_Dll_Pll_Tracking_cc( | ||||
|     const std::string &dump_filename, | ||||
|     float pll_bw_hz, | ||||
|     float dll_bw_hz, | ||||
|     float early_late_space_chips) : gr::block("Glonass_L2_Ca_Dll_Pll_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|                                         gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) | ||||
|     float early_late_space_chips) | ||||
|     : gr::block("Glonass_L1_Ca_Dll_Pll_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|           gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))), | ||||
|       d_dump_filename(dump_filename), | ||||
|       d_acquisition_gnss_synchro(nullptr), | ||||
|       d_fs_in(fs_in), | ||||
|       d_glonass_freq_ch(0), | ||||
|       d_early_late_spc_chips(early_late_space_chips), | ||||
|       d_vector_length(vector_length), | ||||
|       d_channel(0), | ||||
|       d_rem_code_phase_samples(0.0), | ||||
|       d_rem_code_phase_chips(0.0), | ||||
|       d_rem_carr_phase_rad(0.0), | ||||
|       d_acq_code_phase_samples(0.0), | ||||
|       d_acq_carrier_doppler_hz(0.0), | ||||
|       d_n_correlator_taps(3), | ||||
|       d_code_freq_chips(GLONASS_L2_CA_CODE_RATE_CPS), | ||||
|       d_code_phase_step_chips(0.0), | ||||
|       d_carrier_doppler_hz(0.0), | ||||
|       d_carrier_doppler_phase_step_rad(0.0), | ||||
|       d_carrier_frequency_hz(0.0), | ||||
|       d_carrier_phase_step_rad(0.0), | ||||
|       d_acc_carrier_phase_rad(0.0), | ||||
|       d_code_phase_samples(0.0), | ||||
|       d_current_prn_length_samples(static_cast<int32_t>(d_vector_length)), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_acq_sample_stamp(0), | ||||
|       d_carrier_lock_test(1), | ||||
|       d_CN0_SNV_dB_Hz(0), | ||||
|       d_carrier_lock_threshold(FLAGS_carrier_lock_th), | ||||
|       d_cn0_estimation_counter(0), | ||||
|       d_carrier_lock_fail_counter(0), | ||||
|       d_enable_tracking(false), | ||||
|       d_pull_in(false), | ||||
|       d_acc_carrier_phase_initialized(false), | ||||
|       d_dump(dump) | ||||
| { | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     this->message_port_register_in(pmt::mp("telemetry_to_trk")); | ||||
|     // initialize internal vars | ||||
|     d_dump = dump; | ||||
|     d_fs_in = fs_in; | ||||
|     d_vector_length = vector_length; | ||||
|     d_dump_filename = dump_filename; | ||||
|  | ||||
|     d_current_prn_length_samples = static_cast<int32_t>(d_vector_length); | ||||
|  | ||||
|     // Initialize tracking  ========================================== | ||||
|     d_code_loop_filter.set_DLL_BW(dll_bw_hz); | ||||
|     d_carrier_loop_filter.set_PLL_BW(pll_bw_hz); | ||||
|  | ||||
|     // --- DLL variables ------------------------------------------------------- | ||||
|     d_early_late_spc_chips = early_late_space_chips;  // Define early-late offset (in chips) | ||||
|  | ||||
|     // Initialization of local code replica | ||||
|     // Get space for a vector with the C/A code replica sampled 1x/chip | ||||
|     d_ca_code = volk_gnsssdr::vector<gr_complex>(static_cast<size_t>(GLONASS_L2_CA_CODE_LENGTH_CHIPS)); | ||||
|  | ||||
|     // correlator outputs (scalar) | ||||
|     d_n_correlator_taps = 3;  // Early, Prompt, and Late | ||||
|     d_correlator_outs = volk_gnsssdr::vector<gr_complex>(d_n_correlator_taps); | ||||
|  | ||||
|     d_local_code_shift_chips = volk_gnsssdr::vector<float>(d_n_correlator_taps); | ||||
| @@ -114,49 +135,10 @@ Glonass_L2_Ca_Dll_Pll_Tracking_cc::Glonass_L2_Ca_Dll_Pll_Tracking_cc( | ||||
|  | ||||
|     multicorrelator_cpu.init(2 * d_current_prn_length_samples, d_n_correlator_taps); | ||||
|  | ||||
|     // --- Perform initializations ------------------------------ | ||||
|     // define initial code frequency basis of NCO | ||||
|     d_code_freq_chips = GLONASS_L2_CA_CODE_RATE_CPS; | ||||
|     // define residual code phase (in chips) | ||||
|     d_rem_code_phase_samples = 0.0; | ||||
|     // define residual carrier phase | ||||
|     d_rem_carr_phase_rad = 0.0; | ||||
|  | ||||
|     // sample synchronization | ||||
|     d_sample_counter = 0ULL; | ||||
|     // d_sample_counter_seconds = 0; | ||||
|     d_acq_sample_stamp = 0; | ||||
|  | ||||
|     d_enable_tracking = false; | ||||
|     d_pull_in = false; | ||||
|  | ||||
|     // CN0 estimation and lock detector buffers | ||||
|     d_cn0_estimation_counter = 0; | ||||
|     d_Prompt_buffer = volk_gnsssdr::vector<gr_complex>(FLAGS_cn0_samples); | ||||
|     d_carrier_lock_test = 1; | ||||
|     d_CN0_SNV_dB_Hz = 0; | ||||
|     d_carrier_lock_fail_counter = 0; | ||||
|     d_carrier_lock_threshold = FLAGS_carrier_lock_th; | ||||
|  | ||||
|     systemName["R"] = std::string("Glonass"); | ||||
|  | ||||
|     d_acquisition_gnss_synchro = nullptr; | ||||
|     d_channel = 0; | ||||
|     d_acq_code_phase_samples = 0.0; | ||||
|     d_acq_carrier_doppler_hz = 0.0; | ||||
|     d_carrier_doppler_hz = 0.0; | ||||
|     d_carrier_doppler_phase_step_rad = 0.0; | ||||
|     d_carrier_frequency_hz = 0.0; | ||||
|     d_acc_carrier_phase_rad = 0.0; | ||||
|     d_code_phase_samples = 0.0; | ||||
|     d_rem_code_phase_chips = 0.0; | ||||
|     d_code_phase_step_chips = 0.0; | ||||
|     d_carrier_phase_step_rad = 0.0; | ||||
|  | ||||
|     d_glonass_freq_ch = 0; | ||||
|  | ||||
|     d_acc_carrier_phase_initialized = false; | ||||
|  | ||||
|     set_relative_rate(1.0 / static_cast<double>(d_vector_length)); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -47,7 +47,6 @@ | ||||
|  | ||||
| gps_l1_ca_kf_tracking_cc_sptr gps_l1_ca_kf_make_tracking_cc( | ||||
|     uint32_t order, | ||||
|     int64_t if_freq, | ||||
|     int64_t fs_in, | ||||
|     uint32_t vector_length, | ||||
|     bool dump, | ||||
| @@ -60,7 +59,7 @@ gps_l1_ca_kf_tracking_cc_sptr gps_l1_ca_kf_make_tracking_cc( | ||||
|     int32_t bce_nu, | ||||
|     int32_t bce_kappa) | ||||
| { | ||||
|     return gps_l1_ca_kf_tracking_cc_sptr(new Gps_L1_Ca_Kf_Tracking_cc(order, if_freq, | ||||
|     return gps_l1_ca_kf_tracking_cc_sptr(new Gps_L1_Ca_Kf_Tracking_cc(order, | ||||
|         fs_in, vector_length, dump, dump_filename, dll_bw_hz, early_late_space_chips, | ||||
|         bce_run, bce_ptrans, bce_strans, bce_nu, bce_kappa)); | ||||
| } | ||||
| @@ -78,7 +77,6 @@ void Gps_L1_Ca_Kf_Tracking_cc::forecast(int noutput_items, | ||||
|  | ||||
| Gps_L1_Ca_Kf_Tracking_cc::Gps_L1_Ca_Kf_Tracking_cc( | ||||
|     uint32_t order, | ||||
|     int64_t if_freq, | ||||
|     int64_t fs_in, | ||||
|     uint32_t vector_length, | ||||
|     bool dump, | ||||
| @@ -89,36 +87,64 @@ Gps_L1_Ca_Kf_Tracking_cc::Gps_L1_Ca_Kf_Tracking_cc( | ||||
|     uint32_t bce_ptrans, | ||||
|     uint32_t bce_strans, | ||||
|     int32_t bce_nu, | ||||
|     int32_t bce_kappa) : gr::block("Gps_L1_Ca_Kf_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|                              gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) | ||||
|     int32_t bce_kappa) | ||||
|     : gr::block("Gps_L1_Ca_Kf_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|           gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))), | ||||
|       d_order(order), | ||||
|       d_vector_length(vector_length), | ||||
|       d_dump(dump), | ||||
|       d_acquisition_gnss_synchro(nullptr), | ||||
|       d_channel(0), | ||||
|       d_fs_in(fs_in), | ||||
|       d_early_late_spc_chips(early_late_space_chips), | ||||
|       d_rem_code_phase_samples(0.0), | ||||
|       d_rem_code_phase_chips(0.0), | ||||
|       d_rem_carr_phase_rad(0.0), | ||||
|       bayes_ptrans(bce_ptrans), | ||||
|       bayes_strans(bce_strans), | ||||
|       bayes_nu(bce_nu), | ||||
|       bayes_kappa(bce_kappa), | ||||
|       bayes_run(bce_run), | ||||
|       kf_iter(0), | ||||
|       d_acq_code_phase_samples(0.0), | ||||
|       d_acq_carrier_doppler_hz(0.0), | ||||
|       d_n_correlator_taps(3), | ||||
|       d_code_freq_chips(GPS_L1_CA_CODE_RATE_CPS), | ||||
|       d_code_phase_step_chips(0.0), | ||||
|       d_code_phase_rate_step_chips(0.0), | ||||
|       d_carrier_doppler_hz(0.0), | ||||
|       d_carrier_dopplerrate_hz2(0.0), | ||||
|       d_carrier_phase_step_rad(0.0), | ||||
|       d_acc_carrier_phase_rad(0.0), | ||||
|       d_carr_phase_sigma2(0.0), | ||||
|       d_code_phase_samples(0.0), | ||||
|       code_error_chips(0.0), | ||||
|       code_error_filt_chips(0.0), | ||||
|       d_current_prn_length_samples(static_cast<int>(d_vector_length)), | ||||
|       d_sample_counter(0), | ||||
|       d_acq_sample_stamp(0), | ||||
|       d_cn0_estimation_counter(0), | ||||
|       d_carrier_lock_test(1), | ||||
|       d_CN0_SNV_dB_Hz(0), | ||||
|       d_carrier_lock_threshold(FLAGS_carrier_lock_th), | ||||
|       d_carrier_lock_fail_counter(0), | ||||
|       d_enable_tracking(false), | ||||
|       d_pull_in(false), | ||||
|       d_dump_filename(dump_filename) | ||||
|  | ||||
| { | ||||
|     // Telemetry bit synchronization message port input | ||||
|     this->message_port_register_in(pmt::mp("preamble_timestamp_s")); | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     this->message_port_register_in(pmt::mp("telemetry_to_trk")); | ||||
|     // initialize internal vars | ||||
|     d_order = order; | ||||
|     d_dump = dump; | ||||
|     d_if_freq = if_freq; | ||||
|     d_fs_in = fs_in; | ||||
|     d_vector_length = vector_length; | ||||
|     d_dump_filename = dump_filename; | ||||
|  | ||||
|     d_current_prn_length_samples = static_cast<int>(d_vector_length); | ||||
|  | ||||
|     // Initialize tracking  ========================================== | ||||
|     d_code_loop_filter.set_DLL_BW(dll_bw_hz); | ||||
|  | ||||
|     // --- DLL variables -------------------------------------------------------- | ||||
|     d_early_late_spc_chips = early_late_space_chips;  // Define early-late offset (in chips) | ||||
|  | ||||
|     // Initialization of local code replica | ||||
|     // Get space for a vector with the C/A code replica sampled 1x/chip | ||||
|     d_ca_code.resize(static_cast<int>(GPS_L1_CA_CODE_LENGTH_CHIPS)); | ||||
|     d_ca_code = volk_gnsssdr::vector<float>(static_cast<int>(GPS_L1_CA_CODE_LENGTH_CHIPS)); | ||||
|  | ||||
|     // correlator outputs (scalar) | ||||
|     d_n_correlator_taps = 3;  // Early, Prompt, and Late | ||||
|     d_correlator_outs.resize(d_n_correlator_taps, gr_complex(0.0, 0.0)); | ||||
|     d_correlator_outs = volk_gnsssdr::vector<gr_complex>(d_n_correlator_taps, gr_complex(0.0, 0.0)); | ||||
|  | ||||
|     d_local_code_shift_chips = volk_gnsssdr::vector<float>(d_n_correlator_taps); | ||||
|     // Set TAPs delay values [chips] | ||||
| @@ -128,63 +154,24 @@ Gps_L1_Ca_Kf_Tracking_cc::Gps_L1_Ca_Kf_Tracking_cc( | ||||
|  | ||||
|     multicorrelator_cpu.init(2 * d_current_prn_length_samples, d_n_correlator_taps); | ||||
|  | ||||
|     // --- Perform initializations ------------------------------ | ||||
|     // define initial code frequency basis of NCO | ||||
|     d_code_freq_chips = GPS_L1_CA_CODE_RATE_CPS; | ||||
|     // define residual code phase (in chips) | ||||
|     d_rem_code_phase_samples = 0.0; | ||||
|     // define residual carrier phase | ||||
|     d_rem_carr_phase_rad = 0.0; | ||||
|     // define residual carrier phase covariance | ||||
|     d_carr_phase_sigma2 = 0.0; | ||||
|  | ||||
|     // sample synchronization | ||||
|     d_sample_counter = 0; | ||||
|     d_acq_sample_stamp = 0; | ||||
|  | ||||
|     d_enable_tracking = false; | ||||
|     d_pull_in = false; | ||||
|  | ||||
|     // CN0 estimation and lock detector buffers | ||||
|     d_cn0_estimation_counter = 0; | ||||
|     d_Prompt_buffer = volk_gnsssdr::vector<gr_complex>(FLAGS_cn0_samples); | ||||
|     d_carrier_lock_test = 1; | ||||
|     d_CN0_SNV_dB_Hz = 0; | ||||
|     d_carrier_lock_fail_counter = 0; | ||||
|     d_carrier_lock_threshold = FLAGS_carrier_lock_th; | ||||
|  | ||||
|     systemName["G"] = std::string("GPS"); | ||||
|     systemName["S"] = std::string("SBAS"); | ||||
|  | ||||
|     d_acquisition_gnss_synchro = nullptr; | ||||
|     d_channel = 0; | ||||
|     d_acq_code_phase_samples = 0.0; | ||||
|     d_acq_carrier_doppler_hz = 0.0; | ||||
|     d_carrier_doppler_hz = 0.0; | ||||
|     d_carrier_dopplerrate_hz2 = 0.0; | ||||
|     d_acc_carrier_phase_rad = 0.0; | ||||
|     d_code_phase_samples = 0.0; | ||||
|     d_rem_code_phase_chips = 0.0; | ||||
|     d_code_phase_step_chips = 0.0; | ||||
|     d_code_phase_rate_step_chips = 0.0; | ||||
|     d_carrier_phase_step_rad = 0.0; | ||||
|     code_error_chips = 0.0; | ||||
|     code_error_filt_chips = 0.0; | ||||
|  | ||||
|     set_relative_rate(1.0 / static_cast<double>(d_vector_length)); | ||||
|  | ||||
|     // Kalman filter initialization (receiver initialization) | ||||
|  | ||||
|     double CN_dB_Hz = 30; | ||||
|     double CN_lin = pow(10, CN_dB_Hz / 10.0); | ||||
|     const double CN_dB_Hz = 30; | ||||
|     const double CN_lin = pow(10, CN_dB_Hz / 10.0); | ||||
|  | ||||
|     double sigma2_phase_detector_cycles2; | ||||
|     sigma2_phase_detector_cycles2 = (1.0 / (2.0 * CN_lin * GPS_L1_CA_CODE_PERIOD_S)) * (1.0 + 1.0 / (2.0 * CN_lin * GPS_L1_CA_CODE_PERIOD_S)); | ||||
|     const double sigma2_phase_detector_cycles2 = (1.0 / (2.0 * CN_lin * GPS_L1_CA_CODE_PERIOD_S)) * (1.0 + 1.0 / (2.0 * CN_lin * GPS_L1_CA_CODE_PERIOD_S)); | ||||
|  | ||||
|     // covariances (static) | ||||
|     double sigma2_carrier_phase = TWO_PI / 4; | ||||
|     double sigma2_doppler = 450; | ||||
|     double sigma2_doppler_rate = pow(4.0 * TWO_PI, 2) / 12.0; | ||||
|     const double sigma2_carrier_phase = TWO_PI / 4; | ||||
|     const double sigma2_doppler = 450; | ||||
|     const double sigma2_doppler_rate = pow(4.0 * TWO_PI, 2) / 12.0; | ||||
|  | ||||
|     kf_P_x_ini = arma::zeros(2, 2); | ||||
|     kf_P_x_ini(0, 0) = sigma2_carrier_phase; | ||||
| @@ -236,13 +223,6 @@ Gps_L1_Ca_Kf_Tracking_cc::Gps_L1_Ca_Kf_Tracking_cc( | ||||
|         } | ||||
|  | ||||
|     // Bayesian covariance estimator initialization | ||||
|     kf_iter = 0; | ||||
|     bayes_run = bce_run; | ||||
|     bayes_ptrans = bce_ptrans; | ||||
|     bayes_strans = bce_strans; | ||||
|  | ||||
|     bayes_kappa = bce_kappa; | ||||
|     bayes_nu = bce_nu; | ||||
|     kf_R_est = kf_R; | ||||
|  | ||||
|     bayes_estimator.init(arma::zeros(1, 1), bayes_kappa, bayes_nu, (kf_H * kf_P_x_ini * kf_H.t() + kf_R) * (bayes_nu + 2)); | ||||
| @@ -691,7 +671,7 @@ int Gps_L1_Ca_Kf_Tracking_cc::general_work(int noutput_items __attribute__((unus | ||||
|  | ||||
|             // Kalman estimation (measurement update) | ||||
|             double sigma2_phase_detector_cycles2; | ||||
|             double CN_lin = pow(10, d_CN0_SNV_dB_Hz / 10.0); | ||||
|             const double CN_lin = pow(10, d_CN0_SNV_dB_Hz / 10.0); | ||||
|             sigma2_phase_detector_cycles2 = (1.0 / (2.0 * CN_lin * GPS_L1_CA_CODE_PERIOD_S)) * (1.0 + 1.0 / (2.0 * CN_lin * GPS_L1_CA_CODE_PERIOD_S)); | ||||
|  | ||||
|             kf_y(0) = d_carr_phase_error_rad;  // measurement vector | ||||
|   | ||||
| @@ -55,8 +55,8 @@ using gps_l1_ca_kf_tracking_cc_sptr = gnss_shared_ptr<Gps_L1_Ca_Kf_Tracking_cc>; | ||||
|  | ||||
| gps_l1_ca_kf_tracking_cc_sptr | ||||
| gps_l1_ca_kf_make_tracking_cc(uint32_t order, | ||||
|     int64_t if_freq, | ||||
|     int64_t fs_in, uint32_t vector_length, | ||||
|     int64_t fs_in, | ||||
|     uint32_t vector_length, | ||||
|     bool dump, | ||||
|     const std::string& dump_filename, | ||||
|     float dll_bw_hz, | ||||
| @@ -88,8 +88,8 @@ public: | ||||
| private: | ||||
|     friend gps_l1_ca_kf_tracking_cc_sptr | ||||
|     gps_l1_ca_kf_make_tracking_cc(uint32_t order, | ||||
|         int64_t if_freq, | ||||
|         int64_t fs_in, uint32_t vector_length, | ||||
|         int64_t fs_in, | ||||
|         uint32_t vector_length, | ||||
|         bool dump, | ||||
|         const std::string& dump_filename, | ||||
|         float dll_bw_hz, | ||||
| @@ -101,8 +101,8 @@ private: | ||||
|         int32_t bce_kappa); | ||||
|  | ||||
|     Gps_L1_Ca_Kf_Tracking_cc(uint32_t order, | ||||
|         int64_t if_freq, | ||||
|         int64_t fs_in, uint32_t vector_length, | ||||
|         int64_t fs_in, | ||||
|         uint32_t vector_length, | ||||
|         bool dump, | ||||
|         const std::string& dump_filename, | ||||
|         float dll_bw_hz, | ||||
| @@ -113,6 +113,8 @@ private: | ||||
|         int32_t bce_nu, | ||||
|         int32_t bce_kappa); | ||||
|  | ||||
|     int32_t save_matfile(); | ||||
|  | ||||
|     // tracking configuration vars | ||||
|     uint32_t d_order; | ||||
|     uint32_t d_vector_length; | ||||
| @@ -121,7 +123,6 @@ private: | ||||
|     Gnss_Synchro* d_acquisition_gnss_synchro; | ||||
|     uint32_t d_channel; | ||||
|  | ||||
|     int64_t d_if_freq; | ||||
|     int64_t d_fs_in; | ||||
|  | ||||
|     double d_early_late_spc_chips; | ||||
| @@ -212,8 +213,6 @@ private: | ||||
|  | ||||
|     std::map<std::string, std::string> systemName; | ||||
|     std::string sys; | ||||
|  | ||||
|     int32_t save_matfile(); | ||||
| }; | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -69,39 +69,58 @@ Gps_L1_Ca_Tcp_Connector_Tracking_cc::Gps_L1_Ca_Tcp_Connector_Tracking_cc( | ||||
|     bool dump, | ||||
|     const std::string &dump_filename, | ||||
|     float early_late_space_chips, | ||||
|     size_t port_ch0) : gr::block("Gps_L1_Ca_Tcp_Connector_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|                            gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) | ||||
|     size_t port_ch0) | ||||
|     : gr::block("Gps_L1_Ca_Tcp_Connector_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), | ||||
|           gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))), | ||||
|       d_acquisition_gnss_synchro(nullptr), | ||||
|       d_dump_filename(dump_filename), | ||||
|       d_early_late_spc_chips(early_late_space_chips), | ||||
|       d_code_phase_step_chips(0.0), | ||||
|       d_rem_code_phase_samples(0.0), | ||||
|       d_next_rem_code_phase_samples(0), | ||||
|       d_code_freq_hz(GPS_L1_CA_CODE_RATE_CPS), | ||||
|       d_carrier_doppler_hz(0.0), | ||||
|       d_acc_carrier_phase_rad(0.0), | ||||
|       d_code_phase_samples(0), | ||||
|       d_sample_counter_seconds(0), | ||||
|       d_fs_in(fs_in), | ||||
|       d_sample_counter(0ULL), | ||||
|       d_acq_sample_stamp(0ULL), | ||||
|       d_port_ch0(port_ch0), | ||||
|       d_port(0), | ||||
|       d_vector_length(vector_length), | ||||
|       d_channel(0), | ||||
|       d_correlation_length_samples(d_vector_length), | ||||
|       d_n_correlator_taps(3), | ||||
|       d_listen_connection(true), | ||||
|       d_current_prn_length_samples(static_cast<int32_t>(d_vector_length)), | ||||
|       d_next_prn_length_samples(0), | ||||
|       d_cn0_estimation_counter(0), | ||||
|       d_carrier_lock_fail_counter(0), | ||||
|       d_rem_carr_phase_rad(0.0), | ||||
|       d_acq_code_phase_samples(0.0), | ||||
|       d_acq_carrier_doppler_hz(0.0), | ||||
|       d_carrier_lock_test(1), | ||||
|       d_CN0_SNV_dB_Hz(0), | ||||
|       d_carrier_lock_threshold(static_cast<float>(FLAGS_carrier_lock_th)), | ||||
|       d_control_id(0), | ||||
|       d_enable_tracking(false), | ||||
|       d_pull_in(false), | ||||
|       d_dump(dump) | ||||
| { | ||||
|     this->message_port_register_out(pmt::mp("events")); | ||||
|     this->message_port_register_in(pmt::mp("telemetry_to_trk")); | ||||
|     // initialize internal vars | ||||
|     d_dump = dump; | ||||
|     d_fs_in = fs_in; | ||||
|     d_vector_length = vector_length; | ||||
|     d_dump_filename = dump_filename; | ||||
|  | ||||
|     // -- DLL variables -------------------------------------------------------- | ||||
|     d_early_late_spc_chips = early_late_space_chips;  // Define early-late offset (in chips) | ||||
|  | ||||
|     // -- TCP CONNECTOR variables -------------------------------------------------------- | ||||
|     d_port_ch0 = port_ch0; | ||||
|     d_port = 0; | ||||
|     d_listen_connection = true; | ||||
|     d_control_id = 0; | ||||
|  | ||||
|     // Initialization of local code replica | ||||
|     // Get space for a vector with the C/A code replica sampled 1x/chip | ||||
|     d_ca_code.resize(GPS_L1_CA_CODE_LENGTH_CHIPS); | ||||
|     d_ca_code = volk_gnsssdr::vector<gr_complex>(GPS_L1_CA_CODE_LENGTH_CHIPS); | ||||
|  | ||||
|     // correlator outputs (scalar) | ||||
|     d_n_correlator_taps = 3;  // Very-Early, Early, Prompt, Late, Very-Late | ||||
|     d_correlator_outs.resize(d_n_correlator_taps); | ||||
|     std::fill_n(d_correlator_outs.begin(), d_n_correlator_taps, gr_complex(0.0, 0.0)); | ||||
|     d_correlator_outs = volk_gnsssdr::vector<gr_complex>(d_n_correlator_taps); | ||||
|  | ||||
|     // map memory pointers of correlator outputs | ||||
|     d_Early = &d_correlator_outs[0]; | ||||
|     d_Prompt = &d_correlator_outs[1]; | ||||
|     d_Late = &d_correlator_outs[2]; | ||||
|     d_Early = &d_correlator_outs[0];   // NOLINT(cppcoreguidelines-prefer-member-initializer) | ||||
|     d_Prompt = &d_correlator_outs[1];  // NOLINT(cppcoreguidelines-prefer-member-initializer) | ||||
|     d_Late = &d_correlator_outs[2];    // NOLINT(cppcoreguidelines-prefer-member-initializer) | ||||
|  | ||||
|     d_local_code_shift_chips = volk_gnsssdr::vector<float>(d_n_correlator_taps); | ||||
|     // Set TAPs delay values [chips] | ||||
| @@ -109,52 +128,15 @@ Gps_L1_Ca_Tcp_Connector_Tracking_cc::Gps_L1_Ca_Tcp_Connector_Tracking_cc( | ||||
|     d_local_code_shift_chips[1] = 0.0; | ||||
|     d_local_code_shift_chips[2] = d_early_late_spc_chips; | ||||
|  | ||||
|     d_correlation_length_samples = d_vector_length; | ||||
|  | ||||
|     multicorrelator_cpu.init(2 * d_correlation_length_samples, d_n_correlator_taps); | ||||
|  | ||||
|     // --- Perform initializations ------------------------------ | ||||
|     // define initial code frequency basis of NCO | ||||
|     d_code_freq_hz = GPS_L1_CA_CODE_RATE_CPS; | ||||
|     // define residual code phase (in chips) | ||||
|     d_rem_code_phase_samples = 0.0; | ||||
|     // define residual carrier phase | ||||
|     d_rem_carr_phase_rad = 0.0; | ||||
|  | ||||
|     // sample synchronization | ||||
|     d_sample_counter = 0ULL; | ||||
|     d_sample_counter_seconds = 0; | ||||
|     d_acq_sample_stamp = 0ULL; | ||||
|  | ||||
|     d_enable_tracking = false; | ||||
|     d_pull_in = false; | ||||
|  | ||||
|     d_current_prn_length_samples = static_cast<int32_t>(d_vector_length); | ||||
|  | ||||
|     // CN0 estimation and lock detector buffers | ||||
|     d_cn0_estimation_counter = 0; | ||||
|     d_Prompt_buffer = volk_gnsssdr::vector<gr_complex>(FLAGS_cn0_samples); | ||||
|     d_carrier_lock_test = 1; | ||||
|     d_CN0_SNV_dB_Hz = 0; | ||||
|     d_carrier_lock_fail_counter = 0; | ||||
|     d_carrier_lock_threshold = static_cast<float>(FLAGS_carrier_lock_th); | ||||
|  | ||||
|     systemName["G"] = std::string("GPS"); | ||||
|     systemName["R"] = std::string("GLONASS"); | ||||
|     systemName["S"] = std::string("SBAS"); | ||||
|     systemName["E"] = std::string("Galileo"); | ||||
|     systemName["C"] = std::string("Compass"); | ||||
|  | ||||
|     d_acquisition_gnss_synchro = nullptr; | ||||
|     d_channel = 0; | ||||
|     d_next_rem_code_phase_samples = 0; | ||||
|     d_acq_code_phase_samples = 0.0; | ||||
|     d_acq_carrier_doppler_hz = 0.0; | ||||
|     d_carrier_doppler_hz = 0.0; | ||||
|     d_acc_carrier_phase_rad = 0.0; | ||||
|     d_code_phase_samples = 0; | ||||
|     d_next_prn_length_samples = 0; | ||||
|     d_code_phase_step_chips = 0.0; | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -458,8 +458,8 @@ kf_vtl_tracking::kf_vtl_tracking(const Kf_Conf &conf_) | ||||
|             d_n_correlator_taps = 3; | ||||
|         } | ||||
|  | ||||
|     d_correlator_outs.reserve(d_n_correlator_taps); | ||||
|     d_local_code_shift_chips.reserve(d_n_correlator_taps); | ||||
|     d_correlator_outs = volk_gnsssdr::vector<gr_complex>(d_n_correlator_taps); | ||||
|     d_local_code_shift_chips = volk_gnsssdr::vector<float>(d_n_correlator_taps); | ||||
|     // map memory pointers of correlator outputs | ||||
|     if (d_veml) | ||||
|         { | ||||
| @@ -517,9 +517,9 @@ kf_vtl_tracking::kf_vtl_tracking(const Kf_Conf &conf_) | ||||
|     d_code_freq_kf_chips_s = d_code_chip_rate; | ||||
|  | ||||
|     // CN0 estimation and lock detector buffers | ||||
|     d_Prompt_buffer.reserve(d_trk_parameters.cn0_samples); | ||||
|     d_Prompt_buffer = volk_gnsssdr::vector<gr_complex>(d_trk_parameters.cn0_samples); | ||||
|  | ||||
|     d_Prompt_Data.reserve(1); | ||||
|     d_Prompt_Data = volk_gnsssdr::vector<gr_complex>(1); | ||||
|     d_cn0_smoother = Exponential_Smoother(); | ||||
|     d_cn0_smoother.set_alpha(d_trk_parameters.cn0_smoother_alpha); | ||||
|  | ||||
|   | ||||
| @@ -21,6 +21,10 @@ | ||||
| #ifndef GNSS_SDR_KF_VTL_TRACKING_H | ||||
| #define GNSS_SDR_KF_VTL_TRACKING_H | ||||
|  | ||||
| #if ARMA_NO_BOUND_CHECKING | ||||
| #define ARMA_NO_DEBUG 1 | ||||
| #endif | ||||
|  | ||||
| #include "cpu_multicorrelator_real_codes.h" | ||||
| #include "exponential_smoother.h" | ||||
| #include "gnss_block_interface.h" | ||||
| @@ -46,12 +50,7 @@ | ||||
| class Gnss_Synchro; | ||||
| class kf_vtl_tracking; | ||||
|  | ||||
| #if GNURADIO_USES_STD_POINTERS | ||||
| using kf_vtl_tracking_sptr = std::shared_ptr<kf_vtl_tracking>; | ||||
| #else | ||||
| using kf_vtl_tracking_sptr = boost::shared_ptr<kf_vtl_tracking>; | ||||
| #endif | ||||
|  | ||||
| using kf_vtl_tracking_sptr = gnss_shared_ptr<kf_vtl_tracking>; | ||||
|  | ||||
| kf_vtl_tracking_sptr kf_vtl_make_tracking(const Kf_Conf &conf_); | ||||
|  | ||||
|   | ||||
| @@ -11,7 +11,6 @@ set(TRACKING_LIB_SOURCES | ||||
|     cpu_multicorrelator_16sc.cc | ||||
|     lock_detectors.cc | ||||
|     tcp_communication.cc | ||||
|     tcp_packet_data.cc | ||||
|     tracking_2nd_DLL_filter.cc | ||||
|     tracking_2nd_PLL_filter.cc | ||||
|     tracking_discriminators.cc | ||||
|   | ||||
| @@ -32,37 +32,37 @@ | ||||
|  | ||||
|  | ||||
| Bayesian_estimator::Bayesian_estimator() | ||||
|     : kappa_prior(0), | ||||
|       nu_prior(0) | ||||
| { | ||||
|     int ny = 1; | ||||
|     mu_prior = arma::zeros(ny, 1); | ||||
|     kappa_prior = 0; | ||||
|     nu_prior = 0; | ||||
|     Psi_prior = arma::eye(ny, ny) * (nu_prior + ny + 1); | ||||
|  | ||||
|     mu_prior = arma::zeros(1, 1); | ||||
|     mu_est = mu_prior; | ||||
|     Psi_prior = arma::eye(1, 1) * (nu_prior + 1 + 1); | ||||
|     Psi_est = Psi_prior; | ||||
| } | ||||
|  | ||||
|  | ||||
| Bayesian_estimator::Bayesian_estimator(int ny) | ||||
|     : kappa_prior(0), | ||||
|       nu_prior(0) | ||||
| { | ||||
|     mu_prior = arma::zeros(ny, 1); | ||||
|     kappa_prior = 0; | ||||
|     nu_prior = 0; | ||||
|     Psi_prior = arma::eye(ny, ny) * (nu_prior + ny + 1); | ||||
|  | ||||
|     mu_est = mu_prior; | ||||
|  | ||||
|     Psi_prior = arma::eye(ny, ny) * (nu_prior + ny + 1); | ||||
|     Psi_est = Psi_prior; | ||||
| } | ||||
|  | ||||
|  | ||||
| Bayesian_estimator::Bayesian_estimator(const arma::vec& mu_prior_0, int kappa_prior_0, int nu_prior_0, const arma::mat& Psi_prior_0) | ||||
| Bayesian_estimator::Bayesian_estimator(const arma::vec& mu_prior_0, | ||||
|     int kappa_prior_0, | ||||
|     int nu_prior_0, | ||||
|     const arma::mat& Psi_prior_0) | ||||
|     : mu_prior(mu_prior_0), | ||||
|       Psi_prior(Psi_prior_0), | ||||
|       kappa_prior(kappa_prior_0), | ||||
|       nu_prior(nu_prior_0) | ||||
| { | ||||
|     mu_prior = mu_prior_0; | ||||
|     kappa_prior = kappa_prior_0; | ||||
|     nu_prior = nu_prior_0; | ||||
|     Psi_prior = Psi_prior_0; | ||||
|  | ||||
|     mu_est = mu_prior; | ||||
|     Psi_est = Psi_prior; | ||||
| } | ||||
|   | ||||
| @@ -31,33 +31,29 @@ | ||||
| /***************** CUBATURE KALMAN FILTER *****************/ | ||||
|  | ||||
| CubatureFilter::CubatureFilter() | ||||
|     : x_pred_out(arma::zeros(1, 1)), | ||||
|       P_x_pred_out(arma::eye(1, 1) * (1 + 1)), | ||||
|       x_est(x_pred_out), | ||||
|       P_x_est(P_x_pred_out) | ||||
| { | ||||
|     int nx = 1; | ||||
|     x_pred_out = arma::zeros(nx, 1); | ||||
|     P_x_pred_out = arma::eye(nx, nx) * (nx + 1); | ||||
|  | ||||
|     x_est = x_pred_out; | ||||
|     P_x_est = P_x_pred_out; | ||||
| } | ||||
|  | ||||
|  | ||||
| CubatureFilter::CubatureFilter(int nx) | ||||
|     : x_pred_out(arma::zeros(nx, 1)), | ||||
|       P_x_pred_out(arma::eye(nx, nx) * (nx + 1)), | ||||
|       x_est(x_pred_out), | ||||
|       P_x_est(P_x_pred_out) | ||||
| { | ||||
|     x_pred_out = arma::zeros(nx, 1); | ||||
|     P_x_pred_out = arma::eye(nx, nx) * (nx + 1); | ||||
|  | ||||
|     x_est = x_pred_out; | ||||
|     P_x_est = P_x_pred_out; | ||||
| } | ||||
|  | ||||
|  | ||||
| CubatureFilter::CubatureFilter(const arma::vec& x_pred_0, const arma::mat& P_x_pred_0) | ||||
|     : x_pred_out(x_pred_0), | ||||
|       P_x_pred_out(P_x_pred_0), | ||||
|       x_est(x_pred_out), | ||||
|       P_x_est(P_x_pred_out) | ||||
| { | ||||
|     x_pred_out = x_pred_0; | ||||
|     P_x_pred_out = P_x_pred_0; | ||||
|  | ||||
|     x_est = x_pred_out; | ||||
|     P_x_est = P_x_pred_out; | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -189,33 +185,29 @@ arma::mat CubatureFilter::get_P_x_est() const | ||||
| /***************** UNSCENTED KALMAN FILTER *****************/ | ||||
|  | ||||
| UnscentedFilter::UnscentedFilter() | ||||
|     : x_pred_out(arma::zeros(1, 1)), | ||||
|       P_x_pred_out(arma::eye(1, 1) * (1 + 1)), | ||||
|       x_est(x_pred_out), | ||||
|       P_x_est(P_x_pred_out) | ||||
| { | ||||
|     int nx = 1; | ||||
|     x_pred_out = arma::zeros(nx, 1); | ||||
|     P_x_pred_out = arma::eye(nx, nx) * (nx + 1); | ||||
|  | ||||
|     x_est = x_pred_out; | ||||
|     P_x_est = P_x_pred_out; | ||||
| } | ||||
|  | ||||
|  | ||||
| UnscentedFilter::UnscentedFilter(int nx) | ||||
|     : x_pred_out(arma::zeros(nx, 1)), | ||||
|       P_x_pred_out(arma::eye(nx, nx) * (nx + 1)), | ||||
|       x_est(x_pred_out), | ||||
|       P_x_est(P_x_pred_out) | ||||
| { | ||||
|     x_pred_out = arma::zeros(nx, 1); | ||||
|     P_x_pred_out = arma::eye(nx, nx) * (nx + 1); | ||||
|  | ||||
|     x_est = x_pred_out; | ||||
|     P_x_est = P_x_pred_out; | ||||
| } | ||||
|  | ||||
|  | ||||
| UnscentedFilter::UnscentedFilter(const arma::vec& x_pred_0, const arma::mat& P_x_pred_0) | ||||
|     : x_pred_out(x_pred_0), | ||||
|       P_x_pred_out(P_x_pred_0), | ||||
|       x_est(x_pred_out), | ||||
|       P_x_est(P_x_pred_out) | ||||
| { | ||||
|     x_pred_out = x_pred_0; | ||||
|     P_x_pred_out = P_x_pred_0; | ||||
|  | ||||
|     x_est = x_pred_out; | ||||
|     P_x_est = P_x_pred_out; | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -1,24 +0,0 @@ | ||||
| /*! | ||||
|  * \file tcp_packet_data.cc | ||||
|  * \brief Interface of the TCP packet data class | ||||
|  * \author David Pubill, 2011. dpubill(at)cttc.es | ||||
|  * | ||||
|  * | ||||
|  * ----------------------------------------------------------------------------- | ||||
|  * | ||||
|  * GNSS-SDR is a Global Navigation Satellite System software-defined receiver. | ||||
|  * This file is part of GNSS-SDR. | ||||
|  * | ||||
|  * Copyright (C) 2010-2020  (see AUTHORS file for a list of contributors) | ||||
|  * SPDX-License-Identifier: GPL-3.0-or-later | ||||
|  * | ||||
|  * ----------------------------------------------------------------------------- | ||||
|  */ | ||||
| #include "tcp_packet_data.h" | ||||
|  | ||||
| Tcp_Packet_Data::Tcp_Packet_Data() | ||||
| { | ||||
|     proc_pack_code_error = 0; | ||||
|     proc_pack_carr_error = 0; | ||||
|     proc_pack_carrier_doppler_hz = 0; | ||||
| } | ||||
| @@ -30,11 +30,11 @@ | ||||
| class Tcp_Packet_Data | ||||
| { | ||||
| public: | ||||
|     Tcp_Packet_Data(); | ||||
|     Tcp_Packet_Data() = default; | ||||
|     ~Tcp_Packet_Data() = default; | ||||
|     float proc_pack_code_error; | ||||
|     float proc_pack_carr_error; | ||||
|     float proc_pack_carrier_doppler_hz; | ||||
|     float proc_pack_code_error = 0.0; | ||||
|     float proc_pack_carr_error = 0.0; | ||||
|     float proc_pack_carrier_doppler_hz = 0.0; | ||||
| }; | ||||
|  | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Carles Fernandez
					Carles Fernandez