mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-04-20 01:33:13 +00:00
Bug fixes in Galileo E5a telemetry decoding. Code cleaning in Galileo E5a tracking
This commit is contained in:
parent
deb916b342
commit
b2531cb926
conf
src
algorithms
telemetry_decoder/gnuradio_blocks
tracking/gnuradio_blocks
core/system_parameters
@ -29,7 +29,7 @@ GNSS-SDR.SUPL_CI=0x31b0
|
||||
SignalSource.implementation=Flexiband_Signal_Source
|
||||
|
||||
SignalSource.flag_read_file=true
|
||||
SignalSource.signal_file=/media/javier/SISTEMA/signals/fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE
|
||||
SignalSource.signal_file=/home/javier/signals/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.
|
||||
SignalSource.item_type=gr_complex
|
||||
@ -38,7 +38,7 @@ SignalSource.item_type=gr_complex
|
||||
SignalSource.firmware_file=flexiband_III-1b.bit
|
||||
|
||||
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
||||
SignalSource.RF_channels=2
|
||||
SignalSource.RF_channels=3
|
||||
|
||||
;#frontend channels gain. Not usable yet!
|
||||
SignalSource.gain1=0
|
||||
@ -74,7 +74,7 @@ DataTypeAdapter0.item_type=gr_complex
|
||||
InputFilter0.implementation=Freq_Xlating_Fir_Filter
|
||||
|
||||
;#dump: Dump the filtered data to a file.
|
||||
InputFilter0.dump=true
|
||||
InputFilter0.dump=false
|
||||
|
||||
;#dump_filename: Log path and filename.
|
||||
InputFilter0.dump_filename=../data/input_filter_ch0.dat
|
||||
@ -237,22 +237,29 @@ InputFilter1.decimation_factor=4
|
||||
;## Resamples the input data.
|
||||
Resampler1.implementation=Pass_Through
|
||||
|
||||
|
||||
;######################################################
|
||||
;######### RF CHANNEL 2 SIGNAL CONDITIONER ############
|
||||
;######################################################
|
||||
|
||||
;######### SIGNAL_CONDITIONER 2 CONFIG ############
|
||||
;## It holds blocks to change data type, filter and resample input data.
|
||||
SignalConditioner2.implementation=Pass_Through
|
||||
SignalConditioner2.implementation=Signal_Conditioner
|
||||
|
||||
;######### DATA_TYPE_ADAPTER 2 CONFIG ############
|
||||
DataTypeAdapter2.implementation=Pass_Through
|
||||
DataTypeAdapter2.item_type=gr_complex
|
||||
|
||||
;######### INPUT_FILTER 2 CONFIG ############
|
||||
InputFilter2.implementation=Pass_Through
|
||||
;## Filter the input data. Can be combined with frequency translation for IF signals
|
||||
|
||||
InputFilter2.implementation=Freq_Xlating_Fir_Filter
|
||||
|
||||
;#dump: Dump the filtered data to a file.
|
||||
InputFilter2.dump=false
|
||||
|
||||
;#dump_filename: Log path and filename.
|
||||
InputFilter2.dump_filename=../data/input_filter.dat
|
||||
InputFilter2.dump_filename=../data/input_filter_ch2.dat
|
||||
|
||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
||||
InputFilter2.input_item_type=gr_complex
|
||||
@ -260,15 +267,66 @@ InputFilter2.input_item_type=gr_complex
|
||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
||||
InputFilter2.output_item_type=gr_complex
|
||||
|
||||
;######### RESAMPLER CONFIG 2 ############
|
||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||
InputFilter2.taps_item_type=float
|
||||
|
||||
;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
|
||||
InputFilter2.number_of_taps=5
|
||||
|
||||
;#number_of _bands: Number of frequency bands in the filter.
|
||||
InputFilter2.number_of_bands=2
|
||||
|
||||
;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
|
||||
;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
|
||||
;#The number of band_begin and band_end elements must match the number of bands
|
||||
|
||||
InputFilter2.band1_begin=0.0
|
||||
InputFilter2.band1_end=0.45
|
||||
InputFilter2.band2_begin=0.55
|
||||
InputFilter2.band2_end=1.0
|
||||
|
||||
;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
|
||||
;#The number of ampl_begin and ampl_end elements must match the number of bands
|
||||
|
||||
InputFilter2.ampl1_begin=1.0
|
||||
InputFilter2.ampl1_end=1.0
|
||||
InputFilter2.ampl2_begin=0.0
|
||||
InputFilter2.ampl2_end=0.0
|
||||
|
||||
;#band_error: weighting applied to each band (usually 1).
|
||||
;#The number of band_error elements must match the number of bands
|
||||
InputFilter2.band1_error=1.0
|
||||
InputFilter2.band2_error=1.0
|
||||
|
||||
;#filter_type: one of "bandpass", "hilbert" or "differentiator"
|
||||
InputFilter2.filter_type=bandpass
|
||||
|
||||
;#grid_density: determines how accurately the filter will be constructed.
|
||||
;The minimum value is 16; higher values are slower to compute the filter.
|
||||
InputFilter2.grid_density=16
|
||||
|
||||
;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
|
||||
;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
|
||||
;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
|
||||
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
|
||||
InputFilter2.sampling_frequency=40000000
|
||||
;# IF deviation due to front-end LO inaccuracies [HZ]
|
||||
InputFilter2.IF=0
|
||||
|
||||
;# Decimation factor after the frequency tranaslating block
|
||||
InputFilter2.decimation_factor=8
|
||||
|
||||
|
||||
;######### RESAMPLER CONFIG 1 ############
|
||||
;## Resamples the input data.
|
||||
Resampler2.implementation=Pass_Through
|
||||
|
||||
|
||||
;######### CHANNELS GLOBAL CONFIG ############
|
||||
;#count: Number of available GPS satellite channels.
|
||||
Channels_1C.count=11
|
||||
Channels_2S.count=0
|
||||
Channels_1C.count=1
|
||||
Channels_2S.count=1
|
||||
Channels_5X.count=2
|
||||
|
||||
;#GPS.prns=7,8
|
||||
|
||||
@ -283,10 +341,11 @@ Channels.in_acquisition=1
|
||||
;# CHANNEL NUMBERING ORDER: GPS L1 C/A, GPS L2 L2C (M), GALILEO E1 B, GALILEO E5a
|
||||
|
||||
;# CHANNEL CONNECTION
|
||||
|
||||
Channel0.RF_channel_ID=0
|
||||
Channel1.RF_channel_ID=0
|
||||
Channel2.RF_channel_ID=0
|
||||
Channel3.RF_channel_ID=0
|
||||
Channel1.RF_channel_ID=1
|
||||
Channel2.RF_channel_ID=2
|
||||
Channel3.RF_channel_ID=2
|
||||
Channel4.RF_channel_ID=0
|
||||
Channel5.RF_channel_ID=0
|
||||
Channel6.RF_channel_ID=0
|
||||
@ -333,6 +392,22 @@ Acquisition_2S.doppler_min=-5000
|
||||
Acquisition_2S.doppler_step=60
|
||||
Acquisition_2S.max_dwells=1
|
||||
|
||||
;# GALILEO E5a
|
||||
Acquisition_5X.dump=false
|
||||
Acquisition_5X.dump_filename=./acq_dump.dat
|
||||
Acquisition_5X.item_type=gr_complex
|
||||
Acquisition_5X.if=0
|
||||
Acquisition_5X.coherent_integration_time_ms=1
|
||||
Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
|
||||
Acquisition_5X.threshold=0.008
|
||||
Acquisition_5X.doppler_max=10000
|
||||
Acquisition_5X.doppler_step=250
|
||||
Acquisition_5X.bit_transition_flag=false
|
||||
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.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 ############
|
||||
|
||||
@ -359,16 +434,28 @@ Tracking_2S.dll_bw_hz=0.25;
|
||||
Tracking_2S.order=2;
|
||||
Tracking_2S.early_late_space_chips=0.5;
|
||||
|
||||
Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
|
||||
Tracking_5X.item_type=gr_complex
|
||||
Tracking_5X.if=0
|
||||
Tracking_5X.dump=false
|
||||
Tracking_5X.dump_filename=./tracking_ch_
|
||||
Tracking_5X.pll_bw_hz_init=20.0; **Only for E5a** PLL loop filter bandwidth during initialization [Hz]
|
||||
Tracking_5X.dll_bw_hz_init=20.0; **Only for E5a** DLL loop filter bandwidth during initialization [Hz]
|
||||
Tracking_5X.ti_ms=1; **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms]
|
||||
Tracking_5X.pll_bw_hz=20.0;
|
||||
Tracking_5X.dll_bw_hz=20.0;
|
||||
Tracking_5X.order=2;
|
||||
Tracking_5X.early_late_space_chips=0.5;
|
||||
|
||||
;######### TELEMETRY DECODER CONFIG ############
|
||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||
TelemetryDecoder_1C.dump=false
|
||||
TelemetryDecoder_1C.decimation_factor=1;
|
||||
|
||||
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
||||
TelemetryDecoder_2S.dump=false
|
||||
TelemetryDecoder_2S.decimation_factor=1;
|
||||
|
||||
TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder
|
||||
TelemetryDecoder_5X.dump=false
|
||||
|
||||
;######### OBSERVABLES CONFIG ############
|
||||
;#implementation:
|
||||
|
@ -2,6 +2,7 @@
|
||||
* \file galileo_e5a_telemetry_decoder_cc.cc
|
||||
* \brief Implementation of a Galileo FNAV message demodulator block
|
||||
* \author Marc Sales, 2014. marcsales92(at)gmail.com
|
||||
* Javier Arribas, 2017. jarribas(at)cttc.es
|
||||
* \based on work from:
|
||||
* <ul>
|
||||
* <li> Javier Arribas, 2011. jarribas(at)cttc.es
|
||||
@ -45,7 +46,7 @@
|
||||
#include "convolutional.h"
|
||||
|
||||
|
||||
#define CRC_ERROR_LIMIT 6
|
||||
#define GALILEO_E5a_CRC_ERROR_LIMIT 6
|
||||
|
||||
using google::LogMessage;
|
||||
|
||||
@ -200,10 +201,8 @@ galileo_e5a_telemetry_decoder_cc::galileo_e5a_telemetry_decoder_cc(
|
||||
d_dump = dump;
|
||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||
LOG(INFO) << "GALILEO E5A TELEMETRY PROCESSING: satellite " << d_satellite;
|
||||
//d_samples_per_symbol = ( Galileo_E5a_CODE_CHIP_RATE_HZ / Galileo_E5a_CODE_LENGTH_CHIPS ) / Galileo_E1_B_SYMBOL_RATE_BPS;
|
||||
|
||||
// set the preamble
|
||||
//unsigned short int preambles_bits[GALILEO_FNAV_PREAMBLE_LENGTH_BITS] = GALILEO_FNAV_PREAMBLE;
|
||||
for (int i = 0; i < GALILEO_FNAV_PREAMBLE_LENGTH_BITS; i++)
|
||||
{
|
||||
if (GALILEO_FNAV_PREAMBLE.at(i) == '0')
|
||||
@ -216,27 +215,6 @@ galileo_e5a_telemetry_decoder_cc::galileo_e5a_telemetry_decoder_cc(
|
||||
}
|
||||
}
|
||||
|
||||
// memcpy((unsigned short int*)this->d_preambles_bits, (unsigned short int*)preambles_bits, GALILEO_FNAV_PREAMBLE_LENGTH_BITS*sizeof(unsigned short int));
|
||||
|
||||
// // preamble bits to sampled symbols
|
||||
// d_preambles_symbols = (signed int*)malloc(sizeof(signed int) * GALILEO_FNAV_SAMPLES_PER_PREAMBLE);
|
||||
// int n = 0;
|
||||
// for (int i = 0; i < GALILEO_FNAV_PREAMBLE_LENGTH_BITS; i++)
|
||||
// {
|
||||
// for (unsigned int j = 0; j < GALILEO_FNAV_SAMPLES_PER_SYMBOL; j++)
|
||||
// {
|
||||
// if (d_preambles_bits[i] == 1)
|
||||
// {
|
||||
// d_preambles_symbols[n] = 1;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// d_preambles_symbols[n] = -1;
|
||||
// }
|
||||
// n++;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
d_sample_counter = 0;
|
||||
d_state = 0;
|
||||
d_preamble_lock = false;
|
||||
@ -397,16 +375,6 @@ int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribut
|
||||
// **** Attempt Preamble correlation ****
|
||||
bool corr_flag = true;
|
||||
int corr_sign = 0; // sequence can be found inverted
|
||||
// corr_sign = d_preamble_bits[0] * d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS];
|
||||
// for (int i = 1; i < GALILEO_FNAV_PREAMBLE_LENGTH_BITS; i++)
|
||||
// {
|
||||
// if ((d_preamble_bits[i] * d_page_symbols[i + d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS]) != corr_sign)
|
||||
// {
|
||||
// //exit for if one bit doesn't correlate
|
||||
// corr_flag = false;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// check if the preamble starts positive correlated or negative correlated
|
||||
if (d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS] < 0) // symbols clipping
|
||||
{
|
||||
@ -453,7 +421,7 @@ int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items __attribut
|
||||
else
|
||||
{
|
||||
d_CRC_error_counter++;
|
||||
if (d_CRC_error_counter > CRC_ERROR_LIMIT)
|
||||
if (d_CRC_error_counter > GALILEO_E5a_CRC_ERROR_LIMIT)
|
||||
{
|
||||
LOG(INFO) << "Lost of frame sync SAT " << this->d_satellite;
|
||||
d_state = 1;
|
||||
|
@ -2,6 +2,7 @@
|
||||
* \file galileo_e5a_telemetry_decoder_cc.cc
|
||||
* \brief Implementation of a Galileo FNAV message demodulator block
|
||||
* \author Marc Sales, 2014. marcsales92(at)gmail.com
|
||||
* Javier Arribas, 2017. jarribas(at)cttc.es
|
||||
* \based on work from:
|
||||
* <ul>
|
||||
* <li> Javier Arribas, 2011. jarribas(at)cttc.es
|
||||
|
@ -301,8 +301,8 @@ void Galileo_E5a_Dll_Pll_Tracking_cc::start_tracking()
|
||||
sys = sys_.substr(0,1);
|
||||
|
||||
// DEBUG OUTPUT
|
||||
std::cout << "Tracking start on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << std::endl;
|
||||
LOG(INFO) << "Starting tracking of satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel;
|
||||
std::cout << "Tracking Galileo E5a start on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << std::endl;
|
||||
LOG(INFO) << "Galileo E5a starting tracking of satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel;
|
||||
|
||||
|
||||
// enable tracking
|
||||
@ -564,7 +564,7 @@ int Galileo_E5a_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute
|
||||
acquire_secondary(); // changes d_secondary_lock and d_secondary_delay
|
||||
if (d_secondary_lock == true)
|
||||
{
|
||||
std::cout << "Secondary code locked." << std::endl;
|
||||
std::cout << "Galileo E5a secondary code locked for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << std::endl;
|
||||
d_current_ti_ms = d_ti_ms;
|
||||
// Change loop parameters ==========================================
|
||||
d_code_loop_filter.set_pdi(d_current_ti_ms * GALILEO_E5a_CODE_PERIOD);
|
||||
@ -574,7 +574,7 @@ int Galileo_E5a_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "Secondary code delay couldn't be resolved." << std::endl;
|
||||
//std::cout << "Secondary code delay couldn't be resolved." << std::endl;
|
||||
d_carrier_lock_fail_counter++;
|
||||
if (d_carrier_lock_fail_counter > MAXIMUM_LOCK_FAIL_COUNTER)
|
||||
{
|
||||
|
@ -75,150 +75,150 @@ const int GALILEO_FNAV_DATA_FRAME_BYTES = 27;
|
||||
const std::vector<std::pair<int,int>> FNAV_PAGE_TYPE_bit({{1,6}});
|
||||
|
||||
/* WORD 1 iono corrections. FNAV (Galileo E5a message)*/
|
||||
const std::vector<std::pair<int,int>> FNAV_SV_ID_PRN_1_bit({{6,6}});
|
||||
const std::vector<std::pair<int,int>> FNAV_IODnav_1_bit({{12,10}});
|
||||
const std::vector<std::pair<int,int>> FNAV_t0c_1_bit({{22,14}});
|
||||
const std::vector<std::pair<int,int>> FNAV_SV_ID_PRN_1_bit({{7,6}});
|
||||
const std::vector<std::pair<int,int>> FNAV_IODnav_1_bit({{13,10}});
|
||||
const std::vector<std::pair<int,int>> FNAV_t0c_1_bit({{23,14}});
|
||||
const double FNAV_t0c_1_LSB = 60;
|
||||
const std::vector<std::pair<int,int>> FNAV_af0_1_bit({{36,31}});
|
||||
const std::vector<std::pair<int,int>> FNAV_af0_1_bit({{37,31}});
|
||||
const double FNAV_af0_1_LSB = TWO_N34;
|
||||
const std::vector<std::pair<int,int>> FNAV_af1_1_bit({{67,21}});
|
||||
const std::vector<std::pair<int,int>> FNAV_af1_1_bit({{68,21}});
|
||||
const double FNAV_af1_1_LSB = TWO_N46;
|
||||
const std::vector<std::pair<int,int>> FNAV_af2_1_bit({{88,6}});
|
||||
const std::vector<std::pair<int,int>> FNAV_af2_1_bit({{89,6}});
|
||||
const double FNAV_af2_1_LSB = TWO_N59;
|
||||
const std::vector<std::pair<int,int>> FNAV_SISA_1_bit({{94,8}});
|
||||
const std::vector<std::pair<int,int>> FNAV_ai0_1_bit({{102,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_SISA_1_bit({{95,8}});
|
||||
const std::vector<std::pair<int,int>> FNAV_ai0_1_bit({{103,11}});
|
||||
const double FNAV_ai0_1_LSB = TWO_N2;
|
||||
const std::vector<std::pair<int,int>> FNAV_ai1_1_bit({{113,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_ai1_1_bit({{114,11}});
|
||||
const double FNAV_ai1_1_LSB = TWO_N8;
|
||||
const std::vector<std::pair<int,int>> FNAV_ai2_1_bit({{124,14}});
|
||||
const std::vector<std::pair<int,int>> FNAV_ai2_1_bit({{125,14}});
|
||||
const double FNAV_ai2_1_LSB = TWO_N15;
|
||||
const std::vector<std::pair<int,int>> FNAV_region1_1_bit({{138,1}});
|
||||
const std::vector<std::pair<int,int>> FNAV_region2_1_bit({{139,1}});
|
||||
const std::vector<std::pair<int,int>> FNAV_region3_1_bit({{140,1}});
|
||||
const std::vector<std::pair<int,int>> FNAV_region4_1_bit({{141,1}});
|
||||
const std::vector<std::pair<int,int>> FNAV_region5_1_bit({{142,1}});
|
||||
const std::vector<std::pair<int,int>> FNAV_BGD_1_bit({{143,10}});
|
||||
const std::vector<std::pair<int,int>> FNAV_region1_1_bit({{139,1}});
|
||||
const std::vector<std::pair<int,int>> FNAV_region2_1_bit({{140,1}});
|
||||
const std::vector<std::pair<int,int>> FNAV_region3_1_bit({{141,1}});
|
||||
const std::vector<std::pair<int,int>> FNAV_region4_1_bit({{142,1}});
|
||||
const std::vector<std::pair<int,int>> FNAV_region5_1_bit({{143,1}});
|
||||
const std::vector<std::pair<int,int>> FNAV_BGD_1_bit({{144,10}});
|
||||
const double FNAV_BGD_1_LSB = TWO_N32;
|
||||
const std::vector<std::pair<int,int>> FNAV_E5ahs_1_bit({{153,2}});
|
||||
const std::vector<std::pair<int,int>> FNAV_WN_1_bit({{155,12}});
|
||||
const std::vector<std::pair<int,int>> FNAV_TOW_1_bit({{167,20}});
|
||||
const std::vector<std::pair<int,int>> FNAV_E5advs_1_bit({{187,1}});
|
||||
const std::vector<std::pair<int,int>> FNAV_E5ahs_1_bit({{154,2}});
|
||||
const std::vector<std::pair<int,int>> FNAV_WN_1_bit({{156,12}});
|
||||
const std::vector<std::pair<int,int>> FNAV_TOW_1_bit({{168,20}});
|
||||
const std::vector<std::pair<int,int>> FNAV_E5advs_1_bit({{189,1}});
|
||||
|
||||
// WORD 2 Ephemeris (1/3)
|
||||
const std::vector<std::pair<int,int>> FNAV_IODnav_2_bit({{6,10}});
|
||||
const std::vector<std::pair<int,int>> FNAV_M0_2_bit({{16,32}});
|
||||
const std::vector<std::pair<int,int>> FNAV_IODnav_2_bit({{7,10}});
|
||||
const std::vector<std::pair<int,int>> FNAV_M0_2_bit({{17,32}});
|
||||
const double FNAV_M0_2_LSB = PI_TWO_N31;
|
||||
const std::vector<std::pair<int,int>> FNAV_omegadot_2_bit({{48,24}});
|
||||
const std::vector<std::pair<int,int>> FNAV_omegadot_2_bit({{49,24}});
|
||||
const double FNAV_omegadot_2_LSB = PI_TWO_N43;
|
||||
const std::vector<std::pair<int,int>> FNAV_e_2_bit({{72,32}});
|
||||
const std::vector<std::pair<int,int>> FNAV_e_2_bit({{73,32}});
|
||||
const double FNAV_e_2_LSB = TWO_N33;
|
||||
const std::vector<std::pair<int,int>> FNAV_a12_2_bit({{104,32}});
|
||||
const std::vector<std::pair<int,int>> FNAV_a12_2_bit({{105,32}});
|
||||
const double FNAV_a12_2_LSB = TWO_N19;
|
||||
const std::vector<std::pair<int,int>> FNAV_omega0_2_bit({{136,32}});
|
||||
const std::vector<std::pair<int,int>> FNAV_omega0_2_bit({{137,32}});
|
||||
const double FNAV_omega0_2_LSB = PI_TWO_N31;
|
||||
const std::vector<std::pair<int,int>> FNAV_idot_2_bit({{168,14}});
|
||||
const std::vector<std::pair<int,int>> FNAV_idot_2_bit({{169,14}});
|
||||
const double FNAV_idot_2_LSB = PI_TWO_N43;
|
||||
const std::vector<std::pair<int,int>> FNAV_WN_2_bit({{182,12}});
|
||||
const std::vector<std::pair<int,int>> FNAV_TOW_2_bit({{194,20}});
|
||||
const std::vector<std::pair<int,int>> FNAV_WN_2_bit({{183,12}});
|
||||
const std::vector<std::pair<int,int>> FNAV_TOW_2_bit({{195,20}});
|
||||
|
||||
// WORD 3 Ephemeris (2/3)
|
||||
const std::vector<std::pair<int,int>> FNAV_IODnav_3_bit({{6,10}});
|
||||
const std::vector<std::pair<int,int>> FNAV_i0_3_bit({{16,32}});
|
||||
const std::vector<std::pair<int,int>> FNAV_IODnav_3_bit({{7,10}});
|
||||
const std::vector<std::pair<int,int>> FNAV_i0_3_bit({{17,32}});
|
||||
const double FNAV_i0_3_LSB = PI_TWO_N31;
|
||||
const std::vector<std::pair<int,int>> FNAV_w_3_bit({{48,32}});
|
||||
const std::vector<std::pair<int,int>> FNAV_w_3_bit({{49,32}});
|
||||
const double FNAV_w_3_LSB = PI_TWO_N31;
|
||||
const std::vector<std::pair<int,int>> FNAV_deltan_3_bit({{80,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_deltan_3_bit({{81,16}});
|
||||
const double FNAV_deltan_3_LSB = PI_TWO_N43;
|
||||
const std::vector<std::pair<int,int>> FNAV_Cuc_3_bit({{96,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Cuc_3_bit({{97,16}});
|
||||
const double FNAV_Cuc_3_LSB = TWO_N29;
|
||||
const std::vector<std::pair<int,int>> FNAV_Cus_3_bit({{112,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Cus_3_bit({{113,16}});
|
||||
const double FNAV_Cus_3_LSB = TWO_N29;
|
||||
const std::vector<std::pair<int,int>> FNAV_Crc_3_bit({{128,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Crc_3_bit({{129,16}});
|
||||
const double FNAV_Crc_3_LSB = TWO_N5;
|
||||
const std::vector<std::pair<int,int>> FNAV_Crs_3_bit({{144,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Crs_3_bit({{145,16}});
|
||||
const double FNAV_Crs_3_LSB = TWO_N5;
|
||||
const std::vector<std::pair<int,int>> FNAV_t0e_3_bit({{160,14}});
|
||||
const std::vector<std::pair<int,int>> FNAV_t0e_3_bit({{161,14}});
|
||||
const double FNAV_t0e_3_LSB = 60;
|
||||
const std::vector<std::pair<int,int>> FNAV_WN_3_bit({{174,12}});
|
||||
const std::vector<std::pair<int,int>> FNAV_TOW_3_bit({{186,20}});
|
||||
const std::vector<std::pair<int,int>> FNAV_WN_3_bit({{175,12}});
|
||||
const std::vector<std::pair<int,int>> FNAV_TOW_3_bit({{187,20}});
|
||||
|
||||
// WORD 4 Ephemeris (3/3)
|
||||
const std::vector<std::pair<int,int>> FNAV_IODnav_4_bit({{6,10}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Cic_4_bit({{16,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_IODnav_4_bit({{7,10}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Cic_4_bit({{18,16}});
|
||||
const double FNAV_Cic_4_LSB = TWO_N29;
|
||||
const std::vector<std::pair<int,int>> FNAV_Cis_4_bit({{32,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Cis_4_bit({{33,16}});
|
||||
const double FNAV_Cis_4_LSB = TWO_N29;
|
||||
const std::vector<std::pair<int,int>> FNAV_A0_4_bit({{48,32}});
|
||||
const std::vector<std::pair<int,int>> FNAV_A0_4_bit({{49,32}});
|
||||
const double FNAV_A0_4_LSB = TWO_N30;
|
||||
const std::vector<std::pair<int,int>> FNAV_A1_4_bit({{80,24}});
|
||||
const std::vector<std::pair<int,int>> FNAV_A1_4_bit({{81,24}});
|
||||
const double FNAV_A1_4_LSB = TWO_N50;
|
||||
const std::vector<std::pair<int,int>> FNAV_deltatls_4_bit({{104,8}});
|
||||
const std::vector<std::pair<int,int>> FNAV_t0t_4_bit({{112,8}});
|
||||
const std::vector<std::pair<int,int>> FNAV_deltatls_4_bit({{105,8}});
|
||||
const std::vector<std::pair<int,int>> FNAV_t0t_4_bit({{113,8}});
|
||||
const double FNAV_t0t_4_LSB = 3600;
|
||||
const std::vector<std::pair<int,int>> FNAV_WNot_4_bit({{120,8}});
|
||||
const std::vector<std::pair<int,int>> FNAV_WNlsf_4_bit({{128,8}});
|
||||
const std::vector<std::pair<int,int>> FNAV_DN_4_bit({{136,3}});
|
||||
const std::vector<std::pair<int,int>> FNAV_deltatlsf_4_bit({{139,8}});
|
||||
const std::vector<std::pair<int,int>> FNAV_t0g_4_bit({{147,8}});
|
||||
const std::vector<std::pair<int,int>> FNAV_WNot_4_bit({{121,8}});
|
||||
const std::vector<std::pair<int,int>> FNAV_WNlsf_4_bit({{129,8}});
|
||||
const std::vector<std::pair<int,int>> FNAV_DN_4_bit({{137,3}});
|
||||
const std::vector<std::pair<int,int>> FNAV_deltatlsf_4_bit({{140,8}});
|
||||
const std::vector<std::pair<int,int>> FNAV_t0g_4_bit({{148,8}});
|
||||
const double FNAV_t0g_4_LSB = 3600;
|
||||
const std::vector<std::pair<int,int>> FNAV_A0g_4_bit({{155,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_A0g_4_bit({{156,16}});
|
||||
const double FNAV_A0g_4_LSB = TWO_N35;
|
||||
const std::vector<std::pair<int,int>> FNAV_A1g_4_bit({{171,12}});
|
||||
const std::vector<std::pair<int,int>> FNAV_A1g_4_bit({{172,12}});
|
||||
const double FNAV_A1g_4_LSB = TWO_N51;
|
||||
const std::vector<std::pair<int,int>> FNAV_WN0g_4_bit({{183,6}});
|
||||
const std::vector<std::pair<int,int>> FNAV_TOW_4_bit({{189,20}});
|
||||
const std::vector<std::pair<int,int>> FNAV_WN0g_4_bit({{184,6}});
|
||||
const std::vector<std::pair<int,int>> FNAV_TOW_4_bit({{190,20}});
|
||||
|
||||
// WORD 5 Almanac SVID1 SVID2(1/2)
|
||||
const std::vector<std::pair<int,int>> FNAV_IODa_5_bit({{6,4}});
|
||||
const std::vector<std::pair<int,int>> FNAV_WNa_5_bit({{10,2}});
|
||||
const std::vector<std::pair<int,int>> FNAV_t0a_5_bit({{12,10}});
|
||||
const std::vector<std::pair<int,int>> FNAV_IODa_5_bit({{7,4}});
|
||||
const std::vector<std::pair<int,int>> FNAV_WNa_5_bit({{11,2}});
|
||||
const std::vector<std::pair<int,int>> FNAV_t0a_5_bit({{13,10}});
|
||||
const double FNAV_t0a_5_LSB = 600;
|
||||
const std::vector<std::pair<int,int>> FNAV_SVID1_5_bit({{22,6}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Deltaa12_1_5_bit({{28,13}});
|
||||
const std::vector<std::pair<int,int>> FNAV_SVID1_5_bit({{23,6}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Deltaa12_1_5_bit({{29,13}});
|
||||
const double FNAV_Deltaa12_5_LSB = TWO_N9;
|
||||
const std::vector<std::pair<int,int>> FNAV_e_1_5_bit({{41,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_e_1_5_bit({{42,11}});
|
||||
const double FNAV_e_5_LSB = TWO_N16;
|
||||
const std::vector<std::pair<int,int>> FNAV_w_1_5_bit({{52,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_w_1_5_bit({{53,16}});
|
||||
const double FNAV_w_5_LSB = TWO_N15;
|
||||
const std::vector<std::pair<int,int>> FNAV_deltai_1_5_bit({{68,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_deltai_1_5_bit({{69,11}});
|
||||
const double FNAV_deltai_5_LSB = TWO_N14;
|
||||
const std::vector<std::pair<int,int>> FNAV_Omega0_1_5_bit({{79,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Omega0_1_5_bit({{80,16}});
|
||||
const double FNAV_Omega0_5_LSB = TWO_N15;
|
||||
const std::vector<std::pair<int,int>> FNAV_Omegadot_1_5_bit({{95,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Omegadot_1_5_bit({{96,11}});
|
||||
const double FNAV_Omegadot_5_LSB = TWO_N33;
|
||||
const std::vector<std::pair<int,int>> FNAV_M0_1_5_bit({{106,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_M0_1_5_bit({{107,16}});
|
||||
const double FNAV_M0_5_LSB = TWO_N15;
|
||||
const std::vector<std::pair<int,int>> FNAV_af0_1_5_bit({{122,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_af0_1_5_bit({{123,16}});
|
||||
const double FNAV_af0_5_LSB = TWO_N19;
|
||||
const std::vector<std::pair<int,int>> FNAV_af1_1_5_bit({{138,13}});
|
||||
const std::vector<std::pair<int,int>> FNAV_af1_1_5_bit({{139,13}});
|
||||
const double FNAV_af1_5_LSB = TWO_N38;
|
||||
const std::vector<std::pair<int,int>> FNAV_E5ahs_1_5_bit({{151,2}});
|
||||
const std::vector<std::pair<int,int>> FNAV_SVID2_5_bit({{153,6}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Deltaa12_2_5_bit({{159,13}});
|
||||
const std::vector<std::pair<int,int>> FNAV_e_2_5_bit({{172,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_w_2_5_bit({{183,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_deltai_2_5_bit({{199,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_E5ahs_1_5_bit({{152,2}});
|
||||
const std::vector<std::pair<int,int>> FNAV_SVID2_5_bit({{154,6}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Deltaa12_2_5_bit({{160,13}});
|
||||
const std::vector<std::pair<int,int>> FNAV_e_2_5_bit({{173,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_w_2_5_bit({{184,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_deltai_2_5_bit({{200,11}});
|
||||
//const std::vector<std::pair<int,int>> FNAV_Omega012_2_5_bit({{210,4}});
|
||||
|
||||
// WORD 6 Almanac SVID2(1/2) SVID3
|
||||
const std::vector<std::pair<int,int>> FNAV_IODa_6_bit({{6,4}});
|
||||
const std::vector<std::pair<int,int>> FNAV_IODa_6_bit({{7,4}});
|
||||
//const std::vector<std::pair<int,int>> FNAV_Omega022_2_6_bit({{10,12}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Omegadot_2_6_bit({{22,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_M0_2_6_bit({{33,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_af0_2_6_bit({{49,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_af1_2_6_bit({{65,13}});
|
||||
const std::vector<std::pair<int,int>> FNAV_E5ahs_2_6_bit({{78,2}});
|
||||
const std::vector<std::pair<int,int>> FNAV_SVID3_6_bit({{80,6}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Deltaa12_3_6_bit({{86,13}});
|
||||
const std::vector<std::pair<int,int>> FNAV_e_3_6_bit({{99,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_w_3_6_bit({{110,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_deltai_3_6_bit({{126,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Omega0_3_6_bit({{137,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Omegadot_3_6_bit({{153,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_M0_3_6_bit({{164,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_af0_3_6_bit({{180,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_af1_3_6_bit({{196,13}});
|
||||
const std::vector<std::pair<int,int>> FNAV_E5ahs_3_6_bit({{209,2}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Omegadot_2_6_bit({{23,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_M0_2_6_bit({{34,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_af0_2_6_bit({{50,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_af1_2_6_bit({{66,13}});
|
||||
const std::vector<std::pair<int,int>> FNAV_E5ahs_2_6_bit({{79,2}});
|
||||
const std::vector<std::pair<int,int>> FNAV_SVID3_6_bit({{81,6}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Deltaa12_3_6_bit({{87,13}});
|
||||
const std::vector<std::pair<int,int>> FNAV_e_3_6_bit({{100,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_w_3_6_bit({{111,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_deltai_3_6_bit({{127,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Omega0_3_6_bit({{138,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_Omegadot_3_6_bit({{154,11}});
|
||||
const std::vector<std::pair<int,int>> FNAV_M0_3_6_bit({{165,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_af0_3_6_bit({{181,16}});
|
||||
const std::vector<std::pair<int,int>> FNAV_af1_3_6_bit({{197,13}});
|
||||
const std::vector<std::pair<int,int>> FNAV_E5ahs_3_6_bit({{210,2}});
|
||||
|
||||
// Galileo E5a-I primary codes
|
||||
const std::string Galileo_E5a_I_PRIMARY_CODE[Galileo_E5a_NUMBER_OF_CODES] = {
|
||||
|
@ -69,7 +69,7 @@ void Galileo_Fnav_Message::reset()
|
||||
/* WORD 1 SVID, Clock correction, SISA, Ionospheric correction, BGD, GST, Signal
|
||||
* health and Data validity status*/
|
||||
FNAV_SV_ID_PRN_1 = 0;
|
||||
FNAV_IODnav_1 = 0;
|
||||
FNAV_IODnav_1 = -1;
|
||||
FNAV_t0c_1 = 0;
|
||||
FNAV_af0_1 = 0;
|
||||
FNAV_af1_1 = 0;
|
||||
@ -90,7 +90,7 @@ void Galileo_Fnav_Message::reset()
|
||||
FNAV_E5advs_1 = 0;
|
||||
|
||||
// WORD 2 Ephemeris (1/3) and GST
|
||||
FNAV_IODnav_2 = 0;
|
||||
FNAV_IODnav_2 = -2;
|
||||
FNAV_M0_2 = 0;
|
||||
FNAV_omegadot_2 = 0;
|
||||
FNAV_e_2 = 0;
|
||||
@ -101,7 +101,7 @@ void Galileo_Fnav_Message::reset()
|
||||
FNAV_TOW_2 = 0;
|
||||
|
||||
// WORD 3 Ephemeris (2/3) and GST
|
||||
FNAV_IODnav_3 = 0;
|
||||
FNAV_IODnav_3 = -3;
|
||||
FNAV_i0_3 = 0;
|
||||
FNAV_w_3 = 0;
|
||||
FNAV_deltan_3 = 0;
|
||||
@ -115,7 +115,7 @@ void Galileo_Fnav_Message::reset()
|
||||
|
||||
/* WORD 4 Ephemeris (3/3), GST-UTC conversion, GST-GPS conversion and TOW.
|
||||
Note that the clock is repeated in this page type*/
|
||||
FNAV_IODnav_4 = 0;
|
||||
FNAV_IODnav_4 = -4;
|
||||
FNAV_Cic_4 = 0;
|
||||
FNAV_Cis_4 = 0;
|
||||
FNAV_A0_4 = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user