1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-12-15 12:40:35 +00:00

Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into next

This commit is contained in:
Carles Fernandez 2018-09-07 10:49:55 +02:00
commit b87ec1b394
No known key found for this signature in database
GPG Key ID: 4C583C52B0C3877D
4 changed files with 108 additions and 40 deletions

View File

@ -1,5 +1,5 @@
/*! /*!
* \file GPS_L1_CA_KF_Tracking.h * \file gps_l1_ca_kf_tracking.h
* \brief Interface of an adapter of a DLL + Kalman carrier * \brief Interface of an adapter of a DLL + Kalman carrier
* tracking loop block for GPS L1 C/A signals * tracking loop block for GPS L1 C/A signals
* \author Javier Arribas, 2018. jarribas(at)cttc.es * \author Javier Arribas, 2018. jarribas(at)cttc.es

View File

@ -59,7 +59,7 @@
concurrent_queue<Gps_Acq_Assist> global_gps_acq_assist_queue; concurrent_queue<Gps_Acq_Assist> global_gps_acq_assist_queue;
concurrent_map<Gps_Acq_Assist> global_gps_acq_assist_map; concurrent_map<Gps_Acq_Assist> global_gps_acq_assist_map;
class StaticPositionSystemTest : public ::testing::Test class PositionSystemTest : public ::testing::Test
{ {
public: public:
int configure_generator(); int configure_generator();
@ -67,6 +67,7 @@ public:
int configure_receiver(); int configure_receiver();
int run_receiver(); int run_receiver();
void check_results(); void check_results();
std::string config_filename_no_extension;
private: private:
std::string generator_binary; std::string generator_binary;
@ -100,7 +101,7 @@ private:
}; };
void StaticPositionSystemTest::geodetic2Ecef(const double latitude, const double longitude, const double altitude, void PositionSystemTest::geodetic2Ecef(const double latitude, const double longitude, const double altitude,
double* x, double* y, double* z) double* x, double* y, double* z)
{ {
const double a = 6378137.0; // WGS84 const double a = 6378137.0; // WGS84
@ -125,7 +126,7 @@ void StaticPositionSystemTest::geodetic2Ecef(const double latitude, const double
} }
void StaticPositionSystemTest::geodetic2Enu(double latitude, double longitude, double altitude, void PositionSystemTest::geodetic2Enu(double latitude, double longitude, double altitude,
double* east, double* north, double* up) double* east, double* north, double* up)
{ {
double x, y, z; double x, y, z;
@ -168,7 +169,7 @@ void StaticPositionSystemTest::geodetic2Enu(double latitude, double longitude, d
} }
double StaticPositionSystemTest::compute_stdev_precision(const std::vector<double>& vec) double PositionSystemTest::compute_stdev_precision(const std::vector<double>& vec)
{ {
double sum__ = std::accumulate(vec.begin(), vec.end(), 0.0); double sum__ = std::accumulate(vec.begin(), vec.end(), 0.0);
double mean__ = sum__ / vec.size(); double mean__ = sum__ / vec.size();
@ -181,7 +182,7 @@ double StaticPositionSystemTest::compute_stdev_precision(const std::vector<doubl
} }
double StaticPositionSystemTest::compute_stdev_accuracy(const std::vector<double>& vec, const double ref) double PositionSystemTest::compute_stdev_accuracy(const std::vector<double>& vec, const double ref)
{ {
const double mean__ = ref; const double mean__ = ref;
double accum__ = 0.0; double accum__ = 0.0;
@ -193,7 +194,7 @@ double StaticPositionSystemTest::compute_stdev_accuracy(const std::vector<double
} }
int StaticPositionSystemTest::configure_generator() int PositionSystemTest::configure_generator()
{ {
// Configure signal generator // Configure signal generator
generator_binary = FLAGS_generator_binary; generator_binary = FLAGS_generator_binary;
@ -215,7 +216,7 @@ int StaticPositionSystemTest::configure_generator()
} }
int StaticPositionSystemTest::generate_signal() int PositionSystemTest::generate_signal()
{ {
pid_t wait_result; pid_t wait_result;
int child_status; int child_status;
@ -238,7 +239,7 @@ int StaticPositionSystemTest::generate_signal()
} }
int StaticPositionSystemTest::configure_receiver() int PositionSystemTest::configure_receiver()
{ {
if (FLAGS_config_file_ptest.empty()) if (FLAGS_config_file_ptest.empty())
{ {
@ -407,7 +408,7 @@ int StaticPositionSystemTest::configure_receiver()
} }
int StaticPositionSystemTest::run_receiver() int PositionSystemTest::run_receiver()
{ {
std::shared_ptr<ControlThread> control_thread; std::shared_ptr<ControlThread> control_thread;
if (FLAGS_config_file_ptest.empty()) if (FLAGS_config_file_ptest.empty())
@ -448,15 +449,15 @@ int StaticPositionSystemTest::run_receiver()
{ {
std::string aux = std::string(buffer); std::string aux = std::string(buffer);
EXPECT_EQ(aux.empty(), false); EXPECT_EQ(aux.empty(), false);
StaticPositionSystemTest::generated_kml_file = aux.erase(aux.length() - 1, 1); PositionSystemTest::generated_kml_file = aux.erase(aux.length() - 1, 1);
} }
pclose(fp); pclose(fp);
EXPECT_EQ(StaticPositionSystemTest::generated_kml_file.empty(), false); EXPECT_EQ(PositionSystemTest::generated_kml_file.empty(), false);
return 0; return 0;
} }
void StaticPositionSystemTest::check_results() void PositionSystemTest::check_results()
{ {
std::vector<double> pos_e; std::vector<double> pos_e;
std::vector<double> pos_n; std::vector<double> pos_n;
@ -487,7 +488,7 @@ void StaticPositionSystemTest::check_results()
if (!FLAGS_use_pvt_solver_dump) if (!FLAGS_use_pvt_solver_dump)
{ {
//fall back to read receiver KML output (position only) //fall back to read receiver KML output (position only)
std::fstream myfile(StaticPositionSystemTest::generated_kml_file, std::ios_base::in); std::fstream myfile(PositionSystemTest::generated_kml_file, std::ios_base::in);
ASSERT_TRUE(myfile.is_open()) << "No valid kml file could be opened"; ASSERT_TRUE(myfile.is_open()) << "No valid kml file could be opened";
std::string line; std::string line;
// Skip header // Skip header
@ -608,7 +609,10 @@ void StaticPositionSystemTest::check_results()
std::stringstream stm; std::stringstream stm;
std::ofstream position_test_file; std::ofstream position_test_file;
if (!FLAGS_config_file_ptest.empty())
{
stm << "Configuration file: " << FLAGS_config_file_ptest << std::endl;
}
if (FLAGS_config_file_ptest.empty()) if (FLAGS_config_file_ptest.empty())
{ {
stm << "---- ACCURACY ----" << std::endl; stm << "---- ACCURACY ----" << std::endl;
@ -634,7 +638,7 @@ void StaticPositionSystemTest::check_results()
stm << "SEP = " << 0.51 * (sigma_E_2_precision + sigma_N_2_precision + sigma_U_2_precision) << " [m]" << std::endl; stm << "SEP = " << 0.51 * (sigma_E_2_precision + sigma_N_2_precision + sigma_U_2_precision) << " [m]" << std::endl;
std::cout << stm.rdbuf(); std::cout << stm.rdbuf();
std::string output_filename = "position_test_output_" + StaticPositionSystemTest::generated_kml_file.erase(StaticPositionSystemTest::generated_kml_file.length() - 3, 3) + "txt"; std::string output_filename = "position_test_output_" + PositionSystemTest::generated_kml_file.erase(PositionSystemTest::generated_kml_file.length() - 3, 3) + "txt";
position_test_file.open(output_filename.c_str()); position_test_file.open(output_filename.c_str());
if (position_test_file.is_open()) if (position_test_file.is_open())
{ {
@ -726,6 +730,10 @@ void StaticPositionSystemTest::check_results()
//report //report
std::cout << "----- Position and Velocity 3D ECEF error statistics -----" << std::endl; std::cout << "----- Position and Velocity 3D ECEF error statistics -----" << std::endl;
if (!FLAGS_config_file_ptest.empty())
{
std::cout << "---- Configuration file: " << FLAGS_config_file_ptest << std::endl;
}
std::streamsize ss = std::cout.precision(); std::streamsize ss = std::cout.precision();
std::cout << std::setprecision(10) << "---- 3D ECEF Position RMSE = " std::cout << std::setprecision(10) << "---- 3D ECEF Position RMSE = "
<< rmse_R_eb_e << ", mean = " << error_mean_R_eb_e << rmse_R_eb_e << ", mean = " << error_mean_R_eb_e
@ -759,11 +767,16 @@ void StaticPositionSystemTest::check_results()
std::vector<double> Z(error_R_eb_e.colptr(2), error_R_eb_e.colptr(2) + error_R_eb_e.n_rows); std::vector<double> Z(error_R_eb_e.colptr(2), error_R_eb_e.colptr(2) + error_R_eb_e.n_rows);
g1.cmd("set key box opaque"); g1.cmd("set key box opaque");
g1.plot_xyz(X, Y, Z, "ECEF_3d_error"); g1.plot_xyz(X, Y, Z, "ECEF 3D error");
g1.set_legend(); g1.set_legend();
if (FLAGS_config_file_ptest.empty())
{
g1.savetops("ECEF_3d_error"); g1.savetops("ECEF_3d_error");
}
else
{
g1.savetops("ECEF_3d_error_" + config_filename_no_extension);
}
arma::vec time_vector_from_start_s = receiver_time_s - receiver_time_s(0); arma::vec time_vector_from_start_s = receiver_time_s - receiver_time_s(0);
Gnuplot g3("linespoints"); Gnuplot g3("linespoints");
if (FLAGS_show_plots) if (FLAGS_show_plots)
@ -781,10 +794,20 @@ void StaticPositionSystemTest::check_results()
//conversion between arma::vec and std:vector //conversion between arma::vec and std:vector
std::vector<double> error_vec(error_module_R_eb_e.colptr(0), error_module_R_eb_e.colptr(0) + error_module_R_eb_e.n_rows); std::vector<double> error_vec(error_module_R_eb_e.colptr(0), error_module_R_eb_e.colptr(0) + error_module_R_eb_e.n_rows);
g3.cmd("set key box opaque"); g3.cmd("set key box opaque");
g3.plot_xy(time_vector_from_start_s, error_vec, g3.plot_xy(time_vector_from_start_s, error_vec, "Position 3D error");
"Position_3d_error"); double mean3d = std::accumulate(error_vec.begin(), error_vec.end(), 0.0) / error_vec.size();
std::vector<double> error_mean(error_module_R_eb_e.n_rows, mean3d);
g3.set_style("lines");
g3.plot_xy(time_vector_from_start_s, error_mean, "Mean");
g3.set_legend(); g3.set_legend();
if (FLAGS_config_file_ptest.empty())
{
g3.savetops("Position_3d_error"); g3.savetops("Position_3d_error");
}
else
{
g3.savetops("Position_3d_error_" + config_filename_no_extension);
}
Gnuplot g4("linespoints"); Gnuplot g4("linespoints");
if (FLAGS_show_plots) if (FLAGS_show_plots)
@ -802,15 +825,25 @@ void StaticPositionSystemTest::check_results()
//conversion between arma::vec and std:vector //conversion between arma::vec and std:vector
std::vector<double> error_vec2(error_module_V_eb_e.colptr(0), error_module_V_eb_e.colptr(0) + error_module_V_eb_e.n_rows); std::vector<double> error_vec2(error_module_V_eb_e.colptr(0), error_module_V_eb_e.colptr(0) + error_module_V_eb_e.n_rows);
g4.cmd("set key box opaque"); g4.cmd("set key box opaque");
g4.plot_xy(time_vector_from_start_s, error_vec2, g4.plot_xy(time_vector_from_start_s, error_vec2, "Velocity 3D error");
"Velocity_3d_error"); double mean3dv = std::accumulate(error_vec2.begin(), error_vec2.end(), 0.0) / error_vec2.size();
std::vector<double> error_mean_v(error_module_V_eb_e.n_rows, mean3dv);
g4.set_style("lines");
g4.plot_xy(time_vector_from_start_s, error_mean_v, "Mean");
g4.set_legend(); g4.set_legend();
if (FLAGS_config_file_ptest.empty())
{
g4.savetops("Velocity_3d_error"); g4.savetops("Velocity_3d_error");
} }
else
{
g4.savetops("Velocity_3d_error_" + config_filename_no_extension);
}
}
} }
void StaticPositionSystemTest::print_results(const std::vector<double>& east, void PositionSystemTest::print_results(const std::vector<double>& east,
const std::vector<double>& north, const std::vector<double>& north,
const std::vector<double>& up) const std::vector<double>& up)
{ {
@ -875,9 +908,16 @@ void StaticPositionSystemTest::print_results(const std::vector<double>& east,
g1.cmd("set grid front"); g1.cmd("set grid front");
g1.cmd("replot"); g1.cmd("replot");
if (FLAGS_config_file_ptest.empty())
{
g1.savetops("Position_test_2D"); g1.savetops("Position_test_2D");
g1.savetopdf("Position_test_2D", 18); g1.savetopdf("Position_test_2D", 18);
}
else
{
g1.savetops("Position_test_2D_" + config_filename_no_extension);
g1.savetopdf("Position_test_2D_" + config_filename_no_extension, 18);
}
Gnuplot g2("points"); Gnuplot g2("points");
if (FLAGS_show_plots) if (FLAGS_show_plots)
@ -903,10 +943,17 @@ void StaticPositionSystemTest::print_results(const std::vector<double>& east,
std::to_string(ninty_sas) + std::to_string(ninty_sas) +
"\n fx(v,u) = r*cos(v)*cos(u)\n fy(v,u) = r*cos(v)*sin(u)\n fz(v) = r*sin(v) \n splot fx(v,u),fy(v,u),fz(v) title \"90\%-SAS\" lt rgb \"gray\"\n"); "\n fx(v,u) = r*cos(v)*cos(u)\n fy(v,u) = r*cos(v)*sin(u)\n fz(v) = r*sin(v) \n splot fx(v,u),fy(v,u),fz(v) title \"90\%-SAS\" lt rgb \"gray\"\n");
g2.plot_xyz(east, north, up, "3D Position Fixes"); g2.plot_xyz(east, north, up, "3D Position Fixes");
if (FLAGS_config_file_ptest.empty())
{
g2.savetops("Position_test_3D"); g2.savetops("Position_test_3D");
g2.savetopdf("Position_test_3D"); g2.savetopdf("Position_test_3D");
} }
else
{
g2.savetops("Position_test_3D_" + config_filename_no_extension);
g2.savetopdf("Position_test_3D_" + config_filename_no_extension);
}
}
catch (const GnuplotException& ge) catch (const GnuplotException& ge)
{ {
std::cout << ge.what() << std::endl; std::cout << ge.what() << std::endl;
@ -914,7 +961,7 @@ void StaticPositionSystemTest::print_results(const std::vector<double>& east,
} }
} }
TEST_F(StaticPositionSystemTest, Position_system_test) TEST_F(PositionSystemTest, Position_system_test)
{ {
if (FLAGS_config_file_ptest.empty()) if (FLAGS_config_file_ptest.empty())
{ {
@ -927,6 +974,11 @@ TEST_F(StaticPositionSystemTest, Position_system_test)
generate_signal(); generate_signal();
} }
} }
else
{
config_filename_no_extension = FLAGS_config_file_ptest.substr(FLAGS_config_file_ptest.find_last_of("/\\") + 1);
config_filename_no_extension = config_filename_no_extension.erase(config_filename_no_extension.length() - 5);
}
// Configure receiver // Configure receiver
configure_receiver(); configure_receiver();

View File

@ -138,11 +138,16 @@ DECLARE_string(log_dir);
#include "unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test_fpga.cc" #include "unit-tests/signal-processing-blocks/acquisition/gps_l1_ca_pcps_acquisition_test_fpga.cc"
#endif #endif
#include "unit-tests/signal-processing-blocks/telemetry_decoder/galileo_fnav_inav_decoder_test.cc"
#include "unit-tests/system-parameters/glonass_gnav_ephemeris_test.cc"
#include "unit-tests/system-parameters/glonass_gnav_nav_message_test.cc"
#include "unit-tests/signal-processing-blocks/pvt/rtcm_test.cc" #include "unit-tests/signal-processing-blocks/pvt/rtcm_test.cc"
#include "unit-tests/signal-processing-blocks/pvt/rtcm_printer_test.cc" #include "unit-tests/signal-processing-blocks/pvt/rtcm_printer_test.cc"
#include "unit-tests/signal-processing-blocks/pvt/rinex_printer_test.cc" #include "unit-tests/signal-processing-blocks/pvt/rinex_printer_test.cc"
#include "unit-tests/signal-processing-blocks/pvt/nmea_printer_test.cc" #include "unit-tests/signal-processing-blocks/pvt/nmea_printer_test.cc"
#if EXTRA_TESTS #if EXTRA_TESTS
#include "unit-tests/signal-processing-blocks/acquisition/gps_l2_m_pcps_acquisition_test.cc" #include "unit-tests/signal-processing-blocks/acquisition/gps_l2_m_pcps_acquisition_test.cc"
#include "unit-tests/signal-processing-blocks/acquisition/glonass_l1_ca_pcps_acquisition_test.cc" #include "unit-tests/signal-processing-blocks/acquisition/glonass_l1_ca_pcps_acquisition_test.cc"
@ -158,9 +163,6 @@ DECLARE_string(log_dir);
#include "unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc" #include "unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc"
#endif #endif
#include "unit-tests/signal-processing-blocks/telemetry_decoder/galileo_fnav_inav_decoder_test.cc"
#include "unit-tests/system-parameters/glonass_gnav_ephemeris_test.cc"
#include "unit-tests/system-parameters/glonass_gnav_nav_message_test.cc"
// For GPS NAVIGATION (L1) // For GPS NAVIGATION (L1)
concurrent_queue<Gps_Acq_Assist> global_gps_acq_assist_queue; concurrent_queue<Gps_Acq_Assist> global_gps_acq_assist_queue;

View File

@ -550,7 +550,14 @@ TEST_F(GpsL1CAKfTrackingTest, ValidationOfResults)
g1.plot_xy(timevec, late, "Late", decimate); g1.plot_xy(timevec, late, "Late", decimate);
g1.savetops("Correlators_outputs"); g1.savetops("Correlators_outputs");
g1.savetopdf("Correlators_outputs", 18); g1.savetopdf("Correlators_outputs", 18);
if (FLAGS_show_plots)
{
g1.showonscreen(); // window output g1.showonscreen(); // window output
}
else
{
g1.disablescreen();
}
Gnuplot g2("points"); Gnuplot g2("points");
g2.set_title("Constellation diagram (satellite PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")"); g2.set_title("Constellation diagram (satellite PRN #" + std::to_string(FLAGS_test_satellite_PRN) + ")");
@ -561,8 +568,15 @@ TEST_F(GpsL1CAKfTrackingTest, ValidationOfResults)
g2.plot_xy(promptI, promptQ); g2.plot_xy(promptI, promptQ);
g2.savetops("Constellation"); g2.savetops("Constellation");
g2.savetopdf("Constellation", 18); g2.savetopdf("Constellation", 18);
if (FLAGS_show_plots)
{
g2.showonscreen(); // window output g2.showonscreen(); // window output
} }
else
{
g2.disablescreen();
}
}
catch (const GnuplotException& ge) catch (const GnuplotException& ge)
{ {
std::cout << ge.what() << std::endl; std::cout << ge.what() << std::endl;