mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-02-11 16:40:09 +00:00
Thowards A-GNSS-SDR: New classes to store GPS SV orbital, clock, and ionosphere parameters. Work in progress...
git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@342 64b25241-fba3-4117-9849-534c7e92360d
This commit is contained in:
parent
0c5b294e7d
commit
175a143c61
@ -34,12 +34,20 @@
|
||||
#include "configuration_interface.h"
|
||||
#include "gps_l1_ca_telemetry_decoder_cc.h"
|
||||
#include <gnuradio/gr_io_signature.h>
|
||||
//#include <gnuradio/gr_stream_to_vector.h>
|
||||
//#include <gnuradio/gr_vector_to_stream.h>
|
||||
#include <glog/log_severity.h>
|
||||
#include <glog/logging.h>
|
||||
|
||||
#include "gps_ephemeris.h"
|
||||
#include "gps_almanac.h"
|
||||
#include "gps_iono.h"
|
||||
#include "gps_utc_model.h"
|
||||
|
||||
extern concurrent_queue<Gps_Navigation_Message> global_gps_nav_msg_queue;
|
||||
extern concurrent_queue<Gps_Ephemeris> global_gps_ephemeris_queue;
|
||||
extern concurrent_queue<Gps_Iono> global_gps_iono_queue;
|
||||
extern concurrent_queue<Gps_Utc_Model> global_gps_utc_model_queue;
|
||||
extern concurrent_queue<Gps_Almanac> global_gps_almanac_queue;
|
||||
|
||||
|
||||
using google::LogMessage;
|
||||
|
||||
@ -67,6 +75,10 @@ GpsL1CaTelemetryDecoder::GpsL1CaTelemetryDecoder(ConfigurationInterface* configu
|
||||
DLOG(INFO) << "telemetry_decoder(" << telemetry_decoder_->unique_id() << ")";
|
||||
// set the navigation msg queue;
|
||||
telemetry_decoder_->set_navigation_queue(&global_gps_nav_msg_queue);
|
||||
telemetry_decoder_->set_ephemeris_queue(&global_gps_ephemeris_queue);
|
||||
telemetry_decoder_->set_iono_queue(&global_gps_iono_queue);
|
||||
telemetry_decoder_->set_almanac_queue(&global_gps_almanac_queue);
|
||||
telemetry_decoder_->set_utc_model_queue(&global_gps_utc_model_queue);
|
||||
DLOG(INFO) << "global navigation message queue assigned to telemetry_decoder ("<< telemetry_decoder_->unique_id() << ")";
|
||||
}
|
||||
|
||||
|
@ -35,8 +35,10 @@
|
||||
|
||||
#include "telemetry_decoder_interface.h"
|
||||
#include "gps_l1_ca_telemetry_decoder_cc.h"
|
||||
|
||||
#include <gnuradio/gr_msg_queue.h>
|
||||
|
||||
|
||||
class ConfigurationInterface;
|
||||
|
||||
/*!
|
||||
|
@ -66,6 +66,11 @@ public:
|
||||
* \brief Set the navigation queue
|
||||
*/
|
||||
void set_navigation_queue(concurrent_queue<Gps_Navigation_Message> *nav_queue){d_GPS_FSM.d_nav_queue=nav_queue;}
|
||||
void set_ephemeris_queue(concurrent_queue<Gps_Ephemeris> *ephemeris_queue){d_GPS_FSM.d_ephemeris_queue=ephemeris_queue;}
|
||||
void set_iono_queue(concurrent_queue<Gps_Iono> *iono_queue){d_GPS_FSM.d_iono_queue=iono_queue;}
|
||||
void set_almanac_queue(concurrent_queue<Gps_Almanac> *almanac_queue){d_GPS_FSM.d_almanac_queue=almanac_queue;}
|
||||
void set_utc_model_queue(concurrent_queue<Gps_Utc_Model> *utc_model_queue){d_GPS_FSM.d_utc_model_queue=utc_model_queue;}
|
||||
|
||||
int general_work (int noutput_items, gr_vector_int &ninput_items,
|
||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||
void forecast (int noutput_items, gr_vector_int &ninput_items_required);
|
||||
|
@ -30,4 +30,5 @@ include_directories(
|
||||
${GNURADIO_GRUEL_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
add_library(telemetry_decoder_lib ${TELEMETRY_DECODER_LIB_SOURCES})
|
||||
add_library(telemetry_decoder_lib ${TELEMETRY_DECODER_LIB_SOURCES})
|
||||
target_link_libraries(telemetry_decoder_lib gnss_system_parameters)
|
@ -250,7 +250,6 @@ void GpsL1CaSubframeFsm::gps_subframe_to_nav_msg()
|
||||
int subframe_ID;
|
||||
// NEW GPS SUBFRAME HAS ARRIVED!
|
||||
subframe_ID = d_nav.subframe_decoder(this->d_subframe); //decode the subframe
|
||||
//std::cout<<"Detected PRN: " << d_nav.i_satellite_PRN << " for satellite " <<
|
||||
std::cout << "NAVIGATION FSM: received subframe " << subframe_ID << " for satellite " << Gnss_Satellite(std::string("GPS"), i_satellite_PRN) << std::endl;
|
||||
d_nav.i_satellite_PRN = i_satellite_PRN;
|
||||
d_nav.i_channel_ID = i_channel_ID;
|
||||
@ -259,31 +258,39 @@ void GpsL1CaSubframeFsm::gps_subframe_to_nav_msg()
|
||||
/*!
|
||||
* \todo change satellite validation to subframe 5 because it will have a complete set of ephemeris parameters
|
||||
*/
|
||||
// if (subframe_ID == 3)
|
||||
// { // if the subframe is the 5th, then
|
||||
// if (d_nav.satellite_validation()) // if all the satellite ephemeris parameters are good, then
|
||||
// {
|
||||
// // Send the procesed satellite ephemeris packet
|
||||
// d_nav_queue->push(d_nav);
|
||||
if (d_nav.satellite_validation()==true)
|
||||
{
|
||||
// get ephemeris object for this SV (mandatory)
|
||||
// Gps_Ephemeris ephemeris=d_nav.get_ephemeris();
|
||||
// d_ephemeris_queue->push(ephemeris);
|
||||
//
|
||||
// }
|
||||
// }
|
||||
d_nav.satellite_validation();
|
||||
d_nav_queue->push(d_nav);
|
||||
|
||||
// // get ionospheric parameters (if available)
|
||||
// if (d_nav.flag_iono_valid==true)
|
||||
// {
|
||||
// Gps_Iono iono=d_nav.get_iono();
|
||||
// d_iono_queue->push(iono);
|
||||
// }
|
||||
//
|
||||
// // get almanac (if available)
|
||||
// //TODO: implement almanac reader in navigation_message
|
||||
//
|
||||
// // get UTC model
|
||||
// if (d_nav.flag_utc_model_valid==true)
|
||||
// {
|
||||
// Gps_Utc_Model utc_model=d_nav.get_utc_model();
|
||||
// d_utc_model_queue->push(utc_model);
|
||||
//
|
||||
// }
|
||||
// old nav queue
|
||||
d_nav_queue->push(d_nav);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void GpsL1CaSubframeFsm::Event_gps_word_valid()
|
||||
{
|
||||
this->process_event(Ev_gps_word_valid());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void GpsL1CaSubframeFsm::Event_gps_word_invalid()
|
||||
{
|
||||
this->process_event(Ev_gps_word_invalid());
|
||||
|
@ -46,6 +46,10 @@
|
||||
#include <cstring>
|
||||
#include "GPS_L1_CA.h"
|
||||
#include "gps_navigation_message.h"
|
||||
#include "gps_ephemeris.h"
|
||||
#include "gps_iono.h"
|
||||
#include "gps_almanac.h"
|
||||
#include "gps_utc_model.h"
|
||||
|
||||
namespace sc = boost::statechart;
|
||||
namespace mpl = boost::mpl;
|
||||
@ -71,10 +75,25 @@ public:
|
||||
unsigned int i_satellite_PRN;
|
||||
|
||||
// ephemeris queue
|
||||
concurrent_queue<Gps_Ephemeris> *d_ephemeris_queue;
|
||||
// ionospheric parameters queue
|
||||
concurrent_queue<Gps_Iono> *d_iono_queue;
|
||||
// UTC model parameters queue
|
||||
concurrent_queue<Gps_Utc_Model> *d_utc_model_queue;
|
||||
// Almanac queue
|
||||
concurrent_queue<Gps_Almanac> *d_almanac_queue;
|
||||
// Old navigation message queue
|
||||
concurrent_queue<Gps_Navigation_Message> *d_nav_queue;
|
||||
// navigation message class
|
||||
Gps_Navigation_Message d_nav;
|
||||
|
||||
// GPS SV and System parameters
|
||||
Gps_Ephemeris ephemeris;
|
||||
Gps_Almanac almanac;
|
||||
Gps_Utc_Model utc_model;
|
||||
Gps_Iono iono;
|
||||
|
||||
|
||||
char d_subframe[GPS_SUBFRAME_LENGTH];
|
||||
char d_GPS_frame_4bytes[GPS_WORD_LENGTH];
|
||||
|
||||
|
@ -20,6 +20,10 @@ set(SYSTEM_PARAMETERS_SOURCES
|
||||
gnss_satellite.cc
|
||||
gnss_signal.cc
|
||||
gps_navigation_message.cc
|
||||
gps_ephemeris.cc
|
||||
gps_iono.cc
|
||||
gps_almanac.cc
|
||||
gps_utc_model.cc
|
||||
)
|
||||
|
||||
include_directories(
|
||||
|
39
src/core/system_parameters/gps_almanac.cc
Normal file
39
src/core/system_parameters/gps_almanac.cc
Normal file
@ -0,0 +1,39 @@
|
||||
/*!
|
||||
* \file gps_almanac.cc
|
||||
* \brief Interface of a GPS ALMANAC storage
|
||||
*
|
||||
* See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II
|
||||
* \author Javier Arribas, 2013. jarribas(at)cttc.es
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*
|
||||
* Copyright (C) 2010-2013 (see AUTHORS file for a list of contributors)
|
||||
*
|
||||
* GNSS-SDR is a software defined Global Navigation
|
||||
* Satellite Systems receiver
|
||||
*
|
||||
* This file is part of GNSS-SDR.
|
||||
*
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "gps_almanac.h"
|
||||
|
||||
Gps_Almanac::Gps_Almanac()
|
||||
{
|
||||
|
||||
}
|
||||
|
68
src/core/system_parameters/gps_almanac.h
Normal file
68
src/core/system_parameters/gps_almanac.h
Normal file
@ -0,0 +1,68 @@
|
||||
/*!
|
||||
* \file gps_almanac.h
|
||||
* \brief Interface of a GPS ALMANAC storage
|
||||
* \author Javier Arribas, 2013. jarribas(at)cttc.es
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*
|
||||
* Copyright (C) 2010-2013 (see AUTHORS file for a list of contributors)
|
||||
*
|
||||
* GNSS-SDR is a software defined Global Navigation
|
||||
* Satellite Systems receiver
|
||||
*
|
||||
* This file is part of GNSS-SDR.
|
||||
*
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GNSS_SDR_GPS_ALMANAC_H_
|
||||
#define GNSS_SDR_GPS_ALMANAC_H_
|
||||
|
||||
#include "GPS_L1_CA.h"
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This class is a storage for the GPS SV ALMANAC data as described in IS-GPS-200E
|
||||
*
|
||||
* See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II
|
||||
*/
|
||||
class Gps_Almanac
|
||||
{
|
||||
private:
|
||||
|
||||
public:
|
||||
|
||||
unsigned int i_satellite_PRN; // SV PRN NUMBER
|
||||
double d_Delta_i;
|
||||
double d_Toa; //!< Almanac data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200E) [s]
|
||||
double d_M_0; //!< Mean Anomaly at Reference Time [semi-circles]
|
||||
double d_e_eccentricity; //!< Eccentricity [dimensionless]
|
||||
double d_sqrt_A; //!< Square Root of the Semi-Major Axis [sqrt(m)]
|
||||
double d_OMEGA0; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles]
|
||||
double d_OMEGA; //!< Argument of Perigee [semi-cicles]
|
||||
double d_OMEGA_DOT; //!< Rate of Right Ascension [semi-circles/s]
|
||||
int i_SV_health; // SV Health
|
||||
double d_A_f0; //!< Coefficient 0 of code phase offset model [s]
|
||||
double d_A_f1; //!< Coefficient 1 of code phase offset model [s/s]
|
||||
|
||||
/*!
|
||||
* Default constructor
|
||||
*/
|
||||
Gps_Almanac();
|
||||
};
|
||||
|
||||
#endif
|
39
src/core/system_parameters/gps_ephemeris.cc
Normal file
39
src/core/system_parameters/gps_ephemeris.cc
Normal file
@ -0,0 +1,39 @@
|
||||
/*!
|
||||
* \file gps_ephemeris.cc
|
||||
* \brief Interface of a GPS EPHEMERIS storage
|
||||
*
|
||||
* See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II
|
||||
* \author Javier Arribas, 2013. jarribas(at)cttc.es
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*
|
||||
* Copyright (C) 2010-2013 (see AUTHORS file for a list of contributors)
|
||||
*
|
||||
* GNSS-SDR is a software defined Global Navigation
|
||||
* Satellite Systems receiver
|
||||
*
|
||||
* This file is part of GNSS-SDR.
|
||||
*
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "gps_ephemeris.h"
|
||||
|
||||
Gps_Ephemeris::Gps_Ephemeris()
|
||||
{
|
||||
|
||||
}
|
||||
|
113
src/core/system_parameters/gps_ephemeris.h
Normal file
113
src/core/system_parameters/gps_ephemeris.h
Normal file
@ -0,0 +1,113 @@
|
||||
/*!
|
||||
* \file gps_navigation_message.h
|
||||
* \brief Interface of a GPS EPHEMERIS storage
|
||||
* \author Javier Arribas, 2013. jarribas(at)cttc.es
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*
|
||||
* Copyright (C) 2010-2013 (see AUTHORS file for a list of contributors)
|
||||
*
|
||||
* GNSS-SDR is a software defined Global Navigation
|
||||
* Satellite Systems receiver
|
||||
*
|
||||
* This file is part of GNSS-SDR.
|
||||
*
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GNSS_SDR_GPS_EPHEMERIS_H_
|
||||
#define GNSS_SDR_GPS_EPHEMERIS_H_
|
||||
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include "boost/assign.hpp"
|
||||
|
||||
#include "GPS_L1_CA.h"
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This class is a storage for the GPS SV ephemeris data as described in IS-GPS-200E
|
||||
*
|
||||
* See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II
|
||||
*/
|
||||
class Gps_Ephemeris
|
||||
{
|
||||
private:
|
||||
|
||||
public:
|
||||
|
||||
unsigned int i_satellite_PRN; // SV PRN NUMBER
|
||||
double d_TOW; //!< Time of GPS Week of the ephemeris set (taken from subframes TOW) [s]
|
||||
double d_Crs; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m]
|
||||
double d_Delta_n; //!< Mean Motion Difference From Computed Value [semi-circles/s]
|
||||
double d_M_0; //!< Mean Anomaly at Reference Time [semi-circles]
|
||||
double d_Cuc; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad]
|
||||
double d_e_eccentricity; //!< Eccentricity [dimensionless]
|
||||
double d_Cus; //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad]
|
||||
double d_sqrt_A; //!< Square Root of the Semi-Major Axis [sqrt(m)]
|
||||
double d_Toe; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200E) [s]
|
||||
double d_Toc; //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200E) [s]
|
||||
double d_Cic; //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad]
|
||||
double d_OMEGA0; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles]
|
||||
double d_Cis; //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad]
|
||||
double d_i_0; //!< Inclination Angle at Reference Time [semi-circles]
|
||||
double d_Crc; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m]
|
||||
double d_OMEGA; //!< Argument of Perigee [semi-cicles]
|
||||
double d_OMEGA_DOT; //!< Rate of Right Ascension [semi-circles/s]
|
||||
double d_IDOT; //!< Rate of Inclination Angle [semi-circles/s]
|
||||
int i_code_on_L2; //!< If 1, P code ON in L2; if 2, C/A code ON in L2;
|
||||
int i_GPS_week; //!< GPS week number, aka WN [week]
|
||||
bool b_L2_P_data_flag; //!< When true, indicates that the NAV data stream was commanded OFF on the P-code of the L2 channel
|
||||
int i_SV_accuracy; //!< User Range Accuracy (URA) index of the SV (reference paragraph 6.2.1) for the standard positioning service user (Ref 20.3.3.3.1.3 IS-GPS-200E)
|
||||
int i_SV_health;
|
||||
double d_TGD; //!< Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s]
|
||||
double d_IODC; //!< Issue of Data, Clock
|
||||
int i_AODO; //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s]
|
||||
|
||||
bool b_fit_interval_flag;//!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours.
|
||||
double d_spare1;
|
||||
double d_spare2;
|
||||
|
||||
double d_A_f0; //!< Coefficient 0 of code phase offset model [s]
|
||||
double d_A_f1; //!< Coefficient 1 of code phase offset model [s/s]
|
||||
double d_A_f2; //!< Coefficient 2 of code phase offset model [s/s^2]
|
||||
|
||||
|
||||
// Flags
|
||||
|
||||
/*! \brief If true, enhanced level of integrity assurance.
|
||||
*
|
||||
* If false, indicates that the conveying signal is provided with the legacy level of integrity assurance.
|
||||
* That is, the probability that the instantaneous URE of the conveying signal exceeds 4.42 times the upper bound
|
||||
* value of the current broadcast URA index, for more than 5.2 seconds, without an accompanying alert, is less
|
||||
* than 1E-5 per hour. If true, indicates that the conveying signal is provided with an enhanced level of
|
||||
* integrity assurance. That is, the probability that the instantaneous URE of the conveying signal exceeds 5.73
|
||||
* times the upper bound value of the current broadcast URA index, for more than 5.2 seconds, without an
|
||||
* accompanying alert, is less than 1E-8 per hour.
|
||||
*/
|
||||
bool b_integrity_status_flag;
|
||||
bool b_alert_flag; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk.
|
||||
bool b_antispoofing_flag; //!< If true, the AntiSpoofing mode is ON in that SV
|
||||
|
||||
|
||||
/*!
|
||||
* Default constructor
|
||||
*/
|
||||
Gps_Ephemeris();
|
||||
};
|
||||
|
||||
#endif
|
40
src/core/system_parameters/gps_iono.cc
Normal file
40
src/core/system_parameters/gps_iono.cc
Normal file
@ -0,0 +1,40 @@
|
||||
/*!
|
||||
* \file gps_iono.cc
|
||||
* \brief Interface of a GPS IONOSPHERIC MODEL storage
|
||||
*
|
||||
* See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II
|
||||
* \author Javier Arribas, 2013. jarribas(at)cttc.es
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*
|
||||
* Copyright (C) 2010-2013 (see AUTHORS file for a list of contributors)
|
||||
*
|
||||
* GNSS-SDR is a software defined Global Navigation
|
||||
* Satellite Systems receiver
|
||||
*
|
||||
* This file is part of GNSS-SDR.
|
||||
*
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "gps_iono.h"
|
||||
|
||||
Gps_Iono::Gps_Iono()
|
||||
{
|
||||
valid=false;
|
||||
|
||||
}
|
||||
|
66
src/core/system_parameters/gps_iono.h
Normal file
66
src/core/system_parameters/gps_iono.h
Normal file
@ -0,0 +1,66 @@
|
||||
/*!
|
||||
* \file gps_iono.h
|
||||
* \brief Interface of a GPS IONOSPHERIC MODEL storage
|
||||
* \author Javier Arribas, 2013. jarribas(at)cttc.es
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*
|
||||
* Copyright (C) 2010-2013 (see AUTHORS file for a list of contributors)
|
||||
*
|
||||
* GNSS-SDR is a software defined Global Navigation
|
||||
* Satellite Systems receiver
|
||||
*
|
||||
* This file is part of GNSS-SDR.
|
||||
*
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GNSS_SDR_GPS_IONO_H_
|
||||
#define GNSS_SDR_GPS_IONO_H_
|
||||
|
||||
#include "GPS_L1_CA.h"
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This class is a storage for the GPS IONOSPHERIC data as described in IS-GPS-200E
|
||||
*
|
||||
* See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II
|
||||
*/
|
||||
class Gps_Iono
|
||||
{
|
||||
private:
|
||||
|
||||
public:
|
||||
|
||||
// valid flag
|
||||
bool valid;
|
||||
// Ionospheric parameters
|
||||
double d_alpha0; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s]
|
||||
double d_alpha1; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle]
|
||||
double d_alpha2; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2]
|
||||
double d_alpha3; //!< Coefficient 3 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^3]
|
||||
double d_beta0; //!< Coefficient 0 of a cubic equation representing the period of the model [s]
|
||||
double d_beta1; //!< Coefficient 1 of a cubic equation representing the period of the model [s/semi-circle]
|
||||
double d_beta2; //!< Coefficient 2 of a cubic equation representing the period of the model [s(semi-circle)^2]
|
||||
double d_beta3; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3]
|
||||
/*!
|
||||
* Default constructor
|
||||
*/
|
||||
Gps_Iono();
|
||||
};
|
||||
|
||||
#endif
|
@ -105,6 +105,8 @@ void Gps_Navigation_Message::reset()
|
||||
b_antispoofing_flag = false;
|
||||
|
||||
// Ionosphere and UTC
|
||||
flag_iono_valid=false;
|
||||
flag_utc_model_valid=true;
|
||||
d_alpha0 = 0;
|
||||
d_alpha1 = 0;
|
||||
d_alpha2 = 0;
|
||||
@ -591,6 +593,8 @@ int Gps_Navigation_Message::subframe_decoder(char *subframe)
|
||||
i_WN_LSF = (int)read_navigation_unsigned(subframe_bits, WN_LSF);
|
||||
i_DN = (int)read_navigation_unsigned(subframe_bits, DN);; // Right-justified ?
|
||||
d_DeltaT_LSF = (double)read_navigation_signed(subframe_bits, DELTAT_LSF);
|
||||
flag_iono_valid=true;
|
||||
flag_utc_model_valid=true;
|
||||
}
|
||||
|
||||
if (SV_page == 25)
|
||||
@ -731,8 +735,82 @@ double Gps_Navigation_Message::utc_time(double gpstime_corrected)
|
||||
|
||||
|
||||
|
||||
Gps_Ephemeris Gps_Navigation_Message::get_ephemeris()
|
||||
{
|
||||
Gps_Ephemeris ephemeris;
|
||||
ephemeris.i_satellite_PRN=i_satellite_PRN;
|
||||
ephemeris.d_TOW=d_TOW;
|
||||
ephemeris.d_Crs=d_Crs;
|
||||
ephemeris.d_Delta_n=d_Delta_n;
|
||||
ephemeris.d_M_0=d_M_0;
|
||||
ephemeris.d_Cuc=d_Cuc;
|
||||
ephemeris.d_e_eccentricity=d_e_eccentricity;
|
||||
ephemeris.d_Cus=d_Cus;
|
||||
ephemeris.d_sqrt_A=d_sqrt_A;
|
||||
ephemeris.d_Toe=d_Toe;
|
||||
ephemeris.d_Toc=d_Toc;
|
||||
ephemeris.d_Cic=d_Cic;
|
||||
ephemeris.d_OMEGA0=d_OMEGA0;
|
||||
ephemeris.d_Cis=d_Cis;
|
||||
ephemeris.d_i_0=d_i_0;
|
||||
ephemeris.d_Crc=d_Crc;
|
||||
ephemeris.d_OMEGA=d_OMEGA;
|
||||
ephemeris.d_OMEGA_DOT=d_OMEGA_DOT;
|
||||
ephemeris.d_IDOT=d_IDOT;
|
||||
ephemeris.i_code_on_L2=i_code_on_L2;
|
||||
ephemeris.i_GPS_week=i_GPS_week;
|
||||
ephemeris.b_L2_P_data_flag=b_L2_P_data_flag;
|
||||
ephemeris.i_SV_accuracy=i_SV_accuracy;
|
||||
ephemeris.i_SV_health=i_SV_health;
|
||||
ephemeris.d_TGD=d_TGD;
|
||||
ephemeris.d_IODC=d_IODC;
|
||||
ephemeris.i_AODO=i_AODO;
|
||||
ephemeris.b_fit_interval_flag=b_fit_interval_flag;
|
||||
ephemeris.d_spare1=d_spare1;
|
||||
ephemeris.d_spare2=d_spare2;
|
||||
ephemeris.d_A_f0=d_A_f0;
|
||||
ephemeris.d_A_f1=d_A_f1;
|
||||
ephemeris.d_A_f2=d_A_f2;
|
||||
ephemeris.b_integrity_status_flag=b_integrity_status_flag;
|
||||
ephemeris.b_alert_flag=b_alert_flag;
|
||||
ephemeris.b_antispoofing_flag=b_antispoofing_flag;
|
||||
|
||||
return ephemeris;
|
||||
}
|
||||
|
||||
Gps_Iono Gps_Navigation_Message::get_iono()
|
||||
{
|
||||
Gps_Iono iono;
|
||||
iono.d_alpha0=d_alpha0;
|
||||
iono.d_alpha1=d_alpha1;
|
||||
iono.d_alpha2=d_alpha2;
|
||||
iono.d_alpha3=d_alpha3;
|
||||
iono.d_beta0=d_beta0;
|
||||
iono.d_beta1=d_beta1;
|
||||
iono.d_beta2=d_beta2;
|
||||
iono.d_beta3=d_beta3;
|
||||
iono.valid=flag_iono_valid;
|
||||
// TODO: Clear flag_utc_model_valid in order to not re-send the same information to the ionospheric parameters queue
|
||||
return iono;
|
||||
}
|
||||
|
||||
Gps_Utc_Model Gps_Navigation_Message::get_utc_model()
|
||||
{
|
||||
Gps_Utc_Model utc_model;
|
||||
|
||||
utc_model.valid=flag_utc_model_valid;
|
||||
// UTC parameters
|
||||
utc_model.d_A1=d_A1;
|
||||
utc_model.d_A0=d_A0;
|
||||
utc_model.d_t_OT=d_t_OT;
|
||||
utc_model.i_WN_T=i_WN_T;
|
||||
utc_model.d_DeltaT_LS=d_DeltaT_LS;
|
||||
utc_model.i_WN_LSF=i_WN_LSF;
|
||||
utc_model.i_DN=i_DN;
|
||||
utc_model.d_DeltaT_LSF=d_DeltaT_LSF;
|
||||
// TODO: Clear flag_utc_model_valid in order to not re-send the same information to the ionospheric parameters queue
|
||||
return utc_model;
|
||||
}
|
||||
bool Gps_Navigation_Message::satellite_validation()
|
||||
{
|
||||
bool flag_data_valid = false;
|
||||
|
@ -41,6 +41,11 @@
|
||||
#include "boost/assign.hpp"
|
||||
#include <math.h>
|
||||
#include "GPS_L1_CA.h"
|
||||
#include "gps_ephemeris.h"
|
||||
#include "gps_iono.h"
|
||||
#include "gps_almanac.h"
|
||||
#include "gps_utc_model.h"
|
||||
|
||||
|
||||
|
||||
/*!
|
||||
@ -159,6 +164,7 @@ public:
|
||||
double d_subframe_timestamp_ms; //[ms]
|
||||
|
||||
// Ionospheric parameters
|
||||
bool flag_iono_valid; //!< If set, it indicates that the ionospheric parameters are filled (page 18 has arrived and decoded)
|
||||
double d_alpha0; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s]
|
||||
double d_alpha1; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle]
|
||||
double d_alpha2; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2]
|
||||
@ -169,6 +175,7 @@ public:
|
||||
double d_beta3; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3]
|
||||
|
||||
// UTC parameters
|
||||
bool flag_utc_model_valid; //!< If set, it indicates that the UTC model parameters are filled
|
||||
double d_A1; //!< 1st order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200E) [s/s]
|
||||
double d_A0; //!< Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200E) [s]
|
||||
double d_t_OT; //!< Reference time for UTC data (reference 20.3.4.5 and 20.3.3.5.2.4 IS-GPS-200E) [s]
|
||||
@ -186,6 +193,22 @@ public:
|
||||
// public functions
|
||||
void reset();
|
||||
|
||||
/*!
|
||||
* \brief Obtain a GPS SV Ephemeris class filled with current SV data
|
||||
*/
|
||||
Gps_Ephemeris get_ephemeris();
|
||||
|
||||
/*!
|
||||
* \brief Obtain a GPS ionospheric correction parameters class filled with current SV data
|
||||
*/
|
||||
Gps_Iono get_iono();
|
||||
|
||||
/*!
|
||||
* \brief Obtain a GPS UTC model parameters class filled with current SV data
|
||||
*/
|
||||
Gps_Utc_Model get_utc_model();
|
||||
|
||||
|
||||
/*!
|
||||
* \brief Decodes the GPS NAV message
|
||||
*/
|
||||
|
38
src/core/system_parameters/gps_utc_model.cc
Normal file
38
src/core/system_parameters/gps_utc_model.cc
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* \file gps_utc_model.h
|
||||
* \brief Interface of a GPS UTC MODEL storage
|
||||
* \author Javier Arribas, 2013. jarribas(at)cttc.es
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*
|
||||
* Copyright (C) 2010-2013 (see AUTHORS file for a list of contributors)
|
||||
*
|
||||
* GNSS-SDR is a software defined Global Navigation
|
||||
* Satellite Systems receiver
|
||||
*
|
||||
* This file is part of GNSS-SDR.
|
||||
*
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "gps_utc_model.h"
|
||||
|
||||
Gps_Utc_Model::Gps_Utc_Model()
|
||||
{
|
||||
valid=false;
|
||||
|
||||
}
|
||||
|
66
src/core/system_parameters/gps_utc_model.h
Normal file
66
src/core/system_parameters/gps_utc_model.h
Normal file
@ -0,0 +1,66 @@
|
||||
/*!
|
||||
* \file gps_utc_model.h
|
||||
* \brief Interface of a GPS UTC MODEL storage
|
||||
* \author Javier Arribas, 2013. jarribas(at)cttc.es
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*
|
||||
* Copyright (C) 2010-2013 (see AUTHORS file for a list of contributors)
|
||||
*
|
||||
* GNSS-SDR is a software defined Global Navigation
|
||||
* Satellite Systems receiver
|
||||
*
|
||||
* This file is part of GNSS-SDR.
|
||||
*
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
#ifndef GNSS_SDR_GPS_UTC_MODEL_H_
|
||||
#define GNSS_SDR_GPS_UTC_MODEL_H_
|
||||
|
||||
#include "GPS_L1_CA.h"
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This class is a storage for the GPS UTC MODEL data as described in IS-GPS-200E
|
||||
*
|
||||
* See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II
|
||||
*/
|
||||
class Gps_Utc_Model
|
||||
{
|
||||
private:
|
||||
|
||||
public:
|
||||
|
||||
bool valid;
|
||||
// UTC parameters
|
||||
double d_A1; //!< 1st order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200E) [s/s]
|
||||
double d_A0; //!< Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200E) [s]
|
||||
double d_t_OT; //!< Reference time for UTC data (reference 20.3.4.5 and 20.3.3.5.2.4 IS-GPS-200E) [s]
|
||||
int i_WN_T; //!< UTC reference week number [weeks]
|
||||
double d_DeltaT_LS; //!< delta time due to leap seconds [s]. Number of leap seconds since 6-Jan-1980 as transmitted by the GPS almanac.
|
||||
int i_WN_LSF; //!< Week number at the end of which the leap second becomes effective [weeks]
|
||||
int i_DN; //!< Day number (DN) at the end of which the leap second becomes effective [days]
|
||||
double d_DeltaT_LSF; //!< Scheduled future or recent past (relative to NAV message upload) value of the delta time due to leap seconds [s]
|
||||
|
||||
/*!
|
||||
* Default constructor
|
||||
*/
|
||||
Gps_Utc_Model();
|
||||
};
|
||||
|
||||
#endif
|
@ -45,6 +45,10 @@
|
||||
#include <boost/thread/thread.hpp>
|
||||
#include "concurrent_queue.h"
|
||||
#include "gps_navigation_message.h"
|
||||
#include "gps_ephemeris.h"
|
||||
#include "gps_almanac.h"
|
||||
#include "gps_iono.h"
|
||||
#include "gps_utc_model.h"
|
||||
#include <sys/time.h>
|
||||
#include <ctime>
|
||||
#include <memory>
|
||||
@ -62,6 +66,11 @@ DECLARE_string(log_dir);
|
||||
* to the Observables modules
|
||||
*/
|
||||
concurrent_queue<Gps_Navigation_Message> global_gps_nav_msg_queue;
|
||||
concurrent_queue<Gps_Ephemeris> global_gps_ephemeris_queue;
|
||||
concurrent_queue<Gps_Iono> global_gps_iono_queue;
|
||||
concurrent_queue<Gps_Utc_Model> global_gps_utc_model_queue;
|
||||
concurrent_queue<Gps_Almanac> global_gps_almanac_queue;
|
||||
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
|
@ -43,6 +43,10 @@
|
||||
#include "gps_navigation_message.h"
|
||||
|
||||
concurrent_queue<Gps_Navigation_Message> global_gps_nav_msg_queue;
|
||||
concurrent_queue<Gps_Ephemeris> global_gps_ephemeris_queue;
|
||||
concurrent_queue<Gps_Iono> global_gps_iono_queue;
|
||||
concurrent_queue<Gps_Utc_Model> global_gps_utc_model_queue;
|
||||
concurrent_queue<Gps_Almanac> global_gps_almanac_queue;
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
|
@ -70,6 +70,10 @@
|
||||
|
||||
|
||||
concurrent_queue<Gps_Navigation_Message> global_gps_nav_msg_queue;
|
||||
concurrent_queue<Gps_Ephemeris> global_gps_ephemeris_queue;
|
||||
concurrent_queue<Gps_Iono> global_gps_iono_queue;
|
||||
concurrent_queue<Gps_Utc_Model> global_gps_utc_model_queue;
|
||||
concurrent_queue<Gps_Almanac> global_gps_almanac_queue;
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
|
Loading…
x
Reference in New Issue
Block a user