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 9c781bae4..8325f0527 100644 --- a/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc +++ b/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc @@ -29,10 +29,10 @@ * ------------------------------------------------------------------------- */ -#include "galileo_e1_pcps_ambiguous_acquisition.h" #include "Galileo_E1.h" #include "acq_conf.h" #include "configuration_interface.h" +#include "galileo_e1_pcps_ambiguous_acquisition.h" #include "galileo_e1_signal_processing.h" #include "gnss_sdr_flags.h" #include @@ -50,13 +50,15 @@ GalileoE1PcpsAmbiguousAcquisition::GalileoE1PcpsAmbiguousAcquisition( { configuration_ = configuration; acq_parameters_.ms_per_code = 4; - acq_parameters_.SetFromConfiguration( configuration_, role, GALILEO_E1_CODE_CHIP_RATE_CPS, GALILEO_E1_OPT_ACQ_FS_SPS ); + acq_parameters_.SetFromConfiguration(configuration_, role, GALILEO_E1_CODE_CHIP_RATE_CPS, GALILEO_E1_OPT_ACQ_FS_SPS); DLOG(INFO) << "role " << role; + doppler_max_ = acq_parameters_.doppler_max; + doppler_step_ = acq_parameters_.doppler_step; if (FLAGS_doppler_max != 0) doppler_max_ = FLAGS_doppler_max; - code_length_ = static_cast(std::floor(static_cast(acq_parameters_.resampled_fs) / (GALILEO_E1_CODE_CHIP_RATE_CPS / GALILEO_E1_B_CODE_LENGTH_CHIPS ))); + 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); code_ = std::vector>(vector_length_); @@ -76,7 +78,7 @@ GalileoE1PcpsAmbiguousAcquisition::GalileoE1PcpsAmbiguousAcquisition( channel_ = 0; threshold_ = 0.0; - doppler_step_ = 0; + doppler_step_ = acq_parameters_.doppler_step; doppler_center_ = 0; gnss_synchro_ = nullptr; 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 38ca29449..6a7fde646 100644 --- a/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.cc +++ b/src/algorithms/acquisition/adapters/glonass_l1_ca_pcps_acquisition.cc @@ -31,10 +31,10 @@ * ------------------------------------------------------------------------- */ -#include "glonass_l1_ca_pcps_acquisition.h" #include "GLONASS_L1_L2_CA.h" #include "acq_conf.h" #include "configuration_interface.h" +#include "glonass_l1_ca_pcps_acquisition.h" #include "glonass_l1_signal_processing.h" #include "gnss_sdr_flags.h" #include @@ -113,6 +113,8 @@ GlonassL1CaPcpsAcquisition::GlonassL1CaPcpsAcquisition( 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); DLOG(INFO) << "acquisition(" << acquisition_->unique_id() << ")"; diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.cc index b11a644d4..ffda9d198 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition.cc @@ -33,12 +33,12 @@ * ------------------------------------------------------------------------- */ -#include "pcps_acquisition.h" #include "GLONASS_L1_L2_CA.h" // for GLONASS_TWO_PI #include "GPS_L1_CA.h" // for GPS_TWO_PI #include "gnss_frequencies.h" #include "gnss_sdr_create_directory.h" #include "gnss_synchro.h" +#include "pcps_acquisition.h" #if HAS_STD_FILESYSTEM #if HAS_STD_FILESYSTEM_EXPERIMENTAL #include @@ -131,10 +131,10 @@ pcps_acquisition::pcps_acquisition(const Acq_Conf& conf_) : gr::block("pcps_acqu // We can avoid this by doing linear correlation, effectively doubling the // size of the input buffer and padding the code with zeros. //if (acq_parameters.bit_transition_flag) - //{ - //d_fft_size = d_consumed_samples * 2; - //acq_parameters.max_dwells = 1; // Activation of acq_parameters.bit_transition_flag invalidates the value of acq_parameters.max_dwells - //} + //{ + //d_fft_size = d_consumed_samples * 2; + //acq_parameters.max_dwells = 1; // Activation of acq_parameters.bit_transition_flag invalidates the value of acq_parameters.max_dwells + //} d_tmp_buffer = volk_gnsssdr::vector(d_fft_size); d_fft_codes = volk_gnsssdr::vector>(d_fft_size); @@ -162,13 +162,13 @@ pcps_acquisition::pcps_acquisition(const Acq_Conf& conf_) : gr::block("pcps_acqu d_buffer_count = 0U; // todo: CFAR statistic not available for non-coherent integration //if (acq_parameters.max_dwells == 1) - //{ - d_use_CFAR_algorithm_flag = acq_parameters.use_CFAR_algorithm_flag; - //} + //{ + d_use_CFAR_algorithm_flag = acq_parameters.use_CFAR_algorithm_flag; + //} //else - //{ - //d_use_CFAR_algorithm_flag = false; - //} + //{ + //d_use_CFAR_algorithm_flag = false; + //} d_dump_number = 0LL; d_dump_channel = acq_parameters.dump_channel; d_dump = acq_parameters.dump; @@ -383,15 +383,15 @@ void pcps_acquisition::send_positive_acquisition() // Declare positive acquisition using a message port // 0=STOP_CHANNEL 1=ACQ_SUCCEES 2=ACQ_FAIL LOG(INFO) << "positive acquisition" - << ", satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN - << ", sample_stamp " << d_sample_counter - << ", test statistics value " << d_test_statistics - << ", test statistics threshold " << d_threshold - << ", code phase " << d_gnss_synchro->Acq_delay_samples - << ", doppler " << d_gnss_synchro->Acq_doppler_hz - << ", magnitude " << d_mag - << ", input signal power " << d_input_power - << ", Assist doppler_center " << d_doppler_center; + << ", satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN + << ", sample_stamp " << d_sample_counter + << ", test statistics value " << d_test_statistics + << ", test statistics threshold " << d_threshold + << ", code phase " << d_gnss_synchro->Acq_delay_samples + << ", doppler " << d_gnss_synchro->Acq_doppler_hz + << ", magnitude " << d_mag + << ", input signal power " << d_input_power + << ", Assist doppler_center " << d_doppler_center; d_positive_acq = 1; if (!d_channel_fsm.expired()) @@ -411,14 +411,14 @@ void pcps_acquisition::send_negative_acquisition() // Declare negative acquisition using a message port // 0=STOP_CHANNEL 1=ACQ_SUCCEES 2=ACQ_FAIL LOG(INFO) << "negative acquisition" - << ", satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN - << ", sample_stamp " << d_sample_counter - << ", test statistics value " << d_test_statistics - << ", test statistics threshold " << d_threshold - << ", code phase " << d_gnss_synchro->Acq_delay_samples - << ", doppler " << d_gnss_synchro->Acq_doppler_hz - << ", magnitude " << d_mag - << ", input signal power " << d_input_power; + << ", satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN + << ", sample_stamp " << d_sample_counter + << ", test statistics value " << d_test_statistics + << ", test statistics threshold " << d_threshold + << ", code phase " << d_gnss_synchro->Acq_delay_samples + << ", doppler " << d_gnss_synchro->Acq_doppler_hz + << ", magnitude " << d_mag + << ", input signal power " << d_input_power; d_positive_acq = 0; this->message_port_pub(pmt::mp("events"), pmt::from_long(2)); } @@ -534,8 +534,6 @@ float pcps_acquisition::max_to_input_power_statistic(uint32_t& indext, int32_t& uint32_t tmp_intex_t = 0U; uint32_t index_time = 0U; int32_t effective_fft_size = (acq_parameters.bit_transition_flag ? d_fft_size / 2 : d_fft_size); - float fft_normalization_factor = static_cast(effective_fft_size) * static_cast(d_fft_size); - fft_normalization_factor *= fft_normalization_factor; // Find the correlation peak and the carrier frequency for (uint32_t i = 0; i < num_doppler_bins; i++) @@ -551,8 +549,8 @@ float pcps_acquisition::max_to_input_power_statistic(uint32_t& indext, int32_t& indext = index_time; if (!d_step_two) { - int index_opp = (index_doppler + d_num_doppler_bins/2) % d_num_doppler_bins; - d_input_power = std::accumulate( d_magnitude_grid[index_opp].data(), d_magnitude_grid[index_opp].data()+effective_fft_size, 0.0 )/effective_fft_size/2.0/d_num_noncoherent_integrations_counter; + int index_opp = (index_doppler + d_num_doppler_bins / 2) % d_num_doppler_bins; + d_input_power = std::accumulate(d_magnitude_grid[index_opp].data(), d_magnitude_grid[index_opp].data() + effective_fft_size, 0.0) / effective_fft_size / 2.0 / d_num_noncoherent_integrations_counter; doppler = -static_cast(doppler_max) + d_doppler_center + doppler_step * static_cast(index_doppler); } else @@ -668,12 +666,12 @@ void pcps_acquisition::acquisition_core(uint64_t samp_count) lk.unlock(); //if (d_use_CFAR_algorithm_flag or acq_parameters.bit_transition_flag) - //{ - //// Compute the input signal power estimation - //volk_32fc_magnitude_squared_32f(d_tmp_buffer.data(), in, d_fft_size); - //volk_32f_accumulator_s32f(&d_input_power, d_tmp_buffer.data(), d_fft_size); - //d_input_power /= static_cast(d_fft_size); - //} + //{ + //// Compute the input signal power estimation + //volk_32fc_magnitude_squared_32f(d_tmp_buffer.data(), in, d_fft_size); + //volk_32f_accumulator_s32f(&d_input_power, d_tmp_buffer.data(), d_fft_size); + //d_input_power /= static_cast(d_fft_size); + //} // Doppler frequency grid loop if (!d_step_two) @@ -841,10 +839,10 @@ void pcps_acquisition::acquisition_core(uint64_t samp_count) d_active = false; bool was_step_two = d_step_two; d_step_two = false; - if( was_step_two ) - { - calculate_threshold(); - } + if (was_step_two) + { + calculate_threshold(); + } } } else @@ -879,7 +877,7 @@ void pcps_acquisition::acquisition_core(uint64_t samp_count) d_state = 0; // Negative acquisition bool was_step_two = d_step_two; d_step_two = false; - if( was_step_two ) + if (was_step_two) calculate_threshold(); send_negative_acquisition(); } @@ -917,17 +915,17 @@ bool pcps_acquisition::start() void pcps_acquisition::calculate_threshold(void) { - float pfa = ( d_step_two ? acq_parameters.pfa2 : acq_parameters.pfa ); + float pfa = (d_step_two ? acq_parameters.pfa2 : acq_parameters.pfa); - if( pfa <= 0.0 ) + if (pfa <= 0.0) return; int effective_fft_size = (acq_parameters.bit_transition_flag ? (d_fft_size / 2) : d_fft_size); - int num_doppler_bins = ( d_step_two ? d_num_doppler_bins_step2 : d_num_doppler_bins ); + int num_doppler_bins = (d_step_two ? d_num_doppler_bins_step2 : d_num_doppler_bins); int num_bins = effective_fft_size * num_doppler_bins; - d_threshold = 2.0*boost::math::gamma_p_inv( 2*acq_parameters.max_dwells, std::pow( 1.0 - pfa, 1.0/static_cast(num_bins) ) ); + d_threshold = 2.0 * boost::math::gamma_p_inv(2 * acq_parameters.max_dwells, std::pow(1.0 - pfa, 1.0 / static_cast(num_bins))); } int pcps_acquisition::general_work(int noutput_items __attribute__((unused)), 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 173414e4c..53860647b 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 @@ -249,7 +249,8 @@ void GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test::config_1() std::to_string(integration_time_ms)); config->set_property("Acquisition_1B.max_dwells", "1"); config->set_property("Acquisition_1B.bit_transition_flag", "false"); - config->set_property("Acquisition_1B.threshold", "0.1"); + //config->set_property("Acquisition_1B.threshold", "0.1"); + config->set_property("Acquisition_1B.pfa", "0.0001"); config->set_property("Acquisition_1B.doppler_max", "10000"); config->set_property("Acquisition_1B.doppler_step", "250"); config->set_property("Acquisition_1B.dump", "false"); @@ -338,7 +339,7 @@ void GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test::config_2() std::to_string(integration_time_ms)); config->set_property("Acquisition_1B.max_dwells", "1"); config->set_property("Acquisition_1B.bit_transition_flag", "false"); - config->set_property("Acquisition_1B.pfa", "0.1"); + config->set_property("Acquisition_1B.pfa", "0.0001"); config->set_property("Acquisition_1B.doppler_max", "10000"); config->set_property("Acquisition_1B.doppler_step", "250"); config->set_property("Acquisition_1B.dump", "false"); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc_test.cc index 79385d54a..3d91da30f 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_gsoc_test.cc @@ -166,7 +166,8 @@ void GalileoE1PcpsAmbiguousAcquisitionGSoCTest::init() config->set_property("Acquisition_1B.item_type", "gr_complex"); config->set_property("Acquisition_1B.coherent_integration_time_ms", "4"); config->set_property("Acquisition_1B.dump", "false"); - config->set_property("Acquisition_1B.threshold", "0.1"); + //config->set_property("Acquisition_1B.threshold", "0.1"); + config->set_property("Acquisition_1B.pfa", "0.001"); config->set_property("Acquisition_1B.doppler_max", "10000"); config->set_property("Acquisition_1B.doppler_step", "125"); config->set_property("Acquisition_1B.repeat_satellite", "false"); @@ -253,7 +254,7 @@ TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoCTest, ValidationOfResults) top_block = gr::make_top_block("Acquisition test"); init(); - std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 0); + std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition_1B", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 0); std::shared_ptr acquisition = std::dynamic_pointer_cast(acq_); boost::shared_ptr msg_rx = GalileoE1PcpsAmbiguousAcquisitionGSoCTest_msg_rx_make(channel_internal_queue); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test.cc index b7280733d..06f4f8ac4 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/galileo_e1_pcps_ambiguous_acquisition_test.cc @@ -177,7 +177,8 @@ void GalileoE1PcpsAmbiguousAcquisitionTest::init() config->set_property("Acquisition_1B.dump", "false"); } config->set_property("Acquisition_1B.dump_filename", "./tmp-acq-gal1/acquisition"); - config->set_property("Acquisition_1B.threshold", "0.0001"); + //config->set_property("Acquisition_1B.threshold", "0.0001"); + config->set_property("Acquisition_1B.pfa", "0.001"); config->set_property("Acquisition_1B.doppler_max", std::to_string(doppler_max)); config->set_property("Acquisition_1B.doppler_step", std::to_string(doppler_step)); config->set_property("Acquisition_1B.repeat_satellite", "false"); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l1_ca_pcps_acquisition_gsoc2017_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l1_ca_pcps_acquisition_gsoc2017_test.cc index 93091773f..e6d2c158d 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l1_ca_pcps_acquisition_gsoc2017_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/glonass_l1_ca_pcps_acquisition_gsoc2017_test.cc @@ -254,7 +254,8 @@ void GlonassL1CaPcpsAcquisitionGSoC2017Test::config_1() std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.implementation", "GLONASS_L1_CA_PCPS_Acquisition"); - config->set_property("Acquisition.threshold", "0.8"); + //config->set_property("Acquisition.threshold", "0.8"); + config->set_property("Acquisition.pfa", "0.001"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.bit_transition_flag", "false"); @@ -343,7 +344,7 @@ void GlonassL1CaPcpsAcquisitionGSoC2017Test::config_2() std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.implementation", "GLONASS_L1_CA_PCPS_Acquisition"); - // config->set_property("Acquisition.pfa", "0.1"); + config->set_property("Acquisition.pfa", "0.001"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.bit_transition_flag", "false"); @@ -497,9 +498,9 @@ TEST_F(GlonassL1CaPcpsAcquisitionGSoC2017Test, ValidationOfResults) acquisition->set_doppler_step(500); }) << "Failure setting doppler_step."; - ASSERT_NO_THROW({ - acquisition->set_threshold(0.05); - }) << "Failure setting threshold."; + //ASSERT_NO_THROW({ + //acquisition->set_threshold(0.05); + //}) << "Failure setting threshold."; ASSERT_NO_THROW({ acquisition->connect(top_block); @@ -585,9 +586,9 @@ TEST_F(GlonassL1CaPcpsAcquisitionGSoC2017Test, ValidationOfResultsProbabilities) acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step."; - ASSERT_NO_THROW({ - acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); - }) << "Failure setting threshold."; + //ASSERT_NO_THROW({ + //acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); + //}) << "Failure setting threshold."; ASSERT_NO_THROW({ acquisition->connect(top_block); diff --git a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_gsoc2013_test.cc b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_gsoc2013_test.cc index cbbc2cc1c..12dc9ae51 100644 --- a/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_gsoc2013_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_gsoc2013_test.cc @@ -252,7 +252,8 @@ void GpsL1CaPcpsAcquisitionGSoC2013Test::config_1() config->set_property("Acquisition_1C.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition_1C.max_dwells", "1"); - config->set_property("Acquisition_1C.threshold", "0.8"); + //config->set_property("Acquisition_1C.threshold", "0.8"); + config->set_property("Acquisition_1C.pfa", "0.001"); config->set_property("Acquisition_1C.doppler_max", "10000"); config->set_property("Acquisition_1C.doppler_step", "250"); config->set_property("Acquisition_1C.bit_transition_flag", "false"); @@ -339,7 +340,7 @@ void GpsL1CaPcpsAcquisitionGSoC2013Test::config_2() config->set_property("Acquisition_1C.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition_1C.max_dwells", "1"); - config->set_property("Acquisition_1C.pfa", "0.1"); + config->set_property("Acquisition_1C.pfa", "0.001"); config->set_property("Acquisition_1C.doppler_max", "10000"); config->set_property("Acquisition_1C.doppler_step", "250"); config->set_property("Acquisition_1C.bit_transition_flag", "false"); @@ -490,9 +491,9 @@ TEST_F(GpsL1CaPcpsAcquisitionGSoC2013Test, ValidationOfResults) acquisition->set_doppler_step(500); }) << "Failure setting doppler_step."; - ASSERT_NO_THROW({ - acquisition->set_threshold(0.5); - }) << "Failure setting threshold."; + //ASSERT_NO_THROW({ + //acquisition->set_threshold(0.5); + //}) << "Failure setting threshold."; ASSERT_NO_THROW({ acquisition->connect(top_block); @@ -579,9 +580,9 @@ TEST_F(GpsL1CaPcpsAcquisitionGSoC2013Test, ValidationOfResultsProbabilities) acquisition->set_doppler_step(config->property("Acquisition_1C.doppler_step", 500)); }) << "Failure setting doppler_step."; - ASSERT_NO_THROW({ - acquisition->set_threshold(config->property("Acquisition_1C.threshold", 0.0)); - }) << "Failure setting threshold."; + //ASSERT_NO_THROW({ + //acquisition->set_threshold(config->property("Acquisition_1C.threshold", 0.0)); + //}) << "Failure setting threshold."; ASSERT_NO_THROW({ acquisition->connect(top_block);