mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-15 04:30:33 +00:00
Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into newsatdispatcher
This commit is contained in:
commit
bf40ed2be1
@ -403,7 +403,7 @@ set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "master")
|
|||||||
set(GNSSSDR_GPSTK_LOCAL_VERSION "2.10.6")
|
set(GNSSSDR_GPSTK_LOCAL_VERSION "2.10.6")
|
||||||
set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.16")
|
set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.16")
|
||||||
set(GNSSSDR_PUGIXML_LOCAL_VERSION "1.9")
|
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
|
if(CMAKE_VERSION VERSION_LESS "3.0.2") # Fix for CentOS 7
|
||||||
set(GNSSSDR_GFLAGS_LOCAL_VERSION "2.2.1")
|
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;
|
new_bds_eph[bds_dnav_eph->i_satellite_PRN] = *bds_dnav_eph;
|
||||||
switch (type_of_rx)
|
switch (type_of_rx)
|
||||||
{
|
{
|
||||||
case 50: // BDS B1I only
|
case 500: // BDS B1I only
|
||||||
rp->log_rinex_nav(rp->navFile, new_bds_eph);
|
rp->log_rinex_nav(rp->navFile, new_bds_eph);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -2194,21 +2194,21 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item
|
|||||||
case 501: // BeiDou B1I + GPS L1 C/A
|
case 501: // BeiDou B1I + GPS L1 C/A
|
||||||
if ((gps_ephemeris_iter != d_pvt_solver->gps_ephemeris_map.cend()) and (beidou_dnav_ephemeris_iter != d_pvt_solver->beidou_dnav_ephemeris_map.cend()))
|
if ((gps_ephemeris_iter != d_pvt_solver->gps_ephemeris_map.cend()) and (beidou_dnav_ephemeris_iter != d_pvt_solver->beidou_dnav_ephemeris_map.cend()))
|
||||||
{
|
{
|
||||||
std::string bds_signal("B1");
|
std::string bds_signal("B1");
|
||||||
//rp->rinex_obs_header(rp->obsFile, gps_ephemeris_iter->second, beidou_dnav_ephemeris_iter->second, d_rx_time, bds_signal);
|
//rp->rinex_obs_header(rp->obsFile, gps_ephemeris_iter->second, beidou_dnav_ephemeris_iter->second, d_rx_time, bds_signal);
|
||||||
//rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_pvt_solver->beidou_dnav_iono, d_pvt_solver->beidou_dnav_utc_model);
|
//rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->gps_iono, d_pvt_solver->gps_utc_model, gps_ephemeris_iter->second, d_pvt_solver->beidou_dnav_iono, d_pvt_solver->beidou_dnav_utc_model);
|
||||||
b_rinex_header_written = true; // do not write header anymore
|
b_rinex_header_written = true; // do not write header anymore
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 502: // BeiDou B1I + Galileo E1B
|
case 502: // BeiDou B1I + Galileo E1B
|
||||||
if ((galileo_ephemeris_iter != d_pvt_solver->galileo_ephemeris_map.cend()) and (beidou_dnav_ephemeris_iter != d_pvt_solver->beidou_dnav_ephemeris_map.cend()))
|
if ((galileo_ephemeris_iter != d_pvt_solver->galileo_ephemeris_map.cend()) and (beidou_dnav_ephemeris_iter != d_pvt_solver->beidou_dnav_ephemeris_map.cend()))
|
||||||
{
|
{
|
||||||
std::string bds_signal("B1");
|
std::string bds_signal("B1");
|
||||||
std::string gal_signal("1B");
|
std::string gal_signal("1B");
|
||||||
//rp->rinex_obs_header(rp->obsFile, galileo_ephemeris_iter->second, beidou_dnav_ephemeris_iter->second, d_rx_time, gal_signal, bds_signal);
|
//rp->rinex_obs_header(rp->obsFile, galileo_ephemeris_iter->second, beidou_dnav_ephemeris_iter->second, d_rx_time, gal_signal, bds_signal);
|
||||||
//rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model, d_pvt_solver->beidou_dnav_iono, d_pvt_solver->beidou_dnav_utc_model);
|
//rp->rinex_nav_header(rp->navMixFile, d_pvt_solver->galileo_iono, d_pvt_solver->galileo_utc_model, d_pvt_solver->beidou_dnav_iono, d_pvt_solver->beidou_dnav_utc_model);
|
||||||
b_rinex_header_written = true; // do not write header anymore
|
b_rinex_header_written = true; // do not write header anymore
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -2597,7 +2597,7 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 50: // BDS B1I only
|
case 500: // BDS B1I only
|
||||||
if (beidou_dnav_ephemeris_iter != d_pvt_solver->beidou_dnav_ephemeris_map.cend())
|
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");
|
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 "pvt_solution.h"
|
||||||
#include <boost/date_time/posix_time/posix_time.hpp>
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <cstdio> // for remove
|
|
||||||
#include <ctime> // for tm
|
#include <ctime> // for tm
|
||||||
#include <exception> // for exception
|
#include <exception> // for exception
|
||||||
#include <iomanip> // for operator<<
|
#include <iomanip> // for operator<<
|
||||||
@ -240,7 +239,8 @@ bool GeoJSON_Printer::close_file()
|
|||||||
// if nothing is written, erase the file
|
// if nothing is written, erase the file
|
||||||
if (first_pos == true)
|
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";
|
LOG(INFO) << "Error deleting temporary file";
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,6 @@
|
|||||||
#include "rtklib_solver.h"
|
#include "rtklib_solver.h"
|
||||||
#include <boost/date_time/posix_time/posix_time.hpp>
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <cstdio> // for remove
|
|
||||||
#include <ctime> // for tm
|
#include <ctime> // for tm
|
||||||
#include <exception> // for exception
|
#include <exception> // for exception
|
||||||
#include <iomanip> // for operator<<
|
#include <iomanip> // for operator<<
|
||||||
@ -251,7 +250,8 @@ Gpx_Printer::~Gpx_Printer()
|
|||||||
}
|
}
|
||||||
if (!positions_printed)
|
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";
|
LOG(INFO) << "Error deleting temporary GPX file";
|
||||||
}
|
}
|
||||||
|
@ -34,9 +34,7 @@
|
|||||||
#include "rtklib_solver.h"
|
#include "rtklib_solver.h"
|
||||||
#include <boost/date_time/posix_time/posix_time.hpp>
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <cstdio> // for remove
|
|
||||||
#include <cstdlib> // for mkstemp
|
#include <cstdlib> // for mkstemp
|
||||||
#include <cstring> // for strncpy
|
|
||||||
#include <ctime> // for tm
|
#include <ctime> // for tm
|
||||||
#include <exception> // for exception
|
#include <exception> // for exception
|
||||||
#include <iostream> // for cout, cerr
|
#include <iostream> // for cout, cerr
|
||||||
@ -366,7 +364,8 @@ Kml_Printer::~Kml_Printer()
|
|||||||
}
|
}
|
||||||
if (!positions_printed)
|
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";
|
LOG(INFO) << "Error deleting temporary KML file";
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
#include "rtklib_solution.h"
|
#include "rtklib_solution.h"
|
||||||
#include "rtklib_solver.h"
|
#include "rtklib_solver.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
|
#include <array>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
@ -133,6 +134,7 @@ Nmea_Printer::Nmea_Printer(const std::string& filename, bool flag_nmea_output_fi
|
|||||||
|
|
||||||
Nmea_Printer::~Nmea_Printer()
|
Nmea_Printer::~Nmea_Printer()
|
||||||
{
|
{
|
||||||
|
auto pos = nmea_file_descriptor.tellp();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (nmea_file_descriptor.is_open())
|
if (nmea_file_descriptor.is_open())
|
||||||
@ -148,6 +150,14 @@ Nmea_Printer::~Nmea_Printer()
|
|||||||
{
|
{
|
||||||
std::cerr << e.what() << '\n';
|
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
|
try
|
||||||
{
|
{
|
||||||
close_serial();
|
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
|
// Sample -> $GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,*10
|
||||||
std::stringstream sentence_str;
|
std::stringstream sentence_str;
|
||||||
unsigned char buff[1024] = {0};
|
std::array<unsigned char, 1024> buff{};
|
||||||
outnmea_rmc(buff, &d_PVT_data->pvt_sol);
|
outnmea_rmc(buff.data(), &d_PVT_data->pvt_sol);
|
||||||
sentence_str << buff;
|
sentence_str << buff.data();
|
||||||
return sentence_str.str();
|
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
|
// $GPGSA,A,3,07,02,26,27,09,04,15, , , , , ,1.8,1.0,1.5*33
|
||||||
// GSA-GNSS DOP and Active Satellites
|
// GSA-GNSS DOP and Active Satellites
|
||||||
std::stringstream sentence_str;
|
std::stringstream sentence_str;
|
||||||
unsigned char buff[1024] = {0};
|
std::array<unsigned char, 1024> buff{};
|
||||||
outnmea_gsa(buff, &d_PVT_data->pvt_sol, d_PVT_data->pvt_ssat.data());
|
outnmea_gsa(buff.data(), &d_PVT_data->pvt_sol, d_PVT_data->pvt_ssat.data());
|
||||||
sentence_str << buff;
|
sentence_str << buff.data();
|
||||||
return sentence_str.str();
|
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
|
// $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
|
// Notice that NMEA 2.1 only supports 12 channels
|
||||||
std::stringstream sentence_str;
|
std::stringstream sentence_str;
|
||||||
unsigned char buff[1024] = {0};
|
std::array<unsigned char, 1024> buff{};
|
||||||
outnmea_gsv(buff, &d_PVT_data->pvt_sol, d_PVT_data->pvt_ssat.data());
|
outnmea_gsv(buff.data(), &d_PVT_data->pvt_sol, d_PVT_data->pvt_ssat.data());
|
||||||
sentence_str << buff;
|
sentence_str << buff.data();
|
||||||
return sentence_str.str();
|
return sentence_str.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -463,9 +473,9 @@ std::string Nmea_Printer::get_GPGSV()
|
|||||||
std::string Nmea_Printer::get_GPGGA()
|
std::string Nmea_Printer::get_GPGGA()
|
||||||
{
|
{
|
||||||
std::stringstream sentence_str;
|
std::stringstream sentence_str;
|
||||||
unsigned char buff[1024] = {0};
|
std::array<unsigned char, 1024> buff{};
|
||||||
outnmea_gga(buff, &d_PVT_data->pvt_sol);
|
outnmea_gga(buff.data(), &d_PVT_data->pvt_sol);
|
||||||
sentence_str << buff;
|
sentence_str << buff.data();
|
||||||
return sentence_str.str();
|
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
|
// $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 "GPS_L1_CA.h"
|
||||||
#include "geofunctions.h"
|
#include "geofunctions.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
|
||||||
Pvt_Solution::Pvt_Solution()
|
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
|
4. World Geodetic System 1984
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const double a[5] = {6378388.0, 6378160.0, 6378135.0, 6378137.0, 6378137.0};
|
const std::array<double, 5> a = {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> 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 lambda = atan2(Y, X);
|
||||||
double ex2 = (2.0 - f[elipsoid_selection]) * f[elipsoid_selection] / ((1.0 - f[elipsoid_selection]) * (1.0 - f[elipsoid_selection]));
|
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 <boost/date_time/time_zone_base.hpp>
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <algorithm> // for min and max
|
#include <algorithm> // for min and max
|
||||||
#include <cmath> // for floor
|
#include <array>
|
||||||
#include <cstring> // for memcpy
|
#include <cmath> // for floor
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <iostream> // for cout
|
#include <iostream> // for cout
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
@ -267,51 +267,59 @@ Rinex_Printer::~Rinex_Printer()
|
|||||||
std::cerr << e.what() << '\n';
|
std::cerr << e.what() << '\n';
|
||||||
}
|
}
|
||||||
// If nothing written, erase the files.
|
// If nothing written, erase the files.
|
||||||
|
|
||||||
if (posn == 0)
|
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";
|
LOG(INFO) << "Error deleting temporary file";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (poso == 0)
|
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";
|
LOG(INFO) << "Error deleting temporary file";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (poss == 0)
|
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";
|
LOG(INFO) << "Error deleting temporary file";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (posng == 0)
|
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";
|
LOG(INFO) << "Error deleting temporary file";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (posmn == 0)
|
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";
|
LOG(INFO) << "Error deleting temporary file";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (posnr == 0)
|
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";
|
LOG(INFO) << "Error deleting temporary file";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (posnc == 0)
|
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";
|
LOG(INFO) << "Error deleting temporary file";
|
||||||
}
|
}
|
||||||
@ -424,11 +432,11 @@ std::string Rinex_Printer::getLocalTime()
|
|||||||
line += std::string("GNSS-SDR");
|
line += std::string("GNSS-SDR");
|
||||||
line += std::string(12, ' ');
|
line += std::string(12, ' ');
|
||||||
std::string username;
|
std::string username;
|
||||||
char c_username[20] = {0};
|
std::array<char, 20> c_username{};
|
||||||
int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1);
|
int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1);
|
||||||
if (nGet == 0)
|
if (nGet == 0)
|
||||||
{
|
{
|
||||||
username = c_username;
|
username = c_username.data();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2383,11 +2391,11 @@ void Rinex_Printer::rinex_sbs_header(std::fstream& out)
|
|||||||
line.clear();
|
line.clear();
|
||||||
line += Rinex_Printer::leftJustify("GNSS-SDR", 20);
|
line += Rinex_Printer::leftJustify("GNSS-SDR", 20);
|
||||||
std::string username;
|
std::string username;
|
||||||
char c_username[20] = {0};
|
std::array<char, 20> c_username{};
|
||||||
int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1);
|
int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1);
|
||||||
if (nGet == 0)
|
if (nGet == 0)
|
||||||
{
|
{
|
||||||
username = c_username;
|
username = c_username.data();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -4827,11 +4835,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Glonass_Gnav_Ephem
|
|||||||
// -------- Line OBSERVER / AGENCY
|
// -------- Line OBSERVER / AGENCY
|
||||||
line.clear();
|
line.clear();
|
||||||
std::string username;
|
std::string username;
|
||||||
char c_username[20] = {0};
|
std::array<char, 20> c_username{};
|
||||||
int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1);
|
int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1);
|
||||||
if (nGet == 0)
|
if (nGet == 0)
|
||||||
{
|
{
|
||||||
username = c_username;
|
username = c_username.data();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -5153,11 +5161,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_Ephemeris& gps
|
|||||||
// -------- Line OBSERVER / AGENCY
|
// -------- Line OBSERVER / AGENCY
|
||||||
line.clear();
|
line.clear();
|
||||||
std::string username;
|
std::string username;
|
||||||
char c_username[20] = {0};
|
std::array<char, 20> c_username{};
|
||||||
int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1);
|
int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1);
|
||||||
if (nGet == 0)
|
if (nGet == 0)
|
||||||
{
|
{
|
||||||
username = c_username;
|
username = c_username.data();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -5508,11 +5516,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_CNAV_Ephemeris
|
|||||||
// -------- Line OBSERVER / AGENCY
|
// -------- Line OBSERVER / AGENCY
|
||||||
line.clear();
|
line.clear();
|
||||||
std::string username;
|
std::string username;
|
||||||
char c_username[20] = {0};
|
std::array<char, 20> c_username{};
|
||||||
int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1);
|
int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1);
|
||||||
if (nGet == 0)
|
if (nGet == 0)
|
||||||
{
|
{
|
||||||
username = c_username;
|
username = c_username.data();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -5817,11 +5825,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Galileo_Ephemeris&
|
|||||||
// -------- Line OBSERVER / AGENCY
|
// -------- Line OBSERVER / AGENCY
|
||||||
line.clear();
|
line.clear();
|
||||||
std::string username;
|
std::string username;
|
||||||
char c_username[20] = {0};
|
std::array<char, 20> c_username{};
|
||||||
int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1);
|
int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1);
|
||||||
if (nGet == 0)
|
if (nGet == 0)
|
||||||
{
|
{
|
||||||
username = c_username;
|
username = c_username.data();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -6140,11 +6148,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_Ephemeris& eph
|
|||||||
// -------- Line OBSERVER / AGENCY
|
// -------- Line OBSERVER / AGENCY
|
||||||
line.clear();
|
line.clear();
|
||||||
std::string username;
|
std::string username;
|
||||||
char c_username[20] = {0};
|
std::array<char, 20> c_username{};
|
||||||
int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1);
|
int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1);
|
||||||
if (nGet == 0)
|
if (nGet == 0)
|
||||||
{
|
{
|
||||||
username = c_username;
|
username = c_username.data();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -6397,11 +6405,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_CNAV_Ephemeris
|
|||||||
// -------- Line OBSERVER / AGENCY
|
// -------- Line OBSERVER / AGENCY
|
||||||
line.clear();
|
line.clear();
|
||||||
std::string username;
|
std::string username;
|
||||||
char c_username[20] = {0};
|
std::array<char, 20> c_username{};
|
||||||
int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1);
|
int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1);
|
||||||
if (nGet == 0)
|
if (nGet == 0)
|
||||||
{
|
{
|
||||||
username = c_username;
|
username = c_username.data();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -6648,11 +6656,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_Ephemeris& eph
|
|||||||
// -------- Line OBSERVER / AGENCY
|
// -------- Line OBSERVER / AGENCY
|
||||||
line.clear();
|
line.clear();
|
||||||
std::string username;
|
std::string username;
|
||||||
char c_username[20] = {0};
|
std::array<char, 20> c_username{};
|
||||||
int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1);
|
int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1);
|
||||||
if (nGet == 0)
|
if (nGet == 0)
|
||||||
{
|
{
|
||||||
username = c_username;
|
username = c_username.data();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -6929,11 +6937,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_Ephemeris& gps
|
|||||||
// -------- Line OBSERVER / AGENCY
|
// -------- Line OBSERVER / AGENCY
|
||||||
line.clear();
|
line.clear();
|
||||||
std::string username;
|
std::string username;
|
||||||
char c_username[20] = {0};
|
std::array<char, 20> c_username{};
|
||||||
int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1);
|
int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1);
|
||||||
if (nGet == 0)
|
if (nGet == 0)
|
||||||
{
|
{
|
||||||
username = c_username;
|
username = c_username.data();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -7275,11 +7283,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_CNAV_Ephemeris
|
|||||||
// -------- Line OBSERVER / AGENCY
|
// -------- Line OBSERVER / AGENCY
|
||||||
line.clear();
|
line.clear();
|
||||||
std::string username;
|
std::string username;
|
||||||
char c_username[20] = {0};
|
std::array<char, 20> c_username{};
|
||||||
int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1);
|
int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1);
|
||||||
if (nGet == 0)
|
if (nGet == 0)
|
||||||
{
|
{
|
||||||
username = c_username;
|
username = c_username.data();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -7593,11 +7601,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Galileo_Ephemeris&
|
|||||||
// -------- Line OBSERVER / AGENCY
|
// -------- Line OBSERVER / AGENCY
|
||||||
line.clear();
|
line.clear();
|
||||||
std::string username;
|
std::string username;
|
||||||
char c_username[20] = {0};
|
std::array<char, 20> c_username{};
|
||||||
int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1);
|
int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1);
|
||||||
if (nGet == 0)
|
if (nGet == 0)
|
||||||
{
|
{
|
||||||
username = c_username;
|
username = c_username.data();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -7860,11 +7868,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_Ephemeris& gps
|
|||||||
// -------- Line OBSERVER / AGENCY
|
// -------- Line OBSERVER / AGENCY
|
||||||
line.clear();
|
line.clear();
|
||||||
std::string username;
|
std::string username;
|
||||||
char c_username[20] = {0};
|
std::array<char, 20> c_username{};
|
||||||
int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1);
|
int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1);
|
||||||
if (nGet == 0)
|
if (nGet == 0)
|
||||||
{
|
{
|
||||||
username = c_username;
|
username = c_username.data();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -8142,11 +8150,11 @@ void Rinex_Printer::rinex_obs_header(std::fstream& out, const Beidou_Dnav_Epheme
|
|||||||
// -------- Line OBSERVER / AGENCY
|
// -------- Line OBSERVER / AGENCY
|
||||||
line.clear();
|
line.clear();
|
||||||
std::string username;
|
std::string username;
|
||||||
char c_username[20] = {0};
|
std::array<char, 20> c_username{};
|
||||||
int32_t nGet = getlogin_r(c_username, sizeof(c_username) - 1);
|
int32_t nGet = getlogin_r(c_username.data(), sizeof(c_username) - 1);
|
||||||
if (nGet == 0)
|
if (nGet == 0)
|
||||||
{
|
{
|
||||||
username = c_username;
|
username = c_username.data();
|
||||||
}
|
}
|
||||||
else
|
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))
|
if ((total_mmap.count(mmap_iter->second.PRN)) == 1 && (mmap_iter->second.PRN != 0))
|
||||||
{
|
{
|
||||||
Gnss_Synchro gs = Gnss_Synchro();
|
Gnss_Synchro gs = Gnss_Synchro();
|
||||||
std::string sys = "G";
|
gs.System = 'G';
|
||||||
gs.System = *sys.c_str();
|
gs.Signal[0] = '2';
|
||||||
std::string sig = "2S";
|
gs.Signal[1] = 'S';
|
||||||
std::memcpy(static_cast<void*>(gs.Signal), sig.c_str(), 3);
|
gs.Signal[2] = '\0';
|
||||||
gs.PRN = mmap_iter->second.PRN;
|
gs.PRN = mmap_iter->second.PRN;
|
||||||
total_mmap.insert(std::pair<uint32_t, Gnss_Synchro>(mmap_iter->second.PRN, gs));
|
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)
|
if (found_1B != std::string::npos)
|
||||||
{
|
{
|
||||||
Gnss_Synchro gs = Gnss_Synchro();
|
Gnss_Synchro gs = Gnss_Synchro();
|
||||||
std::string sys = "E";
|
gs.System = 'E';
|
||||||
gs.System = *sys.c_str();
|
gs.Signal[0] = '1';
|
||||||
std::string sig = "1B";
|
gs.Signal[1] = 'B';
|
||||||
std::memcpy(static_cast<void*>(gs.Signal), sig.c_str(), 3);
|
gs.Signal[2] = '\0';
|
||||||
gs.PRN = prn_;
|
gs.PRN = prn_;
|
||||||
total_map.insert(std::pair<uint32_t, Gnss_Synchro>(prn_, gs));
|
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)
|
if (found_1B != std::string::npos)
|
||||||
{
|
{
|
||||||
Gnss_Synchro gs = Gnss_Synchro();
|
Gnss_Synchro gs = Gnss_Synchro();
|
||||||
std::string sys = "E";
|
gs.System = 'E';
|
||||||
gs.System = *sys.c_str();
|
gs.Signal[0] = '1';
|
||||||
std::string sig = "1B";
|
gs.Signal[1] = 'B';
|
||||||
std::memcpy(static_cast<void*>(gs.Signal), sig.c_str(), 3);
|
gs.Signal[2] = '\0';
|
||||||
gs.PRN = prn_;
|
gs.PRN = prn_;
|
||||||
total_map.insert(std::pair<uint32_t, Gnss_Synchro>(prn_, gs));
|
total_map.insert(std::pair<uint32_t, Gnss_Synchro>(prn_, gs));
|
||||||
}
|
}
|
||||||
if (found_E5a != std::string::npos)
|
if (found_E5a != std::string::npos)
|
||||||
{
|
{
|
||||||
Gnss_Synchro gs = Gnss_Synchro();
|
Gnss_Synchro gs = Gnss_Synchro();
|
||||||
std::string sys = "E";
|
gs.System = 'E';
|
||||||
gs.System = *sys.c_str();
|
gs.Signal[0] = '5';
|
||||||
std::string sig = "5X";
|
gs.Signal[1] = 'X';
|
||||||
std::memcpy(static_cast<void*>(gs.Signal), sig.c_str(), 3);
|
gs.Signal[2] = '\0';
|
||||||
gs.PRN = prn_;
|
gs.PRN = prn_;
|
||||||
total_map.insert(std::pair<uint32_t, Gnss_Synchro>(prn_, gs));
|
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)
|
if ((total_map.count(prn_)) == 1)
|
||||||
{
|
{
|
||||||
Gnss_Synchro gs = Gnss_Synchro();
|
Gnss_Synchro gs = Gnss_Synchro();
|
||||||
std::string sys = "E";
|
gs.System = 'E';
|
||||||
gs.System = *sys.c_str();
|
gs.Signal[0] = '5';
|
||||||
std::string sig = "5X";
|
gs.Signal[1] = 'X';
|
||||||
std::memcpy(static_cast<void*>(gs.Signal), sig.c_str(), 3);
|
gs.Signal[2] = '\0';
|
||||||
gs.PRN = prn_;
|
gs.PRN = prn_;
|
||||||
total_map.insert(std::pair<uint32_t, Gnss_Synchro>(prn_, gs));
|
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)
|
if (found_B1 != std::string::npos)
|
||||||
{
|
{
|
||||||
Gnss_Synchro gs = Gnss_Synchro();
|
Gnss_Synchro gs = Gnss_Synchro();
|
||||||
std::string sys = "C";
|
gs.System = 'C';
|
||||||
gs.System = *sys.c_str();
|
gs.Signal[0] = 'B';
|
||||||
std::string sig = "B1";
|
gs.Signal[1] = '1';
|
||||||
std::memcpy(static_cast<void*>(gs.Signal), sig.c_str(), 3);
|
gs.Signal[2] = '\0';
|
||||||
gs.PRN = prn_;
|
gs.PRN = prn_;
|
||||||
total_map.insert(std::pair<uint32_t, Gnss_Synchro>(prn_, gs));
|
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.
|
// represents GPS time (week, TOW) in the date time format of the Gregorian calendar.
|
||||||
// -> Leap years are considered, but leap seconds are not.
|
// -> 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
|
// seconds in a not leap year
|
||||||
const int32_t secs_per_day = 24 * 60 * 60;
|
const int32_t secs_per_day = 24 * 60 * 60;
|
||||||
|
@ -40,7 +40,6 @@
|
|||||||
#include "gps_ephemeris.h"
|
#include "gps_ephemeris.h"
|
||||||
#include "rtcm.h"
|
#include "rtcm.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <cstdio> // for remove
|
|
||||||
#include <ctime> // for tm
|
#include <ctime> // for tm
|
||||||
#include <exception> // for exception
|
#include <exception> // for exception
|
||||||
#include <fcntl.h> // for O_RDWR
|
#include <fcntl.h> // for O_RDWR
|
||||||
@ -221,7 +220,8 @@ Rtcm_Printer::~Rtcm_Printer()
|
|||||||
}
|
}
|
||||||
if (pos == 0)
|
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";
|
LOG(INFO) << "Error deleting temporary RTCM file";
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,25 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#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)
|
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);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
||||||
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
||||||
{
|
{
|
||||||
size_t dims[2] = {1, static_cast<size_t>(num_epoch)};
|
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, TOW_at_current_symbol_ms.data(), 0);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
}
|
}
|
||||||
@ -341,6 +360,7 @@ Rtklib_Solver::~Rtklib_Solver()
|
|||||||
{
|
{
|
||||||
if (d_dump_file.is_open() == true)
|
if (d_dump_file.is_open() == true)
|
||||||
{
|
{
|
||||||
|
auto pos = d_dump_file.tellp();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
d_dump_file.close();
|
d_dump_file.close();
|
||||||
@ -349,6 +369,15 @@ Rtklib_Solver::~Rtklib_Solver()
|
|||||||
{
|
{
|
||||||
LOG(WARNING) << "Exception in destructor closing the RTKLIB dump file " << ex.what();
|
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)
|
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
|
// compute Ground speed and COG
|
||||||
double ground_speed_ms = 0.0;
|
double ground_speed_ms = 0.0;
|
||||||
double pos[3];
|
std::array<double, 3> pos{};
|
||||||
double enuv[3];
|
std::array<double, 3> enuv{};
|
||||||
ecef2pos(pvt_sol.rr, pos);
|
ecef2pos(pvt_sol.rr, pos.data());
|
||||||
ecef2enu(pos, &pvt_sol.rr[3], enuv);
|
ecef2enu(pos.data(), &pvt_sol.rr[3], enuv.data());
|
||||||
this->set_speed_over_ground(norm_rtk(enuv, 2));
|
this->set_speed_over_ground(norm_rtk(enuv.data(), 2));
|
||||||
double new_cog;
|
double new_cog;
|
||||||
if (ground_speed_ms >= 1.0)
|
if (ground_speed_ms >= 1.0)
|
||||||
{
|
{
|
||||||
|
@ -203,7 +203,6 @@ signed int GalileoE1Pcps8msAmbiguousAcquisition::mag()
|
|||||||
void GalileoE1Pcps8msAmbiguousAcquisition::init()
|
void GalileoE1Pcps8msAmbiguousAcquisition::init()
|
||||||
{
|
{
|
||||||
acquisition_cc_->init();
|
acquisition_cc_->init();
|
||||||
//set_local_code();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -215,8 +214,10 @@ void GalileoE1Pcps8msAmbiguousAcquisition::set_local_code()
|
|||||||
"Acquisition" + std::to_string(channel_) + ".cboc", false);
|
"Acquisition" + std::to_string(channel_) + ".cboc", false);
|
||||||
|
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
||||||
std::array<char, 3> Signal_;
|
std::array<char, 3> Signal_{};
|
||||||
std::memcpy(Signal_.data(), gnss_synchro_->Signal, 3);
|
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_,
|
galileo_e1_code_gen_complex_sampled(gsl::span<std::complex<float>>(code, code_length_), Signal_,
|
||||||
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
||||||
|
@ -232,7 +232,6 @@ signed int GalileoE1PcpsAmbiguousAcquisition::mag()
|
|||||||
void GalileoE1PcpsAmbiguousAcquisition::init()
|
void GalileoE1PcpsAmbiguousAcquisition::init()
|
||||||
{
|
{
|
||||||
acquisition_->init();
|
acquisition_->init();
|
||||||
//set_local_code();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -246,7 +245,7 @@ void GalileoE1PcpsAmbiguousAcquisition::set_local_code()
|
|||||||
|
|
||||||
if (acquire_pilot_ == true)
|
if (acquire_pilot_ == true)
|
||||||
{
|
{
|
||||||
//set local signal generator to Galileo E1 pilot component (1C)
|
// set local signal generator to Galileo E1 pilot component (1C)
|
||||||
std::array<char, 3> pilot_signal = {{'1', 'C', '\0'}};
|
std::array<char, 3> pilot_signal = {{'1', 'C', '\0'}};
|
||||||
if (acq_parameters_.use_automatic_resampler)
|
if (acq_parameters_.use_automatic_resampler)
|
||||||
{
|
{
|
||||||
@ -261,8 +260,10 @@ void GalileoE1PcpsAmbiguousAcquisition::set_local_code()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::array<char, 3> Signal_;
|
std::array<char, 3> Signal_{};
|
||||||
std::memcpy(Signal_.data(), gnss_synchro_->Signal, 3);
|
Signal_[0] = gnss_synchro_->Signal[0];
|
||||||
|
Signal_[1] = gnss_synchro_->Signal[1];
|
||||||
|
Signal_[2] = '\0';
|
||||||
if (acq_parameters_.use_automatic_resampler)
|
if (acq_parameters_.use_automatic_resampler)
|
||||||
{
|
{
|
||||||
galileo_e1_code_gen_complex_sampled(code_span, Signal_,
|
galileo_e1_code_gen_complex_sampled(code_span, Signal_,
|
||||||
|
@ -237,7 +237,6 @@ GalileoE1PcpsQuickSyncAmbiguousAcquisition::mag()
|
|||||||
void GalileoE1PcpsQuickSyncAmbiguousAcquisition::init()
|
void GalileoE1PcpsQuickSyncAmbiguousAcquisition::init()
|
||||||
{
|
{
|
||||||
acquisition_cc_->init();
|
acquisition_cc_->init();
|
||||||
//set_local_code();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -249,8 +248,10 @@ void GalileoE1PcpsQuickSyncAmbiguousAcquisition::set_local_code()
|
|||||||
"Acquisition" + std::to_string(channel_) + ".cboc", false);
|
"Acquisition" + std::to_string(channel_) + ".cboc", false);
|
||||||
|
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
||||||
std::array<char, 3> Signal_;
|
std::array<char, 3> Signal_{};
|
||||||
std::memcpy(Signal_.data(), gnss_synchro_->Signal, 3);
|
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_,
|
galileo_e1_code_gen_complex_sampled(gsl::span<std::complex<float>>(code.get(), code_length_), Signal_,
|
||||||
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
||||||
|
@ -207,7 +207,6 @@ signed int GalileoE1PcpsTongAmbiguousAcquisition::mag()
|
|||||||
void GalileoE1PcpsTongAmbiguousAcquisition::init()
|
void GalileoE1PcpsTongAmbiguousAcquisition::init()
|
||||||
{
|
{
|
||||||
acquisition_cc_->init();
|
acquisition_cc_->init();
|
||||||
//set_local_code();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -219,8 +218,10 @@ void GalileoE1PcpsTongAmbiguousAcquisition::set_local_code()
|
|||||||
"Acquisition" + std::to_string(channel_) + ".cboc", false);
|
"Acquisition" + std::to_string(channel_) + ".cboc", false);
|
||||||
|
|
||||||
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
std::unique_ptr<std::complex<float>> code{new std::complex<float>[code_length_]};
|
||||||
std::array<char, 3> Signal_;
|
std::array<char, 3> Signal_{};
|
||||||
std::memcpy(Signal_.data(), gnss_synchro_->Signal, 3);
|
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_,
|
galileo_e1_code_gen_complex_sampled(gsl::span<std::complex<float>>(code.get(), code_length_), Signal_,
|
||||||
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
cboc, gnss_synchro_->PRN, fs_in_, 0, false);
|
||||||
|
|
||||||
|
@ -56,8 +56,9 @@
|
|||||||
#include <volk/volk.h>
|
#include <volk/volk.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
#include <algorithm> // for fill_n, min
|
#include <algorithm> // for fill_n, min
|
||||||
#include <cmath> // for floor, fmod, rint, ceil
|
#include <array>
|
||||||
#include <cstring> // for memcpy
|
#include <cmath> // for floor, fmod, rint, ceil
|
||||||
|
#include <cstring> // for memcpy
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
@ -455,56 +456,56 @@ void pcps_acquisition::dump_results(int32_t effective_fft_size)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
size_t dims[2] = {static_cast<size_t>(effective_fft_size), static_cast<size_t>(d_num_doppler_bins)};
|
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, grid_.memptr(), 0);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
dims[0] = static_cast<size_t>(1);
|
dims[0] = static_cast<size_t>(1);
|
||||||
dims[1] = 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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
auto aux = static_cast<float>(d_gnss_synchro->Acq_doppler_hz);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
aux = static_cast<float>(d_gnss_synchro->Acq_delay_samples);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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[0] = static_cast<size_t>(effective_fft_size);
|
||||||
dims[1] = static_cast<size_t>(d_num_doppler_bins_step2);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
dims[0] = static_cast<size_t>(1);
|
dims[0] = static_cast<size_t>(1);
|
||||||
dims[1] = 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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
aux = d_doppler_center_step_two - static_cast<float>(floor(d_num_doppler_bins_step2 / 2.0)) * acq_parameters.doppler_step2;
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
#include <volk/volk.h>
|
#include <volk/volk.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
#include <algorithm> // std::rotate, std::fill_n
|
#include <algorithm> // std::rotate, std::fill_n
|
||||||
|
#include <array>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
#if HAS_STD_FILESYSTEM
|
#if HAS_STD_FILESYSTEM
|
||||||
@ -673,52 +674,52 @@ void pcps_acquisition_fine_doppler_cc::dump_results(int effective_fft_size)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
size_t dims[2] = {static_cast<size_t>(effective_fft_size), static_cast<size_t>(d_num_doppler_points)};
|
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, grid_.memptr(), 0);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
dims[0] = static_cast<size_t>(1);
|
dims[0] = static_cast<size_t>(1);
|
||||||
dims[1] = 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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
auto aux = static_cast<float>(d_gnss_synchro->Acq_doppler_hz);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
aux = static_cast<float>(d_gnss_synchro->Acq_delay_samples);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
aux = 0.0;
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <volk/volk.h>
|
#include <volk/volk.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
@ -311,26 +312,26 @@ int pcps_quicksync_acquisition_cc::general_work(int noutput_items,
|
|||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
/* initialize acquisition implementing the QuickSync algorithm*/
|
// initialize acquisition implementing the QuickSync algorithm
|
||||||
//DLOG(INFO) << "START CASE 1";
|
//DLOG(INFO) << "START CASE 1";
|
||||||
int32_t doppler;
|
int32_t doppler;
|
||||||
uint32_t indext = 0;
|
uint32_t indext = 0;
|
||||||
float magt = 0.0;
|
float magt = 0.0;
|
||||||
const auto* in = reinterpret_cast<const gr_complex*>(input_items[0]); //Get the input samples pointer
|
const auto* in = reinterpret_cast<const gr_complex*>(input_items[0]); // Get the input samples pointer
|
||||||
|
|
||||||
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 = 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()));
|
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
|
// Create a signal to store a signal of size 1ms, to perform correlation
|
||||||
in time. No folding on this data is required*/
|
// 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()));
|
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
|
// Stores the values of the correlation output between the local code
|
||||||
and the signal with doppler shift corrected */
|
// 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()));
|
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
|
// Stores a copy of the folded version of the signal.This is used for
|
||||||
the FFT operations in future steps of execution*/
|
// the FFT operations in future steps of execution*/
|
||||||
// gr_complex in_folded[d_fft_size];
|
// gr_complex in_folded[d_fft_size];
|
||||||
float fft_normalization_factor = static_cast<float>(d_fft_size) * static_cast<float>(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;
|
<< d_samples_per_code * d_folding_factor;
|
||||||
|
|
||||||
|
|
||||||
/* 1- Compute the input signal power estimation. This operation is
|
// 1- Compute the input signal power estimation. This operation is
|
||||||
being performed in a signal of size nxp */
|
// being performed in a signal of size nxp
|
||||||
volk_32fc_magnitude_squared_32f(d_magnitude, in, d_samples_per_code * d_folding_factor);
|
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);
|
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);
|
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++)
|
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
|
// Ensure that the signal is going to start with all samples
|
||||||
at zero. This is done to avoid over acumulation when performing
|
// at zero. This is done to avoid over acumulation when performing
|
||||||
the folding process to be stored in d_fft_if->get_inbuf()*/
|
// the folding process to be stored in d_fft_if->get_inbuf()
|
||||||
d_signal_folded = new gr_complex[d_fft_size]();
|
d_signal_folded = new gr_complex[d_fft_size]();
|
||||||
memcpy(d_fft_if->get_inbuf(), d_signal_folded, sizeof(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
|
// Doppler search steps and then multiplication of the incoming
|
||||||
signal with the doppler wipeoffs to eliminate frequency offset
|
// signal with the doppler wipeoffs to eliminate frequency offset
|
||||||
*/
|
|
||||||
doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index;
|
doppler = -static_cast<int32_t>(d_doppler_max) + d_doppler_step * doppler_index;
|
||||||
|
|
||||||
/*Perform multiplication of the incoming signal with the
|
// Perform multiplication of the incoming signal with the
|
||||||
complex exponential vector. This removes the frequency doppler
|
// complex exponential vector. This removes the frequency doppler
|
||||||
shift offset*/
|
// shift offset
|
||||||
volk_32fc_x2_multiply_32fc(in_temp, in,
|
volk_32fc_x2_multiply_32fc(in_temp, in,
|
||||||
d_grid_doppler_wipeoffs[doppler_index],
|
d_grid_doppler_wipeoffs[doppler_index],
|
||||||
d_samples_per_code * d_folding_factor);
|
d_samples_per_code * d_folding_factor);
|
||||||
|
|
||||||
/*Perform folding of the carrier wiped-off incoming signal. Since
|
// Perform folding of the carrier wiped-off incoming signal. Since
|
||||||
superlinear method is being used the folding factor in the
|
// superlinear method is being used the folding factor in the
|
||||||
incoming raw data signal is of d_folding_factor^2*/
|
// 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++)
|
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),
|
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>());
|
std::plus<gr_complex>());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 3- Perform the FFT-based convolution (parallel time search)
|
// 3- Perform the FFT-based convolution (parallel time search)
|
||||||
Compute the FFT of the carrier wiped--off incoming signal*/
|
// Compute the FFT of the carrier wiped--off incoming signal
|
||||||
d_fft_if->execute();
|
d_fft_if->execute();
|
||||||
|
|
||||||
/*Multiply carrier wiped--off, Fourier transformed incoming
|
// Multiply carrier wiped--off, Fourier transformed incoming
|
||||||
signal with the local FFT'd code reference using SIMD
|
// signal with the local FFT'd code reference using SIMD
|
||||||
operations with VOLK library*/
|
// operations with VOLK library
|
||||||
volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(),
|
volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(),
|
||||||
d_fft_if->get_outbuf(), d_fft_codes, d_fft_size);
|
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();
|
d_ifft->execute();
|
||||||
|
|
||||||
/* Compute the magnitude and get the maximum value with its
|
// Compute the magnitude and get the maximum value with its
|
||||||
index position*/
|
// index position
|
||||||
volk_32fc_magnitude_squared_32f(d_magnitude_folded,
|
volk_32fc_magnitude_squared_32f(d_magnitude_folded,
|
||||||
d_ifft->get_outbuf(), d_fft_size);
|
d_ifft->get_outbuf(), d_fft_size);
|
||||||
|
|
||||||
/* Normalize the maximum value to correct the scale factor
|
// Normalize the maximum value to correct the scale factor
|
||||||
introduced by FFTW*/
|
// 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);
|
|
||||||
volk_gnsssdr_32f_index_max_32u(&indext, d_magnitude_folded, d_fft_size);
|
volk_gnsssdr_32f_index_max_32u(&indext, d_magnitude_folded, d_fft_size);
|
||||||
|
|
||||||
magt = d_magnitude_folded[indext] / (fft_normalization_factor * fft_normalization_factor);
|
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;
|
d_mag = magt;
|
||||||
|
|
||||||
/* In case that d_bit_transition_flag = true, we compare the potentially
|
// 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
|
// 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
|
// 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,
|
// 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
|
// the maximum test statistics in the previous dwell is greater than
|
||||||
current d_mag/d_input_power). Note that d_test_statistics is not
|
// current d_mag/d_input_power). Note that d_test_statistics is not
|
||||||
restarted between consecutive dwells in multidwell operation.*/
|
// restarted between consecutive dwells in multidwell operation.
|
||||||
if (d_test_statistics < (d_mag / d_input_power) || !d_bit_transition_flag)
|
if (d_test_statistics < (d_mag / d_input_power) || !d_bit_transition_flag)
|
||||||
{
|
{
|
||||||
uint32_t detected_delay_samples_folded = 0;
|
uint32_t detected_delay_samples_folded = 0;
|
||||||
detected_delay_samples_folded = (indext % d_samples_per_code);
|
detected_delay_samples_folded = (indext % d_samples_per_code);
|
||||||
gr_complex complex_acumulator[100];
|
std::array<gr_complex, 100> complex_acumulator{};
|
||||||
//gr_complex complex_acumulator[d_folding_factor];
|
|
||||||
|
|
||||||
for (int32_t i = 0; i < static_cast<int32_t>(d_folding_factor); i++)
|
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++)
|
for (int32_t i = 0; i < static_cast<int32_t>(d_folding_factor); i++)
|
||||||
{
|
{
|
||||||
/*Copy a signal of 1 code length into suggested buffer.
|
// Copy a signal of 1 code length into suggested buffer.
|
||||||
The copied signal must have doppler effect corrected*/
|
// The copied signal must have doppler effect corrected*/
|
||||||
memcpy(in_1code, &in_temp[d_possible_delay[i]],
|
memcpy(in_1code, &in_temp[d_possible_delay[i]],
|
||||||
sizeof(gr_complex) * (d_samples_per_code));
|
sizeof(gr_complex) * (d_samples_per_code));
|
||||||
|
|
||||||
/*Perform multiplication of the unmodified local
|
// Perform multiplication of the unmodified local
|
||||||
generated code with the incoming signal with doppler
|
// generated code with the incoming signal with doppler
|
||||||
effect corrected and accumulates its value. This
|
// effect corrected and accumulates its value. This
|
||||||
is indeed correlation in time for an specific value
|
// is indeed correlation in time for an specific value
|
||||||
of a shift*/
|
// of a shift
|
||||||
volk_32fc_x2_multiply_32fc(corr_output, in_1code, d_code, d_samples_per_code);
|
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++)
|
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]);
|
complex_acumulator[i] += (corr_output[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*Obtain maximum value of correlation given the possible delay selected */
|
// Obtain maximum value of correlation given the possible delay selected
|
||||||
volk_32fc_magnitude_squared_32f(d_corr_output_f, complex_acumulator, d_folding_factor);
|
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);
|
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_delay_samples = static_cast<double>(d_possible_delay[indext]);
|
||||||
d_gnss_synchro->Acq_doppler_hz = static_cast<double>(doppler);
|
d_gnss_synchro->Acq_doppler_hz = static_cast<double>(doppler);
|
||||||
d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter;
|
d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter;
|
||||||
d_gnss_synchro->Acq_doppler_step = d_doppler_step;
|
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;
|
d_test_statistics = d_mag / d_input_power;
|
||||||
//delete complex_acumulator;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Record results to file if required
|
// Record results to file if required
|
||||||
if (d_dump)
|
if (d_dump)
|
||||||
{
|
{
|
||||||
/*Since QuickSYnc performs a folded correlation in frequency by means
|
// Since QuickSYnc performs a folded correlation in frequency by means
|
||||||
of the FFT, it is essential to also keep the values obtained from the
|
// of the FFT, it is essential to also keep the values obtained from the
|
||||||
possible delay to show how it is maximize*/
|
// possible delay to show how it is maximize
|
||||||
std::stringstream filename;
|
std::stringstream filename;
|
||||||
std::streamsize n = sizeof(float) * (d_fft_size); // complex file write
|
std::streamsize n = sizeof(float) * (d_fft_size); // complex file write
|
||||||
filename.str("");
|
filename.str("");
|
||||||
@ -492,7 +488,7 @@ int pcps_quicksync_acquisition_cc::general_work(int noutput_items,
|
|||||||
<< "_" << d_gnss_synchro->Signal << "_sat_"
|
<< "_" << d_gnss_synchro->Signal << "_sat_"
|
||||||
<< d_gnss_synchro->PRN << "_doppler_" << doppler << ".dat";
|
<< d_gnss_synchro->PRN << "_doppler_" << doppler << ".dat";
|
||||||
d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary);
|
d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary);
|
||||||
d_dump_file.write(reinterpret_cast<char*>(d_magnitude_folded), n); //write directly |abs(x)|^2 in this Doppler bin?
|
d_dump_file.write(reinterpret_cast<char*>(d_magnitude_folded), n); // write directly |abs(x)|^2 in this Doppler bin?
|
||||||
d_dump_file.close();
|
d_dump_file.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,6 @@
|
|||||||
#include "telemetry_decoder_interface.h"
|
#include "telemetry_decoder_interface.h"
|
||||||
#include "tracking_interface.h"
|
#include "tracking_interface.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <cstring> // for memcpy
|
|
||||||
#include <utility> // for std::move
|
#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);
|
std::lock_guard<std::mutex> lk(mx);
|
||||||
gnss_signal_ = gnss_signal;
|
gnss_signal_ = gnss_signal;
|
||||||
std::string str_aux = gnss_signal_.get_signal_str();
|
std::string str_aux = gnss_signal_.get_signal_str();
|
||||||
const char* str = str_aux.c_str(); // get a C style null terminated string
|
gnss_synchro_.Signal[0] = str_aux[0];
|
||||||
std::memcpy(static_cast<void*>(gnss_synchro_.Signal), str, 3); // copy string into synchro char array: 2 char + null
|
gnss_synchro_.Signal[1] = str_aux[1];
|
||||||
gnss_synchro_.Signal[2] = 0; // make sure that string length is only two characters
|
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_.PRN = gnss_signal_.get_satellite().get_PRN();
|
||||||
gnss_synchro_.System = gnss_signal_.get_satellite().get_system_short().c_str()[0];
|
gnss_synchro_.System = gnss_signal_.get_satellite().get_system_short().c_str()[0];
|
||||||
acq_->set_local_code();
|
acq_->set_local_code();
|
||||||
|
@ -31,44 +31,40 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "beidou_b1i_signal_processing.h"
|
#include "beidou_b1i_signal_processing.h"
|
||||||
|
#include <array>
|
||||||
|
|
||||||
auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); };
|
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)
|
void beidou_b1i_code_gen_int(gsl::span<int32_t> _dest, int32_t _prn, uint32_t _chip_shift)
|
||||||
{
|
{
|
||||||
const uint32_t _code_length = 2046;
|
const uint32_t _code_length = 2046;
|
||||||
bool G1[_code_length];
|
std::array<bool, _code_length> G1{};
|
||||||
bool G2[_code_length];
|
std::array<bool, _code_length> G2{};
|
||||||
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, 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 feedback1, feedback2;
|
||||||
bool aux;
|
bool aux;
|
||||||
uint32_t lcv, lcv2;
|
uint32_t lcv, lcv2;
|
||||||
uint32_t delay;
|
uint32_t delay;
|
||||||
int32_t prn_idx;
|
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*/,
|
1102, 578, 357, 1577, 1410, 1546, 1101, 707, 1576, 1409, 1545, 354 /*PRN32*/,
|
||||||
705};
|
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 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 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> 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
|
// compute delay array index for given PRN number
|
||||||
prn_idx = _prn - 1;
|
prn_idx = _prn - 1;
|
||||||
|
|
||||||
/* A simple error check */
|
// A simple error check
|
||||||
if ((prn_idx < 0) || (prn_idx > 32))
|
if ((prn_idx < 0) || (prn_idx > 32))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*for (lcv = 0; lcv < 11; lcv++)
|
// Generate G1 & G2 Register
|
||||||
{
|
|
||||||
G1_register[lcv] = 1;
|
|
||||||
G2_register[lcv] = 1;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/* Generate G1 & G2 Register */
|
|
||||||
for (lcv = 0; lcv < _code_length; lcv++)
|
for (lcv = 0; lcv < _code_length; lcv++)
|
||||||
{
|
{
|
||||||
G1[lcv] = G1_register[0];
|
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;
|
G2_register[10] = feedback2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the delay */
|
// Set the delay
|
||||||
delay = _code_length - delays[prn_idx] * 0; //**********************************
|
delay = _code_length - delays[prn_idx] * 0; //**********************************
|
||||||
delay += _chip_shift;
|
delay += _chip_shift;
|
||||||
delay %= _code_length;
|
delay %= _code_length;
|
||||||
|
|
||||||
/* Generate PRN from G1 and G2 Registers */
|
// Generate PRN from G1 and G2 Registers
|
||||||
for (lcv = 0; lcv < _code_length; lcv++)
|
for (lcv = 0; lcv < _code_length; lcv++)
|
||||||
{
|
{
|
||||||
aux = G1[(lcv + _chip_shift) % _code_length] ^ G2[delay];
|
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++;
|
delay++;
|
||||||
//std::cout << _dest[lcv] << " ";
|
|
||||||
delay %= _code_length;
|
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)
|
void beidou_b1i_code_gen_float(gsl::span<float> _dest, int32_t _prn, uint32_t _chip_shift)
|
||||||
{
|
{
|
||||||
uint32_t _code_length = 2046;
|
const uint32_t _code_length = 2046;
|
||||||
int32_t b1i_code_int[_code_length];
|
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)
|
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)
|
void beidou_b1i_code_gen_complex(gsl::span<std::complex<float>> _dest, int32_t _prn, uint32_t _chip_shift)
|
||||||
{
|
{
|
||||||
uint32_t _code_length = 2046;
|
const uint32_t _code_length = 2046;
|
||||||
int32_t b1i_code_int[_code_length];
|
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)
|
for (uint32_t ii = 0; ii < _code_length; ++ii)
|
||||||
{
|
{
|
||||||
@ -146,21 +141,22 @@ 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)
|
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
|
// 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;
|
int32_t _samplesPerCode, _codeValueIndex;
|
||||||
float _ts;
|
float _ts;
|
||||||
float _tc;
|
float _tc;
|
||||||
float aux;
|
float aux;
|
||||||
const int32_t _codeFreqBasis = 2046000; //Hz
|
const int32_t _codeFreqBasis = 2046000; // Hz
|
||||||
const int32_t _codeLength = 2046;
|
const int32_t _codeLength = 2046;
|
||||||
|
|
||||||
//--- Find number of samples per spreading code ----------------------------
|
//--- Find number of samples per spreading code ----------------------------
|
||||||
_samplesPerCode = static_cast<int32_t>(static_cast<double>(_fs) / static_cast<double>(_codeFreqBasis / _codeLength));
|
_samplesPerCode = static_cast<int32_t>(static_cast<double>(_fs) / static_cast<double>(_codeFreqBasis / _codeLength));
|
||||||
|
|
||||||
//--- Find time constants --------------------------------------------------
|
//--- Find time constants --------------------------------------------------
|
||||||
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
||||||
_tc = 1.0 / static_cast<float>(_codeFreqBasis); // C/A chip 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
|
|
||||||
|
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++)
|
for (int32_t i = 0; i < _samplesPerCode; i++)
|
||||||
{
|
{
|
||||||
|
@ -31,14 +31,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "beidou_b3i_signal_processing.h"
|
#include "beidou_b3i_signal_processing.h"
|
||||||
|
#include <array>
|
||||||
|
|
||||||
auto auxCeil = [](float x) { return static_cast<int>(static_cast<long>((x) + 1)); };
|
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)
|
void beidou_b3i_code_gen_int(gsl::span<int> _dest, signed int _prn, unsigned int _chip_shift)
|
||||||
{
|
{
|
||||||
const unsigned int _code_length = 10230;
|
const unsigned int _code_length = 10230;
|
||||||
bool G1[_code_length];
|
std::array<bool, _code_length> G1{};
|
||||||
bool G2[_code_length];
|
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> 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> 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}};
|
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 += _chip_shift;
|
||||||
delay %= _code_length;
|
delay %= _code_length;
|
||||||
|
|
||||||
/* Generate PRN from G1 and G2 Registers */
|
// Generate PRN from G1 and G2 Registers
|
||||||
for (lcv = 0; lcv < _code_length; lcv++)
|
for (lcv = 0; lcv < _code_length; lcv++)
|
||||||
{
|
{
|
||||||
aux = (G1[(lcv + _chip_shift) % _code_length] + G2[delay]) & 0x01;
|
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)
|
void beidou_b3i_code_gen_float(gsl::span<float> _dest, signed int _prn, unsigned int _chip_shift)
|
||||||
{
|
{
|
||||||
unsigned int _code_length = 10230;
|
const unsigned int _code_length = 10230;
|
||||||
int b3i_code_int[10230];
|
std::array<int, _code_length> b3i_code_int{};
|
||||||
|
|
||||||
beidou_b3i_code_gen_int(b3i_code_int, _prn, _chip_shift);
|
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)
|
void beidou_b3i_code_gen_complex(gsl::span<std::complex<float>> _dest, signed int _prn, unsigned int _chip_shift)
|
||||||
{
|
{
|
||||||
unsigned int _code_length = 10230;
|
const unsigned int _code_length = 10230;
|
||||||
int b3i_code_int[10230];
|
std::array<int, _code_length> b3i_code_int{};
|
||||||
|
|
||||||
beidou_b3i_code_gen_int(b3i_code_int, _prn, _chip_shift);
|
beidou_b3i_code_gen_int(b3i_code_int, _prn, _chip_shift);
|
||||||
|
|
||||||
@ -203,12 +204,12 @@ 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)
|
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
|
// 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;
|
signed int _samplesPerCode, _codeValueIndex;
|
||||||
float _ts;
|
float _ts;
|
||||||
float _tc;
|
float _tc;
|
||||||
float aux;
|
float aux;
|
||||||
const signed int _codeFreqBasis = 10230000; //Hz
|
const signed int _codeFreqBasis = 10230000; // Hz
|
||||||
const signed int _codeLength = 10230;
|
const signed int _codeLength = 10230;
|
||||||
|
|
||||||
//--- Find number of samples per spreading code ----------------------------
|
//--- Find number of samples per spreading code ----------------------------
|
||||||
@ -217,7 +218,7 @@ void beidou_b3i_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, u
|
|||||||
//--- Find time constants --------------------------------------------------
|
//--- Find time constants --------------------------------------------------
|
||||||
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
||||||
_tc = 1.0 / static_cast<float>(_codeFreqBasis); // C/A chip period in sec
|
_tc = 1.0 / static_cast<float>(_codeFreqBasis); // C/A chip period in sec
|
||||||
beidou_b3i_code_gen_complex(_code, _prn, _chip_shift); //generate C/A code 1 sample per chip
|
beidou_b3i_code_gen_complex(_code, _prn, _chip_shift); // generate C/A code 1 sample per chip
|
||||||
|
|
||||||
for (signed int i = 0; i < _samplesPerCode; i++)
|
for (signed int i = 0; i < _samplesPerCode; i++)
|
||||||
{
|
{
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "Galileo_E1.h"
|
#include "Galileo_E1.h"
|
||||||
#include "gnss_signal_processing.h"
|
#include "gnss_signal_processing.h"
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#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();
|
std::string _galileo_signal = _Signal.data();
|
||||||
const auto _codeLength = static_cast<uint32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS);
|
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
|
std::array<int32_t, 4092> primary_code_E1_chips{}; // _codeLength not accepted by Clang
|
||||||
galileo_e1_code_gen_int(primary_code_E1_chips, _Signal, _prn); //generate Galileo E1 code, 1 sample per chip
|
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++)
|
for (uint32_t i = 0; i < _codeLength; i++)
|
||||||
{
|
{
|
||||||
_dest[2 * i] = static_cast<float>(primary_code_E1_chips[i]);
|
_dest[2 * i] = static_cast<float>(primary_code_E1_chips[i]);
|
||||||
@ -127,13 +128,13 @@ 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 alpha = sqrt(10.0 / 11.0);
|
||||||
const float beta = sqrt(1.0 / 11.0);
|
const float beta = sqrt(1.0 / 11.0);
|
||||||
|
|
||||||
int32_t sinboc_11[12 * 4092] = {0}; // _codeLength not accepted by Clang
|
std::array<int32_t, 12 * 4092> sinboc_11{};
|
||||||
int32_t sinboc_61[12 * 4092] = {0};
|
std::array<int32_t, 12 * 4092> sinboc_61{};
|
||||||
gsl::span<int32_t> sinboc_11_(sinboc_11, _codeLength);
|
gsl::span<int32_t> sinboc_11_(sinboc_11.data(), _codeLength);
|
||||||
gsl::span<int32_t> sinboc_61_(sinboc_61, _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_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
|
galileo_e1_sinboc_61_gen_int(sinboc_61_, _prn); // generate sinboc(6,1) 12 samples per chip
|
||||||
|
|
||||||
if (_galileo_signal.rfind("1B") != std::string::npos && _galileo_signal.length() >= 2)
|
if (_galileo_signal.rfind("1B") != std::string::npos && _galileo_signal.length() >= 2)
|
||||||
{
|
{
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#include "Galileo_E5a.h"
|
#include "Galileo_E5a.h"
|
||||||
#include "gnss_signal_processing.h"
|
#include "gnss_signal_processing.h"
|
||||||
#include <gnuradio/gr_complex.h>
|
#include <gnuradio/gr_complex.h>
|
||||||
|
#include <array>
|
||||||
#include <memory>
|
#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 prn = _prn - 1;
|
||||||
uint32_t index = 0;
|
uint32_t index = 0;
|
||||||
int32_t a[4];
|
std::array<int32_t, 4> a{};
|
||||||
if ((_prn < 1) || (_prn > 50))
|
if ((_prn < 1) || (_prn > 50))
|
||||||
{
|
{
|
||||||
return;
|
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')
|
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++)
|
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));
|
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)
|
arma::vec CTM_to_Euler(const arma::mat &C)
|
||||||
{
|
{
|
||||||
// Calculate Euler angles using (2.23)
|
// 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);
|
arma::vec eul = arma::zeros(3, 1);
|
||||||
eul(0) = atan2(CTM(1, 2), CTM(2, 2)); // roll
|
eul(0) = atan2(CTM(1, 2), CTM(2, 2)); // roll
|
||||||
if (CTM(0, 2) < -1.0)
|
if (CTM(0, 2) < -1.0)
|
||||||
|
@ -31,14 +31,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "glonass_l1_signal_processing.h"
|
#include "glonass_l1_signal_processing.h"
|
||||||
|
#include <array>
|
||||||
|
|
||||||
auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); };
|
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)
|
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;
|
const uint32_t _code_length = 511;
|
||||||
bool G1[_code_length];
|
std::array<bool, _code_length> G1{};
|
||||||
bool G1_register[9];
|
std::array<bool, 9> G1_register{};
|
||||||
bool feedback1;
|
bool feedback1;
|
||||||
bool aux;
|
bool aux;
|
||||||
uint32_t delay;
|
uint32_t delay;
|
||||||
@ -107,21 +108,22 @@ 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)
|
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
|
// 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;
|
int32_t _samplesPerCode, _codeValueIndex;
|
||||||
float _ts;
|
float _ts;
|
||||||
float _tc;
|
float _tc;
|
||||||
float aux;
|
float aux;
|
||||||
const int32_t _codeFreqBasis = 511000; //Hz
|
const int32_t _codeFreqBasis = 511000; // Hz
|
||||||
const int32_t _codeLength = 511;
|
const int32_t _codeLength = 511;
|
||||||
|
|
||||||
//--- Find number of samples per spreading code ----------------------------
|
//--- Find number of samples per spreading code ----------------------------
|
||||||
_samplesPerCode = static_cast<int32_t>(static_cast<double>(_fs) / static_cast<double>(_codeFreqBasis / _codeLength));
|
_samplesPerCode = static_cast<int32_t>(static_cast<double>(_fs) / static_cast<double>(_codeFreqBasis / _codeLength));
|
||||||
|
|
||||||
//--- Find time constants --------------------------------------------------
|
//--- Find time constants --------------------------------------------------
|
||||||
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
||||||
_tc = 1.0 / static_cast<float>(_codeFreqBasis); // C/A chip 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++)
|
for (int32_t i = 0; i < _samplesPerCode; i++)
|
||||||
{
|
{
|
||||||
|
@ -31,14 +31,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "glonass_l2_signal_processing.h"
|
#include "glonass_l2_signal_processing.h"
|
||||||
|
#include <array>
|
||||||
|
|
||||||
auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); };
|
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)
|
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;
|
const uint32_t _code_length = 511;
|
||||||
bool G1[_code_length];
|
std::array<bool, _code_length> G1{};
|
||||||
bool G1_register[9];
|
std::array<bool, 9> G1_register{};
|
||||||
bool feedback1;
|
bool feedback1;
|
||||||
bool aux;
|
bool aux;
|
||||||
uint32_t delay;
|
uint32_t delay;
|
||||||
@ -107,21 +108,22 @@ 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)
|
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
|
// 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;
|
int32_t _samplesPerCode, _codeValueIndex;
|
||||||
float _ts;
|
float _ts;
|
||||||
float _tc;
|
float _tc;
|
||||||
float aux;
|
float aux;
|
||||||
const int32_t _codeFreqBasis = 511000; //Hz
|
const int32_t _codeFreqBasis = 511000; // Hz
|
||||||
const int32_t _codeLength = 511;
|
const int32_t _codeLength = 511;
|
||||||
|
|
||||||
//--- Find number of samples per spreading code ----------------------------
|
//--- Find number of samples per spreading code ----------------------------
|
||||||
_samplesPerCode = static_cast<int32_t>(static_cast<double>(_fs) / static_cast<double>(_codeFreqBasis / _codeLength));
|
_samplesPerCode = static_cast<int32_t>(static_cast<double>(_fs) / static_cast<double>(_codeFreqBasis / _codeLength));
|
||||||
|
|
||||||
//--- Find time constants --------------------------------------------------
|
//--- Find time constants --------------------------------------------------
|
||||||
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
||||||
_tc = 1.0 / static_cast<float>(_codeFreqBasis); // C/A chip 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++)
|
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;
|
errorlib::error_code ec;
|
||||||
os_test_file.close();
|
os_test_file.close();
|
||||||
|
|
||||||
fs::remove(test_file, ec);
|
if (!fs::remove(test_file, ec))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (static_cast<bool>(ec))
|
if (static_cast<bool>(ec))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -31,23 +31,25 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gps_sdr_signal_processing.h"
|
#include "gps_sdr_signal_processing.h"
|
||||||
|
#include <array>
|
||||||
|
|
||||||
auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); };
|
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)
|
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;
|
const uint32_t _code_length = 1023;
|
||||||
bool G1[_code_length];
|
std::array<bool, _code_length> G1{};
|
||||||
bool G2[_code_length];
|
std::array<bool, _code_length> G2{};
|
||||||
bool G1_register[10], G2_register[10];
|
std::array<bool, 10> G1_register{};
|
||||||
|
std::array<bool, 10> G2_register{};
|
||||||
bool feedback1, feedback2;
|
bool feedback1, feedback2;
|
||||||
bool aux;
|
bool aux;
|
||||||
uint32_t lcv, lcv2;
|
uint32_t lcv, lcv2;
|
||||||
uint32_t delay;
|
uint32_t delay;
|
||||||
int32_t prn_idx;
|
int32_t prn_idx;
|
||||||
|
|
||||||
/* G2 Delays as defined in GPS-ISD-200D */
|
// 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,
|
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*/,
|
473, 474, 509, 512, 513, 514, 515, 516, 859, 860, 861, 862 /*PRN32*/,
|
||||||
145 /*PRN120*/, 175, 52, 21, 237, 235, 886, 657, 634, 762,
|
145 /*PRN120*/, 175, 52, 21, 237, 235, 886, 657, 634, 762,
|
||||||
355, 1012, 176, 603, 130, 359, 595, 68, 386 /*PRN138*/};
|
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;
|
prn_idx = _prn - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* A simple error check */
|
// A simple error check
|
||||||
if ((prn_idx < 0) || (prn_idx > 51))
|
if ((prn_idx < 0) || (prn_idx > 51))
|
||||||
{
|
{
|
||||||
return;
|
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;
|
G2_register[lcv] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generate G1 & G2 Register */
|
// Generate G1 & G2 Register
|
||||||
for (lcv = 0; lcv < _code_length; lcv++)
|
for (lcv = 0; lcv < _code_length; lcv++)
|
||||||
{
|
{
|
||||||
G1[lcv] = G1_register[0];
|
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;
|
G2_register[9] = feedback2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the delay */
|
// Set the delay
|
||||||
delay = _code_length - delays[prn_idx];
|
delay = _code_length - delays[prn_idx];
|
||||||
delay += _chip_shift;
|
delay += _chip_shift;
|
||||||
delay %= _code_length;
|
delay %= _code_length;
|
||||||
|
|
||||||
/* Generate PRN from G1 and G2 Registers */
|
// Generate PRN from G1 and G2 Registers
|
||||||
for (lcv = 0; lcv < _code_length; lcv++)
|
for (lcv = 0; lcv < _code_length; lcv++)
|
||||||
{
|
{
|
||||||
aux = G1[(lcv + _chip_shift) % _code_length] ^ G2[delay];
|
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)
|
void gps_l1_ca_code_gen_float(gsl::span<float> _dest, int32_t _prn, uint32_t _chip_shift)
|
||||||
{
|
{
|
||||||
const uint32_t _code_length = 1023;
|
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);
|
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)
|
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;
|
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);
|
gps_l1_ca_code_gen_int(ca_code_int, _prn, _chip_shift);
|
||||||
|
|
||||||
@ -151,12 +153,12 @@ 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)
|
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
|
// 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;
|
int32_t _samplesPerCode, _codeValueIndex;
|
||||||
float _ts;
|
float _ts;
|
||||||
float _tc;
|
float _tc;
|
||||||
float aux;
|
float aux;
|
||||||
const int32_t _codeFreqBasis = 1023000; //Hz
|
const int32_t _codeFreqBasis = 1023000; // Hz
|
||||||
const int32_t _codeLength = 1023;
|
const int32_t _codeLength = 1023;
|
||||||
|
|
||||||
//--- Find number of samples per spreading code ----------------------------
|
//--- Find number of samples per spreading code ----------------------------
|
||||||
@ -165,7 +167,7 @@ void gps_l1_ca_code_gen_complex_sampled(gsl::span<std::complex<float>> _dest, ui
|
|||||||
//--- Find time constants --------------------------------------------------
|
//--- Find time constants --------------------------------------------------
|
||||||
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
||||||
_tc = 1.0 / static_cast<float>(_codeFreqBasis); // C/A chip period in sec
|
_tc = 1.0 / static_cast<float>(_codeFreqBasis); // C/A chip period in sec
|
||||||
gps_l1_ca_code_gen_complex(_code, _prn, _chip_shift); //generate C/A code 1 sample per chip
|
gps_l1_ca_code_gen_complex(_code, _prn, _chip_shift); // generate C/A code 1 sample per chip
|
||||||
|
|
||||||
for (int32_t i = 0; i < _samplesPerCode; i++)
|
for (int32_t i = 0; i < _samplesPerCode; i++)
|
||||||
{
|
{
|
||||||
|
@ -221,7 +221,7 @@ int decode_sbstype6(const sbsmsg_t *msg, sbssat_t *sbssat)
|
|||||||
}
|
}
|
||||||
for (i = 0; i < sbssat->nsat && i < MAXSAT; i++)
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -267,15 +267,24 @@ void write_results(const std::vector<volk_gnsssdr_test_results_t> *results, bool
|
|||||||
// do not overwrite volk_gnsssdr_config when using a regex.
|
// do not overwrite volk_gnsssdr_config when using a regex.
|
||||||
if (!fs::exists(config_path.parent_path()))
|
if (!fs::exists(config_path.parent_path()))
|
||||||
{
|
{
|
||||||
std::cout << "Creating " << config_path.parent_path() << " ..." << std::endl;
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
fs::create_directories(config_path.parent_path());
|
std::cout << "Creating " << config_path.parent_path() << " ..." << std::endl;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
fs::create_directories(config_path.parent_path());
|
||||||
|
}
|
||||||
|
catch (const fs::filesystem_error &e)
|
||||||
|
{
|
||||||
|
std::cerr << "ERROR: Could not create folder " << config_path.parent_path() << std::endl;
|
||||||
|
std::cerr << "Reason: " << e.what() << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (const fs::filesystem_error &e)
|
catch (...)
|
||||||
{
|
{
|
||||||
std::cerr << "ERROR: Could not create folder " << config_path.parent_path() << std::endl;
|
// Catch exception when using std::experimental
|
||||||
std::cerr << "Reason: " << e.what() << std::endl;
|
std::cerr << "ERROR: Could not create folder" << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <matio.h>
|
#include <matio.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath> // for round
|
#include <cmath> // for round
|
||||||
#include <cstdlib> // for size_t, llabs
|
#include <cstdlib> // for size_t, llabs
|
||||||
#include <exception> // for exception
|
#include <exception> // for exception
|
||||||
@ -46,6 +47,8 @@
|
|||||||
#include <utility> // for move
|
#include <utility> // for move
|
||||||
|
|
||||||
#if HAS_STD_FILESYSTEM
|
#if HAS_STD_FILESYSTEM
|
||||||
|
#include <system_error>
|
||||||
|
namespace errorlib = std;
|
||||||
#if HAS_STD_FILESYSTEM_EXPERIMENTAL
|
#if HAS_STD_FILESYSTEM_EXPERIMENTAL
|
||||||
#include <experimental/filesystem>
|
#include <experimental/filesystem>
|
||||||
namespace fs = std::experimental::filesystem;
|
namespace fs = std::experimental::filesystem;
|
||||||
@ -54,8 +57,12 @@ namespace fs = std::experimental::filesystem;
|
|||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
#endif
|
#endif
|
||||||
#else
|
#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 fs = boost::filesystem;
|
||||||
|
namespace errorlib = boost::system;
|
||||||
#endif
|
#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)));
|
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,
|
hybrid_observables_gs::hybrid_observables_gs(uint32_t nchannels_in,
|
||||||
uint32_t nchannels_out,
|
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_out = nchannels_out;
|
||||||
d_nchannels_in = nchannels_in;
|
d_nchannels_in = nchannels_in;
|
||||||
T_rx_offset_ms = 0;
|
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 #################
|
// ############# ENABLE DATA FILE LOG #################
|
||||||
if (d_dump)
|
if (d_dump)
|
||||||
@ -172,9 +152,9 @@ hybrid_observables_gs::hybrid_observables_gs(uint32_t nchannels_in,
|
|||||||
|
|
||||||
hybrid_observables_gs::~hybrid_observables_gs()
|
hybrid_observables_gs::~hybrid_observables_gs()
|
||||||
{
|
{
|
||||||
delete d_gnss_synchro_history;
|
|
||||||
if (d_dump_file.is_open())
|
if (d_dump_file.is_open())
|
||||||
{
|
{
|
||||||
|
auto pos = d_dump_file.tellp();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
d_dump_file.close();
|
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();
|
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)
|
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()
|
int32_t hybrid_observables_gs::save_matfile()
|
||||||
{
|
{
|
||||||
// READ DUMP FILE
|
// READ DUMP FILE
|
||||||
@ -300,32 +317,32 @@ int32_t hybrid_observables_gs::save_matfile()
|
|||||||
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
||||||
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
||||||
{
|
{
|
||||||
size_t dims[2] = {static_cast<size_t>(d_nchannels_out), static_cast<size_t>(num_epoch)};
|
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, RX_time_aux.data(), MAT_F_DONT_COPY_DATA);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
#include <gnuradio/types.h> // for gr_vector_int
|
#include <gnuradio/types.h> // for gr_vector_int
|
||||||
#include <cstdint> // for int32_t
|
#include <cstdint> // for int32_t
|
||||||
#include <fstream> // for string, ofstream
|
#include <fstream> // for string, ofstream
|
||||||
|
#include <memory> // for shared_ptr
|
||||||
#include <vector> // for vector
|
#include <vector> // for vector
|
||||||
|
|
||||||
class Gnss_Synchro;
|
class Gnss_Synchro;
|
||||||
@ -95,8 +96,8 @@ private:
|
|||||||
double T_rx_offset_ms;
|
double T_rx_offset_ms;
|
||||||
std::string d_dump_filename;
|
std::string d_dump_filename;
|
||||||
std::ofstream d_dump_file;
|
std::ofstream d_dump_file;
|
||||||
boost::circular_buffer<uint64_t> d_Rx_clock_buffer; // time history
|
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);
|
void msg_handler_pvt_to_observables(const pmt::pmt_t& msg);
|
||||||
double compute_T_rx_s(const Gnss_Synchro& a);
|
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);
|
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 "gps_sdr_signal_processing.h"
|
||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <utility>
|
#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)));
|
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")
|
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++)
|
for (unsigned int i = 0; i < num_of_codes_per_vector_[sat]; i++)
|
||||||
{
|
{
|
||||||
memcpy(&(sampled_code_data_[sat][i * samples_per_code_[sat]]),
|
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")
|
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++)
|
for (unsigned int i = 0; i < num_of_codes_per_vector_[sat]; i++)
|
||||||
{
|
{
|
||||||
memcpy(&(sampled_code_data_[sat][i * samples_per_code_[sat]]),
|
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")
|
else if (system_[sat] == "E")
|
||||||
@ -227,7 +228,7 @@ void signal_generator_c::generate_codes()
|
|||||||
bool cboc = true;
|
bool cboc = true;
|
||||||
std::array<char, 3> signal = {{'1', 'B', '\0'}};
|
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]);
|
static_cast<int>(GALILEO_E1_B_CODE_LENGTH_CHIPS) - delay_chips_[sat]);
|
||||||
|
|
||||||
// Obtain the desired CN0 assuming that Pn = 1.
|
// 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++)
|
for (unsigned int i = 0; i < num_of_codes_per_vector_[sat]; i++)
|
||||||
{
|
{
|
||||||
memcpy(&(sampled_code_data_[sat][i * samples_per_code_[sat]]),
|
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)
|
// Generate E1C signal (25 code-periods, with secondary code)
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
#include "gr_complex_ip_packet_source.h"
|
#include "gr_complex_ip_packet_source.h"
|
||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
|
#include <array>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
@ -184,14 +185,14 @@ bool Gr_Complex_Ip_Packet_Source::stop()
|
|||||||
|
|
||||||
bool Gr_Complex_Ip_Packet_Source::open()
|
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
|
boost::mutex::scoped_lock lock(d_mutex); // hold mutex for duration of this function
|
||||||
// open device for reading
|
// 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)
|
if (descr == nullptr)
|
||||||
{
|
{
|
||||||
std::cout << "Error opening Ethernet device " << d_src_device << std::endl;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
// bind UDP port to avoid automatic reply with ICMP port unreachable packets from kernel
|
// bind UDP port to avoid automatic reply with ICMP port unreachable packets from kernel
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include "labsat23_source.h"
|
#include "labsat23_source.h"
|
||||||
#include "control_message_factory.h"
|
#include "control_message_factory.h"
|
||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
|
#include <array>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
@ -215,8 +216,8 @@ int labsat23_source::general_work(int noutput_items,
|
|||||||
{
|
{
|
||||||
if (binary_input_file->eof() == false)
|
if (binary_input_file->eof() == false)
|
||||||
{
|
{
|
||||||
char memblock[1024];
|
std::array<char, 1024> memblock{};
|
||||||
binary_input_file->read(memblock, 1024);
|
binary_input_file->read(memblock.data(), 1024);
|
||||||
// parse Labsat header
|
// parse Labsat header
|
||||||
// check preamble
|
// check preamble
|
||||||
int byte_counter = 0;
|
int byte_counter = 0;
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
#include <pmt/pmt.h> // for make_any
|
#include <pmt/pmt.h> // for make_any
|
||||||
#include <pmt/pmt_sugar.h> // for mp
|
#include <pmt/pmt_sugar.h> // for mp
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <cstdlib> // for abs
|
#include <cstdlib> // for abs
|
||||||
#include <exception> // for exception
|
#include <exception> // for exception
|
||||||
#include <iostream> // for cout
|
#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)
|
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 bit, err;
|
||||||
int32_t errind[15] = {14, 13, 10, 12, 6, 9, 4, 11, 0, 5, 7, 8, 1, 3, 2};
|
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++)
|
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,
|
const float *enc_word_symbols,
|
||||||
int32_t *dec_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)
|
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[0], first_branch.data());
|
||||||
decode_bch15_11_01(&bitsbch[15], second_branch);
|
decode_bch15_11_01(&bitsbch[15], second_branch.data());
|
||||||
|
|
||||||
for (uint32_t j = 0; j < 11; j++)
|
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
|
// 1. Transform from symbols to bits
|
||||||
std::string data_bits;
|
std::string data_bits;
|
||||||
int32_t dec_word_bits[30];
|
std::array<int32_t, 30> dec_word_bits{};
|
||||||
|
|
||||||
// Decode each word in subframe
|
// Decode each word in subframe
|
||||||
for (uint32_t ii = 0; ii < BEIDOU_DNAV_WORDS_SUBFRAME; ii++)
|
for (uint32_t ii = 0; ii < BEIDOU_DNAV_WORDS_SUBFRAME; ii++)
|
||||||
{
|
{
|
||||||
// decode the word
|
// 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
|
// Save word to string format
|
||||||
for (uint32_t jj = 0; jj < (BEIDOU_DNAV_WORD_LENGTH_BITS); jj++)
|
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.h> // for make_any
|
||||||
#include <pmt/pmt_sugar.h> // for mp
|
#include <pmt/pmt_sugar.h> // for mp
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <cstdlib> // for abs
|
#include <cstdlib> // for abs
|
||||||
#include <exception> // for exception
|
#include <exception> // for exception
|
||||||
#include <iostream> // for cout
|
#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,
|
void beidou_b3i_telemetry_decoder_gs::decode_bch15_11_01(const int32_t *bits,
|
||||||
int32_t *decbits)
|
int32_t *decbits)
|
||||||
{
|
{
|
||||||
int32_t bit, err, reg[4] = {1, 1, 1, 1};
|
int32_t bit, err;
|
||||||
int32_t errind[15] = {14, 13, 10, 12, 6, 9, 4, 11, 0, 5, 7, 8, 1, 3, 2};
|
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++)
|
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,
|
const float *enc_word_symbols,
|
||||||
int32_t *dec_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)
|
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[0], first_branch.data());
|
||||||
decode_bch15_11_01(&bitsbch[15], second_branch);
|
decode_bch15_11_01(&bitsbch[15], second_branch.data());
|
||||||
|
|
||||||
for (uint32_t j = 0; j < 11; j++)
|
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
|
// 1. Transform from symbols to bits
|
||||||
std::string data_bits;
|
std::string data_bits;
|
||||||
int32_t dec_word_bits[30];
|
std::array<int32_t, 30> dec_word_bits{};
|
||||||
|
|
||||||
// Decode each word in subframe
|
// Decode each word in subframe
|
||||||
for (uint32_t ii = 0; ii < BEIDOU_DNAV_WORDS_SUBFRAME; ii++)
|
for (uint32_t ii = 0; ii < BEIDOU_DNAV_WORDS_SUBFRAME; ii++)
|
||||||
{
|
{
|
||||||
// decode the word
|
// 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
|
// Save word to string format
|
||||||
for (uint32_t jj = 0; jj < (BEIDOU_DNAV_WORD_LENGTH_BITS); jj++)
|
for (uint32_t jj = 0; jj < (BEIDOU_DNAV_WORD_LENGTH_BITS); jj++)
|
||||||
|
@ -38,12 +38,13 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <pmt/pmt.h> // for make_any
|
#include <pmt/pmt.h> // for make_any
|
||||||
#include <pmt/pmt_sugar.h> // for mp
|
#include <pmt/pmt_sugar.h> // for mp
|
||||||
#include <cmath> // for floor, round
|
#include <array>
|
||||||
#include <cstdlib> // for abs, malloc
|
#include <cmath> // for floor, round
|
||||||
#include <cstring> // for memcpy
|
#include <cstdlib> // for abs, malloc
|
||||||
#include <exception> // for exception
|
#include <cstring> // for memcpy
|
||||||
#include <iostream> // for cout
|
#include <exception> // for exception
|
||||||
#include <memory> // for shared_ptr, make_shared
|
#include <iostream> // for cout
|
||||||
|
#include <memory> // for shared_ptr, make_shared
|
||||||
|
|
||||||
#define CRC_ERROR_LIMIT 6
|
#define CRC_ERROR_LIMIT 6
|
||||||
|
|
||||||
@ -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;
|
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
|
// 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
|
// Since preamble rate is different than navigation data rate we use a constant
|
||||||
d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS;
|
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
|
// preamble bits to sampled symbols
|
||||||
d_preambles_symbols = static_cast<int32_t *>(malloc(sizeof(int32_t) * d_symbols_per_preamble));
|
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
|
// NEW GLONASS string received
|
||||||
// 0. fetch the symbols into an array
|
// 0. fetch the symbols into an array
|
||||||
int32_t string_length = GLONASS_GNAV_STRING_SYMBOLS - d_symbols_per_preamble;
|
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 *******
|
// ******* SYMBOL TO BIT *******
|
||||||
for (int32_t i = 0; i < string_length; i++)
|
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
|
// call the decoder
|
||||||
decode_string(string_symbols, string_length);
|
decode_string(string_symbols.data(), string_length);
|
||||||
if (d_nav.flag_CRC_test == true)
|
if (d_nav.flag_CRC_test == true)
|
||||||
{
|
{
|
||||||
d_CRC_error_counter = 0;
|
d_CRC_error_counter = 0;
|
||||||
|
@ -38,12 +38,13 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <pmt/pmt.h> // for make_any
|
#include <pmt/pmt.h> // for make_any
|
||||||
#include <pmt/pmt_sugar.h> // for mp
|
#include <pmt/pmt_sugar.h> // for mp
|
||||||
#include <cmath> // for floor, round
|
#include <array>
|
||||||
#include <cstdlib> // for abs, malloc
|
#include <cmath> // for floor, round
|
||||||
#include <cstring> // for memcpy
|
#include <cstdlib> // for abs, malloc
|
||||||
#include <exception> // for exception
|
#include <cstring> // for memcpy
|
||||||
#include <iostream> // for cout
|
#include <exception> // for exception
|
||||||
#include <memory> // for shared_ptr, make_shared
|
#include <iostream> // for cout
|
||||||
|
#include <memory> // for shared_ptr, make_shared
|
||||||
|
|
||||||
#define CRC_ERROR_LIMIT 6
|
#define CRC_ERROR_LIMIT 6
|
||||||
|
|
||||||
@ -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;
|
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
|
// 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
|
// Since preamble rate is different than navigation data rate we use a constant
|
||||||
d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS;
|
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
|
// preamble bits to sampled symbols
|
||||||
d_preambles_symbols = static_cast<int32_t *>(malloc(sizeof(int32_t) * d_symbols_per_preamble));
|
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
|
// NEW GLONASS string received
|
||||||
// 0. fetch the symbols into an array
|
// 0. fetch the symbols into an array
|
||||||
int32_t string_length = GLONASS_GNAV_STRING_SYMBOLS - d_symbols_per_preamble;
|
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 *******
|
// ******* SYMBOL TO BIT *******
|
||||||
for (int32_t i = 0; i < string_length; i++)
|
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
|
// call the decoder
|
||||||
decode_string(string_symbols, string_length);
|
decode_string(string_symbols.data(), string_length);
|
||||||
if (d_nav.flag_CRC_test == true)
|
if (d_nav.flag_CRC_test == true)
|
||||||
{
|
{
|
||||||
d_CRC_error_counter = 0;
|
d_CRC_error_counter = 0;
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#include <pmt/pmt.h> // for make_any
|
#include <pmt/pmt.h> // for make_any
|
||||||
#include <pmt/pmt_sugar.h> // for mp
|
#include <pmt/pmt_sugar.h> // for mp
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath> // for round
|
#include <cmath> // for round
|
||||||
#include <cstring> // for memcpy
|
#include <cstring> // for memcpy
|
||||||
#include <exception> // for exception
|
#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()
|
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 frame_bit_index = 0;
|
||||||
int32_t word_index = 0;
|
int32_t word_index = 0;
|
||||||
uint32_t GPS_frame_4bytes = 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!
|
// NEW GPS SUBFRAME HAS ARRIVED!
|
||||||
if (subframe_synchro_confirmation)
|
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)
|
if (subframe_ID > 0 and subframe_ID < 6)
|
||||||
{
|
{
|
||||||
std::cout << "New GPS NAV message received in channel " << this->d_channel << ": "
|
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
|
// 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++)
|
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);
|
d_CNAV_Message.decode_page(raw_bits);
|
||||||
|
@ -34,9 +34,10 @@
|
|||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <pmt/pmt_sugar.h> // for mp
|
#include <pmt/pmt_sugar.h> // for mp
|
||||||
#include <cmath> // for abs
|
#include <array>
|
||||||
#include <exception> // for exception
|
#include <cmath> // for abs
|
||||||
#include <iomanip> // for operator<<, setw
|
#include <exception> // for exception
|
||||||
|
#include <iomanip> // for operator<<, setw
|
||||||
|
|
||||||
// logging levels
|
// logging levels
|
||||||
#define EVENT 2 // logs important events which don't occur every block
|
#define EVENT 2 // logs important events which don't occur every block
|
||||||
@ -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)
|
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;
|
double corr_diff;
|
||||||
bool stand_by = true;
|
bool stand_by = true;
|
||||||
double sym;
|
double sym;
|
||||||
@ -191,12 +192,10 @@ sbas_l1_telemetry_decoder_gs::Symbol_Aligner_And_Decoder::Symbol_Aligner_And_Dec
|
|||||||
// convolutional code properties
|
// convolutional code properties
|
||||||
d_KK = 7;
|
d_KK = 7;
|
||||||
const int32_t nn = 2;
|
const int32_t nn = 2;
|
||||||
int32_t g_encoder[nn];
|
std::array<int32_t, nn> g_encoder{121, 91};
|
||||||
g_encoder[0] = 121;
|
|
||||||
g_encoder[1] = 91;
|
|
||||||
|
|
||||||
d_vd1 = 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, d_KK, nn);
|
d_vd2 = new Viterbi_Decoder(g_encoder.data(), d_KK, nn);
|
||||||
d_past_symbol = 0;
|
d_past_symbol = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
#include "dll_pll_conf.h"
|
#include "dll_pll_conf.h"
|
||||||
#include "gnss_sdr_flags.h"
|
#include "gnss_sdr_flags.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
|
||||||
BeidouB1iDllPllTracking::BeidouB1iDllPllTracking(
|
BeidouB1iDllPllTracking::BeidouB1iDllPllTracking(
|
||||||
@ -149,8 +150,8 @@ BeidouB1iDllPllTracking::BeidouB1iDllPllTracking(
|
|||||||
trk_param.very_early_late_space_narrow_chips = 0.0;
|
trk_param.very_early_late_space_narrow_chips = 0.0;
|
||||||
trk_param.track_pilot = false;
|
trk_param.track_pilot = false;
|
||||||
trk_param.system = 'C';
|
trk_param.system = 'C';
|
||||||
char sig_[3] = "B1";
|
std::array<char, 3> sig_{'B', '1', '\0'};
|
||||||
std::memcpy(trk_param.signal, sig_, 3);
|
std::memcpy(trk_param.signal, sig_.data(), 3);
|
||||||
|
|
||||||
trk_param.cn0_samples = configuration->property(role + ".cn0_samples", trk_param.cn0_samples);
|
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.cn0_min = configuration->property(role + ".cn0_min", trk_param.cn0_min);
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
#include "dll_pll_conf.h"
|
#include "dll_pll_conf.h"
|
||||||
#include "gnss_sdr_flags.h"
|
#include "gnss_sdr_flags.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
using google::LogMessage;
|
using google::LogMessage;
|
||||||
|
|
||||||
@ -154,8 +155,8 @@ BeidouB3iDllPllTracking::BeidouB3iDllPllTracking(
|
|||||||
trk_param.very_early_late_space_chips = 0.0;
|
trk_param.very_early_late_space_chips = 0.0;
|
||||||
trk_param.very_early_late_space_narrow_chips = 0.0;
|
trk_param.very_early_late_space_narrow_chips = 0.0;
|
||||||
trk_param.system = 'C';
|
trk_param.system = 'C';
|
||||||
char sig_[3] = "B3";
|
std::array<char, 3> sig_{'B', '3', '\0'};
|
||||||
std::memcpy(trk_param.signal, sig_, 3);
|
std::memcpy(trk_param.signal, sig_.data(), 3);
|
||||||
trk_param.cn0_samples = configuration->property(role + ".cn0_samples", trk_param.cn0_samples);
|
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.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);
|
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 "dll_pll_conf.h"
|
||||||
#include "gnss_sdr_flags.h"
|
#include "gnss_sdr_flags.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
GalileoE1DllPllVemlTracking::GalileoE1DllPllVemlTracking(
|
GalileoE1DllPllVemlTracking::GalileoE1DllPllVemlTracking(
|
||||||
ConfigurationInterface* configuration, const std::string& role,
|
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));
|
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.vector_length = vector_length;
|
||||||
trk_param.system = 'E';
|
trk_param.system = 'E';
|
||||||
char sig_[3] = "1B";
|
std::array<char, 3> sig_{'1', 'B', '\0'};
|
||||||
std::memcpy(trk_param.signal, sig_, 3);
|
std::memcpy(trk_param.signal, sig_.data(), 3);
|
||||||
trk_param.cn0_samples = configuration->property(role + ".cn0_samples", trk_param.cn0_samples);
|
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.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);
|
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 "gnss_synchro.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath> // for round
|
#include <cmath> // for round
|
||||||
#include <cstring> // for memcpy
|
#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
|
// 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.
|
// 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));
|
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.vector_length = vector_length;
|
||||||
trk_param_fpga.system = 'E';
|
trk_param_fpga.system = 'E';
|
||||||
char sig_[3] = "1B";
|
std::array<char, 3> sig_{'1', 'B', '\0'};
|
||||||
std::memcpy(trk_param_fpga.signal, sig_, 3);
|
std::memcpy(trk_param_fpga.signal, sig_.data(), 3);
|
||||||
int32_t cn0_samples = configuration->property(role + ".cn0_samples", 20);
|
int32_t cn0_samples = configuration->property(role + ".cn0_samples", 20);
|
||||||
if (FLAGS_cn0_samples != 20)
|
if (FLAGS_cn0_samples != 20)
|
||||||
{
|
{
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
#include "dll_pll_conf.h"
|
#include "dll_pll_conf.h"
|
||||||
#include "gnss_sdr_flags.h"
|
#include "gnss_sdr_flags.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
GalileoE5aDllPllTracking::GalileoE5aDllPllTracking(
|
GalileoE5aDllPllTracking::GalileoE5aDllPllTracking(
|
||||||
ConfigurationInterface* configuration, const std::string& role,
|
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_chips = 0.0;
|
||||||
trk_param.very_early_late_space_narrow_chips = 0.0;
|
trk_param.very_early_late_space_narrow_chips = 0.0;
|
||||||
trk_param.system = 'E';
|
trk_param.system = 'E';
|
||||||
char sig_[3] = "5X";
|
std::array<char, 3> sig_{'5', 'X', '\0'};
|
||||||
std::memcpy(trk_param.signal, sig_, 3);
|
std::memcpy(trk_param.signal, sig_.data(), 3);
|
||||||
trk_param.cn0_samples = configuration->property(role + ".cn0_samples", trk_param.cn0_samples);
|
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.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);
|
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 <glog/logging.h>
|
||||||
#include <gnuradio/gr_complex.h> // for gr_complex
|
#include <gnuradio/gr_complex.h> // for gr_complex
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath> // for round
|
#include <cmath> // for round
|
||||||
#include <complex>
|
#include <complex>
|
||||||
#include <cstring> // for memcpy
|
#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_chips = 0.0;
|
||||||
trk_param_fpga.very_early_late_space_narrow_chips = 0.0;
|
trk_param_fpga.very_early_late_space_narrow_chips = 0.0;
|
||||||
trk_param_fpga.system = 'E';
|
trk_param_fpga.system = 'E';
|
||||||
char sig_[3] = "5X";
|
std::array<char, 3> sig_{'5', 'X', '\0'};
|
||||||
std::memcpy(trk_param_fpga.signal, sig_, 3);
|
std::memcpy(trk_param_fpga.signal, sig_.data(), 3);
|
||||||
int32_t cn0_samples = configuration->property(role + ".cn0_samples", 20);
|
int32_t cn0_samples = configuration->property(role + ".cn0_samples", 20);
|
||||||
if (FLAGS_cn0_samples != 20)
|
if (FLAGS_cn0_samples != 20)
|
||||||
{
|
{
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
#include "dll_pll_conf.h"
|
#include "dll_pll_conf.h"
|
||||||
#include "gnss_sdr_flags.h"
|
#include "gnss_sdr_flags.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
GpsL1CaDllPllTracking::GpsL1CaDllPllTracking(
|
GpsL1CaDllPllTracking::GpsL1CaDllPllTracking(
|
||||||
ConfigurationInterface* configuration, const std::string& role,
|
ConfigurationInterface* configuration, const std::string& role,
|
||||||
@ -162,8 +162,8 @@ GpsL1CaDllPllTracking::GpsL1CaDllPllTracking(
|
|||||||
trk_param.very_early_late_space_narrow_chips = 0.0;
|
trk_param.very_early_late_space_narrow_chips = 0.0;
|
||||||
trk_param.track_pilot = false;
|
trk_param.track_pilot = false;
|
||||||
trk_param.system = 'G';
|
trk_param.system = 'G';
|
||||||
char sig_[3] = "1C";
|
std::array<char, 3> sig_{'1', 'C', '\0'};
|
||||||
std::memcpy(trk_param.signal, sig_, 3);
|
std::memcpy(trk_param.signal, sig_.data(), 3);
|
||||||
trk_param.cn0_samples = configuration->property(role + ".cn0_samples", trk_param.cn0_samples);
|
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.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);
|
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 "gps_sdr_signal_processing.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath> // for round
|
#include <cmath> // for round
|
||||||
#include <cstring> // for memcpy
|
#include <cstring> // for memcpy
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@ -173,8 +174,8 @@ GpsL1CaDllPllTrackingFpga::GpsL1CaDllPllTrackingFpga(
|
|||||||
trk_param_fpga.very_early_late_space_narrow_chips = 0.0;
|
trk_param_fpga.very_early_late_space_narrow_chips = 0.0;
|
||||||
trk_param_fpga.track_pilot = false;
|
trk_param_fpga.track_pilot = false;
|
||||||
trk_param_fpga.system = 'G';
|
trk_param_fpga.system = 'G';
|
||||||
char sig_[3] = "1C";
|
std::array<char, 3> sig_{'1', 'C', '\0'};
|
||||||
std::memcpy(trk_param_fpga.signal, sig_, 3);
|
std::memcpy(trk_param_fpga.signal, sig_.data(), 3);
|
||||||
int32_t cn0_samples = configuration->property(role + ".cn0_samples", 20);
|
int32_t cn0_samples = configuration->property(role + ".cn0_samples", 20);
|
||||||
if (FLAGS_cn0_samples != 20)
|
if (FLAGS_cn0_samples != 20)
|
||||||
{
|
{
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
#include "dll_pll_conf.h"
|
#include "dll_pll_conf.h"
|
||||||
#include "gnss_sdr_flags.h"
|
#include "gnss_sdr_flags.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
GpsL2MDllPllTracking::GpsL2MDllPllTracking(
|
GpsL2MDllPllTracking::GpsL2MDllPllTracking(
|
||||||
ConfigurationInterface* configuration, const std::string& role,
|
ConfigurationInterface* configuration, const std::string& role,
|
||||||
@ -138,8 +138,8 @@ GpsL2MDllPllTracking::GpsL2MDllPllTracking(
|
|||||||
trk_param.pll_bw_narrow_hz = 0.0;
|
trk_param.pll_bw_narrow_hz = 0.0;
|
||||||
trk_param.dll_bw_narrow_hz = 0.0;
|
trk_param.dll_bw_narrow_hz = 0.0;
|
||||||
trk_param.system = 'G';
|
trk_param.system = 'G';
|
||||||
char sig_[3] = "2S";
|
std::array<char, 3> sig_{'2', 'S', '\0'};
|
||||||
std::memcpy(trk_param.signal, sig_, 3);
|
std::memcpy(trk_param.signal, sig_.data(), 3);
|
||||||
trk_param.cn0_samples = configuration->property(role + ".cn0_samples", trk_param.cn0_samples);
|
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.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);
|
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 "gps_l2c_signal.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath> // for round
|
#include <cmath> // for round
|
||||||
#include <cstring> // for memcpy
|
#include <cstring> // for memcpy
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
|
||||||
#define NUM_PRNs 32
|
#define NUM_PRNs 32
|
||||||
|
|
||||||
|
|
||||||
@ -98,8 +98,8 @@ GpsL2MDllPllTrackingFpga::GpsL2MDllPllTrackingFpga(
|
|||||||
trk_param_fpga.pll_bw_narrow_hz = 0.0;
|
trk_param_fpga.pll_bw_narrow_hz = 0.0;
|
||||||
trk_param_fpga.dll_bw_narrow_hz = 0.0;
|
trk_param_fpga.dll_bw_narrow_hz = 0.0;
|
||||||
trk_param_fpga.system = 'G';
|
trk_param_fpga.system = 'G';
|
||||||
char sig_[3] = "2S";
|
std::array<char, 3> sig_{'2', 'S', '\0'};
|
||||||
std::memcpy(trk_param_fpga.signal, sig_, 3);
|
std::memcpy(trk_param_fpga.signal, sig_.data(), 3);
|
||||||
int cn0_samples = configuration->property(role + ".cn0_samples", 20);
|
int cn0_samples = configuration->property(role + ".cn0_samples", 20);
|
||||||
if (FLAGS_cn0_samples != 20) cn0_samples = FLAGS_cn0_samples;
|
if (FLAGS_cn0_samples != 20) cn0_samples = FLAGS_cn0_samples;
|
||||||
trk_param_fpga.cn0_samples = cn0_samples;
|
trk_param_fpga.cn0_samples = cn0_samples;
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
#include "dll_pll_conf.h"
|
#include "dll_pll_conf.h"
|
||||||
#include "gnss_sdr_flags.h"
|
#include "gnss_sdr_flags.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
GpsL5DllPllTracking::GpsL5DllPllTracking(
|
GpsL5DllPllTracking::GpsL5DllPllTracking(
|
||||||
ConfigurationInterface* configuration, const std::string& role,
|
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_chips = 0.0;
|
||||||
trk_param.very_early_late_space_narrow_chips = 0.0;
|
trk_param.very_early_late_space_narrow_chips = 0.0;
|
||||||
trk_param.system = 'G';
|
trk_param.system = 'G';
|
||||||
char sig_[3] = "L5";
|
std::array<char, 3> sig_{'L', '5', '\0'};
|
||||||
std::memcpy(trk_param.signal, sig_, 3);
|
std::memcpy(trk_param.signal, sig_.data(), 3);
|
||||||
|
|
||||||
trk_param.cn0_samples = configuration->property(role + ".cn0_samples", trk_param.cn0_samples);
|
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.cn0_min = configuration->property(role + ".cn0_min", trk_param.cn0_min);
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
#include "gps_l5_signal.h"
|
#include "gps_l5_signal.h"
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath> // for round
|
#include <cmath> // for round
|
||||||
#include <cstring> // for memcpy
|
#include <cstring> // for memcpy
|
||||||
#include <iostream>
|
#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_chips = 0.0;
|
||||||
trk_param_fpga.very_early_late_space_narrow_chips = 0.0;
|
trk_param_fpga.very_early_late_space_narrow_chips = 0.0;
|
||||||
trk_param_fpga.system = 'G';
|
trk_param_fpga.system = 'G';
|
||||||
char sig_[3] = "L5";
|
std::array<char, 3> sig_{'L', '5', '\0'};
|
||||||
std::memcpy(trk_param_fpga.signal, sig_, 3);
|
std::memcpy(trk_param_fpga.signal, sig_.data(), 3);
|
||||||
int32_t cn0_samples = configuration->property(role + ".cn0_samples", 20);
|
int32_t cn0_samples = configuration->property(role + ".cn0_samples", 20);
|
||||||
if (FLAGS_cn0_samples != 20)
|
if (FLAGS_cn0_samples != 20)
|
||||||
{
|
{
|
||||||
|
@ -61,13 +61,13 @@
|
|||||||
#include <pmt/pmt_sugar.h> // for mp
|
#include <pmt/pmt_sugar.h> // for mp
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
#include <algorithm> // for fill_n
|
#include <algorithm> // for fill_n
|
||||||
|
#include <array>
|
||||||
#include <cmath> // for fmod, round, floor
|
#include <cmath> // for fmod, round, floor
|
||||||
#include <exception> // for exception
|
#include <exception> // for exception
|
||||||
#include <gsl/gsl>
|
#include <gsl/gsl>
|
||||||
#include <iostream> // for cout, cerr
|
#include <iostream> // for cout, cerr
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <numeric>
|
#include <numeric>
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#if HAS_STD_FILESYSTEM
|
#if HAS_STD_FILESYSTEM
|
||||||
#if HAS_STD_FILESYSTEM_EXPERIMENTAL
|
#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);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
||||||
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
||||||
{
|
{
|
||||||
size_t dims[2] = {1, static_cast<size_t>(num_epoch)};
|
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, abs_VE.data(), 0);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
}
|
}
|
||||||
|
@ -52,13 +52,13 @@
|
|||||||
#include <pmt/pmt_sugar.h> // for mp
|
#include <pmt/pmt_sugar.h> // for mp
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <array>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <complex>
|
#include <complex>
|
||||||
#include <cstdlib> // for abs, size_t
|
#include <cstdlib> // for abs, size_t
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#if HAS_STD_FILESYSTEM
|
#if HAS_STD_FILESYSTEM
|
||||||
#if HAS_STD_FILESYSTEM_EXPERIMENTAL
|
#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);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
||||||
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
||||||
{
|
{
|
||||||
size_t dims[2] = {1, static_cast<size_t>(num_epoch)};
|
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, abs_VE.data(), 0);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
#include <matio.h>
|
#include <matio.h>
|
||||||
#include <pmt/pmt.h>
|
#include <pmt/pmt.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <iostream>
|
#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);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
||||||
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
||||||
{
|
{
|
||||||
size_t dims[2] = {1, static_cast<size_t>(num_epoch)};
|
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, 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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <matio.h>
|
#include <matio.h>
|
||||||
#include <pmt/pmt.h>
|
#include <pmt/pmt.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <iostream>
|
#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);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
||||||
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
||||||
{
|
{
|
||||||
size_t dims[2] = {1, static_cast<size_t>(num_epoch)};
|
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, 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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
}
|
}
|
||||||
|
@ -46,13 +46,13 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <matio.h>
|
#include <matio.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
|
|
||||||
#define CN0_ESTIMATION_SAMPLES 10
|
#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);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
||||||
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
||||||
{
|
{
|
||||||
size_t dims[2] = {1, static_cast<size_t>(num_epoch)};
|
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, 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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
}
|
}
|
||||||
|
@ -46,13 +46,13 @@
|
|||||||
#include <matio.h>
|
#include <matio.h>
|
||||||
#include <pmt/pmt.h>
|
#include <pmt/pmt.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#define CN0_ESTIMATION_SAMPLES 10
|
#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);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
||||||
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
||||||
{
|
{
|
||||||
size_t dims[2] = {1, static_cast<size_t>(num_epoch)};
|
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, 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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
}
|
}
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <matio.h>
|
#include <matio.h>
|
||||||
#include <pmt/pmt.h>
|
#include <pmt/pmt.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <iostream>
|
#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);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
||||||
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
||||||
{
|
{
|
||||||
size_t dims[2] = {1, static_cast<size_t>(num_epoch)};
|
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, 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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <matio.h>
|
#include <matio.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <iostream>
|
#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);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
||||||
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
||||||
{
|
{
|
||||||
size_t dims[2] = {1, static_cast<size_t>(num_epoch)};
|
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, 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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <matio.h>
|
#include <matio.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <array>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <gsl/gsl>
|
#include <gsl/gsl>
|
||||||
@ -54,7 +55,6 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
|
|
||||||
gps_l1_ca_kf_tracking_cc_sptr
|
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);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
||||||
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
if (reinterpret_cast<int64_t *>(matfp) != nullptr)
|
||||||
{
|
{
|
||||||
size_t dims[2] = {1, static_cast<size_t>(num_epoch)};
|
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, abs_VE.data(), 0);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,6 @@
|
|||||||
|
|
||||||
#include "dll_pll_conf.h"
|
#include "dll_pll_conf.h"
|
||||||
#include "gnss_sdr_flags.h"
|
#include "gnss_sdr_flags.h"
|
||||||
#include <cstring>
|
|
||||||
|
|
||||||
Dll_Pll_Conf::Dll_Pll_Conf()
|
Dll_Pll_Conf::Dll_Pll_Conf()
|
||||||
{
|
{
|
||||||
@ -72,6 +71,7 @@ Dll_Pll_Conf::Dll_Pll_Conf()
|
|||||||
enable_doppler_correction = false;
|
enable_doppler_correction = false;
|
||||||
track_pilot = false;
|
track_pilot = false;
|
||||||
system = 'G';
|
system = 'G';
|
||||||
char sig_[3] = "1C";
|
signal[0] = '1';
|
||||||
std::memcpy(signal, sig_, 3);
|
signal[1] = 'C';
|
||||||
|
signal[2] = '\0';
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,6 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "dll_pll_conf_fpga.h"
|
#include "dll_pll_conf_fpga.h"
|
||||||
#include <cstring>
|
|
||||||
|
|
||||||
Dll_Pll_Conf_Fpga::Dll_Pll_Conf_Fpga()
|
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;
|
carrier_lock_th = 0.85;
|
||||||
track_pilot = false;
|
track_pilot = false;
|
||||||
system = 'G';
|
system = 'G';
|
||||||
char sig_[3] = "1C";
|
signal[0] = '1';
|
||||||
std::memcpy(signal, sig_, 3);
|
signal[1] = 'C';
|
||||||
|
signal[2] = '\0';
|
||||||
device_name = "/dev/uio";
|
device_name = "/dev/uio";
|
||||||
device_base = 1U;
|
device_base = 1U;
|
||||||
multicorr_type = 0U;
|
multicorr_type = 0U;
|
||||||
|
@ -38,7 +38,6 @@
|
|||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstdio>
|
|
||||||
#include <fcntl.h> // for O_RDWR, O_RSYNC
|
#include <fcntl.h> // for O_RDWR, O_RSYNC
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <sys/mman.h> // for PROT_READ, PROT_WRITE, MAP_SHARED
|
#include <sys/mman.h> // for PROT_READ, PROT_WRITE, MAP_SHARED
|
||||||
|
@ -54,6 +54,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ini.h"
|
#include "ini.h"
|
||||||
|
#include <array>
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -112,9 +113,9 @@ int ini_parse(const char* filename,
|
|||||||
void* user)
|
void* user)
|
||||||
{
|
{
|
||||||
/* Uses a fair bit of stack (use heap instead if you need to) */
|
/* Uses a fair bit of stack (use heap instead if you need to) */
|
||||||
char line[MAX_LINE];
|
std::array<char, MAX_LINE> line{};
|
||||||
char section[MAX_SECTION] = "";
|
std::array<char, MAX_SECTION> section{};
|
||||||
char prev_name[MAX_NAME] = "";
|
std::array<char, MAX_NAME> prev_name{};
|
||||||
|
|
||||||
std::ifstream file;
|
std::ifstream file;
|
||||||
char* start;
|
char* start;
|
||||||
@ -147,14 +148,14 @@ int ini_parse(const char* filename,
|
|||||||
line[i] = read_line[i];
|
line[i] = read_line[i];
|
||||||
}
|
}
|
||||||
line[len_str] = '\0';
|
line[len_str] = '\0';
|
||||||
start = lskip(rstrip(line));
|
start = lskip(rstrip(line.data()));
|
||||||
|
|
||||||
#if INI_ALLOW_MULTILINE
|
#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
|
/* Non-black line with leading whitespace, treat as continuation
|
||||||
of previous name's value (as per Python ConfigParser). */
|
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;
|
error = lineno;
|
||||||
}
|
}
|
||||||
@ -168,8 +169,8 @@ int ini_parse(const char* filename,
|
|||||||
if (*end == ']')
|
if (*end == ']')
|
||||||
{
|
{
|
||||||
*end = '\0';
|
*end = '\0';
|
||||||
strncpy0(section, start + 1, sizeof(section));
|
strncpy0(section.data(), start + 1, sizeof(section));
|
||||||
*prev_name = '\0';
|
prev_name[MAX_NAME - 1] = '\0';
|
||||||
}
|
}
|
||||||
else if (!error)
|
else if (!error)
|
||||||
{
|
{
|
||||||
@ -194,8 +195,8 @@ int ini_parse(const char* filename,
|
|||||||
rstrip(value);
|
rstrip(value);
|
||||||
|
|
||||||
/* Valid name=value pair found, call handler */
|
/* Valid name=value pair found, call handler */
|
||||||
strncpy0(prev_name, name, sizeof(prev_name));
|
strncpy0(prev_name.data(), name, sizeof(prev_name));
|
||||||
if (!handler(user, section, name, value) && !error)
|
if (!handler(user, section.data(), name, value) && !error)
|
||||||
{
|
{
|
||||||
error = lineno;
|
error = lineno;
|
||||||
}
|
}
|
||||||
|
@ -326,11 +326,19 @@ static int server_connect(char *server)
|
|||||||
}
|
}
|
||||||
if (connect(fd, aip->ai_addr, aip->ai_addrlen) != 0)
|
if (connect(fd, aip->ai_addr, aip->ai_addrlen) != 0)
|
||||||
{
|
{
|
||||||
|
freeaddrinfo(aip);
|
||||||
|
if (close(fd) != 0)
|
||||||
|
{
|
||||||
|
// avoid warning
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
break;
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
freeaddrinfo(aip);
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include "control_message_factory.h"
|
#include "control_message_factory.h"
|
||||||
#include "pvt_interface.h"
|
#include "pvt_interface.h"
|
||||||
#include <boost/asio.hpp>
|
#include <boost/asio.hpp>
|
||||||
|
#include <array>
|
||||||
#include <cmath> // for isnan
|
#include <cmath> // for isnan
|
||||||
#include <exception> // for exception
|
#include <exception> // for exception
|
||||||
#include <iomanip> // for setprecision
|
#include <iomanip> // for setprecision
|
||||||
@ -151,10 +152,10 @@ std::string TcpCmdInterface::status(const std::vector<std::string> &commandLine
|
|||||||
&UTC_time) == true)
|
&UTC_time) == true)
|
||||||
{
|
{
|
||||||
struct tm tstruct = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, nullptr};
|
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);
|
tstruct = *gmtime(&UTC_time);
|
||||||
strftime(buf1, sizeof(buf1), "%d/%m/%Y %H:%M:%S", &tstruct);
|
strftime(buf1.data(), sizeof(buf1), "%d/%m/%Y %H:%M:%S", &tstruct);
|
||||||
std::string str_time = std::string(buf1);
|
std::string str_time = std::string(buf1.data());
|
||||||
str_stream << "- Receiver UTC Time: " << str_time << std::endl;
|
str_stream << "- Receiver UTC Time: " << str_time << std::endl;
|
||||||
str_stream << std::setprecision(9);
|
str_stream << std::setprecision(9);
|
||||||
str_stream << "- Receiver Position WGS84 [Lat, Long, H]: "
|
str_stream << "- Receiver Position WGS84 [Lat, Long, H]: "
|
||||||
|
@ -91,7 +91,7 @@ bool operator==(const Gnss_Satellite& sat1, const Gnss_Satellite& sat2)
|
|||||||
|
|
||||||
|
|
||||||
// Copy constructor
|
// Copy constructor
|
||||||
Gnss_Satellite::Gnss_Satellite(Gnss_Satellite&& other)
|
Gnss_Satellite::Gnss_Satellite(Gnss_Satellite&& other) noexcept
|
||||||
{
|
{
|
||||||
*this = other;
|
*this = other;
|
||||||
}
|
}
|
||||||
@ -113,14 +113,14 @@ Gnss_Satellite& Gnss_Satellite::operator=(const Gnss_Satellite& rhs)
|
|||||||
|
|
||||||
|
|
||||||
// Move constructor
|
// 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
|
// Move assignment operator
|
||||||
Gnss_Satellite& Gnss_Satellite::operator=(Gnss_Satellite&& other)
|
Gnss_Satellite& Gnss_Satellite::operator=(Gnss_Satellite&& other) noexcept
|
||||||
{
|
{
|
||||||
if (this != &other)
|
if (this != &other)
|
||||||
{
|
{
|
||||||
|
@ -62,10 +62,10 @@ public:
|
|||||||
friend bool operator==(const Gnss_Satellite& /*sat1*/, const Gnss_Satellite& /*sat2*/); //!< operator== for comparison
|
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
|
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& operator=(const Gnss_Satellite&); //!< Copy assignment operator
|
||||||
Gnss_Satellite(const Gnss_Satellite& other); //!< Move constructor
|
Gnss_Satellite(const Gnss_Satellite& other) noexcept; //!< Move constructor
|
||||||
Gnss_Satellite& operator=(Gnss_Satellite&& other); //!< Move assignment operator
|
Gnss_Satellite& operator=(Gnss_Satellite&& other) noexcept; //!< Move assignment operator
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint32_t PRN{};
|
uint32_t PRN{};
|
||||||
|
@ -744,6 +744,16 @@ add_executable(matio_test
|
|||||||
${CMAKE_CURRENT_SOURCE_DIR}/unit-tests/arithmetic/matio_test.cc
|
${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
|
target_link_libraries(matio_test
|
||||||
PUBLIC
|
PUBLIC
|
||||||
Gflags::gflags
|
Gflags::gflags
|
||||||
|
@ -49,7 +49,6 @@
|
|||||||
|
|
||||||
#include <gflags/gflags.h>
|
#include <gflags/gflags.h>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstdio>
|
|
||||||
#include <cstdlib> // for getenv()
|
#include <cstdlib> // for getenv()
|
||||||
#include <cstring> // for strncpy
|
#include <cstring> // for strncpy
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
@ -52,6 +52,7 @@
|
|||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <matio.h>
|
#include <matio.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <array>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
@ -361,16 +362,16 @@ int PositionSystemTest::run_receiver()
|
|||||||
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
|
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
|
||||||
FILE* fp;
|
FILE* fp;
|
||||||
std::string argum2 = std::string("/bin/ls *kml | tail -1");
|
std::string argum2 = std::string("/bin/ls *kml | tail -1");
|
||||||
char buffer[1035];
|
std::array<char, 1035> buffer{};
|
||||||
fp = popen(&argum2[0], "r");
|
fp = popen(&argum2[0], "r");
|
||||||
if (fp == nullptr)
|
if (fp == nullptr)
|
||||||
{
|
{
|
||||||
std::cout << "Failed to run command: " << argum2 << std::endl;
|
std::cout << "Failed to run command: " << argum2 << std::endl;
|
||||||
return -1;
|
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);
|
EXPECT_EQ(aux.empty(), false);
|
||||||
PositionSystemTest::generated_kml_file = aux.erase(aux.length() - 1, 1);
|
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);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT5);
|
||||||
if (reinterpret_cast<int64_t*>(matfp) != nullptr)
|
if (reinterpret_cast<int64_t*>(matfp) != nullptr)
|
||||||
{
|
{
|
||||||
size_t dims[2] = {1, x->size()};
|
std::array<size_t, 2> dims{1, x->size()};
|
||||||
matvar = Mat_VarCreate("x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, &x[0], 0);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
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)
|
bool PositionSystemTest::save_mat_x(std::vector<double>* x, std::string filename)
|
||||||
{
|
{
|
||||||
try
|
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);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT5);
|
||||||
if (reinterpret_cast<int64_t*>(matfp) != nullptr)
|
if (reinterpret_cast<int64_t*>(matfp) != nullptr)
|
||||||
{
|
{
|
||||||
size_t dims[2] = {1, x->size()};
|
std::array<size_t, 2> dims{1, x->size()};
|
||||||
matvar = Mat_VarCreate("x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, &x[0], 0);
|
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_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
Mat_VarFree(matvar);
|
Mat_VarFree(matvar);
|
||||||
}
|
}
|
||||||
@ -446,6 +448,7 @@ bool PositionSystemTest::save_mat_x(std::vector<double>* x, std::string filename
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PositionSystemTest::check_results()
|
void PositionSystemTest::check_results()
|
||||||
{
|
{
|
||||||
arma::mat R_eb_e; //ECEF position (x,y,z) estimation in the Earth frame (Nx3)
|
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*/)
|
TEST_F(PositionSystemTest /*unused*/, Position_system_test /*unused*/)
|
||||||
{
|
{
|
||||||
if (FLAGS_config_file_ptest.empty())
|
if (FLAGS_config_file_ptest.empty())
|
||||||
|
@ -33,7 +33,26 @@
|
|||||||
#include <gnuradio/gr_complex.h>
|
#include <gnuradio/gr_complex.h>
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <matio.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)
|
TEST(MatioTest, WriteAndReadDoubles)
|
||||||
{
|
{
|
||||||
@ -44,9 +63,9 @@ TEST(MatioTest, WriteAndReadDoubles)
|
|||||||
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
||||||
ASSERT_FALSE(reinterpret_cast<long *>(matfp) == nullptr) << "Error creating .mat file";
|
ASSERT_FALSE(reinterpret_cast<long *>(matfp) == nullptr) << "Error creating .mat file";
|
||||||
|
|
||||||
double x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
|
std::array<double, 10> x{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
|
||||||
size_t dims[2] = {10, 1};
|
std::array<size_t, 2> dims{10, 1};
|
||||||
matvar = Mat_VarCreate("x", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, x, 0);
|
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’";
|
ASSERT_FALSE(reinterpret_cast<long *>(matvar) == nullptr) << "Error creating variable for ’x’";
|
||||||
|
|
||||||
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
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]);
|
EXPECT_DOUBLE_EQ(x[i], x_read[i]);
|
||||||
}
|
}
|
||||||
Mat_VarFree(matvar_read);
|
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);
|
matfp = Mat_CreateVer(filename.c_str(), nullptr, MAT_FT_MAT73);
|
||||||
ASSERT_FALSE(reinterpret_cast<long *>(matfp) == nullptr) << "Error creating .mat file";
|
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();
|
const unsigned int size = x_v.size();
|
||||||
float x_real[size];
|
std::array<float, 10> x_real{};
|
||||||
float x_imag[size];
|
std::array<float, 10> x_imag{};
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
for (auto it : x_v)
|
for (auto it : x_v)
|
||||||
{
|
{
|
||||||
@ -98,15 +118,15 @@ TEST(MatioTest, WriteAndReadGrComplex)
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct mat_complex_split_t x = {x_real, x_imag};
|
struct mat_complex_split_t x = {x_real.data(), x_imag.data()};
|
||||||
size_t dims[2] = {static_cast<size_t>(size), 1};
|
std::array<size_t, 2> dims{static_cast<size_t>(size), 1};
|
||||||
matvar1 = Mat_VarCreate("x", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, &x, MAT_F_COMPLEX);
|
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’";
|
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}};
|
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();
|
const unsigned int size_y = x2.size();
|
||||||
float y_real[size_y];
|
std::array<float, 10> y_real{};
|
||||||
float y_imag[size_y];
|
std::array<float, 10> y_imag{};
|
||||||
i = 0;
|
i = 0;
|
||||||
for (auto it : x2)
|
for (auto it : x2)
|
||||||
{
|
{
|
||||||
@ -115,10 +135,10 @@ TEST(MatioTest, WriteAndReadGrComplex)
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct mat_complex_split_t y = {y_real, y_imag};
|
struct mat_complex_split_t y = {y_real.data(), y_imag.data()};
|
||||||
size_t dims_y[2] = {static_cast<size_t>(size_y), 1};
|
std::array<size_t, 2> dims_y{static_cast<size_t>(size_y), 1};
|
||||||
matvar_t *matvar2;
|
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’";
|
ASSERT_FALSE(reinterpret_cast<long *>(matvar2) == nullptr) << "Error creating variable for ’y’";
|
||||||
|
|
||||||
Mat_VarWrite(matfp, matvar1, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
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].real(), x_v_read[i].real());
|
||||||
EXPECT_FLOAT_EQ(x_v[i].imag(), x_v_read[i].imag());
|
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 <gtest/gtest.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <array>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
@ -69,13 +70,13 @@ DataTypeAdapter::DataTypeAdapter()
|
|||||||
{
|
{
|
||||||
file_name_input = "adapter_test_input.dat";
|
file_name_input = "adapter_test_input.dat";
|
||||||
file_name_output = "adapter_test_output.dat";
|
file_name_output = "adapter_test_output.dat";
|
||||||
int8_t input_bytes[] = {2, 23, -1, 127, -127, 0};
|
std::array<int8_t, 6> input_bytes{2, 23, -1, 127, -127, 0};
|
||||||
int16_t input_shorts[] = {2, 23, -1, 127, -127, 0, 255, 255};
|
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_;
|
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_;
|
input_data_shorts = input_data_shorts_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,10 +32,27 @@
|
|||||||
#include "nmea_printer.h"
|
#include "nmea_printer.h"
|
||||||
#include "rtklib_rtkpos.h"
|
#include "rtklib_rtkpos.h"
|
||||||
#include "rtklib_solver.h"
|
#include "rtklib_solver.h"
|
||||||
#include <cstdio>
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
#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
|
class NmeaPrinterTest : public ::testing::Test
|
||||||
{
|
{
|
||||||
@ -196,5 +213,6 @@ TEST_F(NmeaPrinterTest, PrintLine)
|
|||||||
}
|
}
|
||||||
test_file.close();
|
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.";
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user