From 58853ace7d1a39a4157b4c967426ea5938f99b43 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Tue, 7 Jul 2020 00:05:31 +0200 Subject: [PATCH] Implement GNSS-SDR.GPS_banned_prns, GNSS-SDR.Galileo_banned_prns, GNSS-SDR.Glonass_banned_prns, and GNSS-SDR.Beidou_banned_prns configuration parameters. The user can specify lists of satellites that will not be processed (e.g. GNSS-SDR.Galileo_banned_prns=14,18 since Galileo E14 and E18 satellites are not usable for PVT). Documented at https://gnss-sdr.org/docs/sp-blocks/global-parameters/\#banned-satellites Inspired by #397 --- ...nss-sdr_Galileo_E1_USRP_X300_realtime.conf | 1 + ..._all_in_one_Flexiband_bin_file_III_1b.conf | 1 + docs/changelog.md | 6 + src/core/receiver/gnss_flowgraph.cc | 121 ++++++++++++++++++ 4 files changed, 129 insertions(+) diff --git a/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf b/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf index 212beb42a..eb93eb43d 100644 --- a/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf +++ b/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf @@ -14,6 +14,7 @@ ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=4000000 +GNSS-SDR.Galileo_banned_prns=14,18 ;######### SIGNAL_SOURCE CONFIG ############ diff --git a/conf/gnss-sdr_multichannel_all_in_one_Flexiband_bin_file_III_1b.conf b/conf/gnss-sdr_multichannel_all_in_one_Flexiband_bin_file_III_1b.conf index 7fdde36c3..a9ec9e564 100644 --- a/conf/gnss-sdr_multichannel_all_in_one_Flexiband_bin_file_III_1b.conf +++ b/conf/gnss-sdr_multichannel_all_in_one_Flexiband_bin_file_III_1b.conf @@ -12,6 +12,7 @@ ;######### GLOBAL OPTIONS ################## ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. GNSS-SDR.internal_fs_sps=5000000 +GNSS-SDR.Galileo_banned_prns=14,18 ;######### SUPL RRLP GPS assistance configuration ##### diff --git a/docs/changelog.md b/docs/changelog.md index 744d51120..320b26590 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -85,6 +85,12 @@ SPDX-FileCopyrightText: 2011-2020 Carles Fernandez-Prades // for insert_iterator, inserter #include // for std::shared_ptr #include // for set +#include // for std::stringstream #include // for invalid_argument #include // for std::thread #include // for std::move @@ -1668,6 +1669,30 @@ void GNSSFlowgraph::set_signals_list() } } + std::string sv_banned = configuration_->property("GNSS-SDR.Galileo_banned_prns", std::string("")); + if (!sv_banned.empty()) + { + std::stringstream ss(sv_banned); + while (ss.good()) + { + std::string substr; + std::getline(ss, substr, ','); + try + { + auto banned = static_cast(std::stoi(substr)); + available_galileo_prn.erase(banned); + } + catch (const std::invalid_argument& ia) + { + std::cerr << "Invalid argument at GNSS-SDR.Galileo_banned_prns configuration parameter: " << ia.what() << '\n'; + } + catch (const std::out_of_range& oor) + { + std::cerr << "Out of range at GNSS-SDR.Galileo_banned_prns configuration parameter: " << oor.what() << '\n'; + } + } + } + sv_list = configuration_->property("GPS.prns", std::string("")); if (sv_list.length() > 0) @@ -1684,6 +1709,30 @@ void GNSSFlowgraph::set_signals_list() } } + sv_banned = configuration_->property("GNSS-SDR.GPS_banned_prns", std::string("")); + if (!sv_banned.empty()) + { + std::stringstream ss(sv_banned); + while (ss.good()) + { + std::string substr; + std::getline(ss, substr, ','); + try + { + auto banned = static_cast(std::stoi(substr)); + available_gps_prn.erase(banned); + } + catch (const std::invalid_argument& ia) + { + std::cerr << "Invalid argument at GNSS-SDR.GPS_banned_prns configuration parameter: " << ia.what() << '\n'; + } + catch (const std::out_of_range& oor) + { + std::cerr << "Out of range at GNSS-SDR.GPS_banned_prns configuration parameter: " << oor.what() << '\n'; + } + } + } + sv_list = configuration_->property("SBAS.prns", std::string("")); if (sv_list.length() > 0) @@ -1700,6 +1749,30 @@ void GNSSFlowgraph::set_signals_list() } } + sv_banned = configuration_->property("GNSS-SDR.SBAS_banned_prns", std::string("")); + if (!sv_banned.empty()) + { + std::stringstream ss(sv_banned); + while (ss.good()) + { + std::string substr; + std::getline(ss, substr, ','); + try + { + auto banned = static_cast(std::stoi(substr)); + available_sbas_prn.erase(banned); + } + catch (const std::invalid_argument& ia) + { + std::cerr << "Invalid argument at GNSS-SDR.SBAS_banned_prns configuration parameter: " << ia.what() << '\n'; + } + catch (const std::out_of_range& oor) + { + std::cerr << "Out of range at GNSS-SDR.SBAS_banned_prns configuration parameter: " << oor.what() << '\n'; + } + } + } + sv_list = configuration_->property("Glonass.prns", std::string("")); if (sv_list.length() > 0) @@ -1716,6 +1789,30 @@ void GNSSFlowgraph::set_signals_list() } } + sv_banned = configuration_->property("GNSS-SDR.Glonass_banned_prns", std::string("")); + if (!sv_banned.empty()) + { + std::stringstream ss(sv_banned); + while (ss.good()) + { + std::string substr; + std::getline(ss, substr, ','); + try + { + auto banned = static_cast(std::stoi(substr)); + available_glonass_prn.erase(banned); + } + catch (const std::invalid_argument& ia) + { + std::cerr << "Invalid argument at GNSS-SDR.Glonass_banned_prns configuration parameter: " << ia.what() << '\n'; + } + catch (const std::out_of_range& oor) + { + std::cerr << "Out of range at GNSS-SDR.Glonass_banned_prns configuration parameter: " << oor.what() << '\n'; + } + } + } + sv_list = configuration_->property("Beidou.prns", std::string("")); if (sv_list.length() > 0) @@ -1732,6 +1829,30 @@ void GNSSFlowgraph::set_signals_list() } } + sv_banned = configuration_->property("GNSS-SDR.Beidou_banned_prns", std::string("")); + if (!sv_banned.empty()) + { + std::stringstream ss(sv_banned); + while (ss.good()) + { + std::string substr; + std::getline(ss, substr, ','); + try + { + auto banned = static_cast(std::stoi(substr)); + available_beidou_prn.erase(banned); + } + catch (const std::invalid_argument& ia) + { + std::cerr << "Invalid argument at GNSS-SDR.Beidou_banned_prns configuration parameter: " << ia.what() << '\n'; + } + catch (const std::out_of_range& oor) + { + std::cerr << "Out of range at GNSS-SDR.Beidou_banned_prns configuration parameter: " << oor.what() << '\n'; + } + } + } + if (configuration_->property("Channels_1C.count", 0) > 0) { // Loop to create GPS L1 C/A signals