mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-15 12:40:35 +00:00
Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into fpga
This commit is contained in:
commit
8710ba1cf7
@ -45,7 +45,7 @@ endif(NOT CMAKE_PREFIX_PATH)
|
||||
########################################################################
|
||||
# Support of optional RF front-ends
|
||||
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_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)
|
||||
@ -341,10 +341,10 @@ set(GNSSSDR_MATIO_MIN_VERSION "1.5.3")
|
||||
################################################################################
|
||||
set(GNSSSDR_GFLAGS_LOCAL_VERSION "2.2.1")
|
||||
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_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")
|
||||
|
||||
|
||||
@ -622,7 +622,9 @@ if(NOT VOLK_GNSSSDR_FOUND)
|
||||
if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
|
||||
set(STRIP_VOLK_GNSSSDR_PROFILE "-DENABLE_STRIP=ON -DCMAKE_VERBOSE_MAKEFILE=ON")
|
||||
endif(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)
|
||||
set(READ_ENVIRO ${CMAKE_COMMAND} -E environment)
|
||||
if(NOT DEFINED ENV{PROTECT_PASSWORDS})
|
||||
set(READ_ENVIRO ${CMAKE_COMMAND} -E environment)
|
||||
endif(NOT DEFINED ENV{PROTECT_PASSWORDS})
|
||||
endif(ENABLE_PACKAGING)
|
||||
|
||||
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 zypper install lapack-devel blas-devel # For OpenSUSE
|
||||
$ sudo pacman -S blas lapack # For Arch Linux
|
||||
$ wget https://sourceforge.net/projects/arma/files/armadillo-8.500.1.tar.xz
|
||||
$ tar xvfz armadillo-8.500.1.tar.xz
|
||||
$ cd armadillo-8.500.1
|
||||
$ wget https://sourceforge.net/projects/arma/files/armadillo-9.100.5.tar.xz
|
||||
$ tar xvfz armadillo-9.100.5.tar.xz
|
||||
$ cd armadillo-9.100.5
|
||||
$ cmake .
|
||||
$ make
|
||||
$ sudo make install
|
||||
|
@ -25,6 +25,10 @@ set(PVT_ADAPTER_SOURCES
|
||||
rtklib_pvt.cc
|
||||
)
|
||||
|
||||
set(PVT_ADAPTER_HEADERS
|
||||
rtklib_pvt.h
|
||||
)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -41,8 +45,6 @@ include_directories(
|
||||
${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})
|
||||
source_group(Headers FILES ${PVT_ADAPTER_HEADERS})
|
||||
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)
|
||||
{
|
||||
std::ofstream ofs;
|
||||
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);
|
||||
xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", eph_map);
|
||||
ofs.close();
|
||||
LOG(INFO) << "Saved GPS L1 Ephemeris map data";
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
@ -519,13 +519,13 @@ bool RtklibPvt::save_assistance_to_XML()
|
||||
LOG(WARNING) << e.what();
|
||||
return false;
|
||||
}
|
||||
return true; // return variable (true == succeeded)
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG(WARNING) << "Failed to save Ephemeris, map is empty";
|
||||
return false;
|
||||
}
|
||||
return true; // return variable (true == succeeded)
|
||||
}
|
||||
|
||||
|
||||
|
@ -25,6 +25,10 @@ set(PVT_GR_BLOCKS_SOURCES
|
||||
rtklib_pvt_cc.cc
|
||||
)
|
||||
|
||||
set(PVT_GR_BLOCKS_HEADERS
|
||||
rtklib_pvt_cc.h
|
||||
)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -39,8 +43,6 @@ include_directories(
|
||||
${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})
|
||||
source_group(Headers FILES ${PVT_GR_BLOCKS_HEADERS})
|
||||
target_link_libraries(pvt_gr_blocks pvt_lib ${ARMADILLO_LIBRARIES})
|
||||
|
@ -50,6 +50,10 @@ namespace bc = boost::math;
|
||||
namespace bc = boost::integer;
|
||||
#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;
|
||||
|
||||
@ -396,12 +400,12 @@ rtklib_pvt_cc::~rtklib_pvt_cc()
|
||||
|
||||
if (d_ls_pvt->gps_cnav_ephemeris_map.empty() == false)
|
||||
{
|
||||
std::ofstream ofs;
|
||||
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);
|
||||
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";
|
||||
}
|
||||
catch (std::exception& e)
|
||||
@ -419,12 +423,12 @@ rtklib_pvt_cc::~rtklib_pvt_cc()
|
||||
|
||||
if (d_ls_pvt->gps_ephemeris_map.empty() == false)
|
||||
{
|
||||
std::ofstream ofs;
|
||||
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);
|
||||
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";
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
@ -442,12 +446,12 @@ rtklib_pvt_cc::~rtklib_pvt_cc()
|
||||
|
||||
if (d_ls_pvt->galileo_ephemeris_map.empty() == false)
|
||||
{
|
||||
std::ofstream ofs;
|
||||
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);
|
||||
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";
|
||||
}
|
||||
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)
|
||||
{
|
||||
std::ofstream ofs;
|
||||
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);
|
||||
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";
|
||||
}
|
||||
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,
|
||||
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();
|
||||
const Gnss_Synchro** in = reinterpret_cast<const Gnss_Synchro**>(&input_items[0]); // Get the input buffer pointer
|
||||
|
||||
// ############ 1. READ PSEUDORANGES ####
|
||||
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;
|
||||
// }
|
||||
|
||||
|
||||
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)
|
||||
{
|
||||
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::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));
|
||||
|
||||
|
@ -152,6 +152,10 @@ private:
|
||||
bool send_sys_v_ttff_msg(ttff_msgbuf ttff);
|
||||
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:
|
||||
rtklib_pvt_cc(uint32_t nchannels,
|
||||
bool dump, std::string dump_filename,
|
||||
|
@ -31,6 +31,20 @@ set(PVT_LIB_SOURCES
|
||||
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(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -45,8 +59,9 @@ include_directories(
|
||||
${GLOG_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB PVT_LIB_HEADERS "*.h")
|
||||
list(SORT PVT_LIB_HEADERS)
|
||||
list(SORT PVT_LIB_SOURCES)
|
||||
|
||||
add_library(pvt_lib ${PVT_LIB_SOURCES} ${PVT_LIB_HEADERS})
|
||||
source_group(Headers FILES ${PVT_LIB_HEADERS})
|
||||
add_dependencies(pvt_lib rtklib_lib armadillo-${armadillo_RELEASE} glog-${glog_RELEASE})
|
||||
@ -60,5 +75,4 @@ target_link_libraries(
|
||||
${ARMADILLO_LIBRARIES}
|
||||
${BLAS}
|
||||
${LAPACK}
|
||||
)
|
||||
|
||||
)
|
||||
|
@ -76,12 +76,13 @@ private:
|
||||
rtk_t rtk_;
|
||||
std::string d_dump_filename;
|
||||
std::ofstream d_dump_file;
|
||||
sol_t pvt_sol;
|
||||
|
||||
bool d_flag_dump_enabled;
|
||||
int d_nchannels; // Number of available channels for positioning
|
||||
double dop_[4];
|
||||
|
||||
public:
|
||||
sol_t pvt_sol;
|
||||
rtklib_solver(int nchannels, std::string dump_filename, bool flag_dump_to_file, rtk_t& rtk);
|
||||
~rtklib_solver();
|
||||
|
||||
|
@ -36,12 +36,43 @@ set(ACQ_ADAPTER_SOURCES
|
||||
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)
|
||||
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)
|
||||
|
||||
if(OPENCL_FOUND)
|
||||
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)
|
||||
|
||||
include_directories(
|
||||
@ -61,8 +92,8 @@ include_directories(
|
||||
${VOLK_GNSSSDR_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB ACQ_ADAPTER_HEADERS "*.h")
|
||||
list(SORT ACQ_ADAPTER_HEADERS)
|
||||
list(SORT ACQ_ADAPTER_SOURCES)
|
||||
add_library(acq_adapters ${ACQ_ADAPTER_SOURCES} ${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})
|
||||
|
@ -28,12 +28,25 @@ set(ACQ_GR_BLOCKS_SOURCES
|
||||
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)
|
||||
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)
|
||||
|
||||
if(OPENCL_FOUND)
|
||||
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)
|
||||
|
||||
include_directories(
|
||||
@ -61,8 +74,8 @@ if(OPENCL_FOUND)
|
||||
endif(OS_IS_MACOSX)
|
||||
endif(OPENCL_FOUND)
|
||||
|
||||
file(GLOB ACQ_GR_BLOCKS_HEADERS "*.h")
|
||||
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})
|
||||
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_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;
|
||||
//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);
|
||||
|
@ -18,6 +18,7 @@
|
||||
|
||||
if(ENABLE_FPGA)
|
||||
set(ACQUISITION_LIB_SOURCES fpga_acquisition.cc )
|
||||
set(ACQUISITION_LIB_HEADERS fpga_acquisition.h )
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -29,15 +30,14 @@ if(ENABLE_FPGA)
|
||||
${GFlags_INCLUDE_DIRS}
|
||||
${VOLK_GNSSSDR_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB ACQUISITION_LIB_HEADERS "*.h")
|
||||
endif(ENABLE_FPGA)
|
||||
|
||||
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)
|
||||
|
||||
list(SORT ACQUISITION_LIB_HEADERS)
|
||||
list(SORT ACQUISITION_LIB_SOURCES)
|
||||
|
||||
add_library(acquisition_lib ${ACQUISITION_LIB_SOURCES} ${ACQUISITION_LIB_HEADERS})
|
||||
source_group(Headers FILES ${ACQUISITION_LIB_HEADERS})
|
||||
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_HEADERS channel.h)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
@ -31,8 +32,6 @@ include_directories(
|
||||
${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})
|
||||
source_group(Headers FILES ${CHANNEL_ADAPTER_HEADERS})
|
||||
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
|
||||
)
|
||||
|
||||
set(CHANNEL_FSM_HEADERS
|
||||
channel_fsm.h
|
||||
channel_msg_receiver_cc.h
|
||||
)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -33,8 +38,9 @@ include_directories(
|
||||
${GNURADIO_RUNTIME_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB CHANNEL_FSM_HEADERS "*.h")
|
||||
list(SORT CHANNEL_FSM_HEADERS)
|
||||
list(SORT CHANNEL_FSM_SOURCES)
|
||||
|
||||
add_library(channel_fsm ${CHANNEL_FSM_SOURCES} ${CHANNEL_FSM_HEADERS})
|
||||
source_group(Headers FILES ${CHANNEL_FSM_HEADERS})
|
||||
add_dependencies(channel_fsm glog-${glog_RELEASE})
|
||||
|
@ -22,6 +22,11 @@ set(COND_ADAPTER_SOURCES
|
||||
array_signal_conditioner.cc
|
||||
)
|
||||
|
||||
set(COND_ADAPTER_HEADERS
|
||||
signal_conditioner.h
|
||||
array_signal_conditioner.h
|
||||
)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -34,8 +39,9 @@ include_directories(
|
||||
${GNURADIO_RUNTIME_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB COND_ADAPTER_HEADERS "*.h")
|
||||
list(SORT COND_ADAPTER_HEADERS)
|
||||
list(SORT COND_ADAPTER_SOURCES)
|
||||
|
||||
add_library(conditioner_adapters ${COND_ADAPTER_SOURCES} ${COND_ADAPTER_HEADERS})
|
||||
source_group(Headers FILES ${COND_ADAPTER_HEADERS})
|
||||
add_dependencies(conditioner_adapters glog-${glog_RELEASE})
|
@ -24,7 +24,16 @@ set(DATATYPE_ADAPTER_SOURCES
|
||||
ibyte_to_cshort.cc
|
||||
ishort_to_cshort.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(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
@ -38,10 +47,10 @@ include_directories(
|
||||
${VOLK_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB DATATYPE_ADAPTER_HEADERS "*.h")
|
||||
list(SORT DATATYPE_ADAPTER_HEADERS)
|
||||
list(SORT DATATYPE_ADAPTER_SOURCES)
|
||||
|
||||
add_library(datatype_adapters ${DATATYPE_ADAPTER_SOURCES} ${DATATYPE_ADAPTER_HEADERS})
|
||||
source_group(Headers FILES ${DATATYPE_ADAPTER_HEADERS})
|
||||
add_dependencies(datatype_adapters glog-${glog_RELEASE})
|
||||
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
|
||||
)
|
||||
|
||||
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(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${GNURADIO_RUNTIME_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_SOURCES)
|
||||
|
||||
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})
|
||||
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
|
||||
)
|
||||
|
||||
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(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${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 )
|
||||
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_SOURCES)
|
||||
|
||||
add_library(input_filter_adapters ${INPUT_FILTER_ADAPTER_SOURCES} ${INPUT_FILTER_ADAPTER_HEADERS})
|
||||
source_group(Headers FILES ${INPUT_FILTER_ADAPTER_HEADERS})
|
||||
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
|
||||
)
|
||||
|
||||
set(INPUT_FILTER_GR_BLOCKS_HEADERS
|
||||
beamformer.h
|
||||
pulse_blanking_cc.h
|
||||
notch_cc.h
|
||||
notch_lite_cc.h
|
||||
)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${GNURADIO_RUNTIME_INCLUDE_DIRS}
|
||||
@ -33,8 +40,9 @@ include_directories(
|
||||
${GFlags_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB INPUT_FILTER_GR_BLOCKS_HEADERS "*.h")
|
||||
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})
|
||||
source_group(Headers FILES ${INPUT_FILTER_GR_BLOCKS_HEADERS})
|
||||
|
||||
|
@ -18,14 +18,12 @@
|
||||
|
||||
add_subdirectory(rtklib)
|
||||
|
||||
if(ENABLE_FPGA)
|
||||
set(GNSS_SPLIBS_SOURCES
|
||||
set(GNSS_SPLIBS_SOURCES
|
||||
gps_l2c_signal.cc
|
||||
gps_l5_signal.cc
|
||||
galileo_e1_signal_processing.cc
|
||||
gnss_sdr_valve.cc
|
||||
gnss_sdr_sample_counter.cc
|
||||
gnss_sdr_time_counter.cc
|
||||
gnss_signal_processing.cc
|
||||
gps_sdr_signal_processing.cc
|
||||
glonass_l1_signal_processing.cc
|
||||
@ -40,30 +38,43 @@ if(ENABLE_FPGA)
|
||||
conjugate_cc.cc
|
||||
conjugate_sc.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
|
||||
)
|
||||
else(ENABLE_FPGA)
|
||||
set(GNSS_SPLIBS_SOURCES
|
||||
gps_l2c_signal.cc
|
||||
gps_l5_signal.cc
|
||||
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
|
||||
)
|
||||
|
||||
set(GNSS_SPLIBS_HEADERS ${GNSS_SPLIBS_HEADERS}
|
||||
gnss_sdr_time_counter.h
|
||||
gnss_sdr_fpga_sample_counter.h
|
||||
)
|
||||
|
||||
endif(ENABLE_FPGA)
|
||||
|
||||
if(OPENCL_FOUND)
|
||||
@ -71,7 +82,13 @@ if(OPENCL_FOUND)
|
||||
opencl/fft_execute.cc # Needs OpenCL
|
||||
opencl/fft_setup.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)
|
||||
|
||||
include_directories(
|
||||
@ -99,9 +116,9 @@ endif(OPENCL_FOUND)
|
||||
|
||||
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_SOURCES)
|
||||
|
||||
add_library(gnss_sp_libs ${GNSS_SPLIBS_SOURCES} ${GNSS_SPLIBS_HEADERS})
|
||||
source_group(Headers FILES ${GNSS_SPLIBS_HEADERS})
|
||||
|
||||
|
@ -38,6 +38,27 @@ set(RTKLIB_LIB_SOURCES
|
||||
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(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -48,8 +69,10 @@ include_directories(
|
||||
${GLOG_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB RTKLIB_LIB_HEADERS "*.h")
|
||||
|
||||
list(SORT RTKLIB_LIB_HEADERS)
|
||||
list(SORT RTKLIB_LIB_SOURCES)
|
||||
|
||||
add_library(rtklib_lib ${RTKLIB_LIB_SOURCES} ${RTKLIB_LIB_HEADERS})
|
||||
source_group(Headers FILES ${RTKLIB_LIB_HEADERS})
|
||||
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) ---------------------------*/
|
||||
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 */
|
||||
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);
|
||||
|
||||
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
|
||||
)
|
||||
|
||||
set(OBS_ADAPTER_HEADERS
|
||||
hybrid_observables.h
|
||||
)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -33,8 +37,6 @@ include_directories(
|
||||
${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})
|
||||
source_group(Headers FILES ${OBS_ADAPTER_HEADERS})
|
||||
target_link_libraries(obs_adapters obs_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES})
|
||||
|
@ -20,6 +20,10 @@ set(OBS_GR_BLOCKS_SOURCES
|
||||
hybrid_observables_cc.cc
|
||||
)
|
||||
|
||||
set(OBS_GR_BLOCKS_HEADERS
|
||||
hybrid_observables_cc.h
|
||||
)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -34,8 +38,6 @@ include_directories(
|
||||
${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})
|
||||
source_group(Headers FILES ${OBS_GR_BLOCKS_HEADERS})
|
||||
if(MATIO_FOUND)
|
||||
|
@ -21,6 +21,12 @@ set(RESAMPLER_ADAPTER_SOURCES
|
||||
mmse_resampler_conditioner.cc
|
||||
)
|
||||
|
||||
|
||||
set(RESAMPLER_ADAPTER_HEADERS
|
||||
direct_resampler_conditioner.h
|
||||
mmse_resampler_conditioner.h
|
||||
)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${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 )
|
||||
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_SOURCES)
|
||||
|
||||
add_library(resampler_adapters ${RESAMPLER_ADAPTER_SOURCES} ${RESAMPLER_ADAPTER_HEADERS})
|
||||
source_group(Headers FILES ${RESAMPLER_ADAPTER_HEADERS})
|
||||
target_link_libraries(resampler_adapters resampler_gr_blocks)
|
||||
|
@ -23,6 +23,12 @@ set(RESAMPLER_GR_BLOCKS_SOURCES
|
||||
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(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${GLOG_INCLUDE_DIRS}
|
||||
@ -31,8 +37,9 @@ include_directories(
|
||||
${VOLK_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB RESAMPLER_GR_BLOCKS_HEADERS "*.h")
|
||||
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})
|
||||
source_group(Headers FILES ${RESAMPLER_GR_BLOCKS_HEADERS})
|
||||
add_dependencies(resampler_gr_blocks glog-${glog_RELEASE})
|
@ -17,6 +17,7 @@
|
||||
#
|
||||
|
||||
set(SIGNAL_GENERATOR_ADAPTER_SOURCES signal_generator.cc)
|
||||
set(SIGNAL_GENERATOR_ADAPTER_HEADERS signal_generator.h)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
@ -30,8 +31,6 @@ include_directories(
|
||||
${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})
|
||||
source_group(Headers FILES ${SIGNAL_GENERATOR_ADAPTER_HEADERS})
|
||||
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_HEADERS signal_generator_c.h)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
@ -30,8 +31,6 @@ include_directories(
|
||||
${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})
|
||||
source_group(Headers FILES ${SIGNAL_GENERATOR_BLOCK_HEADERS})
|
||||
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})
|
||||
else(VOLK_GNSSSDR_FOUND)
|
||||
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/>.
|
||||
#
|
||||
|
||||
file(GLOB SIGNAL_SOURCE_ADAPTER_HEADERS "*.h")
|
||||
list(SORT SIGNAL_SOURCE_ADAPTER_HEADERS)
|
||||
|
||||
# Optional drivers
|
||||
|
||||
@ -30,6 +28,7 @@ if(ENABLE_RAW_UDP)
|
||||
set(OPT_LIBRARIES ${OPT_LIBRARIES} ${PCAP_LIBRARIES})
|
||||
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_HEADERS ${OPT_DRIVER_HEADERS} custom_udp_signal_source.h)
|
||||
endif(ENABLE_RAW_UDP)
|
||||
|
||||
if(ENABLE_PLUTOSDR OR ENABLE_FMCOMMS2)
|
||||
@ -67,6 +66,7 @@ if(ENABLE_PLUTOSDR)
|
||||
##############################################
|
||||
if(IIO_FOUND)
|
||||
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(ENABLE_PLUTOSDR)
|
||||
|
||||
@ -77,6 +77,7 @@ if(ENABLE_FMCOMMS2)
|
||||
###############################################
|
||||
if(IIO_FOUND)
|
||||
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(ENABLE_FMCOMMS2)
|
||||
|
||||
@ -86,6 +87,7 @@ if(ENABLE_AD9361)
|
||||
###############################################
|
||||
if(LIBIIO_FOUND)
|
||||
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(ENABLE_AD9361)
|
||||
|
||||
@ -103,6 +105,7 @@ if(ENABLE_GN3S)
|
||||
set(OPT_LIBRARIES ${OPT_LIBRARIES} ${GR_GN3S_LIBRARIES})
|
||||
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_HEADERS ${OPT_DRIVER_HEADERS} gn3s_signal_source.h)
|
||||
endif(ENABLE_GN3S)
|
||||
|
||||
|
||||
@ -123,6 +126,7 @@ if(ENABLE_FLEXIBAND)
|
||||
set(OPT_LIBRARIES ${OPT_LIBRARIES} ${TELEORBIT_LIBRARIES})
|
||||
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_HEADERS ${OPT_DRIVER_HEADERS} flexiband_signal_source.h)
|
||||
endif(ENABLE_FLEXIBAND)
|
||||
|
||||
|
||||
@ -138,6 +142,7 @@ if(ENABLE_ARRAY)
|
||||
set(OPT_LIBRARIES ${OPT_LIBRARIES} ${GR_DBFCTTC_LIBRARIES})
|
||||
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_HEADERS ${OPT_DRIVER_HEADERS} raw_array_signal_source.h)
|
||||
endif(ENABLE_ARRAY)
|
||||
|
||||
|
||||
@ -154,8 +159,9 @@ if(ENABLE_OSMOSDR)
|
||||
set(OSMO_DRIVER_INCLUDE_DIRS
|
||||
${OPT_DRIVER_INCLUDE_DIRS}
|
||||
${GROSMOSDR_INCLUDE_DIR}/osmosdr
|
||||
)
|
||||
)
|
||||
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_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${OSMO_DRIVER_INCLUDE_DIRS})
|
||||
endif(NOT GROSMOSDR_FOUND)
|
||||
@ -163,10 +169,9 @@ endif(ENABLE_OSMOSDR)
|
||||
|
||||
if(ENABLE_UHD AND GNURADIO_UHD_LIBRARIES_gnuradio-uhd)
|
||||
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_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)
|
||||
|
||||
|
||||
@ -180,10 +185,24 @@ set(SIGNAL_SOURCE_ADAPTER_SOURCES file_signal_source.cc
|
||||
${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)
|
||||
set(SIGNAL_SOURCE_ADAPTER_SOURCES ${SIGNAL_SOURCE_ADAPTER_SOURCES}
|
||||
two_bit_cpx_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)
|
||||
|
||||
include_directories(
|
||||
@ -207,6 +226,9 @@ endif(ARCH_64BITS)
|
||||
|
||||
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})
|
||||
source_group(Headers FILES ${SIGNAL_SOURCE_ADAPTER_HEADERS})
|
||||
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_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_HEADERS ${OPT_DRIVER_HEADERS} gr_complex_ip_packet_source.h)
|
||||
endif(ENABLE_RAW_UDP)
|
||||
|
||||
|
||||
set(SIGNAL_SOURCE_GR_BLOCKS_SOURCES
|
||||
unpack_byte_2bit_samples.cc
|
||||
unpack_byte_2bit_cpx_samples.cc
|
||||
@ -40,6 +42,19 @@ set(SIGNAL_SOURCE_GR_BLOCKS_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(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/algorithms/signal_source/libs
|
||||
@ -50,8 +65,9 @@ include_directories(
|
||||
${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_SOURCES)
|
||||
|
||||
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})
|
||||
target_link_libraries(signal_source_gr_blocks
|
||||
|
@ -63,21 +63,23 @@ include_directories(
|
||||
${GLOG_INCLUDE_DIRS}
|
||||
${GFlags_INCLUDE_DIRS}
|
||||
${OPT_DRIVER_INCLUDE_DIRS}
|
||||
)
|
||||
)
|
||||
|
||||
set(SIGNAL_SOURCE_LIB_SOURCES
|
||||
rtl_tcp_commands.cc
|
||||
rtl_tcp_dongle_info.cc
|
||||
${OPT_SIGNAL_SOURCE_LIB_SOURCES}
|
||||
)
|
||||
)
|
||||
|
||||
set(SIGNAL_SOURCE_LIB_HEADERS
|
||||
rtl_tcp_commands.h
|
||||
rtl_tcp_dongle_info.h
|
||||
${OPT_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})
|
||||
source_group(Headers FILES ${SIGNAL_SOURCE_LIB_HEADERS})
|
||||
target_link_libraries(signal_source_lib ${OPT_LIBRARIES})
|
||||
|
@ -28,6 +28,17 @@ set(TELEMETRY_DECODER_ADAPTER_SOURCES
|
||||
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(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -42,8 +53,9 @@ include_directories(
|
||||
${GNURADIO_RUNTIME_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB TELEMETRY_DECODER_ADAPTER_HEADERS "*.h")
|
||||
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})
|
||||
source_group(Headers FILES ${TELEMETRY_DECODER_ADAPTER_HEADERS})
|
||||
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
|
||||
)
|
||||
|
||||
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(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -39,8 +49,9 @@ include_directories(
|
||||
${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_SOURCES)
|
||||
|
||||
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})
|
||||
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
|
||||
)
|
||||
|
||||
set(TELEMETRY_DECODER_LIB_HEADERS
|
||||
viterbi_decoder.h
|
||||
convolutional.h
|
||||
)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -33,9 +38,9 @@ include_directories(
|
||||
${GFlags_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB TELEMETRY_DECODER_LIB_HEADERS "*.h")
|
||||
|
||||
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})
|
||||
source_group(Headers FILES ${TELEMETRY_DECODER_LIB_HEADERS})
|
||||
target_link_libraries(telemetry_decoder_lib gnss_system_parameters)
|
||||
|
@ -23,12 +23,20 @@ set(TELEMETRY_DECODER_LIBSWIFTCNAV_SOURCES
|
||||
viterbi27.c
|
||||
)
|
||||
|
||||
set(TELEMETRY_DECODER_LIBSWIFTCNAV_HEADERS
|
||||
cnav_msg.h
|
||||
bits.h
|
||||
edc.h
|
||||
swift_common.h
|
||||
fec.h
|
||||
)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
|
||||
file(GLOB TELEMETRY_DECODER_LIBSWIFTCNAV_HEADERS "*.h")
|
||||
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})
|
||||
source_group(Headers FILES ${TELEMETRY_DECODER_LIBSWIFTCNAV_HEADERS})
|
||||
|
@ -17,12 +17,25 @@
|
||||
#
|
||||
|
||||
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})
|
||||
endif(ENABLE_CUDA)
|
||||
|
||||
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)
|
||||
|
||||
set(TRACKING_ADAPTER_SOURCES
|
||||
@ -39,7 +52,24 @@ set(TRACKING_ADAPTER_SOURCES
|
||||
gps_l5_dll_pll_tracking.cc
|
||||
glonass_l2_ca_dll_pll_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(
|
||||
@ -58,8 +88,9 @@ include_directories(
|
||||
${OPT_TRACKING_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB TRACKING_ADAPTER_HEADERS "*.h")
|
||||
list(SORT TRACKING_ADAPTER_HEADERS)
|
||||
list(SORT TRACKING_ADAPTER_SOURCES)
|
||||
|
||||
add_library(tracking_adapters ${TRACKING_ADAPTER_SOURCES} ${TRACKING_ADAPTER_HEADERS})
|
||||
source_group(Headers FILES ${TRACKING_ADAPTER_HEADERS})
|
||||
target_link_libraries(tracking_adapters tracking_gr_blocks gnss_sp_libs gnss_sdr_flags)
|
||||
|
@ -17,13 +17,15 @@
|
||||
#
|
||||
|
||||
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_LIBRARIES ${OPT_TRACKING_LIBRARIES} ${CUDA_LIBRARIES})
|
||||
endif(ENABLE_CUDA)
|
||||
|
||||
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)
|
||||
|
||||
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_sc.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(
|
||||
@ -63,8 +81,9 @@ if(ENABLE_GENERIC_ARCH)
|
||||
add_definitions( -DGENERIC_ARCH=1 )
|
||||
endif(ENABLE_GENERIC_ARCH)
|
||||
|
||||
file(GLOB TRACKING_GR_BLOCKS_HEADERS "*.h")
|
||||
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})
|
||||
source_group(Headers FILES ${TRACKING_GR_BLOCKS_HEADERS})
|
||||
|
||||
|
@ -30,7 +30,6 @@ if(ENABLE_CUDA)
|
||||
endif(ENABLE_CUDA)
|
||||
|
||||
|
||||
|
||||
set(TRACKING_LIB_SOURCES
|
||||
cpu_multicorrelator.cc
|
||||
cpu_multicorrelator_real_codes.cc
|
||||
@ -47,8 +46,25 @@ set(TRACKING_LIB_SOURCES
|
||||
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)
|
||||
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)
|
||||
|
||||
include_directories(
|
||||
@ -74,8 +90,9 @@ if (SSE3_AVAILABLE)
|
||||
endif(SSE3_AVAILABLE)
|
||||
|
||||
|
||||
file(GLOB TRACKING_LIB_HEADERS "*.h")
|
||||
list(SORT TRACKING_LIB_HEADERS)
|
||||
list(SORT TRACKING_LIB_SOURCES)
|
||||
|
||||
add_library(tracking_lib ${TRACKING_LIB_SOURCES} ${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})
|
||||
|
@ -29,6 +29,13 @@ set(CORE_LIBS_SOURCES
|
||||
gnss_sdr_supl_client.cc
|
||||
)
|
||||
|
||||
set(CORE_LIBS_HEADERS
|
||||
ini.h
|
||||
INIReader.h
|
||||
string_converter.h
|
||||
gnss_sdr_supl_client.h
|
||||
)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -40,8 +47,9 @@ include_directories(
|
||||
${Boost_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB CORE_LIBS_HEADERS "*.h")
|
||||
list(SORT CORE_LIBS_HEADERS)
|
||||
list(SORT CORE_LIBS_SOURCES)
|
||||
|
||||
add_library(rx_core_lib ${CORE_LIBS_SOURCES} ${CORE_LIBS_HEADERS})
|
||||
source_group(Headers FILES ${CORE_LIBS_HEADERS})
|
||||
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)
|
||||
{
|
||||
std::ifstream ifs;
|
||||
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);
|
||||
gps_ephemeris_map.clear();
|
||||
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";
|
||||
}
|
||||
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)
|
||||
{
|
||||
std::ofstream ofs;
|
||||
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);
|
||||
xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", eph_map);
|
||||
ofs.close();
|
||||
LOG(INFO) << "Saved Ephemeris map data";
|
||||
}
|
||||
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();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG(WARNING) << "Failed to save Ephemeris, map is empty";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool gnss_sdr_supl_client::load_utc_xml(const std::string file_name)
|
||||
{
|
||||
std::ifstream ifs;
|
||||
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);
|
||||
xml >> boost::serialization::make_nvp("GNSS-SDR_utc_map", this->gps_utc);
|
||||
ifs.close();
|
||||
LOG(INFO) << "Loaded UTC model data";
|
||||
}
|
||||
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)
|
||||
{
|
||||
std::ofstream ofs;
|
||||
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);
|
||||
xml << boost::serialization::make_nvp("GNSS-SDR_utc_map", utc_map);
|
||||
ofs.close();
|
||||
LOG(INFO) << "Saved UTC Model data";
|
||||
}
|
||||
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();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG(WARNING) << "Failed to save UTC model, map is empty";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool gnss_sdr_supl_client::load_iono_xml(const std::string file_name)
|
||||
{
|
||||
std::ifstream ifs;
|
||||
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);
|
||||
xml >> boost::serialization::make_nvp("GNSS-SDR_iono_map", this->gps_iono);
|
||||
ifs.close();
|
||||
LOG(INFO) << "Loaded IONO model data";
|
||||
}
|
||||
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)
|
||||
{
|
||||
std::ofstream ofs;
|
||||
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);
|
||||
xml << boost::serialization::make_nvp("GNSS-SDR_iono_map", iono_map);
|
||||
ofs.close();
|
||||
LOG(INFO) << "Saved IONO Model data";
|
||||
}
|
||||
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();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG(WARNING) << "Failed to save IONO model, map is empty";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool gnss_sdr_supl_client::load_ref_time_xml(const std::string file_name)
|
||||
{
|
||||
std::ifstream ifs;
|
||||
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);
|
||||
xml >> boost::serialization::make_nvp("GNSS-SDR_ref_time_map", this->gps_time);
|
||||
ifs.close();
|
||||
LOG(INFO) << "Loaded Ref Time data";
|
||||
}
|
||||
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)
|
||||
{
|
||||
std::ofstream ofs;
|
||||
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);
|
||||
xml << boost::serialization::make_nvp("GNSS-SDR_ref_time_map", ref_time_map);
|
||||
ofs.close();
|
||||
|
||||
LOG(INFO) << "Saved Ref Time data";
|
||||
}
|
||||
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();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG(WARNING) << "Failed to save Ref Time, map is empty";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool gnss_sdr_supl_client::load_ref_location_xml(const std::string file_name)
|
||||
{
|
||||
std::ifstream ifs;
|
||||
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);
|
||||
xml >> boost::serialization::make_nvp("GNSS-SDR_ref_location_map", this->gps_ref_loc);
|
||||
ifs.close();
|
||||
LOG(INFO) << "Loaded Ref Location data";
|
||||
}
|
||||
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)
|
||||
{
|
||||
std::ofstream ofs;
|
||||
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);
|
||||
xml << boost::serialization::make_nvp("GNSS-SDR_ref_location_map", ref_location_map);
|
||||
ofs.close();
|
||||
LOG(INFO) << "Saved Ref Location data";
|
||||
}
|
||||
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();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG(WARNING) << "Failed to save Ref Location, map is empty";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -22,6 +22,12 @@ set(CORE_MONITOR_LIBS_SOURCES
|
||||
gnss_synchro_udp_sink.cc
|
||||
)
|
||||
|
||||
set(CORE_MONITOR_LIBS_HEADERS
|
||||
gnss_synchro_monitor.h
|
||||
gnss_synchro_udp_sink.h
|
||||
)
|
||||
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -31,8 +37,9 @@ include_directories(
|
||||
${Boost_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB CORE_MONITOR_LIBS_HEADERS "*.h")
|
||||
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})
|
||||
source_group(Headers FILES ${CORE_MONITOR_LIBS_HEADERS})
|
||||
target_link_libraries(core_monitor_lib ${Boost_LIBRARIES})
|
||||
|
@ -26,6 +26,17 @@ set(GNSS_RECEIVER_SOURCES
|
||||
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)
|
||||
add_definitions(-DMODERN_GNURADIO=1)
|
||||
@ -149,10 +160,21 @@ include_directories(
|
||||
${VOLK_GNSSSDR_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
file(GLOB GNSS_RECEIVER_HEADERS "*.h")
|
||||
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)
|
||||
|
||||
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})
|
||||
|
||||
|
@ -801,8 +801,8 @@ void GNSSFlowgraph::wait()
|
||||
|
||||
bool GNSSFlowgraph::send_telemetry_msg(pmt::pmt_t msg)
|
||||
{
|
||||
//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)
|
||||
// Push ephemeris to PVT telemetry msg in port using a channel out port
|
||||
// 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);
|
||||
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)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(signal_list_mutex);
|
||||
DLOG(INFO) << "Received " << what << " from " << who << ". Number of applied actions = " << applied_actions_;
|
||||
unsigned int sat = 0;
|
||||
try
|
||||
@ -826,7 +827,6 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what)
|
||||
{
|
||||
LOG(WARNING) << e.what();
|
||||
}
|
||||
std::lock_guard<std::mutex> lock(signal_list_mutex);
|
||||
switch (what)
|
||||
{
|
||||
case 0:
|
||||
@ -1336,8 +1336,8 @@ void GNSSFlowgraph::set_signals_list()
|
||||
if (configuration_->property("Channels_1G.count", 0) > 0)
|
||||
{
|
||||
// Loop to create the list of GLONASS L1 C/A signals
|
||||
for (available_gnss_prn_iter = available_glonass_prn.begin();
|
||||
available_gnss_prn_iter != available_glonass_prn.end();
|
||||
for (available_gnss_prn_iter = available_glonass_prn.cbegin();
|
||||
available_gnss_prn_iter != available_glonass_prn.cend();
|
||||
available_gnss_prn_iter++)
|
||||
{
|
||||
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)
|
||||
{
|
||||
// Loop to create the list of GLONASS L2 C/A signals
|
||||
for (available_gnss_prn_iter = available_glonass_prn.begin();
|
||||
available_gnss_prn_iter != available_glonass_prn.end();
|
||||
for (available_gnss_prn_iter = available_glonass_prn.cbegin();
|
||||
available_gnss_prn_iter != available_glonass_prn.cend();
|
||||
available_gnss_prn_iter++)
|
||||
{
|
||||
available_GLO_2G_signals_.push_back(Gnss_Signal(
|
||||
@ -1363,6 +1363,7 @@ void GNSSFlowgraph::set_signals_list()
|
||||
|
||||
void GNSSFlowgraph::set_channels_state()
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(signal_list_mutex);
|
||||
max_acq_channels_ = configuration_->property("Channels.in_acquisition", 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];
|
||||
}
|
||||
std::lock_guard<std::mutex> lock(signal_list_mutex);
|
||||
acq_channels_count_ = max_acq_channels_;
|
||||
DLOG(INFO) << acq_channels_count_ << " channels in acquisition state";
|
||||
}
|
||||
@ -1599,16 +1599,16 @@ Gnss_Signal GNSSFlowgraph::search_next_signal(std::string searched_signal, bool
|
||||
return result;
|
||||
}
|
||||
|
||||
std::vector<std::string> GNSSFlowgraph::split_string(const std::string &s, char delim)
|
||||
std::vector<std::string> GNSSFlowgraph::split_string(const std::string& s, char delim)
|
||||
{
|
||||
std::vector<std::string> v;
|
||||
std::stringstream ss(s);
|
||||
std::string item;
|
||||
|
||||
while (std::getline(ss, item, delim))
|
||||
{
|
||||
*(std::back_inserter(v)++) = item;
|
||||
}
|
||||
{
|
||||
*(std::back_inserter(v)++) = item;
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
@ -45,6 +45,47 @@ set(SYSTEM_PARAMETERS_SOURCES
|
||||
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(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
@ -57,8 +98,10 @@ include_directories(
|
||||
)
|
||||
|
||||
link_directories(${Boost_LIBRARY_DIR})
|
||||
file(GLOB SYSTEM_PARAMETERS_HEADERS "*.h")
|
||||
|
||||
list(SORT SYSTEM_PARAMETERS_HEADERS)
|
||||
list(SORT SYSTEM_PARAMETERS_SOURCES)
|
||||
|
||||
add_library(gnss_system_parameters ${SYSTEM_PARAMETERS_SOURCES} ${SYSTEM_PARAMETERS_HEADERS})
|
||||
source_group(Headers FILES ${SYSTEM_PARAMETERS_HEADERS})
|
||||
add_dependencies(gnss_system_parameters rtklib_lib glog-${glog_RELEASE})
|
||||
|
@ -33,6 +33,7 @@
|
||||
#ifndef GNSS_SDR_GNSS_SYNCHRO_H_
|
||||
#define GNSS_SDR_GNSS_SYNCHRO_H_
|
||||
|
||||
#include <boost/serialization/nvp.hpp>
|
||||
#include "gnss_signal.h"
|
||||
#include <cstdint>
|
||||
|
||||
@ -83,41 +84,42 @@ public:
|
||||
* Gnss_Synchro objects from a byte stream.
|
||||
*/
|
||||
template <class Archive>
|
||||
|
||||
void serialize(Archive& ar, const unsigned int version)
|
||||
{
|
||||
if (version)
|
||||
{
|
||||
};
|
||||
// Satellite and signal info
|
||||
ar& System;
|
||||
ar& Signal;
|
||||
ar& PRN;
|
||||
ar& Channel_ID;
|
||||
ar& BOOST_SERIALIZATION_NVP(System);
|
||||
ar& BOOST_SERIALIZATION_NVP(Signal);
|
||||
ar& BOOST_SERIALIZATION_NVP(PRN);
|
||||
ar& BOOST_SERIALIZATION_NVP(Channel_ID);
|
||||
// Acquisition
|
||||
ar& Acq_delay_samples;
|
||||
ar& Acq_doppler_hz;
|
||||
ar& Acq_samplestamp_samples;
|
||||
ar& Acq_doppler_step;
|
||||
ar& Flag_valid_acquisition;
|
||||
ar& BOOST_SERIALIZATION_NVP(Acq_delay_samples);
|
||||
ar& BOOST_SERIALIZATION_NVP(Acq_doppler_hz);
|
||||
ar& BOOST_SERIALIZATION_NVP(Acq_samplestamp_samples);
|
||||
ar& BOOST_SERIALIZATION_NVP(Acq_doppler_step);
|
||||
ar& BOOST_SERIALIZATION_NVP(Flag_valid_acquisition);
|
||||
// Tracking
|
||||
ar& fs;
|
||||
ar& Prompt_I;
|
||||
ar& Prompt_Q;
|
||||
ar& CN0_dB_hz;
|
||||
ar& Carrier_Doppler_hz;
|
||||
ar& Carrier_phase_rads;
|
||||
ar& Code_phase_samples;
|
||||
ar& Tracking_sample_counter;
|
||||
ar& Flag_valid_symbol_output;
|
||||
ar& correlation_length_ms;
|
||||
ar& BOOST_SERIALIZATION_NVP(fs);
|
||||
ar& BOOST_SERIALIZATION_NVP(Prompt_I);
|
||||
ar& BOOST_SERIALIZATION_NVP(Prompt_Q);
|
||||
ar& BOOST_SERIALIZATION_NVP(CN0_dB_hz);
|
||||
ar& BOOST_SERIALIZATION_NVP(Carrier_Doppler_hz);
|
||||
ar& BOOST_SERIALIZATION_NVP(Carrier_phase_rads);
|
||||
ar& BOOST_SERIALIZATION_NVP(Code_phase_samples);
|
||||
ar& BOOST_SERIALIZATION_NVP(Tracking_sample_counter);
|
||||
ar& BOOST_SERIALIZATION_NVP(Flag_valid_symbol_output);
|
||||
ar& BOOST_SERIALIZATION_NVP(correlation_length_ms);
|
||||
// Telemetry Decoder
|
||||
ar& Flag_valid_word;
|
||||
ar& TOW_at_current_symbol_ms;
|
||||
ar& BOOST_SERIALIZATION_NVP(Flag_valid_word);
|
||||
ar& BOOST_SERIALIZATION_NVP(TOW_at_current_symbol_ms);
|
||||
// Observables
|
||||
ar& Pseudorange_m;
|
||||
ar& RX_time;
|
||||
ar& Flag_valid_pseudorange;
|
||||
ar& interp_TOW_ms;
|
||||
ar& BOOST_SERIALIZATION_NVP(Pseudorange_m);
|
||||
ar& BOOST_SERIALIZATION_NVP(RX_time);
|
||||
ar& BOOST_SERIALIZATION_NVP(Flag_valid_pseudorange);
|
||||
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_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_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_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]
|
||||
|
@ -179,6 +179,7 @@ endif(ENABLE_UNIT_TESTING_MINIMAL)
|
||||
################################################################################
|
||||
# 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_FPGA)
|
||||
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 "")
|
||||
endif(ENABLE_FPGA)
|
||||
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(-DDEFAULT_RINEX_NAV="${CMAKE_INSTALL_PREFIX}/share/gnss-sim/brdc3540.14n")
|
||||
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(
|
||||
gnss-sim
|
||||
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_POSITION_FILE="${CMAKE_CURRENT_BINARY_DIR}/../../../thirdparty/gnss-sim/circle.csv")
|
||||
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/
|
||||
@ -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/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/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/")
|
||||
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/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/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/")
|
||||
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_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(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
|
||||
|
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_filename", "./acquisition");
|
||||
config->set_property("Acquisition_1C.dump_channel", "1");
|
||||
config->set_property("Acquisition_1C.blocking", "true");
|
||||
|
||||
// Set Tracking
|
||||
config->set_property("Tracking_1C.implementation", "GPS_L1_CA_DLL_PLL_Tracking");
|
||||
|
@ -75,7 +75,7 @@ DECLARE_string(log_dir);
|
||||
#if EXTRA_TESTS
|
||||
#include "unit-tests/signal-processing-blocks/acquisition/acq_performance_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"
|
||||
#endif
|
||||
#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_kf_tracking_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
|
||||
#include "unit-tests/signal-processing-blocks/tracking/tracking_pull-in_test_fpga.cc"
|
||||
#endif
|
||||
|
@ -236,6 +236,11 @@ public:
|
||||
arma::mat& measured_ch1,
|
||||
std::string data_title);
|
||||
|
||||
void check_results_duplicated_satellite(
|
||||
arma::mat& measured_sat1,
|
||||
arma::mat& measured_sat2,
|
||||
std::string data_title);
|
||||
|
||||
HybridObservablesTest()
|
||||
{
|
||||
factory = std::make_shared<GNSSBlockFactory>();
|
||||
@ -987,6 +992,207 @@ void HybridObservablesTest::check_results_carrier_doppler(
|
||||
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)
|
||||
{
|
||||
try
|
||||
@ -1535,7 +1741,6 @@ TEST_F(HybridObservablesTest, ValidationOfResults)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Cut measurement tail zeros
|
||||
arma::uvec index;
|
||||
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
|
||||
|
||||
double initial_transitory_s = FLAGS_skip_obs_transitory_s;
|
||||
|
||||
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");
|
||||
@ -1567,83 +1770,128 @@ TEST_F(HybridObservablesTest, ValidationOfResults)
|
||||
}
|
||||
|
||||
|
||||
//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
|
||||
//decoding of the ephemeris data and solve the PVT equations)
|
||||
|
||||
//Find the reference satellite (the nearest) and compute the receiver time offset at observable level
|
||||
double min_pr = std::numeric_limits<double>::max();
|
||||
unsigned int min_pr_ch_id = 0;
|
||||
for (unsigned int n = 0; n < measured_obs_vec.size(); n++)
|
||||
if (FLAGS_duplicated_satellites_test)
|
||||
{
|
||||
if (epoch_counters_vec.at(n) > 10) //discard non-valid channels
|
||||
//special test mode for duplicated satellites
|
||||
std::vector<int> prn_pairs;
|
||||
std::stringstream ss(FLAGS_duplicated_satellites_prns);
|
||||
int i;
|
||||
while (ss >> i)
|
||||
{
|
||||
{
|
||||
if (measured_obs_vec.at(n)(0, 4) < min_pr)
|
||||
{
|
||||
min_pr = measured_obs_vec.at(n)(0, 4);
|
||||
min_pr_ch_id = n;
|
||||
}
|
||||
}
|
||||
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
|
||||
{
|
||||
std::cout << "PRN " << gnss_synchro_vec.at(n).PRN << " has NO observations!\n";
|
||||
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";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
arma::vec receiver_time_offset_ref_channel_s;
|
||||
receiver_time_offset_ref_channel_s = (true_obs_vec.at(min_pr_ch_id).col(1)(0) - measured_obs_vec.at(min_pr_ch_id).col(4)(0)) / GPS_C_m_s;
|
||||
std::cout << "Ref. channel initial Receiver time offset " << receiver_time_offset_ref_channel_s(0) * 1e3 << " [ms]" << std::endl;
|
||||
|
||||
for (unsigned int n = 0; n < measured_obs_vec.size(); n++)
|
||||
else
|
||||
{
|
||||
//debug save to .mat
|
||||
std::vector<double> tmp_vector_x(true_obs_vec.at(n).col(0).colptr(0),
|
||||
true_obs_vec.at(n).col(0).colptr(0) + true_obs_vec.at(n).col(0).n_rows);
|
||||
std::vector<double> tmp_vector_y(true_obs_vec.at(n).col(1).colptr(0),
|
||||
true_obs_vec.at(n).col(1).colptr(0) + true_obs_vec.at(n).col(1).n_rows);
|
||||
save_mat_xy(tmp_vector_x, tmp_vector_y, std::string("true_pr_ch_" + std::to_string(n)));
|
||||
//normal mode
|
||||
|
||||
std::vector<double> tmp_vector_x2(measured_obs_vec.at(n).col(0).colptr(0),
|
||||
measured_obs_vec.at(n).col(0).colptr(0) + measured_obs_vec.at(n).col(0).n_rows);
|
||||
std::vector<double> tmp_vector_y2(measured_obs_vec.at(n).col(4).colptr(0),
|
||||
measured_obs_vec.at(n).col(4).colptr(0) + measured_obs_vec.at(n).col(4).n_rows);
|
||||
save_mat_xy(tmp_vector_x2, tmp_vector_y2, std::string("measured_pr_ch_" + std::to_string(n)));
|
||||
//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
|
||||
//decoding of the ephemeris data and solve the PVT equations)
|
||||
|
||||
std::vector<double> tmp_vector_x3(true_obs_vec.at(n).col(0).colptr(0),
|
||||
true_obs_vec.at(n).col(0).colptr(0) + true_obs_vec.at(n).col(0).n_rows);
|
||||
std::vector<double> tmp_vector_y3(true_obs_vec.at(n).col(2).colptr(0),
|
||||
true_obs_vec.at(n).col(2).colptr(0) + true_obs_vec.at(n).col(2).n_rows);
|
||||
save_mat_xy(tmp_vector_x3, tmp_vector_y3, std::string("true_doppler_ch_" + std::to_string(n)));
|
||||
|
||||
std::vector<double> tmp_vector_x4(measured_obs_vec.at(n).col(0).colptr(0),
|
||||
measured_obs_vec.at(n).col(0).colptr(0) + measured_obs_vec.at(n).col(0).n_rows);
|
||||
std::vector<double> tmp_vector_y4(measured_obs_vec.at(n).col(2).colptr(0),
|
||||
measured_obs_vec.at(n).col(2).colptr(0) + measured_obs_vec.at(n).col(2).n_rows);
|
||||
save_mat_xy(tmp_vector_x4, tmp_vector_y4, std::string("measured_doppler_ch_" + std::to_string(n)));
|
||||
|
||||
|
||||
if (epoch_counters_vec.at(n) > 10) //discard non-valid channels
|
||||
//Find the reference satellite (the nearest) and compute the receiver time offset at observable level
|
||||
double min_pr = std::numeric_limits<double>::max();
|
||||
unsigned int min_pr_ch_id = 0;
|
||||
for (unsigned int n = 0; n < measured_obs_vec.size(); n++)
|
||||
{
|
||||
arma::vec true_TOW_ref_ch_s = true_obs_vec.at(min_pr_ch_id).col(0) - receiver_time_offset_ref_channel_s(0);
|
||||
arma::vec true_TOW_ch_s = true_obs_vec.at(n).col(0) - receiver_time_offset_ref_channel_s(0);
|
||||
//Compare measured observables
|
||||
if (min_pr_ch_id != n)
|
||||
if (epoch_counters_vec.at(n) > 10) //discard non-valid channels
|
||||
{
|
||||
check_results_code_pseudorange(true_obs_vec.at(n),
|
||||
true_obs_vec.at(min_pr_ch_id),
|
||||
true_TOW_ch_s,
|
||||
true_TOW_ref_ch_s,
|
||||
measured_obs_vec.at(n),
|
||||
measured_obs_vec.at(min_pr_ch_id),
|
||||
"[CH " + std::to_string(n) + "] PRN " + std::to_string(gnss_synchro_vec.at(n).PRN) + " ");
|
||||
{
|
||||
if (measured_obs_vec.at(n)(0, 4) < min_pr)
|
||||
{
|
||||
min_pr = measured_obs_vec.at(n)(0, 4);
|
||||
min_pr_ch_id = n;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "PRN " << gnss_synchro_vec.at(n).PRN << " has NO observations!\n";
|
||||
}
|
||||
}
|
||||
|
||||
//Do not compare E5a with E5 RINEX due to the Doppler frequency discrepancy caused by the different center frequencies
|
||||
//E5a_fc=1176.45e6, E5b_fc=1207.14e6, E5_fc=1191.795e6;
|
||||
if (strcmp("5X\0", gnss_synchro_vec.at(n).Signal) != 0 or FLAGS_compare_with_5X)
|
||||
arma::vec receiver_time_offset_ref_channel_s;
|
||||
receiver_time_offset_ref_channel_s = (true_obs_vec.at(min_pr_ch_id).col(1)(0) - measured_obs_vec.at(min_pr_ch_id).col(4)(0)) / GPS_C_m_s;
|
||||
std::cout << "Ref. channel initial Receiver time offset " << receiver_time_offset_ref_channel_s(0) * 1e3 << " [ms]" << std::endl;
|
||||
|
||||
for (unsigned int n = 0; n < measured_obs_vec.size(); n++)
|
||||
{
|
||||
//debug save to .mat
|
||||
std::vector<double> tmp_vector_x(true_obs_vec.at(n).col(0).colptr(0),
|
||||
true_obs_vec.at(n).col(0).colptr(0) + true_obs_vec.at(n).col(0).n_rows);
|
||||
std::vector<double> tmp_vector_y(true_obs_vec.at(n).col(1).colptr(0),
|
||||
true_obs_vec.at(n).col(1).colptr(0) + true_obs_vec.at(n).col(1).n_rows);
|
||||
save_mat_xy(tmp_vector_x, tmp_vector_y, std::string("true_pr_ch_" + std::to_string(n)));
|
||||
|
||||
std::vector<double> tmp_vector_x2(measured_obs_vec.at(n).col(0).colptr(0),
|
||||
measured_obs_vec.at(n).col(0).colptr(0) + measured_obs_vec.at(n).col(0).n_rows);
|
||||
std::vector<double> tmp_vector_y2(measured_obs_vec.at(n).col(4).colptr(0),
|
||||
measured_obs_vec.at(n).col(4).colptr(0) + measured_obs_vec.at(n).col(4).n_rows);
|
||||
save_mat_xy(tmp_vector_x2, tmp_vector_y2, std::string("measured_pr_ch_" + std::to_string(n)));
|
||||
|
||||
std::vector<double> tmp_vector_x3(true_obs_vec.at(n).col(0).colptr(0),
|
||||
true_obs_vec.at(n).col(0).colptr(0) + true_obs_vec.at(n).col(0).n_rows);
|
||||
std::vector<double> tmp_vector_y3(true_obs_vec.at(n).col(2).colptr(0),
|
||||
true_obs_vec.at(n).col(2).colptr(0) + true_obs_vec.at(n).col(2).n_rows);
|
||||
save_mat_xy(tmp_vector_x3, tmp_vector_y3, std::string("true_doppler_ch_" + std::to_string(n)));
|
||||
|
||||
std::vector<double> tmp_vector_x4(measured_obs_vec.at(n).col(0).colptr(0),
|
||||
measured_obs_vec.at(n).col(0).colptr(0) + measured_obs_vec.at(n).col(0).n_rows);
|
||||
std::vector<double> tmp_vector_y4(measured_obs_vec.at(n).col(2).colptr(0),
|
||||
measured_obs_vec.at(n).col(2).colptr(0) + measured_obs_vec.at(n).col(2).n_rows);
|
||||
save_mat_xy(tmp_vector_x4, tmp_vector_y4, std::string("measured_doppler_ch_" + std::to_string(n)));
|
||||
|
||||
|
||||
if (epoch_counters_vec.at(n) > 10) //discard non-valid channels
|
||||
{
|
||||
arma::vec true_TOW_ref_ch_s = true_obs_vec.at(min_pr_ch_id).col(0) - receiver_time_offset_ref_channel_s(0);
|
||||
arma::vec true_TOW_ch_s = true_obs_vec.at(n).col(0) - receiver_time_offset_ref_channel_s(0);
|
||||
//Compare measured observables
|
||||
if (min_pr_ch_id != n)
|
||||
{
|
||||
check_results_carrier_phase_double_diff(true_obs_vec.at(n),
|
||||
check_results_code_pseudorange(true_obs_vec.at(n),
|
||||
true_obs_vec.at(min_pr_ch_id),
|
||||
true_TOW_ch_s,
|
||||
true_TOW_ref_ch_s,
|
||||
@ -1651,34 +1899,47 @@ TEST_F(HybridObservablesTest, ValidationOfResults)
|
||||
measured_obs_vec.at(min_pr_ch_id),
|
||||
"[CH " + std::to_string(n) + "] PRN " + std::to_string(gnss_synchro_vec.at(n).PRN) + " ");
|
||||
|
||||
check_results_carrier_doppler_double_diff(true_obs_vec.at(n),
|
||||
true_obs_vec.at(min_pr_ch_id),
|
||||
//Do not compare E5a with E5 RINEX due to the Doppler frequency discrepancy caused by the different center frequencies
|
||||
//E5a_fc=1176.45e6, E5b_fc=1207.14e6, E5_fc=1191.795e6;
|
||||
if (strcmp("5X\0", gnss_synchro_vec.at(n).Signal) != 0 or FLAGS_compare_with_5X)
|
||||
{
|
||||
check_results_carrier_phase_double_diff(true_obs_vec.at(n),
|
||||
true_obs_vec.at(min_pr_ch_id),
|
||||
true_TOW_ch_s,
|
||||
true_TOW_ref_ch_s,
|
||||
measured_obs_vec.at(n),
|
||||
measured_obs_vec.at(min_pr_ch_id),
|
||||
"[CH " + std::to_string(n) + "] PRN " + std::to_string(gnss_synchro_vec.at(n).PRN) + " ");
|
||||
|
||||
check_results_carrier_doppler_double_diff(true_obs_vec.at(n),
|
||||
true_obs_vec.at(min_pr_ch_id),
|
||||
true_TOW_ch_s,
|
||||
true_TOW_ref_ch_s,
|
||||
measured_obs_vec.at(n),
|
||||
measured_obs_vec.at(min_pr_ch_id),
|
||||
"[CH " + std::to_string(n) + "] PRN " + std::to_string(gnss_synchro_vec.at(n).PRN) + " ");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "[CH " << std::to_string(n) << "] PRN " << std::to_string(gnss_synchro_vec.at(n).PRN) << " is the reference satellite" << std::endl;
|
||||
}
|
||||
if (FLAGS_compute_single_diffs)
|
||||
{
|
||||
check_results_carrier_phase(true_obs_vec.at(n),
|
||||
true_TOW_ch_s,
|
||||
measured_obs_vec.at(n),
|
||||
"[CH " + std::to_string(n) + "] PRN " + std::to_string(gnss_synchro_vec.at(n).PRN) + " ");
|
||||
check_results_carrier_doppler(true_obs_vec.at(n),
|
||||
true_TOW_ch_s,
|
||||
true_TOW_ref_ch_s,
|
||||
measured_obs_vec.at(n),
|
||||
measured_obs_vec.at(min_pr_ch_id),
|
||||
"[CH " + std::to_string(n) + "] PRN " + std::to_string(gnss_synchro_vec.at(n).PRN) + " ");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "[CH " << std::to_string(n) << "] PRN " << std::to_string(gnss_synchro_vec.at(n).PRN) << " is the reference satellite" << std::endl;
|
||||
std::cout << "PRN " << gnss_synchro_vec.at(n).PRN << " has NO observations!\n";
|
||||
}
|
||||
if (FLAGS_compute_single_diffs)
|
||||
{
|
||||
check_results_carrier_phase(true_obs_vec.at(n),
|
||||
true_TOW_ch_s,
|
||||
measured_obs_vec.at(n),
|
||||
"[CH " + std::to_string(n) + "] PRN " + std::to_string(gnss_synchro_vec.at(n).PRN) + " ");
|
||||
check_results_carrier_doppler(true_obs_vec.at(n),
|
||||
true_TOW_ch_s,
|
||||
measured_obs_vec.at(n),
|
||||
"[CH " + std::to_string(n) + "] PRN " + std::to_string(gnss_synchro_vec.at(n).PRN) + " ");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "PRN " << gnss_synchro_vec.at(n).PRN << " has NO observations!\n";
|
||||
}
|
||||
}
|
||||
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)
|
||||
|
||||
set(FRONT_END_CAL_SOURCES front_end_cal.cc)
|
||||
set(FRONT_END_CAL_HEADERS front_end_cal.h)
|
||||
|
||||
|
||||
include_directories(
|
||||
${CMAKE_SOURCE_DIR}/src/core/system_parameters
|
||||
@ -44,8 +46,6 @@ include_directories(
|
||||
${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})
|
||||
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)
|
||||
endif(NOT GZIP_NOTFOUND)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user