mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-30 23:03:05 +00:00 
			
		
		
		
	Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into fpga
This commit is contained in:
		| @@ -45,7 +45,7 @@ endif(NOT CMAKE_PREFIX_PATH) | |||||||
| ######################################################################## | ######################################################################## | ||||||
| # Support of optional RF front-ends | # Support of optional RF front-ends | ||||||
| option(ENABLE_UHD "Enable the use of UHD (driver for all USRP devices)" ON) | option(ENABLE_UHD "Enable the use of UHD (driver for all USRP devices)" ON) | ||||||
| option(ENABLE_OSMOSDR "Enable the use of OsmoSDR and other front-ends (RTL-based dongles, HackRF, bladeRF, etc.) as signal source (experimental)" OFF) | option(ENABLE_OSMOSDR "Enable the use of OsmoSDR and other front-ends (RTL-based dongles, HackRF, bladeRF, etc.) as signal source" OFF) | ||||||
| option(ENABLE_FLEXIBAND "Enable the use of the signal source adater for the Teleorbit Flexiband GNURadio driver" OFF) | option(ENABLE_FLEXIBAND "Enable the use of the signal source adater for the Teleorbit Flexiband GNURadio driver" OFF) | ||||||
| option(ENABLE_ARRAY "Enable the use of CTTC's antenna array front-end as signal source (experimental)" OFF) | option(ENABLE_ARRAY "Enable the use of CTTC's antenna array front-end as signal source (experimental)" OFF) | ||||||
| option(ENABLE_GN3S "Enable the use of the GN3S dongle as signal source (experimental)" OFF) | option(ENABLE_GN3S "Enable the use of the GN3S dongle as signal source (experimental)" OFF) | ||||||
| @@ -341,10 +341,10 @@ set(GNSSSDR_MATIO_MIN_VERSION "1.5.3") | |||||||
| ################################################################################ | ################################################################################ | ||||||
| set(GNSSSDR_GFLAGS_LOCAL_VERSION "2.2.1") | set(GNSSSDR_GFLAGS_LOCAL_VERSION "2.2.1") | ||||||
| set(GNSSSDR_GLOG_LOCAL_VERSION "0.3.5") | set(GNSSSDR_GLOG_LOCAL_VERSION "0.3.5") | ||||||
| set(GNSSSDR_ARMADILLO_LOCAL_VERSION "unstable") | set(GNSSSDR_ARMADILLO_LOCAL_VERSION "9.200.x") | ||||||
| set(GNSSSDR_GTEST_LOCAL_VERSION "1.8.1") | set(GNSSSDR_GTEST_LOCAL_VERSION "1.8.1") | ||||||
| set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "master") | set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "master") | ||||||
| set(GNSSSDR_GPSTK_LOCAL_VERSION "2.10") | set(GNSSSDR_GPSTK_LOCAL_VERSION "2.10.6") | ||||||
| set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.12") | set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.12") | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -622,7 +622,9 @@ if(NOT VOLK_GNSSSDR_FOUND) | |||||||
|         if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) |         if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) | ||||||
|             set(STRIP_VOLK_GNSSSDR_PROFILE "-DENABLE_STRIP=ON -DCMAKE_VERBOSE_MAKEFILE=ON") |             set(STRIP_VOLK_GNSSSDR_PROFILE "-DENABLE_STRIP=ON -DCMAKE_VERBOSE_MAKEFILE=ON") | ||||||
|         endif(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) |         endif(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) | ||||||
|  |         if(NOT DEFINED ENV{PROTECT_PASSWORDS}) | ||||||
|             set(READ_ENVIRO ${CMAKE_COMMAND} -E environment) |             set(READ_ENVIRO ${CMAKE_COMMAND} -E environment) | ||||||
|  |         endif(NOT DEFINED ENV{PROTECT_PASSWORDS}) | ||||||
|     endif(ENABLE_PACKAGING) |     endif(ENABLE_PACKAGING) | ||||||
|  |  | ||||||
|     set(VOLK_GNSSSDR_BUILD_COMMAND "${CMAKE_MAKE_PROGRAM}") |     set(VOLK_GNSSSDR_BUILD_COMMAND "${CMAKE_MAKE_PROGRAM}") | ||||||
|   | |||||||
| @@ -186,9 +186,9 @@ $ sudo apt-get install libblas-dev liblapack-dev       # For Debian/Ubuntu/Linux | |||||||
| $ sudo yum install lapack-devel blas-devel             # For Fedora/CentOS/RHEL | $ sudo yum install lapack-devel blas-devel             # For Fedora/CentOS/RHEL | ||||||
| $ sudo zypper install lapack-devel blas-devel          # For OpenSUSE | $ sudo zypper install lapack-devel blas-devel          # For OpenSUSE | ||||||
| $ sudo pacman -S blas lapack                           # For Arch Linux | $ sudo pacman -S blas lapack                           # For Arch Linux | ||||||
| $ wget https://sourceforge.net/projects/arma/files/armadillo-8.500.1.tar.xz | $ wget https://sourceforge.net/projects/arma/files/armadillo-9.100.5.tar.xz | ||||||
| $ tar xvfz armadillo-8.500.1.tar.xz | $ tar xvfz armadillo-9.100.5.tar.xz | ||||||
| $ cd armadillo-8.500.1 | $ cd armadillo-9.100.5 | ||||||
| $ cmake . | $ cmake . | ||||||
| $ make | $ make | ||||||
| $ sudo make install | $ sudo make install | ||||||
|   | |||||||
| @@ -25,6 +25,10 @@ set(PVT_ADAPTER_SOURCES | |||||||
| 	rtklib_pvt.cc | 	rtklib_pvt.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(PVT_ADAPTER_HEADERS | ||||||
|  | 	rtklib_pvt.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/system_parameters |      ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -41,8 +45,6 @@ include_directories( | |||||||
|      ${GNURADIO_RUNTIME_INCLUDE_DIRS} |      ${GNURADIO_RUNTIME_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB PVT_ADAPTER_HEADERS "*.h") |  | ||||||
| list(SORT PVT_ADAPTER_HEADERS) |  | ||||||
| add_library(pvt_adapters ${PVT_ADAPTER_SOURCES} ${PVT_ADAPTER_HEADERS}) | add_library(pvt_adapters ${PVT_ADAPTER_SOURCES} ${PVT_ADAPTER_HEADERS}) | ||||||
| source_group(Headers FILES ${PVT_ADAPTER_HEADERS}) | source_group(Headers FILES ${PVT_ADAPTER_HEADERS}) | ||||||
| target_link_libraries(pvt_adapters pvt_gr_blocks ${ARMADILLO_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES}) | target_link_libraries(pvt_adapters pvt_gr_blocks ${ARMADILLO_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES}) | ||||||
|   | |||||||
| @@ -506,12 +506,12 @@ bool RtklibPvt::save_assistance_to_XML() | |||||||
|  |  | ||||||
|     if (eph_map.empty() == false) |     if (eph_map.empty() == false) | ||||||
|         { |         { | ||||||
|  |             std::ofstream ofs; | ||||||
|             try |             try | ||||||
|                 { |                 { | ||||||
|                     std::ofstream ofs(eph_xml_filename_.c_str(), std::ofstream::trunc | std::ofstream::out); |                     ofs.open(eph_xml_filename_.c_str(), std::ofstream::trunc | std::ofstream::out); | ||||||
|                     boost::archive::xml_oarchive xml(ofs); |                     boost::archive::xml_oarchive xml(ofs); | ||||||
|                     xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", eph_map); |                     xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", eph_map); | ||||||
|                     ofs.close(); |  | ||||||
|                     LOG(INFO) << "Saved GPS L1 Ephemeris map data"; |                     LOG(INFO) << "Saved GPS L1 Ephemeris map data"; | ||||||
|                 } |                 } | ||||||
|             catch (const std::exception& e) |             catch (const std::exception& e) | ||||||
| @@ -519,13 +519,13 @@ bool RtklibPvt::save_assistance_to_XML() | |||||||
|                     LOG(WARNING) << e.what(); |                     LOG(WARNING) << e.what(); | ||||||
|                     return false; |                     return false; | ||||||
|                 } |                 } | ||||||
|             return true;  // return variable (true == succeeded) |  | ||||||
|         } |         } | ||||||
|     else |     else | ||||||
|         { |         { | ||||||
|             LOG(WARNING) << "Failed to save Ephemeris, map is empty"; |             LOG(WARNING) << "Failed to save Ephemeris, map is empty"; | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|  |     return true;  // return variable (true == succeeded) | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -25,6 +25,10 @@ set(PVT_GR_BLOCKS_SOURCES | |||||||
| 	rtklib_pvt_cc.cc | 	rtklib_pvt_cc.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(PVT_GR_BLOCKS_HEADERS | ||||||
|  | 	rtklib_pvt_cc.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/system_parameters |      ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -39,8 +43,6 @@ include_directories( | |||||||
|      ${GNURADIO_RUNTIME_INCLUDE_DIRS} |      ${GNURADIO_RUNTIME_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB PVT_GR_BLOCKS_HEADERS "*.h") |  | ||||||
| list(SORT PVT_GR_BLOCKS_HEADERS) |  | ||||||
| add_library(pvt_gr_blocks ${PVT_GR_BLOCKS_SOURCES} ${PVT_GR_BLOCKS_HEADERS}) | add_library(pvt_gr_blocks ${PVT_GR_BLOCKS_SOURCES} ${PVT_GR_BLOCKS_HEADERS}) | ||||||
| source_group(Headers FILES ${PVT_GR_BLOCKS_HEADERS}) | source_group(Headers FILES ${PVT_GR_BLOCKS_HEADERS}) | ||||||
| target_link_libraries(pvt_gr_blocks pvt_lib ${ARMADILLO_LIBRARIES}) | target_link_libraries(pvt_gr_blocks pvt_lib ${ARMADILLO_LIBRARIES}) | ||||||
|   | |||||||
| @@ -50,6 +50,10 @@ namespace bc = boost::math; | |||||||
| namespace bc = boost::integer; | namespace bc = boost::integer; | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | //includes used by the observables serializarion (export observables for rtklib unit test) | ||||||
|  | #include <boost/archive/xml_oarchive.hpp> | ||||||
|  | #include <boost/archive/xml_iarchive.hpp> | ||||||
|  | #include <boost/serialization/map.hpp> | ||||||
|  |  | ||||||
| using google::LogMessage; | using google::LogMessage; | ||||||
|  |  | ||||||
| @@ -396,12 +400,12 @@ rtklib_pvt_cc::~rtklib_pvt_cc() | |||||||
|  |  | ||||||
|     if (d_ls_pvt->gps_cnav_ephemeris_map.empty() == false) |     if (d_ls_pvt->gps_cnav_ephemeris_map.empty() == false) | ||||||
|         { |         { | ||||||
|  |             std::ofstream ofs; | ||||||
|             try |             try | ||||||
|                 { |                 { | ||||||
|                     std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); |                     ofs.open(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); | ||||||
|                     boost::archive::xml_oarchive xml(ofs); |                     boost::archive::xml_oarchive xml(ofs); | ||||||
|                     xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", d_ls_pvt->gps_cnav_ephemeris_map); |                     xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", d_ls_pvt->gps_cnav_ephemeris_map); | ||||||
|                     ofs.close(); |  | ||||||
|                     LOG(INFO) << "Saved GPS L2CM or L5 Ephemeris map data"; |                     LOG(INFO) << "Saved GPS L2CM or L5 Ephemeris map data"; | ||||||
|                 } |                 } | ||||||
|             catch (std::exception& e) |             catch (std::exception& e) | ||||||
| @@ -419,12 +423,12 @@ rtklib_pvt_cc::~rtklib_pvt_cc() | |||||||
|  |  | ||||||
|     if (d_ls_pvt->gps_ephemeris_map.empty() == false) |     if (d_ls_pvt->gps_ephemeris_map.empty() == false) | ||||||
|         { |         { | ||||||
|  |             std::ofstream ofs; | ||||||
|             try |             try | ||||||
|                 { |                 { | ||||||
|                     std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); |                     ofs.open(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); | ||||||
|                     boost::archive::xml_oarchive xml(ofs); |                     boost::archive::xml_oarchive xml(ofs); | ||||||
|                     xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", d_ls_pvt->gps_ephemeris_map); |                     xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", d_ls_pvt->gps_ephemeris_map); | ||||||
|                     ofs.close(); |  | ||||||
|                     LOG(INFO) << "Saved GPS L1 CA Ephemeris map data"; |                     LOG(INFO) << "Saved GPS L1 CA Ephemeris map data"; | ||||||
|                 } |                 } | ||||||
|             catch (const std::exception& e) |             catch (const std::exception& e) | ||||||
| @@ -442,12 +446,12 @@ rtklib_pvt_cc::~rtklib_pvt_cc() | |||||||
|  |  | ||||||
|     if (d_ls_pvt->galileo_ephemeris_map.empty() == false) |     if (d_ls_pvt->galileo_ephemeris_map.empty() == false) | ||||||
|         { |         { | ||||||
|  |             std::ofstream ofs; | ||||||
|             try |             try | ||||||
|                 { |                 { | ||||||
|                     std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); |                     ofs.open(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); | ||||||
|                     boost::archive::xml_oarchive xml(ofs); |                     boost::archive::xml_oarchive xml(ofs); | ||||||
|                     xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", d_ls_pvt->galileo_ephemeris_map); |                     xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", d_ls_pvt->galileo_ephemeris_map); | ||||||
|                     ofs.close(); |  | ||||||
|                     LOG(INFO) << "Saved Galileo E1 Ephemeris map data"; |                     LOG(INFO) << "Saved Galileo E1 Ephemeris map data"; | ||||||
|                 } |                 } | ||||||
|             catch (const std::exception& e) |             catch (const std::exception& e) | ||||||
| @@ -465,12 +469,12 @@ rtklib_pvt_cc::~rtklib_pvt_cc() | |||||||
|  |  | ||||||
|     if (d_ls_pvt->glonass_gnav_ephemeris_map.empty() == false) |     if (d_ls_pvt->glonass_gnav_ephemeris_map.empty() == false) | ||||||
|         { |         { | ||||||
|  |             std::ofstream ofs; | ||||||
|             try |             try | ||||||
|                 { |                 { | ||||||
|                     std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); |                     ofs.open(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); | ||||||
|                     boost::archive::xml_oarchive xml(ofs); |                     boost::archive::xml_oarchive xml(ofs); | ||||||
|                     xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", d_ls_pvt->glonass_gnav_ephemeris_map); |                     xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", d_ls_pvt->glonass_gnav_ephemeris_map); | ||||||
|                     ofs.close(); |  | ||||||
|                     LOG(INFO) << "Saved GLONASS GNAV Ephemeris map data"; |                     LOG(INFO) << "Saved GLONASS GNAV Ephemeris map data"; | ||||||
|                 } |                 } | ||||||
|             catch (std::exception& e) |             catch (std::exception& e) | ||||||
| @@ -507,6 +511,54 @@ bool rtklib_pvt_cc::send_sys_v_ttff_msg(ttff_msgbuf ttff) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool rtklib_pvt_cc::save_gnss_synchro_map_xml(const std::string file_name) | ||||||
|  | { | ||||||
|  |     if (gnss_observables_map.empty() == false) | ||||||
|  |         { | ||||||
|  |             std::ofstream ofs; | ||||||
|  |             try | ||||||
|  |                 { | ||||||
|  |                     ofs.open(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); | ||||||
|  |                     boost::archive::xml_oarchive xml(ofs); | ||||||
|  |                     xml << boost::serialization::make_nvp("GNSS-SDR_gnss_synchro_map", gnss_observables_map); | ||||||
|  |                     LOG(INFO) << "Saved gnss_sychro map data"; | ||||||
|  |                 } | ||||||
|  |             catch (std::exception& e) | ||||||
|  |                 { | ||||||
|  |                     LOG(WARNING) << e.what(); | ||||||
|  |                     return false; | ||||||
|  |                 } | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |     else | ||||||
|  |         { | ||||||
|  |             LOG(WARNING) << "Failed to save gnss_synchro, map is empty"; | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool rtklib_pvt_cc::load_gnss_synchro_map_xml(const std::string file_name) | ||||||
|  | { | ||||||
|  |     // load from xml (boost serialize) | ||||||
|  |     std::ifstream ifs; | ||||||
|  |     try | ||||||
|  |         { | ||||||
|  |             ifs.open(file_name.c_str(), std::ifstream::binary | std::ifstream::in); | ||||||
|  |             boost::archive::xml_iarchive xml(ifs); | ||||||
|  |             gnss_observables_map.clear(); | ||||||
|  |             xml >> boost::serialization::make_nvp("GNSS-SDR_gnss_synchro_map", gnss_observables_map); | ||||||
|  |             //std::cout << "Loaded gnss_synchro map data with " << gnss_synchro_map.size() << " pseudoranges" << std::endl; | ||||||
|  |         } | ||||||
|  |     catch (std::exception& e) | ||||||
|  |         { | ||||||
|  |             std::cout << e.what() << "File: " << file_name; | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |     return true; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int rtklib_pvt_cc::work(int noutput_items, gr_vector_const_void_star& input_items, | int rtklib_pvt_cc::work(int noutput_items, gr_vector_const_void_star& input_items, | ||||||
|     gr_vector_void_star& output_items __attribute__((unused))) |     gr_vector_void_star& output_items __attribute__((unused))) | ||||||
| { | { | ||||||
| @@ -526,7 +578,6 @@ int rtklib_pvt_cc::work(int noutput_items, gr_vector_const_void_star& input_item | |||||||
|  |  | ||||||
|             gnss_observables_map.clear(); |             gnss_observables_map.clear(); | ||||||
|             const Gnss_Synchro** in = reinterpret_cast<const Gnss_Synchro**>(&input_items[0]);  // Get the input buffer pointer |             const Gnss_Synchro** in = reinterpret_cast<const Gnss_Synchro**>(&input_items[0]);  // Get the input buffer pointer | ||||||
|  |  | ||||||
|             // ############ 1. READ PSEUDORANGES #### |             // ############ 1. READ PSEUDORANGES #### | ||||||
|             for (uint32_t i = 0; i < d_nchannels; i++) |             for (uint32_t i = 0; i < d_nchannels; i++) | ||||||
|                 { |                 { | ||||||
| @@ -610,8 +661,15 @@ int rtklib_pvt_cc::work(int noutput_items, gr_vector_const_void_star& input_item | |||||||
|                             //        it->second.Pseudorange_m = it->second.Pseudorange_m - d_ls_pvt->get_time_offset_s() * GPS_C_m_s; |                             //        it->second.Pseudorange_m = it->second.Pseudorange_m - d_ls_pvt->get_time_offset_s() * GPS_C_m_s; | ||||||
|                             //    } |                             //    } | ||||||
|  |  | ||||||
|  |  | ||||||
|                             if (d_ls_pvt->get_PVT(gnss_observables_map, false)) |                             if (d_ls_pvt->get_PVT(gnss_observables_map, false)) | ||||||
|                                 { |                                 { | ||||||
|  |                                     //Optional debug code: export observables snapshot for rtklib unit testing | ||||||
|  |                                     //std::cout << "step 1: save gnss_synchro map" << std::endl; | ||||||
|  |                                     //save_gnss_synchro_map_xml("./gnss_synchro_map.xml"); | ||||||
|  |                                     //getchar(); //stop the execution | ||||||
|  |                                     //end debug | ||||||
|  |  | ||||||
|                                     if (current_RX_time_ms % d_display_rate_ms == 0) |                                     if (current_RX_time_ms % d_display_rate_ms == 0) | ||||||
|                                         { |                                         { | ||||||
|                                             flag_display_pvt = true; |                                             flag_display_pvt = true; | ||||||
| @@ -2060,7 +2118,6 @@ int rtklib_pvt_cc::work(int noutput_items, gr_vector_const_void_star& input_item | |||||||
|                         { |                         { | ||||||
|                             std::streamsize ss = std::cout.precision();  // save current precision |                             std::streamsize ss = std::cout.precision();  // save current precision | ||||||
|                             std::cout.setf(std::ios::fixed, std::ios::floatfield); |                             std::cout.setf(std::ios::fixed, std::ios::floatfield); | ||||||
|  |  | ||||||
|                             auto facet = new boost::posix_time::time_facet("%Y-%b-%d %H:%M:%S.%f %z"); |                             auto facet = new boost::posix_time::time_facet("%Y-%b-%d %H:%M:%S.%f %z"); | ||||||
|                             std::cout.imbue(std::locale(std::cout.getloc(), facet)); |                             std::cout.imbue(std::locale(std::cout.getloc(), facet)); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -152,6 +152,10 @@ private: | |||||||
|     bool send_sys_v_ttff_msg(ttff_msgbuf ttff); |     bool send_sys_v_ttff_msg(ttff_msgbuf ttff); | ||||||
|     std::chrono::time_point<std::chrono::system_clock> start, end; |     std::chrono::time_point<std::chrono::system_clock> start, end; | ||||||
|  |  | ||||||
|  |     bool save_gnss_synchro_map_xml(const std::string file_name);  //debug helper function | ||||||
|  |  | ||||||
|  |     bool load_gnss_synchro_map_xml(const std::string file_name);  //debug helper function | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     rtklib_pvt_cc(uint32_t nchannels, |     rtklib_pvt_cc(uint32_t nchannels, | ||||||
|         bool dump, std::string dump_filename, |         bool dump, std::string dump_filename, | ||||||
|   | |||||||
| @@ -31,6 +31,20 @@ set(PVT_LIB_SOURCES | |||||||
|      rtklib_solver.cc |      rtklib_solver.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(PVT_LIB_HEADERS  | ||||||
|  |      pvt_solution.h | ||||||
|  |      ls_pvt.h | ||||||
|  |      hybrid_ls_pvt.h | ||||||
|  |      kml_printer.h | ||||||
|  |      gpx_printer.h | ||||||
|  |      rinex_printer.h | ||||||
|  |      nmea_printer.h   | ||||||
|  |      rtcm_printer.h | ||||||
|  |      geojson_printer.h | ||||||
|  |      rtklib_solver.h | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/system_parameters |      ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -45,8 +59,9 @@ include_directories( | |||||||
|      ${GLOG_INCLUDE_DIRS} |      ${GLOG_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB PVT_LIB_HEADERS "*.h") |  | ||||||
| list(SORT PVT_LIB_HEADERS) | list(SORT PVT_LIB_HEADERS) | ||||||
|  | list(SORT PVT_LIB_SOURCES) | ||||||
|  |  | ||||||
| add_library(pvt_lib ${PVT_LIB_SOURCES} ${PVT_LIB_HEADERS}) | add_library(pvt_lib ${PVT_LIB_SOURCES} ${PVT_LIB_HEADERS}) | ||||||
| source_group(Headers FILES ${PVT_LIB_HEADERS}) | source_group(Headers FILES ${PVT_LIB_HEADERS}) | ||||||
| add_dependencies(pvt_lib rtklib_lib armadillo-${armadillo_RELEASE} glog-${glog_RELEASE}) | add_dependencies(pvt_lib rtklib_lib armadillo-${armadillo_RELEASE} glog-${glog_RELEASE}) | ||||||
| @@ -61,4 +76,3 @@ target_link_libraries( | |||||||
|     ${BLAS} |     ${BLAS} | ||||||
|     ${LAPACK} |     ${LAPACK} | ||||||
| ) | ) | ||||||
|      |  | ||||||
|   | |||||||
| @@ -76,12 +76,13 @@ private: | |||||||
|     rtk_t rtk_; |     rtk_t rtk_; | ||||||
|     std::string d_dump_filename; |     std::string d_dump_filename; | ||||||
|     std::ofstream d_dump_file; |     std::ofstream d_dump_file; | ||||||
|     sol_t pvt_sol; |  | ||||||
|     bool d_flag_dump_enabled; |     bool d_flag_dump_enabled; | ||||||
|     int d_nchannels;  // Number of available channels for positioning |     int d_nchannels;  // Number of available channels for positioning | ||||||
|     double dop_[4]; |     double dop_[4]; | ||||||
|  |  | ||||||
| public: | public: | ||||||
|  |     sol_t pvt_sol; | ||||||
|     rtklib_solver(int nchannels, std::string dump_filename, bool flag_dump_to_file, rtk_t& rtk); |     rtklib_solver(int nchannels, std::string dump_filename, bool flag_dump_to_file, rtk_t& rtk); | ||||||
|     ~rtklib_solver(); |     ~rtklib_solver(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -36,12 +36,43 @@ set(ACQ_ADAPTER_SOURCES | |||||||
|     glonass_l2_ca_pcps_acquisition.cc |     glonass_l2_ca_pcps_acquisition.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(ACQ_ADAPTER_HEADERS | ||||||
|  |     gps_l1_ca_pcps_acquisition.h | ||||||
|  |     gps_l1_ca_pcps_assisted_acquisition.h | ||||||
|  |     gps_l1_ca_pcps_acquisition_fine_doppler.h | ||||||
|  |     gps_l1_ca_pcps_tong_acquisition.h | ||||||
|  |     gps_l1_ca_pcps_quicksync_acquisition.h | ||||||
|  |     gps_l2_m_pcps_acquisition.h | ||||||
|  |     gps_l5i_pcps_acquisition.h | ||||||
|  |     galileo_e1_pcps_ambiguous_acquisition.h | ||||||
|  |     galileo_e1_pcps_cccwsr_ambiguous_acquisition.h | ||||||
|  |     galileo_e1_pcps_quicksync_ambiguous_acquisition.h | ||||||
|  |     galileo_e1_pcps_tong_ambiguous_acquisition.h | ||||||
|  |     galileo_e1_pcps_8ms_ambiguous_acquisition.h | ||||||
|  |     galileo_e5a_noncoherent_iq_acquisition_caf.h | ||||||
|  |     galileo_e5a_pcps_acquisition.h | ||||||
|  |     glonass_l1_ca_pcps_acquisition.h | ||||||
|  |     glonass_l2_ca_pcps_acquisition.h | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| if(ENABLE_FPGA) | if(ENABLE_FPGA) | ||||||
|     set(ACQ_ADAPTER_SOURCES ${ACQ_ADAPTER_SOURCES} gps_l1_ca_pcps_acquisition_fpga.cc gps_l2_m_pcps_acquisition_fpga.cc galileo_e1_pcps_ambiguous_acquisition_fpga.cc galileo_e5a_pcps_acquisition_fpga.cc gps_l5i_pcps_acquisition_fpga.cc) |     set(ACQ_ADAPTER_SOURCES ${ACQ_ADAPTER_SOURCES} gps_l1_ca_pcps_acquisition_fpga.cc  | ||||||
|  |                                                    gps_l2_m_pcps_acquisition_fpga.cc | ||||||
|  |                                                    galileo_e1_pcps_ambiguous_acquisition_fpga.cc | ||||||
|  |                                                    galileo_e5a_pcps_acquisition_fpga.cc | ||||||
|  |                                                    gps_l5i_pcps_acquisition_fpga.cc) | ||||||
|  |  | ||||||
|  |     set(ACQ_ADAPTER_HEADERS ${ACQ_ADAPTER_HEADERS} gps_l1_ca_pcps_acquisition_fpga.h  | ||||||
|  |                                                    gps_l2_m_pcps_acquisition_fpga.h | ||||||
|  |                                                    galileo_e1_pcps_ambiguous_acquisition_fpga.h | ||||||
|  |                                                    galileo_e5a_pcps_acquisition_fpga.h | ||||||
|  |                                                    gps_l5i_pcps_acquisition_fpga.h)                                                    | ||||||
| endif(ENABLE_FPGA) | endif(ENABLE_FPGA) | ||||||
|      |      | ||||||
| if(OPENCL_FOUND) | if(OPENCL_FOUND) | ||||||
|     set(ACQ_ADAPTER_SOURCES ${ACQ_ADAPTER_SOURCES} gps_l1_ca_pcps_opencl_acquisition.cc) |     set(ACQ_ADAPTER_SOURCES ${ACQ_ADAPTER_SOURCES} gps_l1_ca_pcps_opencl_acquisition.cc) | ||||||
|  |     set(ACQ_ADAPTER_HEADERS ${ACQ_ADAPTER_HEADERS} gps_l1_ca_pcps_opencl_acquisition.h) | ||||||
| endif(OPENCL_FOUND) | endif(OPENCL_FOUND) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
| @@ -61,8 +92,8 @@ include_directories( | |||||||
|      ${VOLK_GNSSSDR_INCLUDE_DIRS} |      ${VOLK_GNSSSDR_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB ACQ_ADAPTER_HEADERS "*.h") |  | ||||||
| list(SORT ACQ_ADAPTER_HEADERS) | list(SORT ACQ_ADAPTER_HEADERS) | ||||||
|  | list(SORT ACQ_ADAPTER_SOURCES) | ||||||
| add_library(acq_adapters ${ACQ_ADAPTER_SOURCES} ${ACQ_ADAPTER_HEADERS}) | add_library(acq_adapters ${ACQ_ADAPTER_SOURCES} ${ACQ_ADAPTER_HEADERS}) | ||||||
| source_group(Headers FILES ${ACQ_ADAPTER_HEADERS}) | source_group(Headers FILES ${ACQ_ADAPTER_HEADERS}) | ||||||
| target_link_libraries(acq_adapters acquisition_lib gnss_sp_libs gnss_sdr_flags acq_gr_blocks ${Boost_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES}) | target_link_libraries(acq_adapters acquisition_lib gnss_sp_libs gnss_sdr_flags acq_gr_blocks ${Boost_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES}) | ||||||
|   | |||||||
| @@ -28,12 +28,25 @@ set(ACQ_GR_BLOCKS_SOURCES | |||||||
|     galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc |     galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(ACQ_GR_BLOCKS_HEADERS | ||||||
|  |     pcps_acquisition.h | ||||||
|  |     pcps_assisted_acquisition_cc.h | ||||||
|  |     pcps_acquisition_fine_doppler_cc.h | ||||||
|  |     pcps_tong_acquisition_cc.h | ||||||
|  |     pcps_cccwsr_acquisition_cc.h | ||||||
|  |     pcps_quicksync_acquisition_cc.h | ||||||
|  |     galileo_pcps_8ms_acquisition_cc.h | ||||||
|  |     galileo_e5a_noncoherent_iq_acquisition_caf_cc.h | ||||||
|  | )  | ||||||
|  |  | ||||||
| if(ENABLE_FPGA) | if(ENABLE_FPGA) | ||||||
|     set(ACQ_GR_BLOCKS_SOURCES ${ACQ_GR_BLOCKS_SOURCES} pcps_acquisition_fpga.cc) |     set(ACQ_GR_BLOCKS_SOURCES ${ACQ_GR_BLOCKS_SOURCES} pcps_acquisition_fpga.cc) | ||||||
|  |     set(ACQ_GR_BLOCKS_HEADERS ${ACQ_GR_BLOCKS_HEADERS} pcps_acquisition_fpga.h) | ||||||
| endif(ENABLE_FPGA) | endif(ENABLE_FPGA) | ||||||
|      |      | ||||||
| if(OPENCL_FOUND) | if(OPENCL_FOUND) | ||||||
|     set(ACQ_GR_BLOCKS_SOURCES ${ACQ_GR_BLOCKS_SOURCES} pcps_opencl_acquisition_cc.cc) |     set(ACQ_GR_BLOCKS_SOURCES ${ACQ_GR_BLOCKS_SOURCES} pcps_opencl_acquisition_cc.cc) | ||||||
|  |     set(ACQ_GR_BLOCKS_HEADERS ${ACQ_GR_BLOCKS_HEADERS} pcps_opencl_acquisition_cc.h) | ||||||
| endif(OPENCL_FOUND) | endif(OPENCL_FOUND) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
| @@ -61,8 +74,8 @@ if(OPENCL_FOUND) | |||||||
|     endif(OS_IS_MACOSX) |     endif(OS_IS_MACOSX) | ||||||
| endif(OPENCL_FOUND) | endif(OPENCL_FOUND) | ||||||
|  |  | ||||||
| file(GLOB ACQ_GR_BLOCKS_HEADERS "*.h") |  | ||||||
| list(SORT ACQ_GR_BLOCKS_HEADERS) | list(SORT ACQ_GR_BLOCKS_HEADERS) | ||||||
|  | list(SORT ACQ_GR_BLOCKS_SOURCES) | ||||||
| add_library(acq_gr_blocks ${ACQ_GR_BLOCKS_SOURCES} ${ACQ_GR_BLOCKS_HEADERS}) | add_library(acq_gr_blocks ${ACQ_GR_BLOCKS_SOURCES} ${ACQ_GR_BLOCKS_HEADERS}) | ||||||
| source_group(Headers FILES ${ACQ_GR_BLOCKS_HEADERS}) | source_group(Headers FILES ${ACQ_GR_BLOCKS_HEADERS}) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -78,7 +78,7 @@ pcps_acquisition_fpga::pcps_acquisition_fpga(pcpsconf_fpga_t conf_) : gr::block( | |||||||
|     d_single_doppler_flag = false; |     d_single_doppler_flag = false; | ||||||
|  |  | ||||||
|     d_downsampling_factor = acq_parameters.downsampling_factor; |     d_downsampling_factor = acq_parameters.downsampling_factor; | ||||||
|     //printf("downsampling_factor = %f\n", d_downsampling_factor); |     //printf("AAAAAAAAAA downsampling_factor = %f\n", d_downsampling_factor); | ||||||
|     d_select_queue_Fpga = acq_parameters.select_queue_Fpga; |     d_select_queue_Fpga = acq_parameters.select_queue_Fpga; | ||||||
|     //printf("zzzz acq_parameters.code_length = %d\n", acq_parameters.code_length); |     //printf("zzzz acq_parameters.code_length = %d\n", acq_parameters.code_length); | ||||||
|     //printf("zzzz acq_parameters.samples_per_ms = %d\n", acq_parameters.samples_per_ms); |     //printf("zzzz acq_parameters.samples_per_ms = %d\n", acq_parameters.samples_per_ms); | ||||||
|   | |||||||
| @@ -18,6 +18,7 @@ | |||||||
|  |  | ||||||
| if(ENABLE_FPGA) | if(ENABLE_FPGA) | ||||||
|    set(ACQUISITION_LIB_SOURCES fpga_acquisition.cc ) |    set(ACQUISITION_LIB_SOURCES fpga_acquisition.cc ) | ||||||
|  |    set(ACQUISITION_LIB_HEADERS fpga_acquisition.h ) | ||||||
|    include_directories( |    include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/system_parameters |      ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -29,15 +30,14 @@ if(ENABLE_FPGA) | |||||||
|      ${GFlags_INCLUDE_DIRS} |      ${GFlags_INCLUDE_DIRS} | ||||||
|      ${VOLK_GNSSSDR_INCLUDE_DIRS} |      ${VOLK_GNSSSDR_INCLUDE_DIRS} | ||||||
|    ) |    ) | ||||||
|  |  | ||||||
|    file(GLOB ACQUISITION_LIB_HEADERS "*.h") |  | ||||||
| endif(ENABLE_FPGA) | endif(ENABLE_FPGA) | ||||||
|  |  | ||||||
| set(ACQUISITION_LIB_HEADERS ${ACQUISITION_LIB_HEADERS} acq_conf.h) | set(ACQUISITION_LIB_HEADERS ${ACQUISITION_LIB_HEADERS} acq_conf.h) | ||||||
| list(SORT ACQUISITION_LIB_HEADERS) |  | ||||||
|  |  | ||||||
| set(ACQUISITION_LIB_SOURCES ${ACQUISITION_LIB_SOURCES} acq_conf.cc) | set(ACQUISITION_LIB_SOURCES ${ACQUISITION_LIB_SOURCES} acq_conf.cc) | ||||||
|  |  | ||||||
|  | list(SORT ACQUISITION_LIB_HEADERS) | ||||||
|  | list(SORT ACQUISITION_LIB_SOURCES) | ||||||
|  |  | ||||||
| add_library(acquisition_lib ${ACQUISITION_LIB_SOURCES} ${ACQUISITION_LIB_HEADERS}) | add_library(acquisition_lib ${ACQUISITION_LIB_SOURCES} ${ACQUISITION_LIB_HEADERS}) | ||||||
| source_group(Headers FILES ${ACQUISITION_LIB_HEADERS}) | source_group(Headers FILES ${ACQUISITION_LIB_HEADERS}) | ||||||
| target_link_libraries(acquisition_lib ${VOLK_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES}) | target_link_libraries(acquisition_lib ${VOLK_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES}) | ||||||
|   | |||||||
| @@ -17,6 +17,7 @@ | |||||||
| # | # | ||||||
|  |  | ||||||
| set(CHANNEL_ADAPTER_SOURCES channel.cc) | set(CHANNEL_ADAPTER_SOURCES channel.cc) | ||||||
|  | set(CHANNEL_ADAPTER_HEADERS channel.h) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
| @@ -31,8 +32,6 @@ include_directories( | |||||||
|      ${GNURADIO_RUNTIME_INCLUDE_DIRS} |      ${GNURADIO_RUNTIME_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB CHANNEL_ADAPTER_HEADERS "*.h") |  | ||||||
| list(SORT CHANNEL_ADAPTER_HEADERS) |  | ||||||
| add_library(channel_adapters ${CHANNEL_ADAPTER_SOURCES} ${CHANNEL_ADAPTER_HEADERS}) | add_library(channel_adapters ${CHANNEL_ADAPTER_SOURCES} ${CHANNEL_ADAPTER_HEADERS}) | ||||||
| source_group(Headers FILES ${CHANNEL_ADAPTER_HEADERS}) | source_group(Headers FILES ${CHANNEL_ADAPTER_HEADERS}) | ||||||
| target_link_libraries(channel_adapters channel_fsm ${GNURADIO_RUNTIME_LIBRARIES} ${Boost_LIBRARIES} gnss_sdr_flags) | target_link_libraries(channel_adapters channel_fsm ${GNURADIO_RUNTIME_LIBRARIES} ${Boost_LIBRARIES} gnss_sdr_flags) | ||||||
|   | |||||||
| @@ -21,6 +21,11 @@ set(CHANNEL_FSM_SOURCES | |||||||
|     channel_msg_receiver_cc.cc |     channel_msg_receiver_cc.cc | ||||||
|     ) |     ) | ||||||
|      |      | ||||||
|  | set(CHANNEL_FSM_HEADERS  | ||||||
|  |     channel_fsm.h  | ||||||
|  |     channel_msg_receiver_cc.h | ||||||
|  |     )     | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/system_parameters |      ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -33,8 +38,9 @@ include_directories( | |||||||
|      ${GNURADIO_RUNTIME_INCLUDE_DIRS} |      ${GNURADIO_RUNTIME_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB CHANNEL_FSM_HEADERS "*.h") |  | ||||||
| list(SORT CHANNEL_FSM_HEADERS) | list(SORT CHANNEL_FSM_HEADERS) | ||||||
|  | list(SORT CHANNEL_FSM_SOURCES) | ||||||
|  |  | ||||||
| add_library(channel_fsm ${CHANNEL_FSM_SOURCES} ${CHANNEL_FSM_HEADERS}) | add_library(channel_fsm ${CHANNEL_FSM_SOURCES} ${CHANNEL_FSM_HEADERS}) | ||||||
| source_group(Headers FILES ${CHANNEL_FSM_HEADERS}) | source_group(Headers FILES ${CHANNEL_FSM_HEADERS}) | ||||||
| add_dependencies(channel_fsm glog-${glog_RELEASE}) | add_dependencies(channel_fsm glog-${glog_RELEASE}) | ||||||
|   | |||||||
| @@ -22,6 +22,11 @@ set(COND_ADAPTER_SOURCES | |||||||
| 	array_signal_conditioner.cc | 	array_signal_conditioner.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(COND_ADAPTER_HEADERS  | ||||||
|  | 	signal_conditioner.h | ||||||
|  | 	array_signal_conditioner.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/system_parameters |      ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -34,8 +39,9 @@ include_directories( | |||||||
|      ${GNURADIO_RUNTIME_INCLUDE_DIRS} |      ${GNURADIO_RUNTIME_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB COND_ADAPTER_HEADERS "*.h") |  | ||||||
| list(SORT COND_ADAPTER_HEADERS) | list(SORT COND_ADAPTER_HEADERS) | ||||||
|  | list(SORT COND_ADAPTER_SOURCES) | ||||||
|  |  | ||||||
| add_library(conditioner_adapters ${COND_ADAPTER_SOURCES} ${COND_ADAPTER_HEADERS}) | add_library(conditioner_adapters ${COND_ADAPTER_SOURCES} ${COND_ADAPTER_HEADERS}) | ||||||
| source_group(Headers FILES ${COND_ADAPTER_HEADERS}) | source_group(Headers FILES ${COND_ADAPTER_HEADERS}) | ||||||
| add_dependencies(conditioner_adapters glog-${glog_RELEASE}) | add_dependencies(conditioner_adapters glog-${glog_RELEASE}) | ||||||
| @@ -26,6 +26,15 @@ set(DATATYPE_ADAPTER_SOURCES | |||||||
| 	ishort_to_complex.cc  | 	ishort_to_complex.cc  | ||||||
| ) | ) | ||||||
| 	  | 	  | ||||||
|  | set(DATATYPE_ADAPTER_HEADERS  | ||||||
|  |     byte_to_short.h | ||||||
|  |     ibyte_to_cbyte.h | ||||||
|  |     ibyte_to_complex.h | ||||||
|  |     ibyte_to_cshort.h | ||||||
|  |     ishort_to_cshort.h | ||||||
|  | 	ishort_to_complex.h  | ||||||
|  | )	  | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/system_parameters |      ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -38,10 +47,10 @@ include_directories( | |||||||
|      ${VOLK_INCLUDE_DIRS} |      ${VOLK_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB DATATYPE_ADAPTER_HEADERS "*.h") |  | ||||||
| list(SORT DATATYPE_ADAPTER_HEADERS) | list(SORT DATATYPE_ADAPTER_HEADERS) | ||||||
|  | list(SORT DATATYPE_ADAPTER_SOURCES) | ||||||
|  |  | ||||||
| add_library(datatype_adapters ${DATATYPE_ADAPTER_SOURCES} ${DATATYPE_ADAPTER_HEADERS}) | add_library(datatype_adapters ${DATATYPE_ADAPTER_SOURCES} ${DATATYPE_ADAPTER_HEADERS}) | ||||||
| source_group(Headers FILES ${DATATYPE_ADAPTER_HEADERS}) | source_group(Headers FILES ${DATATYPE_ADAPTER_HEADERS}) | ||||||
| add_dependencies(datatype_adapters glog-${glog_RELEASE}) | add_dependencies(datatype_adapters glog-${glog_RELEASE}) | ||||||
| target_link_libraries(datatype_adapters data_type_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES}) | target_link_libraries(datatype_adapters data_type_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES}) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -23,14 +23,21 @@ set(DATA_TYPE_GR_BLOCKS_SOURCES | |||||||
|      interleaved_byte_to_complex_short.cc |      interleaved_byte_to_complex_short.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(DATA_TYPE_GR_BLOCKS_HEADERS  | ||||||
|  |      interleaved_byte_to_complex_byte.h | ||||||
|  |      interleaved_short_to_complex_short.h | ||||||
|  |      interleaved_byte_to_complex_short.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${GNURADIO_RUNTIME_INCLUDE_DIRS} |      ${GNURADIO_RUNTIME_INCLUDE_DIRS} | ||||||
|      ${VOLK_INCLUDE_DIRS} |      ${VOLK_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB DATA_TYPE_GR_BLOCKS_HEADERS "*.h") |  | ||||||
| list(SORT DATA_TYPE_GR_BLOCKS_HEADERS) | list(SORT DATA_TYPE_GR_BLOCKS_HEADERS) | ||||||
|  | list(SORT DATA_TYPE_GR_BLOCKS_SOURCES) | ||||||
|  |  | ||||||
| add_library(data_type_gr_blocks ${DATA_TYPE_GR_BLOCKS_SOURCES} ${DATA_TYPE_GR_BLOCKS_HEADERS}) | add_library(data_type_gr_blocks ${DATA_TYPE_GR_BLOCKS_SOURCES} ${DATA_TYPE_GR_BLOCKS_HEADERS}) | ||||||
| source_group(Headers FILES ${DATA_TYPE_GR_BLOCKS_HEADERS}) | source_group(Headers FILES ${DATA_TYPE_GR_BLOCKS_HEADERS}) | ||||||
| target_link_libraries(data_type_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES} ${VOLK_LIBRARIES}) | target_link_libraries(data_type_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES} ${VOLK_LIBRARIES}) | ||||||
| @@ -25,6 +25,15 @@ set(INPUT_FILTER_ADAPTER_SOURCES | |||||||
|      notch_filter_lite.cc |      notch_filter_lite.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(INPUT_FILTER_ADAPTER_HEADERS  | ||||||
|  |      fir_filter.h | ||||||
|  |      freq_xlating_fir_filter.h | ||||||
|  |      beamformer_filter.h | ||||||
|  |      pulse_blanking_filter.h | ||||||
|  |      notch_filter.h | ||||||
|  |      notch_filter_lite.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/system_parameters |      ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -41,8 +50,9 @@ if(${PC_GNURADIO_RUNTIME_VERSION} VERSION_GREATER "3.7.13.4" ) | |||||||
|      add_definitions( -DGR_GREATER_38=1 ) |      add_definitions( -DGR_GREATER_38=1 ) | ||||||
| endif(${PC_GNURADIO_RUNTIME_VERSION} VERSION_GREATER "3.7.13.4" ) | endif(${PC_GNURADIO_RUNTIME_VERSION} VERSION_GREATER "3.7.13.4" ) | ||||||
|  |  | ||||||
| file(GLOB INPUT_FILTER_ADAPTER_HEADERS "*.h") |  | ||||||
| list(SORT INPUT_FILTER_ADAPTER_HEADERS) | list(SORT INPUT_FILTER_ADAPTER_HEADERS) | ||||||
|  | list(SORT INPUT_FILTER_ADAPTER_SOURCES) | ||||||
|  |  | ||||||
| add_library(input_filter_adapters ${INPUT_FILTER_ADAPTER_SOURCES} ${INPUT_FILTER_ADAPTER_HEADERS}) | add_library(input_filter_adapters ${INPUT_FILTER_ADAPTER_SOURCES} ${INPUT_FILTER_ADAPTER_HEADERS}) | ||||||
| source_group(Headers FILES ${INPUT_FILTER_ADAPTER_HEADERS}) | source_group(Headers FILES ${INPUT_FILTER_ADAPTER_HEADERS}) | ||||||
| add_dependencies(input_filter_adapters glog-${glog_RELEASE} gnss_sp_libs) | add_dependencies(input_filter_adapters glog-${glog_RELEASE} gnss_sp_libs) | ||||||
|   | |||||||
| @@ -24,6 +24,13 @@ set(INPUT_FILTER_GR_BLOCKS_SOURCES | |||||||
|      notch_lite_cc.cc |      notch_lite_cc.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(INPUT_FILTER_GR_BLOCKS_HEADERS | ||||||
|  |      beamformer.h | ||||||
|  |      pulse_blanking_cc.h | ||||||
|  |      notch_cc.h | ||||||
|  |      notch_lite_cc.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${GNURADIO_RUNTIME_INCLUDE_DIRS} |      ${GNURADIO_RUNTIME_INCLUDE_DIRS} | ||||||
| @@ -33,8 +40,9 @@ include_directories( | |||||||
|      ${GFlags_INCLUDE_DIRS} |      ${GFlags_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB INPUT_FILTER_GR_BLOCKS_HEADERS "*.h") |  | ||||||
| list(SORT INPUT_FILTER_GR_BLOCKS_HEADERS) | list(SORT INPUT_FILTER_GR_BLOCKS_HEADERS) | ||||||
|  | list(SORT INPUT_FILTER_GR_BLOCKS_SOURCES) | ||||||
|  |  | ||||||
| add_library(input_filter_gr_blocks ${INPUT_FILTER_GR_BLOCKS_SOURCES} ${INPUT_FILTER_GR_BLOCKS_HEADERS}) | add_library(input_filter_gr_blocks ${INPUT_FILTER_GR_BLOCKS_SOURCES} ${INPUT_FILTER_GR_BLOCKS_HEADERS}) | ||||||
| source_group(Headers FILES ${INPUT_FILTER_GR_BLOCKS_HEADERS}) | source_group(Headers FILES ${INPUT_FILTER_GR_BLOCKS_HEADERS}) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -18,14 +18,12 @@ | |||||||
|  |  | ||||||
| add_subdirectory(rtklib) | add_subdirectory(rtklib) | ||||||
|  |  | ||||||
| if(ENABLE_FPGA) |  | ||||||
| set(GNSS_SPLIBS_SOURCES | set(GNSS_SPLIBS_SOURCES | ||||||
|         gps_l2c_signal.cc |         gps_l2c_signal.cc | ||||||
|         gps_l5_signal.cc |         gps_l5_signal.cc | ||||||
|         galileo_e1_signal_processing.cc |         galileo_e1_signal_processing.cc | ||||||
|         gnss_sdr_valve.cc |         gnss_sdr_valve.cc | ||||||
|         gnss_sdr_sample_counter.cc |         gnss_sdr_sample_counter.cc | ||||||
|         gnss_sdr_time_counter.cc |  | ||||||
|         gnss_signal_processing.cc |         gnss_signal_processing.cc | ||||||
|         gps_sdr_signal_processing.cc |         gps_sdr_signal_processing.cc | ||||||
|         glonass_l1_signal_processing.cc |         glonass_l1_signal_processing.cc | ||||||
| @@ -40,30 +38,43 @@ if(ENABLE_FPGA) | |||||||
|         conjugate_cc.cc |         conjugate_cc.cc | ||||||
|         conjugate_sc.cc |         conjugate_sc.cc | ||||||
|         conjugate_ic.cc |         conjugate_ic.cc | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | set(GNSS_SPLIBS_HEADERS | ||||||
|  |         gps_l2c_signal.h | ||||||
|  |         gps_l5_signal.h | ||||||
|  |         galileo_e1_signal_processing.h | ||||||
|  |         gnss_sdr_valve.h | ||||||
|  |         gnss_sdr_sample_counter.h | ||||||
|  |         gnss_signal_processing.h | ||||||
|  |         gps_sdr_signal_processing.h | ||||||
|  |         glonass_l1_signal_processing.h | ||||||
|  |         glonass_l2_signal_processing.h | ||||||
|  |         pass_through.h | ||||||
|  |         galileo_e5_signal_processing.h | ||||||
|  |         complex_byte_to_float_x2.h | ||||||
|  |         byte_x2_to_complex_byte.h | ||||||
|  |         cshort_to_float_x2.h | ||||||
|  |         short_x2_to_cshort.h | ||||||
|  |         complex_float_to_complex_byte.h | ||||||
|  |         conjugate_cc.h | ||||||
|  |         conjugate_sc.h | ||||||
|  |         conjugate_ic.h | ||||||
|  |         gnss_circular_deque.h | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if(ENABLE_FPGA) | ||||||
|  |     set(GNSS_SPLIBS_SOURCES ${GNSS_SPLIBS_SOURCES} | ||||||
|  |         gnss_sdr_time_counter.cc | ||||||
|         gnss_sdr_fpga_sample_counter.cc |         gnss_sdr_fpga_sample_counter.cc | ||||||
| 	) | 	) | ||||||
| else(ENABLE_FPGA) |  | ||||||
|     set(GNSS_SPLIBS_SOURCES |     set(GNSS_SPLIBS_HEADERS ${GNSS_SPLIBS_HEADERS} | ||||||
|         gps_l2c_signal.cc |         gnss_sdr_time_counter.h | ||||||
|         gps_l5_signal.cc |         gnss_sdr_fpga_sample_counter.h | ||||||
|         galileo_e1_signal_processing.cc |  | ||||||
|         gnss_sdr_valve.cc |  | ||||||
|         gnss_sdr_sample_counter.cc |  | ||||||
|         gnss_signal_processing.cc |  | ||||||
|         gps_sdr_signal_processing.cc |  | ||||||
|         glonass_l1_signal_processing.cc |  | ||||||
|         glonass_l2_signal_processing.cc |  | ||||||
|         pass_through.cc |  | ||||||
|         galileo_e5_signal_processing.cc |  | ||||||
|         complex_byte_to_float_x2.cc |  | ||||||
|         byte_x2_to_complex_byte.cc |  | ||||||
|         cshort_to_float_x2.cc |  | ||||||
|         short_x2_to_cshort.cc |  | ||||||
|         complex_float_to_complex_byte.cc |  | ||||||
|         conjugate_cc.cc |  | ||||||
|         conjugate_sc.cc |  | ||||||
|         conjugate_ic.cc |  | ||||||
| 	) | 	) | ||||||
|  | 	 | ||||||
| endif(ENABLE_FPGA) | endif(ENABLE_FPGA) | ||||||
|  |  | ||||||
| if(OPENCL_FOUND) | if(OPENCL_FOUND) | ||||||
| @@ -72,6 +83,12 @@ if(OPENCL_FOUND) | |||||||
|                             opencl/fft_setup.cc # Needs OpenCL |                             opencl/fft_setup.cc # Needs OpenCL | ||||||
|                             opencl/fft_kernelstring.cc # Needs OpenCL |                             opencl/fft_kernelstring.cc # Needs OpenCL | ||||||
|     ) |     ) | ||||||
|  |         | ||||||
|  |     set(GNSS_SPLIBS_HEADERS ${GNSS_SPLIBS_HEADERS} | ||||||
|  |                             opencl/fft_execute.h # Needs OpenCL | ||||||
|  |                             opencl/fft_setup.h # Needs OpenCL | ||||||
|  |                             opencl/fft_kernelstring.h # Needs OpenCL | ||||||
|  |     )        | ||||||
| endif(OPENCL_FOUND) | endif(OPENCL_FOUND) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
| @@ -99,9 +116,9 @@ endif(OPENCL_FOUND) | |||||||
|  |  | ||||||
| add_definitions(-DGNSSSDR_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}") | add_definitions(-DGNSSSDR_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}") | ||||||
|  |  | ||||||
| file(GLOB GNSS_SPLIBS_HEADERS "*.h") |  | ||||||
| list(REMOVE_ITEM GNSS_SPLIBS_HEADERS gnss_sdr_flags.h) |  | ||||||
| list(SORT GNSS_SPLIBS_HEADERS) | list(SORT GNSS_SPLIBS_HEADERS) | ||||||
|  | list(SORT GNSS_SPLIBS_SOURCES) | ||||||
|  |  | ||||||
| add_library(gnss_sp_libs ${GNSS_SPLIBS_SOURCES} ${GNSS_SPLIBS_HEADERS}) | add_library(gnss_sp_libs ${GNSS_SPLIBS_SOURCES} ${GNSS_SPLIBS_HEADERS}) | ||||||
| source_group(Headers FILES ${GNSS_SPLIBS_HEADERS}) | source_group(Headers FILES ${GNSS_SPLIBS_HEADERS}) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -38,6 +38,27 @@ set(RTKLIB_LIB_SOURCES | |||||||
|      rtklib_rtcm3.cc |      rtklib_rtcm3.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(RTKLIB_LIB_HEADERS | ||||||
|  |      rtklib_rtkcmn.h | ||||||
|  |      rtklib_ephemeris.h | ||||||
|  |      rtklib_preceph.h | ||||||
|  |      rtklib_sbas.h | ||||||
|  |      rtklib_ionex.h | ||||||
|  |      rtklib_pntpos.h | ||||||
|  |      rtklib_ppp.h | ||||||
|  |      rtklib_tides.h | ||||||
|  |      rtklib_lambda.h | ||||||
|  |      rtklib_rtkpos.h | ||||||
|  |      rtklib_conversions.h | ||||||
|  |      rtklib_stream.h | ||||||
|  |      rtklib_rtksvr.h | ||||||
|  |      rtklib_solution.h | ||||||
|  |      rtklib_rtcm.h | ||||||
|  |      rtklib_rtcm2.h | ||||||
|  |      rtklib_rtcm3.h | ||||||
|  |      rtklib.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/system_parameters |      ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -48,8 +69,10 @@ include_directories( | |||||||
|      ${GLOG_INCLUDE_DIRS} |      ${GLOG_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB RTKLIB_LIB_HEADERS "*.h") |  | ||||||
| list(SORT RTKLIB_LIB_HEADERS) | list(SORT RTKLIB_LIB_HEADERS) | ||||||
|  | list(SORT RTKLIB_LIB_SOURCES) | ||||||
|  |  | ||||||
| add_library(rtklib_lib ${RTKLIB_LIB_SOURCES} ${RTKLIB_LIB_HEADERS}) | add_library(rtklib_lib ${RTKLIB_LIB_SOURCES} ${RTKLIB_LIB_HEADERS}) | ||||||
| source_group(Headers FILES ${RTKLIB_LIB_HEADERS}) | source_group(Headers FILES ${RTKLIB_LIB_HEADERS}) | ||||||
| add_dependencies(rtklib_lib glog-${glog_RELEASE}) | add_dependencies(rtklib_lib glog-${glog_RELEASE}) | ||||||
|   | |||||||
| @@ -673,277 +673,6 @@ void pppoutsolstat(rtk_t *rtk, int level, FILE *fp) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| /* solar/lunar tides (ref [2] 7) ---------------------------------------------*/ |  | ||||||
| void tide_pl(const double *eu, const double *rp, double GMp, |  | ||||||
|     const double *pos, double *dr) |  | ||||||
| { |  | ||||||
|     const double H3 = 0.292, L3 = 0.015; |  | ||||||
|     double r, ep[3], latp, lonp, p, K2, K3, a, H2, L2, dp, du, cosp, sinl, cosl; |  | ||||||
|     int i; |  | ||||||
|  |  | ||||||
|     trace(4, "tide_pl : pos=%.3f %.3f\n", pos[0] * R2D, pos[1] * R2D); |  | ||||||
|  |  | ||||||
|     if ((r = norm_rtk(rp, 3)) <= 0.0) return; |  | ||||||
|  |  | ||||||
|     for (i = 0; i < 3; i++) ep[i] = rp[i] / r; |  | ||||||
|  |  | ||||||
|     K2 = GMp / GME * std::pow(RE_WGS84, 2.0) * std::pow(RE_WGS84, 2.0) / (r * r * r); |  | ||||||
|     K3 = K2 * RE_WGS84 / r; |  | ||||||
|     latp = asin(ep[2]); |  | ||||||
|     lonp = atan2(ep[1], ep[0]); |  | ||||||
|     cosp = cos(latp); |  | ||||||
|     sinl = sin(pos[0]); |  | ||||||
|     cosl = cos(pos[0]); |  | ||||||
|  |  | ||||||
|     /* step1 in phase (degree 2) */ |  | ||||||
|     p = (3.0 * sinl * sinl - 1.0) / 2.0; |  | ||||||
|     H2 = 0.6078 - 0.0006 * p; |  | ||||||
|     L2 = 0.0847 + 0.0002 * p; |  | ||||||
|     a = dot(ep, eu, 3); |  | ||||||
|     dp = K2 * 3.0 * L2 * a; |  | ||||||
|     du = K2 * (H2 * (1.5 * a * a - 0.5) - 3.0 * L2 * a * a); |  | ||||||
|  |  | ||||||
|     /* step1 in phase (degree 3) */ |  | ||||||
|     dp += K3 * L3 * (7.5 * a * a - 1.5); |  | ||||||
|     du += K3 * (H3 * (2.5 * a * a * a - 1.5 * a) - L3 * (7.5 * a * a - 1.5) * a); |  | ||||||
|  |  | ||||||
|     /* step1 out-of-phase (only radial) */ |  | ||||||
|     du += 3.0 / 4.0 * 0.0025 * K2 * sin(2.0 * latp) * sin(2.0 * pos[0]) * sin(pos[1] - lonp); |  | ||||||
|     du += 3.0 / 4.0 * 0.0022 * K2 * cosp * cosp * cosl * cosl * sin(2.0 * (pos[1] - lonp)); |  | ||||||
|  |  | ||||||
|     dr[0] = dp * ep[0] + du * eu[0]; |  | ||||||
|     dr[1] = dp * ep[1] + du * eu[1]; |  | ||||||
|     dr[2] = dp * ep[2] + du * eu[2]; |  | ||||||
|  |  | ||||||
|     trace(5, "tide_pl : dr=%.3f %.3f %.3f\n", dr[0], dr[1], dr[2]); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* displacement by solid earth tide (ref [2] 7) ------------------------------*/ |  | ||||||
| void tide_solid(const double *rsun, const double *rmoon, |  | ||||||
|     const double *pos, const double *E, double gmst, int opt, |  | ||||||
|     double *dr) |  | ||||||
| { |  | ||||||
|     double dr1[3], dr2[3], eu[3], du, dn, sinl, sin2l; |  | ||||||
|  |  | ||||||
|     trace(3, "tide_solid: pos=%.3f %.3f opt=%d\n", pos[0] * R2D, pos[1] * R2D, opt); |  | ||||||
|  |  | ||||||
|     /* step1: time domain */ |  | ||||||
|     eu[0] = E[2]; |  | ||||||
|     eu[1] = E[5]; |  | ||||||
|     eu[2] = E[8]; |  | ||||||
|     tide_pl(eu, rsun, GMS, pos, dr1); |  | ||||||
|     tide_pl(eu, rmoon, GMM, pos, dr2); |  | ||||||
|  |  | ||||||
|     /* step2: frequency domain, only K1 radial */ |  | ||||||
|     sin2l = sin(2.0 * pos[0]); |  | ||||||
|     du = -0.012 * sin2l * sin(gmst + pos[1]); |  | ||||||
|  |  | ||||||
|     dr[0] = dr1[0] + dr2[0] + du * E[2]; |  | ||||||
|     dr[1] = dr1[1] + dr2[1] + du * E[5]; |  | ||||||
|     dr[2] = dr1[2] + dr2[2] + du * E[8]; |  | ||||||
|  |  | ||||||
|     /* eliminate permanent deformation */ |  | ||||||
|     if (opt & 8) |  | ||||||
|         { |  | ||||||
|             sinl = sin(pos[0]); |  | ||||||
|             du = 0.1196 * (1.5 * sinl * sinl - 0.5); |  | ||||||
|             dn = 0.0247 * sin2l; |  | ||||||
|             dr[0] += du * E[2] + dn * E[1]; |  | ||||||
|             dr[1] += du * E[5] + dn * E[4]; |  | ||||||
|             dr[2] += du * E[8] + dn * E[7]; |  | ||||||
|         } |  | ||||||
|     trace(5, "tide_solid: dr=%.3f %.3f %.3f\n", dr[0], dr[1], dr[2]); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* displacement by ocean tide loading (ref [2] 7) ----------------------------*/ |  | ||||||
| void tide_oload(gtime_t tut, const double *odisp, double *denu) |  | ||||||
| { |  | ||||||
|     const double args[][5] = { |  | ||||||
|         {1.40519E-4, 2.0, -2.0, 0.0, 0.00},  /* M2 */ |  | ||||||
|         {1.45444E-4, 0.0, 0.0, 0.0, 0.00},   /* S2 */ |  | ||||||
|         {1.37880E-4, 2.0, -3.0, 1.0, 0.00},  /* N2 */ |  | ||||||
|         {1.45842E-4, 2.0, 0.0, 0.0, 0.00},   /* K2 */ |  | ||||||
|         {0.72921E-4, 1.0, 0.0, 0.0, 0.25},   /* K1 */ |  | ||||||
|         {0.67598E-4, 1.0, -2.0, 0.0, -0.25}, /* O1 */ |  | ||||||
|         {0.72523E-4, -1.0, 0.0, 0.0, -0.25}, /* P1 */ |  | ||||||
|         {0.64959E-4, 1.0, -3.0, 1.0, -0.25}, /* Q1 */ |  | ||||||
|         {0.53234E-5, 0.0, 2.0, 0.0, 0.00},   /* Mf */ |  | ||||||
|         {0.26392E-5, 0.0, 1.0, -1.0, 0.00},  /* Mm */ |  | ||||||
|         {0.03982E-5, 2.0, 0.0, 0.0, 0.00}    /* Ssa */ |  | ||||||
|     }; |  | ||||||
|     const double ep1975[] = {1975, 1, 1, 0, 0, 0}; |  | ||||||
|     double ep[6], fday, days, t, t2, t3, a[5], ang, dp[3] = {0}; |  | ||||||
|     int i, j; |  | ||||||
|  |  | ||||||
|     trace(3, "tide_oload:\n"); |  | ||||||
|  |  | ||||||
|     /* angular argument: see subroutine arg.f for reference [1] */ |  | ||||||
|     time2epoch(tut, ep); |  | ||||||
|     fday = ep[3] * 3600.0 + ep[4] * 60.0 + ep[5]; |  | ||||||
|     ep[3] = ep[4] = ep[5] = 0.0; |  | ||||||
|     days = timediff(epoch2time(ep), epoch2time(ep1975)) / 86400.0; |  | ||||||
|     t = (27392.500528 + 1.000000035 * days) / 36525.0; |  | ||||||
|     t2 = t * t; |  | ||||||
|     t3 = t2 * t; |  | ||||||
|  |  | ||||||
|     a[0] = fday; |  | ||||||
|     a[1] = (279.69668 + 36000.768930485 * t + 3.03E-4 * t2) * D2R;                 /* H0 */ |  | ||||||
|     a[2] = (270.434358 + 481267.88314137 * t - 0.001133 * t2 + 1.9E-6 * t3) * D2R; /* S0 */ |  | ||||||
|     a[3] = (334.329653 + 4069.0340329577 * t - 0.010325 * t2 - 1.2E-5 * t3) * D2R; /* P0 */ |  | ||||||
|     a[4] = 2.0 * PI; |  | ||||||
|  |  | ||||||
|     /* displacements by 11 constituents */ |  | ||||||
|     for (i = 0; i < 11; i++) |  | ||||||
|         { |  | ||||||
|             ang = 0.0; |  | ||||||
|             for (j = 0; j < 5; j++) ang += a[j] * args[i][j]; |  | ||||||
|             for (j = 0; j < 3; j++) dp[j] += odisp[j + i * 6] * cos(ang - odisp[j + 3 + i * 6] * D2R); |  | ||||||
|         } |  | ||||||
|     denu[0] = -dp[1]; |  | ||||||
|     denu[1] = -dp[2]; |  | ||||||
|     denu[2] = dp[0]; |  | ||||||
|  |  | ||||||
|     trace(5, "tide_oload: denu=%.3f %.3f %.3f\n", denu[0], denu[1], denu[2]); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* iers mean pole (ref [7] eq.7.25) ------------------------------------------*/ |  | ||||||
| void iers_mean_pole(gtime_t tut, double *xp_bar, double *yp_bar) |  | ||||||
| { |  | ||||||
|     const double ep2000[] = {2000, 1, 1, 0, 0, 0}; |  | ||||||
|     double y, y2, y3; |  | ||||||
|  |  | ||||||
|     y = timediff(tut, epoch2time(ep2000)) / 86400.0 / 365.25; |  | ||||||
|  |  | ||||||
|     if (y < 3653.0 / 365.25) |  | ||||||
|         { /* until 2010.0 */ |  | ||||||
|             y2 = y * y; |  | ||||||
|             y3 = y2 * y; |  | ||||||
|             *xp_bar = 55.974 + 1.8243 * y + 0.18413 * y2 + 0.007024 * y3; /* (mas) */ |  | ||||||
|             *yp_bar = 346.346 + 1.7896 * y - 0.10729 * y2 - 0.000908 * y3; |  | ||||||
|         } |  | ||||||
|     else |  | ||||||
|         {                                  /* after 2010.0 */ |  | ||||||
|             *xp_bar = 23.513 + 7.6141 * y; /* (mas) */ |  | ||||||
|             *yp_bar = 358.891 - 0.6287 * y; |  | ||||||
|         } |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* displacement by pole tide (ref [7] eq.7.26) --------------------------------*/ |  | ||||||
| void tide_pole(gtime_t tut, const double *pos, const double *erpv, |  | ||||||
|     double *denu) |  | ||||||
| { |  | ||||||
|     double xp_bar, yp_bar, m1, m2, cosl, sinl; |  | ||||||
|  |  | ||||||
|     trace(3, "tide_pole: pos=%.3f %.3f\n", pos[0] * R2D, pos[1] * R2D); |  | ||||||
|  |  | ||||||
|     /* iers mean pole (mas) */ |  | ||||||
|     iers_mean_pole(tut, &xp_bar, &yp_bar); |  | ||||||
|  |  | ||||||
|     /* ref [7] eq.7.24 */ |  | ||||||
|     m1 = erpv[0] / AS2R - xp_bar * 1E-3; /* (as) */ |  | ||||||
|     m2 = -erpv[1] / AS2R + yp_bar * 1E-3; |  | ||||||
|  |  | ||||||
|     /* sin(2*theta) = sin(2*phi), cos(2*theta)=-cos(2*phi) */ |  | ||||||
|     cosl = cos(pos[1]); |  | ||||||
|     sinl = sin(pos[1]); |  | ||||||
|     denu[0] = 9E-3 * sin(pos[0]) * (m1 * sinl - m2 * cosl);         /* de= Slambda (m) */ |  | ||||||
|     denu[1] = -9E-3 * cos(2.0 * pos[0]) * (m1 * cosl + m2 * sinl);  /* dn=-Stheta  (m) */ |  | ||||||
|     denu[2] = -33E-3 * sin(2.0 * pos[0]) * (m1 * cosl + m2 * sinl); /* du= Sr      (m) */ |  | ||||||
|  |  | ||||||
|     trace(5, "tide_pole : denu=%.3f %.3f %.3f\n", denu[0], denu[1], denu[2]); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* tidal displacement ---------------------------------------------------------- |  | ||||||
|  * displacements by earth tides |  | ||||||
|  * args   : gtime_t tutc     I   time in utc |  | ||||||
|  *          double *rr       I   site position (ecef) (m) |  | ||||||
|  *          int    opt       I   options (or of the followings) |  | ||||||
|  *                                 1: solid earth tide |  | ||||||
|  *                                 2: ocean tide loading |  | ||||||
|  *                                 4: pole tide |  | ||||||
|  *                                 8: elimate permanent deformation |  | ||||||
|  *          double *erp      I   earth rotation parameters (NULL: not used) |  | ||||||
|  *          double *odisp    I   ocean loading parameters  (NULL: not used) |  | ||||||
|  *                                 odisp[0+i*6]: consituent i amplitude radial(m) |  | ||||||
|  *                                 odisp[1+i*6]: consituent i amplitude west  (m) |  | ||||||
|  *                                 odisp[2+i*6]: consituent i amplitude south (m) |  | ||||||
|  *                                 odisp[3+i*6]: consituent i phase radial  (deg) |  | ||||||
|  *                                 odisp[4+i*6]: consituent i phase west    (deg) |  | ||||||
|  *                                 odisp[5+i*6]: consituent i phase south   (deg) |  | ||||||
|  *                                (i=0:M2,1:S2,2:N2,3:K2,4:K1,5:O1,6:P1,7:Q1, |  | ||||||
|  *                                   8:Mf,9:Mm,10:Ssa) |  | ||||||
|  *          double *dr       O   displacement by earth tides (ecef) (m) |  | ||||||
|  * return : none |  | ||||||
|  * notes  : see ref [1], [2] chap 7 |  | ||||||
|  *          see ref [4] 5.2.1, 5.2.2, 5.2.3 |  | ||||||
|  *          ver.2.4.0 does not use ocean loading and pole tide corrections |  | ||||||
|  *-----------------------------------------------------------------------------*/ |  | ||||||
| void tidedisp(gtime_t tutc, const double *rr, int opt, const erp_t *erp, |  | ||||||
|     const double *odisp, double *dr) |  | ||||||
| { |  | ||||||
|     gtime_t tut; |  | ||||||
|     double pos[2], E[9], drt[3], denu[3], rs[3], rm[3], gmst, erpv[5] = {0}; |  | ||||||
|     int i; |  | ||||||
| #ifdef IERS_MODEL |  | ||||||
|     double ep[6], fhr; |  | ||||||
|     int year, mon, day; |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|     trace(3, "tidedisp: tutc=%s\n", time_str(tutc, 0)); |  | ||||||
|  |  | ||||||
|     if (erp) geterp(erp, tutc, erpv); |  | ||||||
|  |  | ||||||
|     tut = timeadd(tutc, erpv[2]); |  | ||||||
|  |  | ||||||
|     dr[0] = dr[1] = dr[2] = 0.0; |  | ||||||
|  |  | ||||||
|     if (norm_rtk(rr, 3) <= 0.0) return; |  | ||||||
|  |  | ||||||
|     pos[0] = asin(rr[2] / norm_rtk(rr, 3)); |  | ||||||
|     pos[1] = atan2(rr[1], rr[0]); |  | ||||||
|     xyz2enu(pos, E); |  | ||||||
|  |  | ||||||
|     if (opt & 1) |  | ||||||
|         { /* solid earth tides */ |  | ||||||
|  |  | ||||||
|             /* sun and moon position in ecef */ |  | ||||||
|             sunmoonpos(tutc, erpv, rs, rm, &gmst); |  | ||||||
|  |  | ||||||
| #ifdef IERS_MODEL |  | ||||||
|             time2epoch(tutc, ep); |  | ||||||
|             year = (int)ep[0]; |  | ||||||
|             mon = (int)ep[1]; |  | ||||||
|             day = (int)ep[2]; |  | ||||||
|             fhr = ep[3] + ep[4] / 60.0 + ep[5] / 3600.0; |  | ||||||
|  |  | ||||||
|             /* call DEHANTTIDEINEL */ |  | ||||||
|             dehanttideinel_((double *)rr, &year, &mon, &day, &fhr, rs, rm, drt); |  | ||||||
| #else |  | ||||||
|             tide_solid(rs, rm, pos, E, gmst, opt, drt); |  | ||||||
| #endif |  | ||||||
|             for (i = 0; i < 3; i++) dr[i] += drt[i]; |  | ||||||
|         } |  | ||||||
|     if ((opt & 2) && odisp) |  | ||||||
|         { /* ocean tide loading */ |  | ||||||
|             tide_oload(tut, odisp, denu); |  | ||||||
|             matmul("TN", 3, 1, 3, 1.0, E, denu, 0.0, drt); |  | ||||||
|             for (i = 0; i < 3; i++) dr[i] += drt[i]; |  | ||||||
|         } |  | ||||||
|     if ((opt & 4) && erp) |  | ||||||
|         { /* pole tide */ |  | ||||||
|             tide_pole(tut, pos, erpv, denu); |  | ||||||
|             matmul("TN", 3, 1, 3, 1.0, E, denu, 0.0, drt); |  | ||||||
|             for (i = 0; i < 3; i++) dr[i] += drt[i]; |  | ||||||
|         } |  | ||||||
|     trace(5, "tidedisp: dr=%.3f %.3f %.3f\n", dr[0], dr[1], dr[2]); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* exclude meas of eclipsing satellite (block IIA) ---------------------------*/ | /* exclude meas of eclipsing satellite (block IIA) ---------------------------*/ | ||||||
| void testeclipse(const obsd_t *obs, int n, const nav_t *nav, double *rs) | void testeclipse(const obsd_t *obs, int n, const nav_t *nav, double *rs) | ||||||
| { | { | ||||||
|   | |||||||
| @@ -129,21 +129,6 @@ int pppamb(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav, const double | |||||||
| /* functions originally included in RTKLIB/src/ppp.c v2.4.2 */ | /* functions originally included in RTKLIB/src/ppp.c v2.4.2 */ | ||||||
| void pppoutsolstat(rtk_t *rtk, int level, FILE *fp); | void pppoutsolstat(rtk_t *rtk, int level, FILE *fp); | ||||||
|  |  | ||||||
| void tide_pl(const double *eu, const double *rp, double GMp, const double *pos, double *dr); |  | ||||||
|  |  | ||||||
| void tide_solid(const double *rsun, const double *rmoon, |  | ||||||
|     const double *pos, const double *E, double gmst, int opt, |  | ||||||
|     double *dr); |  | ||||||
|  |  | ||||||
| void tide_oload(gtime_t tut, const double *odisp, double *denu); |  | ||||||
|  |  | ||||||
| void iers_mean_pole(gtime_t tut, double *xp_bar, double *yp_bar); |  | ||||||
|  |  | ||||||
| void tide_pole(gtime_t tut, const double *pos, const double *erpv, double *denu); |  | ||||||
|  |  | ||||||
| void tidedisp(gtime_t tutc, const double *rr, int opt, const erp_t *erp, |  | ||||||
|     const double *odisp, double *dr); |  | ||||||
|  |  | ||||||
| void testeclipse(const obsd_t *obs, int n, const nav_t *nav, double *rs); | void testeclipse(const obsd_t *obs, int n, const nav_t *nav, double *rs); | ||||||
|  |  | ||||||
| double varerr(int sat, int sys, double el, int type, const prcopt_t *opt); | double varerr(int sat, int sys, double el, int type, const prcopt_t *opt); | ||||||
|   | |||||||
| @@ -20,6 +20,10 @@ set(OBS_ADAPTER_SOURCES | |||||||
| 	hybrid_observables.cc | 	hybrid_observables.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(OBS_ADAPTER_HEADERS | ||||||
|  | 	hybrid_observables.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/system_parameters |      ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -33,8 +37,6 @@ include_directories( | |||||||
|      ${GNURADIO_RUNTIME_INCLUDE_DIRS} |      ${GNURADIO_RUNTIME_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB OBS_ADAPTER_HEADERS "*.h") |  | ||||||
| list(SORT OBS_ADAPTER_HEADERS) |  | ||||||
| add_library(obs_adapters ${OBS_ADAPTER_SOURCES} ${OBS_ADAPTER_HEADERS}) | add_library(obs_adapters ${OBS_ADAPTER_SOURCES} ${OBS_ADAPTER_HEADERS}) | ||||||
| source_group(Headers FILES ${OBS_ADAPTER_HEADERS}) | source_group(Headers FILES ${OBS_ADAPTER_HEADERS}) | ||||||
| target_link_libraries(obs_adapters obs_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES}) | target_link_libraries(obs_adapters obs_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES}) | ||||||
|   | |||||||
| @@ -20,6 +20,10 @@ set(OBS_GR_BLOCKS_SOURCES | |||||||
| 	hybrid_observables_cc.cc | 	hybrid_observables_cc.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(OBS_GR_BLOCKS_HEADERS  | ||||||
|  | 	hybrid_observables_cc.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/system_parameters |      ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -34,8 +38,6 @@ include_directories( | |||||||
|      ${MATIO_INCLUDE_DIRS} |      ${MATIO_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB OBS_GR_BLOCKS_HEADERS "*.h") |  | ||||||
| list(SORT OBS_GR_BLOCKS_HEADERS) |  | ||||||
| add_library(obs_gr_blocks ${OBS_GR_BLOCKS_SOURCES} ${OBS_GR_BLOCKS_HEADERS}) | add_library(obs_gr_blocks ${OBS_GR_BLOCKS_SOURCES} ${OBS_GR_BLOCKS_HEADERS}) | ||||||
| source_group(Headers FILES ${OBS_GR_BLOCKS_HEADERS}) | source_group(Headers FILES ${OBS_GR_BLOCKS_HEADERS}) | ||||||
| if(MATIO_FOUND) | if(MATIO_FOUND) | ||||||
|   | |||||||
| @@ -21,6 +21,12 @@ set(RESAMPLER_ADAPTER_SOURCES | |||||||
|         mmse_resampler_conditioner.cc |         mmse_resampler_conditioner.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | set(RESAMPLER_ADAPTER_HEADERS | ||||||
|  |         direct_resampler_conditioner.h | ||||||
|  |         mmse_resampler_conditioner.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/interfaces |      ${CMAKE_SOURCE_DIR}/src/core/interfaces | ||||||
| @@ -36,9 +42,9 @@ if(${PC_GNURADIO_RUNTIME_VERSION} VERSION_GREATER "3.7.13.4" ) | |||||||
|      add_definitions( -DGR_GREATER_38=1 ) |      add_definitions( -DGR_GREATER_38=1 ) | ||||||
| endif(${PC_GNURADIO_RUNTIME_VERSION} VERSION_GREATER "3.7.13.4" ) | endif(${PC_GNURADIO_RUNTIME_VERSION} VERSION_GREATER "3.7.13.4" ) | ||||||
|  |  | ||||||
|  |  | ||||||
| file(GLOB RESAMPLER_ADAPTER_HEADERS "*.h") |  | ||||||
| list(SORT RESAMPLER_ADAPTER_HEADERS) | list(SORT RESAMPLER_ADAPTER_HEADERS) | ||||||
|  | list(SORT RESAMPLER_ADAPTER_SOURCES) | ||||||
|  |  | ||||||
| add_library(resampler_adapters ${RESAMPLER_ADAPTER_SOURCES} ${RESAMPLER_ADAPTER_HEADERS}) | add_library(resampler_adapters ${RESAMPLER_ADAPTER_SOURCES} ${RESAMPLER_ADAPTER_HEADERS}) | ||||||
| source_group(Headers FILES ${RESAMPLER_ADAPTER_HEADERS}) | source_group(Headers FILES ${RESAMPLER_ADAPTER_HEADERS}) | ||||||
| target_link_libraries(resampler_adapters resampler_gr_blocks) | target_link_libraries(resampler_adapters resampler_gr_blocks) | ||||||
|   | |||||||
| @@ -23,6 +23,12 @@ set(RESAMPLER_GR_BLOCKS_SOURCES | |||||||
|      direct_resampler_conditioner_cb.cc |      direct_resampler_conditioner_cb.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(RESAMPLER_GR_BLOCKS_HEADERS  | ||||||
|  |      direct_resampler_conditioner_cc.h | ||||||
|  |      direct_resampler_conditioner_cs.h | ||||||
|  |      direct_resampler_conditioner_cb.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${GLOG_INCLUDE_DIRS} |      ${GLOG_INCLUDE_DIRS} | ||||||
| @@ -31,8 +37,9 @@ include_directories( | |||||||
|      ${VOLK_INCLUDE_DIRS} |      ${VOLK_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB RESAMPLER_GR_BLOCKS_HEADERS "*.h") |  | ||||||
| list(SORT RESAMPLER_GR_BLOCKS_HEADERS) | list(SORT RESAMPLER_GR_BLOCKS_HEADERS) | ||||||
|  | list(SORT RESAMPLER_GR_BLOCKS_SOURCES) | ||||||
|  |  | ||||||
| add_library(resampler_gr_blocks ${RESAMPLER_GR_BLOCKS_SOURCES} ${RESAMPLER_GR_BLOCKS_HEADERS}) | add_library(resampler_gr_blocks ${RESAMPLER_GR_BLOCKS_SOURCES} ${RESAMPLER_GR_BLOCKS_HEADERS}) | ||||||
| source_group(Headers FILES ${RESAMPLER_GR_BLOCKS_HEADERS}) | source_group(Headers FILES ${RESAMPLER_GR_BLOCKS_HEADERS}) | ||||||
| add_dependencies(resampler_gr_blocks glog-${glog_RELEASE}) | add_dependencies(resampler_gr_blocks glog-${glog_RELEASE}) | ||||||
| @@ -17,6 +17,7 @@ | |||||||
| # | # | ||||||
|  |  | ||||||
| set(SIGNAL_GENERATOR_ADAPTER_SOURCES signal_generator.cc) | set(SIGNAL_GENERATOR_ADAPTER_SOURCES signal_generator.cc) | ||||||
|  | set(SIGNAL_GENERATOR_ADAPTER_HEADERS signal_generator.h) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
| @@ -30,8 +31,6 @@ include_directories( | |||||||
|      ${GNURADIO_RUNTIME_INCLUDE_DIRS} |      ${GNURADIO_RUNTIME_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB SIGNAL_GENERATOR_ADAPTER_HEADERS "*.h") |  | ||||||
| list(SORT SIGNAL_GENERATOR_ADAPTER_HEADERS) |  | ||||||
| add_library(signal_generator_adapters ${SIGNAL_GENERATOR_ADAPTER_SOURCES} ${SIGNAL_GENERATOR_ADAPTER_HEADERS}) | add_library(signal_generator_adapters ${SIGNAL_GENERATOR_ADAPTER_SOURCES} ${SIGNAL_GENERATOR_ADAPTER_HEADERS}) | ||||||
| source_group(Headers FILES ${SIGNAL_GENERATOR_ADAPTER_HEADERS}) | source_group(Headers FILES ${SIGNAL_GENERATOR_ADAPTER_HEADERS}) | ||||||
| target_link_libraries(signal_generator_adapters gnss_sp_libs  | target_link_libraries(signal_generator_adapters gnss_sp_libs  | ||||||
|   | |||||||
| @@ -17,6 +17,7 @@ | |||||||
| # | # | ||||||
|  |  | ||||||
| set(SIGNAL_GENERATOR_BLOCK_SOURCES signal_generator_c.cc) | set(SIGNAL_GENERATOR_BLOCK_SOURCES signal_generator_c.cc) | ||||||
|  | set(SIGNAL_GENERATOR_BLOCK_HEADERS signal_generator_c.h) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
| @@ -30,8 +31,6 @@ include_directories( | |||||||
|      ${VOLK_GNSSSDR_INCLUDE_DIRS} |      ${VOLK_GNSSSDR_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB SIGNAL_GENERATOR_BLOCK_HEADERS "*.h") |  | ||||||
| list(SORT SIGNAL_GENERATOR_BLOCK_HEADERS) |  | ||||||
| add_library(signal_generator_blocks ${SIGNAL_GENERATOR_BLOCK_SOURCES} ${SIGNAL_GENERATOR_BLOCK_HEADERS}) | add_library(signal_generator_blocks ${SIGNAL_GENERATOR_BLOCK_SOURCES} ${SIGNAL_GENERATOR_BLOCK_HEADERS}) | ||||||
| source_group(Headers FILES ${SIGNAL_GENERATOR_BLOCK_HEADERS}) | source_group(Headers FILES ${SIGNAL_GENERATOR_BLOCK_HEADERS}) | ||||||
| target_link_libraries(signal_generator_blocks gnss_system_parameters gnss_sp_libs | target_link_libraries(signal_generator_blocks gnss_system_parameters gnss_sp_libs | ||||||
| @@ -44,4 +43,4 @@ if(VOLK_GNSSSDR_FOUND) | |||||||
|     # add_dependencies(signal_generator_blocks glog-${glog_RELEASE}) |     # add_dependencies(signal_generator_blocks glog-${glog_RELEASE}) | ||||||
| else(VOLK_GNSSSDR_FOUND) | else(VOLK_GNSSSDR_FOUND) | ||||||
|     add_dependencies(signal_generator_blocks volk_gnsssdr_module) |     add_dependencies(signal_generator_blocks volk_gnsssdr_module) | ||||||
| endif() | endif(VOLK_GNSSSDR_FOUND) | ||||||
|   | |||||||
| @@ -16,8 +16,6 @@ | |||||||
| # along with GNSS-SDR. If not, see <https://www.gnu.org/licenses/>. | # along with GNSS-SDR. If not, see <https://www.gnu.org/licenses/>. | ||||||
| # | # | ||||||
|  |  | ||||||
| file(GLOB SIGNAL_SOURCE_ADAPTER_HEADERS "*.h") |  | ||||||
| list(SORT SIGNAL_SOURCE_ADAPTER_HEADERS) |  | ||||||
|  |  | ||||||
| # Optional drivers | # Optional drivers | ||||||
|  |  | ||||||
| @@ -30,6 +28,7 @@ if(ENABLE_RAW_UDP) | |||||||
|     set(OPT_LIBRARIES ${OPT_LIBRARIES} ${PCAP_LIBRARIES}) |     set(OPT_LIBRARIES ${OPT_LIBRARIES} ${PCAP_LIBRARIES}) | ||||||
|     set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${PCAP_INCLUDE_DIRS}) |     set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${PCAP_INCLUDE_DIRS}) | ||||||
|     set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} custom_udp_signal_source.cc) |     set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} custom_udp_signal_source.cc) | ||||||
|  |     set(OPT_DRIVER_HEADERS ${OPT_DRIVER_HEADERS} custom_udp_signal_source.h) | ||||||
| endif(ENABLE_RAW_UDP) | endif(ENABLE_RAW_UDP) | ||||||
|  |  | ||||||
| if(ENABLE_PLUTOSDR OR ENABLE_FMCOMMS2) | if(ENABLE_PLUTOSDR OR ENABLE_FMCOMMS2) | ||||||
| @@ -67,6 +66,7 @@ if(ENABLE_PLUTOSDR) | |||||||
|     ############################################## |     ############################################## | ||||||
|     if(IIO_FOUND) |     if(IIO_FOUND) | ||||||
|         set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} plutosdr_signal_source.cc) |         set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} plutosdr_signal_source.cc) | ||||||
|  |         set(OPT_DRIVER_HEADERS ${OPT_DRIVER_HEADERS} plutosdr_signal_source.h) | ||||||
|     endif(IIO_FOUND) |     endif(IIO_FOUND) | ||||||
| endif(ENABLE_PLUTOSDR) | endif(ENABLE_PLUTOSDR) | ||||||
|  |  | ||||||
| @@ -77,6 +77,7 @@ if(ENABLE_FMCOMMS2) | |||||||
|     ############################################### |     ############################################### | ||||||
|     if(IIO_FOUND) |     if(IIO_FOUND) | ||||||
|         set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} fmcomms2_signal_source.cc) |         set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} fmcomms2_signal_source.cc) | ||||||
|  |         set(OPT_DRIVER_HEADERS ${OPT_DRIVER_HEADERS} fmcomms2_signal_source.h) | ||||||
|     endif(IIO_FOUND) |     endif(IIO_FOUND) | ||||||
| endif(ENABLE_FMCOMMS2) | endif(ENABLE_FMCOMMS2) | ||||||
|  |  | ||||||
| @@ -86,6 +87,7 @@ if(ENABLE_AD9361) | |||||||
|     ############################################### |     ############################################### | ||||||
|     if(LIBIIO_FOUND) |     if(LIBIIO_FOUND) | ||||||
|         set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} ad9361_fpga_signal_source.cc) |         set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} ad9361_fpga_signal_source.cc) | ||||||
|  |         set(OPT_DRIVER_HEADERS ${OPT_DRIVER_HEADERS} ad9361_fpga_signal_source.h) | ||||||
|     endif(LIBIIO_FOUND) |     endif(LIBIIO_FOUND) | ||||||
| endif(ENABLE_AD9361) | endif(ENABLE_AD9361) | ||||||
|  |  | ||||||
| @@ -103,6 +105,7 @@ if(ENABLE_GN3S) | |||||||
|      set(OPT_LIBRARIES ${OPT_LIBRARIES} ${GR_GN3S_LIBRARIES}) |      set(OPT_LIBRARIES ${OPT_LIBRARIES} ${GR_GN3S_LIBRARIES}) | ||||||
|      set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${GR_GN3S_INCLUDE_DIRS}) |      set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${GR_GN3S_INCLUDE_DIRS}) | ||||||
|      set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} gn3s_signal_source.cc) |      set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} gn3s_signal_source.cc) | ||||||
|  |      set(OPT_DRIVER_HEADERS ${OPT_DRIVER_HEADERS} gn3s_signal_source.h) | ||||||
| endif(ENABLE_GN3S) | endif(ENABLE_GN3S) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -123,6 +126,7 @@ if(ENABLE_FLEXIBAND) | |||||||
|      set(OPT_LIBRARIES ${OPT_LIBRARIES} ${TELEORBIT_LIBRARIES}) |      set(OPT_LIBRARIES ${OPT_LIBRARIES} ${TELEORBIT_LIBRARIES}) | ||||||
|      set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${FLEXIBAND_DRIVER_INCLUDE_DIRS}) |      set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${FLEXIBAND_DRIVER_INCLUDE_DIRS}) | ||||||
|      set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} flexiband_signal_source.cc) |      set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} flexiband_signal_source.cc) | ||||||
|  |      set(OPT_DRIVER_HEADERS ${OPT_DRIVER_HEADERS} flexiband_signal_source.h) | ||||||
| endif(ENABLE_FLEXIBAND) | endif(ENABLE_FLEXIBAND) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -138,6 +142,7 @@ if(ENABLE_ARRAY) | |||||||
|      set(OPT_LIBRARIES ${OPT_LIBRARIES} ${GR_DBFCTTC_LIBRARIES}) |      set(OPT_LIBRARIES ${OPT_LIBRARIES} ${GR_DBFCTTC_LIBRARIES}) | ||||||
|      set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${GR_DBFCTTC_INCLUDE_DIRS}) |      set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${GR_DBFCTTC_INCLUDE_DIRS}) | ||||||
|      set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} raw_array_signal_source.cc) |      set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} raw_array_signal_source.cc) | ||||||
|  |      set(OPT_DRIVER_HEADERS ${OPT_DRIVER_HEADERS} raw_array_signal_source.h) | ||||||
| endif(ENABLE_ARRAY) | endif(ENABLE_ARRAY) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -156,6 +161,7 @@ if(ENABLE_OSMOSDR) | |||||||
|             ${GROSMOSDR_INCLUDE_DIR}/osmosdr |             ${GROSMOSDR_INCLUDE_DIR}/osmosdr | ||||||
|         ) |         ) | ||||||
|         set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} osmosdr_signal_source.cc) |         set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} osmosdr_signal_source.cc) | ||||||
|  |         set(OPT_DRIVER_HEADERS ${OPT_DRIVER_HEADERS} osmosdr_signal_source.h) | ||||||
|         set(OPT_LIBRARIES ${OPT_LIBRARIES} ${GROSMOSDR_LIBRARIES}) |         set(OPT_LIBRARIES ${OPT_LIBRARIES} ${GROSMOSDR_LIBRARIES}) | ||||||
|         set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${OSMO_DRIVER_INCLUDE_DIRS}) |         set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${OSMO_DRIVER_INCLUDE_DIRS}) | ||||||
|     endif(NOT GROSMOSDR_FOUND) |     endif(NOT GROSMOSDR_FOUND) | ||||||
| @@ -163,10 +169,9 @@ endif(ENABLE_OSMOSDR) | |||||||
|  |  | ||||||
| if(ENABLE_UHD AND GNURADIO_UHD_LIBRARIES_gnuradio-uhd) | if(ENABLE_UHD AND GNURADIO_UHD_LIBRARIES_gnuradio-uhd) | ||||||
|     set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} uhd_signal_source.cc) |     set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} uhd_signal_source.cc) | ||||||
|  |     set(OPT_DRIVER_HEADERS ${OPT_DRIVER_HEADERS} uhd_signal_source.h) | ||||||
|     set(OPT_LIBRARIES ${OPT_LIBRARIES} ${UHD_LIBRARIES} ${GNURADIO_UHD_LIBRARIES}) |     set(OPT_LIBRARIES ${OPT_LIBRARIES} ${UHD_LIBRARIES} ${GNURADIO_UHD_LIBRARIES}) | ||||||
|     set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${UHD_INCLUDE_DIRS}) |     set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${UHD_INCLUDE_DIRS}) | ||||||
| else(ENABLE_UHD AND GNURADIO_UHD_LIBRARIES_gnuradio-uhd) |  | ||||||
|     list(REMOVE_ITEM SIGNAL_SOURCE_ADAPTER_HEADERS ${CMAKE_SOURCE_DIR}/src/algorithms/signal_source/adapters/uhd_signal_source.h) |  | ||||||
| endif(ENABLE_UHD AND GNURADIO_UHD_LIBRARIES_gnuradio-uhd) | endif(ENABLE_UHD AND GNURADIO_UHD_LIBRARIES_gnuradio-uhd) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -180,10 +185,24 @@ set(SIGNAL_SOURCE_ADAPTER_SOURCES file_signal_source.cc | |||||||
|                                   ${OPT_DRIVER_SOURCES} |                                   ${OPT_DRIVER_SOURCES} | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(SIGNAL_SOURCE_ADAPTER_HEADERS file_signal_source.h | ||||||
|  |                                   gen_signal_source.h | ||||||
|  |                                   nsr_file_signal_source.h | ||||||
|  |                                   spir_file_signal_source.h | ||||||
|  |                                   spir_gss6450_file_signal_source.h | ||||||
|  |                                   rtl_tcp_signal_source.h | ||||||
|  |                                   labsat_signal_source.h | ||||||
|  |                                   ${OPT_DRIVER_HEADERS} | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| if(PC_GNURADIO_RUNTIME_VERSION VERSION_GREATER 3.7.3) | if(PC_GNURADIO_RUNTIME_VERSION VERSION_GREATER 3.7.3) | ||||||
|      set(SIGNAL_SOURCE_ADAPTER_SOURCES ${SIGNAL_SOURCE_ADAPTER_SOURCES} |      set(SIGNAL_SOURCE_ADAPTER_SOURCES ${SIGNAL_SOURCE_ADAPTER_SOURCES} | ||||||
|          two_bit_cpx_file_signal_source.cc |          two_bit_cpx_file_signal_source.cc | ||||||
|          two_bit_packed_file_signal_source.cc ) |          two_bit_packed_file_signal_source.cc ) | ||||||
|  |      set(SIGNAL_SOURCE_ADAPTER_HEADERS ${SIGNAL_SOURCE_ADAPTER_HEADERS} | ||||||
|  |          two_bit_cpx_file_signal_source.h | ||||||
|  |          two_bit_packed_file_signal_source.h )          | ||||||
| endif(PC_GNURADIO_RUNTIME_VERSION VERSION_GREATER 3.7.3) | endif(PC_GNURADIO_RUNTIME_VERSION VERSION_GREATER 3.7.3) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
| @@ -207,6 +226,9 @@ endif(ARCH_64BITS) | |||||||
|  |  | ||||||
| add_definitions(-DGNSSSDR_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}") | add_definitions(-DGNSSSDR_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}") | ||||||
|  |  | ||||||
|  | list(SORT SIGNAL_SOURCE_ADAPTER_HEADERS) | ||||||
|  | list(SORT SIGNAL_SOURCE_ADAPTER_SOURCES) | ||||||
|  |  | ||||||
| add_library(signal_source_adapters ${SIGNAL_SOURCE_ADAPTER_SOURCES} ${SIGNAL_SOURCE_ADAPTER_HEADERS}) | add_library(signal_source_adapters ${SIGNAL_SOURCE_ADAPTER_SOURCES} ${SIGNAL_SOURCE_ADAPTER_HEADERS}) | ||||||
| source_group(Headers FILES ${SIGNAL_SOURCE_ADAPTER_HEADERS}) | source_group(Headers FILES ${SIGNAL_SOURCE_ADAPTER_HEADERS}) | ||||||
| target_link_libraries(signal_source_adapters signal_source_gr_blocks | target_link_libraries(signal_source_adapters signal_source_gr_blocks | ||||||
|   | |||||||
| @@ -26,8 +26,10 @@ if(ENABLE_RAW_UDP) | |||||||
|     set(OPT_LIBRARIES ${OPT_LIBRARIES} ${PCAP_LIBRARIES}) |     set(OPT_LIBRARIES ${OPT_LIBRARIES} ${PCAP_LIBRARIES}) | ||||||
|     set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${PCAP_INCLUDE_DIRS}) |     set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${PCAP_INCLUDE_DIRS}) | ||||||
|     set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} gr_complex_ip_packet_source.cc) |     set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} gr_complex_ip_packet_source.cc) | ||||||
|  |     set(OPT_DRIVER_HEADERS ${OPT_DRIVER_HEADERS} gr_complex_ip_packet_source.h) | ||||||
| endif(ENABLE_RAW_UDP) | endif(ENABLE_RAW_UDP) | ||||||
|  |  | ||||||
|  |  | ||||||
| set(SIGNAL_SOURCE_GR_BLOCKS_SOURCES | set(SIGNAL_SOURCE_GR_BLOCKS_SOURCES | ||||||
|      unpack_byte_2bit_samples.cc |      unpack_byte_2bit_samples.cc | ||||||
|      unpack_byte_2bit_cpx_samples.cc |      unpack_byte_2bit_cpx_samples.cc | ||||||
| @@ -40,6 +42,19 @@ set(SIGNAL_SOURCE_GR_BLOCKS_SOURCES | |||||||
|      ${OPT_DRIVER_SOURCES} |      ${OPT_DRIVER_SOURCES} | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(SIGNAL_SOURCE_GR_BLOCKS_HEADERS | ||||||
|  |      unpack_byte_2bit_samples.h | ||||||
|  |      unpack_byte_2bit_cpx_samples.h | ||||||
|  |      unpack_byte_4bit_samples.h | ||||||
|  |      unpack_intspir_1bit_samples.h | ||||||
|  |      rtl_tcp_signal_source_c.h | ||||||
|  |      unpack_2bit_samples.h | ||||||
|  |      unpack_spir_gss6450_samples.h | ||||||
|  |      labsat23_source.h | ||||||
|  |      ${OPT_DRIVER_HEADERS} | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/algorithms/signal_source/libs |      ${CMAKE_SOURCE_DIR}/src/algorithms/signal_source/libs | ||||||
| @@ -50,8 +65,9 @@ include_directories( | |||||||
|      ${OPT_DRIVER_INCLUDE_DIRS} |      ${OPT_DRIVER_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB SIGNAL_SOURCE_GR_BLOCKS_HEADERS "*.h") |  | ||||||
| list(SORT SIGNAL_SOURCE_GR_BLOCKS_HEADERS) | list(SORT SIGNAL_SOURCE_GR_BLOCKS_HEADERS) | ||||||
|  | list(SORT SIGNAL_SOURCE_GR_BLOCKS_SOURCES) | ||||||
|  |  | ||||||
| add_library(signal_source_gr_blocks ${SIGNAL_SOURCE_GR_BLOCKS_SOURCES} ${SIGNAL_SOURCE_GR_BLOCKS_HEADERS}) | add_library(signal_source_gr_blocks ${SIGNAL_SOURCE_GR_BLOCKS_SOURCES} ${SIGNAL_SOURCE_GR_BLOCKS_HEADERS}) | ||||||
| source_group(Headers FILES ${SIGNAL_SOURCE_GR_BLOCKS_HEADERS}) | source_group(Headers FILES ${SIGNAL_SOURCE_GR_BLOCKS_HEADERS}) | ||||||
| target_link_libraries(signal_source_gr_blocks  | target_link_libraries(signal_source_gr_blocks  | ||||||
|   | |||||||
| @@ -78,6 +78,8 @@ set(SIGNAL_SOURCE_LIB_HEADERS | |||||||
| ) | ) | ||||||
|  |  | ||||||
| list(SORT SIGNAL_SOURCE_LIB_HEADERS) | list(SORT SIGNAL_SOURCE_LIB_HEADERS) | ||||||
|  | list(SORT SIGNAL_SOURCE_LIB_SOURCES) | ||||||
|  |  | ||||||
| add_library(signal_source_lib ${SIGNAL_SOURCE_LIB_SOURCES} ${SIGNAL_SOURCE_LIB_HEADERS}) | add_library(signal_source_lib ${SIGNAL_SOURCE_LIB_SOURCES} ${SIGNAL_SOURCE_LIB_HEADERS}) | ||||||
| source_group(Headers FILES ${SIGNAL_SOURCE_LIB_HEADERS}) | source_group(Headers FILES ${SIGNAL_SOURCE_LIB_HEADERS}) | ||||||
| target_link_libraries(signal_source_lib ${OPT_LIBRARIES}) | target_link_libraries(signal_source_lib ${OPT_LIBRARIES}) | ||||||
|   | |||||||
| @@ -28,6 +28,17 @@ set(TELEMETRY_DECODER_ADAPTER_SOURCES | |||||||
|     glonass_l2_ca_telemetry_decoder.cc  |     glonass_l2_ca_telemetry_decoder.cc  | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(TELEMETRY_DECODER_ADAPTER_HEADERS | ||||||
|  |     gps_l1_ca_telemetry_decoder.h | ||||||
|  |     gps_l2c_telemetry_decoder.h | ||||||
|  |     gps_l5_telemetry_decoder.h  | ||||||
|  |     galileo_e1b_telemetry_decoder.h | ||||||
|  |     sbas_l1_telemetry_decoder.h | ||||||
|  |     galileo_e5a_telemetry_decoder.h | ||||||
|  |     glonass_l1_ca_telemetry_decoder.h | ||||||
|  |     glonass_l2_ca_telemetry_decoder.h  | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/system_parameters |      ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -42,8 +53,9 @@ include_directories( | |||||||
|      ${GNURADIO_RUNTIME_INCLUDE_DIRS} |      ${GNURADIO_RUNTIME_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB TELEMETRY_DECODER_ADAPTER_HEADERS "*.h") |  | ||||||
| list(SORT TELEMETRY_DECODER_ADAPTER_HEADERS) | list(SORT TELEMETRY_DECODER_ADAPTER_HEADERS) | ||||||
|  | list(SORT TELEMETRY_DECODER_ADAPTER_SOURCES) | ||||||
|  |  | ||||||
| add_library(telemetry_decoder_adapters ${TELEMETRY_DECODER_ADAPTER_SOURCES} ${TELEMETRY_DECODER_ADAPTER_HEADERS}) | add_library(telemetry_decoder_adapters ${TELEMETRY_DECODER_ADAPTER_SOURCES} ${TELEMETRY_DECODER_ADAPTER_HEADERS}) | ||||||
| source_group(Headers FILES ${TELEMETRY_DECODER_ADAPTER_HEADERS}) | source_group(Headers FILES ${TELEMETRY_DECODER_ADAPTER_HEADERS}) | ||||||
| target_link_libraries(telemetry_decoder_adapters telemetry_decoder_gr_blocks gnss_system_parameters ${GNURADIO_RUNTIME_LIBRARIES}) | target_link_libraries(telemetry_decoder_adapters telemetry_decoder_gr_blocks gnss_system_parameters ${GNURADIO_RUNTIME_LIBRARIES}) | ||||||
|   | |||||||
| @@ -26,6 +26,16 @@ set(TELEMETRY_DECODER_GR_BLOCKS_SOURCES | |||||||
|      galileo_telemetry_decoder_cc.cc |      galileo_telemetry_decoder_cc.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(TELEMETRY_DECODER_GR_BLOCKS_HEADERS | ||||||
|  |      gps_l1_ca_telemetry_decoder_cc.h | ||||||
|  |      gps_l2c_telemetry_decoder_cc.h | ||||||
|  |      gps_l5_telemetry_decoder_cc.h | ||||||
|  |      sbas_l1_telemetry_decoder_cc.h | ||||||
|  |      glonass_l1_ca_telemetry_decoder_cc.h | ||||||
|  |      glonass_l2_ca_telemetry_decoder_cc.h | ||||||
|  |      galileo_telemetry_decoder_cc.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/system_parameters |      ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -39,8 +49,9 @@ include_directories( | |||||||
|      ${VOLK_GNSSSDR_INCLUDE_DIRS} |      ${VOLK_GNSSSDR_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB TELEMETRY_DECODER_GR_BLOCKS_HEADERS "*.h") |  | ||||||
| list(SORT TELEMETRY_DECODER_GR_BLOCKS_HEADERS) | list(SORT TELEMETRY_DECODER_GR_BLOCKS_HEADERS) | ||||||
|  | list(SORT TELEMETRY_DECODER_GR_BLOCKS_SOURCES) | ||||||
|  |  | ||||||
| add_library(telemetry_decoder_gr_blocks ${TELEMETRY_DECODER_GR_BLOCKS_SOURCES} ${TELEMETRY_DECODER_GR_BLOCKS_HEADERS}) | add_library(telemetry_decoder_gr_blocks ${TELEMETRY_DECODER_GR_BLOCKS_SOURCES} ${TELEMETRY_DECODER_GR_BLOCKS_HEADERS}) | ||||||
| source_group(Headers FILES ${TELEMETRY_DECODER_GR_BLOCKS_HEADERS}) | source_group(Headers FILES ${TELEMETRY_DECODER_GR_BLOCKS_HEADERS}) | ||||||
| target_link_libraries(telemetry_decoder_gr_blocks telemetry_decoder_libswiftcnav telemetry_decoder_lib gnss_system_parameters ${GNURADIO_RUNTIME_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES}) | target_link_libraries(telemetry_decoder_gr_blocks telemetry_decoder_libswiftcnav telemetry_decoder_lib gnss_system_parameters ${GNURADIO_RUNTIME_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES}) | ||||||
|   | |||||||
| @@ -22,6 +22,11 @@ set(TELEMETRY_DECODER_LIB_SOURCES | |||||||
|      viterbi_decoder.cc |      viterbi_decoder.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(TELEMETRY_DECODER_LIB_HEADERS | ||||||
|  |      viterbi_decoder.h | ||||||
|  |      convolutional.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|      ${CMAKE_SOURCE_DIR}/src/core/system_parameters |      ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -33,9 +38,9 @@ include_directories( | |||||||
|      ${GFlags_INCLUDE_DIRS} |      ${GFlags_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB TELEMETRY_DECODER_LIB_HEADERS "*.h") |  | ||||||
|  |  | ||||||
| list(SORT TELEMETRY_DECODER_LIB_HEADERS) | list(SORT TELEMETRY_DECODER_LIB_HEADERS) | ||||||
|  | list(SORT TELEMETRY_DECODER_LIB_SOURCES) | ||||||
|  |  | ||||||
| add_library(telemetry_decoder_lib ${TELEMETRY_DECODER_LIB_SOURCES} ${TELEMETRY_DECODER_LIB_HEADERS}) | add_library(telemetry_decoder_lib ${TELEMETRY_DECODER_LIB_SOURCES} ${TELEMETRY_DECODER_LIB_HEADERS}) | ||||||
| source_group(Headers FILES ${TELEMETRY_DECODER_LIB_HEADERS}) | source_group(Headers FILES ${TELEMETRY_DECODER_LIB_HEADERS}) | ||||||
| target_link_libraries(telemetry_decoder_lib gnss_system_parameters) | target_link_libraries(telemetry_decoder_lib gnss_system_parameters) | ||||||
|   | |||||||
| @@ -23,12 +23,20 @@ set(TELEMETRY_DECODER_LIBSWIFTCNAV_SOURCES | |||||||
|      viterbi27.c    |      viterbi27.c    | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(TELEMETRY_DECODER_LIBSWIFTCNAV_HEADERS  | ||||||
|  |      cnav_msg.h | ||||||
|  |      bits.h | ||||||
|  |      edc.h | ||||||
|  |      swift_common.h   | ||||||
|  |      fec.h  | ||||||
|  | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB TELEMETRY_DECODER_LIBSWIFTCNAV_HEADERS "*.h") |  | ||||||
| list(SORT TELEMETRY_DECODER_LIBSWIFTCNAV_HEADERS) | list(SORT TELEMETRY_DECODER_LIBSWIFTCNAV_HEADERS) | ||||||
|  | list(SORT TELEMETRY_DECODER_LIBSWIFTCNAV_SOURCES) | ||||||
|  |  | ||||||
| add_library(telemetry_decoder_libswiftcnav STATIC ${TELEMETRY_DECODER_LIBSWIFTCNAV_SOURCES} ${TELEMETRY_DECODER_LIBSWIFTCNAV_HEADERS}) | add_library(telemetry_decoder_libswiftcnav STATIC ${TELEMETRY_DECODER_LIBSWIFTCNAV_SOURCES} ${TELEMETRY_DECODER_LIBSWIFTCNAV_HEADERS}) | ||||||
| source_group(Headers FILES ${TELEMETRY_DECODER_LIBSWIFTCNAV_HEADERS}) | source_group(Headers FILES ${TELEMETRY_DECODER_LIBSWIFTCNAV_HEADERS}) | ||||||
|   | |||||||
| @@ -17,12 +17,25 @@ | |||||||
| # | # | ||||||
|  |  | ||||||
| if(ENABLE_CUDA) | if(ENABLE_CUDA) | ||||||
|      set(OPT_TRACKING_ADAPTERS ${OPT_TRACKING_ADAPTERS} gps_l1_ca_dll_pll_tracking_gpu.cc) |      set(OPT_TRACKING_ADAPTERS_SOURCES ${OPT_TRACKING_ADAPTERS_SOURCES} gps_l1_ca_dll_pll_tracking_gpu.cc) | ||||||
|  |      set(OPT_TRACKING_ADAPTERS_HEADERS ${OPT_TRACKING_ADAPTERS_HEADERS} gps_l1_ca_dll_pll_tracking_gpu.h) | ||||||
|      set(OPT_TRACKING_INCLUDE_DIRS ${OPT_TRACKING_INCLUDE_DIRS} ${CUDA_INCLUDE_DIRS}) |      set(OPT_TRACKING_INCLUDE_DIRS ${OPT_TRACKING_INCLUDE_DIRS} ${CUDA_INCLUDE_DIRS}) | ||||||
| endif(ENABLE_CUDA) | endif(ENABLE_CUDA) | ||||||
|  |  | ||||||
| if(ENABLE_FPGA) | if(ENABLE_FPGA) | ||||||
|      SET(OPT_TRACKING_ADAPTERS ${OPT_TRACKING_ADAPTERS} gps_l1_ca_dll_pll_tracking_fpga.cc gps_l2_m_dll_pll_tracking_fpga.cc galileo_e1_dll_pll_veml_tracking_fpga.cc galileo_e5a_dll_pll_tracking_fpga.cc gps_l5_dll_pll_tracking_fpga.cc) |      set(OPT_TRACKING_ADAPTERS_SOURCES ${OPT_TRACKING_ADAPTERS_SOURCES}  | ||||||
|  |                                        gps_l1_ca_dll_pll_tracking_fpga.cc | ||||||
|  |                                        gps_l2_m_dll_pll_tracking_fpga.cc | ||||||
|  |                                        galileo_e1_dll_pll_veml_tracking_fpga.cc | ||||||
|  |                                        galileo_e5a_dll_pll_tracking_fpga.cc | ||||||
|  |                                        gps_l5_dll_pll_tracking_fpga.cc) | ||||||
|  |  | ||||||
|  |      set(OPT_TRACKING_ADAPTERS_HEADERS ${OPT_TRACKING_ADAPTERS_HEADERS}  | ||||||
|  |                                        gps_l1_ca_dll_pll_tracking_fpga.h | ||||||
|  |                                        gps_l2_m_dll_pll_tracking_fpga.h | ||||||
|  |                                        galileo_e1_dll_pll_veml_tracking_fpga.h | ||||||
|  |                                        galileo_e5a_dll_pll_tracking_fpga.h | ||||||
|  |                                        gps_l5_dll_pll_tracking_fpga.h)                        | ||||||
| endif(ENABLE_FPGA) | endif(ENABLE_FPGA) | ||||||
|  |  | ||||||
| set(TRACKING_ADAPTER_SOURCES | set(TRACKING_ADAPTER_SOURCES | ||||||
| @@ -39,7 +52,24 @@ set(TRACKING_ADAPTER_SOURCES | |||||||
|      gps_l5_dll_pll_tracking.cc |      gps_l5_dll_pll_tracking.cc | ||||||
|      glonass_l2_ca_dll_pll_tracking.cc |      glonass_l2_ca_dll_pll_tracking.cc | ||||||
|      glonass_l2_ca_dll_pll_c_aid_tracking.cc |      glonass_l2_ca_dll_pll_c_aid_tracking.cc | ||||||
|      ${OPT_TRACKING_ADAPTERS} |      ${OPT_TRACKING_ADAPTERS_SOURCES} | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | set(TRACKING_ADAPTER_HEADERS | ||||||
|  |      galileo_e1_dll_pll_veml_tracking.h | ||||||
|  |      galileo_e1_tcp_connector_tracking.h | ||||||
|  |      gps_l1_ca_dll_pll_tracking.h | ||||||
|  |      gps_l1_ca_dll_pll_c_aid_tracking.h | ||||||
|  |      gps_l1_ca_tcp_connector_tracking.h | ||||||
|  |      galileo_e5a_dll_pll_tracking.h | ||||||
|  |      gps_l2_m_dll_pll_tracking.h | ||||||
|  |      glonass_l1_ca_dll_pll_tracking.h | ||||||
|  |      glonass_l1_ca_dll_pll_c_aid_tracking.h | ||||||
|  |      gps_l1_ca_kf_tracking.h | ||||||
|  |      gps_l5_dll_pll_tracking.h | ||||||
|  |      glonass_l2_ca_dll_pll_tracking.h | ||||||
|  |      glonass_l2_ca_dll_pll_c_aid_tracking.h | ||||||
|  |      ${OPT_TRACKING_ADAPTERS_HEADERS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
| @@ -58,8 +88,9 @@ include_directories( | |||||||
|      ${OPT_TRACKING_INCLUDE_DIRS} |      ${OPT_TRACKING_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB TRACKING_ADAPTER_HEADERS "*.h") |  | ||||||
| list(SORT TRACKING_ADAPTER_HEADERS) | list(SORT TRACKING_ADAPTER_HEADERS) | ||||||
|  | list(SORT TRACKING_ADAPTER_SOURCES) | ||||||
|  |  | ||||||
| add_library(tracking_adapters ${TRACKING_ADAPTER_SOURCES} ${TRACKING_ADAPTER_HEADERS}) | add_library(tracking_adapters ${TRACKING_ADAPTER_SOURCES} ${TRACKING_ADAPTER_HEADERS}) | ||||||
| source_group(Headers FILES ${TRACKING_ADAPTER_HEADERS}) | source_group(Headers FILES ${TRACKING_ADAPTER_HEADERS}) | ||||||
| target_link_libraries(tracking_adapters tracking_gr_blocks gnss_sp_libs gnss_sdr_flags) | target_link_libraries(tracking_adapters tracking_gr_blocks gnss_sp_libs gnss_sdr_flags) | ||||||
|   | |||||||
| @@ -17,13 +17,15 @@ | |||||||
| # | # | ||||||
|  |  | ||||||
| if(ENABLE_CUDA) | if(ENABLE_CUDA) | ||||||
|      set(OPT_TRACKING_BLOCKS ${OPT_TRACKING_BLOCKS} gps_l1_ca_dll_pll_tracking_gpu_cc.cc) |      set(OPT_TRACKING_BLOCKS_SOURCES ${OPT_TRACKING_BLOCKS_SOURCES} gps_l1_ca_dll_pll_tracking_gpu_cc.cc) | ||||||
|  |      set(OPT_TRACKING_BLOCKS_HEADERS ${OPT_TRACKING_BLOCKS_HEADERS} gps_l1_ca_dll_pll_tracking_gpu_cc.h) | ||||||
|      set(OPT_TRACKING_INCLUDES ${OPT_TRACKING_INCLUDES} ${CUDA_INCLUDE_DIRS}) |      set(OPT_TRACKING_INCLUDES ${OPT_TRACKING_INCLUDES} ${CUDA_INCLUDE_DIRS}) | ||||||
|      set(OPT_TRACKING_LIBRARIES ${OPT_TRACKING_LIBRARIES} ${CUDA_LIBRARIES}) |      set(OPT_TRACKING_LIBRARIES ${OPT_TRACKING_LIBRARIES} ${CUDA_LIBRARIES}) | ||||||
| endif(ENABLE_CUDA) | endif(ENABLE_CUDA) | ||||||
|  |  | ||||||
| if(ENABLE_FPGA) | if(ENABLE_FPGA) | ||||||
|      set(OPT_TRACKING_BLOCKS ${OPT_TRACKING_BLOCKS} dll_pll_veml_tracking_fpga.cc) |      set(OPT_TRACKING_BLOCKS_SOURCES ${OPT_TRACKING_BLOCKS_SOURCES} dll_pll_veml_tracking_fpga.cc) | ||||||
|  |      set(OPT_TRACKING_BLOCKS_HEADERS ${OPT_TRACKING_BLOCKS_HEADERS} dll_pll_veml_tracking_fpga.h) | ||||||
| endif(ENABLE_FPGA) | endif(ENABLE_FPGA) | ||||||
|  |  | ||||||
| set(TRACKING_GR_BLOCKS_SOURCES | set(TRACKING_GR_BLOCKS_SOURCES | ||||||
| @@ -39,7 +41,23 @@ set(TRACKING_GR_BLOCKS_SOURCES | |||||||
|      glonass_l2_ca_dll_pll_c_aid_tracking_cc.cc |      glonass_l2_ca_dll_pll_c_aid_tracking_cc.cc | ||||||
|      glonass_l2_ca_dll_pll_c_aid_tracking_sc.cc |      glonass_l2_ca_dll_pll_c_aid_tracking_sc.cc | ||||||
|      dll_pll_veml_tracking.cc |      dll_pll_veml_tracking.cc | ||||||
|      ${OPT_TRACKING_BLOCKS} |      ${OPT_TRACKING_BLOCKS_SOURCES} | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | set(TRACKING_GR_BLOCKS_HEADERS | ||||||
|  |      galileo_e1_tcp_connector_tracking_cc.h | ||||||
|  |      gps_l1_ca_tcp_connector_tracking_cc.h | ||||||
|  |      gps_l1_ca_dll_pll_c_aid_tracking_cc.h | ||||||
|  |      gps_l1_ca_dll_pll_c_aid_tracking_sc.h | ||||||
|  |      glonass_l1_ca_dll_pll_tracking_cc.h | ||||||
|  |      glonass_l1_ca_dll_pll_c_aid_tracking_cc.h | ||||||
|  |      glonass_l1_ca_dll_pll_c_aid_tracking_sc.h | ||||||
|  |      gps_l1_ca_kf_tracking_cc.h   | ||||||
|  |      glonass_l2_ca_dll_pll_tracking_cc.h | ||||||
|  |      glonass_l2_ca_dll_pll_c_aid_tracking_cc.h | ||||||
|  |      glonass_l2_ca_dll_pll_c_aid_tracking_sc.h | ||||||
|  |      dll_pll_veml_tracking.h | ||||||
|  |      ${OPT_TRACKING_BLOCKS_HEADERS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
| @@ -63,8 +81,9 @@ if(ENABLE_GENERIC_ARCH) | |||||||
|     add_definitions( -DGENERIC_ARCH=1 ) |     add_definitions( -DGENERIC_ARCH=1 ) | ||||||
| endif(ENABLE_GENERIC_ARCH) | endif(ENABLE_GENERIC_ARCH) | ||||||
|  |  | ||||||
| file(GLOB TRACKING_GR_BLOCKS_HEADERS "*.h") |  | ||||||
| list(SORT TRACKING_GR_BLOCKS_HEADERS) | list(SORT TRACKING_GR_BLOCKS_HEADERS) | ||||||
|  | list(SORT TRACKING_GR_BLOCKS_SOURCES) | ||||||
|  |  | ||||||
| add_library(tracking_gr_blocks ${TRACKING_GR_BLOCKS_SOURCES} ${TRACKING_GR_BLOCKS_HEADERS}) | add_library(tracking_gr_blocks ${TRACKING_GR_BLOCKS_SOURCES} ${TRACKING_GR_BLOCKS_HEADERS}) | ||||||
| source_group(Headers FILES ${TRACKING_GR_BLOCKS_HEADERS}) | source_group(Headers FILES ${TRACKING_GR_BLOCKS_HEADERS}) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -30,7 +30,6 @@ if(ENABLE_CUDA) | |||||||
| endif(ENABLE_CUDA) | endif(ENABLE_CUDA) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| set(TRACKING_LIB_SOURCES | set(TRACKING_LIB_SOURCES | ||||||
|      cpu_multicorrelator.cc |      cpu_multicorrelator.cc | ||||||
|      cpu_multicorrelator_real_codes.cc |      cpu_multicorrelator_real_codes.cc | ||||||
| @@ -47,8 +46,25 @@ set(TRACKING_LIB_SOURCES | |||||||
|      bayesian_estimation.cc |      bayesian_estimation.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(TRACKING_LIB_HEADERS | ||||||
|  |      cpu_multicorrelator.h | ||||||
|  |      cpu_multicorrelator_real_codes.h | ||||||
|  |      cpu_multicorrelator_16sc.h | ||||||
|  |      lock_detectors.h | ||||||
|  |      tcp_communication.h | ||||||
|  |      tcp_packet_data.h | ||||||
|  |      tracking_2nd_DLL_filter.h | ||||||
|  |      tracking_2nd_PLL_filter.h | ||||||
|  |      tracking_discriminators.h | ||||||
|  |      tracking_FLL_PLL_filter.h | ||||||
|  |      tracking_loop_filter.h | ||||||
|  |      dll_pll_conf.h | ||||||
|  |      bayesian_estimation.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| if(ENABLE_FPGA) | if(ENABLE_FPGA) | ||||||
|     SET(TRACKING_LIB_SOURCES ${TRACKING_LIB_SOURCES} fpga_multicorrelator.cc dll_pll_conf_fpga.cc) |     set(TRACKING_LIB_SOURCES ${TRACKING_LIB_SOURCES} fpga_multicorrelator.cc dll_pll_conf_fpga.cc) | ||||||
|  |     set(TRACKING_LIB_HEADERS ${TRACKING_LIB_HEADERS} fpga_multicorrelator.h dll_pll_conf_fpga.h) | ||||||
| endif(ENABLE_FPGA) | endif(ENABLE_FPGA) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
| @@ -74,8 +90,9 @@ if (SSE3_AVAILABLE) | |||||||
| endif(SSE3_AVAILABLE) | endif(SSE3_AVAILABLE) | ||||||
|  |  | ||||||
|  |  | ||||||
| file(GLOB TRACKING_LIB_HEADERS "*.h") |  | ||||||
| list(SORT TRACKING_LIB_HEADERS) | list(SORT TRACKING_LIB_HEADERS) | ||||||
|  | list(SORT TRACKING_LIB_SOURCES) | ||||||
|  |  | ||||||
| add_library(tracking_lib ${TRACKING_LIB_SOURCES} ${TRACKING_LIB_HEADERS}) | add_library(tracking_lib ${TRACKING_LIB_SOURCES} ${TRACKING_LIB_HEADERS}) | ||||||
| source_group(Headers FILES ${TRACKING_LIB_HEADERS}) | source_group(Headers FILES ${TRACKING_LIB_HEADERS}) | ||||||
| target_link_libraries(tracking_lib ${OPT_TRACKING_LIBRARIES} ${VOLK_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES} ${Boost_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES}) | target_link_libraries(tracking_lib ${OPT_TRACKING_LIBRARIES} ${VOLK_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES} ${Boost_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES}) | ||||||
|   | |||||||
| @@ -29,6 +29,13 @@ set(CORE_LIBS_SOURCES | |||||||
|     gnss_sdr_supl_client.cc |     gnss_sdr_supl_client.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(CORE_LIBS_HEADERS  | ||||||
|  |     ini.h | ||||||
|  |     INIReader.h | ||||||
|  |     string_converter.h | ||||||
|  |     gnss_sdr_supl_client.h | ||||||
|  | ) | ||||||
|  | 	 | ||||||
| include_directories( | include_directories( | ||||||
|     ${CMAKE_CURRENT_SOURCE_DIR} |     ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|     ${CMAKE_SOURCE_DIR}/src/core/system_parameters |     ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -40,8 +47,9 @@ include_directories( | |||||||
|     ${Boost_INCLUDE_DIRS} |     ${Boost_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB CORE_LIBS_HEADERS "*.h") |  | ||||||
| list(SORT CORE_LIBS_HEADERS) | list(SORT CORE_LIBS_HEADERS) | ||||||
|  | list(SORT CORE_LIBS_SOURCES) | ||||||
|  |  | ||||||
| add_library(rx_core_lib ${CORE_LIBS_SOURCES} ${CORE_LIBS_HEADERS}) | add_library(rx_core_lib ${CORE_LIBS_SOURCES} ${CORE_LIBS_HEADERS}) | ||||||
| source_group(Headers FILES ${CORE_LIBS_HEADERS}) | source_group(Headers FILES ${CORE_LIBS_HEADERS}) | ||||||
| target_link_libraries(rx_core_lib supl_library)  | target_link_libraries(rx_core_lib supl_library)  | ||||||
|   | |||||||
| @@ -370,13 +370,13 @@ void gnss_sdr_supl_client::read_supl_data() | |||||||
|  |  | ||||||
| bool gnss_sdr_supl_client::load_ephemeris_xml(const std::string file_name) | bool gnss_sdr_supl_client::load_ephemeris_xml(const std::string file_name) | ||||||
| { | { | ||||||
|  |     std::ifstream ifs; | ||||||
|     try |     try | ||||||
|         { |         { | ||||||
|             std::ifstream ifs(file_name.c_str(), std::ifstream::binary | std::ifstream::in); |             ifs.open(file_name.c_str(), std::ifstream::binary | std::ifstream::in); | ||||||
|             boost::archive::xml_iarchive xml(ifs); |             boost::archive::xml_iarchive xml(ifs); | ||||||
|             gps_ephemeris_map.clear(); |             gps_ephemeris_map.clear(); | ||||||
|             xml >> boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", this->gps_ephemeris_map); |             xml >> boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", this->gps_ephemeris_map); | ||||||
|             ifs.close(); |  | ||||||
|             LOG(INFO) << "Loaded Ephemeris map data with " << this->gps_ephemeris_map.size() << " satellites"; |             LOG(INFO) << "Loaded Ephemeris map data with " << this->gps_ephemeris_map.size() << " satellites"; | ||||||
|         } |         } | ||||||
|     catch (std::exception& e) |     catch (std::exception& e) | ||||||
| @@ -392,12 +392,12 @@ bool gnss_sdr_supl_client::save_ephemeris_map_xml(const std::string file_name, s | |||||||
| { | { | ||||||
|     if (eph_map.empty() == false) |     if (eph_map.empty() == false) | ||||||
|         { |         { | ||||||
|  |             std::ofstream ofs; | ||||||
|             try |             try | ||||||
|                 { |                 { | ||||||
|                     std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); |                     ofs.open(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); | ||||||
|                     boost::archive::xml_oarchive xml(ofs); |                     boost::archive::xml_oarchive xml(ofs); | ||||||
|                     xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", eph_map); |                     xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", eph_map); | ||||||
|                     ofs.close(); |  | ||||||
|                     LOG(INFO) << "Saved Ephemeris map data"; |                     LOG(INFO) << "Saved Ephemeris map data"; | ||||||
|                 } |                 } | ||||||
|             catch (std::exception& e) |             catch (std::exception& e) | ||||||
| @@ -405,24 +405,24 @@ bool gnss_sdr_supl_client::save_ephemeris_map_xml(const std::string file_name, s | |||||||
|                     LOG(WARNING) << e.what(); |                     LOG(WARNING) << e.what(); | ||||||
|                     return false; |                     return false; | ||||||
|                 } |                 } | ||||||
|             return true; |  | ||||||
|         } |         } | ||||||
|     else |     else | ||||||
|         { |         { | ||||||
|             LOG(WARNING) << "Failed to save Ephemeris, map is empty"; |             LOG(WARNING) << "Failed to save Ephemeris, map is empty"; | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|  |     return true; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| bool gnss_sdr_supl_client::load_utc_xml(const std::string file_name) | bool gnss_sdr_supl_client::load_utc_xml(const std::string file_name) | ||||||
| { | { | ||||||
|  |     std::ifstream ifs; | ||||||
|     try |     try | ||||||
|         { |         { | ||||||
|             std::ifstream ifs(file_name.c_str(), std::ifstream::binary | std::ifstream::in); |             ifs.open(file_name.c_str(), std::ifstream::binary | std::ifstream::in); | ||||||
|             boost::archive::xml_iarchive xml(ifs); |             boost::archive::xml_iarchive xml(ifs); | ||||||
|             xml >> boost::serialization::make_nvp("GNSS-SDR_utc_map", this->gps_utc); |             xml >> boost::serialization::make_nvp("GNSS-SDR_utc_map", this->gps_utc); | ||||||
|             ifs.close(); |  | ||||||
|             LOG(INFO) << "Loaded UTC model data"; |             LOG(INFO) << "Loaded UTC model data"; | ||||||
|         } |         } | ||||||
|     catch (std::exception& e) |     catch (std::exception& e) | ||||||
| @@ -438,12 +438,12 @@ bool gnss_sdr_supl_client::save_utc_map_xml(const std::string file_name, std::ma | |||||||
| { | { | ||||||
|     if (utc_map.empty() == false) |     if (utc_map.empty() == false) | ||||||
|         { |         { | ||||||
|  |             std::ofstream ofs; | ||||||
|             try |             try | ||||||
|                 { |                 { | ||||||
|                     std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); |                     ofs.open(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); | ||||||
|                     boost::archive::xml_oarchive xml(ofs); |                     boost::archive::xml_oarchive xml(ofs); | ||||||
|                     xml << boost::serialization::make_nvp("GNSS-SDR_utc_map", utc_map); |                     xml << boost::serialization::make_nvp("GNSS-SDR_utc_map", utc_map); | ||||||
|                     ofs.close(); |  | ||||||
|                     LOG(INFO) << "Saved UTC Model data"; |                     LOG(INFO) << "Saved UTC Model data"; | ||||||
|                 } |                 } | ||||||
|             catch (std::exception& e) |             catch (std::exception& e) | ||||||
| @@ -451,24 +451,24 @@ bool gnss_sdr_supl_client::save_utc_map_xml(const std::string file_name, std::ma | |||||||
|                     LOG(WARNING) << e.what(); |                     LOG(WARNING) << e.what(); | ||||||
|                     return false; |                     return false; | ||||||
|                 } |                 } | ||||||
|             return true; |  | ||||||
|         } |         } | ||||||
|     else |     else | ||||||
|         { |         { | ||||||
|             LOG(WARNING) << "Failed to save UTC model, map is empty"; |             LOG(WARNING) << "Failed to save UTC model, map is empty"; | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|  |     return true; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| bool gnss_sdr_supl_client::load_iono_xml(const std::string file_name) | bool gnss_sdr_supl_client::load_iono_xml(const std::string file_name) | ||||||
| { | { | ||||||
|  |     std::ifstream ifs; | ||||||
|     try |     try | ||||||
|         { |         { | ||||||
|             std::ifstream ifs(file_name.c_str(), std::ifstream::binary | std::ifstream::in); |             ifs.open(file_name.c_str(), std::ifstream::binary | std::ifstream::in); | ||||||
|             boost::archive::xml_iarchive xml(ifs); |             boost::archive::xml_iarchive xml(ifs); | ||||||
|             xml >> boost::serialization::make_nvp("GNSS-SDR_iono_map", this->gps_iono); |             xml >> boost::serialization::make_nvp("GNSS-SDR_iono_map", this->gps_iono); | ||||||
|             ifs.close(); |  | ||||||
|             LOG(INFO) << "Loaded IONO model data"; |             LOG(INFO) << "Loaded IONO model data"; | ||||||
|         } |         } | ||||||
|     catch (std::exception& e) |     catch (std::exception& e) | ||||||
| @@ -484,12 +484,12 @@ bool gnss_sdr_supl_client::save_iono_map_xml(const std::string file_name, std::m | |||||||
| { | { | ||||||
|     if (iono_map.empty() == false) |     if (iono_map.empty() == false) | ||||||
|         { |         { | ||||||
|  |             std::ofstream ofs; | ||||||
|             try |             try | ||||||
|                 { |                 { | ||||||
|                     std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); |                     ofs.open(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); | ||||||
|                     boost::archive::xml_oarchive xml(ofs); |                     boost::archive::xml_oarchive xml(ofs); | ||||||
|                     xml << boost::serialization::make_nvp("GNSS-SDR_iono_map", iono_map); |                     xml << boost::serialization::make_nvp("GNSS-SDR_iono_map", iono_map); | ||||||
|                     ofs.close(); |  | ||||||
|                     LOG(INFO) << "Saved IONO Model data"; |                     LOG(INFO) << "Saved IONO Model data"; | ||||||
|                 } |                 } | ||||||
|             catch (std::exception& e) |             catch (std::exception& e) | ||||||
| @@ -497,24 +497,24 @@ bool gnss_sdr_supl_client::save_iono_map_xml(const std::string file_name, std::m | |||||||
|                     LOG(WARNING) << e.what(); |                     LOG(WARNING) << e.what(); | ||||||
|                     return false; |                     return false; | ||||||
|                 } |                 } | ||||||
|             return true; |  | ||||||
|         } |         } | ||||||
|     else |     else | ||||||
|         { |         { | ||||||
|             LOG(WARNING) << "Failed to save IONO model, map is empty"; |             LOG(WARNING) << "Failed to save IONO model, map is empty"; | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|  |     return true; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| bool gnss_sdr_supl_client::load_ref_time_xml(const std::string file_name) | bool gnss_sdr_supl_client::load_ref_time_xml(const std::string file_name) | ||||||
| { | { | ||||||
|  |     std::ifstream ifs; | ||||||
|     try |     try | ||||||
|         { |         { | ||||||
|             std::ifstream ifs(file_name.c_str(), std::ifstream::binary | std::ifstream::in); |             ifs.open(file_name.c_str(), std::ifstream::binary | std::ifstream::in); | ||||||
|             boost::archive::xml_iarchive xml(ifs); |             boost::archive::xml_iarchive xml(ifs); | ||||||
|             xml >> boost::serialization::make_nvp("GNSS-SDR_ref_time_map", this->gps_time); |             xml >> boost::serialization::make_nvp("GNSS-SDR_ref_time_map", this->gps_time); | ||||||
|             ifs.close(); |  | ||||||
|             LOG(INFO) << "Loaded Ref Time data"; |             LOG(INFO) << "Loaded Ref Time data"; | ||||||
|         } |         } | ||||||
|     catch (std::exception& e) |     catch (std::exception& e) | ||||||
| @@ -530,12 +530,13 @@ bool gnss_sdr_supl_client::save_ref_time_map_xml(const std::string file_name, st | |||||||
| { | { | ||||||
|     if (ref_time_map.empty() == false) |     if (ref_time_map.empty() == false) | ||||||
|         { |         { | ||||||
|  |             std::ofstream ofs; | ||||||
|             try |             try | ||||||
|                 { |                 { | ||||||
|                     std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); |                     ofs.open(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); | ||||||
|                     boost::archive::xml_oarchive xml(ofs); |                     boost::archive::xml_oarchive xml(ofs); | ||||||
|                     xml << boost::serialization::make_nvp("GNSS-SDR_ref_time_map", ref_time_map); |                     xml << boost::serialization::make_nvp("GNSS-SDR_ref_time_map", ref_time_map); | ||||||
|                     ofs.close(); |  | ||||||
|                     LOG(INFO) << "Saved Ref Time data"; |                     LOG(INFO) << "Saved Ref Time data"; | ||||||
|                 } |                 } | ||||||
|             catch (std::exception& e) |             catch (std::exception& e) | ||||||
| @@ -543,24 +544,24 @@ bool gnss_sdr_supl_client::save_ref_time_map_xml(const std::string file_name, st | |||||||
|                     LOG(WARNING) << e.what(); |                     LOG(WARNING) << e.what(); | ||||||
|                     return false; |                     return false; | ||||||
|                 } |                 } | ||||||
|             return true; |  | ||||||
|         } |         } | ||||||
|     else |     else | ||||||
|         { |         { | ||||||
|             LOG(WARNING) << "Failed to save Ref Time, map is empty"; |             LOG(WARNING) << "Failed to save Ref Time, map is empty"; | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|  |     return true; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| bool gnss_sdr_supl_client::load_ref_location_xml(const std::string file_name) | bool gnss_sdr_supl_client::load_ref_location_xml(const std::string file_name) | ||||||
| { | { | ||||||
|  |     std::ifstream ifs; | ||||||
|     try |     try | ||||||
|         { |         { | ||||||
|             std::ifstream ifs(file_name.c_str(), std::ifstream::binary | std::ifstream::in); |             ifs.open(file_name.c_str(), std::ifstream::binary | std::ifstream::in); | ||||||
|             boost::archive::xml_iarchive xml(ifs); |             boost::archive::xml_iarchive xml(ifs); | ||||||
|             xml >> boost::serialization::make_nvp("GNSS-SDR_ref_location_map", this->gps_ref_loc); |             xml >> boost::serialization::make_nvp("GNSS-SDR_ref_location_map", this->gps_ref_loc); | ||||||
|             ifs.close(); |  | ||||||
|             LOG(INFO) << "Loaded Ref Location data"; |             LOG(INFO) << "Loaded Ref Location data"; | ||||||
|         } |         } | ||||||
|     catch (std::exception& e) |     catch (std::exception& e) | ||||||
| @@ -576,12 +577,12 @@ bool gnss_sdr_supl_client::save_ref_location_map_xml(const std::string file_name | |||||||
| { | { | ||||||
|     if (ref_location_map.empty() == false) |     if (ref_location_map.empty() == false) | ||||||
|         { |         { | ||||||
|  |             std::ofstream ofs; | ||||||
|             try |             try | ||||||
|                 { |                 { | ||||||
|                     std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); |                     ofs.open(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); | ||||||
|                     boost::archive::xml_oarchive xml(ofs); |                     boost::archive::xml_oarchive xml(ofs); | ||||||
|                     xml << boost::serialization::make_nvp("GNSS-SDR_ref_location_map", ref_location_map); |                     xml << boost::serialization::make_nvp("GNSS-SDR_ref_location_map", ref_location_map); | ||||||
|                     ofs.close(); |  | ||||||
|                     LOG(INFO) << "Saved Ref Location data"; |                     LOG(INFO) << "Saved Ref Location data"; | ||||||
|                 } |                 } | ||||||
|             catch (std::exception& e) |             catch (std::exception& e) | ||||||
| @@ -589,11 +590,11 @@ bool gnss_sdr_supl_client::save_ref_location_map_xml(const std::string file_name | |||||||
|                     LOG(WARNING) << e.what(); |                     LOG(WARNING) << e.what(); | ||||||
|                     return false; |                     return false; | ||||||
|                 } |                 } | ||||||
|             return true; |  | ||||||
|         } |         } | ||||||
|     else |     else | ||||||
|         { |         { | ||||||
|             LOG(WARNING) << "Failed to save Ref Location, map is empty"; |             LOG(WARNING) << "Failed to save Ref Location, map is empty"; | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|  |     return true; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -22,6 +22,12 @@ set(CORE_MONITOR_LIBS_SOURCES | |||||||
| 	gnss_synchro_udp_sink.cc | 	gnss_synchro_udp_sink.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(CORE_MONITOR_LIBS_HEADERS  | ||||||
|  | 	gnss_synchro_monitor.h | ||||||
|  | 	gnss_synchro_udp_sink.h | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|     ${CMAKE_CURRENT_SOURCE_DIR} |     ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|     ${CMAKE_SOURCE_DIR}/src/core/system_parameters |     ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -31,8 +37,9 @@ include_directories( | |||||||
|     ${Boost_INCLUDE_DIRS} |     ${Boost_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB CORE_MONITOR_LIBS_HEADERS "*.h") |  | ||||||
| list(SORT CORE_MONITOR_LIBS_HEADERS) | list(SORT CORE_MONITOR_LIBS_HEADERS) | ||||||
|  | list(SORT CORE_MONITOR_LIBS_SOURCES) | ||||||
|  |  | ||||||
| add_library(core_monitor_lib ${CORE_MONITOR_LIBS_SOURCES} ${CORE_MONITOR_LIBS_HEADERS}) | add_library(core_monitor_lib ${CORE_MONITOR_LIBS_SOURCES} ${CORE_MONITOR_LIBS_HEADERS}) | ||||||
| source_group(Headers FILES ${CORE_MONITOR_LIBS_HEADERS}) | source_group(Headers FILES ${CORE_MONITOR_LIBS_HEADERS}) | ||||||
| target_link_libraries(core_monitor_lib ${Boost_LIBRARIES})  | target_link_libraries(core_monitor_lib ${Boost_LIBRARIES})  | ||||||
|   | |||||||
| @@ -26,6 +26,17 @@ set(GNSS_RECEIVER_SOURCES | |||||||
|      in_memory_configuration.cc |      in_memory_configuration.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(GNSS_RECEIVER_HEADERS | ||||||
|  |      control_thread.h | ||||||
|  |      control_message_factory.h | ||||||
|  |      file_configuration.h | ||||||
|  |      gnss_block_factory.h | ||||||
|  |      gnss_flowgraph.h | ||||||
|  |      in_memory_configuration.h | ||||||
|  |      concurrent_map.h | ||||||
|  |      concurrent_queue.h | ||||||
|  |      control_message.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| if(PC_GNURADIO_RUNTIME_VERSION VERSION_GREATER 3.7.3) | if(PC_GNURADIO_RUNTIME_VERSION VERSION_GREATER 3.7.3) | ||||||
|      add_definitions(-DMODERN_GNURADIO=1) |      add_definitions(-DMODERN_GNURADIO=1) | ||||||
| @@ -149,10 +160,21 @@ include_directories( | |||||||
|      ${VOLK_GNSSSDR_INCLUDE_DIRS} |      ${VOLK_GNSSSDR_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB GNSS_RECEIVER_HEADERS "*.h") |  | ||||||
| list(SORT GNSS_RECEIVER_HEADERS) | list(SORT GNSS_RECEIVER_HEADERS) | ||||||
| file(GLOB GNSS_RECEIVER_INTERFACE_HEADERS "../interfaces/*.h") | list(SORT GNSS_RECEIVER_SOURCES) | ||||||
|  |  | ||||||
|  | set(GNSS_RECEIVER_INTERFACE_HEADERS ../interfaces/acquisition_interface.h | ||||||
|  |                                     ../interfaces/channel_interface.h | ||||||
|  |                                     ../interfaces/configuration_interface.h | ||||||
|  |                                     ../interfaces/gnss_block_interface.h | ||||||
|  |                                     ../interfaces/observables_interface.h | ||||||
|  |                                     ../interfaces/pvt_interface.h | ||||||
|  |                                     ../interfaces/telemetry_decoder_interface.h | ||||||
|  |                                     ../interfaces/tracking_interface.h | ||||||
|  | ) | ||||||
|  |  | ||||||
| list(SORT GNSS_RECEIVER_INTERFACE_HEADERS) | list(SORT GNSS_RECEIVER_INTERFACE_HEADERS) | ||||||
|  |  | ||||||
| add_library(gnss_rx ${GNSS_RECEIVER_SOURCES} ${GNSS_RECEIVER_HEADERS} ${GNSS_RECEIVER_INTERFACE_HEADERS}) | add_library(gnss_rx ${GNSS_RECEIVER_SOURCES} ${GNSS_RECEIVER_HEADERS} ${GNSS_RECEIVER_INTERFACE_HEADERS}) | ||||||
| source_group(Headers FILES ${GNSS_RECEIVER_HEADERS} ${GNSS_RECEIVER_INTERFACE_HEADERS}) | source_group(Headers FILES ${GNSS_RECEIVER_HEADERS} ${GNSS_RECEIVER_INTERFACE_HEADERS}) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -801,8 +801,8 @@ void GNSSFlowgraph::wait() | |||||||
|  |  | ||||||
| bool GNSSFlowgraph::send_telemetry_msg(pmt::pmt_t msg) | bool GNSSFlowgraph::send_telemetry_msg(pmt::pmt_t msg) | ||||||
| { | { | ||||||
|     //push ephemeris to PVT telemetry msg in port using a channel out port |     // Push ephemeris to PVT telemetry msg in port using a channel out port | ||||||
|     // it uses the first channel as a message produces (it is already connected to PVT) |     // it uses the first channel as a message producer (it is already connected to PVT) | ||||||
|     channels_.at(0)->get_right_block()->message_port_pub(pmt::mp("telemetry"), msg); |     channels_.at(0)->get_right_block()->message_port_pub(pmt::mp("telemetry"), msg); | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| @@ -816,6 +816,7 @@ bool GNSSFlowgraph::send_telemetry_msg(pmt::pmt_t msg) | |||||||
|  */ |  */ | ||||||
| void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what) | void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what) | ||||||
| { | { | ||||||
|  |     std::lock_guard<std::mutex> lock(signal_list_mutex); | ||||||
|     DLOG(INFO) << "Received " << what << " from " << who << ". Number of applied actions = " << applied_actions_; |     DLOG(INFO) << "Received " << what << " from " << who << ". Number of applied actions = " << applied_actions_; | ||||||
|     unsigned int sat = 0; |     unsigned int sat = 0; | ||||||
|     try |     try | ||||||
| @@ -826,7 +827,6 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what) | |||||||
|         { |         { | ||||||
|             LOG(WARNING) << e.what(); |             LOG(WARNING) << e.what(); | ||||||
|         } |         } | ||||||
|     std::lock_guard<std::mutex> lock(signal_list_mutex); |  | ||||||
|     switch (what) |     switch (what) | ||||||
|         { |         { | ||||||
|         case 0: |         case 0: | ||||||
| @@ -1336,8 +1336,8 @@ void GNSSFlowgraph::set_signals_list() | |||||||
|     if (configuration_->property("Channels_1G.count", 0) > 0) |     if (configuration_->property("Channels_1G.count", 0) > 0) | ||||||
|         { |         { | ||||||
|             // Loop to create the list of GLONASS L1 C/A signals |             // Loop to create the list of GLONASS L1 C/A signals | ||||||
|             for (available_gnss_prn_iter = available_glonass_prn.begin(); |             for (available_gnss_prn_iter = available_glonass_prn.cbegin(); | ||||||
|                  available_gnss_prn_iter != available_glonass_prn.end(); |                  available_gnss_prn_iter != available_glonass_prn.cend(); | ||||||
|                  available_gnss_prn_iter++) |                  available_gnss_prn_iter++) | ||||||
|                 { |                 { | ||||||
|                     available_GLO_1G_signals_.push_back(Gnss_Signal( |                     available_GLO_1G_signals_.push_back(Gnss_Signal( | ||||||
| @@ -1349,8 +1349,8 @@ void GNSSFlowgraph::set_signals_list() | |||||||
|     if (configuration_->property("Channels_2G.count", 0) > 0) |     if (configuration_->property("Channels_2G.count", 0) > 0) | ||||||
|         { |         { | ||||||
|             // Loop to create the list of GLONASS L2 C/A signals |             // Loop to create the list of GLONASS L2 C/A signals | ||||||
|             for (available_gnss_prn_iter = available_glonass_prn.begin(); |             for (available_gnss_prn_iter = available_glonass_prn.cbegin(); | ||||||
|                  available_gnss_prn_iter != available_glonass_prn.end(); |                  available_gnss_prn_iter != available_glonass_prn.cend(); | ||||||
|                  available_gnss_prn_iter++) |                  available_gnss_prn_iter++) | ||||||
|                 { |                 { | ||||||
|                     available_GLO_2G_signals_.push_back(Gnss_Signal( |                     available_GLO_2G_signals_.push_back(Gnss_Signal( | ||||||
| @@ -1363,6 +1363,7 @@ void GNSSFlowgraph::set_signals_list() | |||||||
|  |  | ||||||
| void GNSSFlowgraph::set_channels_state() | void GNSSFlowgraph::set_channels_state() | ||||||
| { | { | ||||||
|  |     std::lock_guard<std::mutex> lock(signal_list_mutex); | ||||||
|     max_acq_channels_ = configuration_->property("Channels.in_acquisition", channels_count_); |     max_acq_channels_ = configuration_->property("Channels.in_acquisition", channels_count_); | ||||||
|     if (max_acq_channels_ > channels_count_) |     if (max_acq_channels_ > channels_count_) | ||||||
|         { |         { | ||||||
| @@ -1382,7 +1383,6 @@ void GNSSFlowgraph::set_channels_state() | |||||||
|                 } |                 } | ||||||
|             DLOG(INFO) << "Channel " << i << " in state " << channels_state_[i]; |             DLOG(INFO) << "Channel " << i << " in state " << channels_state_[i]; | ||||||
|         } |         } | ||||||
|     std::lock_guard<std::mutex> lock(signal_list_mutex); |  | ||||||
|     acq_channels_count_ = max_acq_channels_; |     acq_channels_count_ = max_acq_channels_; | ||||||
|     DLOG(INFO) << acq_channels_count_ << " channels in acquisition state"; |     DLOG(INFO) << acq_channels_count_ << " channels in acquisition state"; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -45,6 +45,47 @@ set(SYSTEM_PARAMETERS_SOURCES | |||||||
|      glonass_gnav_navigation_message.cc |      glonass_gnav_navigation_message.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | set(SYSTEM_PARAMETERS_HEADERS | ||||||
|  |      gnss_satellite.h | ||||||
|  |      gnss_signal.h | ||||||
|  |      gps_navigation_message.h | ||||||
|  |      gps_ephemeris.h | ||||||
|  |      gps_iono.h | ||||||
|  |      gps_almanac.h | ||||||
|  |      gps_utc_model.h | ||||||
|  |      gps_acq_assist.h | ||||||
|  |      gps_ref_time.h | ||||||
|  |      gps_ref_location.h | ||||||
|  |      galileo_utc_model.h | ||||||
|  |      galileo_ephemeris.h | ||||||
|  |      galileo_almanac.h | ||||||
|  |      galileo_iono.h | ||||||
|  |      galileo_navigation_message.h | ||||||
|  |      sbas_ephemeris.h | ||||||
|  |      galileo_fnav_message.h | ||||||
|  |      gps_cnav_ephemeris.h | ||||||
|  |      gps_cnav_navigation_message.h | ||||||
|  |      gps_cnav_iono.h | ||||||
|  |      gps_cnav_utc_model.h | ||||||
|  |      rtcm.h | ||||||
|  |      glonass_gnav_ephemeris.h | ||||||
|  |      glonass_gnav_almanac.h | ||||||
|  |      glonass_gnav_utc_model.h | ||||||
|  |      glonass_gnav_navigation_message.h | ||||||
|  |      display.h | ||||||
|  |      Galileo_E1.h | ||||||
|  |      Galileo_E5a.h | ||||||
|  |      GLONASS_L1_L2_CA.h | ||||||
|  |      gnss_frequencies.h | ||||||
|  |      gnss_obs_codes.h | ||||||
|  |      gnss_synchro.h | ||||||
|  |      GPS_CNAV.h | ||||||
|  |      GPS_L1_CA.h | ||||||
|  |      GPS_L2C.h | ||||||
|  |      GPS_L5.h | ||||||
|  |      MATH_CONSTANTS.h      | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|      ${CMAKE_CURRENT_SOURCE_DIR} |      ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
| @@ -57,8 +98,10 @@ include_directories( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| link_directories(${Boost_LIBRARY_DIR}) | link_directories(${Boost_LIBRARY_DIR}) | ||||||
| file(GLOB SYSTEM_PARAMETERS_HEADERS "*.h") |  | ||||||
| list(SORT SYSTEM_PARAMETERS_HEADERS) | list(SORT SYSTEM_PARAMETERS_HEADERS) | ||||||
|  | list(SORT SYSTEM_PARAMETERS_SOURCES) | ||||||
|  |  | ||||||
| add_library(gnss_system_parameters ${SYSTEM_PARAMETERS_SOURCES} ${SYSTEM_PARAMETERS_HEADERS}) | add_library(gnss_system_parameters ${SYSTEM_PARAMETERS_SOURCES} ${SYSTEM_PARAMETERS_HEADERS}) | ||||||
| source_group(Headers FILES ${SYSTEM_PARAMETERS_HEADERS}) | source_group(Headers FILES ${SYSTEM_PARAMETERS_HEADERS}) | ||||||
| add_dependencies(gnss_system_parameters rtklib_lib glog-${glog_RELEASE}) | add_dependencies(gnss_system_parameters rtklib_lib glog-${glog_RELEASE}) | ||||||
|   | |||||||
| @@ -33,6 +33,7 @@ | |||||||
| #ifndef GNSS_SDR_GNSS_SYNCHRO_H_ | #ifndef GNSS_SDR_GNSS_SYNCHRO_H_ | ||||||
| #define GNSS_SDR_GNSS_SYNCHRO_H_ | #define GNSS_SDR_GNSS_SYNCHRO_H_ | ||||||
|  |  | ||||||
|  | #include <boost/serialization/nvp.hpp> | ||||||
| #include "gnss_signal.h" | #include "gnss_signal.h" | ||||||
| #include <cstdint> | #include <cstdint> | ||||||
|  |  | ||||||
| @@ -83,41 +84,42 @@ public: | |||||||
|      * Gnss_Synchro objects from a byte stream. |      * Gnss_Synchro objects from a byte stream. | ||||||
|      */ |      */ | ||||||
|     template <class Archive> |     template <class Archive> | ||||||
|  |  | ||||||
|     void serialize(Archive& ar, const unsigned int version) |     void serialize(Archive& ar, const unsigned int version) | ||||||
|     { |     { | ||||||
|         if (version) |         if (version) | ||||||
|             { |             { | ||||||
|             }; |             }; | ||||||
|         // Satellite and signal info |         // Satellite and signal info | ||||||
|         ar& System; |         ar& BOOST_SERIALIZATION_NVP(System); | ||||||
|         ar& Signal; |         ar& BOOST_SERIALIZATION_NVP(Signal); | ||||||
|         ar& PRN; |         ar& BOOST_SERIALIZATION_NVP(PRN); | ||||||
|         ar& Channel_ID; |         ar& BOOST_SERIALIZATION_NVP(Channel_ID); | ||||||
|         // Acquisition |         // Acquisition | ||||||
|         ar& Acq_delay_samples; |         ar& BOOST_SERIALIZATION_NVP(Acq_delay_samples); | ||||||
|         ar& Acq_doppler_hz; |         ar& BOOST_SERIALIZATION_NVP(Acq_doppler_hz); | ||||||
|         ar& Acq_samplestamp_samples; |         ar& BOOST_SERIALIZATION_NVP(Acq_samplestamp_samples); | ||||||
|         ar& Acq_doppler_step; |         ar& BOOST_SERIALIZATION_NVP(Acq_doppler_step); | ||||||
|         ar& Flag_valid_acquisition; |         ar& BOOST_SERIALIZATION_NVP(Flag_valid_acquisition); | ||||||
|         // Tracking |         // Tracking | ||||||
|         ar& fs; |         ar& BOOST_SERIALIZATION_NVP(fs); | ||||||
|         ar& Prompt_I; |         ar& BOOST_SERIALIZATION_NVP(Prompt_I); | ||||||
|         ar& Prompt_Q; |         ar& BOOST_SERIALIZATION_NVP(Prompt_Q); | ||||||
|         ar& CN0_dB_hz; |         ar& BOOST_SERIALIZATION_NVP(CN0_dB_hz); | ||||||
|         ar& Carrier_Doppler_hz; |         ar& BOOST_SERIALIZATION_NVP(Carrier_Doppler_hz); | ||||||
|         ar& Carrier_phase_rads; |         ar& BOOST_SERIALIZATION_NVP(Carrier_phase_rads); | ||||||
|         ar& Code_phase_samples; |         ar& BOOST_SERIALIZATION_NVP(Code_phase_samples); | ||||||
|         ar& Tracking_sample_counter; |         ar& BOOST_SERIALIZATION_NVP(Tracking_sample_counter); | ||||||
|         ar& Flag_valid_symbol_output; |         ar& BOOST_SERIALIZATION_NVP(Flag_valid_symbol_output); | ||||||
|         ar& correlation_length_ms; |         ar& BOOST_SERIALIZATION_NVP(correlation_length_ms); | ||||||
|         // Telemetry Decoder |         // Telemetry Decoder | ||||||
|         ar& Flag_valid_word; |         ar& BOOST_SERIALIZATION_NVP(Flag_valid_word); | ||||||
|         ar& TOW_at_current_symbol_ms; |         ar& BOOST_SERIALIZATION_NVP(TOW_at_current_symbol_ms); | ||||||
|         // Observables |         // Observables | ||||||
|         ar& Pseudorange_m; |         ar& BOOST_SERIALIZATION_NVP(Pseudorange_m); | ||||||
|         ar& RX_time; |         ar& BOOST_SERIALIZATION_NVP(RX_time); | ||||||
|         ar& Flag_valid_pseudorange; |         ar& BOOST_SERIALIZATION_NVP(Flag_valid_pseudorange); | ||||||
|         ar& interp_TOW_ms; |         ar& BOOST_SERIALIZATION_NVP(interp_TOW_ms); | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -153,7 +153,7 @@ public: | |||||||
|         archive& make_nvp("d_Cus", d_Cus);                        //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad] |         archive& make_nvp("d_Cus", d_Cus);                        //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad] | ||||||
|         archive& make_nvp("d_sqrt_A", d_sqrt_A);                  //!< Square Root of the Semi-Major Axis [sqrt(m)] |         archive& make_nvp("d_sqrt_A", d_sqrt_A);                  //!< Square Root of the Semi-Major Axis [sqrt(m)] | ||||||
|         archive& make_nvp("d_Toe", d_Toe);                        //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200E) [s] |         archive& make_nvp("d_Toe", d_Toe);                        //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200E) [s] | ||||||
|         archive& make_nvp("d_Toc", d_Toe);                        //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200E) [s] |         archive& make_nvp("d_Toc", d_Toc);                        //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200E) [s] | ||||||
|         archive& make_nvp("d_Cic", d_Cic);                        //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad] |         archive& make_nvp("d_Cic", d_Cic);                        //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad] | ||||||
|         archive& make_nvp("d_OMEGA0", d_OMEGA0);                  //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles] |         archive& make_nvp("d_OMEGA0", d_OMEGA0);                  //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles] | ||||||
|         archive& make_nvp("d_Cis", d_Cis);                        //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad] |         archive& make_nvp("d_Cis", d_Cis);                        //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad] | ||||||
|   | |||||||
| @@ -179,6 +179,7 @@ endif(ENABLE_UNIT_TESTING_MINIMAL) | |||||||
| ################################################################################ | ################################################################################ | ||||||
| # Optional generator | # Optional generator | ||||||
| ################################################################################ | ################################################################################ | ||||||
|  | option(ENABLE_GNSS_SIM_INSTALL "Enable the installation of gnss_sim on the fly" ON) | ||||||
| if(ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA) | if(ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA) | ||||||
|    if(ENABLE_FPGA) |    if(ENABLE_FPGA) | ||||||
|       set(CROSS_INSTALL_DIR "-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") |       set(CROSS_INSTALL_DIR "-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") | ||||||
| @@ -189,11 +190,11 @@ if(ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA) | |||||||
|       set(CROSS_INSTALL_DIR "") |       set(CROSS_INSTALL_DIR "") | ||||||
|    endif(ENABLE_FPGA) |    endif(ENABLE_FPGA) | ||||||
|    find_package(GnssSimulator QUIET) |    find_package(GnssSimulator QUIET) | ||||||
|    if(GNSS-SIMULATOR_FOUND) |    if(GNSS-SIMULATOR_FOUND OR NOT ENABLE_GNSS_SIM_INSTALL) | ||||||
|       add_definitions(-DSW_GENERATOR_BIN="${SW_GENERATOR_BIN}") |       add_definitions(-DSW_GENERATOR_BIN="${SW_GENERATOR_BIN}") | ||||||
|       add_definitions(-DDEFAULT_RINEX_NAV="${CMAKE_INSTALL_PREFIX}/share/gnss-sim/brdc3540.14n") |       add_definitions(-DDEFAULT_RINEX_NAV="${CMAKE_INSTALL_PREFIX}/share/gnss-sim/brdc3540.14n") | ||||||
|       add_definitions(-DDEFAULT_POSITION_FILE="${CMAKE_INSTALL_PREFIX}/share/gnss-sim/circle.csv") |       add_definitions(-DDEFAULT_POSITION_FILE="${CMAKE_INSTALL_PREFIX}/share/gnss-sim/circle.csv") | ||||||
|    else(GNSS-SIMULATOR_FOUND) |    else(GNSS-SIMULATOR_FOUND OR NOT ENABLE_GNSS_SIM_INSTALL) | ||||||
|       ExternalProject_Add( |       ExternalProject_Add( | ||||||
|          gnss-sim |          gnss-sim | ||||||
|          GIT_REPOSITORY https://bitbucket.org/jarribas/gnss-simulator |          GIT_REPOSITORY https://bitbucket.org/jarribas/gnss-simulator | ||||||
| @@ -219,7 +220,7 @@ if(ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA) | |||||||
|          add_definitions(-DDEFAULT_RINEX_NAV="${CMAKE_CURRENT_BINARY_DIR}/../../../thirdparty/gnss-sim/brdc3540.14n") |          add_definitions(-DDEFAULT_RINEX_NAV="${CMAKE_CURRENT_BINARY_DIR}/../../../thirdparty/gnss-sim/brdc3540.14n") | ||||||
|          add_definitions(-DDEFAULT_POSITION_FILE="${CMAKE_CURRENT_BINARY_DIR}/../../../thirdparty/gnss-sim/circle.csv") |          add_definitions(-DDEFAULT_POSITION_FILE="${CMAKE_CURRENT_BINARY_DIR}/../../../thirdparty/gnss-sim/circle.csv") | ||||||
|       endif(ENABLE_INSTALL_TESTS) |       endif(ENABLE_INSTALL_TESTS) | ||||||
|    endif(GNSS-SIMULATOR_FOUND) |    endif(GNSS-SIMULATOR_FOUND OR NOT ENABLE_GNSS_SIM_INSTALL) | ||||||
|  |  | ||||||
|    ################################################################################ |    ################################################################################ | ||||||
|    # Local installation of GPSTk http://www.gpstk.org/ |    # Local installation of GPSTk http://www.gpstk.org/ | ||||||
| @@ -312,12 +313,16 @@ if(ENABLE_INSTALL_TESTS) | |||||||
|    install(FILES ${CMAKE_SOURCE_DIR}/src/tests/signal_samples/Galileo_E1_ID_1_Fs_4Msps_8ms.dat DESTINATION share/gnss-sdr/signal_samples) |    install(FILES ${CMAKE_SOURCE_DIR}/src/tests/signal_samples/Galileo_E1_ID_1_Fs_4Msps_8ms.dat DESTINATION share/gnss-sdr/signal_samples) | ||||||
|    install(FILES ${CMAKE_SOURCE_DIR}/src/tests/signal_samples/GPS_L1_CA_ID_1_Fs_4Msps_2ms.dat DESTINATION share/gnss-sdr/signal_samples) |    install(FILES ${CMAKE_SOURCE_DIR}/src/tests/signal_samples/GPS_L1_CA_ID_1_Fs_4Msps_2ms.dat DESTINATION share/gnss-sdr/signal_samples) | ||||||
|    install(FILES ${CMAKE_SOURCE_DIR}/src/tests/signal_samples/NT1065_GLONASS_L1_20160831_fs6625e6_if0e3_4ms.bin DESTINATION share/gnss-sdr/signal_samples) |    install(FILES ${CMAKE_SOURCE_DIR}/src/tests/signal_samples/NT1065_GLONASS_L1_20160831_fs6625e6_if0e3_4ms.bin DESTINATION share/gnss-sdr/signal_samples) | ||||||
|  |    install(FILES ${CMAKE_SOURCE_DIR}/src/tests/data/rtklib_test/obs_test1.xml DESTINATION share/gnss-sdr/data/rtklib_test) | ||||||
|  |    install(FILES ${CMAKE_SOURCE_DIR}/src/tests/data/rtklib_test/eph_GPS_L1CA_test1.xml DESTINATION share/gnss-sdr/data/rtklib_test) | ||||||
|    add_definitions(-DTEST_PATH="${CMAKE_INSTALL_PREFIX}/share/gnss-sdr/") |    add_definitions(-DTEST_PATH="${CMAKE_INSTALL_PREFIX}/share/gnss-sdr/") | ||||||
| else(ENABLE_INSTALL_TESTS) | else(ENABLE_INSTALL_TESTS) | ||||||
|    file(COPY ${CMAKE_SOURCE_DIR}/src/tests/signal_samples/GSoC_CTTC_capture_2012_07_26_4Msps_4ms.dat DESTINATION ${CMAKE_SOURCE_DIR}/thirdparty/signal_samples) |    file(COPY ${CMAKE_SOURCE_DIR}/src/tests/signal_samples/GSoC_CTTC_capture_2012_07_26_4Msps_4ms.dat DESTINATION ${CMAKE_SOURCE_DIR}/thirdparty/signal_samples) | ||||||
|    file(COPY ${CMAKE_SOURCE_DIR}/src/tests/signal_samples/Galileo_E1_ID_1_Fs_4Msps_8ms.dat DESTINATION ${CMAKE_SOURCE_DIR}/thirdparty/signal_samples) |    file(COPY ${CMAKE_SOURCE_DIR}/src/tests/signal_samples/Galileo_E1_ID_1_Fs_4Msps_8ms.dat DESTINATION ${CMAKE_SOURCE_DIR}/thirdparty/signal_samples) | ||||||
|    file(COPY ${CMAKE_SOURCE_DIR}/src/tests/signal_samples/GPS_L1_CA_ID_1_Fs_4Msps_2ms.dat DESTINATION ${CMAKE_SOURCE_DIR}/thirdparty/signal_samples) |    file(COPY ${CMAKE_SOURCE_DIR}/src/tests/signal_samples/GPS_L1_CA_ID_1_Fs_4Msps_2ms.dat DESTINATION ${CMAKE_SOURCE_DIR}/thirdparty/signal_samples) | ||||||
|    file(COPY ${CMAKE_SOURCE_DIR}/src/tests/signal_samples/NT1065_GLONASS_L1_20160831_fs6625e6_if0e3_4ms.bin DESTINATION ${CMAKE_SOURCE_DIR}/thirdparty/signal_samples) |    file(COPY ${CMAKE_SOURCE_DIR}/src/tests/signal_samples/NT1065_GLONASS_L1_20160831_fs6625e6_if0e3_4ms.bin DESTINATION ${CMAKE_SOURCE_DIR}/thirdparty/signal_samples) | ||||||
|  |    file(COPY ${CMAKE_SOURCE_DIR}/src/tests/data/rtklib_test/obs_test1.xml DESTINATION ${CMAKE_SOURCE_DIR}/thirdparty/data/rtklib_test) | ||||||
|  |    file(COPY ${CMAKE_SOURCE_DIR}/src/tests/data/rtklib_test/eph_GPS_L1CA_test1.xml DESTINATION ${CMAKE_SOURCE_DIR}/thirdparty/data/rtklib_test)   | ||||||
|    add_definitions(-DTEST_PATH="${CMAKE_SOURCE_DIR}/thirdparty/") |    add_definitions(-DTEST_PATH="${CMAKE_SOURCE_DIR}/thirdparty/") | ||||||
| endif(ENABLE_INSTALL_TESTS) | endif(ENABLE_INSTALL_TESTS) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -37,5 +37,6 @@ | |||||||
| DEFINE_double(skip_obs_transitory_s, 30.0, "Skip the initial observable outputs to avoid transitory results [s]"); | DEFINE_double(skip_obs_transitory_s, 30.0, "Skip the initial observable outputs to avoid transitory results [s]"); | ||||||
| DEFINE_bool(compute_single_diffs, false, "Compute also the single difference errors for Accumulated Carrier Phase and Carrier Doppler (requires LO synchronization between receivers)"); | DEFINE_bool(compute_single_diffs, false, "Compute also the single difference errors for Accumulated Carrier Phase and Carrier Doppler (requires LO synchronization between receivers)"); | ||||||
| DEFINE_bool(compare_with_5X, false, "Compare the E5a Doppler and Carrier Phases with the E5 full bw in RINEX (expect discrepancy due to the center frequencies differences"); | DEFINE_bool(compare_with_5X, false, "Compare the E5a Doppler and Carrier Phases with the E5 full bw in RINEX (expect discrepancy due to the center frequencies differences"); | ||||||
|  | DEFINE_bool(duplicated_satellites_test, false, "Enable special observable test mode where the scenario contains duplicated satellite orbits"); | ||||||
|  | DEFINE_string(duplicated_satellites_prns, "1,2,3,4", "List of duplicated satellites PRN pairs (i.e. 1,2,3,4 indicates that the PRNs 1,2 share the same orbit. The same applies for PRNs 3,4)"); | ||||||
| #endif | #endif | ||||||
|   | |||||||
							
								
								
									
										481
									
								
								src/tests/data/rtklib_test/eph_GPS_L1CA_test1.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										481
									
								
								src/tests/data/rtklib_test/eph_GPS_L1CA_test1.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,481 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> | ||||||
|  | <!DOCTYPE boost_serialization> | ||||||
|  | <boost_serialization signature="serialization::archive" version="12"> | ||||||
|  | <GNSS-SDR_ephemeris_map class_id="0" tracking_level="0" version="0"> | ||||||
|  | 	<count>11</count> | ||||||
|  | 	<item_version>0</item_version> | ||||||
|  | 	<item class_id="1" tracking_level="0" version="0"> | ||||||
|  | 		<first>1</first> | ||||||
|  | 		<second class_id="2" tracking_level="0" version="0"> | ||||||
|  | 			<i_satellite_PRN>1</i_satellite_PRN> | ||||||
|  | 			<d_TOW>5.18448000000000000e+05</d_TOW> | ||||||
|  | 			<d_IODE_SF2>9.20000000000000000e+01</d_IODE_SF2> | ||||||
|  | 			<d_IODE_SF3>9.20000000000000000e+01</d_IODE_SF3> | ||||||
|  | 			<d_Crs>1.83125000000000000e+01</d_Crs> | ||||||
|  | 			<d_Delta_n>4.86413118201646669e-09</d_Delta_n> | ||||||
|  | 			<d_M_0>2.06468198930943725e+00</d_M_0> | ||||||
|  | 			<d_Cuc>9.42498445510864258e-07</d_Cuc> | ||||||
|  | 			<d_e_eccentricity>3.73082922305911736e-03</d_e_eccentricity> | ||||||
|  | 			<d_Cus>5.76488673686981201e-06</d_Cus> | ||||||
|  | 			<d_sqrt_A>5.15366174697875977e+03</d_sqrt_A> | ||||||
|  | 			<d_Toe>5.18400000000000000e+05</d_Toe> | ||||||
|  | 			<d_Toc>5.18400000000000000e+05</d_Toc> | ||||||
|  | 			<d_Cic>-5.40167093276977539e-08</d_Cic> | ||||||
|  | 			<d_OMEGA0>9.52167247599200905e-01</d_OMEGA0> | ||||||
|  | 			<d_Cis>1.86264514923095703e-08</d_Cis> | ||||||
|  | 			<d_i_0>9.61377026423456127e-01</d_i_0> | ||||||
|  | 			<d_Crc>2.66968750000000000e+02</d_Crc> | ||||||
|  | 			<d_OMEGA>4.44935333708291858e-01</d_OMEGA> | ||||||
|  | 			<d_OMEGA_DOT>-8.14641075927847669e-09</d_OMEGA_DOT> | ||||||
|  | 			<d_IDOT>4.15017287135849497e-10</d_IDOT> | ||||||
|  | 			<i_code_on_L2>0</i_code_on_L2> | ||||||
|  | 			<i_GPS_week>799</i_GPS_week> | ||||||
|  | 			<b_L2_P_data_flag>0</b_L2_P_data_flag> | ||||||
|  | 			<i_SV_accuracy>2</i_SV_accuracy> | ||||||
|  | 			<i_SV_health>0</i_SV_health> | ||||||
|  | 			<d_TGD>5.12227416038513184e-09</d_TGD> | ||||||
|  | 			<d_IODC>9.20000000000000000e+01</d_IODC> | ||||||
|  | 			<i_AODO>27900</i_AODO> | ||||||
|  | 			<b_fit_interval_flag>0</b_fit_interval_flag> | ||||||
|  | 			<d_spare1>0.00000000000000000e+00</d_spare1> | ||||||
|  | 			<d_spare2>0.00000000000000000e+00</d_spare2> | ||||||
|  | 			<d_A_f0>-1.09937973320484161e-05</d_A_f0> | ||||||
|  | 			<d_A_f1>3.41060513164847988e-13</d_A_f1> | ||||||
|  | 			<d_A_f2>0.00000000000000000e+00</d_A_f2> | ||||||
|  | 			<b_integrity_status_flag>0</b_integrity_status_flag> | ||||||
|  | 			<b_alert_flag>0</b_alert_flag> | ||||||
|  | 			<b_antispoofing_flag>0</b_antispoofing_flag> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>2</first> | ||||||
|  | 		<second> | ||||||
|  | 			<i_satellite_PRN>2</i_satellite_PRN> | ||||||
|  | 			<d_TOW>5.18448000000000000e+05</d_TOW> | ||||||
|  | 			<d_IODE_SF2>5.50000000000000000e+01</d_IODE_SF2> | ||||||
|  | 			<d_IODE_SF3>5.50000000000000000e+01</d_IODE_SF3> | ||||||
|  | 			<d_Crs>2.22812500000000000e+01</d_Crs> | ||||||
|  | 			<d_Delta_n>5.12771358985317661e-09</d_Delta_n> | ||||||
|  | 			<d_M_0>2.75926302782053146e+00</d_M_0> | ||||||
|  | 			<d_Cuc>1.10082328319549561e-06</d_Cuc> | ||||||
|  | 			<d_e_eccentricity>1.40569622162729484e-02</d_e_eccentricity> | ||||||
|  | 			<d_Cus>6.26407563686370850e-06</d_Cus> | ||||||
|  | 			<d_sqrt_A>5.15372654151916504e+03</d_sqrt_A> | ||||||
|  | 			<d_Toe>5.18400000000000000e+05</d_Toe> | ||||||
|  | 			<d_Toc>5.18400000000000000e+05</d_Toc> | ||||||
|  | 			<d_Cic>-1.86264514923095703e-08</d_Cic> | ||||||
|  | 			<d_OMEGA0>9.18037446344556307e-01</d_OMEGA0> | ||||||
|  | 			<d_Cis>-2.16066837310791016e-07</d_Cis> | ||||||
|  | 			<d_i_0>9.39991586696909520e-01</d_i_0> | ||||||
|  | 			<d_Crc>2.45468750000000000e+02</d_Crc> | ||||||
|  | 			<d_OMEGA>-2.35598690357981555e+00</d_OMEGA> | ||||||
|  | 			<d_OMEGA_DOT>-8.07140763509730069e-09</d_OMEGA_DOT> | ||||||
|  | 			<d_IDOT>5.25736184736635464e-10</d_IDOT> | ||||||
|  | 			<i_code_on_L2>0</i_code_on_L2> | ||||||
|  | 			<i_GPS_week>799</i_GPS_week> | ||||||
|  | 			<b_L2_P_data_flag>0</b_L2_P_data_flag> | ||||||
|  | 			<i_SV_accuracy>2</i_SV_accuracy> | ||||||
|  | 			<i_SV_health>0</i_SV_health> | ||||||
|  | 			<d_TGD>-2.00234353542327881e-08</d_TGD> | ||||||
|  | 			<d_IODC>5.50000000000000000e+01</d_IODC> | ||||||
|  | 			<i_AODO>27900</i_AODO> | ||||||
|  | 			<b_fit_interval_flag>0</b_fit_interval_flag> | ||||||
|  | 			<d_spare1>0.00000000000000000e+00</d_spare1> | ||||||
|  | 			<d_spare2>0.00000000000000000e+00</d_spare2> | ||||||
|  | 			<d_A_f0>5.36850653588771820e-04</d_A_f0> | ||||||
|  | 			<d_A_f1>2.16004991671070416e-12</d_A_f1> | ||||||
|  | 			<d_A_f2>0.00000000000000000e+00</d_A_f2> | ||||||
|  | 			<b_integrity_status_flag>0</b_integrity_status_flag> | ||||||
|  | 			<b_alert_flag>0</b_alert_flag> | ||||||
|  | 			<b_antispoofing_flag>0</b_antispoofing_flag> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>3</first> | ||||||
|  | 		<second> | ||||||
|  | 			<i_satellite_PRN>3</i_satellite_PRN> | ||||||
|  | 			<d_TOW>5.18448000000000000e+05</d_TOW> | ||||||
|  | 			<d_IODE_SF2>7.00000000000000000e+01</d_IODE_SF2> | ||||||
|  | 			<d_IODE_SF3>7.00000000000000000e+01</d_IODE_SF3> | ||||||
|  | 			<d_Crs>-2.04375000000000000e+01</d_Crs> | ||||||
|  | 			<d_Delta_n>4.75769817722603366e-09</d_Delta_n> | ||||||
|  | 			<d_M_0>-1.78871492992227910e+00</d_M_0> | ||||||
|  | 			<d_Cuc>-1.30012631416320801e-06</d_Cuc> | ||||||
|  | 			<d_e_eccentricity>9.70319728367030512e-04</d_e_eccentricity> | ||||||
|  | 			<d_Cus>8.26455652713775635e-06</d_Cus> | ||||||
|  | 			<d_sqrt_A>5.15378153991699219e+03</d_sqrt_A> | ||||||
|  | 			<d_Toe>5.18400000000000000e+05</d_Toe> | ||||||
|  | 			<d_Toc>5.18400000000000000e+05</d_Toc> | ||||||
|  | 			<d_Cic>7.82310962677001953e-08</d_Cic> | ||||||
|  | 			<d_OMEGA0>1.99297660614955263e+00</d_OMEGA0> | ||||||
|  | 			<d_Cis>-1.11758708953857422e-08</d_Cis> | ||||||
|  | 			<d_i_0>9.59058451948379909e-01</d_i_0> | ||||||
|  | 			<d_Crc>2.19593750000000000e+02</d_Crc> | ||||||
|  | 			<d_OMEGA>-3.00536842405812843e+00</d_OMEGA> | ||||||
|  | 			<d_OMEGA_DOT>-8.02712007605698577e-09</d_OMEGA_DOT> | ||||||
|  | 			<d_IDOT>-5.17164399115929480e-10</d_IDOT> | ||||||
|  | 			<i_code_on_L2>0</i_code_on_L2> | ||||||
|  | 			<i_GPS_week>799</i_GPS_week> | ||||||
|  | 			<b_L2_P_data_flag>0</b_L2_P_data_flag> | ||||||
|  | 			<i_SV_accuracy>2</i_SV_accuracy> | ||||||
|  | 			<i_SV_health>0</i_SV_health> | ||||||
|  | 			<d_TGD>5.12227416038513184e-09</d_TGD> | ||||||
|  | 			<d_IODC>7.00000000000000000e+01</d_IODC> | ||||||
|  | 			<i_AODO>27900</i_AODO> | ||||||
|  | 			<b_fit_interval_flag>0</b_fit_interval_flag> | ||||||
|  | 			<d_spare1>0.00000000000000000e+00</d_spare1> | ||||||
|  | 			<d_spare2>0.00000000000000000e+00</d_spare2> | ||||||
|  | 			<d_A_f0>8.80691222846508026e-05</d_A_f0> | ||||||
|  | 			<d_A_f1>2.89901436190120811e-11</d_A_f1> | ||||||
|  | 			<d_A_f2>0.00000000000000000e+00</d_A_f2> | ||||||
|  | 			<b_integrity_status_flag>0</b_integrity_status_flag> | ||||||
|  | 			<b_alert_flag>0</b_alert_flag> | ||||||
|  | 			<b_antispoofing_flag>0</b_antispoofing_flag> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>6</first> | ||||||
|  | 		<second> | ||||||
|  | 			<i_satellite_PRN>6</i_satellite_PRN> | ||||||
|  | 			<d_TOW>5.18448000000000000e+05</d_TOW> | ||||||
|  | 			<d_IODE_SF2>2.30000000000000000e+01</d_IODE_SF2> | ||||||
|  | 			<d_IODE_SF3>2.30000000000000000e+01</d_IODE_SF3> | ||||||
|  | 			<d_Crs>1.63750000000000000e+01</d_Crs> | ||||||
|  | 			<d_Delta_n>4.76305554323897445e-09</d_Delta_n> | ||||||
|  | 			<d_M_0>-1.28531071631616522e+00</d_M_0> | ||||||
|  | 			<d_Cuc>9.12696123123168945e-07</d_Cuc> | ||||||
|  | 			<d_e_eccentricity>5.50022465176880251e-04</d_e_eccentricity> | ||||||
|  | 			<d_Cus>6.24358654022216797e-06</d_Cus> | ||||||
|  | 			<d_sqrt_A>5.15365166282653809e+03</d_sqrt_A> | ||||||
|  | 			<d_Toe>5.18400000000000000e+05</d_Toe> | ||||||
|  | 			<d_Toc>5.18400000000000000e+05</d_Toc> | ||||||
|  | 			<d_Cic>-1.30385160446166992e-08</d_Cic> | ||||||
|  | 			<d_OMEGA0>9.43624288779246867e-01</d_OMEGA0> | ||||||
|  | 			<d_Cis>-1.86264514923095703e-09</d_Cis> | ||||||
|  | 			<d_i_0>9.61292940818096020e-01</d_i_0> | ||||||
|  | 			<d_Crc>2.58406250000000000e+02</d_Crc> | ||||||
|  | 			<d_OMEGA>2.29191014519991665e+00</d_OMEGA> | ||||||
|  | 			<d_OMEGA_DOT>-8.08069373618639861e-09</d_OMEGA_DOT> | ||||||
|  | 			<d_IDOT>4.79305679291144535e-10</d_IDOT> | ||||||
|  | 			<i_code_on_L2>0</i_code_on_L2> | ||||||
|  | 			<i_GPS_week>799</i_GPS_week> | ||||||
|  | 			<b_L2_P_data_flag>0</b_L2_P_data_flag> | ||||||
|  | 			<i_SV_accuracy>2</i_SV_accuracy> | ||||||
|  | 			<i_SV_health>0</i_SV_health> | ||||||
|  | 			<d_TGD>4.65661287307739258e-09</d_TGD> | ||||||
|  | 			<d_IODC>2.30000000000000000e+01</d_IODC> | ||||||
|  | 			<i_AODO>27900</i_AODO> | ||||||
|  | 			<b_fit_interval_flag>0</b_fit_interval_flag> | ||||||
|  | 			<d_spare1>0.00000000000000000e+00</d_spare1> | ||||||
|  | 			<d_spare2>0.00000000000000000e+00</d_spare2> | ||||||
|  | 			<d_A_f0>3.07881273329257965e-05</d_A_f0> | ||||||
|  | 			<d_A_f1>8.18545231595635253e-12</d_A_f1> | ||||||
|  | 			<d_A_f2>0.00000000000000000e+00</d_A_f2> | ||||||
|  | 			<b_integrity_status_flag>0</b_integrity_status_flag> | ||||||
|  | 			<b_alert_flag>0</b_alert_flag> | ||||||
|  | 			<b_antispoofing_flag>0</b_antispoofing_flag> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>9</first> | ||||||
|  | 		<second> | ||||||
|  | 			<i_satellite_PRN>9</i_satellite_PRN> | ||||||
|  | 			<d_TOW>5.18448000000000000e+05</d_TOW> | ||||||
|  | 			<d_IODE_SF2>4.70000000000000000e+01</d_IODE_SF2> | ||||||
|  | 			<d_IODE_SF3>4.70000000000000000e+01</d_IODE_SF3> | ||||||
|  | 			<d_Crs>1.12906250000000000e+02</d_Crs> | ||||||
|  | 			<d_Delta_n>4.37911097897818463e-09</d_Delta_n> | ||||||
|  | 			<d_M_0>-2.75253879947800195e+00</d_M_0> | ||||||
|  | 			<d_Cuc>5.85243105888366699e-06</d_Cuc> | ||||||
|  | 			<d_e_eccentricity>2.16206186451017829e-04</d_e_eccentricity> | ||||||
|  | 			<d_Cus>1.16303563117980957e-05</d_Cus> | ||||||
|  | 			<d_sqrt_A>5.15369471168518066e+03</d_sqrt_A> | ||||||
|  | 			<d_Toe>5.18400000000000000e+05</d_Toe> | ||||||
|  | 			<d_Toc>5.18400000000000000e+05</d_Toc> | ||||||
|  | 			<d_Cic>1.67638063430786133e-08</d_Cic> | ||||||
|  | 			<d_OMEGA0>3.03742251571970812e+00</d_OMEGA0> | ||||||
|  | 			<d_Cis>-1.11758708953857422e-08</d_Cis> | ||||||
|  | 			<d_i_0>9.59160503650671514e-01</d_i_0> | ||||||
|  | 			<d_Crc>1.56125000000000000e+02</d_Crc> | ||||||
|  | 			<d_OMEGA>2.60662251530764344e+00</d_OMEGA> | ||||||
|  | 			<d_OMEGA_DOT>-7.85854162551643464e-09</d_OMEGA_DOT> | ||||||
|  | 			<d_IDOT>-3.46443002170201364e-11</d_IDOT> | ||||||
|  | 			<i_code_on_L2>0</i_code_on_L2> | ||||||
|  | 			<i_GPS_week>799</i_GPS_week> | ||||||
|  | 			<b_L2_P_data_flag>0</b_L2_P_data_flag> | ||||||
|  | 			<i_SV_accuracy>2</i_SV_accuracy> | ||||||
|  | 			<i_SV_health>0</i_SV_health> | ||||||
|  | 			<d_TGD>4.65661287307739258e-10</d_TGD> | ||||||
|  | 			<d_IODC>4.70000000000000000e+01</d_IODC> | ||||||
|  | 			<i_AODO>27900</i_AODO> | ||||||
|  | 			<b_fit_interval_flag>0</b_fit_interval_flag> | ||||||
|  | 			<d_spare1>0.00000000000000000e+00</d_spare1> | ||||||
|  | 			<d_spare2>0.00000000000000000e+00</d_spare2> | ||||||
|  | 			<d_A_f0>-3.18535603582859039e-05</d_A_f0> | ||||||
|  | 			<d_A_f1>-9.66338120633736091e-12</d_A_f1> | ||||||
|  | 			<d_A_f2>0.00000000000000000e+00</d_A_f2> | ||||||
|  | 			<b_integrity_status_flag>0</b_integrity_status_flag> | ||||||
|  | 			<b_alert_flag>0</b_alert_flag> | ||||||
|  | 			<b_antispoofing_flag>0</b_antispoofing_flag> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>10</first> | ||||||
|  | 		<second> | ||||||
|  | 			<i_satellite_PRN>10</i_satellite_PRN> | ||||||
|  | 			<d_TOW>5.18448000000000000e+05</d_TOW> | ||||||
|  | 			<d_IODE_SF2>5.80000000000000000e+01</d_IODE_SF2> | ||||||
|  | 			<d_IODE_SF3>5.80000000000000000e+01</d_IODE_SF3> | ||||||
|  | 			<d_Crs>-2.72500000000000000e+01</d_Crs> | ||||||
|  | 			<d_Delta_n>5.27093384126580581e-09</d_Delta_n> | ||||||
|  | 			<d_M_0>-8.86982818851813737e-01</d_M_0> | ||||||
|  | 			<d_Cuc>-1.17719173431396484e-06</d_Cuc> | ||||||
|  | 			<d_e_eccentricity>1.44534236751496774e-02</d_e_eccentricity> | ||||||
|  | 			<d_Cus>7.90506601333618164e-06</d_Cus> | ||||||
|  | 			<d_sqrt_A>5.15363725471496582e+03</d_sqrt_A> | ||||||
|  | 			<d_Toe>5.18400000000000000e+05</d_Toe> | ||||||
|  | 			<d_Toc>5.18400000000000000e+05</d_Toc> | ||||||
|  | 			<d_Cic>1.45286321640014648e-07</d_Cic> | ||||||
|  | 			<d_OMEGA0>2.00408517949479270e+00</d_OMEGA0> | ||||||
|  | 			<d_Cis>2.40281224250793457e-07</d_Cis> | ||||||
|  | 			<d_i_0>9.41160112993577269e-01</d_i_0> | ||||||
|  | 			<d_Crc>2.15406250000000000e+02</d_Crc> | ||||||
|  | 			<d_OMEGA>9.09732121011562200e-01</d_OMEGA> | ||||||
|  | 			<d_OMEGA_DOT>-8.42213653007785350e-09</d_OMEGA_DOT> | ||||||
|  | 			<d_IDOT>-5.42879755978047536e-10</d_IDOT> | ||||||
|  | 			<i_code_on_L2>0</i_code_on_L2> | ||||||
|  | 			<i_GPS_week>799</i_GPS_week> | ||||||
|  | 			<b_L2_P_data_flag>0</b_L2_P_data_flag> | ||||||
|  | 			<i_SV_accuracy>2</i_SV_accuracy> | ||||||
|  | 			<i_SV_health>0</i_SV_health> | ||||||
|  | 			<d_TGD>-2.79396772384643555e-09</d_TGD> | ||||||
|  | 			<d_IODC>5.80000000000000000e+01</d_IODC> | ||||||
|  | 			<i_AODO>27900</i_AODO> | ||||||
|  | 			<b_fit_interval_flag>0</b_fit_interval_flag> | ||||||
|  | 			<d_spare1>0.00000000000000000e+00</d_spare1> | ||||||
|  | 			<d_spare2>0.00000000000000000e+00</d_spare2> | ||||||
|  | 			<d_A_f0>-1.54968351125717163e-04</d_A_f0> | ||||||
|  | 			<d_A_f1>-1.59161572810262401e-12</d_A_f1> | ||||||
|  | 			<d_A_f2>0.00000000000000000e+00</d_A_f2> | ||||||
|  | 			<b_integrity_status_flag>0</b_integrity_status_flag> | ||||||
|  | 			<b_alert_flag>0</b_alert_flag> | ||||||
|  | 			<b_antispoofing_flag>0</b_antispoofing_flag> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>12</first> | ||||||
|  | 		<second> | ||||||
|  | 			<i_satellite_PRN>12</i_satellite_PRN> | ||||||
|  | 			<d_TOW>5.18448000000000000e+05</d_TOW> | ||||||
|  | 			<d_IODE_SF2>1.06000000000000000e+02</d_IODE_SF2> | ||||||
|  | 			<d_IODE_SF3>1.06000000000000000e+02</d_IODE_SF3> | ||||||
|  | 			<d_Crs>-1.17468750000000000e+02</d_Crs> | ||||||
|  | 			<d_Delta_n>3.94516433192994276e-09</d_Delta_n> | ||||||
|  | 			<d_M_0>1.11631735294997192e+00</d_M_0> | ||||||
|  | 			<d_Cuc>-6.15417957305908203e-06</d_Cuc> | ||||||
|  | 			<d_e_eccentricity>5.05860964767634782e-03</d_e_eccentricity> | ||||||
|  | 			<d_Cus>4.52436506748199463e-06</d_Cus> | ||||||
|  | 			<d_sqrt_A>5.15376680946350098e+03</d_sqrt_A> | ||||||
|  | 			<d_Toe>5.18400000000000000e+05</d_Toe> | ||||||
|  | 			<d_Toc>5.18400000000000000e+05</d_Toc> | ||||||
|  | 			<d_Cic>-5.40167093276977539e-08</d_Cic> | ||||||
|  | 			<d_OMEGA0>-1.10425023618040785e+00</d_OMEGA0> | ||||||
|  | 			<d_Cis>4.09781932830810547e-08</d_Cis> | ||||||
|  | 			<d_i_0>9.88803748742243305e-01</d_i_0> | ||||||
|  | 			<d_Crc>3.07187500000000000e+02</d_Crc> | ||||||
|  | 			<d_OMEGA>5.00154452274795935e-01</d_OMEGA> | ||||||
|  | 			<d_OMEGA_DOT>-7.97176062725659211e-09</d_OMEGA_DOT> | ||||||
|  | 			<d_IDOT>-4.18231706743614228e-10</d_IDOT> | ||||||
|  | 			<i_code_on_L2>0</i_code_on_L2> | ||||||
|  | 			<i_GPS_week>799</i_GPS_week> | ||||||
|  | 			<b_L2_P_data_flag>0</b_L2_P_data_flag> | ||||||
|  | 			<i_SV_accuracy>2</i_SV_accuracy> | ||||||
|  | 			<i_SV_health>0</i_SV_health> | ||||||
|  | 			<d_TGD>-1.16415321826934814e-08</d_TGD> | ||||||
|  | 			<d_IODC>1.06000000000000000e+02</d_IODC> | ||||||
|  | 			<i_AODO>27900</i_AODO> | ||||||
|  | 			<b_fit_interval_flag>0</b_fit_interval_flag> | ||||||
|  | 			<d_spare1>0.00000000000000000e+00</d_spare1> | ||||||
|  | 			<d_spare2>0.00000000000000000e+00</d_spare2> | ||||||
|  | 			<d_A_f0>2.54871323704719543e-04</d_A_f0> | ||||||
|  | 			<d_A_f1>2.72848410531878391e-12</d_A_f1> | ||||||
|  | 			<d_A_f2>0.00000000000000000e+00</d_A_f2> | ||||||
|  | 			<b_integrity_status_flag>0</b_integrity_status_flag> | ||||||
|  | 			<b_alert_flag>0</b_alert_flag> | ||||||
|  | 			<b_antispoofing_flag>0</b_antispoofing_flag> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>17</first> | ||||||
|  | 		<second> | ||||||
|  | 			<i_satellite_PRN>17</i_satellite_PRN> | ||||||
|  | 			<d_TOW>5.18448000000000000e+05</d_TOW> | ||||||
|  | 			<d_IODE_SF2>2.60000000000000000e+01</d_IODE_SF2> | ||||||
|  | 			<d_IODE_SF3>2.60000000000000000e+01</d_IODE_SF3> | ||||||
|  | 			<d_Crs>-5.91250000000000000e+01</d_Crs> | ||||||
|  | 			<d_Delta_n>3.88194741297723567e-09</d_Delta_n> | ||||||
|  | 			<d_M_0>-1.94252959218893162e+00</d_M_0> | ||||||
|  | 			<d_Cuc>-3.04728746414184570e-06</d_Cuc> | ||||||
|  | 			<d_e_eccentricity>9.88844956737011498e-03</d_e_eccentricity> | ||||||
|  | 			<d_Cus>1.18296593427658081e-05</d_Cus> | ||||||
|  | 			<d_sqrt_A>5.15369299888610840e+03</d_sqrt_A> | ||||||
|  | 			<d_Toe>5.18400000000000000e+05</d_Toe> | ||||||
|  | 			<d_Toc>5.18400000000000000e+05</d_Toc> | ||||||
|  | 			<d_Cic>2.03028321266174316e-07</d_Cic> | ||||||
|  | 			<d_OMEGA0>-5.68690999805671268e-02</d_OMEGA0> | ||||||
|  | 			<d_Cis>-7.63684511184692383e-08</d_Cis> | ||||||
|  | 			<d_i_0>9.71201777972365177e-01</d_i_0> | ||||||
|  | 			<d_Crc>1.56531250000000000e+02</d_Crc> | ||||||
|  | 			<d_OMEGA>-2.06928329237789344e+00</d_OMEGA> | ||||||
|  | 			<d_OMEGA_DOT>-7.44602444251995675e-09</d_OMEGA_DOT> | ||||||
|  | 			<d_IDOT>4.40375486263771432e-10</d_IDOT> | ||||||
|  | 			<i_code_on_L2>0</i_code_on_L2> | ||||||
|  | 			<i_GPS_week>799</i_GPS_week> | ||||||
|  | 			<b_L2_P_data_flag>0</b_L2_P_data_flag> | ||||||
|  | 			<i_SV_accuracy>2</i_SV_accuracy> | ||||||
|  | 			<i_SV_health>0</i_SV_health> | ||||||
|  | 			<d_TGD>-1.07102096080780029e-08</d_TGD> | ||||||
|  | 			<d_IODC>2.60000000000000000e+01</d_IODC> | ||||||
|  | 			<i_AODO>27900</i_AODO> | ||||||
|  | 			<b_fit_interval_flag>0</b_fit_interval_flag> | ||||||
|  | 			<d_spare1>0.00000000000000000e+00</d_spare1> | ||||||
|  | 			<d_spare2>0.00000000000000000e+00</d_spare2> | ||||||
|  | 			<d_A_f0>-1.44933816045522690e-04</d_A_f0> | ||||||
|  | 			<d_A_f1>-2.27373675443232019e-12</d_A_f1> | ||||||
|  | 			<d_A_f2>0.00000000000000000e+00</d_A_f2> | ||||||
|  | 			<b_integrity_status_flag>0</b_integrity_status_flag> | ||||||
|  | 			<b_alert_flag>0</b_alert_flag> | ||||||
|  | 			<b_antispoofing_flag>0</b_antispoofing_flag> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>20</first> | ||||||
|  | 		<second> | ||||||
|  | 			<i_satellite_PRN>20</i_satellite_PRN> | ||||||
|  | 			<d_TOW>5.18448000000000000e+05</d_TOW> | ||||||
|  | 			<d_IODE_SF2>1.17000000000000000e+02</d_IODE_SF2> | ||||||
|  | 			<d_IODE_SF3>1.17000000000000000e+02</d_IODE_SF3> | ||||||
|  | 			<d_Crs>-2.58437500000000000e+01</d_Crs> | ||||||
|  | 			<d_Delta_n>5.60380484953655626e-09</d_Delta_n> | ||||||
|  | 			<d_M_0>1.28625710142833249e-01</d_M_0> | ||||||
|  | 			<d_Cuc>-1.52923166751861572e-06</d_Cuc> | ||||||
|  | 			<d_e_eccentricity>5.80669869668781671e-03</d_e_eccentricity> | ||||||
|  | 			<d_Cus>7.51018524169921875e-06</d_Cus> | ||||||
|  | 			<d_sqrt_A>5.15578671264648438e+03</d_sqrt_A> | ||||||
|  | 			<d_Toe>5.18400000000000000e+05</d_Toe> | ||||||
|  | 			<d_Toc>5.18400000000000000e+05</d_Toc> | ||||||
|  | 			<d_Cic>-2.23517417907714844e-08</d_Cic> | ||||||
|  | 			<d_OMEGA0>1.92543994118208528e+00</d_OMEGA0> | ||||||
|  | 			<d_Cis>4.65661287307739258e-08</d_Cis> | ||||||
|  | 			<d_i_0>9.26021286652122910e-01</d_i_0> | ||||||
|  | 			<d_Crc>2.18031250000000000e+02</d_Crc> | ||||||
|  | 			<d_OMEGA>1.23365536128043107e+00</d_OMEGA> | ||||||
|  | 			<d_OMEGA_DOT>-8.54892752571746483e-09</d_OMEGA_DOT> | ||||||
|  | 			<d_IDOT>-5.16450083647537340e-10</d_IDOT> | ||||||
|  | 			<i_code_on_L2>0</i_code_on_L2> | ||||||
|  | 			<i_GPS_week>799</i_GPS_week> | ||||||
|  | 			<b_L2_P_data_flag>0</b_L2_P_data_flag> | ||||||
|  | 			<i_SV_accuracy>2</i_SV_accuracy> | ||||||
|  | 			<i_SV_health>0</i_SV_health> | ||||||
|  | 			<d_TGD>-8.38190317153930664e-09</d_TGD> | ||||||
|  | 			<d_IODC>1.17000000000000000e+02</d_IODC> | ||||||
|  | 			<i_AODO>27900</i_AODO> | ||||||
|  | 			<b_fit_interval_flag>0</b_fit_interval_flag> | ||||||
|  | 			<d_spare1>0.00000000000000000e+00</d_spare1> | ||||||
|  | 			<d_spare2>0.00000000000000000e+00</d_spare2> | ||||||
|  | 			<d_A_f0>2.69209500402212143e-04</d_A_f0> | ||||||
|  | 			<d_A_f1>4.20641299569979229e-12</d_A_f1> | ||||||
|  | 			<d_A_f2>0.00000000000000000e+00</d_A_f2> | ||||||
|  | 			<b_integrity_status_flag>0</b_integrity_status_flag> | ||||||
|  | 			<b_alert_flag>0</b_alert_flag> | ||||||
|  | 			<b_antispoofing_flag>0</b_antispoofing_flag> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>23</first> | ||||||
|  | 		<second> | ||||||
|  | 			<i_satellite_PRN>23</i_satellite_PRN> | ||||||
|  | 			<d_TOW>5.18448000000000000e+05</d_TOW> | ||||||
|  | 			<d_IODE_SF2>4.10000000000000000e+01</d_IODE_SF2> | ||||||
|  | 			<d_IODE_SF3>4.10000000000000000e+01</d_IODE_SF3> | ||||||
|  | 			<d_Crs>1.20250000000000000e+02</d_Crs> | ||||||
|  | 			<d_Delta_n>4.45161399901998963e-09</d_Delta_n> | ||||||
|  | 			<d_M_0>3.04794581942897569e+00</d_M_0> | ||||||
|  | 			<d_Cuc>6.13741576671600342e-06</d_Cuc> | ||||||
|  | 			<d_e_eccentricity>9.67817602213471954e-03</d_e_eccentricity> | ||||||
|  | 			<d_Cus>1.14180147647857666e-05</d_Cus> | ||||||
|  | 			<d_sqrt_A>5.15370163154602051e+03</d_sqrt_A> | ||||||
|  | 			<d_Toe>5.18400000000000000e+05</d_Toe> | ||||||
|  | 			<d_Toc>5.18400000000000000e+05</d_Toc> | ||||||
|  | 			<d_Cic>-6.14672899246215820e-08</d_Cic> | ||||||
|  | 			<d_OMEGA0>3.04748172476042711e+00</d_OMEGA0> | ||||||
|  | 			<d_Cis>-1.04308128356933594e-07</d_Cis> | ||||||
|  | 			<d_i_0>9.50229191282804808e-01</d_i_0> | ||||||
|  | 			<d_Crc>1.56000000000000000e+02</d_Crc> | ||||||
|  | 			<d_OMEGA>-2.71676891930177256e+00</d_OMEGA> | ||||||
|  | 			<d_OMEGA_DOT>-7.78032408172749087e-09</d_OMEGA_DOT> | ||||||
|  | 			<d_IDOT>-2.75011455330984601e-11</d_IDOT> | ||||||
|  | 			<i_code_on_L2>0</i_code_on_L2> | ||||||
|  | 			<i_GPS_week>799</i_GPS_week> | ||||||
|  | 			<b_L2_P_data_flag>0</b_L2_P_data_flag> | ||||||
|  | 			<i_SV_accuracy>2</i_SV_accuracy> | ||||||
|  | 			<i_SV_health>0</i_SV_health> | ||||||
|  | 			<d_TGD>-1.95577740669250488e-08</d_TGD> | ||||||
|  | 			<d_IODC>4.10000000000000000e+01</d_IODC> | ||||||
|  | 			<i_AODO>27900</i_AODO> | ||||||
|  | 			<b_fit_interval_flag>0</b_fit_interval_flag> | ||||||
|  | 			<d_spare1>0.00000000000000000e+00</d_spare1> | ||||||
|  | 			<d_spare2>0.00000000000000000e+00</d_spare2> | ||||||
|  | 			<d_A_f0>-7.56788067519664764e-05</d_A_f0> | ||||||
|  | 			<d_A_f1>-2.72848410531878391e-12</d_A_f1> | ||||||
|  | 			<d_A_f2>0.00000000000000000e+00</d_A_f2> | ||||||
|  | 			<b_integrity_status_flag>0</b_integrity_status_flag> | ||||||
|  | 			<b_alert_flag>0</b_alert_flag> | ||||||
|  | 			<b_antispoofing_flag>0</b_antispoofing_flag> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>28</first> | ||||||
|  | 		<second> | ||||||
|  | 			<i_satellite_PRN>28</i_satellite_PRN> | ||||||
|  | 			<d_TOW>5.18448000000000000e+05</d_TOW> | ||||||
|  | 			<d_IODE_SF2>3.30000000000000000e+01</d_IODE_SF2> | ||||||
|  | 			<d_IODE_SF3>3.30000000000000000e+01</d_IODE_SF3> | ||||||
|  | 			<d_Crs>-1.27750000000000000e+02</d_Crs> | ||||||
|  | 			<d_Delta_n>4.04302555109966970e-09</d_Delta_n> | ||||||
|  | 			<d_M_0>-1.16607683198628931e+00</d_M_0> | ||||||
|  | 			<d_Cuc>-6.37024641036987305e-06</d_Cuc> | ||||||
|  | 			<d_e_eccentricity>1.97223023278638686e-02</d_e_eccentricity> | ||||||
|  | 			<d_Cus>5.66989183425903320e-06</d_Cus> | ||||||
|  | 			<d_sqrt_A>5.15368548965454102e+03</d_sqrt_A> | ||||||
|  | 			<d_Toe>5.18400000000000000e+05</d_Toe> | ||||||
|  | 			<d_Toc>5.18400000000000000e+05</d_Toc> | ||||||
|  | 			<d_Cic>-1.37835741043090820e-07</d_Cic> | ||||||
|  | 			<d_OMEGA0>-1.08006546321039543e+00</d_OMEGA0> | ||||||
|  | 			<d_Cis>4.35858964920043945e-07</d_Cis> | ||||||
|  | 			<d_i_0>9.87961552655681530e-01</d_i_0> | ||||||
|  | 			<d_Crc>2.84718750000000000e+02</d_Crc> | ||||||
|  | 			<d_OMEGA>-1.69047108635756738e+00</d_OMEGA> | ||||||
|  | 			<d_OMEGA_DOT>-8.17855495535612472e-09</d_OMEGA_DOT> | ||||||
|  | 			<d_IDOT>-4.44661379074124424e-10</d_IDOT> | ||||||
|  | 			<i_code_on_L2>0</i_code_on_L2> | ||||||
|  | 			<i_GPS_week>799</i_GPS_week> | ||||||
|  | 			<b_L2_P_data_flag>0</b_L2_P_data_flag> | ||||||
|  | 			<i_SV_accuracy>2</i_SV_accuracy> | ||||||
|  | 			<i_SV_health>0</i_SV_health> | ||||||
|  | 			<d_TGD>-1.11758708953857422e-08</d_TGD> | ||||||
|  | 			<d_IODC>3.30000000000000000e+01</d_IODC> | ||||||
|  | 			<i_AODO>27900</i_AODO> | ||||||
|  | 			<b_fit_interval_flag>0</b_fit_interval_flag> | ||||||
|  | 			<d_spare1>0.00000000000000000e+00</d_spare1> | ||||||
|  | 			<d_spare2>0.00000000000000000e+00</d_spare2> | ||||||
|  | 			<d_A_f0>4.06486913561820984e-04</d_A_f0> | ||||||
|  | 			<d_A_f1>2.61479726759716828e-12</d_A_f1> | ||||||
|  | 			<d_A_f2>0.00000000000000000e+00</d_A_f2> | ||||||
|  | 			<b_integrity_status_flag>0</b_integrity_status_flag> | ||||||
|  | 			<b_alert_flag>0</b_alert_flag> | ||||||
|  | 			<b_antispoofing_flag>0</b_antispoofing_flag> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | </GNSS-SDR_ephemeris_map> | ||||||
|  | </boost_serialization> | ||||||
							
								
								
									
										358
									
								
								src/tests/data/rtklib_test/obs_test1.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										358
									
								
								src/tests/data/rtklib_test/obs_test1.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,358 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> | ||||||
|  | <!DOCTYPE boost_serialization> | ||||||
|  | <boost_serialization signature="serialization::archive" version="12"> | ||||||
|  | <GNSS-SDR_gnss_synchro_map class_id="0" tracking_level="0" version="0"> | ||||||
|  | 	<count>10</count> | ||||||
|  | 	<item_version>0</item_version> | ||||||
|  | 	<item class_id="1" tracking_level="0" version="0"> | ||||||
|  | 		<first>0</first> | ||||||
|  | 		<second class_id="2" tracking_level="0" version="0"> | ||||||
|  | 			<System>71</System> | ||||||
|  | 			<Signal> | ||||||
|  | 				<count>3</count> | ||||||
|  | 				<item>49</item> | ||||||
|  | 				<item>67</item> | ||||||
|  | 				<item>0</item> | ||||||
|  | 			</Signal> | ||||||
|  | 			<PRN>1</PRN> | ||||||
|  | 			<Channel_ID>0</Channel_ID> | ||||||
|  | 			<Acq_delay_samples>2.28200000000000000e+03</Acq_delay_samples> | ||||||
|  | 			<Acq_doppler_hz>-2.50000000000000000e+03</Acq_doppler_hz> | ||||||
|  | 			<Acq_samplestamp_samples>10791</Acq_samplestamp_samples> | ||||||
|  | 			<Acq_doppler_step>0</Acq_doppler_step> | ||||||
|  | 			<Flag_valid_acquisition>0</Flag_valid_acquisition> | ||||||
|  | 			<fs>2600000</fs> | ||||||
|  | 			<Prompt_I>-3.85959140625000000e+04</Prompt_I> | ||||||
|  | 			<Prompt_Q>-9.03592163085937500e+02</Prompt_Q> | ||||||
|  | 			<CN0_dB_hz>5.96898384094238281e+01</CN0_dB_hz> | ||||||
|  | 			<Carrier_Doppler_hz>-2.57914688873291016e+03</Carrier_Doppler_hz> | ||||||
|  | 			<Carrier_phase_rads>8.35350813421410858e+05</Carrier_phase_rads> | ||||||
|  | 			<Code_phase_samples>3.31084377635761484e-01</Code_phase_samples> | ||||||
|  | 			<Tracking_sample_counter>133923691</Tracking_sample_counter> | ||||||
|  | 			<Flag_valid_symbol_output>1</Flag_valid_symbol_output> | ||||||
|  | 			<correlation_length_ms>1</correlation_length_ms> | ||||||
|  | 			<Flag_valid_word>1</Flag_valid_word> | ||||||
|  | 			<TOW_at_current_symbol_ms>518451424</TOW_at_current_symbol_ms> | ||||||
|  | 			<Pseudorange_m>2.28178186234515086e+07</Pseudorange_m> | ||||||
|  | 			<RX_time>5.18451500000000000e+05</RX_time> | ||||||
|  | 			<Flag_valid_pseudorange>1</Flag_valid_pseudorange> | ||||||
|  | 			<interp_TOW_ms>5.18451423887949765e+08</interp_TOW_ms> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>1</first> | ||||||
|  | 		<second> | ||||||
|  | 			<System>71</System> | ||||||
|  | 			<Signal> | ||||||
|  | 				<count>3</count> | ||||||
|  | 				<item>49</item> | ||||||
|  | 				<item>67</item> | ||||||
|  | 				<item>0</item> | ||||||
|  | 			</Signal> | ||||||
|  | 			<PRN>3</PRN> | ||||||
|  | 			<Channel_ID>1</Channel_ID> | ||||||
|  | 			<Acq_delay_samples>2.38500000000000000e+03</Acq_delay_samples> | ||||||
|  | 			<Acq_doppler_hz>-3.00000000000000000e+03</Acq_doppler_hz> | ||||||
|  | 			<Acq_samplestamp_samples>68450858</Acq_samplestamp_samples> | ||||||
|  | 			<Acq_doppler_step>0</Acq_doppler_step> | ||||||
|  | 			<Flag_valid_acquisition>0</Flag_valid_acquisition> | ||||||
|  | 			<fs>2600000</fs> | ||||||
|  | 			<Prompt_I>-4.34972734375000000e+04</Prompt_I> | ||||||
|  | 			<Prompt_Q>4.21364685058593750e+02</Prompt_Q> | ||||||
|  | 			<CN0_dB_hz>5.16798934936523438e+01</CN0_dB_hz> | ||||||
|  | 			<Carrier_Doppler_hz>-3.12509065246582031e+03</Carrier_Doppler_hz> | ||||||
|  | 			<Carrier_phase_rads>4.93910706686261110e+05</Carrier_phase_rads> | ||||||
|  | 			<Code_phase_samples>7.36033200862493686e-01</Code_phase_samples> | ||||||
|  | 			<Tracking_sample_counter>133923971</Tracking_sample_counter> | ||||||
|  | 			<Flag_valid_symbol_output>1</Flag_valid_symbol_output> | ||||||
|  | 			<correlation_length_ms>1</correlation_length_ms> | ||||||
|  | 			<Flag_valid_word>1</Flag_valid_word> | ||||||
|  | 			<TOW_at_current_symbol_ms>518451431</TOW_at_current_symbol_ms> | ||||||
|  | 			<Pseudorange_m>2.07516033774388395e+07</Pseudorange_m> | ||||||
|  | 			<RX_time>5.18451500000000000e+05</RX_time> | ||||||
|  | 			<Flag_valid_pseudorange>1</Flag_valid_pseudorange> | ||||||
|  | 			<interp_TOW_ms>5.18451430780101955e+08</interp_TOW_ms> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>2</first> | ||||||
|  | 		<second> | ||||||
|  | 			<System>71</System> | ||||||
|  | 			<Signal> | ||||||
|  | 				<count>3</count> | ||||||
|  | 				<item>49</item> | ||||||
|  | 				<item>67</item> | ||||||
|  | 				<item>0</item> | ||||||
|  | 			</Signal> | ||||||
|  | 			<PRN>28</PRN> | ||||||
|  | 			<Channel_ID>2</Channel_ID> | ||||||
|  | 			<Acq_delay_samples>1.52700000000000000e+03</Acq_delay_samples> | ||||||
|  | 			<Acq_doppler_hz>-3.00000000000000000e+03</Acq_doppler_hz> | ||||||
|  | 			<Acq_samplestamp_samples>1350770</Acq_samplestamp_samples> | ||||||
|  | 			<Acq_doppler_step>0</Acq_doppler_step> | ||||||
|  | 			<Flag_valid_acquisition>0</Flag_valid_acquisition> | ||||||
|  | 			<fs>2600000</fs> | ||||||
|  | 			<Prompt_I>4.46268046875000000e+04</Prompt_I> | ||||||
|  | 			<Prompt_Q>-3.98811938476562500e+03</Prompt_Q> | ||||||
|  | 			<CN0_dB_hz>5.25376167297363281e+01</CN0_dB_hz> | ||||||
|  | 			<Carrier_Doppler_hz>-2.92984253692626953e+03</Carrier_Doppler_hz> | ||||||
|  | 			<Carrier_phase_rads>9.35704822809229488e+05</Carrier_phase_rads> | ||||||
|  | 			<Code_phase_samples>9.30327007595224131e-01</Code_phase_samples> | ||||||
|  | 			<Tracking_sample_counter>133923941</Tracking_sample_counter> | ||||||
|  | 			<Flag_valid_symbol_output>1</Flag_valid_symbol_output> | ||||||
|  | 			<correlation_length_ms>1</correlation_length_ms> | ||||||
|  | 			<Flag_valid_word>1</Flag_valid_word> | ||||||
|  | 			<TOW_at_current_symbol_ms>518451436</TOW_at_current_symbol_ms> | ||||||
|  | 			<Pseudorange_m>1.92492043561209217e+07</Pseudorange_m> | ||||||
|  | 			<RX_time>5.18451500000000000e+05</RX_time> | ||||||
|  | 			<Flag_valid_pseudorange>1</Flag_valid_pseudorange> | ||||||
|  | 			<interp_TOW_ms>5.18451435791565657e+08</interp_TOW_ms> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>4</first> | ||||||
|  | 		<second> | ||||||
|  | 			<System>71</System> | ||||||
|  | 			<Signal> | ||||||
|  | 				<count>3</count> | ||||||
|  | 				<item>49</item> | ||||||
|  | 				<item>67</item> | ||||||
|  | 				<item>0</item> | ||||||
|  | 			</Signal> | ||||||
|  | 			<PRN>23</PRN> | ||||||
|  | 			<Channel_ID>4</Channel_ID> | ||||||
|  | 			<Acq_delay_samples>1.13100000000000000e+03</Acq_delay_samples> | ||||||
|  | 			<Acq_doppler_hz>1.00000000000000000e+03</Acq_doppler_hz> | ||||||
|  | 			<Acq_samplestamp_samples>994247</Acq_samplestamp_samples> | ||||||
|  | 			<Acq_doppler_step>0</Acq_doppler_step> | ||||||
|  | 			<Flag_valid_acquisition>0</Flag_valid_acquisition> | ||||||
|  | 			<fs>2600000</fs> | ||||||
|  | 			<Prompt_I>3.98655546875000000e+04</Prompt_I> | ||||||
|  | 			<Prompt_Q>-8.63781860351562500e+02</Prompt_Q> | ||||||
|  | 			<CN0_dB_hz>5.24684982299804688e+01</CN0_dB_hz> | ||||||
|  | 			<Carrier_Doppler_hz>1.09281750951009121e+03</Carrier_Doppler_hz> | ||||||
|  | 			<Carrier_phase_rads>-3.54128275530727289e+05</Carrier_phase_rads> | ||||||
|  | 			<Code_phase_samples>4.08304036132904002e-01</Code_phase_samples> | ||||||
|  | 			<Tracking_sample_counter>133922883</Tracking_sample_counter> | ||||||
|  | 			<Flag_valid_symbol_output>1</Flag_valid_symbol_output> | ||||||
|  | 			<correlation_length_ms>1</correlation_length_ms> | ||||||
|  | 			<Flag_valid_word>1</Flag_valid_word> | ||||||
|  | 			<TOW_at_current_symbol_ms>518451429</TOW_at_current_symbol_ms> | ||||||
|  | 			<Pseudorange_m>2.12256989876578376e+07</Pseudorange_m> | ||||||
|  | 			<RX_time>5.18451500000000000e+05</RX_time> | ||||||
|  | 			<Flag_valid_pseudorange>1</Flag_valid_pseudorange> | ||||||
|  | 			<interp_TOW_ms>5.18451429198689222e+08</interp_TOW_ms> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>5</first> | ||||||
|  | 		<second> | ||||||
|  | 			<System>71</System> | ||||||
|  | 			<Signal> | ||||||
|  | 				<count>3</count> | ||||||
|  | 				<item>49</item> | ||||||
|  | 				<item>67</item> | ||||||
|  | 				<item>0</item> | ||||||
|  | 			</Signal> | ||||||
|  | 			<PRN>2</PRN> | ||||||
|  | 			<Channel_ID>5</Channel_ID> | ||||||
|  | 			<Acq_delay_samples>5.38000000000000000e+02</Acq_delay_samples> | ||||||
|  | 			<Acq_doppler_hz>1.75000000000000000e+03</Acq_doppler_hz> | ||||||
|  | 			<Acq_samplestamp_samples>4917751</Acq_samplestamp_samples> | ||||||
|  | 			<Acq_doppler_step>0</Acq_doppler_step> | ||||||
|  | 			<Flag_valid_acquisition>0</Flag_valid_acquisition> | ||||||
|  | 			<fs>2600000</fs> | ||||||
|  | 			<Prompt_I>-4.72456406250000000e+04</Prompt_I> | ||||||
|  | 			<Prompt_Q>-2.63723022460937500e+02</Prompt_Q> | ||||||
|  | 			<CN0_dB_hz>4.89446220397949219e+01</CN0_dB_hz> | ||||||
|  | 			<Carrier_Doppler_hz>1.83319645690917969e+03</Carrier_Doppler_hz> | ||||||
|  | 			<Carrier_phase_rads>-5.72184006019302527e+05</Carrier_phase_rads> | ||||||
|  | 			<Code_phase_samples>5.89544135488722532e-01</Code_phase_samples> | ||||||
|  | 			<Tracking_sample_counter>133922337</Tracking_sample_counter> | ||||||
|  | 			<Flag_valid_symbol_output>1</Flag_valid_symbol_output> | ||||||
|  | 			<correlation_length_ms>1</correlation_length_ms> | ||||||
|  | 			<Flag_valid_word>1</Flag_valid_word> | ||||||
|  | 			<TOW_at_current_symbol_ms>518451430</TOW_at_current_symbol_ms> | ||||||
|  | 			<Pseudorange_m>2.08629709015843943e+07</Pseudorange_m> | ||||||
|  | 			<RX_time>5.18451500000000000e+05</RX_time> | ||||||
|  | 			<Flag_valid_pseudorange>1</Flag_valid_pseudorange> | ||||||
|  | 			<interp_TOW_ms>5.18451430408619881e+08</interp_TOW_ms> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>6</first> | ||||||
|  | 		<second> | ||||||
|  | 			<System>71</System> | ||||||
|  | 			<Signal> | ||||||
|  | 				<count>3</count> | ||||||
|  | 				<item>49</item> | ||||||
|  | 				<item>67</item> | ||||||
|  | 				<item>0</item> | ||||||
|  | 			</Signal> | ||||||
|  | 			<PRN>17</PRN> | ||||||
|  | 			<Channel_ID>6</Channel_ID> | ||||||
|  | 			<Acq_delay_samples>2.21000000000000000e+02</Acq_delay_samples> | ||||||
|  | 			<Acq_doppler_hz>2.50000000000000000e+02</Acq_doppler_hz> | ||||||
|  | 			<Acq_samplestamp_samples>514377</Acq_samplestamp_samples> | ||||||
|  | 			<Acq_doppler_step>0</Acq_doppler_step> | ||||||
|  | 			<Flag_valid_acquisition>0</Flag_valid_acquisition> | ||||||
|  | 			<fs>2600000</fs> | ||||||
|  | 			<Prompt_I>4.27717460937500000e+04</Prompt_I> | ||||||
|  | 			<Prompt_Q>-9.45822082519531250e+02</Prompt_Q> | ||||||
|  | 			<CN0_dB_hz>5.38986015319824219e+01</CN0_dB_hz> | ||||||
|  | 			<Carrier_Doppler_hz>2.73018497467041016e+02</Carrier_Doppler_hz> | ||||||
|  | 			<Carrier_phase_rads>-9.09813659855529113e+04</Carrier_phase_rads> | ||||||
|  | 			<Code_phase_samples>6.57473345280777721e-01</Code_phase_samples> | ||||||
|  | 			<Tracking_sample_counter>133923172</Tracking_sample_counter> | ||||||
|  | 			<Flag_valid_symbol_output>1</Flag_valid_symbol_output> | ||||||
|  | 			<correlation_length_ms>1</correlation_length_ms> | ||||||
|  | 			<Flag_valid_word>1</Flag_valid_word> | ||||||
|  | 			<TOW_at_current_symbol_ms>518451440</TOW_at_current_symbol_ms> | ||||||
|  | 			<Pseudorange_m>1.79613337841309197e+07</Pseudorange_m> | ||||||
|  | 			<RX_time>5.18451500000000000e+05</RX_time> | ||||||
|  | 			<Flag_valid_pseudorange>1</Flag_valid_pseudorange> | ||||||
|  | 			<interp_TOW_ms>5.18451440087439477e+08</interp_TOW_ms> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>7</first> | ||||||
|  | 		<second> | ||||||
|  | 			<System>71</System> | ||||||
|  | 			<Signal> | ||||||
|  | 				<count>3</count> | ||||||
|  | 				<item>49</item> | ||||||
|  | 				<item>67</item> | ||||||
|  | 				<item>0</item> | ||||||
|  | 			</Signal> | ||||||
|  | 			<PRN>9</PRN> | ||||||
|  | 			<Channel_ID>7</Channel_ID> | ||||||
|  | 			<Acq_delay_samples>1.56900000000000000e+03</Acq_delay_samples> | ||||||
|  | 			<Acq_doppler_hz>2.25000000000000000e+03</Acq_doppler_hz> | ||||||
|  | 			<Acq_samplestamp_samples>7365787</Acq_samplestamp_samples> | ||||||
|  | 			<Acq_doppler_step>0</Acq_doppler_step> | ||||||
|  | 			<Flag_valid_acquisition>0</Flag_valid_acquisition> | ||||||
|  | 			<fs>2600000</fs> | ||||||
|  | 			<Prompt_I>-3.96159960937500000e+04</Prompt_I> | ||||||
|  | 			<Prompt_Q>-5.03847460937500000e+03</Prompt_Q> | ||||||
|  | 			<CN0_dB_hz>5.33032913208007812e+01</CN0_dB_hz> | ||||||
|  | 			<Carrier_Doppler_hz>2.30021731185913086e+03</Carrier_Doppler_hz> | ||||||
|  | 			<Carrier_phase_rads>-7.04913853936602012e+05</Carrier_phase_rads> | ||||||
|  | 			<Code_phase_samples>3.21518194999043772e-01</Code_phase_samples> | ||||||
|  | 			<Tracking_sample_counter>133922169</Tracking_sample_counter> | ||||||
|  | 			<Flag_valid_symbol_output>1</Flag_valid_symbol_output> | ||||||
|  | 			<correlation_length_ms>1</correlation_length_ms> | ||||||
|  | 			<Flag_valid_word>1</Flag_valid_word> | ||||||
|  | 			<TOW_at_current_symbol_ms>518451430</TOW_at_current_symbol_ms> | ||||||
|  | 			<Pseudorange_m>2.08435687343175523e+07</Pseudorange_m> | ||||||
|  | 			<RX_time>5.18451500000000000e+05</RX_time> | ||||||
|  | 			<Flag_valid_pseudorange>1</Flag_valid_pseudorange> | ||||||
|  | 			<interp_TOW_ms>5.18451430473338544e+08</interp_TOW_ms> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>8</first> | ||||||
|  | 		<second> | ||||||
|  | 			<System>71</System> | ||||||
|  | 			<Signal> | ||||||
|  | 				<count>3</count> | ||||||
|  | 				<item>49</item> | ||||||
|  | 				<item>67</item> | ||||||
|  | 				<item>0</item> | ||||||
|  | 			</Signal> | ||||||
|  | 			<PRN>10</PRN> | ||||||
|  | 			<Channel_ID>8</Channel_ID> | ||||||
|  | 			<Acq_delay_samples>2.12600000000000000e+03</Acq_delay_samples> | ||||||
|  | 			<Acq_doppler_hz>2.75000000000000000e+03</Acq_doppler_hz> | ||||||
|  | 			<Acq_samplestamp_samples>2173576</Acq_samplestamp_samples> | ||||||
|  | 			<Acq_doppler_step>0</Acq_doppler_step> | ||||||
|  | 			<Flag_valid_acquisition>0</Flag_valid_acquisition> | ||||||
|  | 			<fs>2600000</fs> | ||||||
|  | 			<Prompt_I>4.00322539062500000e+04</Prompt_I> | ||||||
|  | 			<Prompt_Q>-3.88590087890625000e+02</Prompt_Q> | ||||||
|  | 			<CN0_dB_hz>4.85561523437500000e+01</CN0_dB_hz> | ||||||
|  | 			<Carrier_Doppler_hz>2.81225794982910156e+03</Carrier_Doppler_hz> | ||||||
|  | 			<Carrier_phase_rads>-8.99142229977656389e+05</Carrier_phase_rads> | ||||||
|  | 			<Code_phase_samples>1.02370741655249731e-01</Code_phase_samples> | ||||||
|  | 			<Tracking_sample_counter>133922664</Tracking_sample_counter> | ||||||
|  | 			<Flag_valid_symbol_output>1</Flag_valid_symbol_output> | ||||||
|  | 			<correlation_length_ms>1</correlation_length_ms> | ||||||
|  | 			<Flag_valid_word>1</Flag_valid_word> | ||||||
|  | 			<TOW_at_current_symbol_ms>518451438</TOW_at_current_symbol_ms> | ||||||
|  | 			<Pseudorange_m>1.85022797143675610e+07</Pseudorange_m> | ||||||
|  | 			<RX_time>5.18451500000000000e+05</RX_time> | ||||||
|  | 			<Flag_valid_pseudorange>1</Flag_valid_pseudorange> | ||||||
|  | 			<interp_TOW_ms>5.18451438283038080e+08</interp_TOW_ms> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>9</first> | ||||||
|  | 		<second> | ||||||
|  | 			<System>71</System> | ||||||
|  | 			<Signal> | ||||||
|  | 				<count>3</count> | ||||||
|  | 				<item>49</item> | ||||||
|  | 				<item>67</item> | ||||||
|  | 				<item>0</item> | ||||||
|  | 			</Signal> | ||||||
|  | 			<PRN>12</PRN> | ||||||
|  | 			<Channel_ID>9</Channel_ID> | ||||||
|  | 			<Acq_delay_samples>2.13000000000000000e+02</Acq_delay_samples> | ||||||
|  | 			<Acq_doppler_hz>3.00000000000000000e+03</Acq_doppler_hz> | ||||||
|  | 			<Acq_samplestamp_samples>7464974</Acq_samplestamp_samples> | ||||||
|  | 			<Acq_doppler_step>0</Acq_doppler_step> | ||||||
|  | 			<Flag_valid_acquisition>0</Flag_valid_acquisition> | ||||||
|  | 			<fs>2600000</fs> | ||||||
|  | 			<Prompt_I>-4.03654140625000000e+04</Prompt_I> | ||||||
|  | 			<Prompt_Q>3.92351245117187500e+03</Prompt_Q> | ||||||
|  | 			<CN0_dB_hz>5.17314453125000000e+01</CN0_dB_hz> | ||||||
|  | 			<Carrier_Doppler_hz>3.03019989013671875e+03</Carrier_Doppler_hz> | ||||||
|  | 			<Carrier_phase_rads>-9.28340507655202877e+05</Carrier_phase_rads> | ||||||
|  | 			<Code_phase_samples>5.73995602361264901e-01</Code_phase_samples> | ||||||
|  | 			<Tracking_sample_counter>133923741</Tracking_sample_counter> | ||||||
|  | 			<Flag_valid_symbol_output>1</Flag_valid_symbol_output> | ||||||
|  | 			<correlation_length_ms>1</correlation_length_ms> | ||||||
|  | 			<Flag_valid_word>1</Flag_valid_word> | ||||||
|  | 			<TOW_at_current_symbol_ms>518451427</TOW_at_current_symbol_ms> | ||||||
|  | 			<Pseudorange_m>2.19242346189941987e+07</Pseudorange_m> | ||||||
|  | 			<RX_time>5.18451500000000000e+05</RX_time> | ||||||
|  | 			<Flag_valid_pseudorange>1</Flag_valid_pseudorange> | ||||||
|  | 			<interp_TOW_ms>5.18451426868625164e+08</interp_TOW_ms> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | 	<item> | ||||||
|  | 		<first>10</first> | ||||||
|  | 		<second> | ||||||
|  | 			<System>71</System> | ||||||
|  | 			<Signal> | ||||||
|  | 				<count>3</count> | ||||||
|  | 				<item>49</item> | ||||||
|  | 				<item>67</item> | ||||||
|  | 				<item>0</item> | ||||||
|  | 			</Signal> | ||||||
|  | 			<PRN>6</PRN> | ||||||
|  | 			<Channel_ID>10</Channel_ID> | ||||||
|  | 			<Acq_delay_samples>4.70000000000000000e+01</Acq_delay_samples> | ||||||
|  | 			<Acq_doppler_hz>5.00000000000000000e+02</Acq_doppler_hz> | ||||||
|  | 			<Acq_samplestamp_samples>1859813</Acq_samplestamp_samples> | ||||||
|  | 			<Acq_doppler_step>0</Acq_doppler_step> | ||||||
|  | 			<Flag_valid_acquisition>0</Flag_valid_acquisition> | ||||||
|  | 			<fs>2600000</fs> | ||||||
|  | 			<Prompt_I>3.87814335937500000e+04</Prompt_I> | ||||||
|  | 			<Prompt_Q>2.13637329101562500e+03</Prompt_Q> | ||||||
|  | 			<CN0_dB_hz>6.00463027954101562e+01</CN0_dB_hz> | ||||||
|  | 			<Carrier_Doppler_hz>5.54514957427978516e+02</Carrier_Doppler_hz> | ||||||
|  | 			<Carrier_phase_rads>-1.78723083774703584e+05</Carrier_phase_rads> | ||||||
|  | 			<Code_phase_samples>3.47952294631795667e-01</Code_phase_samples> | ||||||
|  | 			<Tracking_sample_counter>133924211</Tracking_sample_counter> | ||||||
|  | 			<Flag_valid_symbol_output>1</Flag_valid_symbol_output> | ||||||
|  | 			<correlation_length_ms>1</correlation_length_ms> | ||||||
|  | 			<Flag_valid_word>1</Flag_valid_word> | ||||||
|  | 			<TOW_at_current_symbol_ms>518451439</TOW_at_current_symbol_ms> | ||||||
|  | 			<Pseudorange_m>1.83808922785463184e+07</Pseudorange_m> | ||||||
|  | 			<RX_time>5.18451500000000000e+05</RX_time> | ||||||
|  | 			<Flag_valid_pseudorange>1</Flag_valid_pseudorange> | ||||||
|  | 			<interp_TOW_ms>5.18451438687942982e+08</interp_TOW_ms> | ||||||
|  | 		</second> | ||||||
|  | 	</item> | ||||||
|  | </GNSS-SDR_gnss_synchro_map> | ||||||
|  | </boost_serialization> | ||||||
| @@ -354,6 +354,7 @@ int PositionSystemTest::configure_receiver() | |||||||
|             config->set_property("Acquisition_1C.dump", "false"); |             config->set_property("Acquisition_1C.dump", "false"); | ||||||
|             config->set_property("Acquisition_1C.dump_filename", "./acquisition"); |             config->set_property("Acquisition_1C.dump_filename", "./acquisition"); | ||||||
|             config->set_property("Acquisition_1C.dump_channel", "1"); |             config->set_property("Acquisition_1C.dump_channel", "1"); | ||||||
|  |             config->set_property("Acquisition_1C.blocking", "true"); | ||||||
|  |  | ||||||
|             // Set Tracking |             // Set Tracking | ||||||
|             config->set_property("Tracking_1C.implementation", "GPS_L1_CA_DLL_PLL_Tracking"); |             config->set_property("Tracking_1C.implementation", "GPS_L1_CA_DLL_PLL_Tracking"); | ||||||
|   | |||||||
| @@ -75,7 +75,7 @@ DECLARE_string(log_dir); | |||||||
| #if EXTRA_TESTS | #if EXTRA_TESTS | ||||||
| #include "unit-tests/signal-processing-blocks/acquisition/acq_performance_test.cc" | #include "unit-tests/signal-processing-blocks/acquisition/acq_performance_test.cc" | ||||||
| #include "unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test.cc" | #include "unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test.cc" | ||||||
| #if ENABLE_FPGA | #if FPGA_BLOCKS_TEST | ||||||
| #include "unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test_fpga.cc" | #include "unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test_fpga.cc" | ||||||
| #endif | #endif | ||||||
| #include "unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc" | #include "unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc" | ||||||
| @@ -171,6 +171,7 @@ DECLARE_string(log_dir); | |||||||
| #include "unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test.cc" | #include "unit-tests/signal-processing-blocks/tracking/gps_l1_ca_dll_pll_tracking_test.cc" | ||||||
| #include "unit-tests/signal-processing-blocks/tracking/gps_l1_ca_kf_tracking_test.cc" | #include "unit-tests/signal-processing-blocks/tracking/gps_l1_ca_kf_tracking_test.cc" | ||||||
| #include "unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test.cc" | #include "unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test.cc" | ||||||
|  | #include "unit-tests/signal-processing-blocks/pvt/rtklib_solver_test.cc" | ||||||
| #if FPGA_BLOCKS_TEST | #if FPGA_BLOCKS_TEST | ||||||
| #include "unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test_fpga.cc" | #include "unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test_fpga.cc" | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -236,6 +236,11 @@ public: | |||||||
|         arma::mat& measured_ch1, |         arma::mat& measured_ch1, | ||||||
|         std::string data_title); |         std::string data_title); | ||||||
|  |  | ||||||
|  |     void check_results_duplicated_satellite( | ||||||
|  |         arma::mat& measured_sat1, | ||||||
|  |         arma::mat& measured_sat2, | ||||||
|  |         std::string data_title); | ||||||
|  |  | ||||||
|     HybridObservablesTest() |     HybridObservablesTest() | ||||||
|     { |     { | ||||||
|         factory = std::make_shared<GNSSBlockFactory>(); |         factory = std::make_shared<GNSSBlockFactory>(); | ||||||
| @@ -987,6 +992,207 @@ void HybridObservablesTest::check_results_carrier_doppler( | |||||||
|     ASSERT_LT(rmse_ch0, 30); |     ASSERT_LT(rmse_ch0, 30); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void HybridObservablesTest::check_results_duplicated_satellite( | ||||||
|  |     arma::mat& measured_sat1, | ||||||
|  |     arma::mat& measured_sat2, | ||||||
|  |     std::string data_title) | ||||||
|  | { | ||||||
|  |     //1. True value interpolation to match the measurement times | ||||||
|  |  | ||||||
|  |     double t0 = measured_sat1(0, 0); | ||||||
|  |     int size1 = measured_sat1.col(0).n_rows; | ||||||
|  |     double t1 = measured_sat1(size1 - 1, 0); | ||||||
|  |     arma::vec t = arma::linspace<arma::vec>(t0, t1, floor((t1 - t0) * 1e3)); | ||||||
|  |     //conversion between arma::vec and std:vector | ||||||
|  |     arma::vec t_from_start = arma::linspace<arma::vec>(0, t1 - t0, floor((t1 - t0) * 1e3)); | ||||||
|  |     std::vector<double> time_vector(t_from_start.colptr(0), t_from_start.colptr(0) + t_from_start.n_rows); | ||||||
|  |     //Doppler | ||||||
|  |     arma::vec meas_sat1_doppler_interp; | ||||||
|  |     arma::interp1(measured_sat1.col(0), measured_sat1.col(2), t, meas_sat1_doppler_interp); | ||||||
|  |     arma::vec meas_sat2_doppler_interp; | ||||||
|  |     arma::interp1(measured_sat2.col(0), measured_sat2.col(2), t, meas_sat2_doppler_interp); | ||||||
|  |  | ||||||
|  |     //Carrier Phase | ||||||
|  |     arma::vec meas_sat1_carrier_phase_interp; | ||||||
|  |     arma::vec meas_sat2_carrier_phase_interp; | ||||||
|  |     arma::interp1(measured_sat1.col(0), measured_sat1.col(3), t, meas_sat1_carrier_phase_interp); | ||||||
|  |     arma::interp1(measured_sat2.col(0), measured_sat2.col(3), t, meas_sat2_carrier_phase_interp); | ||||||
|  |  | ||||||
|  |     // generate double difference accumulated carrier phases | ||||||
|  |     //compute error without the accumulated carrier phase offsets (which depends on the receiver starting time) | ||||||
|  |     arma::vec delta_measured_carrier_phase_cycles = (meas_sat1_carrier_phase_interp - meas_sat1_carrier_phase_interp(0)) - (meas_sat2_carrier_phase_interp - meas_sat2_carrier_phase_interp(0)); | ||||||
|  |  | ||||||
|  |     //Pseudoranges | ||||||
|  |     arma::vec meas_sat1_dist_interp; | ||||||
|  |     arma::vec meas_sat2_dist_interp; | ||||||
|  |     arma::interp1(measured_sat1.col(0), measured_sat1.col(4), t, meas_sat1_dist_interp); | ||||||
|  |     arma::interp1(measured_sat2.col(0), measured_sat2.col(4), t, meas_sat2_dist_interp); | ||||||
|  |     // generate delta pseudoranges | ||||||
|  |     arma::vec delta_measured_dist_m = meas_sat1_dist_interp - meas_sat2_dist_interp; | ||||||
|  |  | ||||||
|  |     //Carrier Doppler error | ||||||
|  |     //2. RMSE | ||||||
|  |     arma::vec err_ch0_hz; | ||||||
|  |  | ||||||
|  |     //compute error | ||||||
|  |     err_ch0_hz = meas_sat1_doppler_interp - meas_sat2_doppler_interp; | ||||||
|  |  | ||||||
|  |     arma::vec err2_ch0 = arma::square(err_ch0_hz); | ||||||
|  |     double rmse_ch0 = sqrt(arma::mean(err2_ch0)); | ||||||
|  |  | ||||||
|  |     //3. Mean err and variance | ||||||
|  |     double error_mean_ch0 = arma::mean(err_ch0_hz); | ||||||
|  |     double error_var_ch0 = arma::var(err_ch0_hz); | ||||||
|  |  | ||||||
|  |     // 4. Peaks | ||||||
|  |     double max_error_ch0 = arma::max(err_ch0_hz); | ||||||
|  |     double min_error_ch0 = arma::min(err_ch0_hz); | ||||||
|  |  | ||||||
|  |     //5. report | ||||||
|  |     std::streamsize ss = std::cout.precision(); | ||||||
|  |     std::cout << std::setprecision(10) << data_title << "Carrier Doppler RMSE = " | ||||||
|  |               << rmse_ch0 << ", mean = " << error_mean_ch0 | ||||||
|  |               << ", stdev = " << sqrt(error_var_ch0) | ||||||
|  |               << " (max,min) = " << max_error_ch0 | ||||||
|  |               << "," << min_error_ch0 | ||||||
|  |               << " [Hz]" << std::endl; | ||||||
|  |     std::cout.precision(ss); | ||||||
|  |  | ||||||
|  |     //plots | ||||||
|  |     if (FLAGS_show_plots) | ||||||
|  |         { | ||||||
|  |             Gnuplot g3("linespoints"); | ||||||
|  |             g3.set_title(data_title + "Carrier Doppler error [Hz]"); | ||||||
|  |             g3.set_grid(); | ||||||
|  |             g3.set_xlabel("Time [s]"); | ||||||
|  |             g3.set_ylabel("Carrier Doppler error [Hz]"); | ||||||
|  |             //conversion between arma::vec and std:vector | ||||||
|  |             std::vector<double> error_vec(err_ch0_hz.colptr(0), err_ch0_hz.colptr(0) + err_ch0_hz.n_rows); | ||||||
|  |             g3.cmd("set key box opaque"); | ||||||
|  |             g3.plot_xy(time_vector, error_vec, | ||||||
|  |                 "Carrier Doppler error"); | ||||||
|  |             g3.set_legend(); | ||||||
|  |             g3.savetops(data_title + "Carrier_doppler_error"); | ||||||
|  |  | ||||||
|  |             g3.showonscreen();  // window output | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     //check results against the test tolerance | ||||||
|  |     ASSERT_LT(error_mean_ch0, 5); | ||||||
|  |     ASSERT_GT(error_mean_ch0, -5); | ||||||
|  |     //assuming PLL BW=35 | ||||||
|  |     ASSERT_LT(error_var_ch0, 250); | ||||||
|  |     ASSERT_LT(max_error_ch0, 100); | ||||||
|  |     ASSERT_GT(min_error_ch0, -100); | ||||||
|  |     ASSERT_LT(rmse_ch0, 30); | ||||||
|  |  | ||||||
|  |     //Carrier Phase error | ||||||
|  |     //2. RMSE | ||||||
|  |     arma::vec err_carrier_phase; | ||||||
|  |  | ||||||
|  |     err_carrier_phase = delta_measured_carrier_phase_cycles; | ||||||
|  |     arma::vec err2_carrier_phase = arma::square(err_carrier_phase); | ||||||
|  |     double rmse_carrier_phase = sqrt(arma::mean(err2_carrier_phase)); | ||||||
|  |  | ||||||
|  |     //3. Mean err and variance | ||||||
|  |     double error_mean_carrier_phase = arma::mean(err_carrier_phase); | ||||||
|  |     double error_var_carrier_phase = arma::var(err_carrier_phase); | ||||||
|  |  | ||||||
|  |     // 4. Peaks | ||||||
|  |     double max_error_carrier_phase = arma::max(err_carrier_phase); | ||||||
|  |     double min_error_carrier_phase = arma::min(err_carrier_phase); | ||||||
|  |  | ||||||
|  |     //5. report | ||||||
|  |     ss = std::cout.precision(); | ||||||
|  |     std::cout << std::setprecision(10) << data_title << "Carrier Phase RMSE = " | ||||||
|  |               << rmse_carrier_phase << ", mean = " << error_mean_carrier_phase | ||||||
|  |               << ", stdev = " << sqrt(error_var_carrier_phase) | ||||||
|  |               << " (max,min) = " << max_error_carrier_phase | ||||||
|  |               << "," << min_error_carrier_phase | ||||||
|  |               << " [Cycles]" << std::endl; | ||||||
|  |     std::cout.precision(ss); | ||||||
|  |  | ||||||
|  |     //plots | ||||||
|  |     if (FLAGS_show_plots) | ||||||
|  |         { | ||||||
|  |             Gnuplot g3("linespoints"); | ||||||
|  |             g3.set_title(data_title + "Carrier Phase error [Cycles]"); | ||||||
|  |             g3.set_grid(); | ||||||
|  |             g3.set_xlabel("Time [s]"); | ||||||
|  |             g3.set_ylabel("Carrier Phase error [Cycles]"); | ||||||
|  |             //conversion between arma::vec and std:vector | ||||||
|  |             std::vector<double> range_error_m(err_carrier_phase.colptr(0), err_carrier_phase.colptr(0) + err_carrier_phase.n_rows); | ||||||
|  |             g3.cmd("set key box opaque"); | ||||||
|  |             g3.plot_xy(time_vector, range_error_m, | ||||||
|  |                 "Carrier Phase error"); | ||||||
|  |             g3.set_legend(); | ||||||
|  |             g3.savetops(data_title + "duplicated_satellite_carrier_phase_error"); | ||||||
|  |  | ||||||
|  |             g3.showonscreen();  // window output | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     //check results against the test tolerance | ||||||
|  |     ASSERT_LT(rmse_carrier_phase, 0.25); | ||||||
|  |     ASSERT_LT(error_mean_carrier_phase, 0.2); | ||||||
|  |     ASSERT_GT(error_mean_carrier_phase, -0.2); | ||||||
|  |     ASSERT_LT(error_var_carrier_phase, 0.5); | ||||||
|  |     ASSERT_LT(max_error_carrier_phase, 0.5); | ||||||
|  |     ASSERT_GT(min_error_carrier_phase, -0.5); | ||||||
|  |  | ||||||
|  |     //Pseudorange error | ||||||
|  |     //2. RMSE | ||||||
|  |     arma::vec err_pseudorange; | ||||||
|  |  | ||||||
|  |     err_pseudorange = delta_measured_dist_m; | ||||||
|  |     arma::vec err2_pseudorange = arma::square(err_pseudorange); | ||||||
|  |     double rmse_pseudorange = sqrt(arma::mean(err2_pseudorange)); | ||||||
|  |  | ||||||
|  |     //3. Mean err and variance | ||||||
|  |     double error_mean_pseudorange = arma::mean(err_pseudorange); | ||||||
|  |     double error_var_pseudorange = arma::var(err_pseudorange); | ||||||
|  |  | ||||||
|  |     // 4. Peaks | ||||||
|  |     double max_error_pseudorange = arma::max(err_pseudorange); | ||||||
|  |     double min_error_pseudorange = arma::min(err_pseudorange); | ||||||
|  |  | ||||||
|  |     //5. report | ||||||
|  |     ss = std::cout.precision(); | ||||||
|  |     std::cout << std::setprecision(10) << data_title << "Pseudorange RMSE = " | ||||||
|  |               << rmse_pseudorange << ", mean = " << error_mean_pseudorange | ||||||
|  |               << ", stdev = " << sqrt(error_var_pseudorange) | ||||||
|  |               << " (max,min) = " << max_error_pseudorange | ||||||
|  |               << "," << min_error_pseudorange | ||||||
|  |               << " [meters]" << std::endl; | ||||||
|  |     std::cout.precision(ss); | ||||||
|  |  | ||||||
|  |     //plots | ||||||
|  |     if (FLAGS_show_plots) | ||||||
|  |         { | ||||||
|  |             Gnuplot g3("linespoints"); | ||||||
|  |             g3.set_title(data_title + "Pseudorange error [m]"); | ||||||
|  |             g3.set_grid(); | ||||||
|  |             g3.set_xlabel("Time [s]"); | ||||||
|  |             g3.set_ylabel("Pseudorange error [m]"); | ||||||
|  |             //conversion between arma::vec and std:vector | ||||||
|  |             std::vector<double> range_error_m(err_pseudorange.colptr(0), err_pseudorange.colptr(0) + err_pseudorange.n_rows); | ||||||
|  |             g3.cmd("set key box opaque"); | ||||||
|  |             g3.plot_xy(time_vector, range_error_m, | ||||||
|  |                 "Pseudorrange error"); | ||||||
|  |             g3.set_legend(); | ||||||
|  |             g3.savetops(data_title + "duplicated_satellite_pseudorrange_error"); | ||||||
|  |  | ||||||
|  |             g3.showonscreen();  // window output | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     //check results against the test tolerance | ||||||
|  |     ASSERT_LT(rmse_pseudorange, 3.0); | ||||||
|  |     ASSERT_LT(error_mean_pseudorange, 1.0); | ||||||
|  |     ASSERT_GT(error_mean_pseudorange, -1.0); | ||||||
|  |     ASSERT_LT(error_var_pseudorange, 10.0); | ||||||
|  |     ASSERT_LT(max_error_pseudorange, 10.0); | ||||||
|  |     ASSERT_GT(min_error_pseudorange, -10.0); | ||||||
|  | } | ||||||
|  |  | ||||||
| bool HybridObservablesTest::save_mat_xy(std::vector<double>& x, std::vector<double>& y, std::string filename) | bool HybridObservablesTest::save_mat_xy(std::vector<double>& x, std::vector<double>& y, std::string filename) | ||||||
| { | { | ||||||
|     try |     try | ||||||
| @@ -1535,7 +1741,6 @@ TEST_F(HybridObservablesTest, ValidationOfResults) | |||||||
|                 } |                 } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|     //Cut measurement tail zeros |     //Cut measurement tail zeros | ||||||
|     arma::uvec index; |     arma::uvec index; | ||||||
|     for (unsigned int n = 0; n < measured_obs_vec.size(); n++) |     for (unsigned int n = 0; n < measured_obs_vec.size(); n++) | ||||||
| @@ -1548,9 +1753,7 @@ TEST_F(HybridObservablesTest, ValidationOfResults) | |||||||
|         } |         } | ||||||
|  |  | ||||||
|     //Cut measurement initial transitory of the measurements |     //Cut measurement initial transitory of the measurements | ||||||
|  |  | ||||||
|     double initial_transitory_s = FLAGS_skip_obs_transitory_s; |     double initial_transitory_s = FLAGS_skip_obs_transitory_s; | ||||||
|  |  | ||||||
|     for (unsigned int n = 0; n < measured_obs_vec.size(); n++) |     for (unsigned int n = 0; n < measured_obs_vec.size(); n++) | ||||||
|         { |         { | ||||||
|             index = arma::find(measured_obs_vec.at(n).col(0) >= (measured_obs_vec.at(n)(0, 0) + initial_transitory_s), 1, "first"); |             index = arma::find(measured_obs_vec.at(n).col(0) >= (measured_obs_vec.at(n)(0, 0) + initial_transitory_s), 1, "first"); | ||||||
| @@ -1567,6 +1770,63 @@ TEST_F(HybridObservablesTest, ValidationOfResults) | |||||||
|         } |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     if (FLAGS_duplicated_satellites_test) | ||||||
|  |         { | ||||||
|  |             //special test mode for duplicated satellites | ||||||
|  |             std::vector<int> prn_pairs; | ||||||
|  |             std::stringstream ss(FLAGS_duplicated_satellites_prns); | ||||||
|  |             int i; | ||||||
|  |             while (ss >> i) | ||||||
|  |                 { | ||||||
|  |                     prn_pairs.push_back(i); | ||||||
|  |                     if (ss.peek() == ',') | ||||||
|  |                         ss.ignore(); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |             if (prn_pairs.size() % 2 != 0) | ||||||
|  |                 { | ||||||
|  |                     std::cout << "Test settings error: duplicated_satellites_prns are even\n"; | ||||||
|  |                 } | ||||||
|  |             else | ||||||
|  |                 { | ||||||
|  |                     for (unsigned int n = 0; n < prn_pairs.size(); n = n + 2) | ||||||
|  |                         { | ||||||
|  |                             int sat1_ch_id = -1; | ||||||
|  |                             int sat2_ch_id = -1; | ||||||
|  |                             for (unsigned int ch = 0; ch < measured_obs_vec.size(); ch++) | ||||||
|  |                                 { | ||||||
|  |                                     if (epoch_counters_vec.at(ch) > 10)  //discard non-valid channels | ||||||
|  |                                         { | ||||||
|  |                                             if (gnss_synchro_vec.at(ch).PRN == prn_pairs.at(n)) | ||||||
|  |                                                 { | ||||||
|  |                                                     sat1_ch_id = ch; | ||||||
|  |                                                 } | ||||||
|  |                                             if (gnss_synchro_vec.at(ch).PRN == prn_pairs.at(n + 1)) | ||||||
|  |                                                 { | ||||||
|  |                                                     sat2_ch_id = ch; | ||||||
|  |                                                 } | ||||||
|  |                                         } | ||||||
|  |                                 } | ||||||
|  |                             if (sat1_ch_id != -1 and sat2_ch_id != -1) | ||||||
|  |                                 { | ||||||
|  |                                     //compute single differences for the duplicated satellite | ||||||
|  |  | ||||||
|  |                                     check_results_duplicated_satellite( | ||||||
|  |                                         measured_obs_vec.at(sat1_ch_id), | ||||||
|  |                                         measured_obs_vec.at(sat2_ch_id), | ||||||
|  |                                         "Duplicated sat [CH " + std::to_string(sat1_ch_id) + "," + std::to_string(sat2_ch_id) + "] PRNs " + std::to_string(gnss_synchro_vec.at(sat1_ch_id).PRN) + "," + std::to_string(gnss_synchro_vec.at(sat2_ch_id).PRN) + " "); | ||||||
|  |                                 } | ||||||
|  |                             else | ||||||
|  |                                 { | ||||||
|  |                                     std::cout << "Satellites PRNs " << prn_pairs.at(n) << "and " << prn_pairs.at(n) << " not found\n"; | ||||||
|  |                                 } | ||||||
|  |                         } | ||||||
|  |                 } | ||||||
|  |         } | ||||||
|  |     else | ||||||
|  |         { | ||||||
|  |             //normal mode | ||||||
|  |  | ||||||
|             //Correct the clock error using true values (it is not possible for a receiver to correct |             //Correct the clock error using true values (it is not possible for a receiver to correct | ||||||
|             //the receiver clock offset error at the observables level because it is required the |             //the receiver clock offset error at the observables level because it is required the | ||||||
|             //decoding of the ephemeris data and solve the PVT equations) |             //decoding of the ephemeris data and solve the PVT equations) | ||||||
| @@ -1681,5 +1941,6 @@ TEST_F(HybridObservablesTest, ValidationOfResults) | |||||||
|                             std::cout << "PRN " << gnss_synchro_vec.at(n).PRN << " has NO observations!\n"; |                             std::cout << "PRN " << gnss_synchro_vec.at(n).PRN << " has NO observations!\n"; | ||||||
|                         } |                         } | ||||||
|                 } |                 } | ||||||
|  |         } | ||||||
|     std::cout << "Test completed in " << elapsed_seconds.count() << " [s]" << std::endl; |     std::cout << "Test completed in " << elapsed_seconds.count() << " [s]" << std::endl; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -0,0 +1,443 @@ | |||||||
|  | /*! | ||||||
|  |  * \file rtklib_solver_test.cc | ||||||
|  |  * \brief Implements Unit Test for the rtklib PVT solver class. | ||||||
|  |  * \author Javier Arribas, 2018. jarribas(at)cttc.es | ||||||
|  |  * | ||||||
|  |  * ------------------------------------------------------------------------- | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 2010-2018  (see AUTHORS file for a list of contributors) | ||||||
|  |  * | ||||||
|  |  * GNSS-SDR is a software defined Global Navigation | ||||||
|  |  *          Satellite Systems receiver | ||||||
|  |  * | ||||||
|  |  * This file is part of GNSS-SDR. | ||||||
|  |  * | ||||||
|  |  * GNSS-SDR is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * GNSS-SDR is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with GNSS-SDR. If not, see <https://www.gnu.org/licenses/>. | ||||||
|  |  * | ||||||
|  |  * ------------------------------------------------------------------------- | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include <gtest/gtest.h> | ||||||
|  | #include <string> | ||||||
|  | #include <iomanip> | ||||||
|  | #include <iostream> | ||||||
|  | #include <boost/archive/xml_oarchive.hpp> | ||||||
|  | #include <boost/archive/xml_iarchive.hpp> | ||||||
|  | #include <boost/serialization/map.hpp> | ||||||
|  | #include "rtklib_solver.h" | ||||||
|  | #include "in_memory_configuration.h" | ||||||
|  | #include "gnss_sdr_supl_client.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | rtk_t configure_rtklib_options() | ||||||
|  | { | ||||||
|  |     std::shared_ptr<InMemoryConfiguration> configuration; | ||||||
|  |     configuration = std::make_shared<InMemoryConfiguration>(); | ||||||
|  |     std::string role = "rtklib_solver"; | ||||||
|  |     // custom options | ||||||
|  |     configuration->set_property("rtklib_solver.positioning_mode", "Single"); | ||||||
|  |     configuration->set_property("rtklib_solver.elevation_mask", "0"); | ||||||
|  |     configuration->set_property("rtklib_solver.iono_model", "OFF"); | ||||||
|  |     configuration->set_property("rtklib_solver.trop_model", "OFF"); | ||||||
|  |     //RTKLIB PVT solver options | ||||||
|  |  | ||||||
|  |     // Settings 1 | ||||||
|  |     int positioning_mode = -1; | ||||||
|  |     std::string default_pos_mode("Single"); | ||||||
|  |     std::string positioning_mode_str = configuration->property(role + ".positioning_mode", default_pos_mode); /* (PMODE_XXX) see src/algorithms/libs/rtklib/rtklib.h */ | ||||||
|  |     if (positioning_mode_str.compare("Single") == 0) positioning_mode = PMODE_SINGLE; | ||||||
|  |     if (positioning_mode_str.compare("Static") == 0) positioning_mode = PMODE_STATIC; | ||||||
|  |     if (positioning_mode_str.compare("Kinematic") == 0) positioning_mode = PMODE_KINEMA; | ||||||
|  |     if (positioning_mode_str.compare("PPP_Static") == 0) positioning_mode = PMODE_PPP_STATIC; | ||||||
|  |     if (positioning_mode_str.compare("PPP_Kinematic") == 0) positioning_mode = PMODE_PPP_KINEMA; | ||||||
|  |  | ||||||
|  |     if (positioning_mode == -1) | ||||||
|  |         { | ||||||
|  |             //warn user and set the default | ||||||
|  |             std::cout << "WARNING: Bad specification of positioning mode." << std::endl; | ||||||
|  |             std::cout << "positioning_mode possible values: Single / Static / Kinematic / PPP_Static / PPP_Kinematic" << std::endl; | ||||||
|  |             std::cout << "positioning_mode specified value: " << positioning_mode_str << std::endl; | ||||||
|  |             std::cout << "Setting positioning_mode to Single" << std::endl; | ||||||
|  |             positioning_mode = PMODE_SINGLE; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     int num_bands = 1; | ||||||
|  |  | ||||||
|  |     //    if ((gps_1C_count > 0) || (gal_1B_count > 0) || (glo_1G_count > 0)) num_bands = 1; | ||||||
|  |     //    if (((gps_1C_count > 0) || (gal_1B_count > 0) || (glo_1G_count > 0)) && ((gps_2S_count > 0) || (glo_2G_count > 0))) num_bands = 2; | ||||||
|  |     //    if (((gps_1C_count > 0) || (gal_1B_count > 0) || (glo_1G_count > 0)) && ((gal_E5a_count > 0) || (gal_E5b_count > 0) || (gps_L5_count > 0))) num_bands = 2; | ||||||
|  |     //    if (((gps_1C_count > 0) || (gal_1B_count > 0) || (glo_1G_count > 0)) && ((gps_2S_count > 0) || (glo_2G_count > 0)) && ((gal_E5a_count > 0) || (gal_E5b_count > 0) || (gps_L5_count > 0))) num_bands = 3; | ||||||
|  |  | ||||||
|  |     int number_of_frequencies = configuration->property(role + ".num_bands", num_bands); /* (1:L1, 2:L1+L2, 3:L1+L2+L5) */ | ||||||
|  |     if ((number_of_frequencies < 1) || (number_of_frequencies > 3)) | ||||||
|  |         { | ||||||
|  |             //warn user and set the default | ||||||
|  |             number_of_frequencies = num_bands; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     double elevation_mask = configuration->property(role + ".elevation_mask", 15.0); | ||||||
|  |     if ((elevation_mask < 0.0) || (elevation_mask > 90.0)) | ||||||
|  |         { | ||||||
|  |             //warn user and set the default | ||||||
|  |             LOG(WARNING) << "Erroneous Elevation Mask. Setting to default value of 15.0 degrees"; | ||||||
|  |             elevation_mask = 15.0; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     int dynamics_model = configuration->property(role + ".dynamics_model", 0); /*  dynamics model (0:none, 1:velocity, 2:accel) */ | ||||||
|  |     if ((dynamics_model < 0) || (dynamics_model > 2)) | ||||||
|  |         { | ||||||
|  |             //warn user and set the default | ||||||
|  |             LOG(WARNING) << "Erroneous Dynamics Model configuration. Setting to default value of (0:none)"; | ||||||
|  |             dynamics_model = 0; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     std::string default_iono_model("OFF"); | ||||||
|  |     std::string iono_model_str = configuration->property(role + ".iono_model", default_iono_model); /*  (IONOOPT_XXX) see src/algorithms/libs/rtklib/rtklib.h */ | ||||||
|  |     int iono_model = -1; | ||||||
|  |     if (iono_model_str.compare("OFF") == 0) iono_model = IONOOPT_OFF; | ||||||
|  |     if (iono_model_str.compare("Broadcast") == 0) iono_model = IONOOPT_BRDC; | ||||||
|  |     if (iono_model_str.compare("SBAS") == 0) iono_model = IONOOPT_SBAS; | ||||||
|  |     if (iono_model_str.compare("Iono-Free-LC") == 0) iono_model = IONOOPT_IFLC; | ||||||
|  |     if (iono_model_str.compare("Estimate_STEC") == 0) iono_model = IONOOPT_EST; | ||||||
|  |     if (iono_model_str.compare("IONEX") == 0) iono_model = IONOOPT_TEC; | ||||||
|  |     if (iono_model == -1) | ||||||
|  |         { | ||||||
|  |             //warn user and set the default | ||||||
|  |             std::cout << "WARNING: Bad specification of ionospheric model." << std::endl; | ||||||
|  |             std::cout << "iono_model possible values: OFF / Broadcast / SBAS / Iono-Free-LC / Estimate_STEC / IONEX" << std::endl; | ||||||
|  |             std::cout << "iono_model specified value: " << iono_model_str << std::endl; | ||||||
|  |             std::cout << "Setting iono_model to OFF" << std::endl; | ||||||
|  |             iono_model = IONOOPT_OFF; /* 0: ionosphere option: correction off */ | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     std::string default_trop_model("OFF"); | ||||||
|  |     int trop_model = -1; | ||||||
|  |     std::string trop_model_str = configuration->property(role + ".trop_model", default_trop_model); /*  (TROPOPT_XXX) see src/algorithms/libs/rtklib/rtklib.h */ | ||||||
|  |     if (trop_model_str.compare("OFF") == 0) trop_model = TROPOPT_OFF; | ||||||
|  |     if (trop_model_str.compare("Saastamoinen") == 0) trop_model = TROPOPT_SAAS; | ||||||
|  |     if (trop_model_str.compare("SBAS") == 0) trop_model = TROPOPT_SBAS; | ||||||
|  |     if (trop_model_str.compare("Estimate_ZTD") == 0) trop_model = TROPOPT_EST; | ||||||
|  |     if (trop_model_str.compare("Estimate_ZTD_Grad") == 0) trop_model = TROPOPT_ESTG; | ||||||
|  |     if (trop_model == -1) | ||||||
|  |         { | ||||||
|  |             //warn user and set the default | ||||||
|  |             std::cout << "WARNING: Bad specification of tropospheric model." << std::endl; | ||||||
|  |             std::cout << "trop_model possible values: OFF / Saastamoinen / SBAS / Estimate_ZTD / Estimate_ZTD_Grad" << std::endl; | ||||||
|  |             std::cout << "trop_model specified value: " << trop_model_str << std::endl; | ||||||
|  |             std::cout << "Setting trop_model to OFF" << std::endl; | ||||||
|  |             trop_model = TROPOPT_OFF; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     /* RTKLIB positioning options */ | ||||||
|  |     int sat_PCV = 0; /*  Set whether the satellite antenna PCV (phase center variation) model is used or not. This feature requires a Satellite Antenna PCV File. */ | ||||||
|  |     int rec_PCV = 0; /*  Set whether the receiver antenna PCV (phase center variation) model is used or not. This feature requires a Receiver Antenna PCV File. */ | ||||||
|  |  | ||||||
|  |     /* Set whether the phase windup correction for PPP modes is applied or not. Only applicable to PPP‐* modes.*/ | ||||||
|  |     int phwindup = configuration->property(role + ".phwindup", 0); | ||||||
|  |  | ||||||
|  |     /* Set whether the GPS Block IIA satellites in eclipse are excluded or not. | ||||||
|  |     The eclipsing Block IIA satellites often degrade the PPP solutions due to unpredicted behavior of yaw‐attitude. Only applicable to PPP‐* modes.*/ | ||||||
|  |     int reject_GPS_IIA = configuration->property(role + ".reject_GPS_IIA", 0); | ||||||
|  |  | ||||||
|  |     /* Set whether RAIM (receiver autonomous integrity monitoring) FDE (fault detection and exclusion) feature is enabled or not. | ||||||
|  |     In case of RAIM FDE enabled, a satellite is excluded if SSE (sum of squared errors) of residuals is over a threshold. | ||||||
|  |     The excluded satellite is selected to indicate the minimum SSE. */ | ||||||
|  |     int raim_fde = configuration->property(role + ".raim_fde", 0); | ||||||
|  |  | ||||||
|  |     int earth_tide = configuration->property(role + ".earth_tide", 0); | ||||||
|  |  | ||||||
|  |     int nsys = SYS_GPS; | ||||||
|  |     //    if ((gps_1C_count > 0) || (gps_2S_count > 0) || (gps_L5_count > 0)) nsys += SYS_GPS; | ||||||
|  |     //    if ((gal_1B_count > 0) || (gal_E5a_count > 0) || (gal_E5b_count > 0)) nsys += SYS_GAL; | ||||||
|  |     //    if ((glo_1G_count > 0) || (glo_2G_count > 0)) nsys += SYS_GLO; | ||||||
|  |     int navigation_system = configuration->property(role + ".navigation_system", nsys); /* (SYS_XXX) see src/algorithms/libs/rtklib/rtklib.h */ | ||||||
|  |     if ((navigation_system < 1) || (navigation_system > 255))                           /* GPS: 1   SBAS: 2   GPS+SBAS: 3 Galileo: 8  Galileo+GPS: 9 GPS+SBAS+Galileo: 11 All: 255 */ | ||||||
|  |         { | ||||||
|  |             //warn user and set the default | ||||||
|  |             LOG(WARNING) << "Erroneous Navigation System. Setting to default value of (0:none)"; | ||||||
|  |             navigation_system = nsys; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     // Settings 2 | ||||||
|  |     std::string default_gps_ar("Continuous"); | ||||||
|  |     std::string integer_ambiguity_resolution_gps_str = configuration->property(role + ".AR_GPS", default_gps_ar); /* Integer Ambiguity Resolution mode for GPS (0:off,1:continuous,2:instantaneous,3:fix and hold,4:ppp-ar) */ | ||||||
|  |     int integer_ambiguity_resolution_gps = -1; | ||||||
|  |     if (integer_ambiguity_resolution_gps_str.compare("OFF") == 0) integer_ambiguity_resolution_gps = ARMODE_OFF; | ||||||
|  |     if (integer_ambiguity_resolution_gps_str.compare("Continuous") == 0) integer_ambiguity_resolution_gps = ARMODE_CONT; | ||||||
|  |     if (integer_ambiguity_resolution_gps_str.compare("Instantaneous") == 0) integer_ambiguity_resolution_gps = ARMODE_INST; | ||||||
|  |     if (integer_ambiguity_resolution_gps_str.compare("Fix-and-Hold") == 0) integer_ambiguity_resolution_gps = ARMODE_FIXHOLD; | ||||||
|  |     if (integer_ambiguity_resolution_gps_str.compare("PPP-AR") == 0) integer_ambiguity_resolution_gps = ARMODE_PPPAR; | ||||||
|  |     if (integer_ambiguity_resolution_gps == -1) | ||||||
|  |         { | ||||||
|  |             //warn user and set the default | ||||||
|  |             std::cout << "WARNING: Bad specification of GPS ambiguity resolution method." << std::endl; | ||||||
|  |             std::cout << "AR_GPS possible values: OFF / Continuous / Instantaneous / Fix-and-Hold / PPP-AR" << std::endl; | ||||||
|  |             std::cout << "AR_GPS specified value: " << integer_ambiguity_resolution_gps_str << std::endl; | ||||||
|  |             std::cout << "Setting AR_GPS to OFF" << std::endl; | ||||||
|  |             integer_ambiguity_resolution_gps = ARMODE_OFF; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     int integer_ambiguity_resolution_glo = configuration->property(role + ".AR_GLO", 1); /* Integer Ambiguity Resolution mode for GLONASS (0:off,1:on,2:auto cal,3:ext cal) */ | ||||||
|  |     if ((integer_ambiguity_resolution_glo < 0) || (integer_ambiguity_resolution_glo > 3)) | ||||||
|  |         { | ||||||
|  |             //warn user and set the default | ||||||
|  |             LOG(WARNING) << "Erroneous Integer Ambiguity Resolution for GLONASS . Setting to default value of (1:on)"; | ||||||
|  |             integer_ambiguity_resolution_glo = 1; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     int integer_ambiguity_resolution_bds = configuration->property(role + ".AR_DBS", 1); /* Integer Ambiguity Resolution mode for BEIDOU (0:off,1:on) */ | ||||||
|  |     if ((integer_ambiguity_resolution_bds < 0) || (integer_ambiguity_resolution_bds > 1)) | ||||||
|  |         { | ||||||
|  |             //warn user and set the default | ||||||
|  |             LOG(WARNING) << "Erroneous Integer Ambiguity Resolution for BEIDOU . Setting to default value of (1:on)"; | ||||||
|  |             integer_ambiguity_resolution_bds = 1; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     double min_ratio_to_fix_ambiguity = configuration->property(role + ".min_ratio_to_fix_ambiguity", 3.0); /* Set the integer ambiguity validation threshold for ratio‐test, | ||||||
|  |                                                                                                                which uses the ratio of squared residuals of the best integer vector to the second‐best vector. */ | ||||||
|  |  | ||||||
|  |     int min_lock_to_fix_ambiguity = configuration->property(role + ".min_lock_to_fix_ambiguity", 0); /* Set the minimum lock count to fix integer ambiguity. | ||||||
|  |                                                                                                          If the lock count is less than the value, the ambiguity is excluded from the fixed integer vector. */ | ||||||
|  |  | ||||||
|  |     double min_elevation_to_fix_ambiguity = configuration->property(role + ".min_elevation_to_fix_ambiguity", 0.0); /* Set the minimum elevation (deg) to fix integer ambiguity. | ||||||
|  |                                                                                                                         If the elevation of the satellite is less than the value, the ambiguity is excluded from the fixed integer vector. */ | ||||||
|  |  | ||||||
|  |     int outage_reset_ambiguity = configuration->property(role + ".outage_reset_ambiguity", 5); /* Set the outage count to reset ambiguity. If the data outage count is over the value, the estimated ambiguity is reset to the initial value.  */ | ||||||
|  |  | ||||||
|  |     double slip_threshold = configuration->property(role + ".slip_threshold", 0.05); /* set the cycle‐slip threshold (m) of geometry‐free LC carrier‐phase difference between epochs */ | ||||||
|  |  | ||||||
|  |     double threshold_reject_gdop = configuration->property(role + ".threshold_reject_gdop", 30.0); /* reject threshold of GDOP. If the GDOP is over the value, the observable is excluded for the estimation process as an outlier. */ | ||||||
|  |  | ||||||
|  |     double threshold_reject_innovation = configuration->property(role + ".threshold_reject_innovation", 30.0); /* reject threshold of innovation (m). If the innovation is over the value, the observable is excluded for the estimation process as an outlier. */ | ||||||
|  |  | ||||||
|  |     int number_filter_iter = configuration->property(role + ".number_filter_iter", 1); /* Set the number of iteration in the measurement update of the estimation filter. | ||||||
|  |                                                                                          If the baseline length is very short like 1 m, the iteration may be effective to handle | ||||||
|  |                                                                                          the nonlinearity of measurement equation. */ | ||||||
|  |  | ||||||
|  |     /// Statistics | ||||||
|  |     double bias_0 = configuration->property(role + ".bias_0", 30.0); | ||||||
|  |  | ||||||
|  |     double iono_0 = configuration->property(role + ".iono_0", 0.03); | ||||||
|  |  | ||||||
|  |     double trop_0 = configuration->property(role + ".trop_0", 0.3); | ||||||
|  |  | ||||||
|  |     double sigma_bias = configuration->property(role + ".sigma_bias", 1e-4); /* Set the process noise standard deviation of carrier‐phase | ||||||
|  |                                                                                 bias (ambiguity) (cycle/sqrt(s)) */ | ||||||
|  |  | ||||||
|  |     double sigma_iono = configuration->property(role + ".sigma_iono", 1e-3); /* Set the process noise standard deviation of vertical ionospheric delay per 10 km baseline (m/sqrt(s)). */ | ||||||
|  |  | ||||||
|  |     double sigma_trop = configuration->property(role + ".sigma_trop", 1e-4); /* Set the process noise standard deviation of zenith tropospheric delay (m/sqrt(s)). */ | ||||||
|  |  | ||||||
|  |     double sigma_acch = configuration->property(role + ".sigma_acch", 1e-1); /* Set the process noise standard deviation of the receiver acceleration as | ||||||
|  |                                                                                 the horizontal component. (m/s2/sqrt(s)). If Receiver Dynamics is set to OFF, they are not used. */ | ||||||
|  |  | ||||||
|  |     double sigma_accv = configuration->property(role + ".sigma_accv", 1e-2); /* Set the process noise standard deviation of the receiver acceleration as | ||||||
|  |                                                                                 the vertical component. (m/s2/sqrt(s)). If Receiver Dynamics is set to OFF, they are not used. */ | ||||||
|  |  | ||||||
|  |     double sigma_pos = configuration->property(role + ".sigma_pos", 0.0); | ||||||
|  |  | ||||||
|  |     double code_phase_error_ratio_l1 = configuration->property(role + ".code_phase_error_ratio_l1", 100.0); | ||||||
|  |     double code_phase_error_ratio_l2 = configuration->property(role + ".code_phase_error_ratio_l2", 100.0); | ||||||
|  |     double code_phase_error_ratio_l5 = configuration->property(role + ".code_phase_error_ratio_l5", 100.0); | ||||||
|  |     double carrier_phase_error_factor_a = configuration->property(role + ".carrier_phase_error_factor_a", 0.003); | ||||||
|  |     double carrier_phase_error_factor_b = configuration->property(role + ".carrier_phase_error_factor_b", 0.003); | ||||||
|  |  | ||||||
|  |     snrmask_t snrmask = {{}, {{}, {}}}; | ||||||
|  |  | ||||||
|  |     prcopt_t rtklib_configuration_options = { | ||||||
|  |         positioning_mode,                                                                  /* positioning mode (PMODE_XXX) see src/algorithms/libs/rtklib/rtklib.h */ | ||||||
|  |         0,                                                                                 /* solution type (0:forward,1:backward,2:combined) */ | ||||||
|  |         number_of_frequencies,                                                             /* number of frequencies (1:L1, 2:L1+L2, 3:L1+L2+L5)*/ | ||||||
|  |         navigation_system,                                                                 /* navigation system  */ | ||||||
|  |         elevation_mask * D2R,                                                              /* elevation mask angle (degrees) */ | ||||||
|  |         snrmask,                                                                           /* snrmask_t snrmask    SNR mask */ | ||||||
|  |         0,                                                                                 /* satellite ephemeris/clock (EPHOPT_XXX) */ | ||||||
|  |         integer_ambiguity_resolution_gps,                                                  /* AR mode (0:off,1:continuous,2:instantaneous,3:fix and hold,4:ppp-ar) */ | ||||||
|  |         integer_ambiguity_resolution_glo,                                                  /* GLONASS AR mode (0:off,1:on,2:auto cal,3:ext cal) */ | ||||||
|  |         integer_ambiguity_resolution_bds,                                                  /* BeiDou AR mode (0:off,1:on) */ | ||||||
|  |         outage_reset_ambiguity,                                                            /* obs outage count to reset bias */ | ||||||
|  |         min_lock_to_fix_ambiguity,                                                         /* min lock count to fix ambiguity */ | ||||||
|  |         10,                                                                                /* min fix count to hold ambiguity */ | ||||||
|  |         1,                                                                                 /* max iteration to resolve ambiguity */ | ||||||
|  |         iono_model,                                                                        /* ionosphere option (IONOOPT_XXX) */ | ||||||
|  |         trop_model,                                                                        /* troposphere option (TROPOPT_XXX) */ | ||||||
|  |         dynamics_model,                                                                    /* dynamics model (0:none, 1:velocity, 2:accel) */ | ||||||
|  |         earth_tide,                                                                        /* earth tide correction (0:off,1:solid,2:solid+otl+pole) */ | ||||||
|  |         number_filter_iter,                                                                /* number of filter iteration */ | ||||||
|  |         0,                                                                                 /* code smoothing window size (0:none) */ | ||||||
|  |         0,                                                                                 /* interpolate reference obs (for post mission) */ | ||||||
|  |         0,                                                                                 /* sbssat_t sbssat  SBAS correction options */ | ||||||
|  |         0,                                                                                 /* sbsion_t sbsion[MAXBAND+1] SBAS satellite selection (0:all) */ | ||||||
|  |         0,                                                                                 /* rover position for fixed mode */ | ||||||
|  |         0,                                                                                 /* base position for relative mode */ | ||||||
|  |                                                                                            /*    0:pos in prcopt,  1:average of single pos, */ | ||||||
|  |                                                                                            /*    2:read from file, 3:rinex header, 4:rtcm pos */ | ||||||
|  |         {code_phase_error_ratio_l1, code_phase_error_ratio_l2, code_phase_error_ratio_l5}, /* eratio[NFREQ] code/phase error ratio */ | ||||||
|  |         {100.0, carrier_phase_error_factor_a, carrier_phase_error_factor_b, 0.0, 1.0},     /* err[5]:  measurement error factor [0]:reserved, [1-3]:error factor a/b/c of phase (m) , [4]:doppler frequency (hz) */ | ||||||
|  |         {bias_0, iono_0, trop_0},                                                          /* std[3]: initial-state std [0]bias,[1]iono [2]trop*/ | ||||||
|  |         {sigma_bias, sigma_iono, sigma_trop, sigma_acch, sigma_accv, sigma_pos},           /* prn[6] process-noise std */ | ||||||
|  |         5e-12,                                                                             /* sclkstab: satellite clock stability (sec/sec) */ | ||||||
|  |         {min_ratio_to_fix_ambiguity, 0.9999, 0.25, 0.1, 0.05, 0.0, 0.0, 0.0},              /* thresar[8]: AR validation threshold */ | ||||||
|  |         min_elevation_to_fix_ambiguity,                                                    /* elevation mask of AR for rising satellite (deg) */ | ||||||
|  |         0.0,                                                                               /* elevation mask to hold ambiguity (deg) */ | ||||||
|  |         slip_threshold,                                                                    /* slip threshold of geometry-free phase (m) */ | ||||||
|  |         30.0,                                                                              /* max difference of time (sec) */ | ||||||
|  |         threshold_reject_innovation,                                                       /* reject threshold of innovation (m) */ | ||||||
|  |         threshold_reject_gdop,                                                             /* reject threshold of gdop */ | ||||||
|  |         {},                                                                                /* double baseline[2] baseline length constraint {const,sigma} (m) */ | ||||||
|  |         {},                                                                                /* double ru[3]  rover position for fixed mode {x,y,z} (ecef) (m) */ | ||||||
|  |         {},                                                                                /* double rb[3]  base position for relative mode {x,y,z} (ecef) (m) */ | ||||||
|  |         {"", ""},                                                                          /* char anttype[2][MAXANT]  antenna types {rover,base}  */ | ||||||
|  |         {{}, {}},                                                                          /* double antdel[2][3]   antenna delta {{rov_e,rov_n,rov_u},{ref_e,ref_n,ref_u}} */ | ||||||
|  |         {},                                                                                /* pcv_t pcvr[2]   receiver antenna parameters {rov,base} */ | ||||||
|  |         {},                                                                                /* unsigned char exsats[MAXSAT]  excluded satellites (1:excluded, 2:included) */ | ||||||
|  |         0,                                                                                 /* max averaging epoches */ | ||||||
|  |         0,                                                                                 /* initialize by restart */ | ||||||
|  |         1,                                                                                 /* output single by dgps/float/fix/ppp outage */ | ||||||
|  |         {"", ""},                                                                          /* char rnxopt[2][256]   rinex options {rover,base} */ | ||||||
|  |         {sat_PCV, rec_PCV, phwindup, reject_GPS_IIA, raim_fde},                            /* posopt[6] positioning options [0]: satellite and receiver antenna PCV model; [1]: interpolate antenna parameters; [2]: apply phase wind-up correction for PPP modes; [3]: exclude measurements of GPS Block IIA satellites satellite [4]: RAIM FDE (fault detection and exclusion) [5]: handle day-boundary clock jump */ | ||||||
|  |         0,                                                                                 /* solution sync mode (0:off,1:on) */ | ||||||
|  |         {{}, {}},                                                                          /* odisp[2][6*11] ocean tide loading parameters {rov,base} */ | ||||||
|  |         {{}, {{}, {}}, {{}, {}}, {}, {}},                                                  /* exterr_t exterr   extended receiver error model */ | ||||||
|  |         0,                                                                                 /* disable L2-AR */ | ||||||
|  |         {}                                                                                 /* char pppopt[256]   ppp option   "-GAP_RESION="  default gap to reset iono parameters (ep) */ | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     rtk_t rtk; | ||||||
|  |     rtkinit(&rtk, &rtklib_configuration_options); | ||||||
|  |     return rtk; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | //todo: add test cases for Galileo E1, E5 and GPS L5 | ||||||
|  | TEST(RTKLibSolverTest, test1) | ||||||
|  | { | ||||||
|  |     //test case #1: GPS L1 CA simulated with gnss-sim | ||||||
|  |     std::string path = std::string(TEST_PATH); | ||||||
|  |     int nchannels = 8; | ||||||
|  |     std::string dump_filename = ".rtklib_solver_dump.dat"; | ||||||
|  |     bool flag_dump_to_file = false; | ||||||
|  |     rtk_t rtk = configure_rtklib_options(); | ||||||
|  |  | ||||||
|  |     std::unique_ptr<rtklib_solver> d_ls_pvt(new rtklib_solver(nchannels, dump_filename, flag_dump_to_file, rtk)); | ||||||
|  |     d_ls_pvt->set_averaging_depth(1); | ||||||
|  |  | ||||||
|  |     // load ephemeris | ||||||
|  |     std::string eph_xml_filename = path + "data/rtklib_test/eph_GPS_L1CA_test1.xml"; | ||||||
|  |     gnss_sdr_supl_client supl_client_ephemeris_; | ||||||
|  |  | ||||||
|  |     std::cout << "SUPL: Try read GPS ephemeris from XML file " << eph_xml_filename << std::endl; | ||||||
|  |     if (supl_client_ephemeris_.load_ephemeris_xml(eph_xml_filename) == true) | ||||||
|  |         { | ||||||
|  |             std::map<int, Gps_Ephemeris>::const_iterator gps_eph_iter; | ||||||
|  |             for (gps_eph_iter = supl_client_ephemeris_.gps_ephemeris_map.cbegin(); | ||||||
|  |                  gps_eph_iter != supl_client_ephemeris_.gps_ephemeris_map.cend(); | ||||||
|  |                  gps_eph_iter++) | ||||||
|  |                 { | ||||||
|  |                     std::cout << "SUPL: Read XML Ephemeris for GPS SV " << gps_eph_iter->first << std::endl; | ||||||
|  |                     std::shared_ptr<Gps_Ephemeris> tmp_obj = std::make_shared<Gps_Ephemeris>(gps_eph_iter->second); | ||||||
|  |                     // update/insert new ephemeris record to the global ephemeris map | ||||||
|  |                     d_ls_pvt->gps_ephemeris_map[gps_eph_iter->first] = *tmp_obj; | ||||||
|  |                 } | ||||||
|  |         } | ||||||
|  |     else | ||||||
|  |         { | ||||||
|  |             std::cout << "ERROR: SUPL client error reading XML" << std::endl; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     // insert observables epoch | ||||||
|  |     std::map<int, Gnss_Synchro> gnss_synchro_map; | ||||||
|  |     //    Gnss_Synchro tmp_obs; | ||||||
|  |     //    tmp_obs.System = 'G'; | ||||||
|  |     //    std::string signal = "1C"; | ||||||
|  |     //    const char* str = signal.c_str();                         // get a C style null terminated string | ||||||
|  |     //    std::memcpy(static_cast<void*>(tmp_obs.Signal), str, 3);  // copy string into synchro char array: 2 char + null | ||||||
|  |     // | ||||||
|  |     //    gnss_synchro_map[0] = tmp_obs; | ||||||
|  |     //    gnss_synchro_map[0].PRN = 1; | ||||||
|  |     //    gnss_synchro_map[0].RX_time = 518449.000000; | ||||||
|  |     //    gnss_synchro_map[0].Pseudorange_m = 22816591.664859; | ||||||
|  |     //    gnss_synchro_map[0].Carrier_Doppler_hz = -2579.334343; | ||||||
|  |     //    gnss_synchro_map[0].Carrier_phase_rads = 794858.014183; | ||||||
|  |  | ||||||
|  |     //load from xml (boost serialize) | ||||||
|  |     std::string file_name = path + "data/rtklib_test/obs_test1.xml"; | ||||||
|  |  | ||||||
|  |     std::ifstream ifs; | ||||||
|  |     try | ||||||
|  |         { | ||||||
|  |             ifs.open(file_name.c_str(), std::ifstream::binary | std::ifstream::in); | ||||||
|  |             boost::archive::xml_iarchive xml(ifs); | ||||||
|  |             gnss_synchro_map.clear(); | ||||||
|  |             xml >> boost::serialization::make_nvp("GNSS-SDR_gnss_synchro_map", gnss_synchro_map); | ||||||
|  |             std::cout << "Loaded gnss_synchro map data with " << gnss_synchro_map.size() << " pseudoranges" << std::endl; | ||||||
|  |         } | ||||||
|  |     catch (std::exception& e) | ||||||
|  |         { | ||||||
|  |             std::cout << e.what() << "File: " << file_name; | ||||||
|  |         } | ||||||
|  |     ifs.close(); | ||||||
|  |  | ||||||
|  |     // solve | ||||||
|  |     bool pvt_valid = false; | ||||||
|  |     if (d_ls_pvt->get_PVT(gnss_synchro_map, false)) | ||||||
|  |         { | ||||||
|  |             // DEBUG MESSAGE: Display position in console output | ||||||
|  |             if (d_ls_pvt->is_valid_position()) | ||||||
|  |                 { | ||||||
|  |                     std::streamsize ss = std::cout.precision();  // save current precision | ||||||
|  |                     std::cout.setf(std::ios::fixed, std::ios::floatfield); | ||||||
|  |  | ||||||
|  |                     auto facet = new boost::posix_time::time_facet("%Y-%b-%d %H:%M:%S.%f %z"); | ||||||
|  |                     std::cout.imbue(std::locale(std::cout.getloc(), facet)); | ||||||
|  |  | ||||||
|  |                     std::cout << "Position at " << d_ls_pvt->get_position_UTC_time() | ||||||
|  |                               << " UTC using " << d_ls_pvt->get_num_valid_observations() | ||||||
|  |                               << std::fixed << std::setprecision(9) | ||||||
|  |                               << " observations is Lat = " << d_ls_pvt->get_latitude() << " [deg], Long = " << d_ls_pvt->get_longitude() | ||||||
|  |                               << std::fixed << std::setprecision(3) | ||||||
|  |                               << " [deg], Height = " << d_ls_pvt->get_height() << " [m]" << std::endl; | ||||||
|  |                     std::cout << std::setprecision(ss); | ||||||
|  |                     std::cout << "RX clock offset: " << d_ls_pvt->get_time_offset_s() << "[s]" << std::endl; | ||||||
|  |  | ||||||
|  |                     // boost::posix_time::ptime p_time; | ||||||
|  |                     // gtime_t rtklib_utc_time = gpst2time(adjgpsweek(d_ls_pvt->gps_ephemeris_map.cbegin()->second.i_GPS_week), d_rx_time); | ||||||
|  |                     // p_time = boost::posix_time::from_time_t(rtklib_utc_time.time); | ||||||
|  |                     // p_time += boost::posix_time::microseconds(round(rtklib_utc_time.sec * 1e6)); | ||||||
|  |                     // std::cout << TEXT_MAGENTA << "Observable RX time (GPST) " << boost::posix_time::to_simple_string(p_time) << TEXT_RESET << std::endl; | ||||||
|  |  | ||||||
|  |                     std::cout << "Position at " << boost::posix_time::to_simple_string(d_ls_pvt->get_position_UTC_time()) | ||||||
|  |                               << " UTC using " << d_ls_pvt->get_num_valid_observations() << " observations is Lat = " << d_ls_pvt->get_latitude() << " [deg], Long = " << d_ls_pvt->get_longitude() | ||||||
|  |                               << " [deg], Height = " << d_ls_pvt->get_height() << " [m]" << std::endl; | ||||||
|  |  | ||||||
|  |                     std::cout << "RTKLIB Position at RX TOW = " << gnss_synchro_map.begin()->second.RX_time | ||||||
|  |                               << " in ECEF (X,Y,Z,t[meters]) = " << std::fixed << std::setprecision(16) | ||||||
|  |                               << d_ls_pvt->pvt_sol.rr[0] << "," | ||||||
|  |                               << d_ls_pvt->pvt_sol.rr[1] << "," | ||||||
|  |                               << d_ls_pvt->pvt_sol.rr[2] << std::endl; | ||||||
|  |                     /* std::cout << "Dilution of Precision at " << boost::posix_time::to_simple_string(d_ls_pvt->get_position_UTC_time()) | ||||||
|  |                              << " UTC using "<< d_ls_pvt->get_num_valid_observations() <<" observations is HDOP = " << d_ls_pvt->get_hdop() << " VDOP = " | ||||||
|  |                              << d_ls_pvt->get_vdop() | ||||||
|  |                              << " GDOP = " << d_ls_pvt->get_gdop() << std::endl; */ | ||||||
|  |  | ||||||
|  |                     //todo: check here the positioning error against the reference position generated with gnss-sim | ||||||
|  |                     //reference position on in WGS84: Lat (deg), Long (deg) , H (m): 30.286502,120.032669,100 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                     pvt_valid = true; | ||||||
|  |                 } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     EXPECT_EQ(true, pvt_valid); | ||||||
|  | } | ||||||
| @@ -22,6 +22,8 @@ if(OPENSSL_FOUND) | |||||||
| endif(OPENSSL_FOUND) | endif(OPENSSL_FOUND) | ||||||
|  |  | ||||||
| set(FRONT_END_CAL_SOURCES front_end_cal.cc) | set(FRONT_END_CAL_SOURCES front_end_cal.cc) | ||||||
|  | set(FRONT_END_CAL_HEADERS front_end_cal.h) | ||||||
|  |  | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|     ${CMAKE_SOURCE_DIR}/src/core/system_parameters |     ${CMAKE_SOURCE_DIR}/src/core/system_parameters | ||||||
| @@ -44,8 +46,6 @@ include_directories( | |||||||
|     ${VOLK_GNSSSDR_INCLUDE_DIRS} |     ${VOLK_GNSSSDR_INCLUDE_DIRS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB FRONT_END_CAL_HEADERS "*.h") |  | ||||||
| list(SORT FRONT_END_CAL_HEADERS) |  | ||||||
| add_library(front_end_cal_lib ${FRONT_END_CAL_SOURCES} ${FRONT_END_CAL_HEADERS}) | add_library(front_end_cal_lib ${FRONT_END_CAL_SOURCES} ${FRONT_END_CAL_HEADERS}) | ||||||
| source_group(Headers FILES ${FRONT_END_CAL_HEADERS}) | source_group(Headers FILES ${FRONT_END_CAL_HEADERS}) | ||||||
|  |  | ||||||
| @@ -114,5 +114,3 @@ if(NOT GZIP_NOTFOUND) | |||||||
|  |  | ||||||
|     install(FILES ${CMAKE_BINARY_DIR}/front-end-cal.1.gz DESTINATION share/man/man1) |     install(FILES ${CMAKE_BINARY_DIR}/front-end-cal.1.gz DESTINATION share/man/man1) | ||||||
| endif(NOT GZIP_NOTFOUND) | endif(NOT GZIP_NOTFOUND) | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Marc Majoral
					Marc Majoral