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

Add extraction of Galileo UTC and Galileo iono parameters from RINEX header

This commit is contained in:
Carles Fernandez 2018-10-18 15:15:15 +02:00
parent 4bb13684aa
commit 5181c640a3
4 changed files with 129 additions and 11 deletions

View File

@ -32,6 +32,7 @@
#ifndef GNSS_SDR_GALILEO_IONO_H_ #ifndef GNSS_SDR_GALILEO_IONO_H_
#define GNSS_SDR_GALILEO_IONO_H_ #define GNSS_SDR_GALILEO_IONO_H_
#include <boost/serialization/nvp.hpp>
/*! /*!
* \brief This class is a storage for the GALILEO IONOSPHERIC data as described in Galileo ICD paragraph 5.1.6 * \brief This class is a storage for the GALILEO IONOSPHERIC data as described in Galileo ICD paragraph 5.1.6
@ -61,6 +62,30 @@ public:
* Default constructor * Default constructor
*/ */
Galileo_Iono(); Galileo_Iono();
template <class Archive>
/*!
* \brief Serialize is a boost standard method to be called by the boost XML serialization.
Here is used to save the iono data on disk file.
*/
inline void serialize(Archive& archive, const unsigned int version)
{
using boost::serialization::make_nvp;
if (version)
{
};
archive& make_nvp("ai0_5", ai0_5);
archive& make_nvp("ai1_5", ai1_5);
archive& make_nvp("ai2_5", ai2_5);
archive& make_nvp("Region1_flag_5", Region1_flag_5);
archive& make_nvp("Region2_flag_5", Region2_flag_5);
archive& make_nvp("Region3_flag_5", Region3_flag_5);
archive& make_nvp("Region4_flag_5", Region4_flag_5);
archive& make_nvp("Region5_flag_5", Region5_flag_5);
archive& make_nvp("TOW_5", TOW_5);
archive& make_nvp("WN_5", WN_5);
}
}; };
#endif #endif

View File

@ -33,6 +33,7 @@
#ifndef GNSS_SDR_GALILEO_UTC_MODEL_H_ #ifndef GNSS_SDR_GALILEO_UTC_MODEL_H_
#define GNSS_SDR_GALILEO_UTC_MODEL_H_ #define GNSS_SDR_GALILEO_UTC_MODEL_H_
#include <boost/serialization/nvp.hpp>
/*! /*!
* \brief This class is a storage for the GALILEO UTC MODEL data as described in Galileo ICD * \brief This class is a storage for the GALILEO UTC MODEL data as described in Galileo ICD
@ -58,6 +59,28 @@ public:
* Default constructor * Default constructor
*/ */
Galileo_Utc_Model(); Galileo_Utc_Model();
template <class Archive>
/*!
* \brief Serialize is a boost standard method to be called by the boost XML serialization.
Here is used to save the UTC data on disk file.
*/
inline void serialize(Archive& archive, const unsigned int version)
{
using boost::serialization::make_nvp;
if (version)
{
};
archive& make_nvp("A0_6", A0_6);
archive& make_nvp("A1_6", A1_6);
archive& make_nvp("Delta_tLS_6", Delta_tLS_6);
archive& make_nvp("t0t_6", t0t_6);
archive& make_nvp("WNot_6", WNot_6);
archive& make_nvp("WN_LSF_6", WN_LSF_6);
archive& make_nvp("DN_6", DN_6);
archive& make_nvp("Delta_tLSF_6", Delta_tLSF_6);
}
}; };
#endif #endif

View File

