mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-11-04 09:13:05 +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:
		@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -31,3 +31,4 @@ include_directories(
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
    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);
 | 
			
		||||
//
 | 
			
		||||
//    		// get ionospheric parameters (if available)
 | 
			
		||||
//    		if (d_nav.flag_iono_valid==true)
 | 
			
		||||
//    		{
 | 
			
		||||
//                    // Send the procesed satellite ephemeris packet
 | 
			
		||||
//                    d_nav_queue->push(d_nav);
 | 
			
		||||
//    			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);
 | 
			
		||||
//
 | 
			
		||||
//    		}
 | 
			
		||||
//        }
 | 
			
		||||
    d_nav.satellite_validation();
 | 
			
		||||
    		// 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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user