mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-15 04:30:33 +00:00
Improving GPS L1 CA telemetry decoder reliability
This commit is contained in:
parent
83413f2eaf
commit
81fc5adcd7
@ -259,41 +259,48 @@ bool gps_l1_ca_telemetry_decoder_cc::decode_subframe()
|
|||||||
if (CRC_ok)
|
if (CRC_ok)
|
||||||
{
|
{
|
||||||
int subframe_ID = d_nav.subframe_decoder(subframe); //decode the subframe
|
int subframe_ID = d_nav.subframe_decoder(subframe); //decode the subframe
|
||||||
std::cout << "New GPS NAV message received in channel " << this->d_channel << ": "
|
if (subframe_ID > 0 and subframe_ID < 6)
|
||||||
<< "subframe "
|
|
||||||
<< subframe_ID << " from satellite "
|
|
||||||
<< Gnss_Satellite(std::string("GPS"), d_nav.i_satellite_PRN) << std::endl;
|
|
||||||
|
|
||||||
switch (subframe_ID)
|
|
||||||
{
|
{
|
||||||
case 3: //we have a new set of ephemeris data for the current SV
|
std::cout << "New GPS NAV message received in channel " << this->d_channel << ": "
|
||||||
if (d_nav.satellite_validation() == true)
|
<< "subframe "
|
||||||
|
<< subframe_ID << " from satellite "
|
||||||
|
<< Gnss_Satellite(std::string("GPS"), d_nav.i_satellite_PRN) << std::endl;
|
||||||
|
|
||||||
|
switch (subframe_ID)
|
||||||
{
|
{
|
||||||
// get ephemeris object for this SV (mandatory)
|
case 3: //we have a new set of ephemeris data for the current SV
|
||||||
std::shared_ptr<Gps_Ephemeris> tmp_obj = std::make_shared<Gps_Ephemeris>(d_nav.get_ephemeris());
|
if (d_nav.satellite_validation() == true)
|
||||||
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
|
{
|
||||||
|
// get ephemeris object for this SV (mandatory)
|
||||||
|
std::shared_ptr<Gps_Ephemeris> tmp_obj = std::make_shared<Gps_Ephemeris>(d_nav.get_ephemeris());
|
||||||
|
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4: // Possible IONOSPHERE and UTC model update (page 18)
|
||||||
|
if (d_nav.flag_iono_valid == true)
|
||||||
|
{
|
||||||
|
std::shared_ptr<Gps_Iono> tmp_obj = std::make_shared<Gps_Iono>(d_nav.get_iono());
|
||||||
|
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
|
||||||
|
}
|
||||||
|
if (d_nav.flag_utc_model_valid == true)
|
||||||
|
{
|
||||||
|
std::shared_ptr<Gps_Utc_Model> tmp_obj = std::make_shared<Gps_Utc_Model>(d_nav.get_utc_model());
|
||||||
|
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
// get almanac (if available)
|
||||||
|
//TODO: implement almanac reader in navigation_message
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
d_flag_new_tow_available = true;
|
||||||
case 4: // Possible IONOSPHERE and UTC model update (page 18)
|
}
|
||||||
if (d_nav.flag_iono_valid == true)
|
else
|
||||||
{
|
{
|
||||||
std::shared_ptr<Gps_Iono> tmp_obj = std::make_shared<Gps_Iono>(d_nav.get_iono());
|
return false;
|
||||||
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
|
|
||||||
}
|
|
||||||
if (d_nav.flag_utc_model_valid == true)
|
|
||||||
{
|
|
||||||
std::shared_ptr<Gps_Utc_Model> tmp_obj = std::make_shared<Gps_Utc_Model>(d_nav.get_utc_model());
|
|
||||||
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
// get almanac (if available)
|
|
||||||
//TODO: implement almanac reader in navigation_message
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
d_flag_new_tow_available = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return subframe_synchro_confirmation;
|
return subframe_synchro_confirmation;
|
||||||
@ -419,7 +426,7 @@ int gps_l1_ca_telemetry_decoder_cc::general_work(int noutput_items __attribute__
|
|||||||
//2. Add the telemetry decoder information
|
//2. Add the telemetry decoder information
|
||||||
if (this->d_flag_preamble == true and d_flag_new_tow_available == true)
|
if (this->d_flag_preamble == true and d_flag_new_tow_available == true)
|
||||||
{
|
{
|
||||||
d_TOW_at_current_symbol_ms = static_cast<unsigned int>(d_nav.d_TOW) * 1000 + GPS_L1_CA_CODE_PERIOD_MS + GPS_CA_PREAMBLE_DURATION_MS;
|
d_TOW_at_current_symbol_ms = static_cast<unsigned int>(d_nav.d_TOW) * 1000 + GPS_CA_PREAMBLE_DURATION_MS;
|
||||||
d_TOW_at_Preamble_ms = d_TOW_at_current_symbol_ms;
|
d_TOW_at_Preamble_ms = d_TOW_at_current_symbol_ms;
|
||||||
flag_TOW_set = true;
|
flag_TOW_set = true;
|
||||||
d_flag_new_tow_available = false;
|
d_flag_new_tow_available = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user