mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 15:23:04 +00:00 
			
		
		
		
	Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into newsatdispatcher
This commit is contained in:
		| @@ -403,7 +403,7 @@ set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "master") | ||||
| set(GNSSSDR_GPSTK_LOCAL_VERSION "2.10.6") | ||||
| set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.16") | ||||
| set(GNSSSDR_PUGIXML_LOCAL_VERSION "1.9") | ||||
| set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "3.8.0") | ||||
| set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "3.9.0") | ||||
|  | ||||
| if(CMAKE_VERSION VERSION_LESS "3.0.2") # Fix for CentOS 7 | ||||
|     set(GNSSSDR_GFLAGS_LOCAL_VERSION "2.2.1") | ||||
|   | ||||
| @@ -1419,7 +1419,7 @@ void rtklib_pvt_gs::msg_handler_telemetry(const pmt::pmt_t& msg) | ||||
|                                     new_bds_eph[bds_dnav_eph->i_satellite_PRN] = *bds_dnav_eph; | ||||
|                                     switch (type_of_rx) | ||||
|                                         { | ||||
|                                         case 50:  // BDS B1I only | ||||
|                                         case 500:  // BDS B1I only | ||||
|                                             rp->log_rinex_nav(rp->navFile, new_bds_eph); | ||||
|                                             break; | ||||
|                                         default: | ||||
| @@ -2597,7 +2597,7 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | ||||
|                                                                                         } | ||||
|                                                                                 } | ||||
|                                                                             break; | ||||
|                                                                         case 50:  // BDS B1I only | ||||
|                                                                         case 500:  // BDS B1I only | ||||
|                                                                             if (beidou_dnav_ephemeris_iter != d_pvt_solver->beidou_dnav_ephemeris_map.cend()) | ||||
|                                                                                 { | ||||
|                                                                                     rp->log_rinex_obs(rp->obsFile, beidou_dnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, "B1"); | ||||
|   | ||||
| @@ -34,7 +34,6 @@ | ||||
| #include "pvt_solution.h" | ||||
| #include <boost/date_time/posix_time/posix_time.hpp> | ||||
| #include <glog/logging.h> | ||||
| #include <cstdio>     // for remove | ||||
| #include <ctime>      // for tm | ||||
| #include <exception>  // for exception | ||||
| #include <iomanip>    // for operator<< | ||||
| @@ -240,7 +239,8 @@ bool GeoJSON_Printer::close_file() | ||||
|             // if nothing is written, erase the file | ||||
|             if (first_pos == true) | ||||
|                 { | ||||
|                     if (remove(filename_.c_str()) != 0) | ||||
|                     errorlib::error_code ec; | ||||
|                     if (!fs::remove(fs::path(filename_), ec)) | ||||
|                         { | ||||
|                             LOG(INFO) << "Error deleting temporary file"; | ||||
|                         } | ||||
|   | ||||
| @@ -34,7 +34,6 @@ | ||||
| #include "rtklib_solver.h" | ||||
| #include <boost/date_time/posix_time/posix_time.hpp> | ||||
| #include <glog/logging.h> | ||||
| #include <cstdio>     // for remove | ||||
| #include <ctime>      // for tm | ||||
| #include <exception>  // for exception | ||||
| #include <iomanip>    // for operator<< | ||||
| @@ -251,7 +250,8 @@ Gpx_Printer::~Gpx_Printer() | ||||
|         } | ||||
|     if (!positions_printed) | ||||
|         { | ||||
|             if (remove(gpx_filename.c_str()) != 0) | ||||
|             errorlib::error_code ec; | ||||
|             if (!fs::remove(fs::path(gpx_filename), ec)) | ||||
|                 { | ||||
|                     LOG(INFO) << "Error deleting temporary GPX file"; | ||||
|                 } | ||||
|   | ||||
| @@ -34,9 +34,7 @@ | ||||
| #include "rtklib_solver.h" | ||||
| #include <boost/date_time/posix_time/posix_time.hpp> | ||||
| #include <glog/logging.h> | ||||
| #include <cstdio>     // for remove | ||||
| #include <cstdlib>    // for mkstemp | ||||
| #include <cstring>    // for strncpy | ||||
| #include <ctime>      // for tm | ||||
| #include <exception>  // for exception | ||||
| #include <iostream>   // for cout, cerr | ||||
| @@ -366,7 +364,8 @@ Kml_Printer::~Kml_Printer() | ||||
|         } | ||||
|     if (!positions_printed) | ||||
|         { | ||||
|             if (remove(kml_filename.c_str()) != 0) | ||||
|             errorlib::error_code ec; | ||||
|             if (!fs::remove(fs::path(kml_filename), ec)) | ||||
|                 { | ||||
|                     LOG(INFO) << "Error deleting temporary KML file"; | ||||
|                 } | ||||
|   | ||||
| @@ -37,6 +37,7 @@ | ||||
| #include "rtklib_solution.h" | ||||
| #include "rtklib_solver.h" | ||||
| #include <glog/logging.h> | ||||
| #include <array> | ||||
| #include <cstdint> | ||||
| #include <exception> | ||||
| #include <fcntl.h> | ||||
| @@ -133,6 +134,7 @@ Nmea_Printer::Nmea_Printer(const std::string& filename, bool flag_nmea_output_fi | ||||
|  | ||||
| Nmea_Printer::~Nmea_Printer() | ||||
| { | ||||
|     auto pos = nmea_file_descriptor.tellp(); | ||||
|     try | ||||
|         { | ||||
|             if (nmea_file_descriptor.is_open()) | ||||
| @@ -148,6 +150,14 @@ Nmea_Printer::~Nmea_Printer() | ||||
|         { | ||||
|             std::cerr << e.what() << '\n'; | ||||
|         } | ||||
|     if (pos == 0) | ||||
|         { | ||||
|             errorlib::error_code ec; | ||||
|             if (!fs::remove(fs::path(nmea_filename), ec)) | ||||
|                 { | ||||
|                     std::cerr << "Problem removing NMEA temporary file: " << nmea_filename << '\n'; | ||||
|                 } | ||||
|         } | ||||
|     try | ||||
|         { | ||||
|             close_serial(); | ||||
| @@ -428,9 +438,9 @@ std::string Nmea_Printer::get_GPRMC() | ||||
| { | ||||
|     // Sample -> $GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,*10 | ||||
|     std::stringstream sentence_str; | ||||
|     unsigned char buff[1024] = {0}; | ||||
|     outnmea_rmc(buff, &d_PVT_data->pvt_sol); | ||||
|     sentence_str << buff; | ||||
|     std::array<unsigned char, 1024> buff{}; | ||||
|     outnmea_rmc(buff.data(), &d_PVT_data->pvt_sol); | ||||
|     sentence_str << buff.data(); | ||||
|     return sentence_str.str(); | ||||
| } | ||||
|  | ||||
| @@ -440,9 +450,9 @@ std::string Nmea_Printer::get_GPGSA() | ||||
|     // $GPGSA,A,3,07,02,26,27,09,04,15, , , , , ,1.8,1.0,1.5*33 | ||||
|     // GSA-GNSS DOP and Active Satellites | ||||
|     std::stringstream sentence_str; | ||||
|     unsigned char buff[1024] = {0}; | ||||
|     outnmea_gsa(buff, &d_PVT_data->pvt_sol, d_PVT_data->pvt_ssat.data()); | ||||
|     sentence_str << buff; | ||||
|     std::array<unsigned char, 1024> buff{}; | ||||
|     outnmea_gsa(buff.data(), &d_PVT_data->pvt_sol, d_PVT_data->pvt_ssat.data()); | ||||
|     sentence_str << buff.data(); | ||||
|     return sentence_str.str(); | ||||
| } | ||||
|  | ||||
| @@ -453,9 +463,9 @@ std::string Nmea_Printer::get_GPGSV() | ||||
|     // $GPGSV,2,1,07,07,79,048,42,02,51,062,43,26,36,256,42,27,27,138,42*71 | ||||
|     // Notice that NMEA 2.1 only supports 12 channels | ||||
|     std::stringstream sentence_str; | ||||
|     unsigned char buff[1024] = {0}; | ||||
|     outnmea_gsv(buff, &d_PVT_data->pvt_sol, d_PVT_data->pvt_ssat.data()); | ||||
|     sentence_str << buff; | ||||
|     std::array<unsigned char, 1024> buff{}; | ||||
|     outnmea_gsv(buff.data(), &d_PVT_data->pvt_sol, d_PVT_data->pvt_ssat.data()); | ||||
|     sentence_str << buff.data(); | ||||
|     return sentence_str.str(); | ||||
| } | ||||
|  | ||||
| @@ -463,9 +473,9 @@ std::string Nmea_Printer::get_GPGSV() | ||||
| std::string Nmea_Printer::get_GPGGA() | ||||
| { | ||||
|     std::stringstream sentence_str; | ||||
|     unsigned char buff[1024] = {0}; | ||||
|     outnmea_gga(buff, &d_PVT_data->pvt_sol); | ||||
|     sentence_str << buff; | ||||
|     std::array<unsigned char, 1024> buff{}; | ||||
|     outnmea_gga(buff.data(), &d_PVT_data->pvt_sol); | ||||
|     sentence_str << buff.data(); | ||||
|     return sentence_str.str(); | ||||
|     // $GPGGA,104427.591,5920.7009,N,01803.2938,E,1,05,3.3,78.2,M,23.2,M,0.0,0000*4A | ||||
| } | ||||
|   | ||||
| @@ -33,6 +33,7 @@ | ||||
| #include "GPS_L1_CA.h" | ||||
| #include "geofunctions.h" | ||||
| #include <glog/logging.h> | ||||
| #include <array> | ||||
|  | ||||
|  | ||||
| Pvt_Solution::Pvt_Solution() | ||||
| @@ -97,8 +98,8 @@ int Pvt_Solution::cart2geo(double X, double Y, double Z, int elipsoid_selection) | ||||
|                  4. World Geodetic System 1984 | ||||
|      */ | ||||
|  | ||||
|     const double a[5] = {6378388.0, 6378160.0, 6378135.0, 6378137.0, 6378137.0}; | ||||
|     const double f[5] = {1.0 / 297.0, 1.0 / 298.247, 1.0 / 298.26, 1.0 / 298.257222101, 1.0 / 298.257223563}; | ||||
|     const std::array<double, 5> a = {6378388.0, 6378160.0, 6378135.0, 6378137.0, 6378137.0}; | ||||
|     const std::array<double, 5> f = {1.0 / 297.0, 1.0 / 298.247, 1.0 / 298.26, 1.0 / 298.257222101, 1.0 / 298.257223563}; | ||||
|  | ||||
|     double lambda = atan2(Y, X); | ||||
|     double ex2 = (2.0 - f[elipsoid_selection]) * f[elipsoid_selection] / ((1.0 - f[elipsoid_selection]) * (1.0 - f[elipsoid_selection])); | ||||
|   | ||||
| @@ -55,8 +55,8 @@ | ||||
| #include <boost/date_time/time_zone_base.hpp> | ||||
| #include <glog/logging.h> | ||||
| #include <algorithm>  // for min and max | ||||
| #include <array> | ||||
| #include <cmath>  // for floor | ||||
| #include <cstring>    // for memcpy | ||||
| #include <exception> | ||||
| #include <iostream>  // for cout | ||||
| #include <iterator> | ||||
| @@ -267,51 +267,59 @@ Rinex_Printer::~Rinex_Printer() | ||||
|             std::cerr << e.what() << '\n'; | ||||
|         } | ||||
|     // If nothing written, erase the files. | ||||
|  | ||||
|     if (posn == 0) | ||||
|         { | ||||
|             if (remove(navfilename.c_str()) != 0) | ||||
|             errorlib::error_code ec; | ||||
|             if (!fs::remove(fs::path(navfilename), ec)) | ||||
|                 { | ||||
|                     LOG(INFO) << "Error deleting temporary file"; | ||||
|                 } | ||||
|         } | ||||
|     if (poso == 0) | ||||
|         { | ||||
|             if (remove(obsfilename.c_str()) != 0) | ||||
|             errorlib::error_code ec; | ||||
|             if (!fs::remove(fs::path(obsfilename), ec)) | ||||
|                 { | ||||
|                     LOG(INFO) << "Error deleting temporary file"; | ||||
|                 } | ||||
|         } | ||||
|     if (poss == 0) | ||||
|         { | ||||
|             if (remove(sbsfilename.c_str()) != 0) | ||||
|             errorlib::error_code ec; | ||||
|             if (!fs::remove(fs::path(sbsfilename), ec)) | ||||
|                 { | ||||
|                     LOG(INFO) << "Error deleting temporary file"; | ||||
|                 } | ||||
|         } | ||||
|     if (posng == 0) | ||||
|         { | ||||
|             if (remove(navGalfilename.c_str()) != 0) | ||||
|             errorlib::error_code ec; | ||||
|             if (!fs::remove(fs::path(navGalfilename), ec)) | ||||
|                 { | ||||
|                     LOG(INFO) << "Error deleting temporary file"; | ||||
|                 } | ||||
|         } | ||||
|     if (posmn == 0) | ||||
|         { | ||||
|             if (remove(navMixfilename.c_str()) != 0) | ||||
|             errorlib::error_code ec; | ||||
|             if (!fs::remove(fs::path(navMixfilename), ec)) | ||||
|                 { | ||||
|                     LOG(INFO) << "Error deleting temporary file"; | ||||
|                 } | ||||
|         } | ||||
|     if (posnr == 0) | ||||
|         { | ||||
|             if (remove(navGlofilename.c_str()) != 0) | ||||
|             errorlib::error_code ec; | ||||
|             if (!fs::remove(fs::path(navGlofilename), ec)) | ||||
|                 { | ||||
|                     LOG(INFO) << "Error deleting temporary file"; | ||||
|                 } | ||||
|         } | ||||
|     if (posnc == 0) | ||||
|         { | ||||
|             if (remove(navBdsfilename.c_str()) != 0) | ||||
|             errorlib::error_code ec; | ||||
|             if (!fs::remove(fs::path(navBdsfilename), ec)) | ||||
|                 { | ||||
|                     LOG(INFO) << "Error deleting temporary file"; | ||||
|                 } | ||||
| @@ -424,11 +432,11 @@ std::string Rinex_Printer::getLocalTime() | ||||
|     line += std::string("GNSS-SDR"); | ||||
|     line += std::string(12, ' '); | ||||
|     std::string username; | ||||
|     char c_username[20] = {0}; | ||||
|     int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1); | ||||
|     std::array<char, 20> c_username{}; | ||||
|     int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1); | ||||
|     if (nGet == 0) | ||||
|         { | ||||
|             username = c_username; | ||||
|             username = c_username.data(); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -2383,11 +2391,11 @@ void Rinex_Printer::rinex_sbs_header(std::fstream& out) | ||||
|     line.clear(); | ||||
|     line += Rinex_Printer::leftJustify("GNSS-SDR", 20); | ||||
|     std::string username; | ||||
|     char c_username[20] = {0}; | ||||
|     int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1); | ||||
|     std::array<char, 20> c_username{}; | ||||
|     int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1); | ||||
|     if (nGet == 0) | ||||
|         { | ||||
|             username = c_username; | ||||
|             username = c_username.data(); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -4827,11 +4835,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Glonass_Gnav_Ephem | ||||
|     // -------- Line OBSERVER / AGENCY | ||||
|     line.clear(); | ||||
|     std::string username; | ||||
|     char c_username[20] = {0}; | ||||
|     int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1); | ||||
|     std::array<char, 20> c_username{}; | ||||
|     int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1); | ||||
|     if (nGet == 0) | ||||
|         { | ||||
|             username = c_username; | ||||
|             username = c_username.data(); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -5153,11 +5161,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_Ephemeris& gps | ||||
|     // -------- Line OBSERVER / AGENCY | ||||
|     line.clear(); | ||||
|     std::string username; | ||||
|     char c_username[20] = {0}; | ||||
|     int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1); | ||||
|     std::array<char, 20> c_username{}; | ||||
|     int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1); | ||||
|     if (nGet == 0) | ||||
|         { | ||||
|             username = c_username; | ||||
|             username = c_username.data(); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -5508,11 +5516,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_CNAV_Ephemeris | ||||
|     // -------- Line OBSERVER / AGENCY | ||||
|     line.clear(); | ||||
|     std::string username; | ||||
|     char c_username[20] = {0}; | ||||
|     int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1); | ||||
|     std::array<char, 20> c_username{}; | ||||
|     int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1); | ||||
|     if (nGet == 0) | ||||
|         { | ||||
|             username = c_username; | ||||
|             username = c_username.data(); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -5817,11 +5825,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Galileo_Ephemeris& | ||||
|     // -------- Line OBSERVER / AGENCY | ||||
|     line.clear(); | ||||
|     std::string username; | ||||
|     char c_username[20] = {0}; | ||||
|     int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1); | ||||
|     std::array<char, 20> c_username{}; | ||||
|     int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1); | ||||
|     if (nGet == 0) | ||||
|         { | ||||
|             username = c_username; | ||||
|             username = c_username.data(); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -6140,11 +6148,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_Ephemeris& eph | ||||
|     // -------- Line OBSERVER / AGENCY | ||||
|     line.clear(); | ||||
|     std::string username; | ||||
|     char c_username[20] = {0}; | ||||
|     int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1); | ||||
|     std::array<char, 20> c_username{}; | ||||
|     int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1); | ||||
|     if (nGet == 0) | ||||
|         { | ||||
|             username = c_username; | ||||
|             username = c_username.data(); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -6397,11 +6405,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_CNAV_Ephemeris | ||||
|     // -------- Line OBSERVER / AGENCY | ||||
|     line.clear(); | ||||
|     std::string username; | ||||
|     char c_username[20] = {0}; | ||||
|     int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1); | ||||
|     std::array<char, 20> c_username{}; | ||||
|     int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1); | ||||
|     if (nGet == 0) | ||||
|         { | ||||
|             username = c_username; | ||||
|             username = c_username.data(); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -6648,11 +6656,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_Ephemeris& eph | ||||
|     // -------- Line OBSERVER / AGENCY | ||||
|     line.clear(); | ||||
|     std::string username; | ||||
|     char c_username[20] = {0}; | ||||
|     int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1); | ||||
|     std::array<char, 20> c_username{}; | ||||
|     int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1); | ||||
|     if (nGet == 0) | ||||
|         { | ||||
|             username = c_username; | ||||
|             username = c_username.data(); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -6929,11 +6937,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_Ephemeris& gps | ||||
|     // -------- Line OBSERVER / AGENCY | ||||
|     line.clear(); | ||||
|     std::string username; | ||||
|     char c_username[20] = {0}; | ||||
|     int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1); | ||||
|     std::array<char, 20> c_username{}; | ||||
|     int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1); | ||||
|     if (nGet == 0) | ||||
|         { | ||||
|             username = c_username; | ||||
|             username = c_username.data(); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -7275,11 +7283,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_CNAV_Ephemeris | ||||
|     // -------- Line OBSERVER / AGENCY | ||||
|     line.clear(); | ||||
|     std::string username; | ||||
|     char c_username[20] = {0}; | ||||
|     int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1); | ||||
|     std::array<char, 20> c_username{}; | ||||
|     int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1); | ||||
|     if (nGet == 0) | ||||
|         { | ||||
|             username = c_username; | ||||
|             username = c_username.data(); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -7593,11 +7601,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Galileo_Ephemeris& | ||||
|     // -------- Line OBSERVER / AGENCY | ||||
|     line.clear(); | ||||
|     std::string username; | ||||
|     char c_username[20] = {0}; | ||||
|     int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1); | ||||
|     std::array<char, 20> c_username{}; | ||||
|     int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1); | ||||
|     if (nGet == 0) | ||||
|         { | ||||
|             username = c_username; | ||||
|             username = c_username.data(); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -7860,11 +7868,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_Ephemeris& gps | ||||
|     // -------- Line OBSERVER / AGENCY | ||||
|     line.clear(); | ||||
|     std::string username; | ||||
|     char c_username[20] = {0}; | ||||
|     int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1); | ||||
|     std::array<char, 20> c_username{}; | ||||
|     int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1); | ||||
|     if (nGet == 0) | ||||
|         { | ||||
|             username = c_username; | ||||
|             username = c_username.data(); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -8142,11 +8150,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Beidou_Dnav_Epheme | ||||
|     // -------- Line OBSERVER / AGENCY | ||||
|     line.clear(); | ||||
|     std::string username; | ||||
|     char c_username[20] = {0}; | ||||
|     int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1); | ||||
|     std::array<char, 20> c_username{}; | ||||
|     int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1); | ||||
|     if (nGet == 0) | ||||
|         { | ||||
|             username = c_username; | ||||
|             username = c_username.data(); | ||||
|         } | ||||
|     else | ||||
|         { | ||||
| @@ -10171,10 +10179,10 @@ void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& eph, c | ||||
|             if ((total_mmap.count(mmap_iter->second.PRN)) == 1 && (mmap_iter->second.PRN != 0)) | ||||
|                 { | ||||
|                     Gnss_Synchro gs = Gnss_Synchro(); | ||||
|                     std::string sys = "G"; | ||||
|                     gs.System = *sys.c_str(); | ||||
|                     std::string sig = "2S"; | ||||
|                     std::memcpy(static_cast<void*>(gs.Signal), sig.c_str(), 3); | ||||
|                     gs.System = 'G'; | ||||
|                     gs.Signal[0] = '2'; | ||||
|                     gs.Signal[1] = 'S'; | ||||
|                     gs.Signal[2] = '\0'; | ||||
|                     gs.PRN = mmap_iter->second.PRN; | ||||
|                     total_mmap.insert(std::pair<uint32_t, Gnss_Synchro>(mmap_iter->second.PRN, gs)); | ||||
|                 } | ||||
| @@ -10401,10 +10409,10 @@ void Rinex_Printer::log_rinex_obs(std::fstream& out, const Galileo_Ephemeris& ep | ||||
|                             if (found_1B != std::string::npos) | ||||
|                                 { | ||||
|                                     Gnss_Synchro gs = Gnss_Synchro(); | ||||
|                                     std::string sys = "E"; | ||||
|                                     gs.System = *sys.c_str(); | ||||
|                                     std::string sig = "1B"; | ||||
|                                     std::memcpy(static_cast<void*>(gs.Signal), sig.c_str(), 3); | ||||
|                                     gs.System = 'E'; | ||||
|                                     gs.Signal[0] = '1'; | ||||
|                                     gs.Signal[1] = 'B'; | ||||
|                                     gs.Signal[2] = '\0'; | ||||
|                                     gs.PRN = prn_; | ||||
|                                     total_map.insert(std::pair<uint32_t, Gnss_Synchro>(prn_, gs)); | ||||
|                                 } | ||||
| @@ -10426,20 +10434,20 @@ void Rinex_Printer::log_rinex_obs(std::fstream& out, const Galileo_Ephemeris& ep | ||||
|                             if (found_1B != std::string::npos) | ||||
|                                 { | ||||
|                                     Gnss_Synchro gs = Gnss_Synchro(); | ||||
|                                     std::string sys = "E"; | ||||
|                                     gs.System = *sys.c_str(); | ||||
|                                     std::string sig = "1B"; | ||||
|                                     std::memcpy(static_cast<void*>(gs.Signal), sig.c_str(), 3); | ||||
|                                     gs.System = 'E'; | ||||
|                                     gs.Signal[0] = '1'; | ||||
|                                     gs.Signal[1] = 'B'; | ||||
|                                     gs.Signal[2] = '\0'; | ||||
|                                     gs.PRN = prn_; | ||||
|                                     total_map.insert(std::pair<uint32_t, Gnss_Synchro>(prn_, gs)); | ||||
|                                 } | ||||
|                             if (found_E5a != std::string::npos) | ||||
|                                 { | ||||
|                                     Gnss_Synchro gs = Gnss_Synchro(); | ||||
|                                     std::string sys = "E"; | ||||
|                                     gs.System = *sys.c_str(); | ||||
|                                     std::string sig = "5X"; | ||||
|                                     std::memcpy(static_cast<void*>(gs.Signal), sig.c_str(), 3); | ||||
|                                     gs.System = 'E'; | ||||
|                                     gs.Signal[0] = '5'; | ||||
|                                     gs.Signal[1] = 'X'; | ||||
|                                     gs.Signal[2] = '\0'; | ||||
|                                     gs.PRN = prn_; | ||||
|                                     total_map.insert(std::pair<uint32_t, Gnss_Synchro>(prn_, gs)); | ||||
|                                 } | ||||
| @@ -10452,10 +10460,10 @@ void Rinex_Printer::log_rinex_obs(std::fstream& out, const Galileo_Ephemeris& ep | ||||
|                                     if ((total_map.count(prn_)) == 1) | ||||
|                                         { | ||||
|                                             Gnss_Synchro gs = Gnss_Synchro(); | ||||
|                                             std::string sys = "E"; | ||||
|                                             gs.System = *sys.c_str(); | ||||
|                                             std::string sig = "5X"; | ||||
|                                             std::memcpy(static_cast<void*>(gs.Signal), sig.c_str(), 3); | ||||
|                                             gs.System = 'E'; | ||||
|                                             gs.Signal[0] = '5'; | ||||
|                                             gs.Signal[1] = 'X'; | ||||
|                                             gs.Signal[2] = '\0'; | ||||
|                                             gs.PRN = prn_; | ||||
|                                             total_map.insert(std::pair<uint32_t, Gnss_Synchro>(prn_, gs)); | ||||
|                                         } | ||||
| @@ -11521,10 +11529,10 @@ void Rinex_Printer::log_rinex_obs(std::fstream& out, const Beidou_Dnav_Ephemeris | ||||
|                             if (found_B1 != std::string::npos) | ||||
|                                 { | ||||
|                                     Gnss_Synchro gs = Gnss_Synchro(); | ||||
|                                     std::string sys = "C"; | ||||
|                                     gs.System = *sys.c_str(); | ||||
|                                     std::string sig = "B1"; | ||||
|                                     std::memcpy(static_cast<void*>(gs.Signal), sig.c_str(), 3); | ||||
|                                     gs.System = 'C'; | ||||
|                                     gs.Signal[0] = 'B'; | ||||
|                                     gs.Signal[1] = '1'; | ||||
|                                     gs.Signal[2] = '\0'; | ||||
|                                     gs.PRN = prn_; | ||||
|                                     total_map.insert(std::pair<uint32_t, Gnss_Synchro>(prn_, gs)); | ||||
|                                 } | ||||
| @@ -11603,7 +11611,7 @@ void Rinex_Printer::to_date_time(int32_t gps_week, int32_t gps_tow, int& year, i | ||||
| { | ||||
|     // represents GPS time (week, TOW) in the date time format of the Gregorian calendar. | ||||
|     // -> Leap years are considered, but leap seconds are not. | ||||
|     int32_t days_per_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; | ||||
|     std::array<int32_t, 12> days_per_month{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; | ||||
|  | ||||
|     // seconds in a not leap year | ||||
|     const int32_t secs_per_day = 24 * 60 * 60; | ||||
|   | ||||
| @@ -40,7 +40,6 @@ | ||||
| #include "gps_ephemeris.h" | ||||
| #include "rtcm.h" | ||||
| #include <glog/logging.h> | ||||
| #include <cstdio>     // for remove | ||||
| #include <ctime>      // for tm | ||||
| #include <exception>  // for exception | ||||
| #include <fcntl.h>    // for O_RDWR | ||||
| @@ -221,7 +220,8 @@ Rtcm_Printer::~Rtcm_Printer() | ||||
|                 } | ||||
|             if (pos == 0) | ||||
|                 { | ||||
|                     if (remove(rtcm_filename.c_str()) != 0) | ||||
|                     errorlib::error_code ec; | ||||
|                     if (!fs::remove(fs::path(rtcm_filename), ec)) | ||||
|                         { | ||||
|                             LOG(INFO) << "Error deleting temporary RTCM file"; | ||||
|                         } | ||||
|   | ||||
| @@ -67,6 +67,25 @@ | ||||
| #include <utility> | ||||
| #include <vector> | ||||
|  | ||||
| #if HAS_STD_FILESYSTEM | ||||
| #include <system_error> | ||||
| namespace errorlib = std; | ||||
| #if HAS_STD_FILESYSTEM_EXPERIMENTAL | ||||
| #include <experimental/filesystem> | ||||
| namespace fs = std::experimental::filesystem; | ||||
| #else | ||||
| #include <filesystem> | ||||
| namespace fs = std::filesystem; | ||||
| #endif | ||||
| #else | ||||
| #include <boost/filesystem/operations.hpp>   // for create_directories, exists | ||||
| #include <boost/filesystem/path.hpp>         // for path, operator<< | ||||
| #include <boost/filesystem/path_traits.hpp>  // for filesystem | ||||
| #include <boost/system/error_code.hpp>       // for error_code | ||||
| namespace fs = boost::filesystem; | ||||
| namespace errorlib = boost::system; | ||||
| #endif | ||||
|  | ||||
|  | ||||
| Rtklib_Solver::Rtklib_Solver(int nchannels, std::string dump_filename, bool flag_dump_to_file, bool flag_dump_to_mat, const rtk_t &rtk) | ||||
| { | ||||
| @@ -218,116 +237,116 @@ bool Rtklib_Solver::save_matfile() | ||||
|     matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73); | ||||
|     if (reinterpret_cast<int64_t *>(matfp) != nullptr) | ||||
|         { | ||||
|             size_t dims[2] = {1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("TOW_at_current_symbol_ms", MAT_C_UINT32, MAT_T_UINT32, 2, dims, TOW_at_current_symbol_ms.data(), 0); | ||||
|             std::array<size_t, 2> dims{1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("TOW_at_current_symbol_ms", MAT_C_UINT32, MAT_T_UINT32, 2, dims.data(), TOW_at_current_symbol_ms.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("week", MAT_C_UINT32, MAT_T_UINT32, 2, dims, week.data(), 0); | ||||
|             matvar = Mat_VarCreate("week", MAT_C_UINT32, MAT_T_UINT32, 2, dims.data(), week.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("RX_time", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, RX_time.data(), 0); | ||||
|             matvar = Mat_VarCreate("RX_time", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), RX_time.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("user_clk_offset", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, user_clk_offset.data(), 0); | ||||
|             matvar = Mat_VarCreate("user_clk_offset", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), user_clk_offset.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("pos_x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, pos_x.data(), 0); | ||||
|             matvar = Mat_VarCreate("pos_x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), pos_x.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("pos_y", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, pos_y.data(), 0); | ||||
|             matvar = Mat_VarCreate("pos_y", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), pos_y.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("pos_z", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, pos_z.data(), 0); | ||||
|             matvar = Mat_VarCreate("pos_z", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), pos_z.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("vel_x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, vel_x.data(), 0); | ||||
|             matvar = Mat_VarCreate("vel_x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), vel_x.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("vel_y", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, vel_y.data(), 0); | ||||
|             matvar = Mat_VarCreate("vel_y", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), vel_y.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("vel_z", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, vel_z.data(), 0); | ||||
|             matvar = Mat_VarCreate("vel_z", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), vel_z.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("cov_xx", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, cov_xx.data(), 0); | ||||
|             matvar = Mat_VarCreate("cov_xx", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), cov_xx.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("cov_yy", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, cov_yy.data(), 0); | ||||
|             matvar = Mat_VarCreate("cov_yy", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), cov_yy.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("cov_zz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, cov_zz.data(), 0); | ||||
|             matvar = Mat_VarCreate("cov_zz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), cov_zz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("cov_xy", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, cov_xy.data(), 0); | ||||
|             matvar = Mat_VarCreate("cov_xy", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), cov_xy.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("cov_yz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, cov_yz.data(), 0); | ||||
|             matvar = Mat_VarCreate("cov_yz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), cov_yz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("cov_zx", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, cov_zx.data(), 0); | ||||
|             matvar = Mat_VarCreate("cov_zx", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), cov_zx.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("latitude", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, latitude.data(), 0); | ||||
|             matvar = Mat_VarCreate("latitude", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), latitude.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("longitude", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, longitude.data(), 0); | ||||
|             matvar = Mat_VarCreate("longitude", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), longitude.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("height", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, height.data(), 0); | ||||
|             matvar = Mat_VarCreate("height", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), height.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("valid_sats", MAT_C_UINT8, MAT_T_UINT8, 2, dims, valid_sats.data(), 0); | ||||
|             matvar = Mat_VarCreate("valid_sats", MAT_C_UINT8, MAT_T_UINT8, 2, dims.data(), valid_sats.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("solution_status", MAT_C_UINT8, MAT_T_UINT8, 2, dims, solution_status.data(), 0); | ||||
|             matvar = Mat_VarCreate("solution_status", MAT_C_UINT8, MAT_T_UINT8, 2, dims.data(), solution_status.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("solution_type", MAT_C_UINT8, MAT_T_UINT8, 2, dims, solution_type.data(), 0); | ||||
|             matvar = Mat_VarCreate("solution_type", MAT_C_UINT8, MAT_T_UINT8, 2, dims.data(), solution_type.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("AR_ratio_factor", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, AR_ratio_factor.data(), 0); | ||||
|             matvar = Mat_VarCreate("AR_ratio_factor", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), AR_ratio_factor.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("AR_ratio_threshold", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, AR_ratio_threshold.data(), 0); | ||||
|             matvar = Mat_VarCreate("AR_ratio_threshold", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), AR_ratio_threshold.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("gdop", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, gdop.data(), 0); | ||||
|             matvar = Mat_VarCreate("gdop", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), gdop.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("pdop", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, pdop.data(), 0); | ||||
|             matvar = Mat_VarCreate("pdop", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), pdop.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("hdop", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, hdop.data(), 0); | ||||
|             matvar = Mat_VarCreate("hdop", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), hdop.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("vdop", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, vdop.data(), 0); | ||||
|             matvar = Mat_VarCreate("vdop", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), vdop.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|         } | ||||
| @@ -341,6 +360,7 @@ Rtklib_Solver::~Rtklib_Solver() | ||||
| { | ||||
|     if (d_dump_file.is_open() == true) | ||||
|         { | ||||
|             auto pos = d_dump_file.tellp(); | ||||
|             try | ||||
|                 { | ||||
|                     d_dump_file.close(); | ||||
| @@ -349,6 +369,15 @@ Rtklib_Solver::~Rtklib_Solver() | ||||
|                 { | ||||
|                     LOG(WARNING) << "Exception in destructor closing the RTKLIB dump file " << ex.what(); | ||||
|                 } | ||||
|             if (pos == 0) | ||||
|                 { | ||||
|                     errorlib::error_code ec; | ||||
|                     if (!fs::remove(fs::path(d_dump_filename), ec)) | ||||
|                         { | ||||
|                             std::cerr << "Problem removing temporary file " << d_dump_filename << '\n'; | ||||
|                         } | ||||
|                     d_flag_dump_mat_enabled = false; | ||||
|                 } | ||||
|         } | ||||
|     if (d_flag_dump_mat_enabled) | ||||
|         { | ||||
| @@ -963,11 +992,11 @@ bool Rtklib_Solver::get_PVT(const std::map<int, Gnss_Synchro> &gnss_observables_ | ||||
|  | ||||
|                     // compute Ground speed and COG | ||||
|                     double ground_speed_ms = 0.0; | ||||
|                     double pos[3]; | ||||
|                     double enuv[3]; | ||||
|                     ecef2pos(pvt_sol.rr, pos); | ||||
|                     ecef2enu(pos, &pvt_sol.rr[3], enuv); | ||||
|                     this->set_speed_over_ground(norm_rtk(enuv, 2)); | ||||
|                     std::array<double, 3> pos{}; | ||||
|                     std::array<double, 3> enuv{}; | ||||
|                     ecef2pos(pvt_sol.rr, pos.data()); | ||||
|                     ecef2enu(pos.data(), &pvt_sol.rr[3], enuv.data()); | ||||
|                     this->set_speed_over_ground(norm_rtk(enuv.data(), 2)); | ||||
|                     double new_cog; | ||||
|                     if (ground_speed_ms >= 1.0) | ||||
|                         { | ||||
|   | ||||
| @@ -203,7 +203,6 @@ signed int GalileoE1Pcps8msAmbiguousAcquisition::mag() | ||||
| void GalileoE1Pcps8msAmbiguousAcquisition::init() | ||||
| { | ||||
|     acquisition_cc_->init(); | ||||
|     //set_local_code(); | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -215,8 +214,10 @@ void GalileoE1Pcps8msAmbiguousAcquisition::set_local_code() | ||||
|                 "Acquisition" + std::to_string(channel_) + ".cboc", false); | ||||
|  | ||||
|             std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]}; | ||||
|             std::array<char, 3> Signal_; | ||||
|             std::memcpy(Signal_.data(), gnss_synchro_->Signal, 3); | ||||
|             std::array<char, 3> Signal_{}; | ||||
|             Signal_[0] = gnss_synchro_->Signal[0]; | ||||
|             Signal_[1] = gnss_synchro_->Signal[1]; | ||||
|             Signal_[2] = '\0'; | ||||
|  | ||||
|             galileo_e1_code_gen_complex_sampled(gsl::span<std::complex<float>>(code, code_length_), Signal_, | ||||
|                 cboc, gnss_synchro_->PRN, fs_in_, 0, false); | ||||
|   | ||||
| @@ -232,7 +232,6 @@ signed int GalileoE1PcpsAmbiguousAcquisition::mag() | ||||
| void GalileoE1PcpsAmbiguousAcquisition::init() | ||||
| { | ||||
|     acquisition_->init(); | ||||
|     //set_local_code(); | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -261,8 +260,10 @@ void GalileoE1PcpsAmbiguousAcquisition::set_local_code() | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             std::array<char, 3> Signal_; | ||||
|             std::memcpy(Signal_.data(), gnss_synchro_->Signal, 3); | ||||
|             std::array<char, 3> Signal_{}; | ||||
|             Signal_[0] = gnss_synchro_->Signal[0]; | ||||
|             Signal_[1] = gnss_synchro_->Signal[1]; | ||||
|             Signal_[2] = '\0'; | ||||
|             if (acq_parameters_.use_automatic_resampler) | ||||
|                 { | ||||
|                     galileo_e1_code_gen_complex_sampled(code_span, Signal_, | ||||
|   | ||||
| @@ -237,7 +237,6 @@ GalileoE1PcpsQuickSyncAmbiguousAcquisition::mag() | ||||
| void GalileoE1PcpsQuickSyncAmbiguousAcquisition::init() | ||||
| { | ||||
|     acquisition_cc_->init(); | ||||
|     //set_local_code(); | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -249,8 +248,10 @@ void GalileoE1PcpsQuickSyncAmbiguousAcquisition::set_local_code() | ||||
|                 "Acquisition" + std::to_string(channel_) + ".cboc", false); | ||||
|  | ||||
|             std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]}; | ||||
|             std::array<char, 3> Signal_; | ||||
|             std::memcpy(Signal_.data(), gnss_synchro_->Signal, 3); | ||||
|             std::array<char, 3> Signal_{}; | ||||
|             Signal_[0] = gnss_synchro_->Signal[0]; | ||||
|             Signal_[1] = gnss_synchro_->Signal[1]; | ||||
|             Signal_[2] = '\0'; | ||||
|  | ||||
|             galileo_e1_code_gen_complex_sampled(gsl::span<std::complex<float>>(code.get(), code_length_), Signal_, | ||||
|                 cboc, gnss_synchro_->PRN, fs_in_, 0, false); | ||||
|   | ||||
| @@ -207,7 +207,6 @@ signed int GalileoE1PcpsTongAmbiguousAcquisition::mag() | ||||
| void GalileoE1PcpsTongAmbiguousAcquisition::init() | ||||
| { | ||||
|     acquisition_cc_->init(); | ||||
|     //set_local_code(); | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -219,8 +218,10 @@ void GalileoE1PcpsTongAmbiguousAcquisition::set_local_code() | ||||
|                 "Acquisition" + std::to_string(channel_) + ".cboc", false); | ||||
|  | ||||
|             std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]}; | ||||
|             std::array<char, 3> Signal_; | ||||
|             std::memcpy(Signal_.data(), gnss_synchro_->Signal, 3); | ||||
|             std::array<char, 3> Signal_{}; | ||||
|             Signal_[0] = gnss_synchro_->Signal[0]; | ||||
|             Signal_[1] = gnss_synchro_->Signal[1]; | ||||
|             Signal_[2] = '\0'; | ||||
|             galileo_e1_code_gen_complex_sampled(gsl::span<std::complex<float>>(code.get(), code_length_), Signal_, | ||||
|                 cboc, gnss_synchro_->PRN, fs_in_, 0, false); | ||||
|  | ||||
|   | ||||
| @@ -56,6 +56,7 @@ | ||||
| #include <volk/volk.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <algorithm>  // for fill_n, min | ||||
| #include <array> | ||||
| #include <cmath>    // for floor, fmod, rint, ceil | ||||
| #include <cstring>  // for memcpy | ||||
| #include <iostream> | ||||
| @@ -455,56 +456,56 @@ void pcps_acquisition::dump_results(int32_t effective_fft_size) | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             size_t dims[2] = {static_cast<size_t>(effective_fft_size), static_cast<size_t>(d_num_doppler_bins)}; | ||||
|             matvar_t* matvar = Mat_VarCreate("acq_grid", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, grid_.memptr(), 0); | ||||
|             std::array<size_t, 2> dims{static_cast<size_t>(effective_fft_size), static_cast<size_t>(d_num_doppler_bins)}; | ||||
|             matvar_t* matvar = Mat_VarCreate("acq_grid", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), grid_.memptr(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             dims[0] = static_cast<size_t>(1); | ||||
|             dims[1] = static_cast<size_t>(1); | ||||
|             matvar = Mat_VarCreate("doppler_max", MAT_C_INT32, MAT_T_INT32, 1, dims, &acq_parameters.doppler_max, 0); | ||||
|             matvar = Mat_VarCreate("doppler_max", MAT_C_INT32, MAT_T_INT32, 1, dims.data(), &acq_parameters.doppler_max, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("doppler_step", MAT_C_INT32, MAT_T_INT32, 1, dims, &d_doppler_step, 0); | ||||
|             matvar = Mat_VarCreate("doppler_step", MAT_C_INT32, MAT_T_INT32, 1, dims.data(), &d_doppler_step, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("d_positive_acq", MAT_C_INT32, MAT_T_INT32, 1, dims, &d_positive_acq, 0); | ||||
|             matvar = Mat_VarCreate("d_positive_acq", MAT_C_INT32, MAT_T_INT32, 1, dims.data(), &d_positive_acq, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             auto aux = static_cast<float>(d_gnss_synchro->Acq_doppler_hz); | ||||
|             matvar = Mat_VarCreate("acq_doppler_hz", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims, &aux, 0); | ||||
|             matvar = Mat_VarCreate("acq_doppler_hz", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims.data(), &aux, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             aux = static_cast<float>(d_gnss_synchro->Acq_delay_samples); | ||||
|             matvar = Mat_VarCreate("acq_delay_samples", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims, &aux, 0); | ||||
|             matvar = Mat_VarCreate("acq_delay_samples", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims.data(), &aux, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("test_statistic", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims, &d_test_statistics, 0); | ||||
|             matvar = Mat_VarCreate("test_statistic", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims.data(), &d_test_statistics, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("threshold", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims, &d_threshold, 0); | ||||
|             matvar = Mat_VarCreate("threshold", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims.data(), &d_threshold, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("input_power", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims, &d_input_power, 0); | ||||
|             matvar = Mat_VarCreate("input_power", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims.data(), &d_input_power, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("sample_counter", MAT_C_UINT64, MAT_T_UINT64, 1, dims, &d_sample_counter, 0); | ||||
|             matvar = Mat_VarCreate("sample_counter", MAT_C_UINT64, MAT_T_UINT64, 1, dims.data(), &d_sample_counter, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 1, dims, &d_gnss_synchro->PRN, 0); | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 1, dims.data(), &d_gnss_synchro->PRN, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("num_dwells", MAT_C_INT32, MAT_T_INT32, 1, dims, &d_num_noncoherent_integrations_counter, 0); | ||||
|             matvar = Mat_VarCreate("num_dwells", MAT_C_INT32, MAT_T_INT32, 1, dims.data(), &d_num_noncoherent_integrations_counter, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
| @@ -512,18 +513,18 @@ void pcps_acquisition::dump_results(int32_t effective_fft_size) | ||||
|                 { | ||||
|                     dims[0] = static_cast<size_t>(effective_fft_size); | ||||
|                     dims[1] = static_cast<size_t>(d_num_doppler_bins_step2); | ||||
|                     matvar = Mat_VarCreate("acq_grid_narrow", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, narrow_grid_.memptr(), 0); | ||||
|                     matvar = Mat_VarCreate("acq_grid_narrow", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), narrow_grid_.memptr(), 0); | ||||
|                     Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|                     Mat_VarFree(matvar); | ||||
|  | ||||
|                     dims[0] = static_cast<size_t>(1); | ||||
|                     dims[1] = static_cast<size_t>(1); | ||||
|                     matvar = Mat_VarCreate("doppler_step_narrow", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims, &acq_parameters.doppler_step2, 0); | ||||
|                     matvar = Mat_VarCreate("doppler_step_narrow", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims.data(), &acq_parameters.doppler_step2, 0); | ||||
|                     Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|                     Mat_VarFree(matvar); | ||||
|  | ||||
|                     aux = d_doppler_center_step_two - static_cast<float>(floor(d_num_doppler_bins_step2 / 2.0)) * acq_parameters.doppler_step2; | ||||
|                     matvar = Mat_VarCreate("doppler_grid_narrow_min", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims, &aux, 0); | ||||
|                     matvar = Mat_VarCreate("doppler_grid_narrow_min", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims.data(), &aux, 0); | ||||
|                     Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|                     Mat_VarFree(matvar); | ||||
|                 } | ||||
|   | ||||
| @@ -49,6 +49,7 @@ | ||||
| #include <volk/volk.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <algorithm>  // std::rotate, std::fill_n | ||||
| #include <array> | ||||
| #include <sstream> | ||||
|  | ||||
| #if HAS_STD_FILESYSTEM | ||||
| @@ -673,52 +674,52 @@ void pcps_acquisition_fine_doppler_cc::dump_results(int effective_fft_size) | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             size_t dims[2] = {static_cast<size_t>(effective_fft_size), static_cast<size_t>(d_num_doppler_points)}; | ||||
|             matvar_t *matvar = Mat_VarCreate("acq_grid", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, grid_.memptr(), 0); | ||||
|             std::array<size_t, 2> dims{static_cast<size_t>(effective_fft_size), static_cast<size_t>(d_num_doppler_points)}; | ||||
|             matvar_t *matvar = Mat_VarCreate("acq_grid", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), grid_.memptr(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             dims[0] = static_cast<size_t>(1); | ||||
|             dims[1] = static_cast<size_t>(1); | ||||
|             matvar = Mat_VarCreate("doppler_max", MAT_C_INT32, MAT_T_INT32, 1, dims, &d_config_doppler_max, 0); | ||||
|             matvar = Mat_VarCreate("doppler_max", MAT_C_INT32, MAT_T_INT32, 1, dims.data(), &d_config_doppler_max, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("doppler_step", MAT_C_INT32, MAT_T_INT32, 1, dims, &d_doppler_step, 0); | ||||
|             matvar = Mat_VarCreate("doppler_step", MAT_C_INT32, MAT_T_INT32, 1, dims.data(), &d_doppler_step, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("d_positive_acq", MAT_C_INT32, MAT_T_INT32, 1, dims, &d_positive_acq, 0); | ||||
|             matvar = Mat_VarCreate("d_positive_acq", MAT_C_INT32, MAT_T_INT32, 1, dims.data(), &d_positive_acq, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             auto aux = static_cast<float>(d_gnss_synchro->Acq_doppler_hz); | ||||
|             matvar = Mat_VarCreate("acq_doppler_hz", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims, &aux, 0); | ||||
|             matvar = Mat_VarCreate("acq_doppler_hz", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims.data(), &aux, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             aux = static_cast<float>(d_gnss_synchro->Acq_delay_samples); | ||||
|             matvar = Mat_VarCreate("acq_delay_samples", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims, &aux, 0); | ||||
|             matvar = Mat_VarCreate("acq_delay_samples", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims.data(), &aux, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("test_statistic", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims, &d_test_statistics, 0); | ||||
|             matvar = Mat_VarCreate("test_statistic", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims.data(), &d_test_statistics, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("threshold", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims, &d_threshold, 0); | ||||
|             matvar = Mat_VarCreate("threshold", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims.data(), &d_threshold, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|             aux = 0.0; | ||||
|             matvar = Mat_VarCreate("input_power", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims, &aux, 0); | ||||
|             matvar = Mat_VarCreate("input_power", MAT_C_SINGLE, MAT_T_SINGLE, 1, dims.data(), &aux, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("sample_counter", MAT_C_UINT64, MAT_T_UINT64, 1, dims, &d_sample_counter, 0); | ||||
|             matvar = Mat_VarCreate("sample_counter", MAT_C_UINT64, MAT_T_UINT64, 1, dims.data(), &d_sample_counter, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 1, dims, &d_gnss_synchro->PRN, 0); | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 1, dims.data(), &d_gnss_synchro->PRN, 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|   | ||||
| @@ -34,6 +34,7 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <volk/volk.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cmath> | ||||
| #include <exception> | ||||
| #include <sstream> | ||||
| @@ -311,7 +312,7 @@ int pcps_quicksync_acquisition_cc::general_work(int noutput_items, | ||||
|  | ||||
|         case 1: | ||||
|             { | ||||
|                 /* initialize acquisition  implementing the QuickSync algorithm*/ | ||||
|                 // initialize acquisition  implementing the QuickSync algorithm | ||||
|                 //DLOG(INFO) << "START CASE 1"; | ||||
|                 int32_t doppler; | ||||
|                 uint32_t indext = 0; | ||||
| @@ -321,16 +322,16 @@ int pcps_quicksync_acquisition_cc::general_work(int noutput_items, | ||||
|                 auto* in_temp = static_cast<gr_complex*>(volk_gnsssdr_malloc(d_samples_per_code * d_folding_factor * sizeof(gr_complex), volk_gnsssdr_get_alignment())); | ||||
|                 auto* in_temp_folded = static_cast<gr_complex*>(volk_gnsssdr_malloc(d_fft_size * sizeof(gr_complex), volk_gnsssdr_get_alignment())); | ||||
|  | ||||
|                 /*Create a signal to store a signal of size 1ms, to perform correlation | ||||
|             in time. No folding on this data is required*/ | ||||
|                 // Create a signal to store a signal of size 1ms, to perform correlation | ||||
|                 // in time. No folding on this data is required | ||||
|                 auto* in_1code = static_cast<gr_complex*>(volk_gnsssdr_malloc(d_samples_per_code * sizeof(gr_complex), volk_gnsssdr_get_alignment())); | ||||
|  | ||||
|                 /*Stores the values of the correlation output between the local code | ||||
|             and the signal with doppler shift corrected */ | ||||
|                 // Stores the values of the correlation output between the local code | ||||
|                 // and the signal with doppler shift corrected | ||||
|                 auto* corr_output = static_cast<gr_complex*>(volk_gnsssdr_malloc(d_samples_per_code * sizeof(gr_complex), volk_gnsssdr_get_alignment())); | ||||
|  | ||||
|                 /*Stores a copy of the folded version of the signal.This is used for | ||||
|             the FFT operations in future steps of execution*/ | ||||
|                 // Stores a copy of the folded version of the signal.This is used for | ||||
|                 // the FFT operations in future steps of execution*/ | ||||
|                 // gr_complex in_folded[d_fft_size]; | ||||
|                 float fft_normalization_factor = static_cast<float>(d_fft_size) * static_cast<float>(d_fft_size); | ||||
|  | ||||
| @@ -354,35 +355,34 @@ int pcps_quicksync_acquisition_cc::general_work(int noutput_items, | ||||
|                            << d_samples_per_code * d_folding_factor; | ||||
|  | ||||
|  | ||||
|                 /* 1- Compute the input signal power estimation. This operation is | ||||
|                being performed in a signal of size nxp */ | ||||
|                 // 1- Compute the input signal power estimation. This operation is | ||||
|                 // being performed in a signal of size nxp | ||||
|                 volk_32fc_magnitude_squared_32f(d_magnitude, in, d_samples_per_code * d_folding_factor); | ||||
|                 volk_32f_accumulator_s32f(&d_input_power, d_magnitude, d_samples_per_code * d_folding_factor); | ||||
|                 d_input_power /= static_cast<float>(d_samples_per_code * d_folding_factor); | ||||
|  | ||||
|                 for (uint32_t doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) | ||||
|                     { | ||||
|                         /*Ensure that the signal is going to start with all samples | ||||
|                     at zero. This is done to avoid over acumulation when performing | ||||
|                     the folding process to be stored in d_fft_if->get_inbuf()*/ | ||||
|                         // Ensure that the signal is going to start with all samples | ||||
|                         // at zero. This is done to avoid over acumulation when performing | ||||
|                         // the folding process to be stored in d_fft_if->get_inbuf() | ||||
|                         d_signal_folded = new gr_complex[d_fft_size](); | ||||
|                         memcpy(d_fft_if->get_inbuf(), d_signal_folded, sizeof(gr_complex) * (d_fft_size)); | ||||
|  | ||||
|                         /*Doppler search steps and then multiplication of the incoming | ||||
|                     signal with the doppler wipeoffs to eliminate frequency offset | ||||
|                      */ | ||||
|                         // Doppler search steps and then multiplication of the incoming | ||||
|                         // signal with the doppler wipeoffs to eliminate frequency offset | ||||
|                         doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index; | ||||
|  | ||||
|                         /*Perform multiplication of the incoming signal with the | ||||
|                    complex exponential vector. This removes the frequency doppler | ||||
|                    shift offset*/ | ||||
|                         // Perform multiplication of the incoming signal with the | ||||
|                         // complex exponential vector. This removes the frequency doppler | ||||
|                         // shift offset | ||||
|                         volk_32fc_x2_multiply_32fc(in_temp, in, | ||||
|                             d_grid_doppler_wipeoffs[doppler_index], | ||||
|                             d_samples_per_code * d_folding_factor); | ||||
|  | ||||
|                         /*Perform folding of the carrier wiped-off incoming signal. Since | ||||
|                    superlinear method is being used the folding factor in the | ||||
|                    incoming raw data signal is of d_folding_factor^2*/ | ||||
|                         // Perform folding of the carrier wiped-off incoming signal. Since | ||||
|                         // superlinear method is being used the folding factor in the | ||||
|                         // incoming raw data signal is of d_folding_factor^2 | ||||
|                         for (int32_t i = 0; i < static_cast<int32_t>(d_folding_factor * d_folding_factor); i++) | ||||
|                             { | ||||
|                                 std::transform((in_temp + i * d_fft_size), | ||||
| @@ -392,28 +392,26 @@ int pcps_quicksync_acquisition_cc::general_work(int noutput_items, | ||||
|                                     std::plus<gr_complex>()); | ||||
|                             } | ||||
|  | ||||
|                         /* 3- Perform the FFT-based convolution  (parallel time search) | ||||
|                    Compute the FFT of the carrier wiped--off incoming signal*/ | ||||
|                         // 3- Perform the FFT-based convolution  (parallel time search) | ||||
|                         // Compute the FFT of the carrier wiped--off incoming signal | ||||
|                         d_fft_if->execute(); | ||||
|  | ||||
|                         /*Multiply carrier wiped--off, Fourier transformed incoming | ||||
|                     signal with the local FFT'd code reference using SIMD | ||||
|                     operations with VOLK library*/ | ||||
|                         // Multiply carrier wiped--off, Fourier transformed incoming | ||||
|                         // signal with the local FFT'd code reference using SIMD | ||||
|                         // operations with VOLK library | ||||
|                         volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), | ||||
|                             d_fft_if->get_outbuf(), d_fft_codes, d_fft_size); | ||||
|  | ||||
|                         /* compute the inverse FFT of the aliased signal*/ | ||||
|                         // compute the inverse FFT of the aliased signal | ||||
|                         d_ifft->execute(); | ||||
|  | ||||
|                         /* Compute the magnitude and get the maximum value with its | ||||
|                    index position*/ | ||||
|                         // Compute the magnitude and get the maximum value with its | ||||
|                         // index position | ||||
|                         volk_32fc_magnitude_squared_32f(d_magnitude_folded, | ||||
|                             d_ifft->get_outbuf(), d_fft_size); | ||||
|  | ||||
|                         /* Normalize the maximum value to correct the scale factor | ||||
|                    introduced by FFTW*/ | ||||
|                         //volk_32f_s32f_multiply_32f_a(d_magnitude_folded,d_magnitude_folded, | ||||
|                         // (1 / (fft_normalization_factor * fft_normalization_factor)), d_fft_size); | ||||
|                         // Normalize the maximum value to correct the scale factor | ||||
|                         // introduced by FFTW | ||||
|                         volk_gnsssdr_32f_index_max_32u(&indext, d_magnitude_folded, d_fft_size); | ||||
|  | ||||
|                         magt = d_magnitude_folded[indext] / (fft_normalization_factor * fft_normalization_factor); | ||||
| @@ -425,19 +423,18 @@ int pcps_quicksync_acquisition_cc::general_work(int noutput_items, | ||||
|                             { | ||||
|                                 d_mag = magt; | ||||
|  | ||||
|                                 /* In case that d_bit_transition_flag = true, we compare the potentially | ||||
|                             new maximum test statistics (d_mag/d_input_power) with the value in | ||||
|                             d_test_statistics. When the second dwell is being processed, the value | ||||
|                             of d_mag/d_input_power could be lower than d_test_statistics (i.e, | ||||
|                             the maximum test statistics in the previous dwell is greater than | ||||
|                             current d_mag/d_input_power). Note that d_test_statistics is not | ||||
|                             restarted between consecutive dwells in multidwell operation.*/ | ||||
|                                 // In case that d_bit_transition_flag = true, we compare the potentially | ||||
|                                 // new maximum test statistics (d_mag/d_input_power) with the value in | ||||
|                                 // d_test_statistics. When the second dwell is being processed, the value | ||||
|                                 // of d_mag/d_input_power could be lower than d_test_statistics (i.e, | ||||
|                                 // the maximum test statistics in the previous dwell is greater than | ||||
|                                 // current d_mag/d_input_power). Note that d_test_statistics is not | ||||
|                                 // restarted between consecutive dwells in multidwell operation. | ||||
|                                 if (d_test_statistics < (d_mag / d_input_power) || !d_bit_transition_flag) | ||||
|                                     { | ||||
|                                         uint32_t detected_delay_samples_folded = 0; | ||||
|                                         detected_delay_samples_folded = (indext % d_samples_per_code); | ||||
|                                         gr_complex complex_acumulator[100]; | ||||
|                                         //gr_complex complex_acumulator[d_folding_factor]; | ||||
|                                         std::array<gr_complex, 100> complex_acumulator{}; | ||||
|  | ||||
|                                         for (int32_t i = 0; i < static_cast<int32_t>(d_folding_factor); i++) | ||||
|                                             { | ||||
| @@ -446,16 +443,16 @@ int pcps_quicksync_acquisition_cc::general_work(int noutput_items, | ||||
|  | ||||
|                                         for (int32_t i = 0; i < static_cast<int32_t>(d_folding_factor); i++) | ||||
|                                             { | ||||
|                                                 /*Copy a signal of 1 code length into suggested buffer. | ||||
|                                                                       The copied signal must have doppler effect corrected*/ | ||||
|                                                 // Copy a signal of 1 code length into suggested buffer. | ||||
|                                                 // The copied signal must have doppler effect corrected*/ | ||||
|                                                 memcpy(in_1code, &in_temp[d_possible_delay[i]], | ||||
|                                                     sizeof(gr_complex) * (d_samples_per_code)); | ||||
|  | ||||
|                                                 /*Perform multiplication of the unmodified local | ||||
|                                                               generated code with the incoming signal with doppler | ||||
|                                                               effect corrected and accumulates its value. This | ||||
|                                                               is indeed correlation in time for an specific value | ||||
|                                                               of a shift*/ | ||||
|                                                 // Perform multiplication of the unmodified local | ||||
|                                                 // generated code with the incoming signal with doppler | ||||
|                                                 // effect corrected and accumulates its value. This | ||||
|                                                 // is indeed correlation in time for an specific value | ||||
|                                                 // of a shift | ||||
|                                                 volk_32fc_x2_multiply_32fc(corr_output, in_1code, d_code, d_samples_per_code); | ||||
|  | ||||
|                                                 for (int32_t j = 0; j < d_samples_per_code; j++) | ||||
| @@ -463,28 +460,27 @@ int pcps_quicksync_acquisition_cc::general_work(int noutput_items, | ||||
|                                                         complex_acumulator[i] += (corr_output[j]); | ||||
|                                                     } | ||||
|                                             } | ||||
|                                         /*Obtain maximum value of correlation given the possible delay selected */ | ||||
|                                         volk_32fc_magnitude_squared_32f(d_corr_output_f, complex_acumulator, d_folding_factor); | ||||
|                                         // Obtain maximum value of correlation given the possible delay selected | ||||
|                                         volk_32fc_magnitude_squared_32f(d_corr_output_f, complex_acumulator.data(), d_folding_factor); | ||||
|                                         volk_gnsssdr_32f_index_max_32u(&indext, d_corr_output_f, d_folding_factor); | ||||
|  | ||||
|                                         /*Now save the real code phase in the gnss_syncro block for use in other stages*/ | ||||
|                                         // Now save the real code phase in the gnss_syncro block for use in other stages | ||||
|                                         d_gnss_synchro->Acq_delay_samples = static_cast<double>(d_possible_delay[indext]); | ||||
|                                         d_gnss_synchro->Acq_doppler_hz = static_cast<double>(doppler); | ||||
|                                         d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter; | ||||
|                                         d_gnss_synchro->Acq_doppler_step = d_doppler_step; | ||||
|  | ||||
|                                         /* 5- Compute the test statistics and compare to the threshold d_test_statistics = 2 * d_fft_size * d_mag / d_input_power;*/ | ||||
|                                         // 5- Compute the test statistics and compare to the threshold d_test_statistics = 2 * d_fft_size * d_mag / d_input_power; | ||||
|                                         d_test_statistics = d_mag / d_input_power; | ||||
|                                         //delete complex_acumulator; | ||||
|                                     } | ||||
|                             } | ||||
|  | ||||
|                         // Record results to file if required | ||||
|                         if (d_dump) | ||||
|                             { | ||||
|                                 /*Since QuickSYnc performs a folded correlation in frequency by means | ||||
|                             of the FFT, it is essential to also keep the values obtained from the | ||||
|                             possible delay to show how it is maximize*/ | ||||
|                                 // Since QuickSYnc performs a folded correlation in frequency by means | ||||
|                                 // of the FFT, it is essential to also keep the values obtained from the | ||||
|                                 // possible delay to show how it is maximize | ||||
|                                 std::stringstream filename; | ||||
|                                 std::streamsize n = sizeof(float) * (d_fft_size);  // complex file write | ||||
|                                 filename.str(""); | ||||
|   | ||||
| @@ -37,7 +37,6 @@ | ||||
| #include "telemetry_decoder_interface.h" | ||||
| #include "tracking_interface.h" | ||||
| #include <glog/logging.h> | ||||
| #include <cstring>  // for memcpy | ||||
| #include <utility>  // for std::move | ||||
|  | ||||
|  | ||||
| @@ -209,9 +208,9 @@ void Channel::set_signal(const Gnss_Signal& gnss_signal) | ||||
|     std::lock_guard<std::mutex> lk(mx); | ||||
|     gnss_signal_ = gnss_signal; | ||||
|     std::string str_aux = gnss_signal_.get_signal_str(); | ||||
|     const char* str = str_aux.c_str();                              // get a C style null terminated string | ||||
|     std::memcpy(static_cast<void*>(gnss_synchro_.Signal), str, 3);  // copy string into synchro char array: 2 char + null | ||||
|     gnss_synchro_.Signal[2] = 0;                                    // make sure that string length is only two characters | ||||
|     gnss_synchro_.Signal[0] = str_aux[0]; | ||||
|     gnss_synchro_.Signal[1] = str_aux[1]; | ||||
|     gnss_synchro_.Signal[2] = '\0';  // make sure that string length is only two characters | ||||
|     gnss_synchro_.PRN = gnss_signal_.get_satellite().get_PRN(); | ||||
|     gnss_synchro_.System = gnss_signal_.get_satellite().get_system_short().c_str()[0]; | ||||
|     acq_->set_local_code(); | ||||
|   | ||||
| @@ -31,44 +31,40 @@ | ||||
|  */ | ||||
|  | ||||
| #include "beidou_b1i_signal_processing.h" | ||||
| #include <array> | ||||
|  | ||||
| auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); }; | ||||
|  | ||||
| void beidou_b1i_code_gen_int(gsl::span<int32_t> _dest, int32_t _prn, uint32_t _chip_shift) | ||||
| { | ||||
|     const uint32_t _code_length = 2046; | ||||
|     bool G1[_code_length]; | ||||
|     bool G2[_code_length]; | ||||
|     bool G1_register[11] = {false, true, false, true, false, true, false, true, false, true, false}; | ||||
|     bool G2_register[11] = {false, true, false, true, false, true, false, true, false, true, false}; | ||||
|     std::array<bool, _code_length> G1{}; | ||||
|     std::array<bool, _code_length> G2{}; | ||||
|  | ||||
|     std::array<bool, 11> G1_register{false, true, false, true, false, true, false, true, false, true, false}; | ||||
|     std::array<bool, 11> G2_register{false, true, false, true, false, true, false, true, false, true, false}; | ||||
|     bool feedback1, feedback2; | ||||
|     bool aux; | ||||
|     uint32_t lcv, lcv2; | ||||
|     uint32_t delay; | ||||
|     int32_t prn_idx; | ||||
|     /* G2 Delays as defined in GPS-ISD-200D */ | ||||
|     const int32_t delays[33] = {712 /*PRN1*/, 1581, 1414, 1550, 581, 771, 1311, 1043, 1549, 359, 710, 1579, 1548, 1103, 579, 769, 358, 709, 1411, 1547, | ||||
|  | ||||
|     const std::array<int32_t, 33> delays = {712 /*PRN1*/, 1581, 1414, 1550, 581, 771, 1311, 1043, 1549, 359, 710, 1579, 1548, 1103, 579, 769, 358, 709, 1411, 1547, | ||||
|         1102, 578, 357, 1577, 1410, 1546, 1101, 707, 1576, 1409, 1545, 354 /*PRN32*/, | ||||
|         705}; | ||||
|     const int32_t phase1[37] = {1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 8, 8, 8, 9, 9, 10}; | ||||
|     const int32_t phase2[37] = {3, 4, 5, 6, 8, 9, 10, 11, 7, 4, 5, 6, 8, 9, 10, 11, 5, 6, 8, 9, 10, 11, 6, 8, 9, 10, 11, 8, 9, 10, 11, 9, 10, 11, 10, 11, 11}; | ||||
|     const std::array<int32_t, 37> phase1 = {1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 8, 8, 8, 9, 9, 10}; | ||||
|     const std::array<int32_t, 37> phase2 = {3, 4, 5, 6, 8, 9, 10, 11, 7, 4, 5, 6, 8, 9, 10, 11, 5, 6, 8, 9, 10, 11, 6, 8, 9, 10, 11, 8, 9, 10, 11, 9, 10, 11, 10, 11, 11}; | ||||
|  | ||||
|     // compute delay array index for given PRN number | ||||
|     prn_idx = _prn - 1; | ||||
|  | ||||
|     /* A simple error check */ | ||||
|     // A simple error check | ||||
|     if ((prn_idx < 0) || (prn_idx > 32)) | ||||
|         { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|     /*for (lcv = 0; lcv < 11; lcv++) | ||||
|         { | ||||
|             G1_register[lcv] = 1; | ||||
|             G2_register[lcv] = 1; | ||||
|         }*/ | ||||
|  | ||||
|     /* Generate G1 & G2 Register */ | ||||
|     // Generate G1 & G2 Register | ||||
|     for (lcv = 0; lcv < _code_length; lcv++) | ||||
|         { | ||||
|             G1[lcv] = G1_register[0]; | ||||
| @@ -87,12 +83,12 @@ void beidou_b1i_code_gen_int(gsl::span<int32_t> _dest, int32_t _prn, uint32_t _c | ||||
|             G2_register[10] = feedback2; | ||||
|         } | ||||
|  | ||||
|     /* Set the delay */ | ||||
|     // Set the delay | ||||
|     delay = _code_length - delays[prn_idx] * 0;  //********************************** | ||||
|     delay += _chip_shift; | ||||
|     delay %= _code_length; | ||||
|  | ||||
|     /* Generate PRN from G1 and G2 Registers */ | ||||
|     // Generate PRN from G1 and G2 Registers | ||||
|     for (lcv = 0; lcv < _code_length; lcv++) | ||||
|         { | ||||
|             aux = G1[(lcv + _chip_shift) % _code_length] ^ G2[delay]; | ||||
| @@ -106,7 +102,6 @@ void beidou_b1i_code_gen_int(gsl::span<int32_t> _dest, int32_t _prn, uint32_t _c | ||||
|                 } | ||||
|  | ||||
|             delay++; | ||||
|             //std::cout  << _dest[lcv] << " "; | ||||
|             delay %= _code_length; | ||||
|         } | ||||
| } | ||||
| @@ -114,10 +109,10 @@ void beidou_b1i_code_gen_int(gsl::span<int32_t> _dest, int32_t _prn, uint32_t _c | ||||
|  | ||||
| void beidou_b1i_code_gen_float(gsl::span<float> _dest, int32_t _prn, uint32_t _chip_shift) | ||||
| { | ||||
|     uint32_t _code_length = 2046; | ||||
|     int32_t b1i_code_int[_code_length]; | ||||
|     const uint32_t _code_length = 2046; | ||||
|     std::array<int32_t, _code_length> b1i_code_int{}; | ||||
|  | ||||
|     beidou_b1i_code_gen_int(gsl::span<int32_t>(b1i_code_int, _code_length), _prn, _chip_shift); | ||||
|     beidou_b1i_code_gen_int(gsl::span<int32_t>(b1i_code_int.data(), _code_length), _prn, _chip_shift); | ||||
|  | ||||
|     for (uint32_t ii = 0; ii < _code_length; ++ii) | ||||
|         { | ||||
| @@ -128,10 +123,10 @@ void beidou_b1i_code_gen_float(gsl::span<float> _dest, int32_t _prn, uint32_t _c | ||||
|  | ||||
| void beidou_b1i_code_gen_complex(gsl::span<std::complex<float>> _dest, int32_t _prn, uint32_t _chip_shift) | ||||
| { | ||||
|     uint32_t _code_length = 2046; | ||||
|     int32_t b1i_code_int[_code_length]; | ||||
|     const uint32_t _code_length = 2046; | ||||
|     std::array<int32_t, _code_length> b1i_code_int{}; | ||||
|  | ||||
|     beidou_b1i_code_gen_int(gsl::span<int32_t>(b1i_code_int, _code_length), _prn, _chip_shift); | ||||
|     beidou_b1i_code_gen_int(gsl::span<int32_t>(b1i_code_int.data(), _code_length), _prn, _chip_shift); | ||||
|  | ||||
|     for (uint32_t ii = 0; ii < _code_length; ++ii) | ||||
|         { | ||||
| @@ -146,7 +141,7 @@ void beidou_b1i_code_gen_complex(gsl::span<std::complex<float>> _dest, int32_t _ | ||||
| void beidou_b1i_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, uint32_t _prn, int32_t _fs, uint32_t _chip_shift) | ||||
| { | ||||
|     // This function is based on the GNU software GPS for MATLAB in the Kay Borre book | ||||
|     std::complex<float> _code[2046]; | ||||
|     std::array<std::complex<float>, 2046> _code{}; | ||||
|     int32_t _samplesPerCode, _codeValueIndex; | ||||
|     float _ts; | ||||
|     float _tc; | ||||
| @@ -160,6 +155,7 @@ void beidou_b1i_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, u | ||||
|     //--- Find time constants -------------------------------------------------- | ||||
|     _ts = 1.0 / static_cast<float>(_fs);             // Sampling period in sec | ||||
|     _tc = 1.0 / static_cast<float>(_codeFreqBasis);  // C/A chip period in sec | ||||
|  | ||||
|     beidou_b1i_code_gen_complex(_code, _prn, _chip_shift);  // generate C/A code 1 sample per chip | ||||
|  | ||||
|     for (int32_t i = 0; i < _samplesPerCode; i++) | ||||
|   | ||||
| @@ -31,14 +31,15 @@ | ||||
|  */ | ||||
|  | ||||
| #include "beidou_b3i_signal_processing.h" | ||||
| #include <array> | ||||
|  | ||||
| auto auxCeil = [](float x) { return static_cast<int>(static_cast<long>((x) + 1)); }; | ||||
|  | ||||
| void beidou_b3i_code_gen_int(gsl::span<int> _dest, signed int _prn, unsigned int _chip_shift) | ||||
| { | ||||
|     const unsigned int _code_length = 10230; | ||||
|     bool G1[_code_length]; | ||||
|     bool G2[_code_length]; | ||||
|     std::array<bool, _code_length> G1{}; | ||||
|     std::array<bool, _code_length> G2{}; | ||||
|     std::array<bool, 13> G1_register = {{true, true, true, true, true, true, true, true, true, true, true, true, true}}; | ||||
|     std::array<bool, 13> G2_register = {{true, true, true, true, true, true, true, true, true, true, true, true, true}}; | ||||
|     std::array<bool, 13> G1_register_reset = {{false, false, true, true, true, true, true, true, true, true, true, true, true}}; | ||||
| @@ -153,7 +154,7 @@ void beidou_b3i_code_gen_int(gsl::span<int> _dest, signed int _prn, unsigned int | ||||
|     delay += _chip_shift; | ||||
|     delay %= _code_length; | ||||
|  | ||||
|     /* Generate PRN from G1 and G2 Registers */ | ||||
|     // Generate PRN from G1 and G2 Registers | ||||
|     for (lcv = 0; lcv < _code_length; lcv++) | ||||
|         { | ||||
|             aux = (G1[(lcv + _chip_shift) % _code_length] + G2[delay]) & 0x01; | ||||
| @@ -174,8 +175,8 @@ void beidou_b3i_code_gen_int(gsl::span<int> _dest, signed int _prn, unsigned int | ||||
|  | ||||
| void beidou_b3i_code_gen_float(gsl::span<float> _dest, signed int _prn, unsigned int _chip_shift) | ||||
| { | ||||
|     unsigned int _code_length = 10230; | ||||
|     int b3i_code_int[10230]; | ||||
|     const unsigned int _code_length = 10230; | ||||
|     std::array<int, _code_length> b3i_code_int{}; | ||||
|  | ||||
|     beidou_b3i_code_gen_int(b3i_code_int, _prn, _chip_shift); | ||||
|  | ||||
| @@ -188,8 +189,8 @@ void beidou_b3i_code_gen_float(gsl::span<float> _dest, signed int _prn, unsigned | ||||
|  | ||||
| void beidou_b3i_code_gen_complex(gsl::span<std::complex<float>> _dest, signed int _prn, unsigned int _chip_shift) | ||||
| { | ||||
|     unsigned int _code_length = 10230; | ||||
|     int b3i_code_int[10230]; | ||||
|     const unsigned int _code_length = 10230; | ||||
|     std::array<int, _code_length> b3i_code_int{}; | ||||
|  | ||||
|     beidou_b3i_code_gen_int(b3i_code_int, _prn, _chip_shift); | ||||
|  | ||||
| @@ -203,7 +204,7 @@ void beidou_b3i_code_gen_complex(gsl::span<std::complex<float>> _dest, signed in | ||||
| void beidou_b3i_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, unsigned int _prn, int _fs, unsigned int _chip_shift) | ||||
| { | ||||
|     // This function is based on the GNU software GPS for MATLAB in the Kay Borre book | ||||
|     std::complex<float> _code[10230]; | ||||
|     std::array<std::complex<float>, 10230> _code{}; | ||||
|     signed int _samplesPerCode, _codeValueIndex; | ||||
|     float _ts; | ||||
|     float _tc; | ||||
|   | ||||
| @@ -34,6 +34,7 @@ | ||||
| #include "Galileo_E1.h" | ||||
| #include "gnss_signal_processing.h" | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <memory> | ||||
| #include <string> | ||||
|  | ||||
| @@ -110,8 +111,8 @@ void galileo_e1_code_gen_sinboc11_float(gsl::span<float> _dest, const std::array | ||||
| { | ||||
|     std::string _galileo_signal = _Signal.data(); | ||||
|     const auto _codeLength = static_cast<uint32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS); | ||||
|     int32_t primary_code_E1_chips[4092];                            // _codeLength not accepted by Clang | ||||
|     galileo_e1_code_gen_int(primary_code_E1_chips, _Signal, _prn);  //generate Galileo E1 code, 1 sample per chip | ||||
|     std::array<int32_t, 4092> primary_code_E1_chips{};                                               // _codeLength not accepted by Clang | ||||
|     galileo_e1_code_gen_int(gsl::span<int32_t>(primary_code_E1_chips.data(), 4092), _Signal, _prn);  //generate Galileo E1 code, 1 sample per chip | ||||
|     for (uint32_t i = 0; i < _codeLength; i++) | ||||
|         { | ||||
|             _dest[2 * i] = static_cast<float>(primary_code_E1_chips[i]); | ||||
| @@ -127,10 +128,10 @@ void galileo_e1_gen_float(gsl::span<float> _dest, gsl::span<int> _prn, const std | ||||
|     const float alpha = sqrt(10.0 / 11.0); | ||||
|     const float beta = sqrt(1.0 / 11.0); | ||||
|  | ||||
|     int32_t sinboc_11[12 * 4092] = {0};  //  _codeLength not accepted by Clang | ||||
|     int32_t sinboc_61[12 * 4092] = {0}; | ||||
|     gsl::span<int32_t> sinboc_11_(sinboc_11, _codeLength); | ||||
|     gsl::span<int32_t> sinboc_61_(sinboc_61, _codeLength); | ||||
|     std::array<int32_t, 12 * 4092> sinboc_11{}; | ||||
|     std::array<int32_t, 12 * 4092> sinboc_61{}; | ||||
|     gsl::span<int32_t> sinboc_11_(sinboc_11.data(), _codeLength); | ||||
|     gsl::span<int32_t> sinboc_61_(sinboc_61.data(), _codeLength); | ||||
|  | ||||
|     galileo_e1_sinboc_11_gen_int(sinboc_11_, _prn);  // generate sinboc(1,1) 12 samples per chip | ||||
|     galileo_e1_sinboc_61_gen_int(sinboc_61_, _prn);  // generate sinboc(6,1) 12 samples per chip | ||||
|   | ||||
| @@ -35,6 +35,7 @@ | ||||
| #include "Galileo_E5a.h" | ||||
| #include "gnss_signal_processing.h" | ||||
| #include <gnuradio/gr_complex.h> | ||||
| #include <array> | ||||
| #include <memory> | ||||
|  | ||||
|  | ||||
| @@ -42,7 +43,7 @@ void galileo_e5_a_code_gen_complex_primary(gsl::span<std::complex<float>> _dest, | ||||
| { | ||||
|     uint32_t prn = _prn - 1; | ||||
|     uint32_t index = 0; | ||||
|     int32_t a[4]; | ||||
|     std::array<int32_t, 4> a{}; | ||||
|     if ((_prn < 1) || (_prn > 50)) | ||||
|         { | ||||
|             return; | ||||
| @@ -81,7 +82,7 @@ void galileo_e5_a_code_gen_complex_primary(gsl::span<std::complex<float>> _dest, | ||||
|         } | ||||
|     else if (_Signal[0] == '5' && _Signal[1] == 'X') | ||||
|         { | ||||
|             int32_t b[4]; | ||||
|             std::array<int32_t, 4> b{}; | ||||
|             for (size_t i = 0; i < GALILEO_E5A_I_PRIMARY_CODE[prn].length() - 1; i++) | ||||
|                 { | ||||
|                     hex_to_binary_converter(a, GALILEO_E5A_I_PRIMARY_CODE[prn].at(i)); | ||||
|   | ||||
| @@ -302,7 +302,9 @@ double mstokph(double MetersPerSeconds) | ||||
| arma::vec CTM_to_Euler(const arma::mat &C) | ||||
| { | ||||
|     // Calculate Euler angles using (2.23) | ||||
|     arma::mat CTM(C); | ||||
|     arma::mat CTM = {{C(0, 0), C(0, 1), C(0, 2)}, | ||||
|         {C(1, 0), C(1, 1), C(1, 2)}, | ||||
|         {C(2, 0), C(2, 1), C(2, 2)}}; | ||||
|     arma::vec eul = arma::zeros(3, 1); | ||||
|     eul(0) = atan2(CTM(1, 2), CTM(2, 2));  // roll | ||||
|     if (CTM(0, 2) < -1.0) | ||||
|   | ||||
| @@ -31,14 +31,15 @@ | ||||
|  */ | ||||
|  | ||||
| #include "glonass_l1_signal_processing.h" | ||||
| #include <array> | ||||
|  | ||||
| auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); }; | ||||
|  | ||||
| void glonass_l1_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, /* int32_t  _prn,*/ uint32_t _chip_shift) | ||||
| { | ||||
|     const uint32_t _code_length = 511; | ||||
|     bool G1[_code_length]; | ||||
|     bool G1_register[9]; | ||||
|     std::array<bool, _code_length> G1{}; | ||||
|     std::array<bool, 9> G1_register{}; | ||||
|     bool feedback1; | ||||
|     bool aux; | ||||
|     uint32_t delay; | ||||
| @@ -107,7 +108,7 @@ void glonass_l1_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, /* int | ||||
| void glonass_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, /* uint32_t _prn,*/ int32_t _fs, uint32_t _chip_shift) | ||||
| { | ||||
|     // This function is based on the GNU software GPS for MATLAB in the Kay Borre book | ||||
|     std::complex<float> _code[511]; | ||||
|     std::array<std::complex<float>, 511> _code{}; | ||||
|     int32_t _samplesPerCode, _codeValueIndex; | ||||
|     float _ts; | ||||
|     float _tc; | ||||
| @@ -121,7 +122,8 @@ void glonass_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest | ||||
|     //--- Find time constants -------------------------------------------------- | ||||
|     _ts = 1.0 / static_cast<float>(_fs);             // Sampling period in sec | ||||
|     _tc = 1.0 / static_cast<float>(_codeFreqBasis);  // C/A chip period in sec | ||||
|     glonass_l1_ca_code_gen_complex(gsl::span<std::complex<float>>(_code, 511), _chip_shift);  //generate C/A code 1 sample per chip | ||||
|  | ||||
|     glonass_l1_ca_code_gen_complex(gsl::span<std::complex<float>>(_code.data(), 511), _chip_shift);  // generate C/A code 1 sample per chip | ||||
|  | ||||
|     for (int32_t i = 0; i < _samplesPerCode; i++) | ||||
|         { | ||||
|   | ||||
| @@ -31,14 +31,15 @@ | ||||
|  */ | ||||
|  | ||||
| #include "glonass_l2_signal_processing.h" | ||||
| #include <array> | ||||
|  | ||||
| auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); }; | ||||
|  | ||||
| void glonass_l2_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, /* int32_t _prn,*/ uint32_t _chip_shift) | ||||
| { | ||||
|     const uint32_t _code_length = 511; | ||||
|     bool G1[_code_length]; | ||||
|     bool G1_register[9]; | ||||
|     std::array<bool, _code_length> G1{}; | ||||
|     std::array<bool, 9> G1_register{}; | ||||
|     bool feedback1; | ||||
|     bool aux; | ||||
|     uint32_t delay; | ||||
| @@ -107,7 +108,7 @@ void glonass_l2_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, /* int | ||||
| void glonass_l2_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, /* uint32_t _prn,*/ int32_t _fs, uint32_t _chip_shift) | ||||
| { | ||||
|     // This function is based on the GNU software GPS for MATLAB in the Kay Borre book | ||||
|     std::complex<float> _code[511]; | ||||
|     std::array<std::complex<float>, 511> _code{}; | ||||
|     int32_t _samplesPerCode, _codeValueIndex; | ||||
|     float _ts; | ||||
|     float _tc; | ||||
| @@ -121,7 +122,8 @@ void glonass_l2_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest | ||||
|     //--- Find time constants -------------------------------------------------- | ||||
|     _ts = 1.0 / static_cast<float>(_fs);             // Sampling period in sec | ||||
|     _tc = 1.0 / static_cast<float>(_codeFreqBasis);  // C/A chip period in sec | ||||
|     glonass_l2_ca_code_gen_complex(gsl::span<std::complex<float>>(_code, 511), _chip_shift);  //generate C/A code 1 sample per chip | ||||
|  | ||||
|     glonass_l2_ca_code_gen_complex(gsl::span<std::complex<float>>(_code.data(), 511), _chip_shift);  // generate C/A code 1 sample per chip | ||||
|  | ||||
|     for (int32_t i = 0; i < _samplesPerCode; i++) | ||||
|         { | ||||
|   | ||||
| @@ -83,7 +83,10 @@ bool gnss_sdr_create_directory(const std::string& foldername) | ||||
|             errorlib::error_code ec; | ||||
|             os_test_file.close(); | ||||
|  | ||||
|             fs::remove(test_file, ec); | ||||
|             if (!fs::remove(test_file, ec)) | ||||
|                 { | ||||
|                     return false; | ||||
|                 } | ||||
|             if (static_cast<bool>(ec)) | ||||
|                 { | ||||
|                     return false; | ||||
|   | ||||
| @@ -31,23 +31,25 @@ | ||||
|  */ | ||||
|  | ||||
| #include "gps_sdr_signal_processing.h" | ||||
| #include <array> | ||||
|  | ||||
| auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); }; | ||||
|  | ||||
| void gps_l1_ca_code_gen_int(gsl::span<int32_t> _dest, int32_t _prn, uint32_t _chip_shift) | ||||
| { | ||||
|     const uint32_t _code_length = 1023; | ||||
|     bool G1[_code_length]; | ||||
|     bool G2[_code_length]; | ||||
|     bool G1_register[10], G2_register[10]; | ||||
|     std::array<bool, _code_length> G1{}; | ||||
|     std::array<bool, _code_length> G2{}; | ||||
|     std::array<bool, 10> G1_register{}; | ||||
|     std::array<bool, 10> G2_register{}; | ||||
|     bool feedback1, feedback2; | ||||
|     bool aux; | ||||
|     uint32_t lcv, lcv2; | ||||
|     uint32_t delay; | ||||
|     int32_t prn_idx; | ||||
|  | ||||
|     /* G2 Delays as defined in GPS-ISD-200D */ | ||||
|     const int32_t delays[51] = {5 /*PRN1*/, 6, 7, 8, 17, 18, 139, 140, 141, 251, 252, 254, 255, 256, 257, 258, 469, 470, 471, 472, | ||||
|     // G2 Delays as defined in GPS-ISD-200D | ||||
|     const std::array<int32_t, 51> delays = {5 /*PRN1*/, 6, 7, 8, 17, 18, 139, 140, 141, 251, 252, 254, 255, 256, 257, 258, 469, 470, 471, 472, | ||||
|         473, 474, 509, 512, 513, 514, 515, 516, 859, 860, 861, 862 /*PRN32*/, | ||||
|         145 /*PRN120*/, 175, 52, 21, 237, 235, 886, 657, 634, 762, | ||||
|         355, 1012, 176, 603, 130, 359, 595, 68, 386 /*PRN138*/}; | ||||
| @@ -62,7 +64,7 @@ void gps_l1_ca_code_gen_int(gsl::span<int32_t> _dest, int32_t _prn, uint32_t _ch | ||||
|             prn_idx = _prn - 1; | ||||
|         } | ||||
|  | ||||
|     /* A simple error check */ | ||||
|     // A simple error check | ||||
|     if ((prn_idx < 0) || (prn_idx > 51)) | ||||
|         { | ||||
|             return; | ||||
| @@ -74,7 +76,7 @@ void gps_l1_ca_code_gen_int(gsl::span<int32_t> _dest, int32_t _prn, uint32_t _ch | ||||
|             G2_register[lcv] = true; | ||||
|         } | ||||
|  | ||||
|     /* Generate G1 & G2 Register */ | ||||
|     // Generate G1 & G2 Register | ||||
|     for (lcv = 0; lcv < _code_length; lcv++) | ||||
|         { | ||||
|             G1[lcv] = G1_register[0]; | ||||
| @@ -93,12 +95,12 @@ void gps_l1_ca_code_gen_int(gsl::span<int32_t> _dest, int32_t _prn, uint32_t _ch | ||||
|             G2_register[9] = feedback2; | ||||
|         } | ||||
|  | ||||
|     /* Set the delay */ | ||||
|     // Set the delay | ||||
|     delay = _code_length - delays[prn_idx]; | ||||
|     delay += _chip_shift; | ||||
|     delay %= _code_length; | ||||
|  | ||||
|     /* Generate PRN from G1 and G2 Registers */ | ||||
|     // Generate PRN from G1 and G2 Registers | ||||
|     for (lcv = 0; lcv < _code_length; lcv++) | ||||
|         { | ||||
|             aux = G1[(lcv + _chip_shift) % _code_length] ^ G2[delay]; | ||||
| @@ -119,7 +121,7 @@ void gps_l1_ca_code_gen_int(gsl::span<int32_t> _dest, int32_t _prn, uint32_t _ch | ||||
| void gps_l1_ca_code_gen_float(gsl::span<float> _dest, int32_t _prn, uint32_t _chip_shift) | ||||
| { | ||||
|     const uint32_t _code_length = 1023; | ||||
|     int32_t ca_code_int[_code_length]; | ||||
|     std::array<int32_t, _code_length> ca_code_int{}; | ||||
|  | ||||
|     gps_l1_ca_code_gen_int(ca_code_int, _prn, _chip_shift); | ||||
|  | ||||
| @@ -133,7 +135,7 @@ void gps_l1_ca_code_gen_float(gsl::span<float> _dest, int32_t _prn, uint32_t _ch | ||||
| void gps_l1_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, int32_t _prn, uint32_t _chip_shift) | ||||
| { | ||||
|     const uint32_t _code_length = 1023; | ||||
|     int32_t ca_code_int[_code_length] = {0}; | ||||
|     std::array<int32_t, _code_length> ca_code_int{}; | ||||
|  | ||||
|     gps_l1_ca_code_gen_int(ca_code_int, _prn, _chip_shift); | ||||
|  | ||||
| @@ -151,7 +153,7 @@ void gps_l1_ca_code_gen_complex(gsl::span<std::complex<float>> _dest, int32_t _p | ||||
| void gps_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, uint32_t _prn, int32_t _fs, uint32_t _chip_shift) | ||||
| { | ||||
|     // This function is based on the GNU software GPS for MATLAB in the Kay Borre book | ||||
|     std::complex<float> _code[1023]; | ||||
|     std::array<std::complex<float>, 1023> _code{}; | ||||
|     int32_t _samplesPerCode, _codeValueIndex; | ||||
|     float _ts; | ||||
|     float _tc; | ||||
|   | ||||
| @@ -221,7 +221,7 @@ int decode_sbstype6(const sbsmsg_t *msg, sbssat_t *sbssat) | ||||
|         } | ||||
|     for (i = 0; i < sbssat->nsat && i < MAXSAT; i++) | ||||
|         { | ||||
|             if (sbssat->sat[i].fcorr.iodf != iodf[i / 28]) | ||||
|             if (sbssat->sat[i].fcorr.iodf != iodf[i / 39]) | ||||
|                 { | ||||
|                     continue; | ||||
|                 } | ||||
|   | ||||
| @@ -266,6 +266,8 @@ void write_results(const std::vector<volk_gnsssdr_test_results_t> *results, bool | ||||
|     // Until we can update the config on a kernel by kernel basis | ||||
|     // do not overwrite volk_gnsssdr_config when using a regex. | ||||
|     if (!fs::exists(config_path.parent_path())) | ||||
|         { | ||||
|             try | ||||
|                 { | ||||
|                     std::cout << "Creating " << config_path.parent_path() << " ..." << std::endl; | ||||
|                     try | ||||
| @@ -279,6 +281,13 @@ void write_results(const std::vector<volk_gnsssdr_test_results_t> *results, bool | ||||
|                             return; | ||||
|                         } | ||||
|                 } | ||||
|             catch (...) | ||||
|                 { | ||||
|                     // Catch exception when using std::experimental | ||||
|                     std::cerr << "ERROR: Could not create folder" << std::endl; | ||||
|                     return; | ||||
|                 } | ||||
|         } | ||||
|  | ||||
|     std::ofstream config; | ||||
|     if (update_result) | ||||
|   | ||||
| @@ -38,6 +38,7 @@ | ||||
| #include <glog/logging.h> | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <matio.h> | ||||
| #include <array> | ||||
| #include <cmath>      // for round | ||||
| #include <cstdlib>    // for size_t, llabs | ||||
| #include <exception>  // for exception | ||||
| @@ -46,6 +47,8 @@ | ||||
| #include <utility>    // for move | ||||
|  | ||||
| #if HAS_STD_FILESYSTEM | ||||
| #include <system_error> | ||||
| namespace errorlib = std; | ||||
| #if HAS_STD_FILESYSTEM_EXPERIMENTAL | ||||
| #include <experimental/filesystem> | ||||
| namespace fs = std::experimental::filesystem; | ||||
| @@ -54,8 +57,12 @@ namespace fs = std::experimental::filesystem; | ||||
| namespace fs = std::filesystem; | ||||
| #endif | ||||
| #else | ||||
| #include <boost/filesystem/path.hpp> | ||||
| #include <boost/filesystem/operations.hpp>   // for create_directories, exists | ||||
| #include <boost/filesystem/path.hpp>         // for path, operator<< | ||||
| #include <boost/filesystem/path_traits.hpp>  // for filesystem | ||||
| #include <boost/system/error_code.hpp>       // for error_code | ||||
| namespace fs = boost::filesystem; | ||||
| namespace errorlib = boost::system; | ||||
| #endif | ||||
|  | ||||
|  | ||||
| @@ -64,33 +71,6 @@ hybrid_observables_gs_sptr hybrid_observables_gs_make(unsigned int nchannels_in, | ||||
|     return hybrid_observables_gs_sptr(new hybrid_observables_gs(nchannels_in, nchannels_out, dump, dump_mat, std::move(dump_filename))); | ||||
| } | ||||
|  | ||||
| void hybrid_observables_gs::msg_handler_pvt_to_observables(const pmt::pmt_t &msg) | ||||
| { | ||||
|     gr::thread::scoped_lock lock(d_setlock);  // require mutex with work function called by the scheduler | ||||
|     try | ||||
|         { | ||||
|             if (pmt::any_ref(msg).type() == typeid(double)) | ||||
|                 { | ||||
|                     double new_rx_clock_offset_s; | ||||
|                     new_rx_clock_offset_s = boost::any_cast<double>(pmt::any_ref(msg)); | ||||
|                     T_rx_offset_ms = new_rx_clock_offset_s * 1000.0; | ||||
|                     T_rx_TOW_ms = T_rx_TOW_ms - static_cast<int>(round(T_rx_offset_ms)); | ||||
|                     T_rx_remnant_to_20ms = (T_rx_TOW_ms % 20); | ||||
|                     //d_Rx_clock_buffer.clear();  // Clear all the elements in the buffer | ||||
|                     for (uint32_t n = 0; n < d_nchannels_out; n++) | ||||
|                         { | ||||
|                             d_gnss_synchro_history->clear(n); | ||||
|                         } | ||||
|  | ||||
|                     LOG(INFO) << "Corrected new RX Time offset: " << T_rx_offset_ms << "[ms]"; | ||||
|                 } | ||||
|         } | ||||
|     catch (boost::bad_any_cast &e) | ||||
|         { | ||||
|             LOG(WARNING) << "msg_handler_pvt_to_observables Bad any cast!"; | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| hybrid_observables_gs::hybrid_observables_gs(uint32_t nchannels_in, | ||||
|     uint32_t nchannels_out, | ||||
| @@ -113,7 +93,7 @@ hybrid_observables_gs::hybrid_observables_gs(uint32_t nchannels_in, | ||||
|     d_nchannels_out = nchannels_out; | ||||
|     d_nchannels_in = nchannels_in; | ||||
|     T_rx_offset_ms = 0; | ||||
|     d_gnss_synchro_history = new Gnss_circular_deque<Gnss_Synchro>(500, d_nchannels_out); | ||||
|     d_gnss_synchro_history = std::make_shared<Gnss_circular_deque<Gnss_Synchro>>(500, d_nchannels_out); | ||||
|  | ||||
|     // ############# ENABLE DATA FILE LOG ################# | ||||
|     if (d_dump) | ||||
| @@ -172,9 +152,9 @@ hybrid_observables_gs::hybrid_observables_gs(uint32_t nchannels_in, | ||||
|  | ||||
| hybrid_observables_gs::~hybrid_observables_gs() | ||||
| { | ||||
|     delete d_gnss_synchro_history; | ||||
|     if (d_dump_file.is_open()) | ||||
|         { | ||||
|             auto pos = d_dump_file.tellp(); | ||||
|             try | ||||
|                 { | ||||
|                     d_dump_file.close(); | ||||
| @@ -183,6 +163,15 @@ hybrid_observables_gs::~hybrid_observables_gs() | ||||
|                 { | ||||
|                     LOG(WARNING) << "Exception in destructor closing the dump file " << ex.what(); | ||||
|                 } | ||||
|             if (pos == 0) | ||||
|                 { | ||||
|                     errorlib::error_code ec; | ||||
|                     if (!fs::remove(fs::path(d_dump_filename), ec)) | ||||
|                         { | ||||
|                             std::cerr << "Problem removing temporary file " << d_dump_filename << '\n'; | ||||
|                         } | ||||
|                     d_dump_mat = false; | ||||
|                 } | ||||
|         } | ||||
|     if (d_dump_mat) | ||||
|         { | ||||
| @@ -198,6 +187,34 @@ hybrid_observables_gs::~hybrid_observables_gs() | ||||
| } | ||||
|  | ||||
|  | ||||
| void hybrid_observables_gs::msg_handler_pvt_to_observables(const pmt::pmt_t &msg) | ||||
| { | ||||
|     gr::thread::scoped_lock lock(d_setlock);  // require mutex with work function called by the scheduler | ||||
|     try | ||||
|         { | ||||
|             if (pmt::any_ref(msg).type() == typeid(double)) | ||||
|                 { | ||||
|                     double new_rx_clock_offset_s; | ||||
|                     new_rx_clock_offset_s = boost::any_cast<double>(pmt::any_ref(msg)); | ||||
|                     T_rx_offset_ms = new_rx_clock_offset_s * 1000.0; | ||||
|                     T_rx_TOW_ms = T_rx_TOW_ms - static_cast<int>(round(T_rx_offset_ms)); | ||||
|                     T_rx_remnant_to_20ms = (T_rx_TOW_ms % 20); | ||||
|                     //d_Rx_clock_buffer.clear();  // Clear all the elements in the buffer | ||||
|                     for (uint32_t n = 0; n < d_nchannels_out; n++) | ||||
|                         { | ||||
|                             d_gnss_synchro_history->clear(n); | ||||
|                         } | ||||
|  | ||||
|                     LOG(INFO) << "Corrected new RX Time offset: " << T_rx_offset_ms << "[ms]"; | ||||
|                 } | ||||
|         } | ||||
|     catch (boost::bad_any_cast &e) | ||||
|         { | ||||
|             LOG(WARNING) << "msg_handler_pvt_to_observables Bad any cast!"; | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| int32_t hybrid_observables_gs::save_matfile() | ||||
| { | ||||
|     // READ DUMP FILE | ||||
| @@ -300,32 +317,32 @@ int32_t hybrid_observables_gs::save_matfile() | ||||
|     matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73); | ||||
|     if (reinterpret_cast<int64_t *>(matfp) != nullptr) | ||||
|         { | ||||
|             size_t dims[2] = {static_cast<size_t>(d_nchannels_out), static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("RX_time", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, RX_time_aux.data(), MAT_F_DONT_COPY_DATA); | ||||
|             std::array<size_t, 2> dims{static_cast<size_t>(d_nchannels_out), static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("RX_time", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), RX_time_aux.data(), MAT_F_DONT_COPY_DATA); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("TOW_at_current_symbol_s", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, TOW_at_current_symbol_s_aux.data(), MAT_F_DONT_COPY_DATA); | ||||
|             matvar = Mat_VarCreate("TOW_at_current_symbol_s", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), TOW_at_current_symbol_s_aux.data(), MAT_F_DONT_COPY_DATA); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Carrier_Doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, Carrier_Doppler_hz_aux.data(), MAT_F_DONT_COPY_DATA); | ||||
|             matvar = Mat_VarCreate("Carrier_Doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), Carrier_Doppler_hz_aux.data(), MAT_F_DONT_COPY_DATA); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Carrier_phase_cycles", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, Carrier_phase_cycles_aux.data(), MAT_F_DONT_COPY_DATA); | ||||
|             matvar = Mat_VarCreate("Carrier_phase_cycles", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), Carrier_phase_cycles_aux.data(), MAT_F_DONT_COPY_DATA); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Pseudorange_m", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, Pseudorange_m_aux.data(), MAT_F_DONT_COPY_DATA); | ||||
|             matvar = Mat_VarCreate("Pseudorange_m", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), Pseudorange_m_aux.data(), MAT_F_DONT_COPY_DATA); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, PRN_aux.data(), MAT_F_DONT_COPY_DATA); | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), PRN_aux.data(), MAT_F_DONT_COPY_DATA); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Flag_valid_pseudorange", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, Flag_valid_pseudorange_aux.data(), MAT_F_DONT_COPY_DATA); | ||||
|             matvar = Mat_VarCreate("Flag_valid_pseudorange", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), Flag_valid_pseudorange_aux.data(), MAT_F_DONT_COPY_DATA); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|         } | ||||
|   | ||||
| @@ -40,6 +40,7 @@ | ||||
| #include <gnuradio/types.h>           // for gr_vector_int | ||||
| #include <cstdint>                    // for int32_t | ||||
| #include <fstream>                    // for string, ofstream | ||||
| #include <memory>                     // for shared_ptr | ||||
| #include <vector>                     // for vector | ||||
|  | ||||
| class Gnss_Synchro; | ||||
| @@ -96,7 +97,7 @@ private: | ||||
|     std::string d_dump_filename; | ||||
|     std::ofstream d_dump_file; | ||||
|     boost::circular_buffer<uint64_t> d_Rx_clock_buffer;                         // time history | ||||
|     Gnss_circular_deque<Gnss_Synchro>* d_gnss_synchro_history;  // Tracking observable history | ||||
|     std::shared_ptr<Gnss_circular_deque<Gnss_Synchro>> d_gnss_synchro_history;  // Tracking observable history | ||||
|     void msg_handler_pvt_to_observables(const pmt::pmt_t& msg); | ||||
|     double compute_T_rx_s(const Gnss_Synchro& a); | ||||
|     bool interp_trk_obs(Gnss_Synchro& interpolated_obs, const uint32_t& ch, const uint64_t& rx_clock); | ||||
|   | ||||
| @@ -39,6 +39,7 @@ | ||||
| #include "gps_sdr_signal_processing.h" | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <fstream> | ||||
| #include <utility> | ||||
|  | ||||
| @@ -158,7 +159,7 @@ void signal_generator_c::generate_codes() | ||||
|         { | ||||
|             sampled_code_data_[sat] = static_cast<gr_complex *>(std::malloc(vector_length_ * sizeof(gr_complex))); | ||||
|  | ||||
|             gr_complex code[64000];  //[samples_per_code_[sat]]; | ||||
|             std::array<gr_complex, 64000> code{};  //[samples_per_code_[sat]]; | ||||
|  | ||||
|             if (system_[sat] == "G") | ||||
|                 { | ||||
| @@ -179,7 +180,7 @@ void signal_generator_c::generate_codes() | ||||
|                     for (unsigned int i = 0; i < num_of_codes_per_vector_[sat]; i++) | ||||
|                         { | ||||
|                             memcpy(&(sampled_code_data_[sat][i * samples_per_code_[sat]]), | ||||
|                                 code, sizeof(gr_complex) * samples_per_code_[sat]); | ||||
|                                 code.data(), sizeof(gr_complex) * samples_per_code_[sat]); | ||||
|                         } | ||||
|                 } | ||||
|             else if (system_[sat] == "R") | ||||
| @@ -201,7 +202,7 @@ void signal_generator_c::generate_codes() | ||||
|                     for (unsigned int i = 0; i < num_of_codes_per_vector_[sat]; i++) | ||||
|                         { | ||||
|                             memcpy(&(sampled_code_data_[sat][i * samples_per_code_[sat]]), | ||||
|                                 code, sizeof(gr_complex) * samples_per_code_[sat]); | ||||
|                                 code.data(), sizeof(gr_complex) * samples_per_code_[sat]); | ||||
|                         } | ||||
|                 } | ||||
|             else if (system_[sat] == "E") | ||||
| @@ -227,7 +228,7 @@ void signal_generator_c::generate_codes() | ||||
|                             bool cboc = true; | ||||
|                             std::array<char, 3> signal = {{'1', 'B', '\0'}}; | ||||
|  | ||||
|                             galileo_e1_code_gen_complex_sampled(gsl::span<gr_complex>(code, 64000), signal, cboc, PRN_[sat], fs_in_, | ||||
|                             galileo_e1_code_gen_complex_sampled(code, signal, cboc, PRN_[sat], fs_in_, | ||||
|                                 static_cast<int>(GALILEO_E1_B_CODE_LENGTH_CHIPS) - delay_chips_[sat]); | ||||
|  | ||||
|                             // Obtain the desired CN0 assuming that Pn = 1. | ||||
| @@ -243,7 +244,7 @@ void signal_generator_c::generate_codes() | ||||
|                             for (unsigned int i = 0; i < num_of_codes_per_vector_[sat]; i++) | ||||
|                                 { | ||||
|                                     memcpy(&(sampled_code_data_[sat][i * samples_per_code_[sat]]), | ||||
|                                         code, sizeof(gr_complex) * samples_per_code_[sat]); | ||||
|                                         code.data(), sizeof(gr_complex) * samples_per_code_[sat]); | ||||
|                                 } | ||||
|  | ||||
|                             // Generate E1C signal (25 code-periods, with secondary code) | ||||
|   | ||||
| @@ -32,6 +32,7 @@ | ||||
|  | ||||
| #include "gr_complex_ip_packet_source.h" | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <array> | ||||
| #include <cstdint> | ||||
| #include <utility> | ||||
|  | ||||
| @@ -184,14 +185,14 @@ bool Gr_Complex_Ip_Packet_Source::stop() | ||||
|  | ||||
| bool Gr_Complex_Ip_Packet_Source::open() | ||||
| { | ||||
|     char errbuf[PCAP_ERRBUF_SIZE]; | ||||
|     std::array<char, PCAP_ERRBUF_SIZE> errbuf{}; | ||||
|     boost::mutex::scoped_lock lock(d_mutex);  // hold mutex for duration of this function | ||||
|     // open device for reading | ||||
|     descr = pcap_open_live(d_src_device.c_str(), 1500, 1, 1000, errbuf); | ||||
|     descr = pcap_open_live(d_src_device.c_str(), 1500, 1, 1000, errbuf.data()); | ||||
|     if (descr == nullptr) | ||||
|         { | ||||
|             std::cout << "Error opening Ethernet device " << d_src_device << std::endl; | ||||
|             std::cout << "Fatal Error in pcap_open_live(): " << std::string(errbuf) << std::endl; | ||||
|             std::cout << "Fatal Error in pcap_open_live(): " << std::string(errbuf.data()) << std::endl; | ||||
|             return false; | ||||
|         } | ||||
|     // bind UDP port to avoid automatic reply with ICMP port unreachable packets from kernel | ||||
|   | ||||
| @@ -32,6 +32,7 @@ | ||||
| #include "labsat23_source.h" | ||||
| #include "control_message_factory.h" | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <array> | ||||
| #include <exception> | ||||
| #include <iostream> | ||||
| #include <sstream> | ||||
| @@ -215,8 +216,8 @@ int labsat23_source::general_work(int noutput_items, | ||||
|         { | ||||
|             if (binary_input_file->eof() == false) | ||||
|                 { | ||||
|                     char memblock[1024]; | ||||
|                     binary_input_file->read(memblock, 1024); | ||||
|                     std::array<char, 1024> memblock{}; | ||||
|                     binary_input_file->read(memblock.data(), 1024); | ||||
|                     // parse Labsat header | ||||
|                     // check preamble | ||||
|                     int byte_counter = 0; | ||||
|   | ||||
| @@ -43,6 +43,7 @@ | ||||
| #include <pmt/pmt.h>        // for make_any | ||||
| #include <pmt/pmt_sugar.h>  // for mp | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cstdlib>    // for abs | ||||
| #include <exception>  // for exception | ||||
| #include <iostream>   // for cout | ||||
| @@ -136,8 +137,9 @@ beidou_b1i_telemetry_decoder_gs::~beidou_b1i_telemetry_decoder_gs() | ||||
|  | ||||
| void beidou_b1i_telemetry_decoder_gs::decode_bch15_11_01(const int32_t *bits, int32_t *decbits) | ||||
| { | ||||
|     int32_t bit, err, reg[4] = {1, 1, 1, 1}; | ||||
|     int32_t errind[15] = {14, 13, 10, 12, 6, 9, 4, 11, 0, 5, 7, 8, 1, 3, 2}; | ||||
|     int32_t bit, err; | ||||
|     std::array<int32_t, 4> reg{1, 1, 1, 1}; | ||||
|     const std::array<int32_t, 15> errind{14, 13, 10, 12, 6, 9, 4, 11, 0, 5, 7, 8, 1, 3, 2}; | ||||
|  | ||||
|     for (uint32_t i = 0; i < 15; i++) | ||||
|         { | ||||
| @@ -168,7 +170,9 @@ void beidou_b1i_telemetry_decoder_gs::decode_word( | ||||
|     const float *enc_word_symbols, | ||||
|     int32_t *dec_word_symbols) | ||||
| { | ||||
|     int32_t bitsbch[30], first_branch[15], second_branch[15]; | ||||
|     std::array<int32_t, 30> bitsbch{}; | ||||
|     std::array<int32_t, 15> first_branch{}; | ||||
|     std::array<int32_t, 15> second_branch{}; | ||||
|  | ||||
|     if (word_counter == 1) | ||||
|         { | ||||
| @@ -187,8 +191,8 @@ void beidou_b1i_telemetry_decoder_gs::decode_word( | ||||
|                         } | ||||
|                 } | ||||
|  | ||||
|             decode_bch15_11_01(&bitsbch[0], first_branch); | ||||
|             decode_bch15_11_01(&bitsbch[15], second_branch); | ||||
|             decode_bch15_11_01(&bitsbch[0], first_branch.data()); | ||||
|             decode_bch15_11_01(&bitsbch[15], second_branch.data()); | ||||
|  | ||||
|             for (uint32_t j = 0; j < 11; j++) | ||||
|                 { | ||||
| @@ -209,13 +213,13 @@ void beidou_b1i_telemetry_decoder_gs::decode_subframe(float *frame_symbols) | ||||
| { | ||||
|     // 1. Transform from symbols to bits | ||||
|     std::string data_bits; | ||||
|     int32_t dec_word_bits[30]; | ||||
|     std::array<int32_t, 30> dec_word_bits{}; | ||||
|  | ||||
|     // Decode each word in subframe | ||||
|     for (uint32_t ii = 0; ii < BEIDOU_DNAV_WORDS_SUBFRAME; ii++) | ||||
|         { | ||||
|             // decode the word | ||||
|             decode_word((ii + 1), &frame_symbols[ii * 30], dec_word_bits); | ||||
|             decode_word((ii + 1), &frame_symbols[ii * 30], dec_word_bits.data()); | ||||
|  | ||||
|             // Save word to string format | ||||
|             for (uint32_t jj = 0; jj < (BEIDOU_DNAV_WORD_LENGTH_BITS); jj++) | ||||
|   | ||||
| @@ -42,6 +42,7 @@ | ||||
| #include <pmt/pmt.h>        // for make_any | ||||
| #include <pmt/pmt_sugar.h>  // for mp | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cstdlib>    // for abs | ||||
| #include <exception>  // for exception | ||||
| #include <iostream>   // for cout | ||||
| @@ -137,8 +138,9 @@ beidou_b3i_telemetry_decoder_gs::~beidou_b3i_telemetry_decoder_gs() | ||||
| void beidou_b3i_telemetry_decoder_gs::decode_bch15_11_01(const int32_t *bits, | ||||
|     int32_t *decbits) | ||||
| { | ||||
|     int32_t bit, err, reg[4] = {1, 1, 1, 1}; | ||||
|     int32_t errind[15] = {14, 13, 10, 12, 6, 9, 4, 11, 0, 5, 7, 8, 1, 3, 2}; | ||||
|     int32_t bit, err; | ||||
|     std::array<int32_t, 4> reg{1, 1, 1, 1}; | ||||
|     const std::array<int32_t, 15> errind{14, 13, 10, 12, 6, 9, 4, 11, 0, 5, 7, 8, 1, 3, 2}; | ||||
|  | ||||
|     for (uint32_t i = 0; i < 15; i++) | ||||
|         { | ||||
| @@ -169,7 +171,9 @@ void beidou_b3i_telemetry_decoder_gs::decode_word( | ||||
|     const float *enc_word_symbols, | ||||
|     int32_t *dec_word_symbols) | ||||
| { | ||||
|     int32_t bitsbch[30], first_branch[15], second_branch[15]; | ||||
|     std::array<int32_t, 30> bitsbch{}; | ||||
|     std::array<int32_t, 15> first_branch{}; | ||||
|     std::array<int32_t, 15> second_branch{}; | ||||
|  | ||||
|     if (word_counter == 1) | ||||
|         { | ||||
| @@ -188,8 +192,8 @@ void beidou_b3i_telemetry_decoder_gs::decode_word( | ||||
|                         } | ||||
|                 } | ||||
|  | ||||
|             decode_bch15_11_01(&bitsbch[0], first_branch); | ||||
|             decode_bch15_11_01(&bitsbch[15], second_branch); | ||||
|             decode_bch15_11_01(&bitsbch[0], first_branch.data()); | ||||
|             decode_bch15_11_01(&bitsbch[15], second_branch.data()); | ||||
|  | ||||
|             for (uint32_t j = 0; j < 11; j++) | ||||
|                 { | ||||
| @@ -210,13 +214,13 @@ void beidou_b3i_telemetry_decoder_gs::decode_subframe(float *frame_symbols) | ||||
| { | ||||
|     // 1. Transform from symbols to bits | ||||
|     std::string data_bits; | ||||
|     int32_t dec_word_bits[30]; | ||||
|     std::array<int32_t, 30> dec_word_bits{}; | ||||
|  | ||||
|     // Decode each word in subframe | ||||
|     for (uint32_t ii = 0; ii < BEIDOU_DNAV_WORDS_SUBFRAME; ii++) | ||||
|         { | ||||
|             // decode the word | ||||
|             decode_word((ii + 1), &frame_symbols[ii * 30], dec_word_bits); | ||||
|             decode_word((ii + 1), &frame_symbols[ii * 30], dec_word_bits.data()); | ||||
|  | ||||
|             // Save word to string format | ||||
|             for (uint32_t jj = 0; jj < (BEIDOU_DNAV_WORD_LENGTH_BITS); jj++) | ||||
|   | ||||
| @@ -38,6 +38,7 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <pmt/pmt.h>        // for make_any | ||||
| #include <pmt/pmt_sugar.h>  // for mp | ||||
| #include <array> | ||||
| #include <cmath>      // for floor, round | ||||
| #include <cstdlib>    // for abs, malloc | ||||
| #include <cstring>    // for memcpy | ||||
| @@ -75,11 +76,11 @@ glonass_l1_ca_telemetry_decoder_gs::glonass_l1_ca_telemetry_decoder_gs( | ||||
|     d_samples_per_symbol = (GLONASS_L1_CA_CODE_RATE_HZ / GLONASS_L1_CA_CODE_LENGTH_CHIPS) / GLONASS_L1_CA_SYMBOL_RATE_BPS; | ||||
|  | ||||
|     // Set the preamble information | ||||
|     uint16_t preambles_bits[GLONASS_GNAV_PREAMBLE_LENGTH_BITS] = GLONASS_GNAV_PREAMBLE; | ||||
|     std::array<uint16_t, GLONASS_GNAV_PREAMBLE_LENGTH_BITS> preambles_bits{GLONASS_GNAV_PREAMBLE}; | ||||
|     // Since preamble rate is different than navigation data rate we use a constant | ||||
|     d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|  | ||||
|     memcpy(static_cast<uint16_t *>(this->d_preambles_bits), static_cast<uint16_t *>(preambles_bits), GLONASS_GNAV_PREAMBLE_LENGTH_BITS * sizeof(uint16_t)); | ||||
|     memcpy(static_cast<uint16_t *>(this->d_preambles_bits), preambles_bits.data(), GLONASS_GNAV_PREAMBLE_LENGTH_BITS * sizeof(uint16_t)); | ||||
|  | ||||
|     // preamble bits to sampled symbols | ||||
|     d_preambles_symbols = static_cast<int32_t *>(malloc(sizeof(int32_t) * d_symbols_per_preamble)); | ||||
| @@ -349,7 +350,7 @@ int glonass_l1_ca_telemetry_decoder_gs::general_work(int noutput_items __attribu | ||||
|                     // NEW GLONASS string received | ||||
|                     // 0. fetch the symbols into an array | ||||
|                     int32_t string_length = GLONASS_GNAV_STRING_SYMBOLS - d_symbols_per_preamble; | ||||
|                     double string_symbols[GLONASS_GNAV_DATA_SYMBOLS] = {0}; | ||||
|                     std::array<double, GLONASS_GNAV_DATA_SYMBOLS> string_symbols{}; | ||||
|  | ||||
|                     // ******* SYMBOL TO BIT ******* | ||||
|                     for (int32_t i = 0; i < string_length; i++) | ||||
| @@ -365,7 +366,7 @@ int glonass_l1_ca_telemetry_decoder_gs::general_work(int noutput_items __attribu | ||||
|                         } | ||||
|  | ||||
|                     // call the decoder | ||||
|                     decode_string(string_symbols, string_length); | ||||
|                     decode_string(string_symbols.data(), string_length); | ||||
|                     if (d_nav.flag_CRC_test == true) | ||||
|                         { | ||||
|                             d_CRC_error_counter = 0; | ||||
|   | ||||
| @@ -38,6 +38,7 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <pmt/pmt.h>        // for make_any | ||||
| #include <pmt/pmt_sugar.h>  // for mp | ||||
| #include <array> | ||||
| #include <cmath>      // for floor, round | ||||
| #include <cstdlib>    // for abs, malloc | ||||
| #include <cstring>    // for memcpy | ||||
| @@ -75,11 +76,11 @@ glonass_l2_ca_telemetry_decoder_gs::glonass_l2_ca_telemetry_decoder_gs( | ||||
|     d_samples_per_symbol = (GLONASS_L2_CA_CODE_RATE_HZ / GLONASS_L2_CA_CODE_LENGTH_CHIPS) / GLONASS_L2_CA_SYMBOL_RATE_BPS; | ||||
|  | ||||
|     // Set the preamble information | ||||
|     uint16_t preambles_bits[GLONASS_GNAV_PREAMBLE_LENGTH_BITS] = GLONASS_GNAV_PREAMBLE; | ||||
|     std::array<uint16_t, GLONASS_GNAV_PREAMBLE_LENGTH_BITS> preambles_bits{GLONASS_GNAV_PREAMBLE}; | ||||
|     // Since preamble rate is different than navigation data rate we use a constant | ||||
|     d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS; | ||||
|  | ||||
|     memcpy(static_cast<uint16_t *>(this->d_preambles_bits), static_cast<uint16_t *>(preambles_bits), GLONASS_GNAV_PREAMBLE_LENGTH_BITS * sizeof(uint16_t)); | ||||
|     memcpy(static_cast<uint16_t *>(this->d_preambles_bits), preambles_bits.data(), GLONASS_GNAV_PREAMBLE_LENGTH_BITS * sizeof(uint16_t)); | ||||
|  | ||||
|     // preamble bits to sampled symbols | ||||
|     d_preambles_symbols = static_cast<int32_t *>(malloc(sizeof(int32_t) * d_symbols_per_preamble)); | ||||
| @@ -351,7 +352,7 @@ int glonass_l2_ca_telemetry_decoder_gs::general_work(int noutput_items __attribu | ||||
|                     // NEW GLONASS string received | ||||
|                     // 0. fetch the symbols into an array | ||||
|                     int32_t string_length = GLONASS_GNAV_STRING_SYMBOLS - d_symbols_per_preamble; | ||||
|                     double string_symbols[GLONASS_GNAV_DATA_SYMBOLS] = {0}; | ||||
|                     std::array<double, GLONASS_GNAV_DATA_SYMBOLS> string_symbols{}; | ||||
|  | ||||
|                     // ******* SYMBOL TO BIT ******* | ||||
|                     for (int32_t i = 0; i < string_length; i++) | ||||
| @@ -367,7 +368,7 @@ int glonass_l2_ca_telemetry_decoder_gs::general_work(int noutput_items __attribu | ||||
|                         } | ||||
|  | ||||
|                     // call the decoder | ||||
|                     decode_string(string_symbols, string_length); | ||||
|                     decode_string(string_symbols.data(), string_length); | ||||
|                     if (d_nav.flag_CRC_test == true) | ||||
|                         { | ||||
|                             d_CRC_error_counter = 0; | ||||
|   | ||||
| @@ -38,6 +38,7 @@ | ||||
| #include <pmt/pmt.h>        // for make_any | ||||
| #include <pmt/pmt_sugar.h>  // for mp | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cmath>      // for round | ||||
| #include <cstring>    // for memcpy | ||||
| #include <exception>  // for exception | ||||
| @@ -205,7 +206,7 @@ void gps_l1_ca_telemetry_decoder_gs::set_channel(int32_t channel) | ||||
|  | ||||
| bool gps_l1_ca_telemetry_decoder_gs::decode_subframe() | ||||
| { | ||||
|     char subframe[GPS_SUBFRAME_LENGTH]; | ||||
|     std::array<char, GPS_SUBFRAME_LENGTH> subframe{}; | ||||
|     int32_t frame_bit_index = 0; | ||||
|     int32_t word_index = 0; | ||||
|     uint32_t GPS_frame_4bytes = 0; | ||||
| @@ -265,7 +266,7 @@ bool gps_l1_ca_telemetry_decoder_gs::decode_subframe() | ||||
|     // NEW GPS SUBFRAME HAS ARRIVED! | ||||
|     if (subframe_synchro_confirmation) | ||||
|         { | ||||
|             int32_t subframe_ID = d_nav.subframe_decoder(subframe);  // decode the subframe | ||||
|             int32_t subframe_ID = d_nav.subframe_decoder(subframe.data());  // decode the subframe | ||||
|             if (subframe_ID > 0 and subframe_ID < 6) | ||||
|                 { | ||||
|                     std::cout << "New GPS NAV message received in channel " << this->d_channel << ": " | ||||
|   | ||||
| @@ -182,7 +182,7 @@ int gps_l5_telemetry_decoder_gs::general_work(int noutput_items __attribute__((u | ||||
|             // Expand packet bits to bitsets. Notice the reverse order of the bits sequence, required by the CNAV message decoder | ||||
|             for (uint32_t i = 0; i < GPS_L5_CNAV_DATA_PAGE_BITS; i++) | ||||
|                 { | ||||
|                     raw_bits[GPS_L5_CNAV_DATA_PAGE_BITS - 1 - i] = ((msg.raw_msg[i / 8] >> (7 - i % 8)) & 1u); | ||||
|                     raw_bits[GPS_L5_CNAV_DATA_PAGE_BITS - 1 - i] = ((msg.raw_msg[i / 8] >> (7 - i % 8)) & 1U); | ||||
|                 } | ||||
|  | ||||
|             d_CNAV_Message.decode_page(raw_bits); | ||||
|   | ||||
| @@ -34,6 +34,7 @@ | ||||
| #include <glog/logging.h> | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <pmt/pmt_sugar.h>  // for mp | ||||
| #include <array> | ||||
| #include <cmath>      // for abs | ||||
| #include <exception>  // for exception | ||||
| #include <iomanip>    // for operator<<, setw | ||||
| @@ -130,7 +131,7 @@ void sbas_l1_telemetry_decoder_gs::Sample_Aligner::reset() | ||||
|  */ | ||||
| bool sbas_l1_telemetry_decoder_gs::Sample_Aligner::get_symbols(const std::vector<double> &samples, std::vector<double> &symbols) | ||||
| { | ||||
|     double smpls[3] = {}; | ||||
|     std::array<double, 3> smpls{}; | ||||
|     double corr_diff; | ||||
|     bool stand_by = true; | ||||
|     double sym; | ||||
| @@ -191,12 +192,10 @@ sbas_l1_telemetry_decoder_gs::Symbol_Aligner_And_Decoder::Symbol_Aligner_And_Dec | ||||
|     // convolutional code properties | ||||
|     d_KK = 7; | ||||
|     const int32_t nn = 2; | ||||
|     int32_t g_encoder[nn]; | ||||
|     g_encoder[0] = 121; | ||||
|     g_encoder[1] = 91; | ||||
|     std::array<int32_t, nn> g_encoder{121, 91}; | ||||
|  | ||||
|     d_vd1 = new Viterbi_Decoder(g_encoder, d_KK, nn); | ||||
|     d_vd2 = new Viterbi_Decoder(g_encoder, d_KK, nn); | ||||
|     d_vd1 = new Viterbi_Decoder(g_encoder.data(), d_KK, nn); | ||||
|     d_vd2 = new Viterbi_Decoder(g_encoder.data(), d_KK, nn); | ||||
|     d_past_symbol = 0; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -41,6 +41,7 @@ | ||||
| #include "dll_pll_conf.h" | ||||
| #include "gnss_sdr_flags.h" | ||||
| #include <glog/logging.h> | ||||
| #include <array> | ||||
|  | ||||
|  | ||||
| BeidouB1iDllPllTracking::BeidouB1iDllPllTracking( | ||||
| @@ -149,8 +150,8 @@ BeidouB1iDllPllTracking::BeidouB1iDllPllTracking( | ||||
|     trk_param.very_early_late_space_narrow_chips = 0.0; | ||||
|     trk_param.track_pilot = false; | ||||
|     trk_param.system = 'C'; | ||||
|     char sig_[3] = "B1"; | ||||
|     std::memcpy(trk_param.signal, sig_, 3); | ||||
|     std::array<char, 3> sig_{'B', '1', '\0'}; | ||||
|     std::memcpy(trk_param.signal, sig_.data(), 3); | ||||
|  | ||||
|     trk_param.cn0_samples = configuration->property(role + ".cn0_samples", trk_param.cn0_samples); | ||||
|     trk_param.cn0_min = configuration->property(role + ".cn0_min", trk_param.cn0_min); | ||||
|   | ||||
| @@ -41,6 +41,7 @@ | ||||
| #include "dll_pll_conf.h" | ||||
| #include "gnss_sdr_flags.h" | ||||
| #include <glog/logging.h> | ||||
| #include <array> | ||||
|  | ||||
| using google::LogMessage; | ||||
|  | ||||
| @@ -154,8 +155,8 @@ BeidouB3iDllPllTracking::BeidouB3iDllPllTracking( | ||||
|     trk_param.very_early_late_space_chips = 0.0; | ||||
|     trk_param.very_early_late_space_narrow_chips = 0.0; | ||||
|     trk_param.system = 'C'; | ||||
|     char sig_[3] = "B3"; | ||||
|     std::memcpy(trk_param.signal, sig_, 3); | ||||
|     std::array<char, 3> sig_{'B', '3', '\0'}; | ||||
|     std::memcpy(trk_param.signal, sig_.data(), 3); | ||||
|     trk_param.cn0_samples = configuration->property(role + ".cn0_samples", trk_param.cn0_samples); | ||||
|     trk_param.cn0_min = configuration->property(role + ".cn0_min", trk_param.cn0_min); | ||||
|     trk_param.max_code_lock_fail = configuration->property(role + ".max_lock_fail", trk_param.max_code_lock_fail); | ||||
|   | ||||
| @@ -41,7 +41,7 @@ | ||||
| #include "dll_pll_conf.h" | ||||
| #include "gnss_sdr_flags.h" | ||||
| #include <glog/logging.h> | ||||
|  | ||||
| #include <array> | ||||
|  | ||||
| GalileoE1DllPllVemlTracking::GalileoE1DllPllVemlTracking( | ||||
|     ConfigurationInterface* configuration, const std::string& role, | ||||
| @@ -159,8 +159,8 @@ GalileoE1DllPllVemlTracking::GalileoE1DllPllVemlTracking( | ||||
|     int vector_length = std::round(fs_in / (GALILEO_E1_CODE_CHIP_RATE_HZ / GALILEO_E1_B_CODE_LENGTH_CHIPS)); | ||||
|     trk_param.vector_length = vector_length; | ||||
|     trk_param.system = 'E'; | ||||
|     char sig_[3] = "1B"; | ||||
|     std::memcpy(trk_param.signal, sig_, 3); | ||||
|     std::array<char, 3> sig_{'1', 'B', '\0'}; | ||||
|     std::memcpy(trk_param.signal, sig_.data(), 3); | ||||
|     trk_param.cn0_samples = configuration->property(role + ".cn0_samples", trk_param.cn0_samples); | ||||
|     trk_param.cn0_min = configuration->property(role + ".cn0_min", trk_param.cn0_min); | ||||
|     trk_param.max_code_lock_fail = configuration->property(role + ".max_lock_fail", trk_param.max_code_lock_fail); | ||||
|   | ||||
| @@ -44,9 +44,10 @@ | ||||
| #include "gnss_synchro.h" | ||||
| #include <glog/logging.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cmath>     // for round | ||||
| #include <cstring>   // for memcpy | ||||
| #include <iostream>  // for operator<<, | ||||
| #include <iostream>  // for operator<< | ||||
|  | ||||
| // the following flags are FPGA-specific and they are using arrange the values of the local code in the way the FPGA | ||||
| // expects. This arrangement is done in the initialisation to avoid consuming unnecessary clock cycles during tracking. | ||||
| @@ -171,8 +172,8 @@ GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga( | ||||
|     int32_t vector_length = std::round(fs_in / (GALILEO_E1_CODE_CHIP_RATE_HZ / GALILEO_E1_B_CODE_LENGTH_CHIPS)); | ||||
|     trk_param_fpga.vector_length = vector_length; | ||||
|     trk_param_fpga.system = 'E'; | ||||
|     char sig_[3] = "1B"; | ||||
|     std::memcpy(trk_param_fpga.signal, sig_, 3); | ||||
|     std::array<char, 3> sig_{'1', 'B', '\0'}; | ||||
|     std::memcpy(trk_param_fpga.signal, sig_.data(), 3); | ||||
|     int32_t cn0_samples = configuration->property(role + ".cn0_samples", 20); | ||||
|     if (FLAGS_cn0_samples != 20) | ||||
|         { | ||||
|   | ||||
| @@ -40,7 +40,7 @@ | ||||
| #include "dll_pll_conf.h" | ||||
| #include "gnss_sdr_flags.h" | ||||
| #include <glog/logging.h> | ||||
|  | ||||
| #include <array> | ||||
|  | ||||
| GalileoE5aDllPllTracking::GalileoE5aDllPllTracking( | ||||
|     ConfigurationInterface* configuration, const std::string& role, | ||||
| @@ -156,8 +156,8 @@ GalileoE5aDllPllTracking::GalileoE5aDllPllTracking( | ||||
|     trk_param.very_early_late_space_chips = 0.0; | ||||
|     trk_param.very_early_late_space_narrow_chips = 0.0; | ||||
|     trk_param.system = 'E'; | ||||
|     char sig_[3] = "5X"; | ||||
|     std::memcpy(trk_param.signal, sig_, 3); | ||||
|     std::array<char, 3> sig_{'5', 'X', '\0'}; | ||||
|     std::memcpy(trk_param.signal, sig_.data(), 3); | ||||
|     trk_param.cn0_samples = configuration->property(role + ".cn0_samples", trk_param.cn0_samples); | ||||
|     trk_param.cn0_min = configuration->property(role + ".cn0_min", trk_param.cn0_min); | ||||
|     trk_param.max_code_lock_fail = configuration->property(role + ".max_lock_fail", trk_param.max_code_lock_fail); | ||||
|   | ||||
| @@ -40,6 +40,7 @@ | ||||
| #include <glog/logging.h> | ||||
| #include <gnuradio/gr_complex.h>  // for gr_complex | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cmath>  // for round | ||||
| #include <complex> | ||||
| #include <cstring>  // for memcpy | ||||
| @@ -165,8 +166,8 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga( | ||||
|     trk_param_fpga.very_early_late_space_chips = 0.0; | ||||
|     trk_param_fpga.very_early_late_space_narrow_chips = 0.0; | ||||
|     trk_param_fpga.system = 'E'; | ||||
|     char sig_[3] = "5X"; | ||||
|     std::memcpy(trk_param_fpga.signal, sig_, 3); | ||||
|     std::array<char, 3> sig_{'5', 'X', '\0'}; | ||||
|     std::memcpy(trk_param_fpga.signal, sig_.data(), 3); | ||||
|     int32_t cn0_samples = configuration->property(role + ".cn0_samples", 20); | ||||
|     if (FLAGS_cn0_samples != 20) | ||||
|         { | ||||
|   | ||||
| @@ -42,7 +42,7 @@ | ||||
| #include "dll_pll_conf.h" | ||||
| #include "gnss_sdr_flags.h" | ||||
| #include <glog/logging.h> | ||||
|  | ||||
| #include <array> | ||||
|  | ||||
| GpsL1CaDllPllTracking::GpsL1CaDllPllTracking( | ||||
|     ConfigurationInterface* configuration, const std::string& role, | ||||
| @@ -162,8 +162,8 @@ GpsL1CaDllPllTracking::GpsL1CaDllPllTracking( | ||||
|     trk_param.very_early_late_space_narrow_chips = 0.0; | ||||
|     trk_param.track_pilot = false; | ||||
|     trk_param.system = 'G'; | ||||
|     char sig_[3] = "1C"; | ||||
|     std::memcpy(trk_param.signal, sig_, 3); | ||||
|     std::array<char, 3> sig_{'1', 'C', '\0'}; | ||||
|     std::memcpy(trk_param.signal, sig_.data(), 3); | ||||
|     trk_param.cn0_samples = configuration->property(role + ".cn0_samples", trk_param.cn0_samples); | ||||
|     trk_param.cn0_min = configuration->property(role + ".cn0_min", trk_param.cn0_min); | ||||
|     trk_param.max_code_lock_fail = configuration->property(role + ".max_lock_fail", trk_param.max_code_lock_fail); | ||||
|   | ||||
| @@ -44,6 +44,7 @@ | ||||
| #include "gps_sdr_signal_processing.h" | ||||
| #include <glog/logging.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cmath>    // for round | ||||
| #include <cstring>  // for memcpy | ||||
| #include <iostream> | ||||
| @@ -173,8 +174,8 @@ GpsL1CaDllPllTrackingFpga::GpsL1CaDllPllTrackingFpga( | ||||
|     trk_param_fpga.very_early_late_space_narrow_chips = 0.0; | ||||
|     trk_param_fpga.track_pilot = false; | ||||
|     trk_param_fpga.system = 'G'; | ||||
|     char sig_[3] = "1C"; | ||||
|     std::memcpy(trk_param_fpga.signal, sig_, 3); | ||||
|     std::array<char, 3> sig_{'1', 'C', '\0'}; | ||||
|     std::memcpy(trk_param_fpga.signal, sig_.data(), 3); | ||||
|     int32_t cn0_samples = configuration->property(role + ".cn0_samples", 20); | ||||
|     if (FLAGS_cn0_samples != 20) | ||||
|         { | ||||
|   | ||||
| @@ -41,7 +41,7 @@ | ||||
| #include "dll_pll_conf.h" | ||||
| #include "gnss_sdr_flags.h" | ||||
| #include <glog/logging.h> | ||||
|  | ||||
| #include <array> | ||||
|  | ||||
| GpsL2MDllPllTracking::GpsL2MDllPllTracking( | ||||
|     ConfigurationInterface* configuration, const std::string& role, | ||||
| @@ -138,8 +138,8 @@ GpsL2MDllPllTracking::GpsL2MDllPllTracking( | ||||
|     trk_param.pll_bw_narrow_hz = 0.0; | ||||
|     trk_param.dll_bw_narrow_hz = 0.0; | ||||
|     trk_param.system = 'G'; | ||||
|     char sig_[3] = "2S"; | ||||
|     std::memcpy(trk_param.signal, sig_, 3); | ||||
|     std::array<char, 3> sig_{'2', 'S', '\0'}; | ||||
|     std::memcpy(trk_param.signal, sig_.data(), 3); | ||||
|     trk_param.cn0_samples = configuration->property(role + ".cn0_samples", trk_param.cn0_samples); | ||||
|     trk_param.cn0_min = configuration->property(role + ".cn0_min", trk_param.cn0_min); | ||||
|     trk_param.max_code_lock_fail = configuration->property(role + ".max_lock_fail", trk_param.max_code_lock_fail); | ||||
|   | ||||
| @@ -45,11 +45,11 @@ | ||||
| #include "gps_l2c_signal.h" | ||||
| #include <glog/logging.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cmath>    // for round | ||||
| #include <cstring>  // for memcpy | ||||
| #include <iostream> | ||||
|  | ||||
|  | ||||
| #define NUM_PRNs 32 | ||||
|  | ||||
|  | ||||
| @@ -98,8 +98,8 @@ GpsL2MDllPllTrackingFpga::GpsL2MDllPllTrackingFpga( | ||||
|     trk_param_fpga.pll_bw_narrow_hz = 0.0; | ||||
|     trk_param_fpga.dll_bw_narrow_hz = 0.0; | ||||
|     trk_param_fpga.system = 'G'; | ||||
|     char sig_[3] = "2S"; | ||||
|     std::memcpy(trk_param_fpga.signal, sig_, 3); | ||||
|     std::array<char, 3> sig_{'2', 'S', '\0'}; | ||||
|     std::memcpy(trk_param_fpga.signal, sig_.data(), 3); | ||||
|     int cn0_samples = configuration->property(role + ".cn0_samples", 20); | ||||
|     if (FLAGS_cn0_samples != 20) cn0_samples = FLAGS_cn0_samples; | ||||
|     trk_param_fpga.cn0_samples = cn0_samples; | ||||
|   | ||||
| @@ -41,7 +41,7 @@ | ||||
| #include "dll_pll_conf.h" | ||||
| #include "gnss_sdr_flags.h" | ||||
| #include <glog/logging.h> | ||||
|  | ||||
| #include <array> | ||||
|  | ||||
| GpsL5DllPllTracking::GpsL5DllPllTracking( | ||||
|     ConfigurationInterface* configuration, const std::string& role, | ||||
| @@ -157,8 +157,8 @@ GpsL5DllPllTracking::GpsL5DllPllTracking( | ||||
|     trk_param.very_early_late_space_chips = 0.0; | ||||
|     trk_param.very_early_late_space_narrow_chips = 0.0; | ||||
|     trk_param.system = 'G'; | ||||
|     char sig_[3] = "L5"; | ||||
|     std::memcpy(trk_param.signal, sig_, 3); | ||||
|     std::array<char, 3> sig_{'L', '5', '\0'}; | ||||
|     std::memcpy(trk_param.signal, sig_.data(), 3); | ||||
|  | ||||
|     trk_param.cn0_samples = configuration->property(role + ".cn0_samples", trk_param.cn0_samples); | ||||
|     trk_param.cn0_min = configuration->property(role + ".cn0_min", trk_param.cn0_min); | ||||
|   | ||||
| @@ -46,6 +46,7 @@ | ||||
| #include "gps_l5_signal.h" | ||||
| #include <glog/logging.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cmath>    // for round | ||||
| #include <cstring>  // for memcpy | ||||
| #include <iostream> | ||||
| @@ -172,8 +173,8 @@ GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga( | ||||
|     trk_param_fpga.very_early_late_space_chips = 0.0; | ||||
|     trk_param_fpga.very_early_late_space_narrow_chips = 0.0; | ||||
|     trk_param_fpga.system = 'G'; | ||||
|     char sig_[3] = "L5"; | ||||
|     std::memcpy(trk_param_fpga.signal, sig_, 3); | ||||
|     std::array<char, 3> sig_{'L', '5', '\0'}; | ||||
|     std::memcpy(trk_param_fpga.signal, sig_.data(), 3); | ||||
|     int32_t cn0_samples = configuration->property(role + ".cn0_samples", 20); | ||||
|     if (FLAGS_cn0_samples != 20) | ||||
|         { | ||||
|   | ||||
| @@ -61,13 +61,13 @@ | ||||
| #include <pmt/pmt_sugar.h>           // for mp | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <algorithm>  // for fill_n | ||||
| #include <array> | ||||
| #include <cmath>      // for fmod, round, floor | ||||
| #include <exception>  // for exception | ||||
| #include <gsl/gsl> | ||||
| #include <iostream>  // for cout, cerr | ||||
| #include <map> | ||||
| #include <numeric> | ||||
| #include <vector> | ||||
|  | ||||
| #if HAS_STD_FILESYSTEM | ||||
| #if HAS_STD_FILESYSTEM_EXPERIMENTAL | ||||
| @@ -1437,92 +1437,92 @@ int32_t dll_pll_veml_tracking::save_matfile() | ||||
|     matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73); | ||||
|     if (reinterpret_cast<int64_t *>(matfp) != nullptr) | ||||
|         { | ||||
|             size_t dims[2] = {1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_VE", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_VE.data(), 0); | ||||
|             std::array<size_t, 2> dims{1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_VE", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_VE.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_E.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_E.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_P.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_P.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_L.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_L.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_VL", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_VL.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_VL", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_VL.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_I.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_I.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_Q.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_Q.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims, PRN_start_sample_count.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims.data(), PRN_start_sample_count.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, acc_carrier_phase_rad.data(), 0); | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), acc_carrier_phase_rad.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carrier_doppler_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carrier_doppler_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_doppler_rate_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carrier_doppler_rate_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_doppler_rate_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carrier_doppler_rate_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, code_freq_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), code_freq_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_freq_rate_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, code_freq_rate_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_freq_rate_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), code_freq_rate_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carr_error_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carr_error_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carr_error_filt_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carr_error_filt_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, code_error_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), code_error_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, code_error_filt_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), code_error_filt_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, CN0_SNV_dB_Hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), CN0_SNV_dB_Hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carrier_lock_test.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carrier_lock_test.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, aux1.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), aux1.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux2.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux2.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims, PRN.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims.data(), PRN.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|         } | ||||
|   | ||||
| @@ -52,13 +52,13 @@ | ||||
| #include <pmt/pmt_sugar.h>  // for mp | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <algorithm> | ||||
| #include <array> | ||||
| #include <cmath> | ||||
| #include <complex> | ||||
| #include <cstdlib>  // for abs, size_t | ||||
| #include <exception> | ||||
| #include <iostream> | ||||
| #include <map> | ||||
| #include <vector> | ||||
|  | ||||
| #if HAS_STD_FILESYSTEM | ||||
| #if HAS_STD_FILESYSTEM_EXPERIMENTAL | ||||
| @@ -1105,92 +1105,92 @@ int32_t dll_pll_veml_tracking_fpga::save_matfile() | ||||
|     matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73); | ||||
|     if (reinterpret_cast<int64_t *>(matfp) != nullptr) | ||||
|         { | ||||
|             size_t dims[2] = {1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_VE", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_VE.data(), 0); | ||||
|             std::array<size_t, 2> dims{1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_VE", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_VE.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_E.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_E.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_P.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_P.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_L.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_L.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_VL", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_VL.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_VL", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_VL.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_I.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_I.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_Q.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_Q.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims, PRN_start_sample_count.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims.data(), PRN_start_sample_count.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, acc_carrier_phase_rad.data(), 0); | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), acc_carrier_phase_rad.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carrier_doppler_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carrier_doppler_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_doppler_rate_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carrier_doppler_rate_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_doppler_rate_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carrier_doppler_rate_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, code_freq_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), code_freq_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_freq_rate_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, code_freq_rate_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_freq_rate_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), code_freq_rate_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carr_error_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carr_error_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carr_error_filt_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carr_error_filt_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, code_error_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), code_error_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, code_error_filt_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), code_error_filt_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, CN0_SNV_dB_Hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), CN0_SNV_dB_Hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carrier_lock_test.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carrier_lock_test.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, aux1.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), aux1.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux2.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux2.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims, PRN.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims.data(), PRN.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|         } | ||||
|   | ||||
| @@ -48,6 +48,7 @@ | ||||
| #include <matio.h> | ||||
| #include <pmt/pmt.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cmath> | ||||
| #include <exception> | ||||
| #include <iostream> | ||||
| @@ -447,76 +448,76 @@ int32_t glonass_l1_ca_dll_pll_c_aid_tracking_cc::save_matfile() | ||||
|     matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73); | ||||
|     if (reinterpret_cast<int64_t *>(matfp) != nullptr) | ||||
|         { | ||||
|             size_t dims[2] = {1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_E.data(), 0); | ||||
|             std::array<size_t, 2> dims{1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_E.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_P.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_P.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_L.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_L.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_I.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_I.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_Q.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_Q.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims, PRN_start_sample_count.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims.data(), PRN_start_sample_count.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, acc_carrier_phase_rad.data(), 0); | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), acc_carrier_phase_rad.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_doppler_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carrier_doppler_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_freq_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_freq_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carr_error_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_filt_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carr_error_filt_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_error_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_filt_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_error_filt_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, CN0_SNV_dB_Hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), CN0_SNV_dB_Hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_lock_test.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carrier_lock_test.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux1.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux1.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux2.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux2.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims, PRN.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims.data(), PRN.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|         } | ||||
|   | ||||
| @@ -47,6 +47,7 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <matio.h> | ||||
| #include <pmt/pmt.h> | ||||
| #include <array> | ||||
| #include <cmath> | ||||
| #include <exception> | ||||
| #include <iostream> | ||||
| @@ -395,76 +396,76 @@ int32_t glonass_l1_ca_dll_pll_c_aid_tracking_sc::save_matfile() | ||||
|     matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73); | ||||
|     if (reinterpret_cast<int64_t *>(matfp) != nullptr) | ||||
|         { | ||||
|             size_t dims[2] = {1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_E.data(), 0); | ||||
|             std::array<size_t, 2> dims{1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_E.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_P.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_P.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_L.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_L.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_I.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_I.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_Q.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_Q.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims, PRN_start_sample_count.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims.data(), PRN_start_sample_count.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, acc_carrier_phase_rad.data(), 0); | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), acc_carrier_phase_rad.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_doppler_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carrier_doppler_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_freq_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_freq_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carr_error_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_filt_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carr_error_filt_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_error_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_filt_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_error_filt_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, CN0_SNV_dB_Hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), CN0_SNV_dB_Hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_lock_test.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carrier_lock_test.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux1.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux1.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux2.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux2.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims, PRN.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims.data(), PRN.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|         } | ||||
|   | ||||
| @@ -46,13 +46,13 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <matio.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cmath> | ||||
| #include <exception> | ||||
| #include <iostream> | ||||
| #include <memory> | ||||
| #include <sstream> | ||||
| #include <utility> | ||||
| #include <vector> | ||||
|  | ||||
|  | ||||
| #define CN0_ESTIMATION_SAMPLES 10 | ||||
| @@ -400,76 +400,76 @@ int32_t Glonass_L1_Ca_Dll_Pll_Tracking_cc::save_matfile() | ||||
|     matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73); | ||||
|     if (reinterpret_cast<int64_t *>(matfp) != nullptr) | ||||
|         { | ||||
|             size_t dims[2] = {1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_E.data(), 0); | ||||
|             std::array<size_t, 2> dims{1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_E.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_P.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_P.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_L.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_L.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_I.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_I.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_Q.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_Q.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims, PRN_start_sample_count.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims.data(), PRN_start_sample_count.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, acc_carrier_phase_rad.data(), 0); | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), acc_carrier_phase_rad.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_doppler_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carrier_doppler_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_freq_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_freq_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carr_error_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_filt_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carr_error_filt_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_error_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_filt_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_error_filt_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, CN0_SNV_dB_Hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), CN0_SNV_dB_Hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_lock_test.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carrier_lock_test.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux1.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux1.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux2.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux2.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims, PRN.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims.data(), PRN.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|         } | ||||
|   | ||||
| @@ -46,13 +46,13 @@ | ||||
| #include <matio.h> | ||||
| #include <pmt/pmt.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cmath> | ||||
| #include <exception> | ||||
| #include <iostream> | ||||
| #include <memory> | ||||
| #include <sstream> | ||||
| #include <utility> | ||||
| #include <vector> | ||||
|  | ||||
| #define CN0_ESTIMATION_SAMPLES 10 | ||||
|  | ||||
| @@ -446,76 +446,76 @@ int32_t glonass_l2_ca_dll_pll_c_aid_tracking_cc::save_matfile() | ||||
|     matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73); | ||||
|     if (reinterpret_cast<int64_t *>(matfp) != nullptr) | ||||
|         { | ||||
|             size_t dims[2] = {1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_E.data(), 0); | ||||
|             std::array<size_t, 2> dims{1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_E.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_P.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_P.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_L.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_L.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_I.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_I.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_Q.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_Q.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims, PRN_start_sample_count.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims.data(), PRN_start_sample_count.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, acc_carrier_phase_rad.data(), 0); | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), acc_carrier_phase_rad.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_doppler_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carrier_doppler_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_freq_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_freq_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carr_error_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_filt_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carr_error_filt_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_error_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_filt_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_error_filt_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, CN0_SNV_dB_Hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), CN0_SNV_dB_Hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_lock_test.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carrier_lock_test.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux1.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux1.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux2.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux2.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims, PRN.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims.data(), PRN.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|         } | ||||
|   | ||||
| @@ -45,6 +45,7 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <matio.h> | ||||
| #include <pmt/pmt.h> | ||||
| #include <array> | ||||
| #include <cmath> | ||||
| #include <exception> | ||||
| #include <iostream> | ||||
| @@ -394,76 +395,76 @@ int32_t glonass_l2_ca_dll_pll_c_aid_tracking_sc::save_matfile() | ||||
|     matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73); | ||||
|     if (reinterpret_cast<int64_t *>(matfp) != nullptr) | ||||
|         { | ||||
|             size_t dims[2] = {1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_E.data(), 0); | ||||
|             std::array<size_t, 2> dims{1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_E.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_P.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_P.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_L.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_L.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_I.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_I.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_Q.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_Q.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims, PRN_start_sample_count.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims.data(), PRN_start_sample_count.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, acc_carrier_phase_rad.data(), 0); | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), acc_carrier_phase_rad.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_doppler_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carrier_doppler_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_freq_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_freq_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carr_error_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_filt_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carr_error_filt_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_error_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_filt_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_error_filt_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, CN0_SNV_dB_Hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), CN0_SNV_dB_Hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_lock_test.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carrier_lock_test.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux1.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux1.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux2.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux2.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims, PRN.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims.data(), PRN.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|         } | ||||
|   | ||||
| @@ -46,6 +46,7 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <matio.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cmath> | ||||
| #include <exception> | ||||
| #include <iostream> | ||||
| @@ -399,76 +400,76 @@ int32_t Glonass_L2_Ca_Dll_Pll_Tracking_cc::save_matfile() | ||||
|     matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73); | ||||
|     if (reinterpret_cast<int64_t *>(matfp) != nullptr) | ||||
|         { | ||||
|             size_t dims[2] = {1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_E.data(), 0); | ||||
|             std::array<size_t, 2> dims{1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_E.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_P.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_P.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_L.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_L.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_I.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_I.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_Q.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_Q.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims, PRN_start_sample_count.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims.data(), PRN_start_sample_count.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, acc_carrier_phase_rad.data(), 0); | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), acc_carrier_phase_rad.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_doppler_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carrier_doppler_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_freq_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_freq_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carr_error_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_filt_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carr_error_filt_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_error_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_filt_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), code_error_filt_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, CN0_SNV_dB_Hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), CN0_SNV_dB_Hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_lock_test.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), carrier_lock_test.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux1.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux1.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux2.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux2.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims, PRN.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims.data(), PRN.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|         } | ||||
|   | ||||
| @@ -47,6 +47,7 @@ | ||||
| #include <gnuradio/io_signature.h> | ||||
| #include <matio.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <array> | ||||
| #include <cmath> | ||||
| #include <exception> | ||||
| #include <gsl/gsl> | ||||
| @@ -54,7 +55,6 @@ | ||||
| #include <memory> | ||||
| #include <sstream> | ||||
| #include <utility> | ||||
| #include <vector> | ||||
|  | ||||
|  | ||||
| gps_l1_ca_kf_tracking_cc_sptr | ||||
| @@ -504,92 +504,92 @@ int32_t Gps_L1_Ca_Kf_Tracking_cc::save_matfile() | ||||
|     matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73); | ||||
|     if (reinterpret_cast<int64_t *>(matfp) != nullptr) | ||||
|         { | ||||
|             size_t dims[2] = {1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_VE", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_VE.data(), 0); | ||||
|             std::array<size_t, 2> dims{1, static_cast<size_t>(num_epoch)}; | ||||
|             matvar = Mat_VarCreate("abs_VE", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_VE.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_E.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_E.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_P.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_P.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_L.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_L.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("abs_VL", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_VL.data(), 0); | ||||
|             matvar = Mat_VarCreate("abs_VL", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), abs_VL.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_I.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_I.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_Q.data(), 0); | ||||
|             matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), Prompt_Q.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims, PRN_start_sample_count.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims.data(), PRN_start_sample_count.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, acc_carrier_phase_rad.data(), 0); | ||||
|             matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), acc_carrier_phase_rad.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carrier_doppler_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carrier_doppler_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_dopplerrate_hz2", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carrier_dopplerrate_hz2.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_dopplerrate_hz2", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carrier_dopplerrate_hz2.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, code_freq_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_freq_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), code_freq_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carr_error_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carr_error_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_noise_sigma2", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carr_noise_sigma2.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_noise_sigma2", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carr_noise_sigma2.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carr_error_filt_hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carr_error_filt_hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, code_error_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), code_error_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, code_error_filt_chips.data(), 0); | ||||
|             matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), code_error_filt_chips.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, CN0_SNV_dB_Hz.data(), 0); | ||||
|             matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), CN0_SNV_dB_Hz.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, carrier_lock_test.data(), 0); | ||||
|             matvar = Mat_VarCreate("carrier_lock_test", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), carrier_lock_test.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, aux1.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux1", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), aux1.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux2.data(), 0); | ||||
|             matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), aux2.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|  | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims, PRN.data(), 0); | ||||
|             matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims.data(), PRN.data(), 0); | ||||
|             Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|             Mat_VarFree(matvar); | ||||
|         } | ||||
|   | ||||
| @@ -32,7 +32,6 @@ | ||||
|  | ||||
| #include "dll_pll_conf.h" | ||||
| #include "gnss_sdr_flags.h" | ||||
| #include <cstring> | ||||
|  | ||||
| Dll_Pll_Conf::Dll_Pll_Conf() | ||||
| { | ||||
| @@ -72,6 +71,7 @@ Dll_Pll_Conf::Dll_Pll_Conf() | ||||
|     enable_doppler_correction = false; | ||||
|     track_pilot = false; | ||||
|     system = 'G'; | ||||
|     char sig_[3] = "1C"; | ||||
|     std::memcpy(signal, sig_, 3); | ||||
|     signal[0] = '1'; | ||||
|     signal[1] = 'C'; | ||||
|     signal[2] = '\0'; | ||||
| } | ||||
|   | ||||
| @@ -32,7 +32,6 @@ | ||||
|  | ||||
|  | ||||
| #include "dll_pll_conf_fpga.h" | ||||
| #include <cstring> | ||||
|  | ||||
| Dll_Pll_Conf_Fpga::Dll_Pll_Conf_Fpga() | ||||
| { | ||||
| @@ -68,8 +67,9 @@ Dll_Pll_Conf_Fpga::Dll_Pll_Conf_Fpga() | ||||
|     carrier_lock_th = 0.85; | ||||
|     track_pilot = false; | ||||
|     system = 'G'; | ||||
|     char sig_[3] = "1C"; | ||||
|     std::memcpy(signal, sig_, 3); | ||||
|     signal[0] = '1'; | ||||
|     signal[1] = 'C'; | ||||
|     signal[2] = '\0'; | ||||
|     device_name = "/dev/uio"; | ||||
|     device_base = 1U; | ||||
|     multicorr_type = 0U; | ||||
|   | ||||
| @@ -38,7 +38,6 @@ | ||||
| #include <glog/logging.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <cmath> | ||||
| #include <cstdio> | ||||
| #include <fcntl.h>  // for O_RDWR, O_RSYNC | ||||
| #include <string> | ||||
| #include <sys/mman.h>  // for PROT_READ, PROT_WRITE, MAP_SHARED | ||||
|   | ||||
| @@ -54,6 +54,7 @@ | ||||
|  */ | ||||
|  | ||||
| #include "ini.h" | ||||
| #include <array> | ||||
| #include <cctype> | ||||
| #include <fstream> | ||||
| #include <string> | ||||
| @@ -112,9 +113,9 @@ int ini_parse(const char* filename, | ||||
|     void* user) | ||||
| { | ||||
|     /* Uses a fair bit of stack (use heap instead if you need to) */ | ||||
|     char line[MAX_LINE]; | ||||
|     char section[MAX_SECTION] = ""; | ||||
|     char prev_name[MAX_NAME] = ""; | ||||
|     std::array<char, MAX_LINE> line{}; | ||||
|     std::array<char, MAX_SECTION> section{}; | ||||
|     std::array<char, MAX_NAME> prev_name{}; | ||||
|  | ||||
|     std::ifstream file; | ||||
|     char* start; | ||||
| @@ -147,14 +148,14 @@ int ini_parse(const char* filename, | ||||
|                     line[i] = read_line[i]; | ||||
|                 } | ||||
|             line[len_str] = '\0'; | ||||
|             start = lskip(rstrip(line)); | ||||
|             start = lskip(rstrip(line.data())); | ||||
|  | ||||
| #if INI_ALLOW_MULTILINE | ||||
|             if (*prev_name && *start && start > line) | ||||
|             if (prev_name.data() && *start && start > line.data()) | ||||
|                 { | ||||
|                     /* Non-black line with leading whitespace, treat as continuation | ||||
|                        of previous name's value (as per Python ConfigParser). */ | ||||
|                     if (!handler(user, section, prev_name, start) && !error) | ||||
|                     if (!handler(user, section.data(), prev_name.data(), start) && !error) | ||||
|                         { | ||||
|                             error = lineno; | ||||
|                         } | ||||
| @@ -168,8 +169,8 @@ int ini_parse(const char* filename, | ||||
|                     if (*end == ']') | ||||
|                         { | ||||
|                             *end = '\0'; | ||||
|                             strncpy0(section, start + 1, sizeof(section)); | ||||
|                             *prev_name = '\0'; | ||||
|                             strncpy0(section.data(), start + 1, sizeof(section)); | ||||
|                             prev_name[MAX_NAME - 1] = '\0'; | ||||
|                         } | ||||
|                     else if (!error) | ||||
|                         { | ||||
| @@ -194,8 +195,8 @@ int ini_parse(const char* filename, | ||||
|                             rstrip(value); | ||||
|  | ||||
|                             /* Valid name=value pair found, call handler */ | ||||
|                             strncpy0(prev_name, name, sizeof(prev_name)); | ||||
|                             if (!handler(user, section, name, value) && !error) | ||||
|                             strncpy0(prev_name.data(), name, sizeof(prev_name)); | ||||
|                             if (!handler(user, section.data(), name, value) && !error) | ||||
|                                 { | ||||
|                                     error = lineno; | ||||
|                                 } | ||||
|   | ||||
| @@ -326,11 +326,19 @@ static int server_connect(char *server) | ||||
|                 } | ||||
|             if (connect(fd, aip->ai_addr, aip->ai_addrlen) != 0) | ||||
|                 { | ||||
|                     freeaddrinfo(aip); | ||||
|                     if (close(fd) != 0) | ||||
|                         { | ||||
|                             // avoid warning | ||||
|                         } | ||||
|                     return -1; | ||||
|                 } | ||||
|             else | ||||
|                 { | ||||
|                     break; | ||||
|                 } | ||||
|  | ||||
|         } | ||||
|     freeaddrinfo(aip); | ||||
|     return fd; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -33,6 +33,7 @@ | ||||
| #include "control_message_factory.h" | ||||
| #include "pvt_interface.h" | ||||
| #include <boost/asio.hpp> | ||||
| #include <array> | ||||
| #include <cmath>      // for isnan | ||||
| #include <exception>  // for exception | ||||
| #include <iomanip>    // for setprecision | ||||
| @@ -151,10 +152,10 @@ std::string TcpCmdInterface::status(const std::vector<std::string> &commandLine | ||||
|             &UTC_time) == true) | ||||
|         { | ||||
|             struct tm tstruct = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, nullptr}; | ||||
|             char buf1[80]; | ||||
|             std::array<char, 80> buf1{}; | ||||
|             tstruct = *gmtime(&UTC_time); | ||||
|             strftime(buf1, sizeof(buf1), "%d/%m/%Y %H:%M:%S", &tstruct); | ||||
|             std::string str_time = std::string(buf1); | ||||
|             strftime(buf1.data(), sizeof(buf1), "%d/%m/%Y %H:%M:%S", &tstruct); | ||||
|             std::string str_time = std::string(buf1.data()); | ||||
|             str_stream << "- Receiver UTC Time: " << str_time << std::endl; | ||||
|             str_stream << std::setprecision(9); | ||||
|             str_stream << "- Receiver Position WGS84 [Lat, Long, H]: " | ||||
|   | ||||
| @@ -91,7 +91,7 @@ bool operator==(const Gnss_Satellite& sat1, const Gnss_Satellite& sat2) | ||||
|  | ||||
|  | ||||
| // Copy constructor | ||||
| Gnss_Satellite::Gnss_Satellite(Gnss_Satellite&& other) | ||||
| Gnss_Satellite::Gnss_Satellite(Gnss_Satellite&& other) noexcept | ||||
| { | ||||
|     *this = other; | ||||
| } | ||||
| @@ -113,14 +113,14 @@ Gnss_Satellite& Gnss_Satellite::operator=(const Gnss_Satellite& rhs) | ||||
|  | ||||
|  | ||||
| // Move constructor | ||||
| Gnss_Satellite::Gnss_Satellite(const Gnss_Satellite& other) | ||||
| Gnss_Satellite::Gnss_Satellite(const Gnss_Satellite& other) noexcept | ||||
| { | ||||
|     *this = std::move(other); | ||||
|     *this = other; | ||||
| } | ||||
|  | ||||
|  | ||||
| // Move assignment operator | ||||
| Gnss_Satellite& Gnss_Satellite::operator=(Gnss_Satellite&& other) | ||||
| Gnss_Satellite& Gnss_Satellite::operator=(Gnss_Satellite&& other) noexcept | ||||
| { | ||||
|     if (this != &other) | ||||
|         { | ||||
|   | ||||
| @@ -62,10 +62,10 @@ public: | ||||
|     friend bool operator==(const Gnss_Satellite& /*sat1*/, const Gnss_Satellite& /*sat2*/);  //!< operator== for comparison | ||||
|     friend std::ostream& operator<<(std::ostream& /*out*/, const Gnss_Satellite& /*sat*/);   //!< operator<< for pretty printing | ||||
|  | ||||
|     Gnss_Satellite(Gnss_Satellite&& other);             //!< Copy constructor | ||||
|     Gnss_Satellite(Gnss_Satellite&& other) noexcept;             //!< Copy constructor | ||||
|     Gnss_Satellite& operator=(const Gnss_Satellite&);            //!< Copy assignment operator | ||||
|     Gnss_Satellite(const Gnss_Satellite& other);        //!< Move constructor | ||||
|     Gnss_Satellite& operator=(Gnss_Satellite&& other);  //!< Move assignment operator | ||||
|     Gnss_Satellite(const Gnss_Satellite& other) noexcept;        //!< Move constructor | ||||
|     Gnss_Satellite& operator=(Gnss_Satellite&& other) noexcept;  //!< Move assignment operator | ||||
|  | ||||
| private: | ||||
|     uint32_t PRN{}; | ||||
|   | ||||
| @@ -744,6 +744,16 @@ add_executable(matio_test | ||||
|     ${CMAKE_CURRENT_SOURCE_DIR}/unit-tests/arithmetic/matio_test.cc | ||||
| ) | ||||
|  | ||||
| if(${FILESYSTEM_FOUND}) | ||||
|     target_compile_definitions(matio_test PRIVATE -DHAS_STD_FILESYSTEM=1) | ||||
|     if(${find_experimental}) | ||||
|         target_compile_definitions(matio_test PRIVATE -DHAS_STD_FILESYSTEM_EXPERIMENTAL=1) | ||||
|     endif() | ||||
|     target_link_libraries(matio_test PRIVATE std::filesystem) | ||||
| else() | ||||
|     target_link_libraries(matio_test PRIVATE Boost::filesystem Boost::system) | ||||
| endif() | ||||
|  | ||||
| target_link_libraries(matio_test | ||||
|     PUBLIC | ||||
|         Gflags::gflags | ||||
|   | ||||
| @@ -49,7 +49,6 @@ | ||||
|  | ||||
| #include <gflags/gflags.h> | ||||
| #include <cmath> | ||||
| #include <cstdio> | ||||
| #include <cstdlib>  // for getenv() | ||||
| #include <cstring>  // for strncpy | ||||
| #include <fstream> | ||||
|   | ||||
| @@ -52,6 +52,7 @@ | ||||
| #include <gtest/gtest.h> | ||||
| #include <matio.h> | ||||
| #include <algorithm> | ||||
| #include <array> | ||||
| #include <chrono> | ||||
| #include <cmath> | ||||
| #include <fstream> | ||||
| @@ -361,16 +362,16 @@ int PositionSystemTest::run_receiver() | ||||
|     std::this_thread::sleep_for(std::chrono::milliseconds(2000)); | ||||
|     FILE* fp; | ||||
|     std::string argum2 = std::string("/bin/ls *kml | tail -1"); | ||||
|     char buffer[1035]; | ||||
|     std::array<char, 1035> buffer{}; | ||||
|     fp = popen(&argum2[0], "r"); | ||||
|     if (fp == nullptr) | ||||
|         { | ||||
|             std::cout << "Failed to run command: " << argum2 << std::endl; | ||||
|             return -1; | ||||
|         } | ||||
|     while (fgets(buffer, sizeof(buffer), fp) != nullptr) | ||||
|     while (fgets(buffer.data(), sizeof(buffer), fp) != nullptr) | ||||
|         { | ||||
|             std::string aux = std::string(buffer); | ||||
|             std::string aux = std::string(buffer.data()); | ||||
|             EXPECT_EQ(aux.empty(), false); | ||||
|             PositionSystemTest::generated_kml_file = aux.erase(aux.length() - 1, 1); | ||||
|         } | ||||
| @@ -392,12 +393,12 @@ bool PositionSystemTest::save_mat_xy(std::vector<double>* x, std::vector<double> | ||||
|             matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT5); | ||||
|             if (reinterpret_cast<int64_t*>(matfp) != nullptr) | ||||
|                 { | ||||
|                     size_t dims[2] = {1, x->size()}; | ||||
|                     matvar = Mat_VarCreate("x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, &x[0], 0); | ||||
|                     std::array<size_t, 2> dims{1, x->size()}; | ||||
|                     matvar = Mat_VarCreate("x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), &x[0], 0); | ||||
|                     Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|                     Mat_VarFree(matvar); | ||||
|  | ||||
|                     matvar = Mat_VarCreate("y", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, &y[0], 0); | ||||
|                     matvar = Mat_VarCreate("y", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), &y[0], 0); | ||||
|                     Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|                     Mat_VarFree(matvar); | ||||
|                 } | ||||
| @@ -415,6 +416,7 @@ bool PositionSystemTest::save_mat_xy(std::vector<double>* x, std::vector<double> | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| bool PositionSystemTest::save_mat_x(std::vector<double>* x, std::string filename) | ||||
| { | ||||
|     try | ||||
| @@ -427,8 +429,8 @@ bool PositionSystemTest::save_mat_x(std::vector<double>* x, std::string filename | ||||
|             matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT5); | ||||
|             if (reinterpret_cast<int64_t*>(matfp) != nullptr) | ||||
|                 { | ||||
|                     size_t dims[2] = {1, x->size()}; | ||||
|                     matvar = Mat_VarCreate("x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, &x[0], 0); | ||||
|                     std::array<size_t, 2> dims{1, x->size()}; | ||||
|                     matvar = Mat_VarCreate("x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), &x[0], 0); | ||||
|                     Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
|                     Mat_VarFree(matvar); | ||||
|                 } | ||||
| @@ -446,6 +448,7 @@ bool PositionSystemTest::save_mat_x(std::vector<double>* x, std::string filename | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| void PositionSystemTest::check_results() | ||||
| { | ||||
|     arma::mat R_eb_e;    //ECEF position (x,y,z) estimation in the Earth frame (Nx3) | ||||
| @@ -931,6 +934,7 @@ void PositionSystemTest::print_results(const arma::mat& R_eb_enu) | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| TEST_F(PositionSystemTest /*unused*/, Position_system_test /*unused*/) | ||||
| { | ||||
|     if (FLAGS_config_file_ptest.empty()) | ||||
|   | ||||
| @@ -33,7 +33,26 @@ | ||||
| #include <gnuradio/gr_complex.h> | ||||
| #include <gtest/gtest.h> | ||||
| #include <matio.h> | ||||
| #include <cstdio> | ||||
| #include <array> | ||||
|  | ||||
| #if HAS_STD_FILESYSTEM | ||||
| #include <system_error> | ||||
| namespace errorlib = std; | ||||
| #if HAS_STD_FILESYSTEM_EXPERIMENTAL | ||||
| #include <experimental/filesystem> | ||||
| namespace fs = std::experimental::filesystem; | ||||
| #else | ||||
| #include <filesystem> | ||||
| namespace fs = std::filesystem; | ||||
| #endif | ||||
| #else | ||||
| #include <boost/filesystem/operations.hpp>   // for create_directories, exists | ||||
| #include <boost/filesystem/path.hpp>         // for path, operator<< | ||||
| #include <boost/filesystem/path_traits.hpp>  // for filesystem | ||||
| #include <boost/system/error_code.hpp>       // for error_code | ||||
| namespace fs = boost::filesystem; | ||||
| namespace errorlib = boost::system; | ||||
| #endif | ||||
|  | ||||
| TEST(MatioTest, WriteAndReadDoubles) | ||||
| { | ||||
| @@ -44,9 +63,9 @@ TEST(MatioTest, WriteAndReadDoubles) | ||||
|     matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73); | ||||
|     ASSERT_FALSE(reinterpret_cast<long *>(matfp) == nullptr) << "Error creating .mat file"; | ||||
|  | ||||
|     double x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; | ||||
|     size_t dims[2] = {10, 1}; | ||||
|     matvar = Mat_VarCreate("x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, x, 0); | ||||
|     std::array<double, 10> x{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; | ||||
|     std::array<size_t, 2> dims{10, 1}; | ||||
|     matvar = Mat_VarCreate("x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims.data(), x.data(), 0); | ||||
|     ASSERT_FALSE(reinterpret_cast<long *>(matvar) == nullptr) << "Error creating variable for ’x’"; | ||||
|  | ||||
|     Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
| @@ -73,7 +92,8 @@ TEST(MatioTest, WriteAndReadDoubles) | ||||
|             EXPECT_DOUBLE_EQ(x[i], x_read[i]); | ||||
|         } | ||||
|     Mat_VarFree(matvar_read); | ||||
|     ASSERT_EQ(remove(filename.c_str()), 0); | ||||
|     errorlib::error_code ec; | ||||
|     ASSERT_EQ(fs::remove(fs::path(filename), ec), true); | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -86,10 +106,10 @@ TEST(MatioTest, WriteAndReadGrComplex) | ||||
|     matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73); | ||||
|     ASSERT_FALSE(reinterpret_cast<long *>(matfp) == nullptr) << "Error creating .mat file"; | ||||
|  | ||||
|     std::vector<gr_complex> x_v = {{1, 10}, {2, 9}, {3, 8}, {4, 7}, {5, 6}, {6, -5}, {7, -4}, {8, 3}, {9, 2}, {10, 1}}; | ||||
|     const std::vector<gr_complex> x_v = {{1, 10}, {2, 9}, {3, 8}, {4, 7}, {5, 6}, {6, -5}, {7, -4}, {8, 3}, {9, 2}, {10, 1}}; | ||||
|     const unsigned int size = x_v.size(); | ||||
|     float x_real[size]; | ||||
|     float x_imag[size]; | ||||
|     std::array<float, 10> x_real{}; | ||||
|     std::array<float, 10> x_imag{}; | ||||
|     unsigned int i = 0; | ||||
|     for (auto it : x_v) | ||||
|         { | ||||
| @@ -98,15 +118,15 @@ TEST(MatioTest, WriteAndReadGrComplex) | ||||
|             i++; | ||||
|         } | ||||
|  | ||||
|     struct mat_complex_split_t x = {x_real, x_imag}; | ||||
|     size_t dims[2] = {static_cast<size_t>(size), 1}; | ||||
|     matvar1 = Mat_VarCreate("x", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, &x, MAT_F_COMPLEX); | ||||
|     struct mat_complex_split_t x = {x_real.data(), x_imag.data()}; | ||||
|     std::array<size_t, 2> dims{static_cast<size_t>(size), 1}; | ||||
|     matvar1 = Mat_VarCreate("x", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims.data(), &x, MAT_F_COMPLEX); | ||||
|     ASSERT_FALSE(reinterpret_cast<long *>(matvar1) == nullptr) << "Error creating variable for ’x’"; | ||||
|  | ||||
|     std::vector<gr_complex> x2 = {{1.1, -10}, {2, -9}, {3, -8}, {4, -7}, {5, 6}, {6, -5}, {7, -4}, {8, 3}, {9, 2}, {10, 1}}; | ||||
|     const unsigned int size_y = x2.size(); | ||||
|     float y_real[size_y]; | ||||
|     float y_imag[size_y]; | ||||
|     std::array<float, 10> y_real{}; | ||||
|     std::array<float, 10> y_imag{}; | ||||
|     i = 0; | ||||
|     for (auto it : x2) | ||||
|         { | ||||
| @@ -115,10 +135,10 @@ TEST(MatioTest, WriteAndReadGrComplex) | ||||
|             i++; | ||||
|         } | ||||
|  | ||||
|     struct mat_complex_split_t y = {y_real, y_imag}; | ||||
|     size_t dims_y[2] = {static_cast<size_t>(size_y), 1}; | ||||
|     struct mat_complex_split_t y = {y_real.data(), y_imag.data()}; | ||||
|     std::array<size_t, 2> dims_y{static_cast<size_t>(size_y), 1}; | ||||
|     matvar_t *matvar2; | ||||
|     matvar2 = Mat_VarCreate("y", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims_y, &y, MAT_F_COMPLEX); | ||||
|     matvar2 = Mat_VarCreate("y", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims_y.data(), &y, MAT_F_COMPLEX); | ||||
|     ASSERT_FALSE(reinterpret_cast<long *>(matvar2) == nullptr) << "Error creating variable for ’y’"; | ||||
|  | ||||
|     Mat_VarWrite(matfp, matvar1, MAT_COMPRESSION_ZLIB);  // or MAT_COMPRESSION_NONE | ||||
| @@ -156,5 +176,6 @@ TEST(MatioTest, WriteAndReadGrComplex) | ||||
|             EXPECT_FLOAT_EQ(x_v[i].real(), x_v_read[i].real()); | ||||
|             EXPECT_FLOAT_EQ(x_v[i].imag(), x_v_read[i].imag()); | ||||
|         } | ||||
|     ASSERT_EQ(remove(filename.c_str()), 0); | ||||
|     errorlib::error_code ec; | ||||
|     ASSERT_EQ(fs::remove(fs::path(filename), ec), true); | ||||
| } | ||||
|   | ||||
| @@ -40,6 +40,7 @@ | ||||
| #include <gtest/gtest.h> | ||||
| #include <volk_gnsssdr/volk_gnsssdr.h> | ||||
| #include <algorithm> | ||||
| #include <array> | ||||
| #include <cstdint> | ||||
| #include <fstream> | ||||
| #include <iterator> | ||||
| @@ -69,13 +70,13 @@ DataTypeAdapter::DataTypeAdapter() | ||||
| { | ||||
|     file_name_input = "adapter_test_input.dat"; | ||||
|     file_name_output = "adapter_test_output.dat"; | ||||
|     int8_t input_bytes[] = {2, 23, -1, 127, -127, 0}; | ||||
|     int16_t input_shorts[] = {2, 23, -1, 127, -127, 0, 255, 255}; | ||||
|     std::array<int8_t, 6> input_bytes{2, 23, -1, 127, -127, 0}; | ||||
|     std::array<int16_t, 8> input_shorts{2, 23, -1, 127, -127, 0, 255, 255}; | ||||
|  | ||||
|     const std::vector<int8_t> input_data_bytes_(input_bytes, input_bytes + sizeof(input_bytes) / sizeof(int8_t)); | ||||
|     const std::vector<int8_t> input_data_bytes_(input_bytes.data(), input_bytes.data() + sizeof(input_bytes) / sizeof(int8_t)); | ||||
|     input_data_bytes = input_data_bytes_; | ||||
|  | ||||
|     const std::vector<int16_t> input_data_shorts_(input_shorts, input_shorts + sizeof(input_shorts) / sizeof(int16_t)); | ||||
|     const std::vector<int16_t> input_data_shorts_(input_shorts.data(), input_shorts.data() + sizeof(input_shorts) / sizeof(int16_t)); | ||||
|     input_data_shorts = input_data_shorts_; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -32,10 +32,27 @@ | ||||
| #include "nmea_printer.h" | ||||
| #include "rtklib_rtkpos.h" | ||||
| #include "rtklib_solver.h" | ||||
| #include <cstdio> | ||||
| #include <fstream> | ||||
| #include <string> | ||||
|  | ||||
| #if HAS_STD_FILESYSTEM | ||||
| #include <system_error> | ||||
| namespace errorlib = std; | ||||
| #if HAS_STD_FILESYSTEM_EXPERIMENTAL | ||||
| #include <experimental/filesystem> | ||||
| namespace fs = std::experimental::filesystem; | ||||
| #else | ||||
| #include <filesystem> | ||||
| namespace fs = std::filesystem; | ||||
| #endif | ||||
| #else | ||||
| #include <boost/filesystem/operations.hpp>   // for create_directories, exists | ||||
| #include <boost/filesystem/path.hpp>         // for path, operator<< | ||||
| #include <boost/filesystem/path_traits.hpp>  // for filesystem | ||||
| #include <boost/system/error_code.hpp>       // for error_code | ||||
| namespace fs = boost::filesystem; | ||||
| namespace errorlib = boost::system; | ||||
| #endif | ||||
|  | ||||
| class NmeaPrinterTest : public ::testing::Test | ||||
| { | ||||
| @@ -196,5 +213,6 @@ TEST_F(NmeaPrinterTest, PrintLine) | ||||
|                 } | ||||
|             test_file.close(); | ||||
|         } | ||||
|     EXPECT_EQ(0, remove(filename.c_str())) << "Failure deleting a temporary file."; | ||||
|     errorlib::error_code ec; | ||||
|     EXPECT_EQ(true, fs::remove(fs::path(filename), ec)) << "Failure deleting a temporary file."; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Javier Arribas
					Javier Arribas