mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-30 14:53:03 +00:00 
			
		
		
		
	Updated GNSS Flowgraph
This commit is contained in:
		| @@ -9,7 +9,7 @@ | |||||||
|  * |  * | ||||||
|  * ------------------------------------------------------------------------- |  * ------------------------------------------------------------------------- | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2010-2019  (see AUTHORS file for a list of contributors) |  * Copyright (C) 2010-2020  (see AUTHORS file for a list of contributors) | ||||||
|  * |  * | ||||||
|  * GNSS-SDR is a software defined Global Navigation |  * GNSS-SDR is a software defined Global Navigation | ||||||
|  *          Satellite Systems receiver |  *          Satellite Systems receiver | ||||||
| @@ -27,6 +27,7 @@ | |||||||
| #include "GPS_L5.h" | #include "GPS_L5.h" | ||||||
| #include "Galileo_E1.h" | #include "Galileo_E1.h" | ||||||
| #include "Galileo_E5a.h" | #include "Galileo_E5a.h" | ||||||
|  | #include "Galileo_E5b.h" | ||||||
| #include "channel.h" | #include "channel.h" | ||||||
| #include "channel_fsm.h" | #include "channel_fsm.h" | ||||||
| #include "channel_interface.h" | #include "channel_interface.h" | ||||||
| @@ -405,6 +406,9 @@ void GNSSFlowgraph::connect() | |||||||
|                                         case evGAL_5X: |                                         case evGAL_5X: | ||||||
|                                             acq_fs = GALILEO_E5A_OPT_ACQ_FS_SPS; |                                             acq_fs = GALILEO_E5A_OPT_ACQ_FS_SPS; | ||||||
|                                             break; |                                             break; | ||||||
|  |                                         case evGAL_7X: | ||||||
|  |                                             acq_fs = GALILEO_E5B_OPT_ACQ_FS_SPS; | ||||||
|  |                                             break; | ||||||
|                                         case evGLO_1G: |                                         case evGLO_1G: | ||||||
|                                             acq_fs = fs; |                                             acq_fs = fs; | ||||||
|                                             break; |                                             break; | ||||||
| @@ -630,6 +634,12 @@ void GNSSFlowgraph::connect() | |||||||
|                             available_GAL_5X_signals_.remove(signal_value); |                             available_GAL_5X_signals_.remove(signal_value); | ||||||
|                             break; |                             break; | ||||||
|  |  | ||||||
|  |                         case evGAL_7X: | ||||||
|  |                             gnss_system = "Galileo"; | ||||||
|  |                             signal_value = Gnss_Signal(Gnss_Satellite(gnss_system, sat), gnss_signal); | ||||||
|  |                             available_GAL_7X_signals_.remove(signal_value); | ||||||
|  |                             break; | ||||||
|  |  | ||||||
|                         case evGLO_1G: |                         case evGLO_1G: | ||||||
|                             gnss_system = "Glonass"; |                             gnss_system = "Glonass"; | ||||||
|                             signal_value = Gnss_Signal(Gnss_Satellite(gnss_system, sat), gnss_signal); |                             signal_value = Gnss_Signal(Gnss_Satellite(gnss_system, sat), gnss_signal); | ||||||
| @@ -1081,6 +1091,11 @@ void GNSSFlowgraph::push_back_signal(const Gnss_Signal& gs) | |||||||
|             available_GAL_5X_signals_.push_back(gs); |             available_GAL_5X_signals_.push_back(gs); | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
|  |         case evGAL_7X: | ||||||
|  |             available_GAL_7X_signals_.remove(gs); | ||||||
|  |             available_GAL_7X_signals_.push_back(gs); | ||||||
|  |             break; | ||||||
|  |  | ||||||
|         case evGLO_1G: |         case evGLO_1G: | ||||||
|             available_GLO_1G_signals_.remove(gs); |             available_GLO_1G_signals_.remove(gs); | ||||||
|             available_GLO_1G_signals_.push_back(gs); |             available_GLO_1G_signals_.push_back(gs); | ||||||
| @@ -1132,6 +1147,10 @@ void GNSSFlowgraph::remove_signal(const Gnss_Signal& gs) | |||||||
|             available_GAL_5X_signals_.remove(gs); |             available_GAL_5X_signals_.remove(gs); | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
|  |         case evGAL_7X: | ||||||
|  |             available_GAL_7X_signals_.remove(gs); | ||||||
|  |             break; | ||||||
|  |  | ||||||
|         case evGLO_1G: |         case evGLO_1G: | ||||||
|             available_GLO_1G_signals_.remove(gs); |             available_GLO_1G_signals_.remove(gs); | ||||||
|             break; |             break; | ||||||
| @@ -1166,6 +1185,9 @@ double GNSSFlowgraph::project_doppler(const std::string& searched_signal, double | |||||||
|         case evGAL_5X: |         case evGAL_5X: | ||||||
|             return (primary_freq_doppler_hz / FREQ1) * FREQ5; |             return (primary_freq_doppler_hz / FREQ1) * FREQ5; | ||||||
|             break; |             break; | ||||||
|  |         case evGAL_7X: | ||||||
|  |             return (primary_freq_doppler_hz / FREQ1) * FREQ7; | ||||||
|  |             break; | ||||||
|         case evGPS_2S: |         case evGPS_2S: | ||||||
|             return (primary_freq_doppler_hz / FREQ1) * FREQ2; |             return (primary_freq_doppler_hz / FREQ1) * FREQ2; | ||||||
|             break; |             break; | ||||||
| @@ -1425,6 +1447,14 @@ void GNSSFlowgraph::priorize_satellites(const std::vector<std::pair<int, Gnss_Sa | |||||||
|                         { |                         { | ||||||
|                             available_GAL_5X_signals_.push_front(gs); |                             available_GAL_5X_signals_.push_front(gs); | ||||||
|                         } |                         } | ||||||
|  |  | ||||||
|  |                     gs = Gnss_Signal(visible_satellite.second, "7X"); | ||||||
|  |                     old_size = available_GAL_7X_signals_.size(); | ||||||
|  |                     available_GAL_7X_signals_.remove(gs); | ||||||
|  |                     if (old_size > available_GAL_7X_signals_.size()) | ||||||
|  |                         { | ||||||
|  |                             available_GAL_7X_signals_.push_front(gs); | ||||||
|  |                         } | ||||||
|                 } |                 } | ||||||
|         } |         } | ||||||
| } | } | ||||||
| @@ -1569,6 +1599,7 @@ void GNSSFlowgraph::init() | |||||||
|     mapStringValues_["L5"] = evGPS_L5; |     mapStringValues_["L5"] = evGPS_L5; | ||||||
|     mapStringValues_["1B"] = evGAL_1B; |     mapStringValues_["1B"] = evGAL_1B; | ||||||
|     mapStringValues_["5X"] = evGAL_5X; |     mapStringValues_["5X"] = evGAL_5X; | ||||||
|  |     mapStringValues_["7X"] = evGAL_7X; | ||||||
|     mapStringValues_["1G"] = evGLO_1G; |     mapStringValues_["1G"] = evGLO_1G; | ||||||
|     mapStringValues_["2G"] = evGLO_2G; |     mapStringValues_["2G"] = evGLO_2G; | ||||||
|     mapStringValues_["B1"] = evBDS_B1; |     mapStringValues_["B1"] = evBDS_B1; | ||||||
| @@ -1800,6 +1831,19 @@ void GNSSFlowgraph::set_signals_list() | |||||||
|                 } |                 } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |     if (configuration_->property("Channels_7X.count", 0) > 0) | ||||||
|  |         { | ||||||
|  |             // Loop to create the list of Galileo E5b signals | ||||||
|  |             for (available_gnss_prn_iter = available_galileo_prn.cbegin(); | ||||||
|  |                  available_gnss_prn_iter != available_galileo_prn.cend(); | ||||||
|  |                  available_gnss_prn_iter++) | ||||||
|  |                 { | ||||||
|  |                     available_GAL_7X_signals_.emplace_back( | ||||||
|  |                         Gnss_Satellite(std::string("Galileo"), *available_gnss_prn_iter), | ||||||
|  |                         std::string("7X")); | ||||||
|  |                 } | ||||||
|  |         } | ||||||
|  |  | ||||||
|     if (configuration_->property("Channels_1G.count", 0) > 0) |     if (configuration_->property("Channels_1G.count", 0) > 0) | ||||||
|         { |         { | ||||||
|             // Loop to create the list of GLONASS L1 C/A signals |             // Loop to create the list of GLONASS L1 C/A signals | ||||||
| @@ -1901,6 +1945,10 @@ bool GNSSFlowgraph::is_multiband() const | |||||||
|                 { |                 { | ||||||
|                     multiband = true; |                     multiband = true; | ||||||
|                 } |                 } | ||||||
|  |             if (configuration_->property("Channels_7X.count", 0) > 0) | ||||||
|  |                 { | ||||||
|  |                     multiband = true; | ||||||
|  |                 } | ||||||
|         } |         } | ||||||
|     if (configuration_->property("Channels_1G.count", 0) > 0) |     if (configuration_->property("Channels_1G.count", 0) > 0) | ||||||
|         { |         { | ||||||
| @@ -2094,6 +2142,50 @@ Gnss_Signal GNSSFlowgraph::search_next_signal(const std::string& searched_signal | |||||||
|                 } |                 } | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
|  |         case evGAL_7X: | ||||||
|  |             if (configuration_->property("Channels_1B.count", 0) > 0) | ||||||
|  |                 { | ||||||
|  |                     // 1. Get the current channel status map | ||||||
|  |                     std::map<int, std::shared_ptr<Gnss_Synchro>> current_channels_status = channels_status_->get_current_status_map(); | ||||||
|  |                     // 2. search the currently tracked Galileo E1 satellites and assist the Galileo E5 acquisition if the satellite is not tracked on E5 | ||||||
|  |                     for (auto& current_status : current_channels_status) | ||||||
|  |                         { | ||||||
|  |                             if (std::string(current_status.second->Signal) == "1B") | ||||||
|  |                                 { | ||||||
|  |                                     std::list<Gnss_Signal>::iterator it2; | ||||||
|  |                                     it2 = std::find_if(std::begin(available_GAL_7X_signals_), std::end(available_GAL_7X_signals_), | ||||||
|  |                                         [&](Gnss_Signal const& sig) { return sig.get_satellite().get_PRN() == current_status.second->PRN; }); | ||||||
|  |  | ||||||
|  |                                     if (it2 != available_GAL_7X_signals_.end()) | ||||||
|  |                                         { | ||||||
|  |                                             estimated_doppler = current_status.second->Carrier_Doppler_hz; | ||||||
|  |                                             RX_time = current_status.second->RX_time; | ||||||
|  |                                             // std::cout << " Channel: " << it->first << " => Doppler: " << estimated_doppler << "[Hz] \n"; | ||||||
|  |                                             // 3. return the Gal 7X satellite and remove it from list | ||||||
|  |                                             result = *it2; | ||||||
|  |                                             if (pop) | ||||||
|  |                                                 { | ||||||
|  |                                                     available_GAL_7X_signals_.erase(it2); | ||||||
|  |                                                 } | ||||||
|  |                                             found_signal = true; | ||||||
|  |                                             assistance_available = true; | ||||||
|  |                                             break; | ||||||
|  |                                         } | ||||||
|  |                                 } | ||||||
|  |                         } | ||||||
|  |                 } | ||||||
|  |             // fallback: pick the front satellite because there is no tracked satellites in E1 to assist E5 | ||||||
|  |             if (found_signal == false) | ||||||
|  |                 { | ||||||
|  |                     result = available_GAL_7X_signals_.front(); | ||||||
|  |                     available_GAL_7X_signals_.pop_front(); | ||||||
|  |                     if (!pop) | ||||||
|  |                         { | ||||||
|  |                             available_GAL_7X_signals_.push_back(result); | ||||||
|  |                         } | ||||||
|  |                 } | ||||||
|  |             break; | ||||||
|  |  | ||||||
|         case evGLO_1G: |         case evGLO_1G: | ||||||
|             result = available_GLO_1G_signals_.front(); |             result = available_GLO_1G_signals_.front(); | ||||||
|             available_GLO_1G_signals_.pop_front(); |             available_GLO_1G_signals_.pop_front(); | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ | |||||||
|  * |  * | ||||||
|  * ------------------------------------------------------------------------- |  * ------------------------------------------------------------------------- | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2010-2019  (see AUTHORS file for a list of contributors) |  * Copyright (C) 2010-2020  (see AUTHORS file for a list of contributors) | ||||||
|  * |  * | ||||||
|  * GNSS-SDR is a software defined Global Navigation |  * GNSS-SDR is a software defined Global Navigation | ||||||
|  *          Satellite Systems receiver |  *          Satellite Systems receiver | ||||||
| @@ -205,6 +205,7 @@ private: | |||||||
|     std::list<Gnss_Signal> available_SBAS_1C_signals_; |     std::list<Gnss_Signal> available_SBAS_1C_signals_; | ||||||
|     std::list<Gnss_Signal> available_GAL_1B_signals_; |     std::list<Gnss_Signal> available_GAL_1B_signals_; | ||||||
|     std::list<Gnss_Signal> available_GAL_5X_signals_; |     std::list<Gnss_Signal> available_GAL_5X_signals_; | ||||||
|  |     std::list<Gnss_Signal> available_GAL_7X_signals_; | ||||||
|     std::list<Gnss_Signal> available_GLO_1G_signals_; |     std::list<Gnss_Signal> available_GLO_1G_signals_; | ||||||
|     std::list<Gnss_Signal> available_GLO_2G_signals_; |     std::list<Gnss_Signal> available_GLO_2G_signals_; | ||||||
|     std::list<Gnss_Signal> available_BDS_B1_signals_; |     std::list<Gnss_Signal> available_BDS_B1_signals_; | ||||||
| @@ -217,6 +218,7 @@ private: | |||||||
|         evSBAS_1C, |         evSBAS_1C, | ||||||
|         evGAL_1B, |         evGAL_1B, | ||||||
|         evGAL_5X, |         evGAL_5X, | ||||||
|  |         evGAL_7X, | ||||||
|         evGLO_1G, |         evGLO_1G, | ||||||
|         evGLO_2G, |         evGLO_2G, | ||||||
|         evBDS_B1, |         evBDS_B1, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 piyush0411
					piyush0411