- Major changes:
- The executable file and the default configuration file is now changed from "./install/mercurio" and "./conf/mercurio.conf" to "./install/gnss-sdr" and "./conf/gnss-sdr.conf", respectively.
- Configuration file structure changed to define in a single entry the internal sampling frequency (after the signal conditioner). NOTICE that this change affects the all the adapters (acquisition, tracking, telemetry_decoder, observables, and PVT). All the adapters are now modified to work with this feature.
- Moved several in-line GPS L1 CA parameters (a.k.a magic numbers..) to ./src/core/system_parameters/GPS_L1_CA.h definition file.
- Tracking blocks now uses DOUBLE values in their outputs.
- Observables and PVT now are separated. PVT and their associated libraries are moved to ./src/algorithms/PVT
- Temporarily disabled the RINEX output (I am working on that!)
- GNSS-SDR screen output now gives extended debug information of the receiver status and events. In the future, this output will be redirected to a log file.
- Bug fixes:
- FILE_SIGNAL_SOURCE now works correctly when the user configures GNSS-SDR to process the entire file.
- GPS_L1_CA_DLL_PLL now computes correctly the PRN start values.
- GPS_L1_CA_DLL_FLL_PLL now computes correctly the PRN start values.
- Several modifications in GPS_L1_CA_Telemetry_Decoder, GPS_L1_CA_Observables, and GPS_L1_CA_PVT modules to fix the GPS position computation.
- New features
- Tracking blocks perform a signal integrity check against NaN outliers before the correlation process.
- Tracking and PVT binary dump options are now documented and we provide MATLAB libraries and sample files to read it. Available in ./utils/matlab" and "./utils/matlab/libs"
- Observables output rate can be configured. This option enables the GPS L1 CA PVT computation at a maximum rate of 1ms.
- GPS_L1_CA_PVT now can perform a moving average Latitude, Longitude, and Altitude output for each of the Observables output. It is configurable using the configuration file.
- Added Google Earth compatible Keyhole Markup Language (KML) output writer class (./src/algorithms/PVT/libs/kml_printer.h and ./src/algorithms/PVT/libs/kml_printer.cc ). You can see the receiver position directly using Google Earth.
- We provide a master configuration file which includes an in-line documentation with all the new (and old) options. It can be found in ./conf/master.conf
git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@84 64b25241-fba3-4117-9849-534c7e92360d
2011-12-07 17:59:34 +00:00
/*!
* \ file gps_l1_ca_telemetry_decoder_cc . h
2011-12-28 21:36:45 +00:00
* \ brief Interface of a NAV message demodulator block based on
* Kay Borre book MATLAB - based GPS receiver
- Major changes:
- The executable file and the default configuration file is now changed from "./install/mercurio" and "./conf/mercurio.conf" to "./install/gnss-sdr" and "./conf/gnss-sdr.conf", respectively.
- Configuration file structure changed to define in a single entry the internal sampling frequency (after the signal conditioner). NOTICE that this change affects the all the adapters (acquisition, tracking, telemetry_decoder, observables, and PVT). All the adapters are now modified to work with this feature.
- Moved several in-line GPS L1 CA parameters (a.k.a magic numbers..) to ./src/core/system_parameters/GPS_L1_CA.h definition file.
- Tracking blocks now uses DOUBLE values in their outputs.
- Observables and PVT now are separated. PVT and their associated libraries are moved to ./src/algorithms/PVT
- Temporarily disabled the RINEX output (I am working on that!)
- GNSS-SDR screen output now gives extended debug information of the receiver status and events. In the future, this output will be redirected to a log file.
- Bug fixes:
- FILE_SIGNAL_SOURCE now works correctly when the user configures GNSS-SDR to process the entire file.
- GPS_L1_CA_DLL_PLL now computes correctly the PRN start values.
- GPS_L1_CA_DLL_FLL_PLL now computes correctly the PRN start values.
- Several modifications in GPS_L1_CA_Telemetry_Decoder, GPS_L1_CA_Observables, and GPS_L1_CA_PVT modules to fix the GPS position computation.
- New features
- Tracking blocks perform a signal integrity check against NaN outliers before the correlation process.
- Tracking and PVT binary dump options are now documented and we provide MATLAB libraries and sample files to read it. Available in ./utils/matlab" and "./utils/matlab/libs"
- Observables output rate can be configured. This option enables the GPS L1 CA PVT computation at a maximum rate of 1ms.
- GPS_L1_CA_PVT now can perform a moving average Latitude, Longitude, and Altitude output for each of the Observables output. It is configurable using the configuration file.
- Added Google Earth compatible Keyhole Markup Language (KML) output writer class (./src/algorithms/PVT/libs/kml_printer.h and ./src/algorithms/PVT/libs/kml_printer.cc ). You can see the receiver position directly using Google Earth.
- We provide a master configuration file which includes an in-line documentation with all the new (and old) options. It can be found in ./conf/master.conf
git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@84 64b25241-fba3-4117-9849-534c7e92360d
2011-12-07 17:59:34 +00:00
* \ author Javier Arribas , 2011. jarribas ( at ) cttc . es
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*
2015-01-08 18:49:59 +00:00
* Copyright ( C ) 2010 - 2015 ( see AUTHORS file for a list of contributors )
- Major changes:
- The executable file and the default configuration file is now changed from "./install/mercurio" and "./conf/mercurio.conf" to "./install/gnss-sdr" and "./conf/gnss-sdr.conf", respectively.
- Configuration file structure changed to define in a single entry the internal sampling frequency (after the signal conditioner). NOTICE that this change affects the all the adapters (acquisition, tracking, telemetry_decoder, observables, and PVT). All the adapters are now modified to work with this feature.
- Moved several in-line GPS L1 CA parameters (a.k.a magic numbers..) to ./src/core/system_parameters/GPS_L1_CA.h definition file.
- Tracking blocks now uses DOUBLE values in their outputs.
- Observables and PVT now are separated. PVT and their associated libraries are moved to ./src/algorithms/PVT
- Temporarily disabled the RINEX output (I am working on that!)
- GNSS-SDR screen output now gives extended debug information of the receiver status and events. In the future, this output will be redirected to a log file.
- Bug fixes:
- FILE_SIGNAL_SOURCE now works correctly when the user configures GNSS-SDR to process the entire file.
- GPS_L1_CA_DLL_PLL now computes correctly the PRN start values.
- GPS_L1_CA_DLL_FLL_PLL now computes correctly the PRN start values.
- Several modifications in GPS_L1_CA_Telemetry_Decoder, GPS_L1_CA_Observables, and GPS_L1_CA_PVT modules to fix the GPS position computation.
- New features
- Tracking blocks perform a signal integrity check against NaN outliers before the correlation process.
- Tracking and PVT binary dump options are now documented and we provide MATLAB libraries and sample files to read it. Available in ./utils/matlab" and "./utils/matlab/libs"
- Observables output rate can be configured. This option enables the GPS L1 CA PVT computation at a maximum rate of 1ms.
- GPS_L1_CA_PVT now can perform a moving average Latitude, Longitude, and Altitude output for each of the Observables output. It is configurable using the configuration file.
- Added Google Earth compatible Keyhole Markup Language (KML) output writer class (./src/algorithms/PVT/libs/kml_printer.h and ./src/algorithms/PVT/libs/kml_printer.cc ). You can see the receiver position directly using Google Earth.
- We provide a master configuration file which includes an in-line documentation with all the new (and old) options. It can be found in ./conf/master.conf
git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@84 64b25241-fba3-4117-9849-534c7e92360d
2011-12-07 17:59:34 +00:00
*
* 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
2015-01-08 18:49:59 +00:00
* ( at your option ) any later version .
- Major changes:
- The executable file and the default configuration file is now changed from "./install/mercurio" and "./conf/mercurio.conf" to "./install/gnss-sdr" and "./conf/gnss-sdr.conf", respectively.
- Configuration file structure changed to define in a single entry the internal sampling frequency (after the signal conditioner). NOTICE that this change affects the all the adapters (acquisition, tracking, telemetry_decoder, observables, and PVT). All the adapters are now modified to work with this feature.
- Moved several in-line GPS L1 CA parameters (a.k.a magic numbers..) to ./src/core/system_parameters/GPS_L1_CA.h definition file.
- Tracking blocks now uses DOUBLE values in their outputs.
- Observables and PVT now are separated. PVT and their associated libraries are moved to ./src/algorithms/PVT
- Temporarily disabled the RINEX output (I am working on that!)
- GNSS-SDR screen output now gives extended debug information of the receiver status and events. In the future, this output will be redirected to a log file.
- Bug fixes:
- FILE_SIGNAL_SOURCE now works correctly when the user configures GNSS-SDR to process the entire file.
- GPS_L1_CA_DLL_PLL now computes correctly the PRN start values.
- GPS_L1_CA_DLL_FLL_PLL now computes correctly the PRN start values.
- Several modifications in GPS_L1_CA_Telemetry_Decoder, GPS_L1_CA_Observables, and GPS_L1_CA_PVT modules to fix the GPS position computation.
- New features
- Tracking blocks perform a signal integrity check against NaN outliers before the correlation process.
- Tracking and PVT binary dump options are now documented and we provide MATLAB libraries and sample files to read it. Available in ./utils/matlab" and "./utils/matlab/libs"
- Observables output rate can be configured. This option enables the GPS L1 CA PVT computation at a maximum rate of 1ms.
- GPS_L1_CA_PVT now can perform a moving average Latitude, Longitude, and Altitude output for each of the Observables output. It is configurable using the configuration file.
- Added Google Earth compatible Keyhole Markup Language (KML) output writer class (./src/algorithms/PVT/libs/kml_printer.h and ./src/algorithms/PVT/libs/kml_printer.cc ). You can see the receiver position directly using Google Earth.
- We provide a master configuration file which includes an in-line documentation with all the new (and old) options. It can be found in ./conf/master.conf
git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@84 64b25241-fba3-4117-9849-534c7e92360d
2011-12-07 17:59:34 +00:00
*
* 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/>.
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2011-10-01 18:45:20 +00:00
*/
2011-12-28 03:05:37 +00:00
# ifndef GNSS_SDR_GPS_L1_CA_TELEMETRY_DECODER_CC_H
# define GNSS_SDR_GPS_L1_CA_TELEMETRY_DECODER_CC_H
2011-10-01 18:45:20 +00:00
2011-12-28 03:05:37 +00:00
# include <fstream>
2014-01-12 20:07:38 +00:00
# include <string>
2013-07-04 13:47:40 +00:00
# include <gnuradio/block.h>
# include <gnuradio/msg_queue.h>
2014-01-12 20:07:38 +00:00
# include "GPS_L1_CA.h"
# include "gps_l1_ca_subframe_fsm.h"
# include "concurrent_queue.h"
2012-01-20 23:28:11 +00:00
# include "gnss_satellite.h"
2012-01-03 09:27:24 +00:00
2011-10-01 18:45:20 +00:00
class gps_l1_ca_telemetry_decoder_cc ;
2011-12-28 03:05:37 +00:00
2011-10-01 18:45:20 +00:00
typedef boost : : shared_ptr < gps_l1_ca_telemetry_decoder_cc > gps_l1_ca_telemetry_decoder_cc_sptr ;
2011-12-28 03:05:37 +00:00
2011-10-01 18:45:20 +00:00
gps_l1_ca_telemetry_decoder_cc_sptr
2012-01-20 23:28:11 +00:00
gps_l1_ca_make_telemetry_decoder_cc ( Gnss_Satellite satellite , long if_freq , long fs_in , unsigned
2013-07-04 13:47:40 +00:00
int vector_length , boost : : shared_ptr < gr : : msg_queue > queue , bool dump ) ;
2011-10-01 18:45:20 +00:00
2011-12-28 03:05:37 +00:00
/*!
* \ brief This class implements a block that decodes the NAV data defined in IS - GPS - 200 E
*
*/
2013-07-04 13:47:40 +00:00
class gps_l1_ca_telemetry_decoder_cc : public gr : : block
2012-10-28 10:56:04 +00:00
{
2012-01-16 18:27:31 +00:00
public :
2012-10-28 10:56:04 +00:00
~ gps_l1_ca_telemetry_decoder_cc ( ) ;
void set_satellite ( Gnss_Satellite satellite ) ; //!< Set satellite PRN
void set_channel ( int channel ) ; //!< Set receiver's channel
2013-11-17 10:48:27 +00:00
2014-06-10 16:58:17 +00:00
/*!
* \ brief Set decimation factor to average the GPS synchronization estimation output from the tracking module .
*/
void set_decimation ( int decimation ) ;
2012-10-28 10:56:04 +00:00
/*!
2013-03-14 12:52:32 +00:00
* \ brief Set the satellite data queue
2012-10-28 10:56:04 +00:00
*/
2013-11-17 10:48:27 +00:00
void set_ephemeris_queue ( concurrent_queue < Gps_Ephemeris > * ephemeris_queue ) { d_GPS_FSM . d_ephemeris_queue = ephemeris_queue ; } //!< Set the ephemeris data queue
void set_iono_queue ( concurrent_queue < Gps_Iono > * iono_queue ) { d_GPS_FSM . d_iono_queue = iono_queue ; } //!< Set the iono data queue
void set_almanac_queue ( concurrent_queue < Gps_Almanac > * almanac_queue ) { d_GPS_FSM . d_almanac_queue = almanac_queue ; } //!< Set the almanac data queue
void set_utc_model_queue ( concurrent_queue < Gps_Utc_Model > * utc_model_queue ) { d_GPS_FSM . d_utc_model_queue = utc_model_queue ; } //!< Set the UTC model data queue
2013-03-11 18:29:33 +00:00
2013-11-17 10:48:27 +00:00
/*!
* \ brief This is where all signal processing takes place
*/
2012-10-28 10:56:04 +00:00
int general_work ( int noutput_items , gr_vector_int & ninput_items ,
gr_vector_const_void_star & input_items , gr_vector_void_star & output_items ) ;
2013-11-17 10:48:27 +00:00
/*!
* \ brief Function which tells the scheduler how many input items
* are required to produce noutput_items output items .
*/
2012-10-28 10:56:04 +00:00
void forecast ( int noutput_items , gr_vector_int & ninput_items_required ) ;
2012-01-16 18:27:31 +00:00
2011-10-01 18:45:20 +00:00
private :
2012-10-28 10:56:04 +00:00
friend gps_l1_ca_telemetry_decoder_cc_sptr
gps_l1_ca_make_telemetry_decoder_cc ( Gnss_Satellite satellite , long if_freq , long fs_in , unsigned
2013-07-04 13:47:40 +00:00
int vector_length , boost : : shared_ptr < gr : : msg_queue > queue , bool dump ) ;
2013-11-17 10:48:27 +00:00
2013-07-04 13:47:40 +00:00
gps_l1_ca_telemetry_decoder_cc ( Gnss_Satellite satellite , long if_freq , long fs_in , unsigned
int vector_length , boost : : shared_ptr < gr : : msg_queue > queue , bool dump ) ;
2013-11-17 10:48:27 +00:00
2012-10-28 10:56:04 +00:00
bool gps_word_parityCheck ( unsigned int gpsword ) ;
// constants
unsigned short int d_preambles_bits [ GPS_CA_PREAMBLE_LENGTH_BITS ] ;
// class private vars
signed int * d_preambles_symbols ;
unsigned int d_samples_per_bit ;
long unsigned int d_sample_counter ;
long unsigned int d_preamble_index ;
unsigned int d_stat ;
bool d_flag_frame_sync ;
// symbols
double d_symbol_accumulator ;
short int d_symbol_accumulator_counter ;
//bits and frame
unsigned short int d_frame_bit_index ;
unsigned int d_GPS_frame_4bytes ;
unsigned int d_prev_GPS_frame_4bytes ;
bool d_flag_parity ;
bool d_flag_preamble ;
int d_word_number ;
2014-06-10 16:58:17 +00:00
// output averaging and decimation
int d_average_count ;
int d_decimation_output_factor ;
2012-10-28 10:56:04 +00:00
long d_fs_in ;
//double d_preamble_duration_seconds;
// navigation message vars
Gps_Navigation_Message d_nav ;
GpsL1CaSubframeFsm d_GPS_FSM ;
2013-07-04 13:47:40 +00:00
boost : : shared_ptr < gr : : msg_queue > d_queue ;
2012-10-28 10:56:04 +00:00
unsigned int d_vector_length ;
bool d_dump ;
Gnss_Satellite d_satellite ;
int d_channel ;
//std::deque<double> d_prn_start_sample_history;
double d_preamble_time_seconds ;
2013-03-14 12:52:32 +00:00
double d_TOW_at_Preamble ;
double d_TOW_at_current_symbol ;
2013-06-12 15:19:32 +00:00
double Prn_timestamp_at_preamble_ms ;
2013-03-14 12:52:32 +00:00
bool flag_TOW_set ;
2012-10-28 10:56:04 +00:00
std : : string d_dump_filename ;
std : : ofstream d_dump_file ;
2011-10-01 18:45:20 +00:00
} ;
# endif