mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-01-15 19:55:47 +00:00
Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into next
This commit is contained in:
commit
5aec42ddef
@ -29,7 +29,7 @@ GNSS-SDR.SUPL_CI=0x31b0
|
|||||||
SignalSource.implementation=Flexiband_Signal_Source
|
SignalSource.implementation=Flexiband_Signal_Source
|
||||||
|
|
||||||
SignalSource.flag_read_file=true
|
SignalSource.flag_read_file=true
|
||||||
SignalSource.signal_file=/home/javier/signals/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE
|
SignalSource.signal_file=/media/javier/SISTEMA/signals/fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
@ -38,7 +38,7 @@ SignalSource.item_type=gr_complex
|
|||||||
SignalSource.firmware_file=flexiband_III-1b.bit
|
SignalSource.firmware_file=flexiband_III-1b.bit
|
||||||
|
|
||||||
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
||||||
SignalSource.RF_channels=3
|
SignalSource.RF_channels=1
|
||||||
|
|
||||||
;#frontend channels gain. Not usable yet!
|
;#frontend channels gain. Not usable yet!
|
||||||
SignalSource.gain1=0
|
SignalSource.gain1=0
|
||||||
@ -324,9 +324,10 @@ Resampler2.implementation=Pass_Through
|
|||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
;#count: Number of available GPS satellite channels.
|
;#count: Number of available GPS satellite channels.
|
||||||
Channels_1C.count=1
|
Channels_1C.count=0
|
||||||
Channels_2S.count=1
|
Channels_1B.count=10
|
||||||
Channels_5X.count=2
|
Channels_2S.count=0
|
||||||
|
Channels_5X.count=0
|
||||||
|
|
||||||
;#GPS.prns=7,8
|
;#GPS.prns=7,8
|
||||||
|
|
||||||
@ -343,30 +344,50 @@ Channels.in_acquisition=1
|
|||||||
;# CHANNEL CONNECTION
|
;# CHANNEL CONNECTION
|
||||||
|
|
||||||
Channel0.RF_channel_ID=0
|
Channel0.RF_channel_ID=0
|
||||||
Channel1.RF_channel_ID=1
|
Channel1.RF_channel_ID=0
|
||||||
Channel2.RF_channel_ID=2
|
Channel2.RF_channel_ID=0
|
||||||
Channel3.RF_channel_ID=2
|
Channel3.RF_channel_ID=0
|
||||||
Channel4.RF_channel_ID=0
|
Channel4.RF_channel_ID=0
|
||||||
Channel5.RF_channel_ID=0
|
Channel5.RF_channel_ID=0
|
||||||
Channel6.RF_channel_ID=0
|
Channel6.RF_channel_ID=0
|
||||||
Channel7.RF_channel_ID=0
|
Channel7.RF_channel_ID=0
|
||||||
Channel8.RF_channel_ID=0
|
Channel8.RF_channel_ID=0
|
||||||
Channel9.RF_channel_ID=0
|
Channel9.RF_channel_ID=0
|
||||||
Channel10.RF_channel_ID=1
|
Channel10.RF_channel_ID=0
|
||||||
Channel11.RF_channel_ID=1
|
Channel11.RF_channel_ID=0
|
||||||
Channel12.RF_channel_ID=1
|
Channel12.RF_channel_ID=0
|
||||||
Channel13.RF_channel_ID=1
|
Channel13.RF_channel_ID=0
|
||||||
Channel14.RF_channel_ID=1
|
Channel14.RF_channel_ID=0
|
||||||
Channel15.RF_channel_ID=1
|
Channel15.RF_channel_ID=0
|
||||||
Channel16.RF_channel_ID=1
|
Channel16.RF_channel_ID=0
|
||||||
Channel17.RF_channel_ID=1
|
Channel17.RF_channel_ID=0
|
||||||
Channel18.RF_channel_ID=1
|
Channel18.RF_channel_ID=0
|
||||||
Channel19.RF_channel_ID=1
|
Channel19.RF_channel_ID=0
|
||||||
|
Channel20.RF_channel_ID=0
|
||||||
|
Channel21.RF_channel_ID=0
|
||||||
|
Channel22.RF_channel_ID=0
|
||||||
|
Channel23.RF_channel_ID=0
|
||||||
|
Channel24.RF_channel_ID=0
|
||||||
|
Channel25.RF_channel_ID=0
|
||||||
|
Channel26.RF_channel_ID=0
|
||||||
|
Channel27.RF_channel_ID=0
|
||||||
|
Channel28.RF_channel_ID=0
|
||||||
|
Channel29.RF_channel_ID=0
|
||||||
|
Channel30.RF_channel_ID=2
|
||||||
|
Channel31.RF_channel_ID=2
|
||||||
|
Channel32.RF_channel_ID=2
|
||||||
|
Channel33.RF_channel_ID=2
|
||||||
|
Channel34.RF_channel_ID=2
|
||||||
|
Channel35.RF_channel_ID=2
|
||||||
|
Channel36.RF_channel_ID=2
|
||||||
|
Channel37.RF_channel_ID=2
|
||||||
|
Channel38.RF_channel_ID=2
|
||||||
|
Channel39.RF_channel_ID=2
|
||||||
|
|
||||||
;######### ACQUISITION GENERIC CONFIG ######
|
;######### ACQUISITION GENERIC CONFIG ######
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
;#The following options are specific to each channel and overwrite the generic options
|
||||||
|
|
||||||
|
;# GPS L1 CA
|
||||||
Acquisition_1C.dump=false
|
Acquisition_1C.dump=false
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
@ -379,6 +400,30 @@ Acquisition_1C.doppler_step=250
|
|||||||
Acquisition_1C.bit_transition_flag=false
|
Acquisition_1C.bit_transition_flag=false
|
||||||
Acquisition_1C.max_dwells=1
|
Acquisition_1C.max_dwells=1
|
||||||
|
|
||||||
|
;# Galileo E1
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
|
Acquisition_1B.item_type=gr_complex
|
||||||
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
|
Acquisition_1B.if=0
|
||||||
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
|
Acquisition_1B.sampled_ms=4
|
||||||
|
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
|
;#threshold: Acquisition threshold
|
||||||
|
;Acquisition_1B.threshold=0
|
||||||
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
|
Acquisition_1B.pfa=0.0000002
|
||||||
|
;#doppler_max: Maximum expected Doppler shift [Hz]
|
||||||
|
Acquisition_1B.doppler_max=5000
|
||||||
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
|
Acquisition_1B.doppler_step=125
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;# GPS L2C M
|
;# GPS L2C M
|
||||||
Acquisition_2S.dump=false
|
Acquisition_2S.dump=false
|
||||||
Acquisition_2S.dump_filename=./acq_dump.dat
|
Acquisition_2S.dump_filename=./acq_dump.dat
|
||||||
@ -399,16 +444,14 @@ Acquisition_5X.item_type=gr_complex
|
|||||||
Acquisition_5X.if=0
|
Acquisition_5X.if=0
|
||||||
Acquisition_5X.coherent_integration_time_ms=1
|
Acquisition_5X.coherent_integration_time_ms=1
|
||||||
Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
|
Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
|
||||||
Acquisition_5X.threshold=0.008
|
Acquisition_5X.threshold=0.009
|
||||||
Acquisition_5X.doppler_max=10000
|
Acquisition_5X.doppler_max=5000
|
||||||
Acquisition_5X.doppler_step=250
|
Acquisition_5X.doppler_step=125
|
||||||
Acquisition_5X.bit_transition_flag=false
|
Acquisition_5X.bit_transition_flag=false
|
||||||
Acquisition_5X.max_dwells=1
|
Acquisition_5X.max_dwells=1
|
||||||
Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz
|
Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz
|
||||||
Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF.
|
Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING CONFIG ############
|
;######### TRACKING CONFIG ############
|
||||||
|
|
||||||
;######### GPS L1 C/A GENERIC TRACKING CONFIG ############
|
;######### GPS L1 C/A GENERIC TRACKING CONFIG ############
|
||||||
@ -422,6 +465,28 @@ Tracking_1C.dll_bw_hz=3.0;
|
|||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
|
|
||||||
|
;######### GALILEO E1 TRK CONFIG ############
|
||||||
|
|
||||||
|
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
||||||
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
|
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
||||||
|
Tracking_1B.item_type=gr_complex
|
||||||
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
|
Tracking_1B.if=0
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1B.dump=false
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1B.pll_bw_hz=15.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1B.dll_bw_hz=2.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1B.order=3;
|
||||||
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
|
||||||
;######### GPS L2C GENERIC TRACKING CONFIG ############
|
;######### GPS L2C GENERIC TRACKING CONFIG ############
|
||||||
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
||||||
@ -434,6 +499,7 @@ Tracking_2S.dll_bw_hz=0.25;
|
|||||||
Tracking_2S.order=2;
|
Tracking_2S.order=2;
|
||||||
Tracking_2S.early_late_space_chips=0.5;
|
Tracking_2S.early_late_space_chips=0.5;
|
||||||
|
|
||||||
|
;######### GALILEO E5 TRK CONFIG ############
|
||||||
Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
|
Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
|
||||||
Tracking_5X.item_type=gr_complex
|
Tracking_5X.item_type=gr_complex
|
||||||
Tracking_5X.if=0
|
Tracking_5X.if=0
|
||||||
@ -451,6 +517,9 @@ Tracking_5X.early_late_space_chips=0.5;
|
|||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
|
|
||||||
|
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
||||||
|
TelemetryDecoder_1B.dump=false
|
||||||
|
|
||||||
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
||||||
TelemetryDecoder_2S.dump=false
|
TelemetryDecoder_2S.dump=false
|
||||||
|
|
||||||
|
@ -86,6 +86,7 @@ void rtklib_pvt_cc::msg_handler_telemetry(pmt::pmt_t msg)
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
//************* GPS telemetry *****************
|
||||||
if( pmt::any_ref(msg).type() == typeid(std::shared_ptr<Gps_Ephemeris>) )
|
if( pmt::any_ref(msg).type() == typeid(std::shared_ptr<Gps_Ephemeris>) )
|
||||||
{
|
{
|
||||||
// ### GPS EPHEMERIS ###
|
// ### GPS EPHEMERIS ###
|
||||||
@ -115,8 +116,34 @@ void rtklib_pvt_cc::msg_handler_telemetry(pmt::pmt_t msg)
|
|||||||
d_ls_pvt->gps_utc_model = *gps_utc_model;
|
d_ls_pvt->gps_utc_model = *gps_utc_model;
|
||||||
DLOG(INFO) << "New UTC record has arrived ";
|
DLOG(INFO) << "New UTC record has arrived ";
|
||||||
}
|
}
|
||||||
|
else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr<Gps_CNAV_Ephemeris>) )
|
||||||
|
{
|
||||||
|
// ### GPS CNAV message ###
|
||||||
|
std::shared_ptr<Gps_CNAV_Ephemeris> gps_cnav_ephemeris;
|
||||||
|
gps_cnav_ephemeris = boost::any_cast<std::shared_ptr<Gps_CNAV_Ephemeris>>(pmt::any_ref(msg));
|
||||||
|
// update/insert new ephemeris record to the global ephemeris map
|
||||||
|
d_ls_pvt->gps_cnav_ephemeris_map[gps_cnav_ephemeris->i_satellite_PRN] = *gps_cnav_ephemeris;
|
||||||
|
LOG(INFO) << "New GPS CNAV ephemeris record has arrived ";
|
||||||
|
}
|
||||||
|
else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr<Gps_CNAV_Iono>) )
|
||||||
|
{
|
||||||
|
// ### GPS CNAV IONO ###
|
||||||
|
std::shared_ptr<Gps_CNAV_Iono> gps_cnav_iono;
|
||||||
|
gps_cnav_iono = boost::any_cast<std::shared_ptr<Gps_CNAV_Iono>>(pmt::any_ref(msg));
|
||||||
|
d_ls_pvt->gps_cnav_iono = *gps_cnav_iono;
|
||||||
|
DLOG(INFO) << "New CNAV IONO record has arrived ";
|
||||||
|
}
|
||||||
|
else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr<Gps_CNAV_Utc_Model>) )
|
||||||
|
{
|
||||||
|
// ### GPS CNAV UTC MODEL ###
|
||||||
|
std::shared_ptr<Gps_CNAV_Utc_Model> gps_cnav_utc_model;
|
||||||
|
gps_cnav_utc_model = boost::any_cast<std::shared_ptr<Gps_CNAV_Utc_Model>>(pmt::any_ref(msg));
|
||||||
|
d_ls_pvt->gps_cnav_utc_model = *gps_cnav_utc_model;
|
||||||
|
DLOG(INFO) << "New CNAV UTC record has arrived ";
|
||||||
|
}
|
||||||
|
|
||||||
if( pmt::any_ref(msg).type() == typeid(std::shared_ptr<Galileo_Ephemeris>) )
|
//**************** Galileo telemetry ********************
|
||||||
|
else if ( pmt::any_ref(msg).type() == typeid(std::shared_ptr<Galileo_Ephemeris>) )
|
||||||
{
|
{
|
||||||
// ### Galileo EPHEMERIS ###
|
// ### Galileo EPHEMERIS ###
|
||||||
std::shared_ptr<Galileo_Ephemeris> galileo_eph;
|
std::shared_ptr<Galileo_Ephemeris> galileo_eph;
|
||||||
@ -154,31 +181,7 @@ void rtklib_pvt_cc::msg_handler_telemetry(pmt::pmt_t msg)
|
|||||||
DLOG(INFO) << "New Galileo Almanac has arrived ";
|
DLOG(INFO) << "New Galileo Almanac has arrived ";
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr<Gps_CNAV_Ephemeris>) )
|
|
||||||
{
|
|
||||||
// ### GPS CNAV message ###
|
|
||||||
std::shared_ptr<Gps_CNAV_Ephemeris> gps_cnav_ephemeris;
|
|
||||||
gps_cnav_ephemeris = boost::any_cast<std::shared_ptr<Gps_CNAV_Ephemeris>>(pmt::any_ref(msg));
|
|
||||||
// update/insert new ephemeris record to the global ephemeris map
|
|
||||||
d_ls_pvt->gps_cnav_ephemeris_map[gps_cnav_ephemeris->i_satellite_PRN] = *gps_cnav_ephemeris;
|
|
||||||
LOG(INFO) << "New GPS CNAV ephemeris record has arrived ";
|
|
||||||
}
|
|
||||||
else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr<Gps_CNAV_Iono>) )
|
|
||||||
{
|
|
||||||
// ### GPS CNAV IONO ###
|
|
||||||
std::shared_ptr<Gps_CNAV_Iono> gps_cnav_iono;
|
|
||||||
gps_cnav_iono = boost::any_cast<std::shared_ptr<Gps_CNAV_Iono>>(pmt::any_ref(msg));
|
|
||||||
d_ls_pvt->gps_cnav_iono = *gps_cnav_iono;
|
|
||||||
DLOG(INFO) << "New CNAV IONO record has arrived ";
|
|
||||||
}
|
|
||||||
else if (pmt::any_ref(msg).type() == typeid(std::shared_ptr<Gps_CNAV_Utc_Model>) )
|
|
||||||
{
|
|
||||||
// ### GPS CNAV UTC MODEL ###
|
|
||||||
std::shared_ptr<Gps_CNAV_Utc_Model> gps_cnav_utc_model;
|
|
||||||
gps_cnav_utc_model = boost::any_cast<std::shared_ptr<Gps_CNAV_Utc_Model>>(pmt::any_ref(msg));
|
|
||||||
d_ls_pvt->gps_cnav_utc_model = *gps_cnav_utc_model;
|
|
||||||
DLOG(INFO) << "New CNAV UTC record has arrived ";
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG(WARNING) << "msg_handler_telemetry unknown object type!";
|
LOG(WARNING) << "msg_handler_telemetry unknown object type!";
|
||||||
@ -454,12 +457,14 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
std::map<int,Galileo_Ephemeris>::iterator tmp_eph_iter_gal = d_ls_pvt->galileo_ephemeris_map.find(in[i][epoch].PRN);
|
std::map<int,Galileo_Ephemeris>::iterator tmp_eph_iter_gal = d_ls_pvt->galileo_ephemeris_map.find(in[i][epoch].PRN);
|
||||||
std::map<int,Gps_CNAV_Ephemeris>::iterator tmp_eph_iter_cnav = d_ls_pvt->gps_cnav_ephemeris_map.find(in[i][epoch].PRN);
|
std::map<int,Gps_CNAV_Ephemeris>::iterator tmp_eph_iter_cnav = d_ls_pvt->gps_cnav_ephemeris_map.find(in[i][epoch].PRN);
|
||||||
if(((tmp_eph_iter_gps->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("1C") == 0))
|
if(((tmp_eph_iter_gps->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("1C") == 0))
|
||||||
|
|| ((tmp_eph_iter_cnav->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("2S") == 0))
|
||||||
|| ((tmp_eph_iter_gal->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("1B") == 0))
|
|| ((tmp_eph_iter_gal->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("1B") == 0))
|
||||||
|| ((tmp_eph_iter_cnav->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("2S") == 0)))
|
|| ((tmp_eph_iter_gal->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("5X") == 0)))
|
||||||
{
|
{
|
||||||
// store valid observables in a map.
|
// store valid observables in a map.
|
||||||
gnss_observables_map.insert(std::pair<int,Gnss_Synchro>(i, in[i][epoch]));
|
gnss_observables_map.insert(std::pair<int,Gnss_Synchro>(i, in[i][epoch]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(d_ls_pvt->gps_ephemeris_map.size() > 0)
|
if(d_ls_pvt->gps_ephemeris_map.size() > 0)
|
||||||
{
|
{
|
||||||
if(tmp_eph_iter_gps != d_ls_pvt->gps_ephemeris_map.end())
|
if(tmp_eph_iter_gps != d_ls_pvt->gps_ephemeris_map.end())
|
||||||
@ -484,6 +489,7 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ############ 2 COMPUTE THE PVT ################################
|
// ############ 2 COMPUTE THE PVT ################################
|
||||||
if (gnss_observables_map.size() > 0)
|
if (gnss_observables_map.size() > 0)
|
||||||
{
|
{
|
||||||
|
@ -122,6 +122,10 @@ bool rtklib_solver::get_PVT(std::map<int,Gnss_Synchro> gnss_observables_map, dou
|
|||||||
switch(gnss_observables_iter->second.System)
|
switch(gnss_observables_iter->second.System)
|
||||||
{
|
{
|
||||||
case 'E':
|
case 'E':
|
||||||
|
{
|
||||||
|
std::string sig_(gnss_observables_iter->second.Signal);
|
||||||
|
// Galileo E1
|
||||||
|
if(sig_.compare("1B") == 0)
|
||||||
{
|
{
|
||||||
// 1 Gal - find the ephemeris for the current GALILEO SV observation. The SV PRN ID is the map key
|
// 1 Gal - find the ephemeris for the current GALILEO SV observation. The SV PRN ID is the map key
|
||||||
galileo_ephemeris_iter = galileo_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
galileo_ephemeris_iter = galileo_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
@ -141,10 +145,54 @@ bool rtklib_solver::get_PVT(std::map<int,Gnss_Synchro> gnss_observables_map, dou
|
|||||||
{
|
{
|
||||||
DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->second.PRN;
|
DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->second.PRN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
// Galileo E5
|
||||||
|
if(sig_.compare("5X") == 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
// 1 Gal - find the ephemeris for the current GALILEO SV observation. The SV PRN ID is the map key
|
||||||
|
galileo_ephemeris_iter = galileo_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
|
if (galileo_ephemeris_iter != galileo_ephemeris_map.end())
|
||||||
|
{
|
||||||
|
bool found_E1_obs=false;
|
||||||
|
for (int i = 0; i < valid_obs; i++)
|
||||||
|
{
|
||||||
|
if (eph_data[i].sat == (static_cast<int>(gnss_observables_iter->second.PRN+NSATGPS+NSATGLO)))
|
||||||
|
{
|
||||||
|
obs_data[i] = insert_obs_to_rtklib(obs_data[i],
|
||||||
|
gnss_observables_iter->second,
|
||||||
|
galileo_ephemeris_iter->second.WN_5,
|
||||||
|
2);//Band 3 (L5/E5)
|
||||||
|
found_E1_obs=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found_E1_obs)
|
||||||
|
{
|
||||||
|
//insert Galileo E5 obs as new obs and also insert its ephemeris
|
||||||
|
//convert ephemeris from GNSS-SDR class to RTKLIB structure
|
||||||
|
eph_data[valid_obs] = eph_to_rtklib(galileo_ephemeris_iter->second);
|
||||||
|
//convert observation from GNSS-SDR class to RTKLIB structure
|
||||||
|
obsd_t newobs = {{0,0}, '0', '0', {}, {}, {}, {}, {}, {}};
|
||||||
|
obs_data[valid_obs] = insert_obs_to_rtklib(newobs,
|
||||||
|
gnss_observables_iter->second,
|
||||||
|
galileo_ephemeris_iter->second.WN_5,
|
||||||
|
2); //Band 3 (L5/E5)
|
||||||
|
valid_obs++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // the ephemeris are not available for this SV
|
||||||
|
{
|
||||||
|
DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->second.PRN;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'G':
|
case 'G':
|
||||||
{
|
{
|
||||||
|
// GPS L1
|
||||||
// 1 GPS - find the ephemeris for the current GPS SV observation. The SV PRN ID is the map key
|
// 1 GPS - find the ephemeris for the current GPS SV observation. The SV PRN ID is the map key
|
||||||
std::string sig_(gnss_observables_iter->second.Signal);
|
std::string sig_(gnss_observables_iter->second.Signal);
|
||||||
if(sig_.compare("1C") == 0)
|
if(sig_.compare("1C") == 0)
|
||||||
@ -167,6 +215,7 @@ bool rtklib_solver::get_PVT(std::map<int,Gnss_Synchro> gnss_observables_map, dou
|
|||||||
DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->first;
|
DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->first;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//GPS L2
|
||||||
if(sig_.compare("2S") == 0)
|
if(sig_.compare("2S") == 0)
|
||||||
{
|
{
|
||||||
gps_cnav_ephemeris_iter = gps_cnav_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
gps_cnav_ephemeris_iter = gps_cnav_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
@ -183,7 +232,7 @@ bool rtklib_solver::get_PVT(std::map<int,Gnss_Synchro> gnss_observables_map, dou
|
|||||||
if (eph_data[i].sat == static_cast<int>(gnss_observables_iter->second.PRN))
|
if (eph_data[i].sat == static_cast<int>(gnss_observables_iter->second.PRN))
|
||||||
{
|
{
|
||||||
eph_data[i] = eph_to_rtklib(gps_cnav_ephemeris_iter->second);
|
eph_data[i] = eph_to_rtklib(gps_cnav_ephemeris_iter->second);
|
||||||
obs_data[valid_obs] = insert_obs_to_rtklib(obs_data[valid_obs],
|
obs_data[i] = insert_obs_to_rtklib(obs_data[i],
|
||||||
gnss_observables_iter->second,
|
gnss_observables_iter->second,
|
||||||
gps_cnav_ephemeris_iter->second.i_GPS_week,
|
gps_cnav_ephemeris_iter->second.i_GPS_week,
|
||||||
1);//Band 2 (L2)
|
1);//Band 2 (L2)
|
||||||
@ -233,7 +282,7 @@ bool rtklib_solver::get_PVT(std::map<int,Gnss_Synchro> gnss_observables_map, dou
|
|||||||
{
|
{
|
||||||
nav_data.lam[i][0] = SPEED_OF_LIGHT / FREQ1; /* L1/E1 */
|
nav_data.lam[i][0] = SPEED_OF_LIGHT / FREQ1; /* L1/E1 */
|
||||||
nav_data.lam[i][1] = SPEED_OF_LIGHT / FREQ2; /* L2 */
|
nav_data.lam[i][1] = SPEED_OF_LIGHT / FREQ2; /* L2 */
|
||||||
nav_data.lam[i][2] = SPEED_OF_LIGHT / FREQ5; /* L2 */
|
nav_data.lam[i][2] = SPEED_OF_LIGHT / FREQ5; /* L5/E5 */
|
||||||
}
|
}
|
||||||
|
|
||||||
result = rtkpos(&rtk_, obs_data, valid_obs, &nav_data);
|
result = rtkpos(&rtk_, obs_data, valid_obs, &nav_data);
|
||||||
|
@ -147,6 +147,7 @@ int hybrid_observables_cc::general_work (int noutput_items,
|
|||||||
*/
|
*/
|
||||||
for (unsigned int i = 0; i < d_nchannels; i++)
|
for (unsigned int i = 0; i < d_nchannels; i++)
|
||||||
{
|
{
|
||||||
|
current_gnss_synchro[i].Flag_valid_pseudorange=false;
|
||||||
n_consume[i] = ninput_items[i];// full throttle
|
n_consume[i] = ninput_items[i];// full throttle
|
||||||
for (int j = 0; j < n_consume[i]; j++)
|
for (int j = 0; j < n_consume[i]; j++)
|
||||||
{
|
{
|
||||||
@ -186,7 +187,6 @@ int hybrid_observables_cc::general_work (int noutput_items,
|
|||||||
gnss_synchro_map.insert(std::pair<int, Gnss_Synchro>(
|
gnss_synchro_map.insert(std::pair<int, Gnss_Synchro>(
|
||||||
d_gnss_synchro_history_queue[i].front().Channel_ID,
|
d_gnss_synchro_history_queue[i].front().Channel_ID,
|
||||||
d_gnss_synchro_history_queue[i].front()));
|
d_gnss_synchro_history_queue[i].front()));
|
||||||
|
|
||||||
}
|
}
|
||||||
gnss_synchro_map_iter = min_element(gnss_synchro_map.begin(),
|
gnss_synchro_map_iter = min_element(gnss_synchro_map.begin(),
|
||||||
gnss_synchro_map.end(),
|
gnss_synchro_map.end(),
|
||||||
|
@ -188,9 +188,8 @@ void galileo_e5a_telemetry_decoder_cc::decode_word(double *page_symbols,int fram
|
|||||||
}
|
}
|
||||||
|
|
||||||
galileo_e5a_telemetry_decoder_cc::galileo_e5a_telemetry_decoder_cc(
|
galileo_e5a_telemetry_decoder_cc::galileo_e5a_telemetry_decoder_cc(
|
||||||
Gnss_Satellite satellite,
|
Gnss_Satellite satellite, bool dump) : gr::block("galileo_e5a_telemetry_decoder_cc",
|
||||||
bool dump) :
|
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||||
gr::block("galileo_e5a_telemetry_decoder_cc", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
|
||||||
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||||
{
|
{
|
||||||
// Telemetry Bit transition synchronization port out
|
// Telemetry Bit transition synchronization port out
|
||||||
@ -245,10 +244,8 @@ galileo_e5a_telemetry_decoder_cc::~galileo_e5a_telemetry_decoder_cc()
|
|||||||
int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||||
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
||||||
{
|
{
|
||||||
//
|
const Gnss_Synchro *in = (const Gnss_Synchro *) input_items[0]; // input
|
||||||
const Gnss_Synchro **in = (const Gnss_Synchro **) &input_items[0]; //Get the input samples pointer
|
Gnss_Synchro *out = (Gnss_Synchro *) output_items[0]; // output
|
||||||
Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0];
|
|
||||||
|
|
||||||
/* Terminology: Prompt: output from tracking Prompt correlator (Prompt samples)
|
/* Terminology: Prompt: output from tracking Prompt correlator (Prompt samples)
|
||||||
* Symbol: encoded navigation bits. 1 symbol = 20 samples in E5a
|
* Symbol: encoded navigation bits. 1 symbol = 20 samples in E5a
|
||||||
* Bit: decoded navigation bits forming words as described in Galileo ICD
|
* Bit: decoded navigation bits forming words as described in Galileo ICD
|
||||||
@ -260,9 +257,9 @@ int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribut
|
|||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
{
|
{
|
||||||
if (in[0][0].Prompt_I != 0)
|
if (in[0].Prompt_I != 0)
|
||||||
{
|
{
|
||||||
d_current_symbol += in[0][0].Prompt_I;
|
d_current_symbol += in[0].Prompt_I;
|
||||||
if (d_prompt_counter == GALILEO_FNAV_CODES_PER_SYMBOL - 1)
|
if (d_prompt_counter == GALILEO_FNAV_CODES_PER_SYMBOL - 1)
|
||||||
{
|
{
|
||||||
if (d_current_symbol > 0)
|
if (d_current_symbol > 0)
|
||||||
@ -290,7 +287,7 @@ int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribut
|
|||||||
}
|
}
|
||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
d_current_symbol += in[0][0].Prompt_I;
|
d_current_symbol += in[0].Prompt_I;
|
||||||
if (d_prompt_counter == GALILEO_FNAV_CODES_PER_SYMBOL - 1)
|
if (d_prompt_counter == GALILEO_FNAV_CODES_PER_SYMBOL - 1)
|
||||||
{
|
{
|
||||||
if (d_current_symbol > 0)
|
if (d_current_symbol > 0)
|
||||||
@ -354,7 +351,7 @@ int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribut
|
|||||||
}
|
}
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
d_current_symbol += in[0][0].Prompt_I;
|
d_current_symbol += in[0].Prompt_I;
|
||||||
if (d_prompt_counter == GALILEO_FNAV_CODES_PER_SYMBOL - 1)
|
if (d_prompt_counter == GALILEO_FNAV_CODES_PER_SYMBOL - 1)
|
||||||
{
|
{
|
||||||
if (d_current_symbol > 0)
|
if (d_current_symbol > 0)
|
||||||
@ -415,7 +412,7 @@ int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribut
|
|||||||
{
|
{
|
||||||
d_flag_frame_sync = true;
|
d_flag_frame_sync = true;
|
||||||
DLOG(INFO) << " Frame sync SAT " << this->d_satellite << " with preamble start at "
|
DLOG(INFO) << " Frame sync SAT " << this->d_satellite << " with preamble start at "
|
||||||
<< in[0][0].Tracking_sample_counter << " [samples]"; }
|
<< in[0].Tracking_sample_counter << " [samples]"; }
|
||||||
d_symbol_counter = 0; // d_page_symbols start right after preamble and finish at the end of next preamble.
|
d_symbol_counter = 0; // d_page_symbols start right after preamble and finish at the end of next preamble.
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -443,12 +440,12 @@ int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribut
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
consume_each(1);
|
|
||||||
|
|
||||||
// UPDATE GNSS SYNCHRO DATA
|
// UPDATE GNSS SYNCHRO DATA
|
||||||
Gnss_Synchro current_synchro_data; //structure to save the synchronization information and send the output object to the next block
|
Gnss_Synchro current_synchro_data; //structure to save the synchronization information and send the output object to the next block
|
||||||
//1. Copy the current tracking output
|
//1. Copy the current tracking output
|
||||||
current_synchro_data = in[0][0];
|
current_synchro_data = in[0];
|
||||||
//2. Add the telemetry decoder information
|
//2. Add the telemetry decoder information
|
||||||
if (this->d_flag_preamble == true and d_nav.flag_TOW_set == true)
|
if (this->d_flag_preamble == true and d_nav.flag_TOW_set == true)
|
||||||
//update TOW at the preamble instant
|
//update TOW at the preamble instant
|
||||||
@ -524,7 +521,8 @@ int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribut
|
|||||||
}
|
}
|
||||||
d_sample_counter++; //count for the processed samples
|
d_sample_counter++; //count for the processed samples
|
||||||
//3. Make the output (copy the object contents to the GNURadio reserved memory)
|
//3. Make the output (copy the object contents to the GNURadio reserved memory)
|
||||||
*out[0] = current_synchro_data;
|
out[0] = current_synchro_data;
|
||||||
|
consume_each(1);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ gps_l1_ca_telemetry_decoder_cc::gps_l1_ca_telemetry_decoder_cc(
|
|||||||
d_channel = 0;
|
d_channel = 0;
|
||||||
flag_PLL_180_deg_phase_locked = false;
|
flag_PLL_180_deg_phase_locked = false;
|
||||||
//set minimum output buffer to avoid deadlock when combined with other GNSS systems or signals with slower symbol rates
|
//set minimum output buffer to avoid deadlock when combined with other GNSS systems or signals with slower symbol rates
|
||||||
this->set_min_output_buffer(3000);
|
this->set_min_output_buffer(5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -400,7 +400,7 @@ int galileo_e1_dll_pll_veml_tracking_cc::general_work (int noutput_items __attri
|
|||||||
current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz;
|
current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz;
|
||||||
current_synchro_data.CN0_dB_hz = d_CN0_SNV_dB_Hz;
|
current_synchro_data.CN0_dB_hz = d_CN0_SNV_dB_Hz;
|
||||||
current_synchro_data.Flag_valid_symbol_output = true;
|
current_synchro_data.Flag_valid_symbol_output = true;
|
||||||
current_synchro_data.correlation_length_ms = 4;
|
current_synchro_data.correlation_length_ms = Galileo_E1_CODE_PERIOD_MS;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -646,6 +646,7 @@ int Galileo_E5a_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute
|
|||||||
}
|
}
|
||||||
|
|
||||||
current_synchro_data.fs=d_fs_in;
|
current_synchro_data.fs=d_fs_in;
|
||||||
|
current_synchro_data.correlation_length_ms=GALILEO_E5a_CODE_PERIOD_MS;
|
||||||
*out[0] = current_synchro_data;
|
*out[0] = current_synchro_data;
|
||||||
|
|
||||||
if(d_dump)
|
if(d_dump)
|
||||||
|
@ -52,6 +52,7 @@ const double GALILEO_F = -4.442807309e-10; //!< Constant, [s/(m)^(1/2)]
|
|||||||
const double Galileo_E1_FREQ_HZ = FREQ1; //!< Galileo E1 carrier frequency [Hz]
|
const double Galileo_E1_FREQ_HZ = FREQ1; //!< Galileo E1 carrier frequency [Hz]
|
||||||
const double Galileo_E1_CODE_CHIP_RATE_HZ = 1.023e6; //!< Galileo E1 code rate [chips/s]
|
const double Galileo_E1_CODE_CHIP_RATE_HZ = 1.023e6; //!< Galileo E1 code rate [chips/s]
|
||||||
const double Galileo_E1_CODE_PERIOD = 0.004; //!< Galileo E1 code period [s]
|
const double Galileo_E1_CODE_PERIOD = 0.004; //!< Galileo E1 code period [s]
|
||||||
|
const int Galileo_E1_CODE_PERIOD_MS = 4; //!< Galileo E1 code period [ms]
|
||||||
const double Galileo_E1_SUB_CARRIER_A_RATE_HZ = 1.023e6; //!< Galileo E1 sub-carrier 'a' rate [Hz]
|
const double Galileo_E1_SUB_CARRIER_A_RATE_HZ = 1.023e6; //!< Galileo E1 sub-carrier 'a' rate [Hz]
|
||||||
const double Galileo_E1_SUB_CARRIER_B_RATE_HZ = 6.138e6; //!< Galileo E1 sub-carrier 'b' rate [Hz]
|
const double Galileo_E1_SUB_CARRIER_B_RATE_HZ = 6.138e6; //!< Galileo E1 sub-carrier 'b' rate [Hz]
|
||||||
const double Galileo_E1_B_CODE_LENGTH_CHIPS = 4092.0; //!< Galileo E1-B code length [chips]
|
const double Galileo_E1_B_CODE_LENGTH_CHIPS = 4092.0; //!< Galileo E1-B code length [chips]
|
||||||
|
@ -46,7 +46,8 @@ const double Galileo_E5a_Q_TIERED_CODE_PERIOD = 0.100; //!< Galileo E5a-Q tie
|
|||||||
const int Galileo_E5a_CODE_LENGTH_CHIPS = 10230; //!< Galileo E5a primary code length [chips]
|
const int Galileo_E5a_CODE_LENGTH_CHIPS = 10230; //!< Galileo E5a primary code length [chips]
|
||||||
const int Galileo_E5a_I_SECONDARY_CODE_LENGTH = 20; //!< Galileo E5a-I secondary code length [chips]
|
const int Galileo_E5a_I_SECONDARY_CODE_LENGTH = 20; //!< Galileo E5a-I secondary code length [chips]
|
||||||
const int Galileo_E5a_Q_SECONDARY_CODE_LENGTH = 100; //!< Galileo E5a-Q secondary code length [chips]
|
const int Galileo_E5a_Q_SECONDARY_CODE_LENGTH = 100; //!< Galileo E5a-Q secondary code length [chips]
|
||||||
const double GALILEO_E5a_CODE_PERIOD = 0.001;
|
const double GALILEO_E5a_CODE_PERIOD = 0.001; //!< Galileo E1 primary code period [s]
|
||||||
|
const int GALILEO_E5a_CODE_PERIOD_MS = 1; //!< Galileo E1 primary code period [ms]
|
||||||
const int Galileo_E5a_SYMBOL_RATE_BPS = 50; //!< Galileo E5a symbol rate [bits/second]
|
const int Galileo_E5a_SYMBOL_RATE_BPS = 50; //!< Galileo E5a symbol rate [bits/second]
|
||||||
const int Galileo_E5a_NUMBER_OF_CODES = 50;
|
const int Galileo_E5a_NUMBER_OF_CODES = 50;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user