@ -32,6 +32,8 @@ include_directories(
${GPSTK_INCLUDE_DIR} ${GPSTK_INCLUDE_DIR}
) )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated")
add_executable(rinex2assist ${CMAKE_CURRENT_SOURCE_DIR}/main.cc) add_executable(rinex2assist ${CMAKE_CURRENT_SOURCE_DIR}/main.cc)
target_link_libraries(rinex2assist target_link_libraries(rinex2assist
@ -45,7 +47,6 @@ if(NOT GPSTK_FOUND OR ENABLE_OWN_GPSTK)
add_dependencies(rinex2assist gpstk-${GNSSSDR_GPSTK_LOCAL_VERSION}) add_dependencies(rinex2assist gpstk-${GNSSSDR_GPSTK_LOCAL_VERSION})
endif(NOT GPSTK_FOUND OR ENABLE_OWN_GPSTK) endif(NOT GPSTK_FOUND OR ENABLE_OWN_GPSTK)
add_custom_command(TARGET rinex2assist POST_BUILD add_custom_command(TARGET rinex2assist POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:rinex2assist> COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:rinex2assist>
${CMAKE_SOURCE_DIR}/install/$<TARGET_FILE_NAME:rinex2assist>) ${CMAKE_SOURCE_DIR}/install/$<TARGET_FILE_NAME:rinex2assist>)

View File

@ -32,6 +32,8 @@
#include "gps_ephemeris.h" #include "gps_ephemeris.h"
#include "galileo_ephemeris.h" #include "galileo_ephemeris.h"
#include "gps_utc_model.h"
#include "gps_iono.h"
#include <gflags/gflags.h> #include <gflags/gflags.h>
#include <gpstk/Rinex3NavHeader.hpp> #include <gpstk/Rinex3NavHeader.hpp>
#include <gpstk/Rinex3NavData.hpp> #include <gpstk/Rinex3NavData.hpp>
@ -49,30 +51,29 @@ int main(int argc, char** argv)
"This program comes with ABSOLUTELY NO WARRANTY;\n" + "This program comes with ABSOLUTELY NO WARRANTY;\n" +
"See COPYING file to see a copy of the General Public License.\n \n" + "See COPYING file to see a copy of the General Public License.\n \n" +
"Usage: \n" + "Usage: \n" +
" rinex2assist <RINEX Nav file input> [<XML file output>]"); " rinex2assist <RINEX Nav file input>");
google::SetUsageMessage(intro_help); google::SetUsageMessage(intro_help);
google::SetVersionString("1.0"); google::SetVersionString("1.0");
google::ParseCommandLineFlags(&argc, &argv, true); google::ParseCommandLineFlags(&argc, &argv, true);
if ((argc < 2) or (argc > 3)) if ((argc != 2))
{ {
std::cerr << "Usage:" << std::endl; std::cerr << "Usage:" << std::endl;
std::cerr << " " << argv[0] std::cerr << " " << argv[0]
<< " <RINEX Nav file input> [<XML file output>]" << " <RINEX Nav file input>"
<< std::endl; << std::endl;
google::ShutDownCommandLineFlags(); google::ShutDownCommandLineFlags();
return 1; return 1;
} }
std::string xml_filename; std::string xml_filename;
if (argc == 3)
{
xml_filename = argv[2];
}
std::map<int, Gps_Ephemeris> eph_map; std::map<int, Gps_Ephemeris> eph_map;
std::map<int, Galileo_Ephemeris> eph_gal_map; std::map<int, Galileo_Ephemeris> eph_gal_map;
Gps_Utc_Model gps_utc_model;
Gps_Iono gps_iono;
int i = 0; int i = 0;
int j = 0; int j = 0;
try try
@ -93,6 +94,31 @@ int main(int argc, char** argv)
return 1; return 1;
} }
// Collect UTC parameters from RINEX header
if (hdr.fileSys.compare("G: (GPS)") == 0 || hdr.fileSys.compare("MIXED") == 0)
{
gps_utc_model.valid = (hdr.valid > 2147483648) ? true : false;
gps_utc_model.d_A1 = hdr.mapTimeCorr["GPUT"].A0;
gps_utc_model.d_A0 = hdr.mapTimeCorr["GPUT"].A1;
gps_utc_model.d_t_OT = hdr.mapTimeCorr["GPUT"].refSOW;
gps_utc_model.i_WN_T = hdr.mapTimeCorr["GPUT"].refWeek;
gps_utc_model.d_DeltaT_LS = hdr.leapSeconds;
gps_utc_model.i_WN_LSF = hdr.leapWeek;
gps_utc_model.i_DN = hdr.leapDay;
gps_utc_model.d_DeltaT_LSF = hdr.leapDelta;
// Collect iono parameters from RINEX header
gps_iono.valid = (hdr.mapIonoCorr["GPSA"].param[0] == 0) ? false : true;
gps_iono.d_alpha0 = hdr.mapIonoCorr["GPSA"].param[0];
gps_iono.d_alpha1 = hdr.mapIonoCorr["GPSA"].param[1];
gps_iono.d_alpha2 = hdr.mapIonoCorr["GPSA"].param[2];
gps_iono.d_alpha3 = hdr.mapIonoCorr["GPSA"].param[3];
gps_iono.d_beta0 = hdr.mapIonoCorr["GPSB"].param[0];
gps_iono.d_beta1 = hdr.mapIonoCorr["GPSB"].param[1];
gps_iono.d_beta2 = hdr.mapIonoCorr["GPSB"].param[2];
gps_iono.d_beta3 = hdr.mapIonoCorr["GPSB"].param[3];
}
// Read navigation data // Read navigation data
while (rnffs >> rne) while (rnffs >> rne)
{ {
@ -185,7 +211,7 @@ int main(int argc, char** argv)
return 1; return 1;
} }
// Write XML // Write XML ephemeris
if (i != 0) if (i != 0)
{ {
std::ofstream ofs; std::ofstream ofs;
@ -201,10 +227,11 @@ int main(int argc, char** argv)
} }
catch (std::exception& e) catch (std::exception& e)
{ {
std::cerr << "Problem creating the XML file: " << e.what() << std::endl; std::cerr << "Problem creating the XML file " << xml_filename << ": " << e.what() << std::endl;
google::ShutDownCommandLineFlags(); google::ShutDownCommandLineFlags();
return 1; return 1;
} }
std::cout << "Generated file: " << xml_filename << std::endl;
} }
if (j != 0) if (j != 0)
{ {
@ -218,11 +245,53 @@ int main(int argc, char** argv)
} }
catch (std::exception& e) catch (std::exception& e)
{ {
std::cerr << "Problem creating the XML file: " << e.what() << std::endl; std::cerr << "Problem creating the XML file " << xml_filename << ": " << e.what() << std::endl;
google::ShutDownCommandLineFlags(); google::ShutDownCommandLineFlags();
return 1; return 1;
} }
std::cout << "Generated file: " << xml_filename << std::endl;
} }
// Write XML UTC
if (gps_utc_model.valid)
{
std::ofstream ofs3;
xml_filename = "gps_UTC.xml";
try
{
ofs3.open(xml_filename.c_str(), std::ofstream::trunc | std::ofstream::out);
boost::archive::xml_oarchive xml(ofs3);
xml << boost::serialization::make_nvp("GNSS-SDR_gps_utc", gps_utc_model);
}
catch (std::exception& e)
{
std::cerr << "Problem creating the XML file " << xml_filename << ": " << e.what() << std::endl;
google::ShutDownCommandLineFlags();
return 1;
}
std::cout << "Generated file: " << xml_filename << std::endl;
}
// Write XML iono
if (gps_iono.valid)
{
std::ofstream ofs4;
xml_filename = "gps_iono.xml";
try
{
ofs4.open(xml_filename.c_str(), std::ofstream::trunc | std::ofstream::out);
boost::archive::xml_oarchive xml(ofs4);
xml << boost::serialization::make_nvp("GNSS-SDR_gps_iono", gps_iono);
}
catch (std::exception& e)
{
std::cerr << "Problem creating the XML file " << xml_filename << ": " << e.what() << std::endl;
google::ShutDownCommandLineFlags();
return 1;
}
std::cout << "Generated file: " << xml_filename << std::endl;
}
google::ShutDownCommandLineFlags(); google::ShutDownCommandLineFlags();
return 0; return 0;
} }