mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 07:13:03 +00:00 
			
		
		
		
	Fix triple-band RINEX obs when not all signals are present
This commit is contained in:
		| @@ -3040,7 +3040,7 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | ||||
|                                                                     if ((gps_ephemeris_iter != d_user_pvt_solver->gps_ephemeris_map.cend()) and | ||||
|                                                                         (gps_cnav_ephemeris_iter != d_user_pvt_solver->gps_cnav_ephemeris_map.cend())) | ||||
|                                                                         { | ||||
|                                                                             rp->log_rinex_obs(rp->obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, d_rx_time, gnss_observables_map); | ||||
|                                                                             rp->log_rinex_obs(rp->obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, true); | ||||
|                                                                         } | ||||
|                                                                     if (!b_rinex_header_updated and (d_user_pvt_solver->gps_utc_model.d_A0 != 0)) | ||||
|                                                                         { | ||||
| @@ -3054,7 +3054,7 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | ||||
|                                                                         (gps_ephemeris_iter != d_user_pvt_solver->gps_ephemeris_map.cend()) and | ||||
|                                                                         (gps_cnav_ephemeris_iter != d_user_pvt_solver->gps_cnav_ephemeris_map.cend())) | ||||
|                                                                         { | ||||
|                                                                             rp->log_rinex_obs(rp->obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, galileo_ephemeris_iter->second, d_rx_time, gnss_observables_map); | ||||
|                                                                             rp->log_rinex_obs(rp->obsFile, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, galileo_ephemeris_iter->second, d_rx_time, gnss_observables_map, true); | ||||
|                                                                         } | ||||
|                                                                     if (!b_rinex_header_updated and (d_user_pvt_solver->gps_utc_model.d_A0 != 0) and (d_user_pvt_solver->galileo_utc_model.A0_6 != 0)) | ||||
|                                                                         { | ||||
|   | ||||
| @@ -10086,7 +10086,7 @@ void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_CNAV_Ephemeris& e | ||||
| } | ||||
|  | ||||
|  | ||||
| void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& eph, const Gps_CNAV_Ephemeris& eph_cnav, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables) | ||||
| void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& eph, const Gps_CNAV_Ephemeris& eph_cnav, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables, bool triple_band) | ||||
| { | ||||
|     if (eph_cnav.d_i_0) | ||||
|         { | ||||
| @@ -10255,8 +10255,19 @@ void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& eph, c | ||||
|                 } | ||||
|             lineObs += std::to_string(static_cast<int32_t>(*it)); | ||||
|             ret = total_mmap.equal_range(*it); | ||||
|             bool have_l2 = false; | ||||
|             for (auto iter = ret.first; iter != ret.second; ++iter) | ||||
|                 { | ||||
|                     std::string sig_(iter->second.Signal); | ||||
|                     if (sig_ == "2S") | ||||
|                         { | ||||
|                             have_l2 = true; | ||||
|                         } | ||||
|                     if (triple_band and sig_ == "L5" and have_l2 == false) | ||||
|                         { | ||||
|                             lineObs += std::string(62, ' '); | ||||
|                         } | ||||
|  | ||||
|                     lineObs += Rinex_Printer::rightJustify(asString(iter->second.Pseudorange_m, 3), 14); | ||||
|  | ||||
|                     // Loss of lock indicator (LLI) | ||||
| @@ -11123,7 +11134,7 @@ void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_CNAV_Ephemeris& e | ||||
| } | ||||
|  | ||||
|  | ||||
| void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& gps_cnav_eph, const Galileo_Ephemeris& galileo_eph, double gps_obs_time, const std::map<int32_t, Gnss_Synchro>& observables) | ||||
| void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& gps_cnav_eph, const Galileo_Ephemeris& galileo_eph, double gps_obs_time, const std::map<int32_t, Gnss_Synchro>& observables, bool triple_band) | ||||
| { | ||||
|     if (galileo_eph.e_1) | ||||
|         { | ||||
| @@ -11323,8 +11334,19 @@ void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_ep | ||||
|                 } | ||||
|             lineObs += std::to_string(static_cast<int32_t>(*it)); | ||||
|             ret = total_gps_map.equal_range(*it); | ||||
|             bool have_l2 = false; | ||||
|             for (auto iter = ret.first; iter != ret.second; ++iter) | ||||
|                 { | ||||
|                     std::string sig_(iter->second.Signal); | ||||
|                     if (sig_ == "2S") | ||||
|                         { | ||||
|                             have_l2 = true; | ||||
|                         } | ||||
|                     if (triple_band and sig_ == "L5" and have_l2 == false) | ||||
|                         { | ||||
|                             lineObs += std::string(62, ' '); | ||||
|                         } | ||||
|  | ||||
|                     lineObs += Rinex_Printer::rightJustify(asString(iter->second.Pseudorange_m, 3), 14); | ||||
|  | ||||
|                     // Loss of lock indicator (LLI) | ||||
| @@ -11795,7 +11817,7 @@ boost::posix_time::ptime Rinex_Printer::compute_UTC_time(const Gps_Navigation_Me | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             //assume receiver operating in between 1999 to 2008 | ||||
|             // assume receiver operating in between 1999 to 2008 | ||||
|             boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); | ||||
|             return p_time; | ||||
|         } | ||||
| @@ -11842,7 +11864,7 @@ boost::posix_time::ptime Rinex_Printer::compute_GPS_time(const Gps_Ephemeris& ep | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             //assume receiver operating in between 1999 to 2008 | ||||
|             // assume receiver operating in between 1999 to 2008 | ||||
|             boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); | ||||
|             return p_time; | ||||
|         } | ||||
|   | ||||
| @@ -347,7 +347,7 @@ public: | ||||
|     /*! | ||||
|      *  \brief Writes dual frequency GPS L1 and L2 observables into the RINEX file | ||||
|      */ | ||||
|     void log_rinex_obs(std::fstream& out, const Gps_Ephemeris& eph, const Gps_CNAV_Ephemeris& eph_cnav, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables); | ||||
|     void log_rinex_obs(std::fstream& out, const Gps_Ephemeris& eph, const Gps_CNAV_Ephemeris& eph_cnav, double obs_time, const std::map<int32_t, Gnss_Synchro>& observables, bool triple_band = false); | ||||
|  | ||||
|     /*! | ||||
|      *  \brief Writes Galileo observables into the RINEX file. Example: galileo_bands("1B"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B". | ||||
| @@ -367,7 +367,7 @@ public: | ||||
|     /*! | ||||
|      *  \brief Writes Mixed GPS / Galileo observables into the RINEX file | ||||
|      */ | ||||
|     void log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& gps_cnav_eph, const Galileo_Ephemeris& galileo_eph, double gps_obs_time, const std::map<int32_t, Gnss_Synchro>& observables); | ||||
|     void log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& gps_cnav_eph, const Galileo_Ephemeris& galileo_eph, double gps_obs_time, const std::map<int32_t, Gnss_Synchro>& observables, bool triple_band = false); | ||||
|  | ||||
|     /*! | ||||
|      *  \brief Writes GLONASS GNAV observables into the RINEX file. Example: glonass_bands("1C"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B". | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Carles Fernandez
					Carles Fernandez