diff --git a/conf/gnss-sdr_multichannel_all_in_one_Flexiband_bin_file_III_1b.conf b/conf/gnss-sdr_multichannel_all_in_one_Flexiband_bin_file_III_1b.conf new file mode 100644 index 000000000..7a108fba6 --- /dev/null +++ b/conf/gnss-sdr_multichannel_all_in_one_Flexiband_bin_file_III_1b.conf @@ -0,0 +1,571 @@ +; Default configuration file +; You can define your own receiver and invoke it by doing +; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf +; + +[GNSS-SDR] + +;######### GLOBAL OPTIONS ################## +;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. +GNSS-SDR.internal_fs_hz=5000000 + + +;######### SUPL RRLP GPS assistance configuration ##### +; Check http://www.mcc-mnc.com/ +; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en +GNSS-SDR.SUPL_gps_enabled=false +GNSS-SDR.SUPL_read_gps_assistance_xml=true +GNSS-SDR.SUPL_gps_ephemeris_server=supl.google.com +GNSS-SDR.SUPL_gps_ephemeris_port=7275 +GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com +GNSS-SDR.SUPL_gps_acquisition_port=7275 +GNSS-SDR.SUPL_MCC=244 +GNSS-SDR.SUPL_MNS=5 +GNSS-SDR.SUPL_LAC=0x59e2 +GNSS-SDR.SUPL_CI=0x31b0 + +;######### SIGNAL_SOURCE CONFIG ############ +;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) +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 + +;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. +SignalSource.item_type=gr_complex + +;# FPGA firmware file +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=3 + +;#frontend channels gain. Not usable yet! +SignalSource.gain1=0 +SignalSource.gain2=0 +SignalSource.gain3=0 + +;#frontend channels AGC +SignalSource.AGC=true + +;# USB 3.0 packet buffer size (number of SuperSpeed packets) +SignalSource.usb_packet_buffer=128 + +;###################################################### +;######### RF CHANNEL 0 SIGNAL CONDITIONER ############ +;###################################################### + +;######### SIGNAL_CONDITIONER 0 CONFIG ############ +;## It holds blocks to change data type, filter and resample input data. +SignalConditioner0.implementation=Signal_Conditioner + +;######### DATA_TYPE_ADAPTER 0 CONFIG ############ +DataTypeAdapter0.implementation=Pass_Through +DataTypeAdapter0.item_type=gr_complex + +;######### INPUT_FILTER 0 CONFIG ############ +;## Filter the input data. Can be combined with frequency translation for IF signals + +;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] +;#[Pass_Through] disables this block +;#[Fir_Filter] enables a FIR Filter +;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. + +InputFilter0.implementation=Freq_Xlating_Fir_Filter + +;#dump: Dump the filtered data to a file. +InputFilter0.dump=false + +;#dump_filename: Log path and filename. +InputFilter0.dump_filename=../data/input_filter_ch0.dat + +;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. +;#These options are based on parameters of gnuradio's function: gr_remez. +;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, +;#the desired reponse on those bands, and the weight given to the error in those bands. + +;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. +InputFilter0.input_item_type=gr_complex + +;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. +InputFilter0.output_item_type=gr_complex + +;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. +InputFilter0.taps_item_type=float + +;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time +InputFilter0.number_of_taps=5 + +;#number_of _bands: Number of frequency bands in the filter. +InputFilter0.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 + +InputFilter0.band1_begin=0.0 +InputFilter0.band1_end=0.45 +InputFilter0.band2_begin=0.55 +InputFilter0.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 + +InputFilter0.ampl1_begin=1.0 +InputFilter0.ampl1_end=1.0 +InputFilter0.ampl2_begin=0.0 +InputFilter0.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 +InputFilter0.band1_error=1.0 +InputFilter0.band2_error=1.0 + +;#filter_type: one of "bandpass", "hilbert" or "differentiator" +InputFilter0.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. +InputFilter0.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/ +InputFilter0.sampling_frequency=20000000 +;# IF deviation due to front-end LO inaccuracies [HZ] +;#InputFilter0.IF=-205000 +InputFilter0.IF=0 + +;# Decimation factor after the frequency tranaslating block +InputFilter0.decimation_factor=4 + +;######### RESAMPLER CONFIG 0 ############ +;## Resamples the input data. +Resampler0.implementation=Pass_Through + +;###################################################### +;######### RF CHANNEL 1 SIGNAL CONDITIONER ############ +;###################################################### + +;######### SIGNAL_CONDITIONER 1 CONFIG ############ +;## It holds blocks to change data type, filter and resample input data. +SignalConditioner1.implementation=Signal_Conditioner + +;######### DATA_TYPE_ADAPTER 1 CONFIG ############ +DataTypeAdapter1.implementation=Pass_Through +DataTypeAdapter1.item_type=gr_complex + +;######### INPUT_FILTER 0 CONFIG ############ +;## Filter the input data. Can be combined with frequency translation for IF signals + +;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] +;#[Pass_Through] disables this block +;#[Fir_Filter] enables a FIR Filter +;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. + +InputFilter1.implementation=Freq_Xlating_Fir_Filter + +;#dump: Dump the filtered data to a file. +InputFilter1.dump=false + +;#dump_filename: Log path and filename. +InputFilter1.dump_filename=../data/input_filter_ch1.dat + +;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. +;#These options are based on parameters of gnuradio's function: gr_remez. +;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, +;#the desired reponse on those bands, and the weight given to the error in those bands. + +;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. +InputFilter1.input_item_type=gr_complex + +;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. +InputFilter1.output_item_type=gr_complex + +;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. +InputFilter1.taps_item_type=float + +;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time +InputFilter1.number_of_taps=5 + +;#number_of _bands: Number of frequency bands in the filter. +InputFilter1.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 + +InputFilter1.band1_begin=0.0 +InputFilter1.band1_end=0.45 +InputFilter1.band2_begin=0.55 +InputFilter1.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 + +InputFilter1.ampl1_begin=1.0 +InputFilter1.ampl1_end=1.0 +InputFilter1.ampl2_begin=0.0 +InputFilter1.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 +InputFilter1.band1_error=1.0 +InputFilter1.band2_error=1.0 + +;#filter_type: one of "bandpass", "hilbert" or "differentiator" +InputFilter1.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. +InputFilter1.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/ +InputFilter1.sampling_frequency=20000000 +;# IF deviation due to front-end LO inaccuracies [HZ] +InputFilter1.IF=0 + +;# Decimation factor after the frequency tranaslating block +InputFilter1.decimation_factor=4 + + +;######### RESAMPLER CONFIG 1 ############ +;## 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=Signal_Conditioner + +;######### DATA_TYPE_ADAPTER 2 CONFIG ############ +DataTypeAdapter2.implementation=Pass_Through +DataTypeAdapter2.item_type=gr_complex + +;######### INPUT_FILTER 2 CONFIG ############ +;## 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_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 + +;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. +InputFilter2.output_item_type=gr_complex + +;#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=10 +Channels_1B.count=10 +Channels_2S.count=10 +Channels_5X.count=10 + +;#GPS.prns=7,8 + +;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver +Channels.in_acquisition=1 + +;# signal: +;# "1C" GPS L1 C/A +;# "2S" GPS L2 L2C (M) +;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) +;# "5X" GALILEO E5a I+Q +;# 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 +Channel4.RF_channel_ID=0 +Channel5.RF_channel_ID=0 +Channel6.RF_channel_ID=0 +Channel7.RF_channel_ID=0 +Channel8.RF_channel_ID=0 +Channel9.RF_channel_ID=0 +Channel10.RF_channel_ID=1 +Channel11.RF_channel_ID=1 +Channel12.RF_channel_ID=1 +Channel13.RF_channel_ID=1 +Channel14.RF_channel_ID=1 +Channel15.RF_channel_ID=1 +Channel16.RF_channel_ID=1 +Channel17.RF_channel_ID=1 +Channel18.RF_channel_ID=1 +Channel19.RF_channel_ID=1 +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 ###### +;#The following options are specific to each channel and overwrite the generic options + +;# GPS L1 CA +Acquisition_1C.dump=false +Acquisition_1C.dump_filename=./acq_dump.dat +Acquisition_1C.item_type=gr_complex +Acquisition_1C.if=0 +Acquisition_1C.coherent_integration_time_ms=1 +Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition +Acquisition_1C.threshold=0.005 +Acquisition_1C.doppler_max=5000 +Acquisition_1C.doppler_step=250 +Acquisition_1C.bit_transition_flag=false +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 +Acquisition_2S.dump=false +Acquisition_2S.dump_filename=./acq_dump.dat +Acquisition_2S.item_type=gr_complex +Acquisition_2S.if=0 +Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition +Acquisition_2S.threshold=0.00074 +;Acquisition_2S.pfa=0.001 +Acquisition_2S.doppler_max=5000 +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.009 +Acquisition_5X.doppler_max=5000 +Acquisition_5X.doppler_step=125 +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 ############ + +;######### GPS L1 C/A GENERIC TRACKING CONFIG ############ +Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking +Tracking_1C.item_type=gr_complex +Tracking_1C.if=0 +Tracking_1C.dump=false +Tracking_1C.dump_filename=../data/epl_tracking_ch_ +Tracking_1C.pll_bw_hz=35.0; +Tracking_1C.dll_bw_hz=2.0; +Tracking_1C.order=3; +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 ############ +Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking +Tracking_2S.item_type=gr_complex +Tracking_2S.if=0 +Tracking_2S.dump=false +Tracking_2S.dump_filename=./tracking_ch_ +Tracking_2S.pll_bw_hz=2.0; +Tracking_2S.dll_bw_hz=0.25; +Tracking_2S.order=2; +Tracking_2S.early_late_space_chips=0.5; + +;######### GALILEO E5 TRK CONFIG ############ +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_1B.implementation=Galileo_E1B_Telemetry_Decoder +TelemetryDecoder_1B.dump=false + +TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder +TelemetryDecoder_2S.dump=false + +TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder +TelemetryDecoder_5X.dump=false + +;######### OBSERVABLES CONFIG ############ +;#implementation: +Observables.implementation=Hybrid_Observables +;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] +Observables.dump=false +;#dump_filename: Log path and filename. +Observables.dump_filename=./observables.dat + + +;######### PVT CONFIG ############ +;#implementation: Position Velocity and Time (PVT) implementation: +PVT.implementation=RTKLIB_PVT + +PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic +PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX +PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad + +;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] +PVT.output_rate_ms=10 + +;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. +PVT.display_rate_ms=100 + +;# KML, GeoJSON, NMEA and RTCM output configuration + +;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. +PVT.dump_filename=./PVT + +;#nmea_dump_filename: NMEA log path and filename +PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; + +;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) +PVT.flag_nmea_tty_port=false; + +;#nmea_dump_devname: serial device descriptor for NMEA logging +PVT.nmea_dump_devname=/dev/pts/4 + +PVT.flag_rtcm_server=false +PVT.flag_rtcm_tty_port=false +PVT.rtcm_dump_devname=/dev/pts/1 + +;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] +PVT.dump=false diff --git a/src/algorithms/observables/gnuradio_blocks/hybrid_observables_cc.cc b/src/algorithms/observables/gnuradio_blocks/hybrid_observables_cc.cc index 7093407b4..1422077ab 100644 --- a/src/algorithms/observables/gnuradio_blocks/hybrid_observables_cc.cc +++ b/src/algorithms/observables/gnuradio_blocks/hybrid_observables_cc.cc @@ -147,7 +147,6 @@ int hybrid_observables_cc::general_work (int noutput_items, */ 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 for (int j = 0; j < n_consume[i]; j++) { diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e5a_telemetry_decoder_cc.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e5a_telemetry_decoder_cc.cc index 16a9c0eb5..14973e191 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e5a_telemetry_decoder_cc.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e5a_telemetry_decoder_cc.cc @@ -58,16 +58,6 @@ galileo_e5a_make_telemetry_decoder_cc(Gnss_Satellite satellite, bool dump) } -void galileo_e5a_telemetry_decoder_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - //ninput_items_required[0] = GALILEO_FNAV_SAMPLES_PER_PAGE; // set the required sample history - if (noutput_items != 0) - { - ninput_items_required[0] = GALILEO_FNAV_CODES_PER_PREAMBLE; - } -} - - void galileo_e5a_telemetry_decoder_cc::viterbi_decoder(double *page_part_symbols, int *page_part_bits) { // int CodeLength = 240; diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e5a_telemetry_decoder_cc.h b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e5a_telemetry_decoder_cc.h index 6ddb3bba3..81a609274 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e5a_telemetry_decoder_cc.h +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e5a_telemetry_decoder_cc.h @@ -74,12 +74,6 @@ public: int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); - /*! - * \brief Function which tells the scheduler how many input items - * are required to produce noutput_items output items. - */ - void forecast (int noutput_items, gr_vector_int &ninput_items_required); - private: friend galileo_e5a_telemetry_decoder_cc_sptr galileo_e5a_make_telemetry_decoder_cc(Gnss_Satellite satellite, bool dump); @@ -94,6 +88,7 @@ private: int d_preamble_bits[GALILEO_FNAV_PREAMBLE_LENGTH_BITS]; // signed int d_page_symbols[GALILEO_FNAV_SYMBOLS_PER_PAGE + GALILEO_FNAV_PREAMBLE_LENGTH_BITS]; double d_page_symbols[GALILEO_FNAV_SYMBOLS_PER_PAGE + GALILEO_FNAV_PREAMBLE_LENGTH_BITS]; + // signed int *d_preamble_symbols; double d_current_symbol; long unsigned int d_symbol_counter; diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.cc index 6db371746..ddb39d229 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.cc @@ -35,7 +35,6 @@ #include #include #include "control_message_factory.h" -#include "gnss_synchro.h" #ifndef _rotl #define _rotl(X,N) ((X << N) ^ (X >> (32-N))) // Used in the parity check algorithm @@ -49,11 +48,6 @@ gps_l1_ca_make_telemetry_decoder_cc(Gnss_Satellite satellite, bool dump) return gps_l1_ca_telemetry_decoder_cc_sptr(new gps_l1_ca_telemetry_decoder_cc(satellite, dump)); } -void gps_l1_ca_telemetry_decoder_cc::forecast (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items_required) -{ - ninput_items_required[0] = GPS_CA_PREAMBLE_LENGTH_SYMBOLS; //set the required sample history -} - gps_l1_ca_telemetry_decoder_cc::gps_l1_ca_telemetry_decoder_cc( Gnss_Satellite satellite, bool dump) : @@ -109,8 +103,7 @@ gps_l1_ca_telemetry_decoder_cc::gps_l1_ca_telemetry_decoder_cc( d_decimation_output_factor = 1; d_channel = 0; 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 - this->set_min_output_buffer(5000); + } @@ -155,24 +148,35 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_ // ########### Output the tracking data to navigation and PVT ########## const Gnss_Synchro **in = (const Gnss_Synchro **) &input_items[0]; //Get the input samples pointer - //******* preamble correlation ******** - for (unsigned int i = 0; i < GPS_CA_PREAMBLE_LENGTH_SYMBOLS; i++) - { - if (in[0][i].Flag_valid_symbol_output == true) - { - if (in[0][i].Prompt_I < 0) // symbols clipping - { - corr_value -= d_preambles_symbols[i] * in[0][i].correlation_length_ms; - } - else - { - corr_value += d_preambles_symbols[i] * in[0][i].correlation_length_ms; - } - } - if (corr_value >= GPS_CA_PREAMBLE_LENGTH_SYMBOLS) break; - } + Gnss_Synchro current_symbol; //structure to save the synchronization information and send the output object to the next block + //1. Copy the current tracking output + current_symbol = in[0][0]; + d_symbol_history.push_back(current_symbol); //add new symbol to the symbol queue + consume_each(1); + + unsigned int required_symbols=GPS_CA_PREAMBLE_LENGTH_SYMBOLS; d_flag_preamble = false; + if (d_symbol_history.size()>required_symbols) + { + //******* preamble correlation ******** + for (unsigned int i = 0; i < GPS_CA_PREAMBLE_LENGTH_SYMBOLS; i++) + { + if (d_symbol_history.at(i).Flag_valid_symbol_output == true) + { + if (d_symbol_history.at(i).Prompt_I < 0) // symbols clipping + { + corr_value -= d_preambles_symbols[i] * d_symbol_history.at(i).correlation_length_ms; + } + else + { + corr_value += d_preambles_symbols[i] * d_symbol_history.at(i).correlation_length_ms; + } + } + if (corr_value >= GPS_CA_PREAMBLE_LENGTH_SYMBOLS) break; + } + + } //******* frame sync ****************** if (abs(corr_value) == GPS_CA_PREAMBLE_LENGTH_SYMBOLS) { @@ -181,8 +185,8 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_ { d_GPS_FSM.Event_gps_word_preamble(); //record the preamble sample stamp - d_preamble_time_samples = in[0][0].Tracking_sample_counter; // record the preamble sample stamp - DLOG(INFO) << "Preamble detection for SAT " << this->d_satellite << "in[0][0].Tracking_sample_counter=" << in[0][0].Tracking_sample_counter; + d_preamble_time_samples = d_symbol_history.at(0).Tracking_sample_counter; // record the preamble sample stamp + DLOG(INFO) << "Preamble detection for SAT " << this->d_satellite << "d_symbol_history.at(0).Tracking_sample_counter=" << d_symbol_history.at(0).Tracking_sample_counter; //sync the symbol to bits integrator d_symbol_accumulator = 0; d_symbol_accumulator_counter = 0; @@ -191,17 +195,17 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_ } else if (d_stat == 1) //check 6 seconds of preamble separation { - preamble_diff_ms = round((((double)in[0][0].Tracking_sample_counter - d_preamble_time_samples)/(double)in[0][0].fs) * 1000.0); + preamble_diff_ms = round((((double)d_symbol_history.at(0).Tracking_sample_counter - d_preamble_time_samples)/(double)d_symbol_history.at(0).fs) * 1000.0); if (abs(preamble_diff_ms - GPS_SUBFRAME_MS) < 1) { DLOG(INFO) << "Preamble confirmation for SAT " << this->d_satellite; d_GPS_FSM.Event_gps_word_preamble(); d_flag_preamble = true; - d_preamble_time_samples = in[0][0].Tracking_sample_counter; // record the PRN start sample index associated to the preamble + d_preamble_time_samples = d_symbol_history.at(0).Tracking_sample_counter; // record the PRN start sample index associated to the preamble if (!d_flag_frame_sync) { // send asynchronous message to tracking to inform of frame sync and extend correlation time - pmt::pmt_t value = pmt::from_double((double)d_preamble_time_samples/(double)in[0][0].fs - 0.001); + pmt::pmt_t value = pmt::from_double((double)d_preamble_time_samples/(double)d_symbol_history.at(0).fs - 0.001); this->message_port_pub(pmt::mp("preamble_timestamp_s"), value); d_flag_frame_sync = true; if (corr_value < 0) @@ -213,7 +217,7 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_ { flag_PLL_180_deg_phase_locked = false; } - DLOG(INFO) << " Frame sync SAT " << this->d_satellite << " with preamble start at " << (double)d_preamble_time_samples/(double)in[0][0].fs << " [s]"; + DLOG(INFO) << " Frame sync SAT " << this->d_satellite << " with preamble start at " << (double)d_preamble_time_samples/(double)d_symbol_history.at(0).fs << " [s]"; } } } @@ -222,7 +226,7 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_ { if (d_stat == 1) { - preamble_diff_ms = round((((double)in[0][0].Tracking_sample_counter - (double)d_preamble_time_samples)/(double)in[0][0].fs) * 1000.0); + preamble_diff_ms = round((((double)d_symbol_history.at(0).Tracking_sample_counter - (double)d_preamble_time_samples)/(double)d_symbol_history.at(0).fs) * 1000.0); if (preamble_diff_ms > GPS_SUBFRAME_MS+1) { DLOG(INFO) << "Lost of frame sync SAT " << this->d_satellite << " preamble_diff= " << preamble_diff_ms; @@ -234,11 +238,11 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_ } //******* SYMBOL TO BIT ******* - if (in[0][0].Flag_valid_symbol_output == true) + if (d_symbol_history.at(0).Flag_valid_symbol_output == true) { // extended correlation to bit period is enabled in tracking! - d_symbol_accumulator += in[0][0].Prompt_I; // accumulate the input value in d_symbol_accumulator - d_symbol_accumulator_counter += in[0][0].correlation_length_ms; + d_symbol_accumulator += d_symbol_history.at(0).Prompt_I; // accumulate the input value in d_symbol_accumulator + d_symbol_accumulator_counter += d_symbol_history.at(0).correlation_length_ms; } if (d_symbol_accumulator_counter >= 20) { @@ -328,19 +332,14 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_ d_GPS_frame_4bytes <<= 1; //shift 1 bit left the telemetry word } } - // output the frame - consume_each(1); // one by one - - 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 - current_synchro_data = in[0][0]; //2. Add the telemetry decoder information if (this->d_flag_preamble == true and d_flag_new_tow_available==true) { - // update TOW at the preamble instant - d_TOW_at_Preamble = d_GPS_FSM.d_nav.d_TOW + GPS_L1_CA_CODE_PERIOD; + //double decoder_latency_ms=(double)(current_symbol.Tracking_sample_counter-d_symbol_history.at(0).Tracking_sample_counter) + // /(double)current_symbol.fs; + // update TOW at the preamble instant (account with decoder latency) + d_TOW_at_Preamble = d_GPS_FSM.d_nav.d_TOW + GPS_L1_CA_CODE_PERIOD + GPS_CA_PREAMBLE_DURATION_S; d_TOW_at_current_symbol = floor(d_TOW_at_Preamble*1000.0)/1000.0; flag_TOW_set = true; @@ -351,14 +350,14 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_ d_TOW_at_current_symbol = d_TOW_at_current_symbol + GPS_L1_CA_CODE_PERIOD; } - current_synchro_data.TOW_at_current_symbol_s = d_TOW_at_current_symbol; - current_synchro_data.Flag_valid_word = flag_TOW_set; + current_symbol.TOW_at_current_symbol_s = d_TOW_at_current_symbol; + current_symbol.Flag_valid_word = flag_TOW_set; if (flag_PLL_180_deg_phase_locked == true) { //correct the accumulated phase for the Costas loop phase shift, if required - current_synchro_data.Carrier_phase_rads += GPS_PI; + current_symbol.Carrier_phase_rads += GPS_PI; } if(d_dump == true) @@ -370,7 +369,7 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_ unsigned long int tmp_ulong_int; tmp_double = d_TOW_at_current_symbol; d_dump_file.write((char*)&tmp_double, sizeof(double)); - tmp_ulong_int = current_synchro_data.Tracking_sample_counter; + tmp_ulong_int = current_symbol.Tracking_sample_counter; d_dump_file.write((char*)&tmp_ulong_int, sizeof(unsigned long int)); tmp_double = d_TOW_at_Preamble; d_dump_file.write((char*)&tmp_double, sizeof(double)); @@ -380,8 +379,15 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_ LOG(WARNING) << "Exception writing observables dump file " << e.what(); } } + + // remove used symbols from history + if (d_symbol_history.size()>required_symbols) + { + d_symbol_history.pop_front(); + } //3. Make the output (copy the object contents to the GNURadio reserved memory) - *out[0] = current_synchro_data; + *out[0] = current_symbol; + return 1; } diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h index 1fe3ff8e4..8ccc0cb8d 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h @@ -39,7 +39,7 @@ #include "gps_l1_ca_subframe_fsm.h" #include "concurrent_queue.h" #include "gnss_satellite.h" - +#include "gnss_synchro.h" class gps_l1_ca_telemetry_decoder_cc; @@ -66,12 +66,6 @@ public: int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); - /*! - * \brief Function which tells the scheduler how many input items - * are required to produce noutput_items output items. - */ - void forecast (int noutput_items, gr_vector_int &ninput_items_required); - private: friend gps_l1_ca_telemetry_decoder_cc_sptr gps_l1_ca_make_telemetry_decoder_cc(Gnss_Satellite satellite, bool dump); @@ -80,8 +74,6 @@ private: bool gps_word_parityCheck(unsigned int gpsword); - // constants - //unsigned short int d_preambles_bits[GPS_CA_PREAMBLE_LENGTH_BITS]; // class private vars int *d_preambles_symbols; @@ -89,8 +81,8 @@ private: bool d_flag_frame_sync; // symbols - std::deque d_symbol_history; - std::deque d_correlation_length_ms_history; + std::deque d_symbol_history; + double d_symbol_accumulator; short int d_symbol_accumulator_counter; diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_cc.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_cc.cc index 591ccbe69..d90135bb6 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_cc.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_cc.cc @@ -83,17 +83,6 @@ sbas_l1_telemetry_decoder_cc::~sbas_l1_telemetry_decoder_cc() } - -void sbas_l1_telemetry_decoder_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - unsigned ninputs = ninput_items_required.size (); - for (unsigned i = 0; i < ninputs; i++) - ninput_items_required[i] = noutput_items; - VLOG(LMORE) << "forecast(): " << "noutput_items=" << noutput_items << "\tninput_items_required ninput_items_required.size()=" << ninput_items_required.size(); -} - - - int sbas_l1_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) { @@ -102,19 +91,15 @@ int sbas_l1_telemetry_decoder_cc::general_work (int noutput_items __attribute__( const Gnss_Synchro *in = (const Gnss_Synchro *) input_items[0]; // input Gnss_Synchro *out = (Gnss_Synchro *) output_items[0]; // output + Gnss_Synchro current_symbol; //structure to save the synchronization information and send the output object to the next block + //1. Copy the current tracking output + current_symbol = in[0]; + // copy correlation samples into samples vector + d_sample_buf.push_back(current_symbol.Prompt_I); //add new symbol to the symbol queue + // store the time stamp of the first sample in the processed sample block double sample_stamp = in[0].Tracking_sample_counter/in[0].fs; - // copy correlation samples into samples vector - for (int i = 0; i < noutput_items; i++) - { - // check if channel is in tracking state - //if(in[i].Prompt_I != in[i].Prompt_Q) // TODO: check for real condition - { - d_sample_buf.push_back(in[i].Prompt_I); - } - } - // decode only if enough samples in buffer if(d_sample_buf.size() >= d_block_size) { @@ -174,16 +159,10 @@ int sbas_l1_telemetry_decoder_cc::general_work (int noutput_items __attribute__( // UPDATE GNSS SYNCHRO DATA // actually the SBAS telemetry decoder doesn't support ranging - Gnss_Synchro * current_synchro_data = out; //structure to save the synchronization information and send the output object to the next block - for (int i = 0; i < noutput_items; i++) - { - //1. Copy the current tracking output - current_synchro_data[i] = in[i]; - //2. Add the telemetry decoder information - current_synchro_data[i].Flag_valid_word = false; // indicate to observable block that this synchro object isn't valid for pseudorange computation - } - consume_each(noutput_items); // tell scheduler input items consumed - return noutput_items; // tell scheduler output items produced + current_symbol.Flag_valid_word = false; // indicate to observable block that this synchro object isn't valid for pseudorange computation + out[0]=current_symbol; + consume_each(1); // tell scheduler input items consumed + return 1; // tell scheduler output items produced } diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_cc.h b/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_cc.h index 84138491a..4e9b6af96 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_cc.h +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_cc.h @@ -66,12 +66,6 @@ public: int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); - /*! - * \brief Function which tells the scheduler how many input items - * are required to produce noutput_items output items. - */ - void forecast (int noutput_items, gr_vector_int &ninput_items_required); - private: friend sbas_l1_telemetry_decoder_cc_sptr sbas_l1_make_telemetry_decoder_cc(Gnss_Satellite satellite, bool dump); diff --git a/src/core/system_parameters/GPS_L1_CA.h b/src/core/system_parameters/GPS_L1_CA.h index e72c076fb..58249a60c 100644 --- a/src/core/system_parameters/GPS_L1_CA.h +++ b/src/core/system_parameters/GPS_L1_CA.h @@ -76,6 +76,7 @@ const int GPS_L1_CA_HISTORY_DEEP = 100; #define GPS_PREAMBLE {1, 0, 0, 0, 1, 0, 1, 1} const int GPS_CA_PREAMBLE_LENGTH_BITS = 8; const int GPS_CA_PREAMBLE_LENGTH_SYMBOLS = 160; +const double GPS_CA_PREAMBLE_DURATION_S = 0.160; const int GPS_CA_TELEMETRY_RATE_BITS_SECOND = 50; //!< NAV message bit rate [bits/s] const int GPS_CA_TELEMETRY_SYMBOLS_PER_BIT = 20; const int GPS_CA_TELEMETRY_RATE_SYMBOLS_SECOND = GPS_CA_TELEMETRY_RATE_BITS_SECOND*GPS_CA_TELEMETRY_SYMBOLS_PER_BIT; //!< NAV message bit rate [symbols/s] diff --git a/src/core/system_parameters/Galileo_E1.h b/src/core/system_parameters/Galileo_E1.h index 22260a145..fcd1e5129 100644 --- a/src/core/system_parameters/Galileo_E1.h +++ b/src/core/system_parameters/Galileo_E1.h @@ -71,6 +71,7 @@ const int GALILEO_E1_HISTORY_DEEP=100; #define GALILEO_INAV_PREAMBLE {0, 1, 0, 1, 1, 0, 0, 0, 0, 0} const int GALILEO_INAV_PREAMBLE_LENGTH_BITS = 10; +const double GALILEO_INAV_PAGE_PART_WITH_PREABLE_SECONDS = 2.0 + GALILEO_INAV_PREAMBLE_LENGTH_BITS*Galileo_E1_CODE_PERIOD; const int GALILEO_INAV_PREAMBLE_PERIOD_SYMBOLS = 250; const int GALILEO_INAV_PAGE_PART_SYMBOLS = 250; //!< Each Galileo INAV pages are composed of two parts (even and odd) each of 250 symbols, including preamble. See Galileo ICD 4.3.2 const int GALILEO_INAV_PAGE_SYMBOLS = 500; //!< The complete Galileo INAV page length