mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 15:23:04 +00:00 
			
		
		
		
	Clean source code, update to new gnss_synchro parameter name
This commit is contained in:
		| @@ -147,8 +147,8 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|     // ******************************************************************************** | ||||
|     // ****** PREPARE THE DATA (SV EPHEMERIS AND OBSERVATIONS) ************************ | ||||
|     // ******************************************************************************** | ||||
|     int valid_obs = 0;      //valid observations counter | ||||
|     int glo_valid_obs = 0;  //GLONASS L1/L2 valid observations counter | ||||
|     int valid_obs = 0;      // valid observations counter | ||||
|     int glo_valid_obs = 0;  // GLONASS L1/L2 valid observations counter | ||||
|  | ||||
|     obsd_t obs_data[MAXOBS]; | ||||
|     eph_t eph_data[MAXOBS]; | ||||
| @@ -156,7 +156,7 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|  | ||||
|     for (gnss_observables_iter = gnss_observables_map.cbegin(); | ||||
|          gnss_observables_iter != gnss_observables_map.cend(); | ||||
|          gnss_observables_iter++)  //CHECK INCONSISTENCY when combining GLONASS + other system | ||||
|          gnss_observables_iter++)  // CHECK INCONSISTENCY when combining GLONASS + other system | ||||
|         { | ||||
|             switch (gnss_observables_iter->second.System) | ||||
|                 { | ||||
| @@ -170,9 +170,9 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                 galileo_ephemeris_iter = galileo_ephemeris_map.find(gnss_observables_iter->second.PRN); | ||||
|                                 if (galileo_ephemeris_iter != galileo_ephemeris_map.cend()) | ||||
|                                     { | ||||
|                                         //convert ephemeris from GNSS-SDR class to RTKLIB structure | ||||
|                                         // convert ephemeris from GNSS-SDR class to RTKLIB structure | ||||
|                                         eph_data[valid_obs] = eph_to_rtklib(galileo_ephemeris_iter->second); | ||||
|                                         //convert observation from GNSS-SDR class to RTKLIB structure | ||||
|                                         // convert observation from GNSS-SDR class to RTKLIB structure | ||||
|                                         obsd_t newobs = {{0, 0}, '0', '0', {}, {}, {}, {}, {}, {}}; | ||||
|                                         obs_data[valid_obs + glo_valid_obs] = insert_obs_to_rtklib(newobs, | ||||
|                                             gnss_observables_iter->second, | ||||
| @@ -201,17 +201,17 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                                         obs_data[i + glo_valid_obs] = insert_obs_to_rtklib(obs_data[i + glo_valid_obs], | ||||
|                                                             gnss_observables_iter->second, | ||||
|                                                             galileo_ephemeris_iter->second.WN_5, | ||||
|                                                             2);  //Band 3 (L5/E5) | ||||
|                                                             2);  // Band 3 (L5/E5) | ||||
|                                                         found_E1_obs = true; | ||||
|                                                         break; | ||||
|                                                     } | ||||
|                                             } | ||||
|                                         if (!found_E1_obs) | ||||
|                                             { | ||||
|                                                 //insert Galileo E5 obs as new obs and also insert its ephemeris | ||||
|                                                 //convert ephemeris from GNSS-SDR class to RTKLIB structure | ||||
|                                                 // insert Galileo E5 obs as new obs and also insert its ephemeris | ||||
|                                                 // convert ephemeris from GNSS-SDR class to RTKLIB structure | ||||
|                                                 eph_data[valid_obs] = eph_to_rtklib(galileo_ephemeris_iter->second); | ||||
|                                                 //convert observation from GNSS-SDR class to RTKLIB structure | ||||
|                                                 // convert observation from GNSS-SDR class to RTKLIB structure | ||||
|                                                 unsigned char default_code_ = static_cast<unsigned char>(CODE_NONE); | ||||
|                                                 obsd_t newobs = {{0, 0}, '0', '0', {}, {}, | ||||
|                                                     {default_code_, default_code_, default_code_}, | ||||
| @@ -219,7 +219,7 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                                 obs_data[valid_obs + glo_valid_obs] = insert_obs_to_rtklib(newobs, | ||||
|                                                     gnss_observables_iter->second, | ||||
|                                                     galileo_ephemeris_iter->second.WN_5, | ||||
|                                                     2);  //Band 3 (L5/E5) | ||||
|                                                     2);  // Band 3 (L5/E5) | ||||
|                                                 valid_obs++; | ||||
|                                             } | ||||
|                                     } | ||||
| @@ -240,9 +240,9 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                 gps_ephemeris_iter = gps_ephemeris_map.find(gnss_observables_iter->second.PRN); | ||||
|                                 if (gps_ephemeris_iter != gps_ephemeris_map.cend()) | ||||
|                                     { | ||||
|                                         //convert ephemeris from GNSS-SDR class to RTKLIB structure | ||||
|                                         // convert ephemeris from GNSS-SDR class to RTKLIB structure | ||||
|                                         eph_data[valid_obs] = eph_to_rtklib(gps_ephemeris_iter->second); | ||||
|                                         //convert observation from GNSS-SDR class to RTKLIB structure | ||||
|                                         // convert observation from GNSS-SDR class to RTKLIB structure | ||||
|                                         obsd_t newobs = {{0, 0}, '0', '0', {}, {}, {}, {}, {}, {}}; | ||||
|                                         obs_data[valid_obs + glo_valid_obs] = insert_obs_to_rtklib(newobs, | ||||
|                                             gnss_observables_iter->second, | ||||
| @@ -255,7 +255,7 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                         DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->first; | ||||
|                                     } | ||||
|                             } | ||||
|                         //GPS L2 | ||||
|                         // GPS L2 | ||||
|                         if (sig_.compare("2S") == 0) | ||||
|                             { | ||||
|                                 gps_cnav_ephemeris_iter = gps_cnav_ephemeris_map.find(gnss_observables_iter->second.PRN); | ||||
| @@ -276,7 +276,7 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                                                 obs_data[i + glo_valid_obs] = insert_obs_to_rtklib(obs_data[i + glo_valid_obs], | ||||
|                                                                     gnss_observables_iter->second, | ||||
|                                                                     eph_data[i].week, | ||||
|                                                                     1);  //Band 2 (L2) | ||||
|                                                                     1);  // Band 2 (L2) | ||||
|                                                                 break; | ||||
|                                                             } | ||||
|                                                     } | ||||
| @@ -285,9 +285,9 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                         else | ||||
|                                             { | ||||
|                                                 // 3. If not found, insert the GPS L2 ephemeris and the observation | ||||
|                                                 //convert ephemeris from GNSS-SDR class to RTKLIB structure | ||||
|                                                 // convert ephemeris from GNSS-SDR class to RTKLIB structure | ||||
|                                                 eph_data[valid_obs] = eph_to_rtklib(gps_cnav_ephemeris_iter->second); | ||||
|                                                 //convert observation from GNSS-SDR class to RTKLIB structure | ||||
|                                                 // convert observation from GNSS-SDR class to RTKLIB structure | ||||
|                                                 unsigned char default_code_ = static_cast<unsigned char>(CODE_NONE); | ||||
|                                                 obsd_t newobs = {{0, 0}, '0', '0', {}, {}, | ||||
|                                                     {default_code_, default_code_, default_code_}, | ||||
| @@ -295,7 +295,7 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                                 obs_data[valid_obs + glo_valid_obs] = insert_obs_to_rtklib(newobs, | ||||
|                                                     gnss_observables_iter->second, | ||||
|                                                     gps_cnav_ephemeris_iter->second.i_GPS_week, | ||||
|                                                     1);  //Band 2 (L2) | ||||
|                                                     1);  // Band 2 (L2) | ||||
|                                                 valid_obs++; | ||||
|                                             } | ||||
|                                     } | ||||
| @@ -304,7 +304,7 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                         DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->second.PRN; | ||||
|                                     } | ||||
|                             } | ||||
|                         //GPS L5 | ||||
|                         // GPS L5 | ||||
|                         if (sig_.compare("L5") == 0) | ||||
|                             { | ||||
|                                 gps_cnav_ephemeris_iter = gps_cnav_ephemeris_map.find(gnss_observables_iter->second.PRN); | ||||
| @@ -324,7 +324,7 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                                                 obs_data[i + glo_valid_obs] = insert_obs_to_rtklib(obs_data[i], | ||||
|                                                                     gnss_observables_iter->second, | ||||
|                                                                     gps_cnav_ephemeris_iter->second.i_GPS_week, | ||||
|                                                                     2);  //Band 3 (L5) | ||||
|                                                                     2);  // Band 3 (L5) | ||||
|                                                                 break; | ||||
|                                                             } | ||||
|                                                     } | ||||
| @@ -332,9 +332,9 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                         else | ||||
|                                             { | ||||
|                                                 // 3. If not found, insert the GPS L5 ephemeris and the observation | ||||
|                                                 //convert ephemeris from GNSS-SDR class to RTKLIB structure | ||||
|                                                 // convert ephemeris from GNSS-SDR class to RTKLIB structure | ||||
|                                                 eph_data[valid_obs] = eph_to_rtklib(gps_cnav_ephemeris_iter->second); | ||||
|                                                 //convert observation from GNSS-SDR class to RTKLIB structure | ||||
|                                                 // convert observation from GNSS-SDR class to RTKLIB structure | ||||
|                                                 unsigned char default_code_ = static_cast<unsigned char>(CODE_NONE); | ||||
|                                                 obsd_t newobs = {{0, 0}, '0', '0', {}, {}, | ||||
|                                                     {default_code_, default_code_, default_code_}, | ||||
| @@ -342,7 +342,7 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                                 obs_data[valid_obs + glo_valid_obs] = insert_obs_to_rtklib(newobs, | ||||
|                                                     gnss_observables_iter->second, | ||||
|                                                     gps_cnav_ephemeris_iter->second.i_GPS_week, | ||||
|                                                     2);  //Band 3 (L5) | ||||
|                                                     2);  // Band 3 (L5) | ||||
|                                                 valid_obs++; | ||||
|                                             } | ||||
|                                     } | ||||
| @@ -363,14 +363,14 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                 glonass_gnav_ephemeris_iter = glonass_gnav_ephemeris_map.find(gnss_observables_iter->second.PRN); | ||||
|                                 if (glonass_gnav_ephemeris_iter != glonass_gnav_ephemeris_map.cend()) | ||||
|                                     { | ||||
|                                         //convert ephemeris from GNSS-SDR class to RTKLIB structure | ||||
|                                         // convert ephemeris from GNSS-SDR class to RTKLIB structure | ||||
|                                         geph_data[glo_valid_obs] = eph_to_rtklib(glonass_gnav_ephemeris_iter->second, gnav_utc); | ||||
|                                         //convert observation from GNSS-SDR class to RTKLIB structure | ||||
|                                         // convert observation from GNSS-SDR class to RTKLIB structure | ||||
|                                         obsd_t newobs = {{0, 0}, '0', '0', {}, {}, {}, {}, {}, {}}; | ||||
|                                         obs_data[valid_obs + glo_valid_obs] = insert_obs_to_rtklib(newobs, | ||||
|                                             gnss_observables_iter->second, | ||||
|                                             glonass_gnav_ephemeris_iter->second.d_WN, | ||||
|                                             0);  //Band 0 (L1) | ||||
|                                             0);  // Band 0 (L1) | ||||
|                                         glo_valid_obs++; | ||||
|                                     } | ||||
|                                 else  // the ephemeris are not available for this SV | ||||
| @@ -400,15 +400,15 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                             } | ||||
|                                         if (!found_L1_obs) | ||||
|                                             { | ||||
|                                                 //insert GLONASS GNAV L2 obs as new obs and also insert its ephemeris | ||||
|                                                 //convert ephemeris from GNSS-SDR class to RTKLIB structure | ||||
|                                                 // insert GLONASS GNAV L2 obs as new obs and also insert its ephemeris | ||||
|                                                 // convert ephemeris from GNSS-SDR class to RTKLIB structure | ||||
|                                                 geph_data[glo_valid_obs] = eph_to_rtklib(glonass_gnav_ephemeris_iter->second, gnav_utc); | ||||
|                                                 //convert observation from GNSS-SDR class to RTKLIB structure | ||||
|                                                 // convert observation from GNSS-SDR class to RTKLIB structure | ||||
|                                                 obsd_t newobs = {{0, 0}, '0', '0', {}, {}, {}, {}, {}, {}}; | ||||
|                                                 obs_data[valid_obs + glo_valid_obs] = insert_obs_to_rtklib(newobs, | ||||
|                                                     gnss_observables_iter->second, | ||||
|                                                     glonass_gnav_ephemeris_iter->second.d_WN, | ||||
|                                                     1);  //Band 1 (L2) | ||||
|                                                     1);  // Band 1 (L2) | ||||
|                                                 glo_valid_obs++; | ||||
|                                             } | ||||
|                                     } | ||||
| @@ -481,20 +481,19 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|  | ||||
|                     this->set_valid_position(true); | ||||
|                     arma::vec rx_position_and_time(4); | ||||
|                     rx_position_and_time(0) = pvt_sol.rr[0];  //[m] | ||||
|                     rx_position_and_time(1) = pvt_sol.rr[1];  //[m] | ||||
|                     rx_position_and_time(2) = pvt_sol.rr[2];  //[m] | ||||
|                     rx_position_and_time(0) = pvt_sol.rr[0];  // [m] | ||||
|                     rx_position_and_time(1) = pvt_sol.rr[1];  // [m] | ||||
|                     rx_position_and_time(2) = pvt_sol.rr[2];  // [m] | ||||
|  | ||||
|                     //todo: fix this ambiguity in the RTKLIB units in receiver clock offset! | ||||
|                     if (rtk_.opt.mode == PMODE_SINGLE) | ||||
|                         { | ||||
|                             rx_position_and_time(3) = pvt_sol.dtr[0];  //if the RTKLIB solver is set to SINGLE, the dtr is already expressed in [s] | ||||
|                             rx_position_and_time(3) = pvt_sol.dtr[0];  // if the RTKLIB solver is set to SINGLE, the dtr is already expressed in [s] | ||||
|                         } | ||||
|                     else | ||||
|                         { | ||||
|                             rx_position_and_time(3) = pvt_sol.dtr[0] / GPS_C_m_s;  // the receiver clock offset is expressed in [meters] | ||||
|                             rx_position_and_time(3) = pvt_sol.dtr[0] / GPS_C_m_s;  // the receiver clock offset is expressed in [meters], so we convert it into [s] | ||||
|                         } | ||||
|                     //[s] | ||||
|                     this->set_rx_pos(rx_position_and_time.rows(0, 2));  // save ECEF position for the next iteration | ||||
|                     //observable fix: | ||||
|                     //double offset_s = this->get_time_offset_s(); | ||||
| @@ -505,7 +504,7 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                                << " in ECEF (X,Y,Z,t[meters]) = " << rx_position_and_time; | ||||
|  | ||||
|                     boost::posix_time::ptime p_time; | ||||
|                     //gtime_t rtklib_utc_time = gpst2utc(pvt_sol.time); | ||||
|                     // gtime_t rtklib_utc_time = gpst2utc(pvt_sol.time); | ||||
|  | ||||
|                     gtime_t rtklib_utc_time = gpst2time(adjgpsweek(nav_data.eph[0].week), gnss_observables_map.begin()->second.RX_time); | ||||
|                     p_time = boost::posix_time::from_time_t(rtklib_utc_time.time); | ||||
| @@ -525,7 +524,7 @@ bool rtklib_solver::get_PVT(const std::map<int, Gnss_Synchro>& gnss_observables_ | ||||
|                             try | ||||
|                                 { | ||||
|                                     double tmp_double; | ||||
|                                     //  PVT GPS time | ||||
|                                     // PVT GPS time | ||||
|                                     tmp_double = gnss_observables_map.begin()->second.RX_time; | ||||
|                                     d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double)); | ||||
|                                     // ECEF User Position East [m] | ||||
|   | ||||
| @@ -63,7 +63,6 @@ | ||||
| #define SQRT_SOL(x) ((x) < 0.0 ? 0.0 : sqrt(x)) | ||||
|  | ||||
| const int MAXFIELD = 64; /* max number of fields in a record */ | ||||
| const int MAXNMEA = 256; /* max length of nmea sentence */ | ||||
|  | ||||
| const double KNOT2M = 0.514444444; /* m/knot */ | ||||
|  | ||||
|   | ||||
| @@ -310,10 +310,10 @@ bool hybrid_observables_cc::interpolate_data(Gnss_Synchro &out, const unsigned i | ||||
|         } | ||||
|     find_interp_elements(ch, ti); | ||||
|  | ||||
|     //1st: copy the nearest gnss_synchro data for that channel | ||||
|     // 1st: copy the nearest gnss_synchro data for that channel | ||||
|     out = d_gnss_synchro_history->at(ch, 0); | ||||
|  | ||||
|     //2nd: Linear interpolation: y(t) = y(t1) + (y(t2) - y(t1)) * (t - t1) / (t2 - t1) | ||||
|     // 2nd: Linear interpolation: y(t) = y(t1) + (y(t2) - y(t1)) * (t - t1) / (t2 - t1) | ||||
|  | ||||
|     // CARRIER PHASE INTERPOLATION | ||||
|     out.Carrier_phase_rads = d_gnss_synchro_history->at(ch, 0).Carrier_phase_rads + (d_gnss_synchro_history->at(ch, 1).Carrier_phase_rads - d_gnss_synchro_history->at(ch, 0).Carrier_phase_rads) * (ti - d_gnss_synchro_history->at(ch, 0).RX_time) / (d_gnss_synchro_history->at(ch, 1).RX_time - d_gnss_synchro_history->at(ch, 0).RX_time); | ||||
| @@ -324,11 +324,6 @@ bool hybrid_observables_cc::interpolate_data(Gnss_Synchro &out, const unsigned i | ||||
|     // TOW INTERPOLATION | ||||
|     out.interp_TOW_ms = static_cast<double>(d_gnss_synchro_history->at(ch, 0).TOW_at_current_symbol_ms) + (static_cast<double>(d_gnss_synchro_history->at(ch, 1).TOW_at_current_symbol_ms) - static_cast<double>(d_gnss_synchro_history->at(ch, 0).TOW_at_current_symbol_ms)) * (ti - d_gnss_synchro_history->at(ch, 0).RX_time) / (d_gnss_synchro_history->at(ch, 1).RX_time - d_gnss_synchro_history->at(ch, 0).RX_time); | ||||
|  | ||||
|  | ||||
|     //std::cout.precision(17); | ||||
|     //std::cout << "Diff TOW_at_current_symbol_ms(1) -  out.interp_TOW_ms: " << static_cast<double>(d_gnss_synchro_history->at(ch, 1).TOW_at_current_symbol_ms) - out.interp_TOW_ms << std::endl; | ||||
|  | ||||
|  | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| @@ -345,6 +340,7 @@ double hybrid_observables_cc::compute_T_rx_s(const Gnss_Synchro &a) | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| void hybrid_observables_cc::find_interp_elements(const unsigned int &ch, const double &ti) | ||||
| { | ||||
|     unsigned int closest = 0; | ||||
| @@ -412,10 +408,10 @@ void hybrid_observables_cc::correct_TOW_and_compute_prange(std::vector<Gnss_Sync | ||||
| { | ||||
|     std::vector<Gnss_Synchro>::iterator it; | ||||
|  | ||||
| /////////////////////// DEBUG ////////////////////////// | ||||
| //   Logs if there is a pseudorange difference between | ||||
| //   signals of the same satellite higher than a threshold | ||||
| //////////////////////////////////////////////////////// | ||||
|     /////////////////////// DEBUG ////////////////////////// | ||||
|     //   Logs if there is a pseudorange difference between | ||||
|     //   signals of the same satellite higher than a threshold | ||||
|     //////////////////////////////////////////////////////// | ||||
| #ifndef NDEBUG | ||||
|     std::vector<Gnss_Synchro>::iterator it2; | ||||
|     double thr_ = 250.0 / SPEED_OF_LIGHT;  // Maximum pseudorange difference = 250 meters | ||||
| @@ -442,8 +438,6 @@ void hybrid_observables_cc::correct_TOW_and_compute_prange(std::vector<Gnss_Sync | ||||
|         } | ||||
| #endif | ||||
|  | ||||
|     /////////////////////////////////////////////////////////// | ||||
|  | ||||
|     if (!T_rx_TOW_set) | ||||
|         { | ||||
|             unsigned int TOW_ref = std::numeric_limits<unsigned int>::lowest(); | ||||
| @@ -532,6 +526,7 @@ int hybrid_observables_cc::general_work(int noutput_items __attribute__((unused) | ||||
|                                 } | ||||
|                         } | ||||
|                 } | ||||
|  | ||||
|             for (i = 0; i < d_nchannels; i++) | ||||
|                 { | ||||
|                     if (d_gnss_synchro_history->size(i) > 2) | ||||
| @@ -544,6 +539,7 @@ int hybrid_observables_cc::general_work(int noutput_items __attribute__((unused) | ||||
|                         } | ||||
|                 } | ||||
|             d_num_valid_channels = valid_channels.count(); | ||||
|  | ||||
|             // Check if there is any valid channel after reading the new incoming Gnss_Synchro data | ||||
|             if (d_num_valid_channels == 0) | ||||
|                 { | ||||
| @@ -551,7 +547,7 @@ int hybrid_observables_cc::general_work(int noutput_items __attribute__((unused) | ||||
|                     return returned_elements; | ||||
|                 } | ||||
|  | ||||
|             for (i = 0; i < d_nchannels; i++)  //Discard observables with T_rx higher than the threshold | ||||
|             for (i = 0; i < d_nchannels; i++)  // Discard observables with T_rx higher than the threshold | ||||
|                 { | ||||
|                     if (valid_channels[i]) | ||||
|                         { | ||||
| @@ -589,11 +585,13 @@ int hybrid_observables_cc::general_work(int noutput_items __attribute__((unused) | ||||
|                         } | ||||
|                 } | ||||
|             d_num_valid_channels = valid_channels.count(); | ||||
|  | ||||
|             if (d_num_valid_channels == 0) | ||||
|                 { | ||||
|                     consume(d_nchannels, epoch + 1); | ||||
|                     return returned_elements; | ||||
|                 } | ||||
|  | ||||
|             correct_TOW_and_compute_prange(epoch_data); | ||||
|             std::vector<Gnss_Synchro>::iterator it = epoch_data.begin(); | ||||
|             for (i = 0; i < d_nchannels; i++) | ||||
| @@ -610,6 +608,7 @@ int hybrid_observables_cc::general_work(int noutput_items __attribute__((unused) | ||||
|                             out[i][epoch].Flag_valid_pseudorange = false; | ||||
|                         } | ||||
|                 } | ||||
|  | ||||
|             if (d_dump) | ||||
|                 { | ||||
|                     // MULTIPLEXED FILE RECORDING - Record results to file | ||||
| @@ -640,6 +639,7 @@ int hybrid_observables_cc::general_work(int noutput_items __attribute__((unused) | ||||
|                             d_dump = false; | ||||
|                         } | ||||
|                 } | ||||
|  | ||||
|             returned_elements++; | ||||
|         } | ||||
|     consume(d_nchannels, ninput_items[d_nchannels]); | ||||
|   | ||||
| @@ -61,7 +61,7 @@ glonass_l1_ca_telemetry_decoder_cc::glonass_l1_ca_telemetry_decoder_cc( | ||||
|     d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); | ||||
|     LOG(INFO) << "Initializing GLONASS L1 CA TELEMETRY DECODING"; | ||||
|     // Define the number of sampes per symbol. Notice that GLONASS has 2 rates, | ||||
|     //one for the navigation data and the other for the preamble information | ||||
|     // one for the navigation data and the other for the preamble information | ||||
|     d_samples_per_symbol = (GLONASS_L1_CA_CODE_RATE_HZ / GLONASS_L1_CA_CODE_LENGTH_CHIPS) / GLONASS_L1_CA_SYMBOL_RATE_BPS; | ||||
|  | ||||
|     // Set the preamble information | ||||
| @@ -268,11 +268,11 @@ int glonass_l1_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|     Gnss_Synchro **out = reinterpret_cast<Gnss_Synchro **>(&output_items[0]);            // Get the output buffer pointer | ||||
|     const Gnss_Synchro **in = reinterpret_cast<const Gnss_Synchro **>(&input_items[0]);  // Get the input buffer pointer | ||||
|  | ||||
|     Gnss_Synchro current_symbol;  //structure to save the synchronization information and send the output object to the next block | ||||
|     //1. Copy the current tracking output | ||||
|     Gnss_Synchro current_symbol;  // structure to save the synchronization information and send the output object to the next block | ||||
|     // 1. Copy the current tracking output | ||||
|     current_symbol = in[0][0]; | ||||
|     d_symbol_history.push_back(current_symbol);  //add new symbol to the symbol queue | ||||
|     d_sample_counter++;                          //count for the processed samples | ||||
|     d_symbol_history.push_back(current_symbol);  // add new symbol to the symbol queue | ||||
|     d_sample_counter++;                          // count for the processed samples | ||||
|     consume_each(1); | ||||
|  | ||||
|     d_flag_preamble = false; | ||||
| @@ -280,7 +280,7 @@ int glonass_l1_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|  | ||||
|     if (d_symbol_history.size() > required_symbols) | ||||
|         { | ||||
|             //******* preamble correlation ******** | ||||
|             // ******* preamble correlation ******** | ||||
|             for (int i = 0; i < d_symbols_per_preamble; i++) | ||||
|                 { | ||||
|                     if (d_symbol_history.at(i).Prompt_I < 0)  // symbols clipping | ||||
| @@ -294,8 +294,8 @@ int glonass_l1_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|                 } | ||||
|         } | ||||
|  | ||||
|     //******* frame sync ****************** | ||||
|     if (d_stat == 0)  //no preamble information | ||||
|     // ******* frame sync ****************** | ||||
|     if (d_stat == 0)  // no preamble information | ||||
|         { | ||||
|             if (abs(corr_value) >= d_symbols_per_preamble) | ||||
|                 { | ||||
| @@ -311,15 +311,15 @@ int glonass_l1_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|         { | ||||
|             if (abs(corr_value) >= d_symbols_per_preamble) | ||||
|                 { | ||||
|                     //check preamble separation | ||||
|                     // check preamble separation | ||||
|                     preamble_diff = d_sample_counter - d_preamble_index; | ||||
|                     // Record the PRN start sample index associated to the preamble | ||||
|                     d_preamble_time_samples = d_symbol_history.at(0).Tracking_sample_counter; | ||||
|                     if (abs(preamble_diff - GLONASS_GNAV_PREAMBLE_PERIOD_SYMBOLS) == 0) | ||||
|                         { | ||||
|                             //try to decode frame | ||||
|                             // try to decode frame | ||||
|                             LOG(INFO) << "Starting string decoder for GLONASS L1 C/A SAT " << this->d_satellite; | ||||
|                             d_preamble_index = d_sample_counter;  //record the preamble sample stamp | ||||
|                             d_preamble_index = d_sample_counter;  // record the preamble sample stamp | ||||
|                             d_stat = 2; | ||||
|                         } | ||||
|                     else | ||||
| @@ -342,7 +342,7 @@ int glonass_l1_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|                     int string_length = GLONASS_GNAV_STRING_SYMBOLS - d_symbols_per_preamble; | ||||
|                     double string_symbols[GLONASS_GNAV_DATA_SYMBOLS] = {0}; | ||||
|  | ||||
|                     //******* SYMBOL TO BIT ******* | ||||
|                     // ******* SYMBOL TO BIT ******* | ||||
|                     for (int i = 0; i < string_length; i++) | ||||
|                         { | ||||
|                             if (corr_value > 0) | ||||
| @@ -355,13 +355,13 @@ int glonass_l1_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|                                 } | ||||
|                         } | ||||
|  | ||||
|                     //call the decoder | ||||
|                     // call the decoder | ||||
|                     decode_string(string_symbols, string_length); | ||||
|                     if (d_nav.flag_CRC_test == true) | ||||
|                         { | ||||
|                             d_CRC_error_counter = 0; | ||||
|                             d_flag_preamble = true;               //valid preamble indicator (initialized to false every work()) | ||||
|                             d_preamble_index = d_sample_counter;  //record the preamble sample stamp (t_P) | ||||
|                             d_flag_preamble = true;               // valid preamble indicator (initialized to false every work()) | ||||
|                             d_preamble_index = d_sample_counter;  // record the preamble sample stamp (t_P) | ||||
|                             if (!d_flag_frame_sync) | ||||
|                                 { | ||||
|                                     d_flag_frame_sync = true; | ||||
| @@ -372,7 +372,7 @@ int glonass_l1_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|                     else | ||||
|                         { | ||||
|                             d_CRC_error_counter++; | ||||
|                             d_preamble_index = d_sample_counter;  //record the preamble sample stamp | ||||
|                             d_preamble_index = d_sample_counter;  // record the preamble sample stamp | ||||
|                             if (d_CRC_error_counter > CRC_ERROR_LIMIT) | ||||
|                                 { | ||||
|                                     LOG(INFO) << "Lost of frame sync SAT " << this->d_satellite; | ||||
| @@ -384,21 +384,21 @@ int glonass_l1_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|         } | ||||
|  | ||||
|     // UPDATE GNSS SYNCHRO DATA | ||||
|     //2. Add the telemetry decoder information | ||||
|     // 2. Add the telemetry decoder information | ||||
|     if (this->d_flag_preamble == true and d_nav.flag_TOW_new == true) | ||||
|         //update TOW at the preamble instant | ||||
|         // update TOW at the preamble instant | ||||
|         { | ||||
|             d_TOW_at_current_symbol = floor((d_nav.gnav_ephemeris.d_TOW - GLONASS_GNAV_PREAMBLE_DURATION_S) * 1000) / 1000; | ||||
|             d_nav.flag_TOW_new = false; | ||||
|         } | ||||
|     else  //if there is not a new preamble, we define the TOW of the current symbol | ||||
|     else  // if there is not a new preamble, we define the TOW of the current symbol | ||||
|         { | ||||
|             d_TOW_at_current_symbol = d_TOW_at_current_symbol + GLONASS_L1_CA_CODE_PERIOD; | ||||
|         } | ||||
|  | ||||
|     //if (d_flag_frame_sync == true and d_nav.flag_TOW_set==true and d_nav.flag_CRC_test == true) | ||||
|     // if (d_flag_frame_sync == true and d_nav.flag_TOW_set==true and d_nav.flag_CRC_test == true) | ||||
|  | ||||
|     // if(d_nav.flag_GGTO_1 == true  and  d_nav.flag_GGTO_2 == true and  d_nav.flag_GGTO_3 == true and  d_nav.flag_GGTO_4 == true) //all GGTO parameters arrived | ||||
|     // if(d_nav.flag_GGTO_1 == true  and  d_nav.flag_GGTO_2 == true and  d_nav.flag_GGTO_3 == true and  d_nav.flag_GGTO_4 == true) // all GGTO parameters arrived | ||||
|     //     { | ||||
|     //         delta_t = d_nav.A_0G_10 + d_nav.A_1G_10 * (d_TOW_at_current_symbol - d_nav.t_0G_10 + 604800.0 * (fmod((d_nav.WN_0 - d_nav.WN_0G_10), 64))); | ||||
|     //     } | ||||
| @@ -414,8 +414,8 @@ int glonass_l1_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|  | ||||
|     current_symbol.PRN = this->d_satellite.get_PRN(); | ||||
|     current_symbol.TOW_at_current_symbol_ms = round(d_TOW_at_current_symbol * 1000.0); | ||||
|     //todo: glonass time to gps time should be done in observables block | ||||
|     //current_symbol.TOW_at_current_symbol_s -= delta_t;  // Galileo to GPS TOW | ||||
|     // todo: glonass time to gps time should be done in observables block | ||||
|     // current_symbol.TOW_at_current_symbol_ms -= -= static_cast<unsigned int>(delta_t) * 1000;  // Galileo to GPS TOW | ||||
|  | ||||
|     if (d_dump == true) | ||||
|         { | ||||
| @@ -442,7 +442,7 @@ int glonass_l1_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|         { | ||||
|             d_symbol_history.pop_front(); | ||||
|         } | ||||
|     //3. Make the output (copy the object contents to the GNURadio reserved memory) | ||||
|     // 3. Make the output (copy the object contents to the GNURadio reserved memory) | ||||
|     *out[0] = current_symbol; | ||||
|  | ||||
|     return 1; | ||||
|   | ||||
| @@ -61,7 +61,7 @@ glonass_l2_ca_telemetry_decoder_cc::glonass_l2_ca_telemetry_decoder_cc( | ||||
|     d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); | ||||
|     LOG(INFO) << "Initializing GLONASS L2 CA TELEMETRY DECODING"; | ||||
|     // Define the number of sampes per symbol. Notice that GLONASS has 2 rates, | ||||
|     //one for the navigation data and the other for the preamble information | ||||
|     // one for the navigation data and the other for the preamble information | ||||
|     d_samples_per_symbol = (GLONASS_L2_CA_CODE_RATE_HZ / GLONASS_L2_CA_CODE_LENGTH_CHIPS) / GLONASS_L2_CA_SYMBOL_RATE_BPS; | ||||
|  | ||||
|     // Set the preamble information | ||||
| @@ -268,11 +268,11 @@ int glonass_l2_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|     Gnss_Synchro **out = reinterpret_cast<Gnss_Synchro **>(&output_items[0]);            // Get the output buffer pointer | ||||
|     const Gnss_Synchro **in = reinterpret_cast<const Gnss_Synchro **>(&input_items[0]);  // Get the input buffer pointer | ||||
|  | ||||
|     Gnss_Synchro current_symbol;  //structure to save the synchronization information and send the output object to the next block | ||||
|     //1. Copy the current tracking output | ||||
|     Gnss_Synchro current_symbol;  // structure to save the synchronization information and send the output object to the next block | ||||
|     // 1. Copy the current tracking output | ||||
|     current_symbol = in[0][0]; | ||||
|     d_symbol_history.push_back(current_symbol);  //add new symbol to the symbol queue | ||||
|     d_sample_counter++;                          //count for the processed samples | ||||
|     d_symbol_history.push_back(current_symbol);  // add new symbol to the symbol queue | ||||
|     d_sample_counter++;                          // count for the processed samples | ||||
|     consume_each(1); | ||||
|  | ||||
|     d_flag_preamble = false; | ||||
| @@ -280,7 +280,7 @@ int glonass_l2_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|  | ||||
|     if (d_symbol_history.size() > required_symbols) | ||||
|         { | ||||
|             //******* preamble correlation ******** | ||||
|             // ******* preamble correlation ******** | ||||
|             for (int i = 0; i < d_symbols_per_preamble; i++) | ||||
|                 { | ||||
|                     if (d_symbol_history.at(i).Prompt_I < 0)  // symbols clipping | ||||
| @@ -294,8 +294,8 @@ int glonass_l2_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|                 } | ||||
|         } | ||||
|  | ||||
|     //******* frame sync ****************** | ||||
|     if (d_stat == 0)  //no preamble information | ||||
|     // ******* frame sync ****************** | ||||
|     if (d_stat == 0)  // no preamble information | ||||
|         { | ||||
|             if (abs(corr_value) >= d_symbols_per_preamble) | ||||
|                 { | ||||
| @@ -311,15 +311,15 @@ int glonass_l2_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|         { | ||||
|             if (abs(corr_value) >= d_symbols_per_preamble) | ||||
|                 { | ||||
|                     //check preamble separation | ||||
|                     // check preamble separation | ||||
|                     preamble_diff = d_sample_counter - d_preamble_index; | ||||
|                     // Record the PRN start sample index associated to the preamble | ||||
|                     d_preamble_time_samples = d_symbol_history.at(0).Tracking_sample_counter; | ||||
|                     if (abs(preamble_diff - GLONASS_GNAV_PREAMBLE_PERIOD_SYMBOLS) == 0) | ||||
|                         { | ||||
|                             //try to decode frame | ||||
|                             // try to decode frame | ||||
|                             LOG(INFO) << "Starting string decoder for GLONASS L2 C/A SAT " << this->d_satellite; | ||||
|                             d_preamble_index = d_sample_counter;  //record the preamble sample stamp | ||||
|                             d_preamble_index = d_sample_counter;  // record the preamble sample stamp | ||||
|                             d_stat = 2; | ||||
|                         } | ||||
|                     else | ||||
| @@ -342,7 +342,7 @@ int glonass_l2_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|                     int string_length = GLONASS_GNAV_STRING_SYMBOLS - d_symbols_per_preamble; | ||||
|                     double string_symbols[GLONASS_GNAV_DATA_SYMBOLS] = {0}; | ||||
|  | ||||
|                     //******* SYMBOL TO BIT ******* | ||||
|                     // ******* SYMBOL TO BIT ******* | ||||
|                     for (int i = 0; i < string_length; i++) | ||||
|                         { | ||||
|                             if (corr_value > 0) | ||||
| @@ -355,13 +355,13 @@ int glonass_l2_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|                                 } | ||||
|                         } | ||||
|  | ||||
|                     //call the decoder | ||||
|                     // call the decoder | ||||
|                     decode_string(string_symbols, string_length); | ||||
|                     if (d_nav.flag_CRC_test == true) | ||||
|                         { | ||||
|                             d_CRC_error_counter = 0; | ||||
|                             d_flag_preamble = true;               //valid preamble indicator (initialized to false every work()) | ||||
|                             d_preamble_index = d_sample_counter;  //record the preamble sample stamp (t_P) | ||||
|                             d_flag_preamble = true;               // valid preamble indicator (initialized to false every work()) | ||||
|                             d_preamble_index = d_sample_counter;  // record the preamble sample stamp (t_P) | ||||
|                             if (!d_flag_frame_sync) | ||||
|                                 { | ||||
|                                     d_flag_frame_sync = true; | ||||
| @@ -372,7 +372,7 @@ int glonass_l2_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|                     else | ||||
|                         { | ||||
|                             d_CRC_error_counter++; | ||||
|                             d_preamble_index = d_sample_counter;  //record the preamble sample stamp | ||||
|                             d_preamble_index = d_sample_counter;  // record the preamble sample stamp | ||||
|                             if (d_CRC_error_counter > CRC_ERROR_LIMIT) | ||||
|                                 { | ||||
|                                     LOG(INFO) << "Lost of frame sync SAT " << this->d_satellite; | ||||
| @@ -384,21 +384,21 @@ int glonass_l2_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|         } | ||||
|  | ||||
|     // UPDATE GNSS SYNCHRO DATA | ||||
|     //2. Add the telemetry decoder information | ||||
|     // 2. Add the telemetry decoder information | ||||
|     if (this->d_flag_preamble == true and d_nav.flag_TOW_new == true) | ||||
|         //update TOW at the preamble instant | ||||
|         // update TOW at the preamble instant | ||||
|         { | ||||
|             d_TOW_at_current_symbol = floor((d_nav.gnav_ephemeris.d_TOW - GLONASS_GNAV_PREAMBLE_DURATION_S) * 1000) / 1000; | ||||
|             d_nav.flag_TOW_new = false; | ||||
|         } | ||||
|     else  //if there is not a new preamble, we define the TOW of the current symbol | ||||
|     else  // if there is not a new preamble, we define the TOW of the current symbol | ||||
|         { | ||||
|             d_TOW_at_current_symbol = d_TOW_at_current_symbol + GLONASS_L2_CA_CODE_PERIOD; | ||||
|         } | ||||
|  | ||||
|     //if (d_flag_frame_sync == true and d_nav.flag_TOW_set==true and d_nav.flag_CRC_test == true) | ||||
|     // if (d_flag_frame_sync == true and d_nav.flag_TOW_set==true and d_nav.flag_CRC_test == true) | ||||
|  | ||||
|     // if(d_nav.flag_GGTO_1 == true  and  d_nav.flag_GGTO_2 == true and  d_nav.flag_GGTO_3 == true and  d_nav.flag_GGTO_4 == true) //all GGTO parameters arrived | ||||
|     // if(d_nav.flag_GGTO_1 == true  and  d_nav.flag_GGTO_2 == true and  d_nav.flag_GGTO_3 == true and  d_nav.flag_GGTO_4 == true) // all GGTO parameters arrived | ||||
|     //     { | ||||
|     //         delta_t = d_nav.A_0G_10 + d_nav.A_1G_10 * (d_TOW_at_current_symbol - d_nav.t_0G_10 + 604800.0 * (fmod((d_nav.WN_0 - d_nav.WN_0G_10), 64))); | ||||
|     //     } | ||||
| @@ -414,8 +414,8 @@ int glonass_l2_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|  | ||||
|     current_symbol.PRN = this->d_satellite.get_PRN(); | ||||
|     current_symbol.TOW_at_current_symbol_ms = round(d_TOW_at_current_symbol * 1000.0); | ||||
|     //todo: glonass time to gps time should be done in observables block | ||||
|     //current_symbol.TOW_at_current_symbol_s -= delta_t; | ||||
|     // todo: glonass time to gps time should be done in observables block | ||||
|     // current_symbol.TOW_at_current_symbol_ms -= static_cast<unsigned int>(delta_t) * 1000; | ||||
|  | ||||
|     if (d_dump == true) | ||||
|         { | ||||
| @@ -442,7 +442,7 @@ int glonass_l2_ca_telemetry_decoder_cc::general_work(int noutput_items __attribu | ||||
|         { | ||||
|             d_symbol_history.pop_front(); | ||||
|         } | ||||
|     //3. Make the output (copy the object contents to the GNURadio reserved memory) | ||||
|     // 3. Make the output (copy the object contents to the GNURadio reserved memory) | ||||
|     *out[0] = current_symbol; | ||||
|  | ||||
|     return 1; | ||||
|   | ||||
| @@ -255,7 +255,6 @@ int StaticPositionSystemTest::configure_receiver() | ||||
|             const float band1_error = 1.0; | ||||
|             const float band2_error = 1.0; | ||||
|             const int grid_density = 16; | ||||
|             const int decimation_factor = 1; | ||||
|  | ||||
|             const float zero = 0.0; | ||||
|             const int number_of_channels = 8; | ||||
|   | ||||
| @@ -79,7 +79,7 @@ else | ||||
|     %         { | ||||
|     %             tmp_double = current_gnss_synchro[i].RX_time; | ||||
|     %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|     %             tmp_double = current_gnss_synchro[i].TOW_at_current_symbol_s; | ||||
|     %             tmp_double = current_gnss_synchro[i].TOW_at_current_symbol_ms; | ||||
|     %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|     %             tmp_double = current_gnss_synchro[i].Carrier_Doppler_hz; | ||||
|     %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Carles Fernandez
					Carles Fernandez