mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 15:23:04 +00:00 
			
		
		
		
	Merge branch 'next' of https://github.com/mmajoral/gnss-sdr into improve_fpga_extended_correlation
This commit is contained in:
		| @@ -38,4 +38,6 @@ double gdop = 25;  // Geometric Dilution of Precision | |||||||
| double pdop = 26;  // Position (3D) Dilution of Precision | double pdop = 26;  // Position (3D) Dilution of Precision | ||||||
| double hdop = 27;  // Horizontal Dilution of Precision | double hdop = 27;  // Horizontal Dilution of Precision | ||||||
| double vdop = 28;  // Vertical Dilution of Precision | double vdop = 28;  // Vertical Dilution of Precision | ||||||
|  |  | ||||||
|  | double user_clk_drift_ppm = 29;  // User clock drift [ppm] | ||||||
| } | } | ||||||
|   | |||||||
| @@ -4168,6 +4168,15 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item | |||||||
|                             std::cout << std::setprecision(ss); |                             std::cout << std::setprecision(ss); | ||||||
|                             DLOG(INFO) << "RX clock offset: " << d_user_pvt_solver->get_time_offset_s() << "[s]"; |                             DLOG(INFO) << "RX clock offset: " << d_user_pvt_solver->get_time_offset_s() << "[s]"; | ||||||
|  |  | ||||||
|  |                             std::cout | ||||||
|  |                                 << TEXT_BOLD_GREEN | ||||||
|  |                                 << "Velocity: " << std::fixed << std::setprecision(3) | ||||||
|  |                                 << "East: " << d_user_pvt_solver->get_rx_vel()[0] << " [m/s], North: " << d_user_pvt_solver->get_rx_vel()[1] | ||||||
|  |                                 << " [m/s], Up = " << d_user_pvt_solver->get_rx_vel()[2] << " [m/s]" << TEXT_RESET << std::endl; | ||||||
|  |  | ||||||
|  |                             std::cout << std::setprecision(ss); | ||||||
|  |                             DLOG(INFO) << "RX clock drift: " << d_user_pvt_solver->get_clock_drift_ppm() << " [ppm]"; | ||||||
|  |  | ||||||
|                             // boost::posix_time::ptime p_time; |                             // boost::posix_time::ptime p_time; | ||||||
|                             // gtime_t rtklib_utc_time = gpst2time(adjgpsweek(d_user_pvt_solver->gps_ephemeris_map.cbegin()->second.i_GPS_week), d_rx_time); |                             // gtime_t rtklib_utc_time = gpst2time(adjgpsweek(d_user_pvt_solver->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::from_time_t(rtklib_utc_time.time); | ||||||
|   | |||||||
| @@ -89,6 +89,9 @@ public: | |||||||
|     double hdop; |     double hdop; | ||||||
|     double vdop; |     double vdop; | ||||||
|  |  | ||||||
|  |     // User clock drift [ppm] | ||||||
|  |     double user_clk_drift_ppm; | ||||||
|  |  | ||||||
|     /*! |     /*! | ||||||
|      * \brief This member function serializes and restores |      * \brief This member function serializes and restores | ||||||
|      * Monitor_Pvt objects from a byte stream. |      * Monitor_Pvt objects from a byte stream. | ||||||
| @@ -134,6 +137,8 @@ public: | |||||||
|         ar& BOOST_SERIALIZATION_NVP(pdop); |         ar& BOOST_SERIALIZATION_NVP(pdop); | ||||||
|         ar& BOOST_SERIALIZATION_NVP(hdop); |         ar& BOOST_SERIALIZATION_NVP(hdop); | ||||||
|         ar& BOOST_SERIALIZATION_NVP(vdop); |         ar& BOOST_SERIALIZATION_NVP(vdop); | ||||||
|  |  | ||||||
|  |         ar& BOOST_SERIALIZATION_NVP(user_clk_drift_ppm); | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -316,6 +316,16 @@ void Pvt_Solution::set_time_offset_s(double offset) | |||||||
|     d_rx_dt_s = offset; |     d_rx_dt_s = offset; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | double Pvt_Solution::get_clock_drift_ppm() const | ||||||
|  | { | ||||||
|  |     return d_rx_clock_drift_ppm; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void Pvt_Solution::set_clock_drift_ppm(double clock_drift_ppm) | ||||||
|  | { | ||||||
|  |     d_rx_clock_drift_ppm = clock_drift_ppm; | ||||||
|  | } | ||||||
|  |  | ||||||
| double Pvt_Solution::get_latitude() const | double Pvt_Solution::get_latitude() const | ||||||
| { | { | ||||||
| @@ -409,6 +419,17 @@ arma::vec Pvt_Solution::get_rx_pos() const | |||||||
|     return d_rx_pos; |     return d_rx_pos; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void Pvt_Solution::set_rx_vel(const arma::vec &vel) | ||||||
|  | { | ||||||
|  |     d_rx_vel = vel; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | arma::vec Pvt_Solution::get_rx_vel() const | ||||||
|  | { | ||||||
|  |     return d_rx_vel; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| boost::posix_time::ptime Pvt_Solution::get_position_UTC_time() const | boost::posix_time::ptime Pvt_Solution::get_position_UTC_time() const | ||||||
| { | { | ||||||
|   | |||||||
| @@ -53,9 +53,11 @@ public: | |||||||
|     double get_time_offset_s() const;            //!< Get RX time offset [s] |     double get_time_offset_s() const;            //!< Get RX time offset [s] | ||||||
|     void set_time_offset_s(double offset);       //!< Set RX time offset [s] |     void set_time_offset_s(double offset);       //!< Set RX time offset [s] | ||||||
|  |  | ||||||
|     double get_latitude() const;   //!< Get RX position Latitude WGS84 [deg] |     double get_clock_drift_ppm() const;                //!< Get the Rx clock drift [ppm] | ||||||
|     double get_longitude() const;  //!< Get RX position Longitude WGS84 [deg] |     void set_clock_drift_ppm(double clock_drift_ppm);  //!< Set the Rx clock drift [ppm] | ||||||
|     double get_height() const;     //!< Get RX position height WGS84 [m] |     double get_latitude() const;                       //!< Get RX position Latitude WGS84 [deg] | ||||||
|  |     double get_longitude() const;                      //!< Get RX position Longitude WGS84 [deg] | ||||||
|  |     double get_height() const;                         //!< Get RX position height WGS84 [m] | ||||||
|  |  | ||||||
|     double get_speed_over_ground() const;          //!< Get RX speed over ground [m/s] |     double get_speed_over_ground() const;          //!< Get RX speed over ground [m/s] | ||||||
|     void set_speed_over_ground(double speed_m_s);  //!< Set RX speed over ground [m/s] |     void set_speed_over_ground(double speed_m_s);  //!< Set RX speed over ground [m/s] | ||||||
| @@ -70,6 +72,9 @@ public: | |||||||
|     void set_rx_pos(const arma::vec &pos);  //!< Set position: Latitude [deg], longitude [deg], height [m] |     void set_rx_pos(const arma::vec &pos);  //!< Set position: Latitude [deg], longitude [deg], height [m] | ||||||
|     arma::vec get_rx_pos() const; |     arma::vec get_rx_pos() const; | ||||||
|  |  | ||||||
|  |     void set_rx_vel(const arma::vec &vel);  //!< Set velocity: East [m/s], North [m/s], Up [m/s] | ||||||
|  |     arma::vec get_rx_vel() const; | ||||||
|  |  | ||||||
|     bool is_valid_position() const; |     bool is_valid_position() const; | ||||||
|     void set_valid_position(bool is_valid); |     void set_valid_position(bool is_valid); | ||||||
|  |  | ||||||
| @@ -132,7 +137,8 @@ public: | |||||||
| protected: | protected: | ||||||
|     bool d_pre_2009_file;  // Flag to correct week rollover in post processing mode for signals older than 2009 |     bool d_pre_2009_file;  // Flag to correct week rollover in post processing mode for signals older than 2009 | ||||||
| private: | private: | ||||||
|     double d_rx_dt_s;  // RX time offset [s] |     double d_rx_dt_s;             // RX time offset [s] | ||||||
|  |     double d_rx_clock_drift_ppm;  // RX clock drift [ppm] | ||||||
|  |  | ||||||
|     double d_latitude_d;             // RX position Latitude WGS84 [deg] |     double d_latitude_d;             // RX position Latitude WGS84 [deg] | ||||||
|     double d_longitude_d;            // RX position Longitude WGS84 [deg] |     double d_longitude_d;            // RX position Longitude WGS84 [deg] | ||||||
| @@ -154,6 +160,7 @@ private: | |||||||
|     int d_averaging_depth;  // Length of averaging window |     int d_averaging_depth;  // Length of averaging window | ||||||
|  |  | ||||||
|     arma::vec d_rx_pos; |     arma::vec d_rx_pos; | ||||||
|  |     arma::vec d_rx_vel; | ||||||
|     boost::posix_time::ptime d_position_UTC_time; |     boost::posix_time::ptime d_position_UTC_time; | ||||||
|     int d_valid_observations; |     int d_valid_observations; | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -147,7 +147,7 @@ std::string Rtcm::add_CRC(const std::string& message_without_crc) const | |||||||
|  |  | ||||||
|     // 2) Computes CRC |     // 2) Computes CRC | ||||||
|     CRC_RTCM.process_bytes(bytes.data(), bytes.size()); |     CRC_RTCM.process_bytes(bytes.data(), bytes.size()); | ||||||
|     std::bitset<24> crc_frame = std::bitset<24>(CRC_RTCM.checksum()); |     auto crc_frame = std::bitset<24>(CRC_RTCM.checksum()); | ||||||
|  |  | ||||||
|     // 3) Builds the complete message |     // 3) Builds the complete message | ||||||
|     std::string complete_message = message_without_crc + crc_frame.to_string(); |     std::string complete_message = message_without_crc + crc_frame.to_string(); | ||||||
| @@ -162,7 +162,7 @@ bool Rtcm::check_CRC(const std::string& message) const | |||||||
|     std::string message_bin = Rtcm::binary_data_to_bin(message); |     std::string message_bin = Rtcm::binary_data_to_bin(message); | ||||||
|     // Check CRC |     // Check CRC | ||||||
|     std::string crc = message_bin.substr(message_bin.length() - 24, 24); |     std::string crc = message_bin.substr(message_bin.length() - 24, 24); | ||||||
|     std::bitset<24> read_crc = std::bitset<24>(crc); |     auto read_crc = std::bitset<24>(crc); | ||||||
|     std::string msg_without_crc = message_bin.substr(0, message_bin.length() - 24); |     std::string msg_without_crc = message_bin.substr(0, message_bin.length() - 24); | ||||||
|  |  | ||||||
|     boost::dynamic_bitset<uint8_t> frame_bits(msg_without_crc); |     boost::dynamic_bitset<uint8_t> frame_bits(msg_without_crc); | ||||||
| @@ -171,7 +171,7 @@ bool Rtcm::check_CRC(const std::string& message) const | |||||||
|     std::reverse(bytes.begin(), bytes.end()); |     std::reverse(bytes.begin(), bytes.end()); | ||||||
|  |  | ||||||
|     CRC_RTCM_CHECK.process_bytes(bytes.data(), bytes.size()); |     CRC_RTCM_CHECK.process_bytes(bytes.data(), bytes.size()); | ||||||
|     std::bitset<24> computed_crc = std::bitset<24>(CRC_RTCM_CHECK.checksum()); |     auto computed_crc = std::bitset<24>(CRC_RTCM_CHECK.checksum()); | ||||||
|     if (read_crc == computed_crc) |     if (read_crc == computed_crc) | ||||||
|         { |         { | ||||||
|             return true; |             return true; | ||||||
| @@ -414,7 +414,7 @@ std::string Rtcm::build_message(const std::string& data) const | |||||||
| { | { | ||||||
|     uint32_t msg_length_bits = data.length(); |     uint32_t msg_length_bits = data.length(); | ||||||
|     uint32_t msg_length_bytes = std::ceil(static_cast<float>(msg_length_bits) / 8.0); |     uint32_t msg_length_bytes = std::ceil(static_cast<float>(msg_length_bits) / 8.0); | ||||||
|     std::bitset<10> message_length = std::bitset<10>(msg_length_bytes); |     auto message_length = std::bitset<10>(msg_length_bytes); | ||||||
|     uint32_t zeros_to_fill = 8 * msg_length_bytes - msg_length_bits; |     uint32_t zeros_to_fill = 8 * msg_length_bytes - msg_length_bits; | ||||||
|     std::string b(zeros_to_fill, '0'); |     std::string b(zeros_to_fill, '0'); | ||||||
|     std::string msg_content = data + b; |     std::string msg_content = data + b; | ||||||
| @@ -691,7 +691,7 @@ std::bitset<101> Rtcm::get_MT1003_sat_content(const Gps_Ephemeris& ephL1, const | |||||||
|     Rtcm::set_DF011(gnss_synchroL1); |     Rtcm::set_DF011(gnss_synchroL1); | ||||||
|     Rtcm::set_DF012(gnss_synchroL1); |     Rtcm::set_DF012(gnss_synchroL1); | ||||||
|     Rtcm::set_DF013(ephL1, obs_time, gnss_synchroL1); |     Rtcm::set_DF013(ephL1, obs_time, gnss_synchroL1); | ||||||
|     std::bitset<2> DF016_ = std::bitset<2>(0);  // code indicator   0: C/A or L2C code   1: P(Y) code direct  2:P(Y) code cross-correlated    3: Correlated P/Y |     auto DF016_ = std::bitset<2>(0);  // code indicator   0: C/A or L2C code   1: P(Y) code direct  2:P(Y) code cross-correlated    3: Correlated P/Y | ||||||
|     Rtcm::set_DF017(gnss_synchroL1, gnss_synchroL2); |     Rtcm::set_DF017(gnss_synchroL1, gnss_synchroL2); | ||||||
|     Rtcm::set_DF018(gnss_synchroL1, gnss_synchroL2); |     Rtcm::set_DF018(gnss_synchroL1, gnss_synchroL2); | ||||||
|     Rtcm::set_DF019(ephL2, obs_time, gnss_synchroL2); |     Rtcm::set_DF019(ephL2, obs_time, gnss_synchroL2); | ||||||
| @@ -802,7 +802,7 @@ std::bitset<125> Rtcm::get_MT1004_sat_content(const Gps_Ephemeris& ephL1, const | |||||||
|     Rtcm::set_DF013(ephL1, obs_time, gnss_synchroL1); |     Rtcm::set_DF013(ephL1, obs_time, gnss_synchroL1); | ||||||
|     Rtcm::set_DF014(gnss_synchroL1); |     Rtcm::set_DF014(gnss_synchroL1); | ||||||
|     Rtcm::set_DF015(gnss_synchroL1); |     Rtcm::set_DF015(gnss_synchroL1); | ||||||
|     std::bitset<2> DF016_ = std::bitset<2>(0);  // code indicator   0: C/A or L2C code   1: P(Y) code direct  2:P(Y) code cross-correlated    3: Correlated P/Y |     auto DF016_ = std::bitset<2>(0);  // code indicator   0: C/A or L2C code   1: P(Y) code direct  2:P(Y) code cross-correlated    3: Correlated P/Y | ||||||
|     Rtcm::set_DF017(gnss_synchroL1, gnss_synchroL2); |     Rtcm::set_DF017(gnss_synchroL1, gnss_synchroL2); | ||||||
|     Rtcm::set_DF018(gnss_synchroL1, gnss_synchroL2); |     Rtcm::set_DF018(gnss_synchroL1, gnss_synchroL2); | ||||||
|     Rtcm::set_DF019(ephL2, obs_time, gnss_synchroL2); |     Rtcm::set_DF019(ephL2, obs_time, gnss_synchroL2); | ||||||
| @@ -1058,7 +1058,7 @@ std::string Rtcm::print_MT1006(uint32_t ref_id, double ecef_x, double ecef_y, do | |||||||
| std::string Rtcm::print_MT1008(uint32_t ref_id, const std::string& antenna_descriptor, uint32_t antenna_setup_id, const std::string& antenna_serial_number) | std::string Rtcm::print_MT1008(uint32_t ref_id, const std::string& antenna_descriptor, uint32_t antenna_setup_id, const std::string& antenna_serial_number) | ||||||
| { | { | ||||||
|     uint32_t msg_number = 1008; |     uint32_t msg_number = 1008; | ||||||
|     std::bitset<12> DF002_ = std::bitset<12>(msg_number); |     auto DF002_ = std::bitset<12>(msg_number); | ||||||
|     Rtcm::set_DF003(ref_id); |     Rtcm::set_DF003(ref_id); | ||||||
|     std::string ant_descriptor = antenna_descriptor; |     std::string ant_descriptor = antenna_descriptor; | ||||||
|     uint32_t len = ant_descriptor.length(); |     uint32_t len = ant_descriptor.length(); | ||||||
| @@ -1072,7 +1072,7 @@ std::string Rtcm::print_MT1008(uint32_t ref_id, const std::string& antenna_descr | |||||||
|     std::string DF030_str_; |     std::string DF030_str_; | ||||||
|     for (char c : ant_descriptor) |     for (char c : ant_descriptor) | ||||||
|         { |         { | ||||||
|             std::bitset<8> character = std::bitset<8>(c); |             auto character = std::bitset<8>(c); | ||||||
|             DF030_str_ += character.to_string(); |             DF030_str_ += character.to_string(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -1090,7 +1090,7 @@ std::string Rtcm::print_MT1008(uint32_t ref_id, const std::string& antenna_descr | |||||||
|     std::string DF033_str_; |     std::string DF033_str_; | ||||||
|     for (char c : ant_sn) |     for (char c : ant_sn) | ||||||
|         { |         { | ||||||
|             std::bitset<8> character = std::bitset<8>(c); |             auto character = std::bitset<8>(c); | ||||||
|             DF033_str_ += character.to_string(); |             DF033_str_ += character.to_string(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -1375,7 +1375,7 @@ std::bitset<107> Rtcm::get_MT1011_sat_content(const Glonass_Gnav_Ephemeris& ephL | |||||||
|     Rtcm::set_DF041(gnss_synchroL1); |     Rtcm::set_DF041(gnss_synchroL1); | ||||||
|     Rtcm::set_DF042(gnss_synchroL1); |     Rtcm::set_DF042(gnss_synchroL1); | ||||||
|     Rtcm::set_DF043(ephL1, obs_time, gnss_synchroL1); |     Rtcm::set_DF043(ephL1, obs_time, gnss_synchroL1); | ||||||
|     std::bitset<2> DF046_ = std::bitset<2>(0);  // code indicator   0: C/A or L2C code   1: P(Y) code direct  2:P(Y) code cross-correlated    3: Correlated P/Y |     auto DF046_ = std::bitset<2>(0);  // code indicator   0: C/A or L2C code   1: P(Y) code direct  2:P(Y) code cross-correlated    3: Correlated P/Y | ||||||
|     Rtcm::set_DF047(gnss_synchroL1, gnss_synchroL2); |     Rtcm::set_DF047(gnss_synchroL1, gnss_synchroL2); | ||||||
|     Rtcm::set_DF048(gnss_synchroL1, gnss_synchroL2); |     Rtcm::set_DF048(gnss_synchroL1, gnss_synchroL2); | ||||||
|     Rtcm::set_DF049(ephL2, obs_time, gnss_synchroL2); |     Rtcm::set_DF049(ephL2, obs_time, gnss_synchroL2); | ||||||
| @@ -1488,7 +1488,7 @@ std::bitset<130> Rtcm::get_MT1012_sat_content(const Glonass_Gnav_Ephemeris& ephL | |||||||
|     Rtcm::set_DF043(ephL1, obs_time, gnss_synchroL1); |     Rtcm::set_DF043(ephL1, obs_time, gnss_synchroL1); | ||||||
|     Rtcm::set_DF044(gnss_synchroL1); |     Rtcm::set_DF044(gnss_synchroL1); | ||||||
|     Rtcm::set_DF045(gnss_synchroL1); |     Rtcm::set_DF045(gnss_synchroL1); | ||||||
|     std::bitset<2> DF046_ = std::bitset<2>(0);  // code indicator   0: C/A or L2C code   1: P(Y) code direct  2:P(Y) code cross-correlated    3: Correlated P/Y |     auto DF046_ = std::bitset<2>(0);  // code indicator   0: C/A or L2C code   1: P(Y) code direct  2:P(Y) code cross-correlated    3: Correlated P/Y | ||||||
|     Rtcm::set_DF047(gnss_synchroL1, gnss_synchroL2); |     Rtcm::set_DF047(gnss_synchroL1, gnss_synchroL2); | ||||||
|     Rtcm::set_DF048(gnss_synchroL1, gnss_synchroL2); |     Rtcm::set_DF048(gnss_synchroL1, gnss_synchroL2); | ||||||
|     Rtcm::set_DF049(ephL2, obs_time, gnss_synchroL2); |     Rtcm::set_DF049(ephL2, obs_time, gnss_synchroL2); | ||||||
| @@ -2039,12 +2039,12 @@ std::string Rtcm::print_MT1029(uint32_t ref_id, const Gps_Ephemeris& gps_eph, do | |||||||
|                             first = false; |                             first = false; | ||||||
|                         } |                         } | ||||||
|                 } |                 } | ||||||
|             std::bitset<8> character = std::bitset<8>(c); |             auto character = std::bitset<8>(c); | ||||||
|             text_binary += character.to_string(); |             text_binary += character.to_string(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|     std::bitset<7> DF138_ = std::bitset<7>(i); |     auto DF138_ = std::bitset<7>(i); | ||||||
|     std::bitset<8> DF139_ = std::bitset<8>(message.length()); |     auto DF139_ = std::bitset<8>(message.length()); | ||||||
|  |  | ||||||
|     std::string data = DF002.to_string() + |     std::string data = DF002.to_string() + | ||||||
|                        DF003.to_string() + |                        DF003.to_string() + | ||||||
| @@ -2101,7 +2101,7 @@ std::string Rtcm::print_MT1045(const Galileo_Ephemeris& gal_eph) | |||||||
|     Rtcm::set_DF314(gal_eph); |     Rtcm::set_DF314(gal_eph); | ||||||
|     Rtcm::set_DF315(gal_eph); |     Rtcm::set_DF315(gal_eph); | ||||||
|     uint32_t seven_zero = 0; |     uint32_t seven_zero = 0; | ||||||
|     std::bitset<7> DF001_ = std::bitset<7>(seven_zero); |     auto DF001_ = std::bitset<7>(seven_zero); | ||||||
|  |  | ||||||
|     std::string data; |     std::string data; | ||||||
|     data.clear(); |     data.clear(); | ||||||
| @@ -2357,7 +2357,7 @@ std::string Rtcm::get_MSM_header(uint32_t msg_number, | |||||||
|     Rtcm::set_DF003(ref_id); |     Rtcm::set_DF003(ref_id); | ||||||
|     Rtcm::set_DF393(more_messages); |     Rtcm::set_DF393(more_messages); | ||||||
|     Rtcm::set_DF409(0);  // Issue of Data Station. 0: not utilized |     Rtcm::set_DF409(0);  // Issue of Data Station. 0: not utilized | ||||||
|     std::bitset<7> DF001_ = std::bitset<7>("0000000"); |     auto DF001_ = std::bitset<7>("0000000"); | ||||||
|     Rtcm::set_DF411(clock_steering_indicator); |     Rtcm::set_DF411(clock_steering_indicator); | ||||||
|     Rtcm::set_DF412(external_clock_indicator); |     Rtcm::set_DF412(external_clock_indicator); | ||||||
|     Rtcm::set_DF417(divergence_free); |     Rtcm::set_DF417(divergence_free); | ||||||
| @@ -2956,7 +2956,7 @@ std::string Rtcm::get_MSM_5_content_sat_data(const std::map<int32_t, Gnss_Synchr | |||||||
|             Rtcm::set_DF397(ordered_by_PRN_pos.at(nsat).second); |             Rtcm::set_DF397(ordered_by_PRN_pos.at(nsat).second); | ||||||
|             Rtcm::set_DF398(ordered_by_PRN_pos.at(nsat).second); |             Rtcm::set_DF398(ordered_by_PRN_pos.at(nsat).second); | ||||||
|             Rtcm::set_DF399(ordered_by_PRN_pos.at(nsat).second); |             Rtcm::set_DF399(ordered_by_PRN_pos.at(nsat).second); | ||||||
|             std::bitset<4> reserved = std::bitset<4>("0000"); |             auto reserved = std::bitset<4>("0000"); | ||||||
|             first_data_type += DF397.to_string(); |             first_data_type += DF397.to_string(); | ||||||
|             second_data_type += reserved.to_string(); |             second_data_type += reserved.to_string(); | ||||||
|             third_data_type += DF398.to_string(); |             third_data_type += DF398.to_string(); | ||||||
|   | |||||||
| @@ -1072,6 +1072,19 @@ bool Rtklib_Solver::get_PVT(const std::map<int, Gnss_Synchro> &gnss_observables_ | |||||||
|                     monitor_pvt.hdop = dop_[2]; |                     monitor_pvt.hdop = dop_[2]; | ||||||
|                     monitor_pvt.vdop = dop_[3]; |                     monitor_pvt.vdop = dop_[3]; | ||||||
|  |  | ||||||
|  |                     arma::vec rx_vel_enu(3); | ||||||
|  |                     rx_vel_enu(0) = enuv[0]; | ||||||
|  |                     rx_vel_enu(1) = enuv[1]; | ||||||
|  |                     rx_vel_enu(2) = enuv[2]; | ||||||
|  |  | ||||||
|  |                     this->set_rx_vel(rx_vel_enu); | ||||||
|  |  | ||||||
|  |                     double clock_drift_ppm = pvt_sol.dtr[5] / GPS_C_M_S * 1e6; | ||||||
|  |  | ||||||
|  |                     this->set_clock_drift_ppm(clock_drift_ppm); | ||||||
|  |                     // User clock drift [ppm] | ||||||
|  |                     monitor_pvt.user_clk_drift_ppm = clock_drift_ppm; | ||||||
|  |  | ||||||
|                     // ######## LOG FILE ######### |                     // ######## LOG FILE ######### | ||||||
|                     if (d_flag_dump_enabled == true) |                     if (d_flag_dump_enabled == true) | ||||||
|                         { |                         { | ||||||
|   | |||||||
| @@ -116,6 +116,7 @@ public: | |||||||
|         monitor_.set_pdop(monitor->pdop); |         monitor_.set_pdop(monitor->pdop); | ||||||
|         monitor_.set_hdop(monitor->hdop); |         monitor_.set_hdop(monitor->hdop); | ||||||
|         monitor_.set_vdop(monitor->vdop); |         monitor_.set_vdop(monitor->vdop); | ||||||
|  |         monitor_.set_user_clk_drift_ppm(monitor->user_clk_drift_ppm); | ||||||
|  |  | ||||||
|         monitor_.SerializeToString(&data); |         monitor_.SerializeToString(&data); | ||||||
|         return data; |         return data; | ||||||
| @@ -153,6 +154,7 @@ public: | |||||||
|         monitor.pdop = mon.pdop(); |         monitor.pdop = mon.pdop(); | ||||||
|         monitor.hdop = mon.hdop(); |         monitor.hdop = mon.hdop(); | ||||||
|         monitor.vdop = mon.vdop(); |         monitor.vdop = mon.vdop(); | ||||||
|  |         monitor.user_clk_drift_ppm = mon.user_clk_drift_ppm(); | ||||||
|  |  | ||||||
|         return monitor; |         return monitor; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -972,6 +972,7 @@ void estvel(const obsd_t *obs, int n, const double *rs, const double *dts, | |||||||
|                         { |                         { | ||||||
|                             sol->rr[i + 3] = x[i]; |                             sol->rr[i + 3] = x[i]; | ||||||
|                         } |                         } | ||||||
|  |                     sol->dtr[5] = x[3]; | ||||||
|                     break; |                     break; | ||||||
|                 } |                 } | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -37,10 +37,10 @@ | |||||||
| #ifndef GNSS_SDR_GLONASS_L2_CA_DLL_PLL_C_AID_TRACKING_CC_H_ | #ifndef GNSS_SDR_GLONASS_L2_CA_DLL_PLL_C_AID_TRACKING_CC_H_ | ||||||
| #define GNSS_SDR_GLONASS_L2_CA_DLL_PLL_C_AID_TRACKING_CC_H_ | #define GNSS_SDR_GLONASS_L2_CA_DLL_PLL_C_AID_TRACKING_CC_H_ | ||||||
|  |  | ||||||
|  | #include "cpu_multicorrelator.h" | ||||||
| #include "gnss_synchro.h" | #include "gnss_synchro.h" | ||||||
| #include "tracking_2nd_DLL_filter.h" | #include "tracking_2nd_DLL_filter.h" | ||||||
| #include "tracking_FLL_PLL_filter.h" | #include "tracking_FLL_PLL_filter.h" | ||||||
| #include "cpu_multicorrelator.h" |  | ||||||
| #include <gnuradio/block.h> | #include <gnuradio/block.h> | ||||||
| #include <pmt/pmt.h> | #include <pmt/pmt.h> | ||||||
| #include <volk_gnsssdr/volk_gnsssdr_alloc.h>  // for volk_gnsssdr::vector | #include <volk_gnsssdr/volk_gnsssdr_alloc.h>  // for volk_gnsssdr::vector | ||||||
|   | |||||||
| @@ -49,9 +49,9 @@ | |||||||
| #include "gnss_synchro.h" | #include "gnss_synchro.h" | ||||||
| #include "tracking_2nd_DLL_filter.h" | #include "tracking_2nd_DLL_filter.h" | ||||||
| #include "tracking_2nd_PLL_filter.h" | #include "tracking_2nd_PLL_filter.h" | ||||||
| #include <volk_gnsssdr/volk_gnsssdr_alloc.h>  // for volk_gnsssdr::vector |  | ||||||
| #include <armadillo> | #include <armadillo> | ||||||
| #include <gnuradio/block.h> | #include <gnuradio/block.h> | ||||||
|  | #include <volk_gnsssdr/volk_gnsssdr_alloc.h>  // for volk_gnsssdr::vector | ||||||
| #include <fstream> | #include <fstream> | ||||||
| #include <map> | #include <map> | ||||||
| #include <string> | #include <string> | ||||||
|   | |||||||
| @@ -654,94 +654,106 @@ std::string Gnss_Satellite::what_block(const std::string& system_, uint32_t PRN_ | |||||||
|             switch (PRN_) |             switch (PRN_) | ||||||
|                 { |                 { | ||||||
|                 case 1: |                 case 1: | ||||||
|                     block_ = std::string("Compass-G1");  // GEO 140.0°E; launched 2010/01/16 |                     block_ = std::string("BeiDou-2 GEO01");  // GEO 140.0°E; launched 2010/01/16 | ||||||
|                     break; |                     break; | ||||||
|                 case 2: |                 case 2: | ||||||
|                     block_ = std::string("Compass-G6");  // GEO 80°E; launched 2012/10/25 |                     block_ = std::string("BeiDou-2 GEO06");  // GEO 80°E; launched 2012/10/25 | ||||||
|                     break; |                     break; | ||||||
|                 case 3: |                 case 3: | ||||||
|                     block_ = std::string("Compass-G7");  // GEO 110.5°E; launched 2016/06/12 |                     block_ = std::string("BeiDou-2 GEO07");  // GEO 110.5°E; launched 2016/06/12 | ||||||
|                     break; |                     break; | ||||||
|                 case 4: |                 case 4: | ||||||
|                     block_ = std::string("Compass-G4");  // GEO 160.0°E; launched 2010/10/31 |                     block_ = std::string("BeiDou-2 GEO04");  // GEO 160.0°E; launched 2010/10/31 | ||||||
|                     break; |                     break; | ||||||
|                 case 5: |                 case 5: | ||||||
|                     block_ = std::string("Compass-G5");  // GEO 58.75°E; launched 2012/02/24 |                     block_ = std::string("BeiDou-2 GEO05");  // GEO 58.75°E; launched 2012/02/24 | ||||||
|                     break; |                     break; | ||||||
|                 case 6: |                 case 6: | ||||||
|                     block_ = std::string("Compass-IGS01");  // 55° inclination IGSO 118°E; launched 2010/07/31 |                     block_ = std::string("BeiDou-2 IGSO01");  // 55° inclination IGSO 118°E; launched 2010/07/31 | ||||||
|                     break; |                     break; | ||||||
|                 case 7: |                 case 7: | ||||||
|                     block_ = std::string("Compass-IGS02");  // 55° inclination IGSO 118°E; launched 2010/12/17 |                     block_ = std::string("BeiDou-2 IGSO02");  // 55° inclination IGSO 118°E; launched 2010/12/17 | ||||||
|                     break; |                     break; | ||||||
|                 case 8: |                 case 8: | ||||||
|                     block_ = std::string("Compass-IGS03");  // 55° inclination IGSO 118°E; launched 2011/04/09 |                     block_ = std::string("BeiDou-2 IGSO03");  // 55° inclination IGSO 118°E; launched 2011/04/09 | ||||||
|                     break; |                     break; | ||||||
|                 case 9: |                 case 9: | ||||||
|                     block_ = std::string("Compass-IGS04");  // 55° inclination IGSO 95°E; launched 2011/07/27 |                     block_ = std::string("BeiDou-2 IGSO04");  // 55° inclination IGSO 95°E; launched 2011/07/27 | ||||||
|                     break; |                     break; | ||||||
|                 case 10: |                 case 10: | ||||||
|                     block_ = std::string("Compass-IGS05");  // 55° inclination IGSO 118°E; launched 2011/12/01 |                     block_ = std::string("BeiDou-2 IGSO05");  // 55° inclination IGSO 118°E; launched 2011/12/01 | ||||||
|                     break; |                     break; | ||||||
|                 case 11: |                 case 11: | ||||||
|                     block_ = std::string("Compass-M3");  // Slot A07; launched 2012/04/29 |                     block_ = std::string("BeiDou-2 MEO03");  // Slot A07; launched 2012/04/29 | ||||||
|                     break; |                     break; | ||||||
|                 case 12: |                 case 12: | ||||||
|                     block_ = std::string("Compass-M4");  // Slot A08; launched 2012/04/29 |                     block_ = std::string("BeiDou-2 MEO04");  // Slot A08; launched 2012/04/29 | ||||||
|  |                     break; | ||||||
|  |                 case 13: | ||||||
|  |                     block_ = std::string("BeiDou-2 IGSO06");  // launched 2016/03/30 | ||||||
|  |                     break; | ||||||
|  |                 case 14: | ||||||
|  |                     block_ = std::string("BeiDou-2 MEO06");  // launched 2012/09/19 | ||||||
|  |                     break; | ||||||
|  |                 case 16: | ||||||
|  |                     block_ = std::string("BeiDou-2 IGSO07");  // launched 2018/07/10 | ||||||
|                     break; |                     break; | ||||||
|                 case 19: |                 case 19: | ||||||
|                     block_ = std::string("BEIDOU-3 M1");  // Slot B-7; launched 2017/11/05 |                     block_ = std::string("BeiDou-3 MEO01");  // Slot B-7; launched 2017/11/05 | ||||||
|                     break; |                     break; | ||||||
|                 case 20: |                 case 20: | ||||||
|                     block_ = std::string("BEIDOU-3 M2");  // Slot B-5; launched 2017/11/05 |                     block_ = std::string("BeiDou-3 MEO02");  // Slot B-5; launched 2017/11/05 | ||||||
|                     break; |                     break; | ||||||
|                 case 21: |                 case 21: | ||||||
|                     block_ = std::string("BEIDOU 3M5");  // Slot B-?; launched 2018/02/12 |                     block_ = std::string("BeiDou-3 MEO03");  // Slot B-?; launched 2018/02/12 | ||||||
|                     break; |                     break; | ||||||
|                 case 22: |                 case 22: | ||||||
|                     block_ = std::string("BEIDOU 3M6");  // Slot B-6; launched 2018/02/12 |                     block_ = std::string("BeiDou-3 MEO04");  // Slot B-6; launched 2018/02/12 | ||||||
|                     break; |                     break; | ||||||
|                 case 23: |                 case 23: | ||||||
|                     block_ = std::string("BEIDOU 3M9");  // Slot C-7; launched 2018/07/29 |                     block_ = std::string("BeiDou-3 MEO05");  // Slot C-7; launched 2018/07/29 | ||||||
|                     break; |                     break; | ||||||
|                 case 24: |                 case 24: | ||||||
|                     block_ = std::string("BEIDOU 3M10");  // Slot C-1; launched 2018/07/29 |                     block_ = std::string("BeiDou-3 MEO06");  // Slot C-1; launched 2018/07/29 | ||||||
|                     break; |                     break; | ||||||
|                 case 25: |                 case 25: | ||||||
|                     block_ = std::string("BEIDOU 3M12");  // Slot C-8; launched 2018/08/24 |                     block_ = std::string("BeiDou-3 MEO11");  // Slot C-8; launched 2018/08/24 | ||||||
|                     break; |                     break; | ||||||
|                 case 26: |                 case 26: | ||||||
|                     block_ = std::string("BEIDOU 3M11");  // Slot C-2; launched 2018/08/24 |                     block_ = std::string("BeiDou-3 MEO12");  // Slot C-2; launched 2018/08/24 | ||||||
|                     break; |                     break; | ||||||
|                 case 27: |                 case 27: | ||||||
|                     block_ = std::string("BEIDOU 3M3");  // Slot A-?; launched 2018/01/11 |                     block_ = std::string("BeiDou-3 3M3");  // Slot A-?; launched 2018/01/11 | ||||||
|                     break; |                     break; | ||||||
|                 case 28: |                 case 28: | ||||||
|                     block_ = std::string("BEIDOU 3M4");  // Slot A-?; launched 2018/01/11 |                     block_ = std::string("BeiDou-3 3M4");  // Slot A-?; launched 2018/01/11 | ||||||
|                     break; |                     break; | ||||||
|                 case 29: |                 case 29: | ||||||
|                     block_ = std::string("BEIDOU 3M7");  // Slot A-?; launched 2018/03/29 |                     block_ = std::string("BeiDou-3 3M7");  // Slot A-?; launched 2018/03/29 | ||||||
|                     break; |                     break; | ||||||
|                 case 30: |                 case 30: | ||||||
|                     block_ = std::string("BEIDOU 3M8");  // Slot A-?; launched 2018/03/29 |                     block_ = std::string("BeiDou-3 3M8");  // Slot A-?; launched 2018/03/29 | ||||||
|                     break; |                     break; | ||||||
|                 case 32: |                 case 32: | ||||||
|                     block_ = std::string("BEIDOU 3M13");  // Slot B-1?; launched 2018/09/19 |                     block_ = std::string("BeiDou-3 MEO13");  // Slot B-1?; launched 2018/09/19 | ||||||
|                     break; |                     break; | ||||||
|                 case 33: |                 case 33: | ||||||
|                     block_ = std::string("BEIDOU 3M14");  // Slot B-3; launched 2018/09/19 |                     block_ = std::string("BeiDou-3 MEO14");  // Slot B-3; launched 2018/09/19 | ||||||
|                     break; |                     break; | ||||||
|                 case 34: |                 case 34: | ||||||
|                     block_ = std::string("BEIDOU 3M15");  // Slot B-3; launched 2018/10/15 |                     block_ = std::string("BeiDou-3 MEO15");  // Slot B-3; launched 2018/10/15 | ||||||
|                     break; |                     break; | ||||||
|                 case 35: |                 case 35: | ||||||
|                     block_ = std::string("BEIDOU 3M16");  // Slot B-3; launched 2018/10/15 |                     block_ = std::string("BeiDou-3 MEO16");  // Slot B-3; launched 2018/10/15 | ||||||
|                     break; |                     break; | ||||||
|                 case 36: |                 case 36: | ||||||
|                     block_ = std::string("BEIDOU 3M17");  // Slot B-3; launched 2018/11/18 |                     block_ = std::string("BeiDou-3 MEO17");  // Slot B-3; launched 2018/11/18 | ||||||
|                     break; |                     break; | ||||||
|                 case 37: |                 case 37: | ||||||
|                     block_ = std::string("BEIDOU 3M18");  // Slot B-3; launched 2018/11/18 |                     block_ = std::string("BeiDou-3 MEO18");  // Slot B-3; launched 2018/11/18 | ||||||
|  |                     break; | ||||||
|  |                 case 38: | ||||||
|  |                     block_ = std::string("BeiDou-3 IGSO01");  // Slot B-3; launched 2019/04/20 | ||||||
|                     break; |                     break; | ||||||
|                 default: |                 default: | ||||||
|                     block_ = std::string("Unknown(Simulated)"); |                     block_ = std::string("Unknown(Simulated)"); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Marc Majoral
					Marc Majoral