diff --git a/src/algorithms/acquisition/adapters/beidou_b1i_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/beidou_b1i_pcps_acquisition.cc index 731f8adf1..fd1c68b15 100644 --- a/src/algorithms/acquisition/adapters/beidou_b1i_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/beidou_b1i_pcps_acquisition.cc @@ -31,9 +31,9 @@ * ------------------------------------------------------------------------- */ -#include "beidou_b1i_pcps_acquisition.h" #include "Beidou_B1I.h" #include "acq_conf.h" +#include "beidou_b1i_pcps_acquisition.h" #include "beidou_b1i_signal_processing.h" #include "configuration_interface.h" #include "gnss_sdr_flags.h" @@ -52,69 +52,26 @@ BeidouB1iPcpsAcquisition::BeidouB1iPcpsAcquisition( out_streams_(out_streams) { configuration_ = configuration; - std::string default_item_type = "gr_complex"; - std::string default_dump_filename = "./acquisition.mat"; + acq_parameters_.ms_per_code = 1; + acq_parameters_.SetFromConfiguration(configuration_, role, BEIDOU_B1I_CODE_RATE_CPS, 10e6); LOG(INFO) << "role " << role; - item_type_ = configuration_->property(role + ".item_type", default_item_type); + if (FLAGS_doppler_max != 0) acq_parameters_.doppler_max = FLAGS_doppler_max; + doppler_max_ = acq_parameters_.doppler_max; + doppler_step_ = acq_parameters_.doppler_step; + fs_in_ = acq_parameters_.fs_in; + item_type_ = acq_parameters_.item_type; - int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000); - fs_in_ = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); - acq_parameters_.fs_in = fs_in_; - dump_ = configuration_->property(role + ".dump", false); - acq_parameters_.dump = dump_; - acq_parameters_.dump_channel = configuration_->property(role + ".dump_channel", 0); - blocking_ = configuration_->property(role + ".blocking", true); - acq_parameters_.blocking = blocking_; - doppler_max_ = configuration->property(role + ".doppler_max", 5000); - if (FLAGS_doppler_max != 0) - { - doppler_max_ = FLAGS_doppler_max; - } - acq_parameters_.doppler_max = doppler_max_; - bit_transition_flag_ = configuration_->property(role + ".bit_transition_flag", false); - acq_parameters_.bit_transition_flag = bit_transition_flag_; - use_CFAR_algorithm_flag_ = configuration_->property(role + ".use_CFAR_algorithm", true); // will be false in future versions - acq_parameters_.use_CFAR_algorithm_flag = use_CFAR_algorithm_flag_; - max_dwells_ = configuration_->property(role + ".max_dwells", 1); - acq_parameters_.max_dwells = max_dwells_; - dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); - acq_parameters_.dump_filename = dump_filename_; - acq_parameters_.sampled_ms = configuration_->property(role + ".coherent_integration_time_ms", 1); - - if (item_type_ == "cshort") - { - item_size_ = sizeof(lv_16sc_t); - } - else - { - item_size_ = sizeof(gr_complex); - } - - acq_parameters_.ms_per_code = 1; - acq_parameters_.it_size = item_size_; num_codes_ = acq_parameters_.sampled_ms; - acq_parameters_.num_doppler_bins_step2 = configuration_->property(role + ".second_nbins", 4); - acq_parameters_.doppler_step2 = configuration_->property(role + ".second_doppler_step", 125.0); - acq_parameters_.make_2_steps = configuration_->property(role + ".make_two_steps", false); - acq_parameters_.blocking_on_standby = configuration_->property(role + ".blocking_on_standby", false); - acq_parameters_.use_automatic_resampler = configuration_->property("GNSS-SDR.use_acquisition_resampler", false); - - acq_parameters_.resampled_fs = fs_in_; - // --- Find number of samples per spreading code ------------------------- code_length_ = static_cast(std::floor(static_cast(fs_in_) / (BEIDOU_B1I_CODE_RATE_CPS / BEIDOU_B1I_CODE_LENGTH_CHIPS))); - acq_parameters_.samples_per_ms = static_cast(fs_in_) * 0.001; - acq_parameters_.samples_per_chip = static_cast(ceil((1.0 / BEIDOU_B1I_CODE_RATE_CPS) * static_cast(acq_parameters_.fs_in))); - - - acq_parameters_.samples_per_code = acq_parameters_.samples_per_ms * static_cast(BEIDOU_B1I_CODE_PERIOD_S * 1000.0); vector_length_ = std::floor(acq_parameters_.sampled_ms * acq_parameters_.samples_per_ms) * (acq_parameters_.bit_transition_flag ? 2 : 1); code_ = std::vector>(vector_length_); + acquisition_ = pcps_make_acquisition(acq_parameters_); DLOG(INFO) << "acquisition(" << acquisition_->unique_id() << ")"; - if (item_type_ == "cbyte") + if (item_type_ == "ic8") { cbyte_to_float_x2_ = make_complex_byte_to_float_x2(); float_to_complex_ = gr::blocks::float_to_complex::make(); @@ -122,7 +79,6 @@ BeidouB1iPcpsAcquisition::BeidouB1iPcpsAcquisition( channel_ = 0; threshold_ = 0.0; - doppler_step_ = 0; gnss_synchro_ = nullptr; if (in_streams_ > 1) @@ -244,15 +200,15 @@ float BeidouB1iPcpsAcquisition::calculate_threshold(float pfa) void BeidouB1iPcpsAcquisition::connect(gr::top_block_sptr top_block) { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { // nothing to connect } - else if (item_type_ == "cshort") + else if (item_type_ == "ic16") { // nothing to connect } - else if (item_type_ == "cbyte") + else if (item_type_ == "ic8") { // Since a byte-based acq implementation is not available, // we just convert cshorts to gr_complex @@ -269,15 +225,15 @@ void BeidouB1iPcpsAcquisition::connect(gr::top_block_sptr top_block) void BeidouB1iPcpsAcquisition::disconnect(gr::top_block_sptr top_block) { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { // nothing to disconnect } - else if (item_type_ == "cshort") + else if (item_type_ == "ic16") { // nothing to disconnect } - else if (item_type_ == "cbyte") + else if (item_type_ == "ic8") { top_block->disconnect(cbyte_to_float_x2_, 0, float_to_complex_, 0); top_block->disconnect(cbyte_to_float_x2_, 1, float_to_complex_, 1); @@ -292,15 +248,15 @@ void BeidouB1iPcpsAcquisition::disconnect(gr::top_block_sptr top_block) gr::basic_block_sptr BeidouB1iPcpsAcquisition::get_left_block() { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { return acquisition_; } - if (item_type_ == "cshort") + if (item_type_ == "ic16") { return acquisition_; } - if (item_type_ == "cbyte") + if (item_type_ == "ic8") { return cbyte_to_float_x2_; } diff --git a/src/algorithms/acquisition/adapters/beidou_b3i_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/beidou_b3i_pcps_acquisition.cc index f825b2d52..e2a8bb267 100644 --- a/src/algorithms/acquisition/adapters/beidou_b3i_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/beidou_b3i_pcps_acquisition.cc @@ -29,9 +29,9 @@ * ------------------------------------------------------------------------- */ -#include "beidou_b3i_pcps_acquisition.h" #include "Beidou_B3I.h" #include "acq_conf.h" +#include "beidou_b3i_pcps_acquisition.h" #include "beidou_b3i_signal_processing.h" #include "configuration_interface.h" #include "gnss_sdr_flags.h" @@ -50,69 +50,26 @@ BeidouB3iPcpsAcquisition::BeidouB3iPcpsAcquisition( out_streams_(out_streams) { configuration_ = configuration; - std::string default_item_type = "gr_complex"; - std::string default_dump_filename = "./acquisition.mat"; + acq_parameters_.ms_per_code = 1; + acq_parameters_.SetFromConfiguration(configuration_, role, BEIDOU_B3I_CODE_RATE_CPS, 100e6); LOG(INFO) << "role " << role; - item_type_ = configuration_->property(role + ".item_type", default_item_type); + if (FLAGS_doppler_max != 0) acq_parameters_.doppler_max = FLAGS_doppler_max; + doppler_max_ = acq_parameters_.doppler_max; + doppler_step_ = acq_parameters_.doppler_step; + item_type_ = acq_parameters_.item_type; + fs_in_ = acq_parameters_.fs_in; - int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000); - fs_in_ = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); - acq_parameters_.fs_in = fs_in_; - dump_ = configuration_->property(role + ".dump", false); - acq_parameters_.dump = dump_; - acq_parameters_.dump_channel = configuration_->property(role + ".dump_channel", 0); - blocking_ = configuration_->property(role + ".blocking", true); - acq_parameters_.blocking = blocking_; - doppler_max_ = configuration->property(role + ".doppler_max", 5000); - if (FLAGS_doppler_max != 0) - { - doppler_max_ = FLAGS_doppler_max; - } - acq_parameters_.doppler_max = doppler_max_; - bit_transition_flag_ = configuration_->property(role + ".bit_transition_flag", false); - acq_parameters_.bit_transition_flag = bit_transition_flag_; - use_CFAR_algorithm_flag_ = configuration_->property(role + ".use_CFAR_algorithm", true); // will be false in future versions - acq_parameters_.use_CFAR_algorithm_flag = use_CFAR_algorithm_flag_; - max_dwells_ = configuration_->property(role + ".max_dwells", 1); - acq_parameters_.max_dwells = max_dwells_; - dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); - acq_parameters_.dump_filename = dump_filename_; - acq_parameters_.sampled_ms = configuration_->property(role + ".coherent_integration_time_ms", 1); - - if (item_type_ == "cshort") - { - item_size_ = sizeof(lv_16sc_t); - } - else - { - item_size_ = sizeof(gr_complex); - } - - acq_parameters_.ms_per_code = 1; - acq_parameters_.it_size = item_size_; num_codes_ = acq_parameters_.sampled_ms; - acq_parameters_.num_doppler_bins_step2 = configuration_->property(role + ".second_nbins", 4); - acq_parameters_.doppler_step2 = configuration_->property(role + ".second_doppler_step", 125.0); - acq_parameters_.make_2_steps = configuration_->property(role + ".make_two_steps", false); - acq_parameters_.blocking_on_standby = configuration_->property(role + ".blocking_on_standby", false); - acq_parameters_.use_automatic_resampler = configuration_->property("GNSS-SDR.use_acquisition_resampler", false); - - acq_parameters_.resampled_fs = fs_in_; - // --- Find number of samples per spreading code ------------------------- code_length_ = static_cast(std::floor(static_cast(fs_in_) / (BEIDOU_B3I_CODE_RATE_CPS / BEIDOU_B3I_CODE_LENGTH_CHIPS))); - acq_parameters_.samples_per_ms = static_cast(fs_in_) * 0.001; - acq_parameters_.samples_per_chip = static_cast(ceil((1.0 / BEIDOU_B3I_CODE_RATE_CPS) * static_cast(acq_parameters_.fs_in))); - - - acq_parameters_.samples_per_code = acq_parameters_.samples_per_ms * static_cast(BEIDOU_B3I_CODE_PERIOD_S * 1000.0); vector_length_ = std::floor(acq_parameters_.sampled_ms * acq_parameters_.samples_per_ms) * (acq_parameters_.bit_transition_flag ? 2 : 1); code_ = std::vector>(vector_length_); + acquisition_ = pcps_make_acquisition(acq_parameters_); DLOG(INFO) << "acquisition(" << acquisition_->unique_id() << ")"; - if (item_type_ == "cbyte") + if (item_type_ == "ic8") { cbyte_to_float_x2_ = make_complex_byte_to_float_x2(); float_to_complex_ = gr::blocks::float_to_complex::make(); @@ -120,7 +77,6 @@ BeidouB3iPcpsAcquisition::BeidouB3iPcpsAcquisition( channel_ = 0; threshold_ = 0.0; - doppler_step_ = 0; gnss_synchro_ = nullptr; if (in_streams_ > 1) @@ -245,15 +201,15 @@ float BeidouB3iPcpsAcquisition::calculate_threshold(float pfa) void BeidouB3iPcpsAcquisition::connect(gr::top_block_sptr top_block) { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { // nothing to connect } - else if (item_type_ == "cshort") + else if (item_type_ == "ic16") { // nothing to connect } - else if (item_type_ == "cbyte") + else if (item_type_ == "ic8") { // Since a byte-based acq implementation is not available, // we just convert cshorts to gr_complex @@ -270,15 +226,15 @@ void BeidouB3iPcpsAcquisition::connect(gr::top_block_sptr top_block) void BeidouB3iPcpsAcquisition::disconnect(gr::top_block_sptr top_block) { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { // nothing to disconnect } - else if (item_type_ == "cshort") + else if (item_type_ == "ic16") { // nothing to disconnect } - else if (item_type_ == "cbyte") + else if (item_type_ == "ic8") { top_block->disconnect(cbyte_to_float_x2_, 0, float_to_complex_, 0); top_block->disconnect(cbyte_to_float_x2_, 1, float_to_complex_, 1); @@ -293,15 +249,15 @@ void BeidouB3iPcpsAcquisition::disconnect(gr::top_block_sptr top_block) gr::basic_block_sptr BeidouB3iPcpsAcquisition::get_left_block() { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { return acquisition_; } - if (item_type_ == "cshort") + if (item_type_ == "ic16") { return acquisition_; } - if (item_type_ == "cbyte") + if (item_type_ == "ic8") { return cbyte_to_float_x2_; } diff --git a/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc index 8325f0527..f5ad51371 100644 --- a/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc @@ -53,10 +53,12 @@ GalileoE1PcpsAmbiguousAcquisition::GalileoE1PcpsAmbiguousAcquisition( acq_parameters_.SetFromConfiguration(configuration_, role, GALILEO_E1_CODE_CHIP_RATE_CPS, GALILEO_E1_OPT_ACQ_FS_SPS); DLOG(INFO) << "role " << role; + + if (FLAGS_doppler_max != 0) acq_parameters_.doppler_max = FLAGS_doppler_max; doppler_max_ = acq_parameters_.doppler_max; doppler_step_ = acq_parameters_.doppler_step; - - if (FLAGS_doppler_max != 0) doppler_max_ = FLAGS_doppler_max; + item_type_ = acq_parameters_.item_type; + fs_in_ = acq_parameters_.fs_in; code_length_ = static_cast(std::floor(static_cast(acq_parameters_.resampled_fs) / (GALILEO_E1_CODE_CHIP_RATE_CPS / GALILEO_E1_B_CODE_LENGTH_CHIPS))); vector_length_ = std::floor(acq_parameters_.sampled_ms * acq_parameters_.samples_per_ms) * (acq_parameters_.bit_transition_flag ? 2 : 1); @@ -67,9 +69,6 @@ GalileoE1PcpsAmbiguousAcquisition::GalileoE1PcpsAmbiguousAcquisition( acquisition_ = pcps_make_acquisition(acq_parameters_); DLOG(INFO) << "acquisition(" << acquisition_->unique_id() << ")"; - item_type_ = acq_parameters_.item_type; - fs_in_ = acq_parameters_.fs_in; - if (item_type_ == "ic8") { cbyte_to_float_x2_ = make_complex_byte_to_float_x2(); @@ -78,7 +77,6 @@ GalileoE1PcpsAmbiguousAcquisition::GalileoE1PcpsAmbiguousAcquisition( channel_ = 0; threshold_ = 0.0; - doppler_step_ = acq_parameters_.doppler_step; doppler_center_ = 0; gnss_synchro_ = nullptr; diff --git a/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition.cc index aafdcc6ae..367f4a58f 100644 --- a/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition.cc @@ -28,11 +28,11 @@ * ------------------------------------------------------------------------- */ -#include "galileo_e5a_pcps_acquisition.h" #include "Galileo_E5a.h" #include "acq_conf.h" #include "configuration_interface.h" #include "galileo_e5_signal_processing.h" +#include "galileo_e5a_pcps_acquisition.h" #include "gnss_sdr_flags.h" #include #include @@ -48,109 +48,36 @@ GalileoE5aPcpsAcquisition::GalileoE5aPcpsAcquisition(ConfigurationInterface* con out_streams_(out_streams) { configuration_ = configuration; - std::string default_item_type = "gr_complex"; - std::string default_dump_filename = "./acquisition.mat"; + acq_parameters_.ms_per_code = 1; + acq_parameters_.SetFromConfiguration(configuration_, role, GALILEO_E5A_CODE_CHIP_RATE_CPS, GALILEO_E5A_OPT_ACQ_FS_SPS); DLOG(INFO) << "Role " << role; - item_type_ = configuration_->property(role + ".item_type", default_item_type); + if (FLAGS_doppler_max != 0) acq_parameters_.doppler_max = FLAGS_doppler_max; + doppler_max_ = acq_parameters_.doppler_max; + doppler_step_ = acq_parameters_.doppler_step; + item_type_ = acq_parameters_.item_type; + fs_in_ = acq_parameters_.fs_in; - int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 32000000); - fs_in_ = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); - acq_parameters_.fs_in = fs_in_; acq_pilot_ = configuration_->property(role + ".acquire_pilot", false); acq_iq_ = configuration_->property(role + ".acquire_iq", false); if (acq_iq_) { acq_pilot_ = false; } - dump_ = configuration_->property(role + ".dump", false); - acq_parameters_.dump = dump_; - acq_parameters_.dump_channel = configuration_->property(role + ".dump_channel", 0); - doppler_max_ = configuration_->property(role + ".doppler_max", 5000); - if (FLAGS_doppler_max != 0) - { - doppler_max_ = FLAGS_doppler_max; - } - acq_parameters_.doppler_max = doppler_max_; - sampled_ms_ = 1; - max_dwells_ = configuration_->property(role + ".max_dwells", 1); - acq_parameters_.max_dwells = max_dwells_; - dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); - acq_parameters_.dump_filename = dump_filename_; - bit_transition_flag_ = configuration_->property(role + ".bit_transition_flag", false); - acq_parameters_.bit_transition_flag = bit_transition_flag_; - use_CFAR_ = configuration_->property(role + ".use_CFAR_algorithm", false); - acq_parameters_.use_CFAR_algorithm_flag = use_CFAR_; - blocking_ = configuration_->property(role + ".blocking", true); - acq_parameters_.blocking = blocking_; - - acq_parameters_.use_automatic_resampler = configuration_->property("GNSS-SDR.use_acquisition_resampler", false); - if (acq_parameters_.use_automatic_resampler == true and item_type_ != "gr_complex") - { - LOG(WARNING) << "Galileo E5a acquisition disabled the automatic resampler feature because its item_type is not set to gr_complex"; - acq_parameters_.use_automatic_resampler = false; - } - if (acq_parameters_.use_automatic_resampler) - { - if (acq_parameters_.fs_in > GALILEO_E5A_OPT_ACQ_FS_SPS) - { - acq_parameters_.resampler_ratio = floor(static_cast(acq_parameters_.fs_in) / GALILEO_E5A_OPT_ACQ_FS_SPS); - uint32_t decimation = acq_parameters_.fs_in / GALILEO_E5A_OPT_ACQ_FS_SPS; - while (acq_parameters_.fs_in % decimation > 0) - { - decimation--; - }; - acq_parameters_.resampler_ratio = decimation; - acq_parameters_.resampled_fs = acq_parameters_.fs_in / static_cast(acq_parameters_.resampler_ratio); - } - - // -- Find number of samples per spreading code ------------------------- - code_length_ = static_cast(std::floor(static_cast(acq_parameters_.resampled_fs) / (GALILEO_E5A_CODE_CHIP_RATE_CPS / GALILEO_E5A_CODE_LENGTH_CHIPS))); - acq_parameters_.samples_per_ms = static_cast(acq_parameters_.resampled_fs) * 0.001; - acq_parameters_.samples_per_chip = static_cast(ceil((1.0 / GALILEO_E5A_CODE_CHIP_RATE_CPS) * static_cast(acq_parameters_.resampled_fs))); - } - else - { - acq_parameters_.resampled_fs = fs_in_; - // -- Find number of samples per spreading code ------------------------- - code_length_ = static_cast(std::floor(static_cast(fs_in_) / (GALILEO_E5A_CODE_CHIP_RATE_CPS / GALILEO_E5A_CODE_LENGTH_CHIPS))); - acq_parameters_.samples_per_ms = static_cast(fs_in_) * 0.001; - acq_parameters_.samples_per_chip = static_cast(ceil((1.0 / GALILEO_E5A_CODE_CHIP_RATE_CPS) * static_cast(acq_parameters_.fs_in))); - } - - // -- Find number of samples per spreading code (1ms)------------------------- - code_length_ = static_cast(std::round(static_cast(fs_in_) / GALILEO_E5A_CODE_CHIP_RATE_CPS * static_cast(GALILEO_E5A_CODE_LENGTH_CHIPS))); - vector_length_ = code_length_ * sampled_ms_; + code_length_ = static_cast(std::floor(static_cast(acq_parameters_.resampled_fs) / (GALILEO_E5A_CODE_CHIP_RATE_CPS / GALILEO_E5A_CODE_LENGTH_CHIPS))); + vector_length_ = std::floor(acq_parameters_.sampled_ms * acq_parameters_.samples_per_ms) * (acq_parameters_.bit_transition_flag ? 2 : 1); code_ = std::vector>(vector_length_); - if (item_type_ == "gr_complex") - { - item_size_ = sizeof(gr_complex); - } - else if (item_type_ == "cshort") - { - item_size_ = sizeof(lv_16sc_t); - } - else - { - item_size_ = sizeof(gr_complex); - LOG(WARNING) << item_type_ << " unknown acquisition item type"; - } - acq_parameters_.it_size = item_size_; - acq_parameters_.sampled_ms = sampled_ms_; - acq_parameters_.ms_per_code = 1; - acq_parameters_.samples_per_code = acq_parameters_.samples_per_ms * static_cast(GALILEO_E5A_CODE_PERIOD_MS); - acq_parameters_.num_doppler_bins_step2 = configuration_->property(role + ".second_nbins", 4); - acq_parameters_.doppler_step2 = configuration_->property(role + ".second_doppler_step", 125.0); - acq_parameters_.make_2_steps = configuration_->property(role + ".make_two_steps", false); - acq_parameters_.blocking_on_standby = configuration_->property(role + ".blocking_on_standby", false); + sampled_ms_ = acq_parameters_.sampled_ms; + acquisition_ = pcps_make_acquisition(acq_parameters_); + DLOG(INFO) << "acquisition(" << acquisition_->unique_id() << ")"; + channel_ = 0; threshold_ = 0.0; - doppler_step_ = 0; doppler_center_ = 0; gnss_synchro_ = nullptr; @@ -307,11 +234,11 @@ void GalileoE5aPcpsAcquisition::set_state(int state) void GalileoE5aPcpsAcquisition::connect(gr::top_block_sptr top_block __attribute__((unused))) { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { // nothing to connect } - else if (item_type_ == "cshort") + else if (item_type_ == "ic16") { // nothing to connect } @@ -324,11 +251,11 @@ void GalileoE5aPcpsAcquisition::connect(gr::top_block_sptr top_block __attribute void GalileoE5aPcpsAcquisition::disconnect(gr::top_block_sptr top_block __attribute__((unused))) { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { // nothing to disconnect } - else if (item_type_ == "cshort") + else if (item_type_ == "ic16") { // nothing to disconnect } diff --git a/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.cc index 6a7fde646..bc9350db7 100644 --- a/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.cc @@ -50,75 +50,28 @@ GlonassL1CaPcpsAcquisition::GlonassL1CaPcpsAcquisition( in_streams_(in_streams), out_streams_(out_streams) { - Acq_Conf acq_parameters = Acq_Conf(); configuration_ = configuration; - std::string default_item_type = "gr_complex"; - std::string default_dump_filename = "./data/acquisition.dat"; + acq_parameters_.ms_per_code = 1; + acq_parameters_.SetFromConfiguration(configuration_, role, GLONASS_L1_CA_CODE_RATE_CPS, 100e6); DLOG(INFO) << "role " << role; - item_type_ = configuration_->property(role + ".item_type", default_item_type); - - int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000); - fs_in_ = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); - acq_parameters.fs_in = fs_in_; - acq_parameters.samples_per_chip = static_cast(ceil(GLONASS_L1_CA_CHIP_PERIOD_S * static_cast(acq_parameters.fs_in))); - dump_ = configuration_->property(role + ".dump", false); - acq_parameters.dump = dump_; - acq_parameters.dump_channel = configuration_->property(role + ".dump_channel", 0); - blocking_ = configuration_->property(role + ".blocking", true); - acq_parameters.blocking = blocking_; - doppler_max_ = configuration_->property(role + ".doppler_max", 5000); - if (FLAGS_doppler_max != 0) - { - doppler_max_ = FLAGS_doppler_max; - } - acq_parameters.doppler_max = doppler_max_; - sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 1); - acq_parameters.sampled_ms = sampled_ms_; - bit_transition_flag_ = configuration_->property(role + ".bit_transition_flag", false); - acq_parameters.bit_transition_flag = bit_transition_flag_; - use_CFAR_algorithm_flag_ = configuration_->property(role + ".use_CFAR_algorithm", true); // will be false in future versions - acq_parameters.use_CFAR_algorithm_flag = use_CFAR_algorithm_flag_; - max_dwells_ = configuration_->property(role + ".max_dwells", 1); - acq_parameters.max_dwells = max_dwells_; - dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); - acq_parameters.dump_filename = dump_filename_; - // --- Find number of samples per spreading code ------------------------- - code_length_ = static_cast(std::round(static_cast(fs_in_) / (GLONASS_L1_CA_CODE_RATE_CPS / GLONASS_L1_CA_CODE_LENGTH_CHIPS))); - - vector_length_ = code_length_ * sampled_ms_; - - if (bit_transition_flag_) - { - vector_length_ *= 2; - } + if (FLAGS_doppler_max != 0) acq_parameters_.doppler_max = FLAGS_doppler_max; + doppler_max_ = acq_parameters_.doppler_max; + doppler_step_ = acq_parameters_.doppler_step; + item_type_ = acq_parameters_.item_type; + fs_in_ = acq_parameters_.fs_in; + code_length_ = static_cast(std::floor(static_cast(acq_parameters_.resampled_fs) / (GLONASS_L1_CA_CODE_RATE_CPS / GLONASS_L1_CA_CODE_LENGTH_CHIPS))); + vector_length_ = std::floor(acq_parameters_.sampled_ms * acq_parameters_.samples_per_ms) * (acq_parameters_.bit_transition_flag ? 2 : 1); code_ = std::vector>(vector_length_); - if (item_type_ == "cshort") - { - item_size_ = sizeof(lv_16sc_t); - } - else - { - item_size_ = sizeof(gr_complex); - } - acq_parameters.it_size = item_size_; - acq_parameters.sampled_ms = sampled_ms_; - acq_parameters.samples_per_ms = static_cast(fs_in_) * 0.001; - acq_parameters.ms_per_code = 1; - acq_parameters.samples_per_code = acq_parameters.samples_per_ms * static_cast(GLONASS_L1_CA_CODE_PERIOD_S * 1000.0); - acq_parameters.num_doppler_bins_step2 = configuration_->property(role + ".second_nbins", 4); - acq_parameters.doppler_step2 = configuration_->property(role + ".second_doppler_step", 125.0); - acq_parameters.make_2_steps = configuration_->property(role + ".make_two_steps", false); - acq_parameters.blocking_on_standby = configuration_->property(role + ".blocking_on_standby", false); - acq_parameters.pfa = configuration_->property(role + ".pfa", 0.0); - acq_parameters.pfa2 = configuration_->property(role + ".pfa2", 0.0); - acquisition_ = pcps_make_acquisition(acq_parameters); + sampled_ms_ = acq_parameters_.sampled_ms; + + acquisition_ = pcps_make_acquisition(acq_parameters_); DLOG(INFO) << "acquisition(" << acquisition_->unique_id() << ")"; - if (item_type_ == "cbyte") + if (item_type_ == "ic8") { cbyte_to_float_x2_ = make_complex_byte_to_float_x2(); float_to_complex_ = gr::blocks::float_to_complex::make(); @@ -257,15 +210,15 @@ float GlonassL1CaPcpsAcquisition::calculate_threshold(float pfa) void GlonassL1CaPcpsAcquisition::connect(gr::top_block_sptr top_block) { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { // nothing to connect } - else if (item_type_ == "cshort") + else if (item_type_ == "ic16") { // nothing to connect } - else if (item_type_ == "cbyte") + else if (item_type_ == "ic8") { top_block->connect(cbyte_to_float_x2_, 0, float_to_complex_, 0); top_block->connect(cbyte_to_float_x2_, 1, float_to_complex_, 1); @@ -280,15 +233,15 @@ void GlonassL1CaPcpsAcquisition::connect(gr::top_block_sptr top_block) void GlonassL1CaPcpsAcquisition::disconnect(gr::top_block_sptr top_block) { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { // nothing to disconnect } - else if (item_type_ == "cshort") + else if (item_type_ == "ic16") { // nothing to disconnect } - else if (item_type_ == "cbyte") + else if (item_type_ == "ic8") { // Since a byte-based acq implementation is not available, // we just convert cshorts to gr_complex @@ -305,15 +258,15 @@ void GlonassL1CaPcpsAcquisition::disconnect(gr::top_block_sptr top_block) gr::basic_block_sptr GlonassL1CaPcpsAcquisition::get_left_block() { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { return acquisition_; } - if (item_type_ == "cshort") + if (item_type_ == "ic16") { return acquisition_; } - if (item_type_ == "cbyte") + if (item_type_ == "ic8") { return cbyte_to_float_x2_; } diff --git a/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.h b/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.h index a0d2a7b7e..e55b5a744 100644 --- a/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.h +++ b/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.h @@ -34,6 +34,7 @@ #ifndef GNSS_SDR_GLONASS_L1_CA_PCPS_ACQUISITION_H_ #define GNSS_SDR_GLONASS_L1_CA_PCPS_ACQUISITION_H_ +#include "acq_conf.h" #include "channel_fsm.h" #include "complex_byte_to_float_x2.h" #include "gnss_synchro.h" @@ -156,6 +157,7 @@ public: private: ConfigurationInterface* configuration_; + Acq_Conf acq_parameters_; pcps_acquisition_sptr acquisition_; gr::blocks::float_to_complex::sptr float_to_complex_; complex_byte_to_float_x2_sptr cbyte_to_float_x2_; diff --git a/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.cc index a845823d2..d5e1adf97 100644 --- a/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.cc @@ -49,73 +49,28 @@ GlonassL2CaPcpsAcquisition::GlonassL2CaPcpsAcquisition( in_streams_(in_streams), out_streams_(out_streams) { - Acq_Conf acq_parameters = Acq_Conf(); configuration_ = configuration; - std::string default_item_type = "gr_complex"; - std::string default_dump_filename = "./data/acquisition.dat"; + acq_parameters_.ms_per_code = 1; + acq_parameters_.SetFromConfiguration(configuration_, role, GLONASS_L2_CA_CODE_RATE_CPS, 100e6); DLOG(INFO) << "role " << role; - item_type_ = configuration_->property(role + ".item_type", default_item_type); - - int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000); - fs_in_ = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); - acq_parameters.fs_in = fs_in_; - acq_parameters.samples_per_chip = static_cast(ceil(GLONASS_L2_CA_CHIP_PERIOD_S * static_cast(acq_parameters.fs_in))); - dump_ = configuration_->property(role + ".dump", false); - acq_parameters.dump = dump_; - acq_parameters.dump_channel = configuration_->property(role + ".dump_channel", 0); - blocking_ = configuration_->property(role + ".blocking", true); - acq_parameters.blocking = blocking_; - doppler_max_ = configuration_->property(role + ".doppler_max", 5000); - if (FLAGS_doppler_max != 0) - { - doppler_max_ = FLAGS_doppler_max; - } - acq_parameters.doppler_max = doppler_max_; - sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 1); - bit_transition_flag_ = configuration_->property(role + ".bit_transition_flag", false); - acq_parameters.bit_transition_flag = bit_transition_flag_; - use_CFAR_algorithm_flag_ = configuration_->property(role + ".use_CFAR_algorithm", true); // will be false in future versions - acq_parameters.use_CFAR_algorithm_flag = use_CFAR_algorithm_flag_; - max_dwells_ = configuration_->property(role + ".max_dwells", 1); - acq_parameters.max_dwells = max_dwells_; - - dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); - acq_parameters.dump_filename = dump_filename_; - // --- Find number of samples per spreading code ------------------------- - code_length_ = static_cast(std::round(static_cast(fs_in_) / (GLONASS_L2_CA_CODE_RATE_CPS / GLONASS_L2_CA_CODE_LENGTH_CHIPS))); - - vector_length_ = code_length_ * sampled_ms_; - - if (bit_transition_flag_) - { - vector_length_ *= 2; - } + if (FLAGS_doppler_max != 0) acq_parameters_.doppler_max = FLAGS_doppler_max; + doppler_max_ = acq_parameters_.doppler_max; + doppler_step_ = acq_parameters_.doppler_step; + item_type_ = acq_parameters_.item_type; + fs_in_ = acq_parameters_.fs_in; + code_length_ = static_cast(std::floor(static_cast(acq_parameters_.resampled_fs) / (GLONASS_L2_CA_CODE_RATE_CPS / GLONASS_L2_CA_CODE_LENGTH_CHIPS))); + vector_length_ = std::floor(acq_parameters_.sampled_ms * acq_parameters_.samples_per_ms) * (acq_parameters_.bit_transition_flag ? 2 : 1); code_ = std::vector>(vector_length_); - if (item_type_ == "cshort") - { - item_size_ = sizeof(lv_16sc_t); - } - else - { - item_size_ = sizeof(gr_complex); - } - acq_parameters.it_size = item_size_; - acq_parameters.sampled_ms = sampled_ms_; - acq_parameters.samples_per_ms = static_cast(fs_in_) * 0.001; - acq_parameters.ms_per_code = 1; - acq_parameters.samples_per_code = acq_parameters.samples_per_ms * static_cast(GLONASS_L2_CA_CODE_PERIOD_S * 1000.0); - acq_parameters.num_doppler_bins_step2 = configuration_->property(role + ".second_nbins", 4); - acq_parameters.doppler_step2 = configuration_->property(role + ".second_doppler_step", 125.0); - acq_parameters.make_2_steps = configuration_->property(role + ".make_two_steps", false); - acq_parameters.blocking_on_standby = configuration_->property(role + ".blocking_on_standby", false); - acquisition_ = pcps_make_acquisition(acq_parameters); + sampled_ms_ = acq_parameters_.sampled_ms; + + acquisition_ = pcps_make_acquisition(acq_parameters_); DLOG(INFO) << "acquisition(" << acquisition_->unique_id() << ")"; - if (item_type_ == "cbyte") + if (item_type_ == "ic8") { cbyte_to_float_x2_ = make_complex_byte_to_float_x2(); float_to_complex_ = gr::blocks::float_to_complex::make(); @@ -254,15 +209,15 @@ float GlonassL2CaPcpsAcquisition::calculate_threshold(float pfa) void GlonassL2CaPcpsAcquisition::connect(gr::top_block_sptr top_block) { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { // nothing to connect } - else if (item_type_ == "cshort") + else if (item_type_ == "ic16") { // nothing to connect } - else if (item_type_ == "cbyte") + else if (item_type_ == "ic8") { // Since a byte-based acq implementation is not available, // we just convert cshorts to gr_complex @@ -279,15 +234,15 @@ void GlonassL2CaPcpsAcquisition::connect(gr::top_block_sptr top_block) void GlonassL2CaPcpsAcquisition::disconnect(gr::top_block_sptr top_block) { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { // nothing to disconnect } - else if (item_type_ == "cshort") + else if (item_type_ == "ic16") { // nothing to disconnect } - else if (item_type_ == "cbyte") + else if (item_type_ == "ic8") { top_block->disconnect(cbyte_to_float_x2_, 0, float_to_complex_, 0); top_block->disconnect(cbyte_to_float_x2_, 1, float_to_complex_, 1); @@ -302,15 +257,15 @@ void GlonassL2CaPcpsAcquisition::disconnect(gr::top_block_sptr top_block) gr::basic_block_sptr GlonassL2CaPcpsAcquisition::get_left_block() { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { return acquisition_; } - if (item_type_ == "cshort") + if (item_type_ == "ic16") { return acquisition_; } - if (item_type_ == "cbyte") + if (item_type_ == "ic8") { return cbyte_to_float_x2_; } diff --git a/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.h b/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.h index 003a2db24..bfe35d0cb 100644 --- a/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.h +++ b/src/algorithms/acquisition/adapters/glonass_l2_ca_pcps_acquisition.h @@ -33,6 +33,7 @@ #ifndef GNSS_SDR_GLONASS_L2_CA_PCPS_ACQUISITION_H_ #define GNSS_SDR_GLONASS_L2_CA_PCPS_ACQUISITION_H_ +#include "acq_conf.h" #include "channel_fsm.h" #include "complex_byte_to_float_x2.h" #include "gnss_synchro.h" @@ -155,6 +156,7 @@ public: private: ConfigurationInterface* configuration_; + Acq_Conf acq_parameters_; pcps_acquisition_sptr acquisition_; gr::blocks::float_to_complex::sptr float_to_complex_; complex_byte_to_float_x2_sptr cbyte_to_float_x2_; diff --git a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc index 4ed4e9c2d..e977dbaa8 100644 --- a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc @@ -59,7 +59,11 @@ GpsL1CaPcpsAcquisition::GpsL1CaPcpsAcquisition( DLOG(INFO) << "role " << role; - if (FLAGS_doppler_max != 0) doppler_max_ = FLAGS_doppler_max; + if (FLAGS_doppler_max != 0) acq_parameters_.doppler_max = FLAGS_doppler_max; + + doppler_max_ = acq_parameters_.doppler_max; + doppler_step_ = acq_parameters_.doppler_step; + item_type_ = acq_parameters_.item_type; code_length_ = static_cast(std::floor(static_cast(acq_parameters_.resampled_fs) / (GPS_L1_CA_CODE_RATE_CPS / GPS_L1_CA_CODE_LENGTH_CHIPS))); vector_length_ = std::floor(acq_parameters_.sampled_ms * acq_parameters_.samples_per_ms) * (acq_parameters_.bit_transition_flag ? 2 : 1); @@ -70,8 +74,6 @@ GpsL1CaPcpsAcquisition::GpsL1CaPcpsAcquisition( acquisition_ = pcps_make_acquisition(acq_parameters_); DLOG(INFO) << "acquisition(" << acquisition_->unique_id() << ")"; - item_type_ = acq_parameters_.item_type; - if (item_type_ == "ic8") { cbyte_to_float_x2_ = make_complex_byte_to_float_x2(); @@ -80,7 +82,6 @@ GpsL1CaPcpsAcquisition::GpsL1CaPcpsAcquisition( channel_ = 0; threshold_ = 0.0; - doppler_step_ = 0; doppler_center_ = 0; gnss_synchro_ = nullptr; diff --git a/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc index 524f58a3e..bff9bac79 100644 --- a/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc @@ -51,98 +51,25 @@ GpsL2MPcpsAcquisition::GpsL2MPcpsAcquisition( out_streams_(out_streams) { configuration_ = configuration; - std::string default_item_type = "gr_complex"; - std::string default_dump_filename = "./acquisition.mat"; - - LOG(INFO) << "role " << role; - - item_type_ = configuration_->property(role + ".item_type", default_item_type); - int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000); - fs_in_ = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); - acq_parameters_.fs_in = fs_in_; - dump_ = configuration_->property(role + ".dump", false); - acq_parameters_.dump = dump_; - acq_parameters_.dump_channel = configuration_->property(role + ".dump_channel", 0); - blocking_ = configuration_->property(role + ".blocking", true); - acq_parameters_.blocking = blocking_; - doppler_max_ = configuration->property(role + ".doppler_max", 5000); - if (FLAGS_doppler_max != 0) - { - doppler_max_ = FLAGS_doppler_max; - } - acq_parameters_.doppler_max = doppler_max_; - bit_transition_flag_ = configuration_->property(role + ".bit_transition_flag", false); - acq_parameters_.bit_transition_flag = bit_transition_flag_; - use_CFAR_algorithm_flag_ = configuration_->property(role + ".use_CFAR_algorithm", true); // will be false in future versions - acq_parameters_.use_CFAR_algorithm_flag = use_CFAR_algorithm_flag_; - max_dwells_ = configuration_->property(role + ".max_dwells", 1); - acq_parameters_.max_dwells = max_dwells_; - dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); - acq_parameters_.dump_filename = dump_filename_; acq_parameters_.ms_per_code = 20; - acq_parameters_.sampled_ms = configuration_->property(role + ".coherent_integration_time_ms", acq_parameters_.ms_per_code); - if ((acq_parameters_.sampled_ms % acq_parameters_.ms_per_code) != 0) - { - LOG(WARNING) << "Parameter coherent_integration_time_ms should be a multiple of 20. Setting it to 20"; - acq_parameters_.sampled_ms = acq_parameters_.ms_per_code; - } + acq_parameters_.SetFromConfiguration(configuration_, role, GPS_L2_M_CODE_RATE_CPS, GPS_L2C_OPT_ACQ_FS_SPS); - acq_parameters_.num_doppler_bins_step2 = configuration_->property(role + ".second_nbins", 4); - acq_parameters_.doppler_step2 = configuration_->property(role + ".second_doppler_step", 125.0); - acq_parameters_.make_2_steps = configuration_->property(role + ".make_two_steps", false); - acq_parameters_.blocking_on_standby = configuration_->property(role + ".blocking_on_standby", false); - acq_parameters_.use_automatic_resampler = configuration_->property("GNSS-SDR.use_acquisition_resampler", false); - if (acq_parameters_.use_automatic_resampler == true and item_type_ != "gr_complex") - { - LOG(WARNING) << "GPS L2CM acquisition disabled the automatic resampler feature because its item_type is not set to gr_complex"; - acq_parameters_.use_automatic_resampler = false; - } - if (acq_parameters_.use_automatic_resampler) - { - if (acq_parameters_.fs_in > GPS_L2C_OPT_ACQ_FS_SPS) - { - acq_parameters_.resampler_ratio = floor(static_cast(acq_parameters_.fs_in) / GPS_L2C_OPT_ACQ_FS_SPS); - uint32_t decimation = acq_parameters_.fs_in / GPS_L2C_OPT_ACQ_FS_SPS; - while (acq_parameters_.fs_in % decimation > 0) - { - decimation--; - }; - acq_parameters_.resampler_ratio = decimation; - acq_parameters_.resampled_fs = acq_parameters_.fs_in / static_cast(acq_parameters_.resampler_ratio); - } + DLOG(INFO) << "Role " << role; - // -- Find number of samples per spreading code ------------------------- - code_length_ = static_cast(std::floor(static_cast(acq_parameters_.resampled_fs) / (GPS_L2_M_CODE_RATE_CPS / GPS_L2_M_CODE_LENGTH_CHIPS))); - acq_parameters_.samples_per_ms = static_cast(acq_parameters_.resampled_fs) * 0.001; - acq_parameters_.samples_per_chip = static_cast(ceil((1.0 / GPS_L2_M_CODE_RATE_CPS) * static_cast(acq_parameters_.resampled_fs))); - } - else - { - acq_parameters_.resampled_fs = fs_in_; - // -- Find number of samples per spreading code ------------------------- - code_length_ = static_cast(std::floor(static_cast(fs_in_) / (GPS_L2_M_CODE_RATE_CPS / GPS_L2_M_CODE_LENGTH_CHIPS))); - acq_parameters_.samples_per_ms = static_cast(fs_in_) * 0.001; - acq_parameters_.samples_per_chip = static_cast(ceil((1.0 / GPS_L2_M_CODE_RATE_CPS) * static_cast(acq_parameters_.fs_in))); - } + if (FLAGS_doppler_max != 0) acq_parameters_.doppler_max = FLAGS_doppler_max; + doppler_max_ = acq_parameters_.doppler_max; + doppler_step_ = acq_parameters_.doppler_step; + item_type_ = acq_parameters_.item_type; + fs_in_ = acq_parameters_.fs_in; - acq_parameters_.samples_per_code = acq_parameters_.samples_per_ms * static_cast(GPS_L2_M_PERIOD_S * 1000.0); - vector_length_ = acq_parameters_.sampled_ms * acq_parameters_.samples_per_ms * (acq_parameters_.bit_transition_flag ? 2 : 1); + code_length_ = static_cast(std::floor(static_cast(acq_parameters_.resampled_fs) / (GPS_L2_M_CODE_RATE_CPS / GPS_L2_M_CODE_LENGTH_CHIPS))); + vector_length_ = std::floor(acq_parameters_.sampled_ms * acq_parameters_.samples_per_ms) * (acq_parameters_.bit_transition_flag ? 2 : 1); code_ = std::vector>(vector_length_); - if (item_type_ == "cshort") - { - item_size_ = sizeof(lv_16sc_t); - } - else - { - item_size_ = sizeof(gr_complex); - } - - acq_parameters_.it_size = item_size_; acquisition_ = pcps_make_acquisition(acq_parameters_); DLOG(INFO) << "acquisition(" << acquisition_->unique_id() << ")"; - if (item_type_ == "cbyte") + if (item_type_ == "ic8") { cbyte_to_float_x2_ = make_complex_byte_to_float_x2(); float_to_complex_ = gr::blocks::float_to_complex::make(); @@ -150,7 +77,6 @@ GpsL2MPcpsAcquisition::GpsL2MPcpsAcquisition( channel_ = 0; threshold_ = 0.0; - doppler_step_ = 0; doppler_center_ = 0; gnss_synchro_ = nullptr; @@ -297,15 +223,15 @@ float GpsL2MPcpsAcquisition::calculate_threshold(float pfa) void GpsL2MPcpsAcquisition::connect(gr::top_block_sptr top_block) { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { // nothing to connect } - else if (item_type_ == "cshort") + else if (item_type_ == "ic16") { // nothing to connect } - else if (item_type_ == "cbyte") + else if (item_type_ == "ic8") { // Since a byte-based acq implementation is not available, // we just convert cshorts to gr_complex @@ -322,15 +248,15 @@ void GpsL2MPcpsAcquisition::connect(gr::top_block_sptr top_block) void GpsL2MPcpsAcquisition::disconnect(gr::top_block_sptr top_block) { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { // nothing to disconnect } - else if (item_type_ == "cshort") + else if (item_type_ == "ic16") { // nothing to disconnect } - else if (item_type_ == "cbyte") + else if (item_type_ == "ic8") { top_block->disconnect(cbyte_to_float_x2_, 0, float_to_complex_, 0); top_block->disconnect(cbyte_to_float_x2_, 1, float_to_complex_, 1); @@ -345,15 +271,15 @@ void GpsL2MPcpsAcquisition::disconnect(gr::top_block_sptr top_block) gr::basic_block_sptr GpsL2MPcpsAcquisition::get_left_block() { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { return acquisition_; } - if (item_type_ == "cshort") + if (item_type_ == "ic16") { return acquisition_; } - if (item_type_ == "cbyte") + if (item_type_ == "ic8") { return cbyte_to_float_x2_; } diff --git a/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition.cc index 3ba8c2a98..e74da9993 100644 --- a/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition.cc @@ -51,94 +51,27 @@ GpsL5iPcpsAcquisition::GpsL5iPcpsAcquisition( out_streams_(out_streams) { configuration_ = configuration; - std::string default_item_type = "gr_complex"; - std::string default_dump_filename = "./acquisition.mat"; - - LOG(INFO) << "role " << role; - - item_type_ = configuration_->property(role + ".item_type", default_item_type); - - int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000); - fs_in_ = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated); - acq_parameters_.fs_in = fs_in_; - dump_ = configuration_->property(role + ".dump", false); - acq_parameters_.dump = dump_; - acq_parameters_.dump_channel = configuration_->property(role + ".dump_channel", 0); - blocking_ = configuration_->property(role + ".blocking", true); - acq_parameters_.blocking = blocking_; - doppler_max_ = configuration->property(role + ".doppler_max", 5000); - if (FLAGS_doppler_max != 0) - { - doppler_max_ = FLAGS_doppler_max; - } - acq_parameters_.doppler_max = doppler_max_; - bit_transition_flag_ = configuration_->property(role + ".bit_transition_flag", false); - acq_parameters_.bit_transition_flag = bit_transition_flag_; - use_CFAR_algorithm_flag_ = configuration_->property(role + ".use_CFAR_algorithm", true); // will be false in future versions - acq_parameters_.use_CFAR_algorithm_flag = use_CFAR_algorithm_flag_; - max_dwells_ = configuration_->property(role + ".max_dwells", 1); - acq_parameters_.max_dwells = max_dwells_; - dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); - acq_parameters_.dump_filename = dump_filename_; - acq_parameters_.sampled_ms = configuration_->property(role + ".coherent_integration_time_ms", 1); - - if (item_type_ == "cshort") - { - item_size_ = sizeof(lv_16sc_t); - } - else - { - item_size_ = sizeof(gr_complex); - } - acq_parameters_.ms_per_code = 1; - acq_parameters_.it_size = item_size_; - num_codes_ = acq_parameters_.sampled_ms; - acq_parameters_.num_doppler_bins_step2 = configuration_->property(role + ".second_nbins", 4); - acq_parameters_.doppler_step2 = configuration_->property(role + ".second_doppler_step", 125.0); - acq_parameters_.make_2_steps = configuration_->property(role + ".make_two_steps", false); - acq_parameters_.blocking_on_standby = configuration_->property(role + ".blocking_on_standby", false); - acq_parameters_.use_automatic_resampler = configuration_->property("GNSS-SDR.use_acquisition_resampler", false); - if (acq_parameters_.use_automatic_resampler == true and item_type_ != "gr_complex") - { - LOG(WARNING) << "GPS L5 acquisition disabled the automatic resampler feature because its item_type is not set to gr_complex"; - acq_parameters_.use_automatic_resampler = false; - } - if (acq_parameters_.use_automatic_resampler) - { - if (acq_parameters_.fs_in > GPS_L5_OPT_ACQ_FS_SPS) - { - acq_parameters_.resampler_ratio = floor(static_cast(acq_parameters_.fs_in) / GPS_L5_OPT_ACQ_FS_SPS); - uint32_t decimation = acq_parameters_.fs_in / GPS_L5_OPT_ACQ_FS_SPS; - while (acq_parameters_.fs_in % decimation > 0) - { - decimation--; - }; - acq_parameters_.resampler_ratio = decimation; - acq_parameters_.resampled_fs = acq_parameters_.fs_in / static_cast(acq_parameters_.resampler_ratio); - } + acq_parameters_.SetFromConfiguration( configuration_, role, GPS_L5I_CODE_RATE_CPS, GPS_L5_OPT_ACQ_FS_SPS ); - // -- Find number of samples per spreading code ------------------------- - code_length_ = static_cast(std::floor(static_cast(acq_parameters_.resampled_fs) / (GPS_L5I_CODE_RATE_CPS / GPS_L5I_CODE_LENGTH_CHIPS))); - acq_parameters_.samples_per_ms = static_cast(acq_parameters_.resampled_fs) * 0.001; - acq_parameters_.samples_per_chip = static_cast(ceil((1.0 / GPS_L5I_CODE_RATE_CPS) * static_cast(acq_parameters_.resampled_fs))); - } - else - { - acq_parameters_.resampled_fs = fs_in_; - // -- Find number of samples per spreading code ------------------------- - code_length_ = static_cast(std::floor(static_cast(fs_in_) / (GPS_L5I_CODE_RATE_CPS / GPS_L5I_CODE_LENGTH_CHIPS))); - acq_parameters_.samples_per_ms = static_cast(fs_in_) * 0.001; - acq_parameters_.samples_per_chip = static_cast(ceil((1.0 / GPS_L5I_CODE_RATE_CPS) * static_cast(acq_parameters_.fs_in))); - } + DLOG(INFO) << "role " << role; - acq_parameters_.samples_per_code = acq_parameters_.samples_per_ms * static_cast(GPS_L5I_PERIOD_S * 1000.0); + if (FLAGS_doppler_max != 0) acq_parameters_.doppler_max = FLAGS_doppler_max; + + doppler_max_ = acq_parameters_.doppler_max; + doppler_step_ = acq_parameters_.doppler_step; + item_type_ = acq_parameters_.item_type; + + code_length_ = static_cast(std::floor(static_cast(acq_parameters_.resampled_fs) / (GPS_L5I_CODE_RATE_CPS / GPS_L5I_CODE_LENGTH_CHIPS))); vector_length_ = std::floor(acq_parameters_.sampled_ms * acq_parameters_.samples_per_ms) * (acq_parameters_.bit_transition_flag ? 2 : 1); code_ = std::vector>(vector_length_); + + num_codes_ = acq_parameters_.sampled_ms; + acquisition_ = pcps_make_acquisition(acq_parameters_); DLOG(INFO) << "acquisition(" << acquisition_->unique_id() << ")"; - if (item_type_ == "cbyte") + if (item_type_ == "ic8") { cbyte_to_float_x2_ = make_complex_byte_to_float_x2(); float_to_complex_ = gr::blocks::float_to_complex::make(); @@ -146,7 +79,6 @@ GpsL5iPcpsAcquisition::GpsL5iPcpsAcquisition( channel_ = 0; threshold_ = 0.0; - doppler_step_ = 0; doppler_center_ = 0; gnss_synchro_ = nullptr; @@ -292,15 +224,15 @@ float GpsL5iPcpsAcquisition::calculate_threshold(float pfa) void GpsL5iPcpsAcquisition::connect(gr::top_block_sptr top_block) { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { // nothing to connect } - else if (item_type_ == "cshort") + else if (item_type_ == "ic16") { // nothing to connect } - else if (item_type_ == "cbyte") + else if (item_type_ == "ic8") { // Since a byte-based acq implementation is not available, // we just convert cshorts to gr_complex @@ -310,22 +242,22 @@ void GpsL5iPcpsAcquisition::connect(gr::top_block_sptr top_block) } else { - LOG(WARNING) << item_type_ << " unknown acquisition item type"; + LOG(WARNING) << item_type_ << " unknown acquisition item type: " << item_type_; } } void GpsL5iPcpsAcquisition::disconnect(gr::top_block_sptr top_block) { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { // nothing to disconnect } - else if (item_type_ == "cshort") + else if (item_type_ == "ic16") { // nothing to disconnect } - else if (item_type_ == "cbyte") + else if (item_type_ == "ic8") { top_block->disconnect(cbyte_to_float_x2_, 0, float_to_complex_, 0); top_block->disconnect(cbyte_to_float_x2_, 1, float_to_complex_, 1); @@ -333,27 +265,27 @@ void GpsL5iPcpsAcquisition::disconnect(gr::top_block_sptr top_block) } else { - LOG(WARNING) << item_type_ << " unknown acquisition item type"; + LOG(WARNING) << item_type_ << " unknown acquisition item type" << item_type_; } } gr::basic_block_sptr GpsL5iPcpsAcquisition::get_left_block() { - if (item_type_ == "gr_complex") + if (item_type_ == "fc32") { return acquisition_; } - if (item_type_ == "cshort") + if (item_type_ == "ic16") { return acquisition_; } - if (item_type_ == "cbyte") + if (item_type_ == "ic8") { return cbyte_to_float_x2_; } - LOG(WARNING) << item_type_ << " unknown acquisition item type"; + LOG(WARNING) << item_type_ << " unknown acquisition item type" << item_type_; return nullptr; } diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc2013_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc2013_test.cc index 53860647b..75f2c2caf 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc2013_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc2013_test.cc @@ -488,10 +488,6 @@ TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test, ValidationOfResults) acquisition->set_doppler_step(config->property("Acquisition_1B.doppler_step", 500)); }) << "Failure setting doppler_step."; - ASSERT_NO_THROW({ - acquisition->set_threshold(config->property("Acquisition_1B.threshold", 0.0)); - }) << "Failure setting threshold."; - ASSERT_NO_THROW({ acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block."; @@ -520,7 +516,7 @@ TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test, ValidationOfResults) } else if (i == 1) { - gnss_synchro.PRN = 20; // This satellite is not visible + gnss_synchro.PRN = 36; // This satellite is not visible } acquisition->set_local_code(); @@ -573,10 +569,6 @@ TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test, ValidationOfResultsProbabi acquisition->set_doppler_step(config->property("Acquisition_1B.doppler_step", 500)); }) << "Failure setting doppler_step."; - ASSERT_NO_THROW({ - acquisition->set_threshold(config->property("Acquisition_1B.threshold", 0.0)); - }) << "Failure setting threshold."; - ASSERT_NO_THROW({ acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block.";