From 7bc57587d871f2664507b3bc9240c6079184cc3a Mon Sep 17 00:00:00 2001 From: Carles Fernandez <carles.fernandez@gmail.com> Date: Wed, 12 Jul 2017 20:02:34 +0200 Subject: [PATCH 1/2] Fix bugs and defects detected by coverity scan --- .../adapter/adapter_test.cc | 20 ++-- .../libs/tracking_dump_reader.cc | 3 +- .../libs/tracking_dump_reader.h | 2 + .../observables/hybrid_observables_test.cc | 25 ++--- .../gps_l1_ca_telemetry_decoder_test.cc | 19 ++-- .../gps_l1_ca_dll_pll_tracking_test.cc | 102 ++++++++++-------- 6 files changed, 94 insertions(+), 77 deletions(-) diff --git a/src/tests/unit-tests/signal-processing-blocks/adapter/adapter_test.cc b/src/tests/unit-tests/signal-processing-blocks/adapter/adapter_test.cc index 1fcd98d7b..b9f1760c1 100644 --- a/src/tests/unit-tests/signal-processing-blocks/adapter/adapter_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/adapter/adapter_test.cc @@ -300,8 +300,8 @@ TEST_F(DataTypeAdapter, IbyteToCbyteValidationOfResults) std::cerr << e.code().message() << std::endl; } ifs.close(); - remove(file_name_input.c_str()); - remove(file_name_output.c_str()); + ASSERT_EQ(remove(file_name_input.c_str()), 0) << "Problem deleting temporary file"; + ASSERT_EQ(remove(file_name_output.c_str()), 0) << "Problem deleting temporary file"; } @@ -326,8 +326,8 @@ TEST_F(DataTypeAdapter, IbyteToComplexValidationOfResults) std::cerr << e.code().message() << std::endl; } ifs.close(); - remove(file_name_input.c_str()); - remove(file_name_output.c_str()); + ASSERT_EQ(remove(file_name_input.c_str()), 0) << "Problem deleting temporary file"; + ASSERT_EQ(remove(file_name_output.c_str()), 0) << "Problem deleting temporary file"; } @@ -352,8 +352,8 @@ TEST_F(DataTypeAdapter, IbyteToCshortValidationOfResults) std::cerr << e.code().message() << std::endl; } ifs.close(); - remove(file_name_input.c_str()); - remove(file_name_output.c_str()); + ASSERT_EQ(remove(file_name_input.c_str()), 0) << "Problem deleting temporary file"; + ASSERT_EQ(remove(file_name_output.c_str()), 0) << "Problem deleting temporary file"; } @@ -378,8 +378,8 @@ TEST_F(DataTypeAdapter, IshortToComplexValidationOfResults) std::cerr << e.code().message() << std::endl; } ifs.close(); - remove(file_name_input.c_str()); - remove(file_name_output.c_str()); + ASSERT_EQ(remove(file_name_input.c_str()), 0) << "Problem deleting temporary file"; + ASSERT_EQ(remove(file_name_output.c_str()), 0) << "Problem deleting temporary file"; } @@ -404,6 +404,6 @@ TEST_F(DataTypeAdapter, IshortToCshortValidationOfResults) std::cerr << e.code().message() << std::endl; } ifs.close(); - remove(file_name_input.c_str()); - remove(file_name_output.c_str()); + ASSERT_EQ(remove(file_name_input.c_str()), 0) << "Problem deleting temporary file"; + ASSERT_EQ(remove(file_name_output.c_str()), 0) << "Problem deleting temporary file"; } diff --git a/src/tests/unit-tests/signal-processing-blocks/libs/tracking_dump_reader.cc b/src/tests/unit-tests/signal-processing-blocks/libs/tracking_dump_reader.cc index 3c3c2ac85..ff981a418 100644 --- a/src/tests/unit-tests/signal-processing-blocks/libs/tracking_dump_reader.cc +++ b/src/tests/unit-tests/signal-processing-blocks/libs/tracking_dump_reader.cc @@ -52,7 +52,7 @@ bool tracking_dump_reader::read_binary_obs() d_dump_file.read((char *) &carrier_lock_test, sizeof(double)); d_dump_file.read((char *) &aux1, sizeof(double)); d_dump_file.read((char *) &aux2, sizeof(double)); - + d_dump_file.read((char *) &PRN, sizeof(unsigned int)); } catch (const std::exception &e) { @@ -61,6 +61,7 @@ bool tracking_dump_reader::read_binary_obs() return true; } + bool tracking_dump_reader::restart() { if (d_dump_file.is_open()) diff --git a/src/tests/unit-tests/signal-processing-blocks/libs/tracking_dump_reader.h b/src/tests/unit-tests/signal-processing-blocks/libs/tracking_dump_reader.h index 6ec71ebb2..1c84ed9e3 100644 --- a/src/tests/unit-tests/signal-processing-blocks/libs/tracking_dump_reader.h +++ b/src/tests/unit-tests/signal-processing-blocks/libs/tracking_dump_reader.h @@ -79,6 +79,8 @@ public: double aux1; double aux2; + unsigned int PRN; + private: std::string d_dump_filename; std::ifstream d_dump_file; diff --git a/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc b/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc index 8af9e8480..bbc5ec0af 100644 --- a/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc @@ -195,11 +195,11 @@ public: int configure_generator(); int generate_signal(); void check_results( - arma::vec true_ch0_dist_m, arma::vec true_ch1_dist_m, - arma::vec true_ch0_tow_s, - arma::vec measuded_ch0_Pseudorange_m, - arma::vec measuded_ch1_Pseudorange_m, - arma::vec measuded_ch0_RX_time_s); + arma::vec & true_ch0_dist_m, arma::vec & true_ch1_dist_m, + arma::vec & true_ch0_tow_s, + arma::vec & measuded_ch0_Pseudorange_m, + arma::vec & measuded_ch1_Pseudorange_m, + arma::vec & measuded_ch0_RX_time_s); HybridObservablesTest() { @@ -303,12 +303,12 @@ void HybridObservablesTest::configure_receiver() } void HybridObservablesTest::check_results( - arma::vec true_ch0_dist_m, - arma::vec true_ch1_dist_m, - arma::vec true_ch0_tow_s, - arma::vec measuded_ch0_Pseudorange_m, - arma::vec measuded_ch1_Pseudorange_m, - arma::vec measuded_ch0_RX_time_s) + arma::vec & true_ch0_dist_m, + arma::vec & true_ch1_dist_m, + arma::vec & true_ch0_tow_s, + arma::vec & measuded_ch0_Pseudorange_m, + arma::vec & measuded_ch1_Pseudorange_m, + arma::vec & measuded_ch0_RX_time_s) { //1. True value interpolation to match the measurement times @@ -343,13 +343,14 @@ void HybridObservablesTest::check_results( double min_error = arma::min(err); //5. report - + std::streamsize ss = std::cout.precision(); std::cout << std::setprecision(10) << "Delta Observables RMSE=" << rmse << ", mean=" << error_mean << ", stdev=" << sqrt(error_var) << " (max,min)=" << max_error << "," << min_error << " [meters]" << std::endl; + std::cout.precision (ss); ASSERT_LT(rmse, 10E-3); ASSERT_LT(error_mean, 10E-3); diff --git a/src/tests/unit-tests/signal-processing-blocks/telemetry_decoder/gps_l1_ca_telemetry_decoder_test.cc b/src/tests/unit-tests/signal-processing-blocks/telemetry_decoder/gps_l1_ca_telemetry_decoder_test.cc index 8d2f75fbb..194031d98 100644 --- a/src/tests/unit-tests/signal-processing-blocks/telemetry_decoder/gps_l1_ca_telemetry_decoder_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/telemetry_decoder/gps_l1_ca_telemetry_decoder_test.cc @@ -190,10 +190,10 @@ public: int configure_generator(); int generate_signal(); - void check_results(arma::vec true_time_s, - arma::vec true_value, - arma::vec meas_time_s, - arma::vec meas_value); + void check_results(arma::vec & true_time_s, + arma::vec & true_value, + arma::vec & meas_time_s, + arma::vec & meas_value); GpsL1CATelemetryDecoderTest() { @@ -283,10 +283,10 @@ void GpsL1CATelemetryDecoderTest::configure_receiver() } -void GpsL1CATelemetryDecoderTest::check_results(arma::vec true_time_s, - arma::vec true_value, - arma::vec meas_time_s, - arma::vec meas_value) +void GpsL1CATelemetryDecoderTest::check_results(arma::vec & true_time_s, + arma::vec & true_value, + arma::vec & meas_time_s, + arma::vec & meas_value) { //1. True value interpolation to match the measurement times @@ -309,13 +309,14 @@ void GpsL1CATelemetryDecoderTest::check_results(arma::vec true_time_s, double min_error = arma::min(err); //5. report - + std::streamsize ss = std::cout.precision(); std::cout << std::setprecision(10) << "TLM TOW RMSE=" << rmse << ", mean=" << error_mean << ", stdev=" << sqrt(error_var) << " (max,min)=" << max_error << "," << min_error << " [Seconds]" << std::endl; + std::cout.precision (ss); ASSERT_LT(rmse, 0.2E-6); ASSERT_LT(error_mean, 0.2E-6); diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test.cc index bcb4f2396..c1eeec3cd 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test.cc @@ -128,18 +128,18 @@ public: int configure_generator(); int generate_signal(); - void check_results_doppler(arma::vec true_time_s, - arma::vec true_value, - arma::vec meas_time_s, - arma::vec meas_value); - void check_results_acc_carrier_phase(arma::vec true_time_s, - arma::vec true_value, - arma::vec meas_time_s, - arma::vec meas_value); - void check_results_codephase(arma::vec true_time_s, - arma::vec true_value, - arma::vec meas_time_s, - arma::vec meas_value); + void check_results_doppler(arma::vec & true_time_s, + arma::vec & true_value, + arma::vec & meas_time_s, + arma::vec & meas_value); + void check_results_acc_carrier_phase(arma::vec & true_time_s, + arma::vec & true_value, + arma::vec & meas_time_s, + arma::vec & meas_value); + void check_results_codephase(arma::vec & true_time_s, + arma::vec & true_value, + arma::vec & meas_time_s, + arma::vec & meas_value); GpsL1CADllPllTrackingTest() { @@ -226,14 +226,22 @@ void GpsL1CADllPllTrackingTest::configure_receiver() config->set_property("Tracking_1C.early_late_space_chips", "0.5"); } -void GpsL1CADllPllTrackingTest::check_results_doppler(arma::vec true_time_s, - arma::vec true_value, - arma::vec meas_time_s, - arma::vec meas_value) + +void GpsL1CADllPllTrackingTest::check_results_doppler(arma::vec & true_time_s, + arma::vec & true_value, + arma::vec & meas_time_s, + arma::vec & meas_value) { //1. True value interpolation to match the measurement times arma::vec true_value_interp; + arma::uvec true_time_s_valid = find(true_time_s > 0); + true_time_s = true_time_s(true_time_s_valid); + true_value = true_value(true_time_s_valid); + arma::uvec meas_time_s_valid = find(meas_time_s > 0); + meas_time_s = meas_time_s(meas_time_s_valid); + meas_value = meas_value(meas_time_s_valid); + arma::interp1(true_time_s, true_value, meas_time_s, true_value_interp); //2. RMSE @@ -252,26 +260,32 @@ void GpsL1CADllPllTrackingTest::check_results_doppler(arma::vec true_time_s, double min_error = arma::min(err); //5. report - + std::streamsize ss = std::cout.precision(); std::cout << std::setprecision(10) << "TRK Doppler RMSE=" << rmse << ", mean=" << error_mean << ", stdev="<< sqrt(error_var) << " (max,min)=" << max_error << "," << min_error << " [Hz]" << std::endl; - + std::cout.precision (ss); } -void GpsL1CADllPllTrackingTest::check_results_acc_carrier_phase(arma::vec true_time_s, - arma::vec true_value, - arma::vec meas_time_s, - arma::vec meas_value) + +void GpsL1CADllPllTrackingTest::check_results_acc_carrier_phase(arma::vec & true_time_s, + arma::vec & true_value, + arma::vec & meas_time_s, + arma::vec & meas_value) { //1. True value interpolation to match the measurement times - arma::vec true_value_interp; + arma::uvec true_time_s_valid = find(true_time_s > 0); + true_time_s = true_time_s(true_time_s_valid); + true_value = true_value(true_time_s_valid); + arma::uvec meas_time_s_valid = find(meas_time_s > 0); + meas_time_s = meas_time_s(meas_time_s_valid); + meas_value = meas_value(meas_time_s_valid); + arma::interp1(true_time_s, true_value, meas_time_s, true_value_interp); //2. RMSE arma::vec err; - err = meas_value - true_value_interp; arma::vec err2 = arma::square(err); double rmse = sqrt(arma::mean(err2)); @@ -285,21 +299,28 @@ void GpsL1CADllPllTrackingTest::check_results_acc_carrier_phase(arma::vec true_t double min_error = arma::min(err); //5. report - + std::streamsize ss = std::cout.precision(); std::cout << std::setprecision(10) << "TRK acc carrier phase RMSE=" << rmse << ", mean=" << error_mean << ", stdev=" << sqrt(error_var) << " (max,min)=" << max_error << "," << min_error << " [Hz]" << std::endl; - + std::cout.precision (ss); } -void GpsL1CADllPllTrackingTest::check_results_codephase(arma::vec true_time_s, - arma::vec true_value, - arma::vec meas_time_s, - arma::vec meas_value) + +void GpsL1CADllPllTrackingTest::check_results_codephase(arma::vec & true_time_s, + arma::vec & true_value, + arma::vec & meas_time_s, + arma::vec & meas_value) { //1. True value interpolation to match the measurement times - arma::vec true_value_interp; + arma::uvec true_time_s_valid = find(true_time_s > 0); + true_time_s = true_time_s(true_time_s_valid); + true_value = true_value(true_time_s_valid); + arma::uvec meas_time_s_valid = find(meas_time_s > 0); + meas_time_s = meas_time_s(meas_time_s_valid); + meas_value = meas_value(meas_time_s_valid); + arma::interp1(true_time_s, true_value, meas_time_s, true_value_interp); //2. RMSE @@ -318,13 +339,14 @@ void GpsL1CADllPllTrackingTest::check_results_codephase(arma::vec true_time_s, double min_error = arma::min(err); //5. report - + std::streamsize ss = std::cout.precision(); std::cout << std::setprecision(10) << "TRK code phase RMSE=" << rmse << ", mean=" << error_mean << ", stdev=" << sqrt(error_var) << " (max,min)=" << max_error << "," << min_error << " [Chips]" << std::endl; - + std::cout.precision (ss); } + TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) { // Configure the signal generator @@ -418,31 +440,23 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) long int nepoch = true_obs_data.num_epochs(); std::cout << "True observation epochs=" << nepoch << std::endl; - - arma::vec true_timestamp_s = arma::zeros(nepoch, 1); arma::vec true_acc_carrier_phase_cycles = arma::zeros(nepoch, 1); arma::vec true_Doppler_Hz = arma::zeros(nepoch, 1); arma::vec true_prn_delay_chips = arma::zeros(nepoch, 1); arma::vec true_tow_s = arma::zeros(nepoch, 1); - long int epoch_counter = 0; while(true_obs_data.read_binary_obs()) { - - true_timestamp_s(epoch_counter) = true_obs_data.signal_timestamp_s; true_acc_carrier_phase_cycles(epoch_counter) = true_obs_data.acc_carrier_phase_cycles; true_Doppler_Hz(epoch_counter) = true_obs_data.doppler_l1_hz; true_prn_delay_chips(epoch_counter) = true_obs_data.prn_delay_chips; true_tow_s(epoch_counter) = true_obs_data.tow; epoch_counter++; - - } - //load the measured values tracking_dump_reader trk_dump; ASSERT_NO_THROW({ @@ -456,7 +470,6 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) nepoch = trk_dump.num_epochs(); std::cout << "Measured observation epochs=" << nepoch << std::endl; - arma::vec trk_timestamp_s = arma::zeros(nepoch, 1); arma::vec trk_acc_carrier_phase_cycles = arma::zeros(nepoch, 1); arma::vec trk_Doppler_Hz = arma::zeros(nepoch, 1); @@ -469,9 +482,8 @@ TEST_F(GpsL1CADllPllTrackingTest, ValidationOfResults) trk_acc_carrier_phase_cycles(epoch_counter) = trk_dump.acc_carrier_phase_rad / GPS_TWO_PI; trk_Doppler_Hz(epoch_counter) = trk_dump.carrier_doppler_hz; - double delay_chips = GPS_L1_CA_CODE_LENGTH_CHIPS - - GPS_L1_CA_CODE_LENGTH_CHIPS - * (fmod((static_cast<double>(trk_dump.PRN_start_sample_count) + trk_dump.aux1) / static_cast<double>(baseband_sampling_freq), 1.0e-3) /1.0e-3); + double delay_chips = GPS_L1_CA_CODE_LENGTH_CHIPS - GPS_L1_CA_CODE_LENGTH_CHIPS + * (fmod((static_cast<double>(trk_dump.PRN_start_sample_count) + trk_dump.aux1) / static_cast<double>(baseband_sampling_freq), 1.0e-3) / 1.0e-3); trk_prn_delay_chips(epoch_counter) = delay_chips; epoch_counter++; From d1828721cf0bc6fb7120e516df724127a5d9d928 Mon Sep 17 00:00:00 2001 From: Carles Fernandez <carles.fernandez@gmail.com> Date: Wed, 12 Jul 2017 20:12:33 +0200 Subject: [PATCH 2/2] Fix bugs and defects detected by Coverity Scan --- .../gps_l1_ca_dll_pll_tracking_test_fpga.cc | 49 ++++++++++++++----- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test_fpga.cc b/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test_fpga.cc index 41a317d56..333b33ffe 100644 --- a/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test_fpga.cc +++ b/src/tests/unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test_fpga.cc @@ -227,12 +227,12 @@ public: int configure_generator(); int generate_signal(); - void check_results_doppler(arma::vec true_time_s, arma::vec true_value, - arma::vec meas_time_s, arma::vec meas_value); - void check_results_acc_carrier_phase(arma::vec true_time_s, - arma::vec true_value, arma::vec meas_time_s, arma::vec meas_value); - void check_results_codephase(arma::vec true_time_s, arma::vec true_value, - arma::vec meas_time_s, arma::vec meas_value); + void check_results_doppler(arma::vec & true_time_s, arma::vec & true_value, + arma::vec & meas_time_s, arma::vec & meas_value); + void check_results_acc_carrier_phase(arma::vec & true_time_s, + arma::vec & true_value, arma::vec & meas_time_s, arma::vec & meas_value); + void check_results_codephase(arma::vec & true_time_s, arma::vec & true_value, + arma::vec & meas_time_s, arma::vec & meas_value); GpsL1CADllPllTrackingTestFpga() { @@ -328,11 +328,17 @@ void GpsL1CADllPllTrackingTestFpga::configure_receiver() config->set_property("Tracking_1C.device_base", "1"); } -void GpsL1CADllPllTrackingTestFpga::check_results_doppler(arma::vec true_time_s, - arma::vec true_value, arma::vec meas_time_s, arma::vec meas_value) +void GpsL1CADllPllTrackingTestFpga::check_results_doppler(arma::vec & true_time_s, + arma::vec & true_value, arma::vec & meas_time_s, arma::vec & meas_value) { //1. True value interpolation to match the measurement times arma::vec true_value_interp; + arma::uvec true_time_s_valid = find(true_time_s > 0); + true_time_s = true_time_s(true_time_s_valid); + true_value = true_value(true_time_s_valid); + arma::uvec meas_time_s_valid = find(meas_time_s > 0); + meas_time_s = meas_time_s(meas_time_s_valid); + meas_value = meas_value(meas_time_s_valid); arma::interp1(true_time_s, true_value, meas_time_s, true_value_interp); //2. RMSE @@ -351,18 +357,26 @@ void GpsL1CADllPllTrackingTestFpga::check_results_doppler(arma::vec true_time_s, double min_error = arma::min(err); //5. report + std::streamsize ss = std::cout.precision(); std::cout << std::setprecision(10) << "TRK Doppler RMSE=" << rmse << ", mean=" << error_mean << ", stdev=" << sqrt(error_var) << " (max,min)=" << max_error << "," << min_error << " [Hz]" << std::endl; + std::cout.precision (ss); } void GpsL1CADllPllTrackingTestFpga::check_results_acc_carrier_phase( - arma::vec true_time_s, arma::vec true_value, arma::vec meas_time_s, - arma::vec meas_value) + arma::vec & true_time_s, arma::vec & true_value, arma::vec & meas_time_s, + arma::vec & meas_value) { //1. True value interpolation to match the measurement times arma::vec true_value_interp; + arma::uvec true_time_s_valid = find(true_time_s > 0); + true_time_s = true_time_s(true_time_s_valid); + true_value = true_value(true_time_s_valid); + arma::uvec meas_time_s_valid = find(meas_time_s > 0); + meas_time_s = meas_time_s(meas_time_s_valid); + meas_value = meas_value(meas_time_s_valid); arma::interp1(true_time_s, true_value, meas_time_s, true_value_interp); //2. RMSE @@ -381,19 +395,26 @@ void GpsL1CADllPllTrackingTestFpga::check_results_acc_carrier_phase( double min_error = arma::min(err); //5. report + std::streamsize ss = std::cout.precision(); std::cout << std::setprecision(10) << "TRK acc carrier phase RMSE=" << rmse << ", mean=" << error_mean << ", stdev=" << sqrt(error_var) << " (max,min)=" << max_error << "," << min_error << " [Hz]" << std::endl; - + std::cout.precision (ss); } void GpsL1CADllPllTrackingTestFpga::check_results_codephase( - arma::vec true_time_s, arma::vec true_value, arma::vec meas_time_s, - arma::vec meas_value) + arma::vec & true_time_s, arma::vec & true_value, arma::vec & meas_time_s, + arma::vec & meas_value) { //1. True value interpolation to match the measurement times arma::vec true_value_interp; + arma::uvec true_time_s_valid = find(true_time_s > 0); + true_time_s = true_time_s(true_time_s_valid); + true_value = true_value(true_time_s_valid); + arma::uvec meas_time_s_valid = find(meas_time_s > 0); + meas_time_s = meas_time_s(meas_time_s_valid); + meas_value = meas_value(meas_time_s_valid); arma::interp1(true_time_s, true_value, meas_time_s, true_value_interp); //2. RMSE @@ -411,10 +432,12 @@ void GpsL1CADllPllTrackingTestFpga::check_results_codephase( double min_error = arma::min(err); //5. report + std::streamsize ss = std::cout.precision(); std::cout << std::setprecision(10) << "TRK code phase RMSE=" << rmse << ", mean=" << error_mean << ", stdev=" << sqrt(error_var) << " (max,min)=" << max_error << "," << min_error << " [Chips]" << std::endl; + std::cout.precision (ss); } TEST_F(GpsL1CADllPllTrackingTestFpga, ValidationOfResultsFpga)