several receiver configuration mechanism simplifications and several bug fixes. Work in progress

This commit is contained in:
Javier Arribas 2016-04-21 18:54:08 +02:00
parent 5cdd6b2cc9
commit 0a5573f666
47 changed files with 776 additions and 2044 deletions

View File

@ -1,7 +1,7 @@
; Configuration file for using USRP X300 as a RF front-end for GPS L1 signals. ; Configuration file for using USRP X300 as a RF front-end for GPS L1 signals.
; Set SignalSource.device_address to the IP address of your device ; Set SignalSource.device_address to the IP address of your device
; and run: ; and run:
; gnss-sdr --config_file=/path/to/gnss-sdr_GPS_L1_USRP_X300_realtime.conf ; gnss-sdr --config_file=/path/to/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf
; ;
[GNSS-SDR] [GNSS-SDR]
@ -29,11 +29,12 @@ GNSS-SDR.SUPL_CI=0x31b0
; # implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) ; # implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=UHD_Signal_Source SignalSource.implementation=UHD_Signal_Source
; # When left empty, the device discovery routines will search all available transports on the system (ethernet, usb...) ; # When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...)
SignalSource.device_address=192.168.40.2 SignalSource.device_address=192.168.40.2
; # 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
SignalSource.item_type=cshort
; # sampling_frequency: Original Signal sampling frequency in [Hz] ; # sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=4000000 SignalSource.sampling_frequency=4000000
@ -42,7 +43,7 @@ SignalSource.sampling_frequency=4000000
SignalSource.freq=1575420000 SignalSource.freq=1575420000
; # gain: Front-end Gain in [dB] ; # gain: Front-end Gain in [dB]
SignalSource.gain=50 SignalSource.gain=40
; # subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) ; # subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
SignalSource.subdevice=A:0 SignalSource.subdevice=A:0
@ -69,13 +70,15 @@ SignalSource.enable_throttle_control=false
;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#implementation: Use [Pass_Through] or [Signal_Conditioner]
;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Signal_Conditioner
SignalConditioner.implementation=Pass_Through ;SignalConditioner.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER CONFIG ############ ;######### DATA_TYPE_ADAPTER CONFIG ############
;## Changes the type of input data. Please disable it in this version. ;## Changes the type of input data. Please disable it in this version.
;#implementation: [Pass_Through] disables this block ;#implementation: [Pass_Through] disables this block
DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.implementation=Pass_Through
DataTypeAdapter.item_type=cshort
;DataTypeAdapter.item_type=cbyte
;######### INPUT_FILTER CONFIG ############ ;######### INPUT_FILTER CONFIG ############
;## Filter the input data. Can be combined with frequency translation for IF signals ;## Filter the input data. Can be combined with frequency translation for IF signals
@ -85,9 +88,9 @@ DataTypeAdapter.implementation=Pass_Through
;#[Fir_Filter] enables a FIR Filter ;#[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. ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
;InputFilter.implementation=Fir_Filter InputFilter.implementation=Fir_Filter
;InputFilter.implementation=Freq_Xlating_Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter
InputFilter.implementation=Pass_Through ;InputFilter.implementation=Pass_Through
;#dump: Dump the filtered data to a file. ;#dump: Dump the filtered data to a file.
InputFilter.dump=false InputFilter.dump=false
@ -100,7 +103,7 @@ InputFilter.dump_filename=../data/input_filter.dat
;#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. ;#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. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter.input_item_type=gr_complex InputFilter.input_item_type=cshort
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter.output_item_type=gr_complex InputFilter.output_item_type=gr_complex
@ -109,7 +112,7 @@ InputFilter.output_item_type=gr_complex
InputFilter.taps_item_type=float InputFilter.taps_item_type=float
;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter.number_of_taps=5 InputFilter.number_of_taps=11
;#number_of _bands: Number of frequency bands in the filter. ;#number_of _bands: Number of frequency bands in the filter.
InputFilter.number_of_bands=2 InputFilter.number_of_bands=2
@ -119,8 +122,8 @@ InputFilter.number_of_bands=2
;#The number of band_begin and band_end elements must match the number of bands ;#The number of band_begin and band_end elements must match the number of bands
InputFilter.band1_begin=0.0 InputFilter.band1_begin=0.0
InputFilter.band1_end=0.45 InputFilter.band1_end=0.48
InputFilter.band2_begin=0.55 InputFilter.band2_begin=0.52
InputFilter.band2_end=1.0 InputFilter.band2_end=1.0
;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
@ -177,17 +180,29 @@ Resampler.sample_freq_out=4000000
;######### CHANNELS GLOBAL CONFIG ############ ;######### CHANNELS GLOBAL CONFIG ############
;#count: Number of available GPS satellite channels. ;#count: Number of available GPS satellite channels.
Channels_GPS.count=12 Channels_1C.count=8
;#count: Number of available Galileo satellite channels. ;#count: Number of available Galileo satellite channels.
Channels_Galileo.count=0 Channels_1B.count=0
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1 Channels.in_acquisition=1
;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
;#if the option is disabled by default is assigned GPS ;#if the option is disabled by default is assigned GPS
Channel.system=GPS ;Channel.system=GPS
;#if the option is disabled by default is assigned "1C" GPS L1 C/A
Channel.signal=1C Channel.signal=1C
;#if the option is disabled by default is assigned "1C" GPS L1 C/A
;Channel0.signal=1C
;Channel1.signal=1C
;Channel2.signal=1C
;Channel3.signal=1C
;Channel4.signal=1C
;Channel5.signal=1C
;Channel6.signal=1C
;Channel7.signal=1C
;Channel8.signal=1C
;Channel9.signal=1C
;Channel10.signal=1C
;Channel11.signal=1C
;######### SPECIFIC CHANNELS CONFIG ###### ;######### SPECIFIC CHANNELS 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
@ -210,30 +225,30 @@ Channel.signal=1C
;######### ACQUISITION GLOBAL CONFIG ############ ;######### ACQUISITION GLOBAL CONFIG ############
;#dump: Enable or disable the acquisition internal data file logging [true] or [false] ;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
Acquisition_GPS.dump=false Acquisition_1C.dump=false
;#filename: Log path and filename ;#filename: Log path and filename
Acquisition_GPS.dump_filename=./acq_dump.dat Acquisition_1C.dump_filename=./acq_dump.dat
;#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.
Acquisition_GPS.item_type=gr_complex Acquisition_1C.item_type=gr_complex
;#if: Signal intermediate frequency in [Hz] ;#if: Signal intermediate frequency in [Hz]
Acquisition_GPS.if=0 Acquisition_1C.if=0
;#sampled_ms: Signal block duration for the acquisition signal detection [ms] ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
Acquisition_GPS.coherent_integration_time_ms=1 Acquisition_1C.coherent_integration_time_ms=1
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
;Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Tong_Acquisition
;#threshold: Acquisition threshold. It will be ignored if pfa is defined. ;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
Acquisition_GPS.threshold=0.005 Acquisition_1C.threshold=0.01
;#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] ;#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_GPS.pfa=0.001 ;Acquisition_1C.pfa=0.00001
;#doppler_max: Maximum expected Doppler shift [Hz] ;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_GPS.doppler_max=6000 Acquisition_1C.doppler_max=8000
;#doppler_max: Doppler step in the grid search [Hz] ;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_GPS.doppler_step=500 Acquisition_1C.doppler_step=500
;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
Acquisition_GPS.bit_transition_flag=false maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
Acquisition_1C.bit_transition_flag=false
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
Acquisition_GPS.max_dwells=1 Acquisition_1C.max_dwells=1
;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CHANNELS CONFIG ######
@ -243,37 +258,37 @@ Acquisition_GPS.max_dwells=1
;######### TRACKING GLOBAL CONFIG ############ ;######### TRACKING GLOBAL CONFIG ############
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
;#item_type: Type and resolution for each of the signal samples. ;#item_type: Type and resolution for each of the signal samples.
Tracking_GPS.item_type=gr_complex Tracking_1C.item_type=gr_complex
;#sampling_frequency: Signal Intermediate Frequency in [Hz] ;#sampling_frequency: Signal Intermediate Frequency in [Hz]
Tracking_GPS.if=0 Tracking_1C.if=0
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
Tracking_GPS.dump=false Tracking_1C.dump=false
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_GPS.dump_filename=./tracking_ch_ Tracking_1C.dump_filename=./tracking_ch_
;#pll_bw_hz: PLL loop filter bandwidth [Hz] ;#pll_bw_hz: PLL loop filter bandwidth [Hz]
Tracking_GPS.pll_bw_hz=30.0; Tracking_1C.pll_bw_hz=30.0;
;#dll_bw_hz: DLL loop filter bandwidth [Hz] ;#dll_bw_hz: DLL loop filter bandwidth [Hz]
Tracking_GPS.dll_bw_hz=4.0; Tracking_1C.dll_bw_hz=4.0;
;#order: PLL/DLL loop filter order [2] or [3] ;#order: PLL/DLL loop filter order [2] or [3]
Tracking_GPS.order=3; Tracking_1C.order=3;
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
Tracking_GPS.early_late_space_chips=0.5; Tracking_1C.early_late_space_chips=0.5;
;######### TELEMETRY DECODER GPS CONFIG ############ ;######### TELEMETRY DECODER GPS CONFIG ############
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_GPS.dump=false TelemetryDecoder_1C.dump=false
;#decimation factor ;#decimation factor
TelemetryDecoder_GPS.decimation_factor=1; TelemetryDecoder_1C.decimation_factor=1;
;######### OBSERVABLES CONFIG ############ ;######### OBSERVABLES CONFIG ############
;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
@ -302,7 +317,7 @@ PVT.output_rate_ms=100
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500 PVT.display_rate_ms=500
;# RINEX, KML, and NMEA output configuration ;# 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. ;#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 PVT.dump_filename=./PVT
@ -316,7 +331,7 @@ PVT.flag_nmea_tty_port=false;
;#nmea_dump_devname: serial device descriptor for NMEA logging ;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4 PVT.nmea_dump_devname=/dev/pts/4
PVT.flag_rtcm_server=false PVT.flag_rtcm_server=true
PVT.flag_rtcm_tty_port=false PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_dump_devname=/dev/pts/1

View File

@ -1,4 +1,3 @@
; Default configuration file
; You can define your own receiver and invoke it by doing ; You can define your own receiver and invoke it by doing
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
; ;
@ -13,281 +12,73 @@ GNSS-SDR.internal_fs_hz=4000000
ControlThread.wait_for_flowgraph=false ControlThread.wait_for_flowgraph=false
;######### SIGNAL_SOURCE CONFIG ############ ;######### SIGNAL_SOURCE CONFIG ############
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=File_Signal_Source SignalSource.implementation=File_Signal_Source
SignalSource.filename=/datalogger/signals/Agilent/New York/4msps.dat
;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.item_type=gr_complex
SignalSource.filename=/home/javier/ClionProjects/gnss-sim/build/signal_out.bin
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
SignalSource.item_type=byte
;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=4000000 SignalSource.sampling_frequency=4000000
;#freq: RF front-end center frequency in [Hz]
SignalSource.freq=1575420000 SignalSource.freq=1575420000
SignalSource.samples=250000000
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0
;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false SignalSource.repeat=false
;#dump: Dump the Signal source data to a file. Disable this option in this version
SignalSource.dump=false SignalSource.dump=false
SignalSource.dump_filename=../data/signal_source.dat SignalSource.dump_filename=../data/signal_source.dat
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
; it helps to not overload the CPU, but the processing time will be longer.
SignalSource.enable_throttle_control=false SignalSource.enable_throttle_control=false
;######### SIGNAL_CONDITIONER CONFIG ############ ;######### SIGNAL_CONDITIONER CONFIG ############
;## It holds blocks to change data type, filter and resample input data. SignalConditioner.implementation=Pass_Through
;#implementation: Use [Pass_Through] or [Signal_Conditioner]
;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
;SignalConditioner.implementation=Signal_Conditioner
SignalConditioner.implementation=Signal_Conditioner
;######### DATA_TYPE_ADAPTER CONFIG ############
;## Changes the type of input data. Please disable it in this version.
;#implementation: [Pass_Through] disables this block
DataTypeAdapter.implementation=Ibyte_To_Complex
;######### INPUT_FILTER 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.
;InputFilter.implementation=Fir_Filter
;InputFilter.implementation=Freq_Xlating_Fir_Filter
InputFilter.implementation=Pass_Through
;#dump: Dump the filtered data to a file.
InputFilter.dump=false
;#dump_filename: Log path and filename.
InputFilter.dump_filename=../data/input_filter.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.
InputFilter.input_item_type=gr_complex
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter.output_item_type=gr_complex
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
InputFilter.taps_item_type=float
;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter.number_of_taps=5
;#number_of _bands: Number of frequency bands in the filter.
InputFilter.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
InputFilter.band1_begin=0.0
InputFilter.band1_end=0.45
InputFilter.band2_begin=0.55
InputFilter.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
InputFilter.ampl1_begin=1.0
InputFilter.ampl1_end=1.0
InputFilter.ampl2_begin=0.0
InputFilter.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
InputFilter.band1_error=1.0
InputFilter.band2_error=1.0
;#filter_type: one of "bandpass", "hilbert" or "differentiator"
InputFilter.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.
InputFilter.grid_density=16
;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
InputFilter.sampling_frequency=4000000
InputFilter.IF=0
;######### RESAMPLER CONFIG ############
;## Resamples the input data.
;#implementation: Use [Pass_Through] or [Direct_Resampler]
;#[Pass_Through] disables this block
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
;Resampler.implementation=Direct_Resampler
Resampler.implementation=Pass_Through
;#dump: Dump the resamplered data to a file.
Resampler.dump=false
;#dump_filename: Log path and filename.
Resampler.dump_filename=../data/resampler.dat
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
Resampler.item_type=gr_complex
;#sample_freq_in: the sample frequency of the input signal
Resampler.sample_freq_in=8000000
;#sample_freq_out: the desired sample frequency of the output signal
Resampler.sample_freq_out=4000000
;######### CHANNELS GLOBAL CONFIG ############ ;######### CHANNELS GLOBAL CONFIG ############
;#count: Number of available GPS satellite channels. Channels_1C.count=8
Channels_GPS.count=12
;#count: Number of available Galileo satellite channels.
Channels_Galileo.count=0
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1 Channels.in_acquisition=1
;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
;#if the option is disabled by default is assigned GPS
Channel.system=GPS
;#if the option is disabled by default is assigned "1C" GPS L1 C/A
Channel.signal=1C Channel.signal=1C
;######### SPECIFIC CHANNELS CONFIG ######
;#The following options are specific to each channel and overwrite the generic options
;######### CHANNEL 0 CONFIG ############
;Channel0.system=GPS
;Channel0.signal=1C
;#satellite: Satellite PRN ID for this channel. Disable this option to random search
;Channel0.satellite=11
;######### CHANNEL 1 CONFIG ############
;Channel1.system=GPS
;Channel1.signal=1C
;Channel1.satellite=18
;######### ACQUISITION GLOBAL CONFIG ############ ;######### ACQUISITION GLOBAL CONFIG ############
Acquisition_1C.dump=false
;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump_filename=./acq_dump.dat
Acquisition_GPS.dump=false Acquisition_1C.item_type=gr_complex
;#filename: Log path and filename Acquisition_1C.if=0
Acquisition_GPS.dump_filename=./acq_dump.dat Acquisition_1C.sampled_ms=1
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
Acquisition_GPS.item_type=gr_complex Acquisition_1C.threshold=0.005
;#if: Signal intermediate frequency in [Hz] ;Acquisition_1C.pfa=0.01
Acquisition_GPS.if=0 Acquisition_1C.doppler_max=10000
;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.doppler_step=500
Acquisition_GPS.sampled_ms=1
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition
;#threshold: Acquisition threshold
Acquisition_GPS.threshold=0.01
;#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_GPS.pfa=0.01
;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_GPS.doppler_max=6000
;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_GPS.doppler_step=100
;######### TRACKING GLOBAL CONFIG ############ ;######### TRACKING GLOBAL CONFIG ############
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU
;#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_1C.item_type=gr_complex
Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU Tracking_1C.if=0
;#item_type: Type and resolution for each of the signal samples. Tracking_1C.dump=false
Tracking_GPS.item_type=gr_complex Tracking_1C.dump_filename=../data/epl_tracking_ch_
Tracking_1C.pll_bw_hz=45.0;
;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.dll_bw_hz=2.0;
Tracking_GPS.if=0 Tracking_1C.order=3;
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
Tracking_GPS.dump=true
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_GPS.dump_filename=../data/epl_tracking_ch_
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
Tracking_GPS.pll_bw_hz=15.0;
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
Tracking_GPS.dll_bw_hz=1.5
;#order: PLL/DLL loop filter order [2] or [3]
Tracking_GPS.order=3;
;######### TELEMETRY DECODER GPS CONFIG ############ ;######### TELEMETRY DECODER GPS CONFIG ############
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false
TelemetryDecoder_GPS.dump=false TelemetryDecoder_1C.decimation_factor=1;
;#decimation factor
TelemetryDecoder_GPS.decimation_factor=1;
;######### OBSERVABLES CONFIG ############ ;######### OBSERVABLES CONFIG ############
;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
Observables.implementation=GPS_L1_CA_Observables Observables.implementation=GPS_L1_CA_Observables
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
Observables.dump=false Observables.dump=false
;#dump_filename: Log path and filename.
Observables.dump_filename=./observables.dat Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############ ;######### PVT CONFIG ############
;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
PVT.implementation=GPS_L1_CA_PVT PVT.implementation=GPS_L1_CA_PVT
;#averaging_depth: Number of PVT observations in the moving average algorithm
PVT.averaging_depth=100 PVT.averaging_depth=100
;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
PVT.flag_averaging=false PVT.flag_averaging=false
;#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 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=500 PVT.display_rate_ms=500
;# 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 PVT.dump_filename=./PVT
;#nmea_dump_filename: NMEA log path and filename
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; 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; PVT.flag_nmea_tty_port=false;
;#nmea_dump_devname: serial device descriptor for NMEA logging
PVT.nmea_dump_devname=/dev/pts/4 PVT.nmea_dump_devname=/dev/pts/4
PVT.flag_rtcm_server=false PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1 PVT.rtcm_dump_devname=/dev/pts/1
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false PVT.dump=false

View File

@ -1,20 +1,22 @@
; Configuration file for using USRP X300 as a RF front-end for GPS L1 signals. ; Default configuration file
; Set SignalSource.device_address to the IP address of your device ; You can define your own receiver and invoke it by doing
; and run: ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
; gnss-sdr --config_file=/path/to/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf
; ;
[GNSS-SDR] [GNSS-SDR]
;######### GLOBAL OPTIONS ################## ;######### GLOBAL OPTIONS ##################
;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
GNSS-SDR.internal_fs_hz=4000000 ;GNSS-SDR.internal_fs_hz=6826700
GNSS-SDR.internal_fs_hz=2560000
;GNSS-SDR.internal_fs_hz=4096000
;GNSS-SDR.internal_fs_hz=5120000
;######### CONTROL_THREAD CONFIG ############ ;######### CONTROL_THREAD CONFIG ############
ControlThread.wait_for_flowgraph=false ControlThread.wait_for_flowgraph=false
;######### SUPL RRLP GPS assistance configuration ##### ;######### SUPL RRLP GPS assistance configuration #####
GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_gps_enabled=true
GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_read_gps_assistance_xml=true
GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com
GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_ephemeris_port=7275
@ -26,36 +28,30 @@ GNSS-SDR.SUPL_LAC=0x59e2
GNSS-SDR.SUPL_CI=0x31b0 GNSS-SDR.SUPL_CI=0x31b0
;######### SIGNAL_SOURCE CONFIG ############ ;######### SIGNAL_SOURCE CONFIG ############
; # implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) ;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=UHD_Signal_Source SignalSource.implementation=Nsr_File_Signal_Source
; # When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...) ;#filename: path to file with the captured GNSS signal samples to be processed
SignalSource.device_address=192.168.40.2 SignalSource.filename=/media/javier/SISTEMA/signals/ifen/E1L1_FE0_Band0.stream
; # 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=byte
SignalSource.item_type=cshort
; # sampling_frequency: Original Signal sampling frequency in [Hz] ;#sampling_frequency: Original Signal sampling frequency in [Hz]
SignalSource.sampling_frequency=4000000 SignalSource.sampling_frequency=20480000
; # freq: RF front-end center frequency in [Hz] ;#freq: RF front-end center frequency in [Hz]
SignalSource.freq=1575420000 SignalSource.freq=1575420000
; # gain: Front-end Gain in [dB] ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.gain=40
; # subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
SignalSource.subdevice=A:0
; # samples: Number of samples to be processed. Notice that 0 indicates the entire file.
SignalSource.samples=0 SignalSource.samples=0
; # repeat: Repeat the processing file. Disable this option in this version ;#repeat: Repeat the processing file. Disable this option in this version
SignalSource.repeat=false SignalSource.repeat=false
; # dump: Dump the Signal source data to a file. Disable this option in this version ;#dump: Dump the Signal source data to a file. Disable this option in this version
SignalSource.dump=false SignalSource.dump=false
SignalSource.dump_filename=../data/signal_source.dat SignalSource.dump_filename=../data/signal_source.dat
@ -71,26 +67,21 @@ SignalSource.enable_throttle_control=false
;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks
;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks
SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Signal_Conditioner
;SignalConditioner.implementation=Pass_Through
;######### DATA_TYPE_ADAPTER CONFIG ############ ;######### DATA_TYPE_ADAPTER CONFIG ############
;## Changes the type of input data. Please disable it in this version. ;## Changes the type of input data.
;#implementation: [Pass_Through] disables this block ;#implementation: [Pass_Through] disables this block
DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.implementation=Pass_Through
DataTypeAdapter.item_type=cshort DataTypeAdapter.item_type=float
;DataTypeAdapter.item_type=cbyte
;######### INPUT_FILTER CONFIG ############ ;######### INPUT_FILTER CONFIG ############
;## Filter the input data. Can be combined with frequency translation for IF signals ;## 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] ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
;#[Pass_Through] disables this block ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
;#[Fir_Filter] enables a FIR Filter ;# that shifts IF down to zero Hz.
;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
InputFilter.implementation=Fir_Filter InputFilter.implementation=Freq_Xlating_Fir_Filter
;InputFilter.implementation=Freq_Xlating_Fir_Filter
;InputFilter.implementation=Pass_Through
;#dump: Dump the filtered data to a file. ;#dump: Dump the filtered data to a file.
InputFilter.dump=false InputFilter.dump=false
@ -100,10 +91,12 @@ InputFilter.dump_filename=../data/input_filter.dat
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#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 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. ;#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. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
InputFilter.input_item_type=cshort InputFilter.input_item_type=float
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
InputFilter.output_item_type=gr_complex InputFilter.output_item_type=gr_complex
@ -112,7 +105,7 @@ InputFilter.output_item_type=gr_complex
InputFilter.taps_item_type=float InputFilter.taps_item_type=float
;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
InputFilter.number_of_taps=11 InputFilter.number_of_taps=5
;#number_of _bands: Number of frequency bands in the filter. ;#number_of _bands: Number of frequency bands in the filter.
InputFilter.number_of_bands=2 InputFilter.number_of_bands=2
@ -122,8 +115,8 @@ InputFilter.number_of_bands=2
;#The number of band_begin and band_end elements must match the number of bands ;#The number of band_begin and band_end elements must match the number of bands
InputFilter.band1_begin=0.0 InputFilter.band1_begin=0.0
InputFilter.band1_end=0.48 InputFilter.band1_end=0.45
InputFilter.band2_begin=0.52 InputFilter.band2_begin=0.55
InputFilter.band2_end=1.0 InputFilter.band2_end=1.0
;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
@ -146,12 +139,16 @@ InputFilter.filter_type=bandpass
;The minimum value is 16; higher values are slower to compute the filter. ;The minimum value is 16; higher values are slower to compute the filter.
InputFilter.grid_density=16 InputFilter.grid_density=16
;# Original sampling frequency stored in the signal file
InputFilter.sampling_frequency=20480000
;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
InputFilter.sampling_frequency=4000000 InputFilter.IF=5499998.47412109
InputFilter.IF=0
;# Decimation factor after the frequency tranaslating block
InputFilter.decimation_factor=8
;######### RESAMPLER CONFIG ############ ;######### RESAMPLER CONFIG ############
@ -160,69 +157,25 @@ InputFilter.IF=0
;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#implementation: Use [Pass_Through] or [Direct_Resampler]
;#[Pass_Through] disables this block ;#[Pass_Through] disables this block
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
;Resampler.implementation=Direct_Resampler
Resampler.implementation=Pass_Through Resampler.implementation=Pass_Through
;#dump: Dump the resampled data to a file.
Resampler.dump=false
;#dump_filename: Log path and filename.
Resampler.dump_filename=../data/resampler.dat
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
Resampler.item_type=gr_complex
;#sample_freq_in: the sample frequency of the input signal
Resampler.sample_freq_in=4000000
;#sample_freq_out: the desired sample frequency of the output signal
Resampler.sample_freq_out=4000000
;######### CHANNELS GLOBAL CONFIG ############ ;######### CHANNELS GLOBAL CONFIG ############
;#count: Number of available GPS satellite channels. ;#count: Number of available GPS satellite channels.
Channels_1C.count=8 Channels_1C.count=8
;#count: Number of available Galileo satellite channels. ;#count: Number of available Galileo satellite channels.
Channels_1B.count=0 Channels_1B.count=8
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1 Channels.in_acquisition=1
;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
;#if the option is disabled by default is assigned GPS
;Channel.system=GPS
Channel.signal=1C
;#if the option is disabled by default is assigned "1C" GPS L1 C/A
;Channel0.signal=1C ;#signal:
;Channel1.signal=1C ;# "1C" GPS L1 C/A
;Channel2.signal=1C ;# "2S" GPS L2 L2C (M)
;Channel3.signal=1C ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
;Channel4.signal=1C ;# "5X" GALILEO E5a I+Q
;Channel5.signal=1C
;Channel6.signal=1C
;Channel7.signal=1C
;Channel8.signal=1C
;Channel9.signal=1C
;Channel10.signal=1C
;Channel11.signal=1C
;######### SPECIFIC CHANNELS CONFIG ######
;#The following options are specific to each channel and overwrite the generic options
;######### CHANNEL 0 CONFIG ############
;Channel0.system=GPS
;Channel0.signal=1C
;#satellite: Satellite PRN ID for this channel. Disable this option to random search
;Channel0.satellite=11
;######### CHANNEL 1 CONFIG ############
;Channel1.system=GPS
;Channel1.signal=1C
;Channel1.satellite=18
;######### ACQUISITION GLOBAL CONFIG ############
;######### GPS ACQUISITION CONFIG ############
;#dump: Enable or disable the acquisition internal data file logging [true] or [false] ;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
Acquisition_1C.dump=false Acquisition_1C.dump=false
@ -233,33 +186,47 @@ Acquisition_1C.item_type=gr_complex
;#if: Signal intermediate frequency in [Hz] ;#if: Signal intermediate frequency in [Hz]
Acquisition_1C.if=0 Acquisition_1C.if=0
;#sampled_ms: Signal block duration for the acquisition signal detection [ms] ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
Acquisition_1C.coherent_integration_time_ms=1 Acquisition_1C.sampled_ms=1
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
;#threshold: Acquisition threshold. It will be ignored if pfa is defined. ;#threshold: Acquisition threshold
Acquisition_1C.threshold=0.01 Acquisition_1C.threshold=0.0075
;#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] ;#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_1C.pfa=0.00001 ;Acquisition_1C.pfa=0.01
;#doppler_max: Maximum expected Doppler shift [Hz] ;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_1C.doppler_max=8000 Acquisition_1C.doppler_max=5000
;#doppler_max: Doppler step in the grid search [Hz] ;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1C.doppler_step=500 Acquisition_1C.doppler_step=250
;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
Acquisition_1C.bit_transition_flag=false
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
Acquisition_1C.max_dwells=1
;######### ACQUISITION CHANNELS CONFIG ###### ;######### GALILEO ACQUISITION CONFIG ############
;#The following options are specific to each channel and overwrite the generic options
;#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=15000
;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_1B.doppler_step=125
;######### TRACKING GLOBAL CONFIG ############ ;######### TRACKING GPS CONFIG ############
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] ;#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_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
;#item_type: Type and resolution for each of the signal samples. ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
Tracking_1C.item_type=gr_complex Tracking_1C.item_type=gr_complex
;#sampling_frequency: Signal Intermediate Frequency in [Hz] ;#sampling_frequency: Signal Intermediate Frequency in [Hz]
@ -269,30 +236,80 @@ Tracking_1C.if=0
Tracking_1C.dump=false Tracking_1C.dump=false
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_1C.dump_filename=./tracking_ch_ Tracking_1C.dump_filename=../data/epl_tracking_ch_
;# Extended correlation after telemetry bit synchronization
;# Valid values are: [1,2,4,5,10,20] (integer divisors of the GPS L1 CA bit period (20 ms) )
;# Longer integration period require more stable front-end LO
Tracking_1C.extend_correlation_ms=10
;#pll_bw_hz: PLL loop filter bandwidth [Hz] ;#pll_bw_hz: PLL loop filter bandwidth [Hz]
Tracking_1C.pll_bw_hz=30.0;
Tracking_1C.pll_bw_hz=45;
Tracking_1C.pll_bw_narrow_hz=40;
;#dll_bw_hz: DLL loop filter bandwidth [Hz] ;#dll_bw_hz: DLL loop filter bandwidth [Hz]
Tracking_1C.dll_bw_hz=4.0; Tracking_1C.dll_bw_hz=2.0;
Tracking_1C.dll_bw_narrow_hz=2.0;
;#fll_bw_hz: FLL loop filter bandwidth [Hz]
Tracking_1C.fll_bw_hz=10.0;
;#order: PLL/DLL loop filter order [2] or [3] ;#order: PLL/DLL loop filter order [2] or [3]
Tracking_1C.order=3; Tracking_1C.order=3;
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] ;######### TRACKING GALILEO CONFIG ############
Tracking_1C.early_late_space_chips=0.5;
;#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;
;#fll_bw_hz: FLL loop filter bandwidth [Hz]
Tracking_1B.fll_bw_hz=10.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;
;######### TELEMETRY DECODER GPS CONFIG ############ ;######### TELEMETRY DECODER GPS CONFIG ############
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.dump=false
;#decimation factor ;#decimation factor
TelemetryDecoder_1C.decimation_factor=1; TelemetryDecoder_1C.decimation_factor=4;
;######### TELEMETRY DECODER GALILEO CONFIG ############
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
TelemetryDecoder_1B.dump=false
TelemetryDecoder_1B_factor=4;
;######### OBSERVABLES CONFIG ############ ;######### OBSERVABLES CONFIG ############
;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
Observables.implementation=GPS_L1_CA_Observables Observables.implementation=Hybrid_Observables
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
Observables.dump=false Observables.dump=false
@ -302,38 +319,27 @@ Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############ ;######### PVT CONFIG ############
;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT Hybrid_PVT GALILEO_E1_PVT] in this version.
PVT.implementation=GPS_L1_CA_PVT PVT.implementation=Hybrid_PVT
;#averaging_depth: Number of PVT observations in the moving average algorithm ;#averaging_depth: Number of PVT observations in the moving average algorithm
PVT.averaging_depth=10 PVT.averaging_depth=10
;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
PVT.flag_averaging=true PVT.flag_averaging=false
;#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] ;#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=100 PVT.output_rate_ms=10;
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500 PVT.display_rate_ms=500;
;# KML, GeoJSON, NMEA and RTCM output configuration ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
PVT.dump=false
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. ;#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 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=true
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

View File

@ -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=/datalogger/L125_III1b_210s.usb SignalSource.signal_file=/media/javier/SISTEMA/signals/front-end fraunhoffer/L125_III1b_210s.usb
;#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
@ -130,7 +130,8 @@ InputFilter0.grid_density=16
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ ; 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 InputFilter0.sampling_frequency=20000000
;# IF deviation due to front-end LO inaccuracies [HZ] ;# IF deviation due to front-end LO inaccuracies [HZ]
InputFilter0.IF=-205000 InputFilter0.IF=0;
;#-205000
;# Decimation factor after the frequency tranaslating block ;# Decimation factor after the frequency tranaslating block
InputFilter0.decimation_factor=8 InputFilter0.decimation_factor=8
@ -195,14 +196,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_GPS.count=8 Channels_1C.count=8
;#count: Number of available Galileo satellite channels.
Channels_Galileo.count=0
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1 Channels.in_acquisition=1
;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
;#if the option is disabled by default is assigned GPS
Channel.system=GPS
;# CHANNEL CONNECTION ;# CHANNEL CONNECTION
Channel0.RF_channel_ID=0 Channel0.RF_channel_ID=0
@ -225,31 +222,32 @@ Channel.signal=1C
;######### ACQUISITION GLOBAL CONFIG ############ ;######### ACQUISITION GLOBAL CONFIG ############
;#dump: Enable or disable the acquisition internal data file logging [true] or [false] ;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
Acquisition_GPS.dump=false Acquisition_1C.dump=false
;#filename: Log path and filename ;#filename: Log path and filename
Acquisition_GPS.dump_filename=./acq_dump.dat Acquisition_1C.dump_filename=./acq_dump.dat
;#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.
Acquisition_GPS.item_type=gr_complex Acquisition_1C.item_type=gr_complex
;#if: Signal intermediate frequency in [Hz] ;#if: Signal intermediate frequency in [Hz]
Acquisition_GPS.if=0 Acquisition_1C.if=0
;#sampled_ms: Signal block duration for the acquisition signal detection [ms] ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
Acquisition_GPS.coherent_integration_time_ms=1 Acquisition_1C.coherent_integration_time_ms=1
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
Acquisition_1C.use_CFAR_algorithm=false;
;#threshold: Acquisition threshold. It will be ignored if pfa is defined. ;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
Acquisition_GPS.threshold=0.012 Acquisition_1C.threshold=15
;#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] ;#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_GPS.pfa=0.0001 ;Acquisition_1C.pfa=0.0001
;#doppler_max: Maximum expected Doppler shift [Hz] ;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_GPS.doppler_max=10000 Acquisition_1C.doppler_max=10000
;#doppler_max: Doppler step in the grid search [Hz] ;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_GPS.doppler_step=250 Acquisition_1C.doppler_step=250
;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
Acquisition_GPS.bit_transition_flag=false Acquisition_1C.bit_transition_flag=false
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
Acquisition_GPS.max_dwells=1 Acquisition_1C.max_dwells=1
;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CHANNELS CONFIG ######
@ -259,37 +257,41 @@ Acquisition_GPS.max_dwells=1
;######### TRACKING GLOBAL CONFIG ############ ;######### TRACKING GLOBAL CONFIG ############
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
;#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.
Tracking_GPS.item_type=gr_complex Tracking_1C.item_type=gr_complex
;#sampling_frequency: Signal Intermediate Frequency in [Hz] ;#sampling_frequency: Signal Intermediate Frequency in [Hz]
Tracking_GPS.if=0 Tracking_1C.if=0
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
Tracking_GPS.dump=false Tracking_1C.dump=true
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_GPS.dump_filename=./tracking_ch_ Tracking_1C.dump_filename=../data/epl_tracking_ch_
Tracking_1C.extend_correlation_ms=10
;#pll_bw_hz: PLL loop filter bandwidth [Hz] ;#pll_bw_hz: PLL loop filter bandwidth [Hz]
Tracking_GPS.pll_bw_hz=40.0; Tracking_1C.pll_bw_hz=40.0;
Tracking_1C.pll_bw_narrow_hz=35;
;#dll_bw_hz: DLL loop filter bandwidth [Hz] ;#dll_bw_hz: DLL loop filter bandwidth [Hz]
Tracking_GPS.dll_bw_hz=3.0; Tracking_1C.dll_bw_hz=2.0;
Tracking_1C.dll_bw_narrow_hz=2.0;
;#order: PLL/DLL loop filter order [2] or [3] ;#order: PLL/DLL loop filter order [2] or [3]
Tracking_GPS.order=3; Tracking_1C.order=3;
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
Tracking_GPS.early_late_space_chips=0.5; Tracking_1C.early_late_space_chips=0.5;
;######### TELEMETRY DECODER GPS CONFIG ############ ;######### TELEMETRY DECODER GPS CONFIG ############
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_GPS.dump=false TelemetryDecoder_1C.dump=false
;#decimation factor ;#decimation factor
TelemetryDecoder_GPS.decimation_factor=1; TelemetryDecoder_1C.decimation_factor=1;
;######### OBSERVABLES CONFIG ############ ;######### OBSERVABLES CONFIG ############
;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.

View File

@ -192,7 +192,7 @@ 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_GPS.count=8 Channels_1C.count=8
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1 Channels.in_acquisition=1
@ -232,31 +232,31 @@ Channel7.signal=1C
;######### ACQUISITION GLOBAL CONFIG ############ ;######### ACQUISITION GLOBAL CONFIG ############
;#dump: Enable or disable the acquisition internal data file logging [true] or [false] ;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
Acquisition_GPS.dump=false Acquisition_1C.dump=false
;#filename: Log path and filename ;#filename: Log path and filename
Acquisition_GPS.dump_filename=./acq_dump.dat Acquisition_1C.dump_filename=./acq_dump.dat
;#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.
Acquisition_GPS.item_type=gr_complex Acquisition_1C.item_type=gr_complex
;#if: Signal intermediate frequency in [Hz] ;#if: Signal intermediate frequency in [Hz]
Acquisition_GPS.if=0 Acquisition_1C.if=0
;#sampled_ms: Signal block duration for the acquisition signal detection [ms] ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
Acquisition_GPS.coherent_integration_time_ms=1 Acquisition_1C.coherent_integration_time_ms=1
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
;#threshold: Acquisition threshold. It will be ignored if pfa is defined. ;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
Acquisition_GPS.threshold=0.012 Acquisition_1C.threshold=0.012
;#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] ;#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_GPS.pfa=0.0001 ;Acquisition_1C.pfa=0.0001
;#doppler_max: Maximum expected Doppler shift [Hz] ;#doppler_max: Maximum expected Doppler shift [Hz]
Acquisition_GPS.doppler_max=10000 Acquisition_1C.doppler_max=10000
;#doppler_max: Doppler step in the grid search [Hz] ;#doppler_max: Doppler step in the grid search [Hz]
Acquisition_GPS.doppler_step=250 Acquisition_1C.doppler_step=250
;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take
;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition]
;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition])
Acquisition_GPS.bit_transition_flag=false Acquisition_1C.bit_transition_flag=false
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
Acquisition_GPS.max_dwells=1 Acquisition_1C.max_dwells=1
;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CHANNELS CONFIG ######
@ -266,37 +266,37 @@ Acquisition_GPS.max_dwells=1
;######### TRACKING GLOBAL CONFIG ############ ;######### TRACKING GLOBAL CONFIG ############
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
;#item_type: Type and resolution for each of the signal samples. ;#item_type: Type and resolution for each of the signal samples.
Tracking_GPS.item_type=gr_complex Tracking_1C.item_type=gr_complex
;#sampling_frequency: Signal Intermediate Frequency in [Hz] ;#sampling_frequency: Signal Intermediate Frequency in [Hz]
Tracking_GPS.if=0 Tracking_1C.if=0
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
Tracking_GPS.dump=false Tracking_1C.dump=false
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
Tracking_GPS.dump_filename=./tracking_ch_ Tracking_1C.dump_filename=./tracking_ch_
;#pll_bw_hz: PLL loop filter bandwidth [Hz] ;#pll_bw_hz: PLL loop filter bandwidth [Hz]
Tracking_GPS.pll_bw_hz=40.0; Tracking_1C.pll_bw_hz=40.0;
;#dll_bw_hz: DLL loop filter bandwidth [Hz] ;#dll_bw_hz: DLL loop filter bandwidth [Hz]
Tracking_GPS.dll_bw_hz=3.0; Tracking_1C.dll_bw_hz=3.0;
;#order: PLL/DLL loop filter order [2] or [3] ;#order: PLL/DLL loop filter order [2] or [3]
Tracking_GPS.order=3; Tracking_1C.order=3;
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
Tracking_GPS.early_late_space_chips=0.5; Tracking_1C.early_late_space_chips=0.5;
;######### TELEMETRY DECODER GPS CONFIG ############ ;######### TELEMETRY DECODER GPS CONFIG ############
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_GPS.dump=false TelemetryDecoder_1C.dump=false
;#decimation factor ;#decimation factor
TelemetryDecoder_GPS.decimation_factor=1; TelemetryDecoder_1C.decimation_factor=1;
;######### OBSERVABLES CONFIG ############ ;######### OBSERVABLES CONFIG ############
;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.

View File

@ -29,8 +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=/datalogger/L125_III1b_210s.usb SignalSource.signal_file=/media/javier/SISTEMA/signals/front-end fraunhoffer/L125_III1b_210s.usb
#SignalSource.signal_file=/datalogger/captures/flexiband_III_1b_cap1.usb
;#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
@ -270,15 +269,13 @@ 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=8 Channels_1C.count=2
Channels_1B.count=1 Channels_1B.count=4
Channels_2S.count=1 Channels_2S.count=4
;#count: Number of available Galileo satellite channels.
;Channels_Galileo.count=0
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1 Channels.in_acquisition=1
;#signal: ;#signal:
;# "1C" GPS L1 C/A ;# "1C" GPS L1 C/A
;# "2S" GPS L2 L2C (M) ;# "2S" GPS L2 L2C (M)
@ -288,55 +285,22 @@ Channels.in_acquisition=1
;# CHANNEL CONNECTION ;# CHANNEL CONNECTION
Channel0.RF_channel_ID=0 Channel0.RF_channel_ID=0
Channel0.signal=1C
Channel1.RF_channel_ID=0 Channel1.RF_channel_ID=0
Channel1.signal=1C Channel2.RF_channel_ID=1
Channel3.RF_channel_ID=1
Channel2.RF_channel_ID=0 Channel4.RF_channel_ID=1
Channel2.signal=1C Channel5.RF_channel_ID=1
Channel3.RF_channel_ID=0
Channel3.signal=1C
Channel4.RF_channel_ID=0
Channel4.signal=1C
Channel5.RF_channel_ID=0
Channel5.signal=1C
Channel6.RF_channel_ID=0 Channel6.RF_channel_ID=0
Channel6.signal=1C
Channel7.RF_channel_ID=0 Channel7.RF_channel_ID=0
Channel7.signal=1C
Channel8.RF_channel_ID=0 Channel8.RF_channel_ID=0
Channel8.signal=1B Channel9.RF_channel_ID=0
Channel9.RF_channel_ID=1
Channel9.signal=2S
Channel10.RF_channel_ID=1 Channel10.RF_channel_ID=1
Channel10.signal=2S
Channel11.RF_channel_ID=1 Channel11.RF_channel_ID=1
Channel11.signal=2S
Channel12.RF_channel_ID=1 Channel12.RF_channel_ID=1
Channel12.signal=2S
Channel13.RF_channel_ID=1 Channel13.RF_channel_ID=1
Channel13.signal=2S
Channel14.RF_channel_ID=1 Channel14.RF_channel_ID=1
Channel14.signal=2S
Channel15.RF_channel_ID=1 Channel15.RF_channel_ID=1
Channel15.signal=2S
Channel16.RF_channel_ID=1
Channel16.signal=2S
;######### SPECIFIC CHANNELS CONFIG ###### ;######### SPECIFIC CHANNELS 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
@ -378,7 +342,7 @@ Acquisition_1C.max_dwells=1
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
Tracking_1C.item_type=gr_complex Tracking_1C.item_type=gr_complex
Tracking_1C.if=0 Tracking_1C.if=0
Tracking_1C.dump=false Tracking_1C.dump=false
@ -404,8 +368,8 @@ Acquisition_2S.max_dwells=1
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S.item_type=gr_complex Tracking_2S.item_type=gr_complex
Tracking_2S.if=0 Tracking_2S.if=0
Tracking_2S.dump=false Tracking_2S.dump=true
Tracking_2S.dump_filename=./tracking_ch_ Tracking_2S.dump_filename=../data/epl_tracking_ch_
Tracking_2S.pll_bw_hz=1.5; Tracking_2S.pll_bw_hz=1.5;
Tracking_2S.dll_bw_hz=0.3; Tracking_2S.dll_bw_hz=0.3;
Tracking_2S.order=3; Tracking_2S.order=3;
@ -489,7 +453,7 @@ TelemetryDecoder_1B.decimation_factor=5;
;######### OBSERVABLES CONFIG ############ ;######### OBSERVABLES CONFIG ############
;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.
Observables.implementation=Mixed_Observables Observables.implementation=Hybrid_Observables
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
Observables.dump=false Observables.dump=false
@ -500,19 +464,19 @@ Observables.dump_filename=./observables.dat
;######### PVT CONFIG ############ ;######### PVT CONFIG ############
;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
PVT.implementation=GPS_L1_CA_PVT PVT.implementation=Hybrid_PVT
;#averaging_depth: Number of PVT observations in the moving average algorithm ;#averaging_depth: Number of PVT observations in the moving average algorithm
PVT.averaging_depth=10 PVT.averaging_depth=10
;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
PVT.flag_averaging=true PVT.flag_averaging=false
;#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] ;#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=100 PVT.output_rate_ms=100
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
PVT.display_rate_ms=500 PVT.display_rate_ms=100
;# KML, GeoJSON, NMEA and RTCM output configuration ;# KML, GeoJSON, NMEA and RTCM output configuration

View File

@ -28,9 +28,9 @@ GNSS-SDR.SUPL_CI=0x31b0
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
SignalSource.implementation=Flexiband_Signal_Source SignalSource.implementation=Flexiband_Signal_Source
SignalSource.flag_read_file=false SignalSource.flag_read_file=true
;SignalSource.signal_file=/datalogger/captures/eclipse/eclipse_IIIa_2.bin ;SignalSource.signal_file=/datalogger/captures/eclipse/eclipse_IIIa_2.bin
SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb SignalSource.signal_file=/media/javier/SISTEMA/signals/front-end fraunhoffer/L125_III1b_210s.usb
;#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
@ -269,7 +269,7 @@ 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=1
Channels_2S.count=1 Channels_2S.count=7
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1 Channels.in_acquisition=1
@ -282,17 +282,14 @@ Channels.in_acquisition=1
;# CHANNEL CONNECTION ;# CHANNEL CONNECTION
Channel0.RF_channel_ID=0 Channel0.RF_channel_ID=0
Channel0.signal=1C
Channel1.RF_channel_ID=1 Channel1.RF_channel_ID=1
Channel1.signal=2S Channel2.RF_channel_ID=0
Channel3.RF_channel_ID=0
;Channel2.RF_channel_ID=0 Channel4.RF_channel_ID=0
;Channel3.RF_channel_ID=0 Channel5.RF_channel_ID=0
;Channel4.RF_channel_ID=0 Channel6.RF_channel_ID=0
;Channel5.RF_channel_ID=0 Channel7.RF_channel_ID=0
;Channel6.RF_channel_ID=0
;Channel7.RF_channel_ID=0
;######### SPECIFIC CHANNELS CONFIG ###### ;######### SPECIFIC CHANNELS CONFIG ######

View File

@ -29,8 +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=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb SignalSource.signal_file=/media/javier/SISTEMA/signals/front-end fraunhoffer/L125_III1b_210s.usb
SignalSource.signal_file=/datalogger/captures/test.dat
;#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
@ -269,13 +268,11 @@ 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=1
Channels_2S.count=1 Channels_2S.count=5
;#count: Number of available Galileo satellite channels. ;#count: Number of available Galileo satellite channels.
;Channels_Galileo.count=0
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
Channels.in_acquisition=1 Channels.in_acquisition=1
;#signal: ;#signal:
;# "1C" GPS L1 C/A ;# "1C" GPS L1 C/A
;# "2S" GPS L2 L2C (M) ;# "2S" GPS L2 L2C (M)
@ -285,53 +282,21 @@ Channels.in_acquisition=1
;# CHANNEL CONNECTION ;# CHANNEL CONNECTION
Channel0.RF_channel_ID=0 Channel0.RF_channel_ID=0
Channel0.signal=1C
Channel1.RF_channel_ID=1 Channel1.RF_channel_ID=1
Channel1.signal=2S
Channel2.RF_channel_ID=1 Channel2.RF_channel_ID=1
Channel2.signal=2S
Channel3.RF_channel_ID=1 Channel3.RF_channel_ID=1
Channel3.signal=2S
Channel4.RF_channel_ID=1 Channel4.RF_channel_ID=1
Channel4.signal=2S
Channel5.RF_channel_ID=1 Channel5.RF_channel_ID=1
Channel5.signal=2S
Channel6.RF_channel_ID=1 Channel6.RF_channel_ID=1
Channel6.signal=2S
Channel7.RF_channel_ID=1 Channel7.RF_channel_ID=1
Channel7.signal=2S
Channel8.RF_channel_ID=1 Channel8.RF_channel_ID=1
Channel8.signal=2S
Channel9.RF_channel_ID=1 Channel9.RF_channel_ID=1
Channel9.signal=2S
Channel10.RF_channel_ID=1 Channel10.RF_channel_ID=1
Channel10.signal=2S
Channel11.RF_channel_ID=1 Channel11.RF_channel_ID=1
Channel11.signal=2S
Channel12.RF_channel_ID=1 Channel12.RF_channel_ID=1
Channel12.signal=2S
Channel13.RF_channel_ID=1 Channel13.RF_channel_ID=1
Channel13.signal=2S
Channel14.RF_channel_ID=1 Channel14.RF_channel_ID=1
Channel14.signal=2S
Channel15.RF_channel_ID=1 Channel15.RF_channel_ID=1
Channel15.signal=2S
;######### SPECIFIC CHANNELS CONFIG ###### ;######### SPECIFIC CHANNELS CONFIG ######
@ -371,102 +336,40 @@ Acquisition_1C.max_dwells=1
;#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 L2C M ;# 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.0001
Acquisition_2S.doppler_max=5000
Acquisition_2S.doppler_min=-5000
Acquisition_2S.doppler_step=30
Acquisition_2S.max_dwells=1
Acquisition_2S0.dump=false
Acquisition_2S0.dump_filename=./acq_dump.dat
Acquisition_2S0.item_type=gr_complex
Acquisition_2S0.if=0
Acquisition_2S0.implementation=GPS_L2_M_PCPS_Acquisition
Acquisition_2S0.threshold=0.0001
Acquisition_2S0.doppler_max=5000
Acquisition_2S0.doppler_min=-5000
Acquisition_2S0.doppler_step=30
Acquisition_2S0.max_dwells=1
Acquisition_2S1.dump=false Acquisition_2S1.dump=false
Acquisition_2S1.dump_filename=./acq_dump.dat Acquisition_2S1.dump_filename=./acq_dump.dat
Acquisition_2S1.item_type=gr_complex Acquisition_2S1.item_type=gr_complex
Acquisition_2S1.if=0 Acquisition_2S1.if=0
Acquisition_2S1.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S1.implementation=GPS_L2_M_PCPS_Acquisition
Acquisition_2S1.threshold=0.0001 Acquisition_2S1.threshold=0.0001
;Acquisition_2S1.pfa=0.001
Acquisition_2S1.doppler_max=5000 Acquisition_2S1.doppler_max=5000
Acquisition_2S1.doppler_min=-5000 Acquisition_2S1.doppler_min=-5000
Acquisition_2S1.doppler_step=30 Acquisition_2S1.doppler_step=30
Acquisition_2S1.max_dwells=1 Acquisition_2S1.max_dwells=1
Acquisition_2S2.dump=false
Acquisition_2S2.dump_filename=./acq_dump.dat
Acquisition_2S2.item_type=gr_complex
Acquisition_2S2.if=0
Acquisition_2S2.implementation=GPS_L2_M_PCPS_Acquisition
Acquisition_2S2.threshold=0.0003
;Acquisition_2S2.pfa=0.001
Acquisition_2S2.doppler_max=5000
Acquisition_2S2.doppler_min=-5000
Acquisition_2S2.doppler_step=30
Acquisition_2S2.max_dwells=1
Acquisition_2S3.dump=false
Acquisition_2S3.dump_filename=./acq_dump.dat
Acquisition_2S3.item_type=gr_complex
Acquisition_2S3.if=0
Acquisition_2S3.implementation=GPS_L2_M_PCPS_Acquisition
Acquisition_2S3.threshold=0.0003
;Acquisition_2S3.pfa=0.001
Acquisition_2S3.doppler_max=5000
Acquisition_2S3.doppler_min=-5000
Acquisition_2S3.doppler_step=30
Acquisition_2S3.max_dwells=1
Acquisition_2S4.dump=false
Acquisition_2S4.dump_filename=./acq_dump.dat
Acquisition_2S4.item_type=gr_complex
Acquisition_2S4.if=0
Acquisition_2S4.implementation=GPS_L2_M_PCPS_Acquisition
Acquisition_2S4.threshold=0.0003
;Acquisition_2S4.pfa=0.001
Acquisition_2S4.doppler_max=5000
Acquisition_2S4.doppler_min=-5000
Acquisition_2S4.doppler_step=30
Acquisition_2S4.max_dwells=1
Acquisition_2S5.dump=false
Acquisition_2S5.dump_filename=./acq_dump.dat
Acquisition_2S5.item_type=gr_complex
Acquisition_2S5.if=0
Acquisition_2S5.implementation=GPS_L2_M_PCPS_Acquisition
Acquisition_2S5.threshold=0.0003
;Acquisition_2S5.pfa=0.001
Acquisition_2S5.doppler_max=5000
Acquisition_2S5.doppler_min=-5000
Acquisition_2S5.doppler_step=30
Acquisition_2S5.max_dwells=1
Acquisition_2S6.dump=false
Acquisition_2S6.dump_filename=./acq_dump.dat
Acquisition_2S6.item_type=gr_complex
Acquisition_2S6.if=0
Acquisition_2S6.implementation=GPS_L2_M_PCPS_Acquisition
Acquisition_2S6.threshold=0.0003
;Acquisition_2S6.pfa=0.001
Acquisition_2S6.doppler_max=5000
Acquisition_2S6.doppler_min=-5000
Acquisition_2S6.doppler_step=30
Acquisition_2S6.max_dwells=1
Acquisition_2S7.dump=false
Acquisition_2S7.dump_filename=./acq_dump.dat
Acquisition_2S7.item_type=gr_complex
Acquisition_2S7.if=0
Acquisition_2S7.implementation=GPS_L2_M_PCPS_Acquisition
Acquisition_2S7.threshold=0.0003
;Acquisition_2S7.pfa=0.001
Acquisition_2S7.doppler_max=5000
Acquisition_2S7.doppler_min=-5000
Acquisition_2S7.doppler_step=100
Acquisition_2S7.max_dwells=1
Acquisition_2S8.dump=false
Acquisition_2S8.dump_filename=./acq_dump.dat
Acquisition_2S8.item_type=gr_complex
Acquisition_2S8.if=0
Acquisition_2S8.implementation=GPS_L2_M_PCPS_Acquisition
Acquisition_2S8.threshold=0.0003
;Acquisition_2S8.pfa=0.001
Acquisition_2S8.doppler_max=5000
Acquisition_2S8.doppler_min=-5000
Acquisition_2S8.doppler_step=100
Acquisition_2S8.max_dwells=1
;######### TRACKING GLOBAL CONFIG ############ ;######### TRACKING GLOBAL CONFIG ############
@ -497,7 +400,28 @@ Tracking_1C.order=3;
Tracking_1C.early_late_space_chips=0.5; Tracking_1C.early_late_space_chips=0.5;
;######### TRACKING CHANNEL 8 CONFIG ############ ;######### TRACKING GENERAL CHANNEL CONFIG ############
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S.item_type=gr_complex
Tracking_2S.if=0
Tracking_2S.dump=true
Tracking_2S.dump_filename=./tracking_ch_
Tracking_2S.pll_bw_hz=2.0;
Tracking_2S.dll_bw_hz=0.5;
Tracking_2S.order=3;
Tracking_2S.early_late_space_chips=0.5;
;######### TRACKING CHANNEL SPECIFIC CONFIG ############
Tracking_2S0.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S0.item_type=gr_complex
Tracking_2S0.if=0
Tracking_2S0.dump=true
Tracking_2S0.dump_filename=./tracking_ch_
Tracking_2S0.pll_bw_hz=2.0;
Tracking_2S0.dll_bw_hz=0.5;
Tracking_2S0.order=3;
Tracking_2S0.early_late_space_chips=0.5;
Tracking_2S1.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S1.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S1.item_type=gr_complex Tracking_2S1.item_type=gr_complex
Tracking_2S1.if=0 Tracking_2S1.if=0
@ -507,77 +431,6 @@ Tracking_2S1.pll_bw_hz=2.0;
Tracking_2S1.dll_bw_hz=0.5; Tracking_2S1.dll_bw_hz=0.5;
Tracking_2S1.order=3; Tracking_2S1.order=3;
Tracking_2S1.early_late_space_chips=0.5; Tracking_2S1.early_late_space_chips=0.5;
;######### TRACKING CHANNEL 9 CONFIG ############
Tracking_2S2.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S2.item_type=gr_complex
Tracking_2S2.if=0
Tracking_2S2.dump=true
Tracking_2S2.dump_filename=./tracking_ch_
Tracking_2S2.pll_bw_hz=2.0;
Tracking_2S2.dll_bw_hz=0.5;
Tracking_2S2.order=3;
Tracking_2S2.early_late_space_chips=0.5;
;######### TRACKING CHANNEL 10 CONFIG ############
Tracking_2S3.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S3.item_type=gr_complex
Tracking_2S3.if=0
Tracking_2S3.dump=true
Tracking_2S3.dump_filename=./tracking_ch_
Tracking_2S3.pll_bw_hz=2.0;
Tracking_2S3.dll_bw_hz=0.5;
Tracking_2S3.order=3;
Tracking_2S3.early_late_space_chips=0.5;
;######### TRACKING CHANNEL 11 CONFIG ############
Tracking_2S4.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S4.item_type=gr_complex
Tracking_2S4.if=0
Tracking_2S4.dump=true
Tracking_2S4.dump_filename=./tracking_ch_
Tracking_2S4.pll_bw_hz=2.0;
Tracking_2S4.dll_bw_hz=0.3;
Tracking_2S4.order=3;
Tracking_2S4.early_late_space_chips=0.5;
;######### TRACKING CHANNEL 12 CONFIG ############
Tracking_2S5.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S5.item_type=gr_complex
Tracking_2S5.if=0
Tracking_2S5.dump=true
Tracking_2S5.dump_filename=./tracking_ch_
Tracking_2S5.pll_bw_hz=2.0;
Tracking_2S5.dll_bw_hz=0.3;
Tracking_2S5.order=3;
Tracking_2S5.early_late_space_chips=0.5;
;######### TRACKING CHANNEL 13 CONFIG ############
Tracking_2S6.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S6.item_type=gr_complex
Tracking_2S6.if=0
Tracking_2S6.dump=true
Tracking_2S6.dump_filename=./tracking_ch_
Tracking_2S6.pll_bw_hz=2.0;
Tracking_2S6.dll_bw_hz=0.3;
Tracking_2S6.order=3;
Tracking_2S6.early_late_space_chips=0.5;
;######### TRACKING CHANNEL 14 CONFIG ############
Tracking_2S7.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S7.item_type=gr_complex
Tracking_2S7.if=0
Tracking_2S7.dump=true
Tracking_2S7.dump_filename=./tracking_ch_
Tracking_2S7.pll_bw_hz=2.0;
Tracking_2S7.dll_bw_hz=0.3;
Tracking_2S7.order=3;
Tracking_2S7.early_late_space_chips=0.5;
;######### TRACKING CHANNEL 15 CONFIG ############
Tracking_2S8.implementation=GPS_L2_M_DLL_PLL_Tracking
Tracking_2S8.item_type=gr_complex
Tracking_2S8.if=0
Tracking_2S8.dump=true
Tracking_2S8.dump_filename=./tracking_ch_
Tracking_2S8.pll_bw_hz=2.0;
Tracking_2S8.dll_bw_hz=0.3;
Tracking_2S8.order=3;
Tracking_2S8.early_late_space_chips=0.5;
;######### TELEMETRY DECODER GPS L1 CONFIG ############ ;######### TELEMETRY DECODER GPS L1 CONFIG ############

View File

@ -78,6 +78,7 @@ galileo_e5a_noncoherentIQ_acquisition_caf_cc::galileo_e5a_noncoherentIQ_acquisit
gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(gr_complex)),
gr::io_signature::make(0, 0, sizeof(gr_complex))) gr::io_signature::make(0, 0, sizeof(gr_complex)))
{ {
this->message_port_register_out(pmt::mp("events"));
d_sample_counter = 0; // SAMPLE COUNTER d_sample_counter = 0; // SAMPLE COUNTER
d_active = false; d_active = false;
d_state = 0; d_state = 0;

View File

@ -62,6 +62,7 @@ galileo_pcps_8ms_acquisition_cc::galileo_pcps_8ms_acquisition_cc(
gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms), gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms),
gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms)) gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms))
{ {
this->message_port_register_out(pmt::mp("events"));
d_sample_counter = 0; // SAMPLE COUNTER d_sample_counter = 0; // SAMPLE COUNTER
d_active = false; d_active = false;
d_state = 0; d_state = 0;

View File

@ -76,7 +76,6 @@ pcps_acquisition_cc::pcps_acquisition_cc(
d_sample_counter = 0; // SAMPLE COUNTER d_sample_counter = 0; // SAMPLE COUNTER
d_active = false; d_active = false;
d_state = 0; d_state = 0;
//d_queue = queue;
d_freq = freq; d_freq = freq;
d_fs_in = fs_in; d_fs_in = fs_in;
d_samples_per_ms = samples_per_ms; d_samples_per_ms = samples_per_ms;
@ -447,15 +446,12 @@ int pcps_acquisition_cc::general_work(int noutput_items,
d_active = false; d_active = false;
d_state = 0; d_state = 0;
d_sample_counter += d_fft_size * ninput_items[0]; // sample counter d_sample_counter += d_fft_size * ninput_items[0]; // sample counter
consume_each(ninput_items[0]); consume_each(ninput_items[0]);
acquisition_message = 1; acquisition_message = 1;
this->message_port_pub(pmt::mp("events"), pmt::from_long(acquisition_message)); this->message_port_pub(pmt::mp("events"), pmt::from_long(acquisition_message));
break; break;
} }
@ -478,7 +474,6 @@ int pcps_acquisition_cc::general_work(int noutput_items,
d_sample_counter += d_fft_size * ninput_items[0]; // sample counter d_sample_counter += d_fft_size * ninput_items[0]; // sample counter
consume_each(ninput_items[0]); consume_each(ninput_items[0]);
acquisition_message = 2; acquisition_message = 2;
this->message_port_pub(pmt::mp("events"), pmt::from_long(acquisition_message)); this->message_port_pub(pmt::mp("events"), pmt::from_long(acquisition_message));
break; break;

View File

@ -65,6 +65,7 @@ pcps_acquisition_fine_doppler_cc::pcps_acquisition_fine_doppler_cc(
gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(gr_complex)),
gr::io_signature::make(0, 0, sizeof(gr_complex))) gr::io_signature::make(0, 0, sizeof(gr_complex)))
{ {
this->message_port_register_out(pmt::mp("events"));
d_sample_counter = 0; // SAMPLE COUNTER d_sample_counter = 0; // SAMPLE COUNTER
d_active = false; d_active = false;
d_queue = queue; d_queue = queue;

View File

@ -69,6 +69,7 @@ pcps_acquisition_sc::pcps_acquisition_sc(
gr::io_signature::make(1, 1, sizeof(lv_16sc_t) * sampled_ms * samples_per_ms * ( bit_transition_flag ? 2 : 1 )), gr::io_signature::make(1, 1, sizeof(lv_16sc_t) * sampled_ms * samples_per_ms * ( bit_transition_flag ? 2 : 1 )),
gr::io_signature::make(0, 0, 0)) gr::io_signature::make(0, 0, 0))
{ {
this->message_port_register_out(pmt::mp("events"));
d_sample_counter = 0; // SAMPLE COUNTER d_sample_counter = 0; // SAMPLE COUNTER
d_active = false; d_active = false;
d_state = 0; d_state = 0;

View File

@ -66,6 +66,7 @@ pcps_assisted_acquisition_cc::pcps_assisted_acquisition_cc(
gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(gr_complex)),
gr::io_signature::make(0, 0, sizeof(gr_complex))) gr::io_signature::make(0, 0, sizeof(gr_complex)))
{ {
this->message_port_register_out(pmt::mp("events"));
d_sample_counter = 0; // SAMPLE COUNTER d_sample_counter = 0; // SAMPLE COUNTER
d_active = false; d_active = false;
d_queue = queue; d_queue = queue;

View File

@ -70,6 +70,7 @@ pcps_cccwsr_acquisition_cc::pcps_cccwsr_acquisition_cc(
gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms), gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms),
gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms)) gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms))
{ {
this->message_port_register_out(pmt::mp("events"));
d_sample_counter = 0; // SAMPLE COUNTER d_sample_counter = 0; // SAMPLE COUNTER
d_active = false; d_active = false;
d_state = 0; d_state = 0;

View File

@ -70,6 +70,7 @@ pcps_multithread_acquisition_cc::pcps_multithread_acquisition_cc(
gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms), gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms),
gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms)) gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms))
{ {
this->message_port_register_out(pmt::mp("events"));
d_sample_counter = 0; // SAMPLE COUNTER d_sample_counter = 0; // SAMPLE COUNTER
d_active = false; d_active = false;
d_state = 0; d_state = 0;

View File

@ -90,6 +90,7 @@ pcps_opencl_acquisition_cc::pcps_opencl_acquisition_cc(
gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms), gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms),
gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms)) gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms))
{ {
this->message_port_register_out(pmt::mp("events"));
d_sample_counter = 0; // SAMPLE COUNTER d_sample_counter = 0; // SAMPLE COUNTER
d_active = false; d_active = false;
d_state = 0; d_state = 0;

View File

@ -73,8 +73,7 @@ pcps_quicksync_acquisition_cc::pcps_quicksync_acquisition_cc(
gr::io_signature::make(1, 1, (sizeof(gr_complex)*sampled_ms * samples_per_ms )), gr::io_signature::make(1, 1, (sizeof(gr_complex)*sampled_ms * samples_per_ms )),
gr::io_signature::make(0, 0, (sizeof(gr_complex)*sampled_ms * samples_per_ms ))) gr::io_signature::make(0, 0, (sizeof(gr_complex)*sampled_ms * samples_per_ms )))
{ {
//DLOG(INFO) << "START CONSTRUCTOR"; this->message_port_register_out(pmt::mp("events"));
d_sample_counter = 0; // SAMPLE COUNTER d_sample_counter = 0; // SAMPLE COUNTER
d_active = false; d_active = false;
d_state = 0; d_state = 0;

View File

@ -81,6 +81,7 @@ pcps_tong_acquisition_cc::pcps_tong_acquisition_cc(
gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms), gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms),
gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms)) gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms))
{ {
this->message_port_register_out(pmt::mp("events"));
d_sample_counter = 0; // SAMPLE COUNTER d_sample_counter = 0; // SAMPLE COUNTER
d_active = false; d_active = false;
d_state = 0; d_state = 0;

View File

@ -94,7 +94,8 @@ Channel::Channel(ConfigurationInterface *configuration, unsigned int channel,
channel_fsm_.set_queue(queue_); channel_fsm_.set_queue(queue_);
connected_ = false; connected_ = false;
gnss_signal_ = Gnss_Signal();
gnss_signal_ = Gnss_Signal(implementation_);
chennel_msg_rx= channel_msg_receiver_make_cc(&channel_fsm_, repeat_); chennel_msg_rx= channel_msg_receiver_make_cc(&channel_fsm_, repeat_);

View File

@ -37,3 +37,6 @@ file(GLOB CHANNEL_FSM_HEADERS "*.h")
add_library(channel_fsm ${CHANNEL_FSM_SOURCES} ${CHANNEL_FSM_HEADERS}) add_library(channel_fsm ${CHANNEL_FSM_SOURCES} ${CHANNEL_FSM_HEADERS})
source_group(Headers FILES ${CHANNEL_FSM_HEADERS}) source_group(Headers FILES ${CHANNEL_FSM_HEADERS})
add_dependencies(channel_fsm glog-${glog_RELEASE}) add_dependencies(channel_fsm glog-${glog_RELEASE})
target_link_libraries(channel_fsm gnss_rx)

View File

@ -81,6 +81,10 @@ public:
//std::cout << "Enter Channel_Acq_S1 " << std::endl; //std::cout << "Enter Channel_Acq_S1 " << std::endl;
context<ChannelFsm> ().start_acquisition(); context<ChannelFsm> ().start_acquisition();
} }
~channel_acquiring_fsm_S1()
{
//std::cout << "Exit Channel_Acq_S1 " << std::endl;
}
}; };
@ -145,6 +149,7 @@ ChannelFsm::ChannelFsm(AcquisitionInterface *acquisition) :
void ChannelFsm::Event_start_acquisition() void ChannelFsm::Event_start_acquisition()
{ {
this->process_event(Ev_channel_start_acquisition()); this->process_event(Ev_channel_start_acquisition());
//std::cout<<"Ev_channel_start_acquisition launched"<<std::endl;
} }
@ -202,16 +207,6 @@ void ChannelFsm::start_acquisition()
void ChannelFsm::start_tracking() void ChannelFsm::start_tracking()
{ {
//LOG_AT_LEVEL(INFO) << "Channel " << channel_
//<< " passing prn code phase " << acq_->prn_code_phase();
//LOG_AT_LEVEL(INFO) << "Channel " << channel_
//<< " passing doppler freq shift " << acq_->doppler_freq_shift();
//LOG_AT_LEVEL(INFO) << "Channel " << channel_
//<< " passing acquisition sample stamp "
//<< acq_->get_sample_stamp();
//trk_->set_prn_code_phase(acq_->prn_code_phase());
//trk_->set_doppler_freq_shift(acq_->doppler_freq_shift());
//trk_->set_acq_sample_stamp(acq_->get_sample_stamp());
trk_->start_tracking(); trk_->start_tracking();
std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
if (queue_ != gr::msg_queue::make()) if (queue_ != gr::msg_queue::make())

View File

@ -20,7 +20,6 @@ set(OBS_ADAPTER_SOURCES
gps_l1_ca_observables.cc gps_l1_ca_observables.cc
galileo_e1_observables.cc galileo_e1_observables.cc
hybrid_observables.cc hybrid_observables.cc
mixed_observables.cc
) )
include_directories( include_directories(

View File

@ -1,89 +0,0 @@
/*!
* \file mixed_observables.cc
* \brief Implementation of an adapter of a mixed observables block (muti-frequency and multi-system)
* to a ObservablesInterface
* \author Javier Arribas, 2015. jarribas(at)cttc.es
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* GNSS-SDR is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* GNSS-SDR is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
*
* -------------------------------------------------------------------------
*/
#include "mixed_observables.h"
#include "configuration_interface.h"
#include <glog/logging.h>
using google::LogMessage;
MixedObservables::MixedObservables(ConfigurationInterface* configuration,
std::string role,
unsigned int in_streams,
unsigned int out_streams) :
role_(role),
in_streams_(in_streams),
out_streams_(out_streams)
{
int output_rate_ms;
output_rate_ms = configuration->property(role + ".output_rate_ms", 500);
std::string default_dump_filename = "./observables.dat";
DLOG(INFO) << "role " << role;
bool flag_averaging;
flag_averaging = configuration->property(role + ".flag_averaging", false);
dump_ = configuration->property(role + ".dump", false);
dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename);
observables_ = mixed_make_observables_cc(in_streams_, dump_, dump_filename_, output_rate_ms, flag_averaging);
DLOG(INFO) << "pseudorange(" << observables_->unique_id() << ")";
}
MixedObservables::~MixedObservables()
{}
void MixedObservables::connect(gr::top_block_sptr top_block)
{
if(top_block) { /* top_block is not null */};
// Nothing to connect internally
DLOG(INFO) << "nothing to connect internally";
}
void MixedObservables::disconnect(gr::top_block_sptr top_block)
{
if(top_block) { /* top_block is not null */};
// Nothing to disconnect
}
gr::basic_block_sptr MixedObservables::get_left_block()
{
return observables_;
}
gr::basic_block_sptr MixedObservables::get_right_block()
{
return observables_;
}

View File

@ -1,88 +0,0 @@
/*!
* \file mixed_observables.h
* \brief Implementation of an adapter of a mixed observables block (muti-frequency and multi-system)
* to a ObservablesInterface
* \author Javier Arribas, 2015. jarribas(at)cttc.es
*
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* GNSS-SDR is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* GNSS-SDR is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
*
* -------------------------------------------------------------------------
*/
#ifndef GNSS_SDR_MIXED_OBSERVABLES_H_
#define GNSS_SDR_MIXED_OBSERVABLES_H_
#include <string>
#include "observables_interface.h"
#include "mixed_observables_cc.h"
class ConfigurationInterface;
/*!
* \brief This class implements an ObservablesInterface for mixed observables block (muti-frequency and multi-system)
*/
class MixedObservables : public ObservablesInterface
{
public:
MixedObservables(ConfigurationInterface* configuration,
std::string role,
unsigned int in_streams,
unsigned int out_streams);
virtual ~MixedObservables();
std::string role()
{
return role_;
}
//! Returns "Mixed_Observables"
std::string implementation()
{
return "Mixed_Observables";
}
void connect(gr::top_block_sptr top_block);
void disconnect(gr::top_block_sptr top_block);
gr::basic_block_sptr get_left_block();
gr::basic_block_sptr get_right_block();
void reset()
{
return;
}
//! All blocks must have an item_size() function implementation
size_t item_size()
{
return sizeof(gr_complex);
}
private:
mixed_observables_cc_sptr observables_;
bool dump_;
//unsigned int fs_in_;
std::string dump_filename_;
std::string role_;
unsigned int in_streams_;
unsigned int out_streams_;
};
#endif

View File

@ -20,7 +20,6 @@ set(OBS_GR_BLOCKS_SOURCES
gps_l1_ca_observables_cc.cc gps_l1_ca_observables_cc.cc
galileo_e1_observables_cc.cc galileo_e1_observables_cc.cc
hybrid_observables_cc.cc hybrid_observables_cc.cc
mixed_observables_cc.cc
) )
include_directories( include_directories(

View File

@ -1,221 +0,0 @@
/*!
* \file mixed_observables_cc.cc
* \brief Implementation of the pseudorange computation block for MIXED observables (Multi-frequency and Multi-system)
* \author Javier Arribas, 2015. jarribas(at)cttc.es
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* GNSS-SDR is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* GNSS-SDR is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
*
* -------------------------------------------------------------------------
*/
#include "mixed_observables_cc.h"
#include <algorithm>
#include <cmath>
#include <iostream>
#include <map>
#include <vector>
#include <utility>
#include <gnuradio/io_signature.h>
#include <glog/logging.h>
#include "control_message_factory.h"
#include "gnss_synchro.h"
#include "GPS_L1_CA.h"
using google::LogMessage;
mixed_observables_cc_sptr
mixed_make_observables_cc(unsigned int nchannels, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging)
{
return mixed_observables_cc_sptr(new mixed_observables_cc(nchannels, dump, dump_filename, output_rate_ms, flag_averaging));
}
mixed_observables_cc::mixed_observables_cc(unsigned int nchannels, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging) :
gr::block("mixed_observables_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)),
gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)))
{
// initialize internal vars
d_dump = dump;
d_nchannels = nchannels;
d_output_rate_ms = output_rate_ms;
d_dump_filename = dump_filename;
d_flag_averaging = flag_averaging;
// ############# ENABLE DATA FILE LOG #################
if (d_dump == true)
{
if (d_dump_file.is_open() == false)
{
try
{
d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit );
d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary);
LOG(INFO) << "Observables dump enabled Log file: " << d_dump_filename.c_str() << std::endl;
}
catch (std::ifstream::failure& e)
{
LOG(WARNING) << "Exception opening observables dump file " << e.what() << std::endl;
}
}
}
}
mixed_observables_cc::~mixed_observables_cc()
{
d_dump_file.close();
}
bool MixedPairCompare_gnss_synchro_Prn_delay_ms(const std::pair<int,Gnss_Synchro>& a, const std::pair<int,Gnss_Synchro>& b)
{
return (a.second.Prn_timestamp_ms) < (b.second.Prn_timestamp_ms);
}
bool MixedPairCompare_gnss_synchro_d_TOW_at_current_symbol(const std::pair<int,Gnss_Synchro>& a, const std::pair<int,Gnss_Synchro>& b)
{
return (a.second.d_TOW_at_current_symbol) < (b.second.d_TOW_at_current_symbol);
}
int mixed_observables_cc::general_work (int noutput_items, gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
{
Gnss_Synchro **in = (Gnss_Synchro **) &input_items[0]; // Get the input pointer
Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; // Get the output pointer
Gnss_Synchro current_gnss_synchro[d_nchannels];
std::map<int,Gnss_Synchro> current_gnss_synchro_map;
std::map<int,Gnss_Synchro>::iterator gnss_synchro_iter;
if (d_nchannels != ninput_items.size())
{
LOG(WARNING) << "The Observables block is not well connected";
}
/*
* 1. Read the GNSS SYNCHRO objects from available channels
*/
for (unsigned int i = 0; i < d_nchannels; i++)
{
//Copy the telemetry decoder data to local copy
current_gnss_synchro[i] = in[i][0];
/*
* 1.2 Assume no valid pseudoranges
*/
current_gnss_synchro[i].Flag_valid_pseudorange = false;
current_gnss_synchro[i].Pseudorange_m = 0.0;
if(current_gnss_synchro[i].Signal[0] == '2')
{
if (current_gnss_synchro[i].Flag_valid_word) //if this channel have valid word
{
//record the word structure in a map for pseudorange computation
current_gnss_synchro_map.insert(std::pair<int, Gnss_Synchro>(current_gnss_synchro[i].Channel_ID, current_gnss_synchro[i]));
}
}
}
/*
* 2. Compute RAW pseudoranges using COMMON RECEPTION TIME algorithm. Use only the valid channels (channels that are tracking a satellite)
*/
// if(current_gnss_synchro_map.size() > 0)
// {
// /*
// * 2.1 Use CURRENT set of measurements and find the nearest satellite
// * common RX time algorithm
// */
// // what is the most recent symbol TOW in the current set? -> this will be the reference symbol
// gnss_synchro_iter = max_element(current_gnss_synchro_map.begin(), current_gnss_synchro_map.end(), MixedPairCompare_gnss_synchro_d_TOW_at_current_symbol);
// double d_TOW_reference = gnss_synchro_iter->second.d_TOW_at_current_symbol;
// double d_ref_PRN_rx_time_ms = gnss_synchro_iter->second.Prn_timestamp_ms;
// //int reference_channel= gnss_synchro_iter->second.Channel_ID;
//
// // Now compute RX time differences due to the PRN alignment in the correlators
// double traveltime_ms;
// double pseudorange_m;
// double delta_rx_time_ms;
// for(gnss_synchro_iter = current_gnss_synchro_map.begin(); gnss_synchro_iter != current_gnss_synchro_map.end(); gnss_synchro_iter++)
// {
// // compute the required symbol history shift in order to match the reference symbol
// delta_rx_time_ms = gnss_synchro_iter->second.Prn_timestamp_ms - d_ref_PRN_rx_time_ms;
// //compute the pseudorange
// traveltime_ms = (d_TOW_reference-gnss_synchro_iter->second.d_TOW_at_current_symbol)*1000.0 + delta_rx_time_ms + GPS_STARTOFFSET_ms;
// pseudorange_m = traveltime_ms * GPS_C_m_ms; // [m]
// // update the pseudorange object
// current_gnss_synchro[gnss_synchro_iter->second.Channel_ID] = gnss_synchro_iter->second;
// current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Pseudorange_m = pseudorange_m;
// current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Flag_valid_pseudorange = true;
// current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].d_TOW_at_current_symbol = round(d_TOW_reference*1000)/1000 + GPS_STARTOFFSET_ms/1000.0;
// std::cout<<"Pseudorange_m="<<current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Pseudorange_m<<std::endl;
// std::cout<<"Signal="<<current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Signal<<std::endl;
// }
// }
if(d_dump == true)
{
// MULTIPLEXED FILE RECORDING - Record results to file
try
{
double tmp_double;
for (unsigned int i = 0; i < d_nchannels; i++)
{
tmp_double = current_gnss_synchro[i].d_TOW_at_current_symbol;
d_dump_file.write((char*)&tmp_double, sizeof(double));
tmp_double = current_gnss_synchro[i].Prn_timestamp_ms;
d_dump_file.write((char*)&tmp_double, sizeof(double));
tmp_double = current_gnss_synchro[i].Pseudorange_m;
d_dump_file.write((char*)&tmp_double, sizeof(double));
tmp_double = (double)(current_gnss_synchro[i].Flag_valid_pseudorange==true);
d_dump_file.write((char*)&tmp_double, sizeof(double));
tmp_double = current_gnss_synchro[i].PRN;
d_dump_file.write((char*)&tmp_double, sizeof(double));
tmp_double = (double)(current_gnss_synchro[i].Flag_valid_symbol_output==true);
d_dump_file.write((char*)&tmp_double, sizeof(double));
tmp_double = current_gnss_synchro[i].Prompt_I;
d_dump_file.write((char*)&tmp_double, sizeof(double));
tmp_double = current_gnss_synchro[i].Prompt_Q;
d_dump_file.write((char*)&tmp_double, sizeof(double));
}
}
catch (const std::ifstream::failure& e)
{
LOG(WARNING) << "Exception writing observables dump file " << e.what() << std::endl;
}
}
consume_each(1); //one by one
for (unsigned int i = 0; i < d_nchannels; i++)
{
*out[i] = current_gnss_synchro[i];
}
if (noutput_items == 0)
{
LOG(WARNING) << "noutput_items = 0";
}
return 1;
}

View File

@ -1,70 +0,0 @@
/*!
* \file mixed_observables_cc.h
* \brief Interface of the pseudorange computation block for MIXED observables (Multi-frequency and Multi-system)
* \author Javier Arribas, 2015. jarribas(at)cttc.es
* -------------------------------------------------------------------------
*
* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
*
* GNSS-SDR is a software defined Global Navigation
* Satellite Systems receiver
*
* This file is part of GNSS-SDR.
*
* GNSS-SDR is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* GNSS-SDR is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
*
* -------------------------------------------------------------------------
*/
#ifndef GNSS_SDR_MIXED_OBSERVABLES_CC_H_
#define GNSS_SDR_MIXED_OBSERVABLES_CC_H_
#include <fstream>
#include <string>
#include <gnuradio/block.h>
class mixed_observables_cc;
typedef boost::shared_ptr<mixed_observables_cc> mixed_observables_cc_sptr;
mixed_observables_cc_sptr
mixed_make_observables_cc(unsigned int n_channels, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging);
/*!
* \brief This class implements a block that computes MIXED observables (Multi-frequency and Multi-system)
*/
class mixed_observables_cc : public gr::block
{
public:
~mixed_observables_cc ();
int general_work (int noutput_items, gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
private:
friend mixed_observables_cc_sptr
mixed_make_observables_cc(unsigned int nchannels, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging);
mixed_observables_cc(unsigned int nchannels, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging);
// class private vars
bool d_dump;
bool d_flag_averaging;
unsigned int d_nchannels;
int d_output_rate_ms;
std::string d_dump_filename;
std::ofstream d_dump_file;
};
#endif

View File

@ -463,8 +463,6 @@ int galileo_e1b_telemetry_decoder_cc::general_work (int noutput_items __attribut
current_synchro_data.Flag_valid_word = false; current_synchro_data.Flag_valid_word = false;
} }
DLOG(INFO) << "delta_t = " << delta_t;
current_synchro_data.d_TOW = d_TOW_at_Preamble; current_synchro_data.d_TOW = d_TOW_at_Preamble;
current_synchro_data.d_TOW_at_current_symbol = d_TOW_at_current_symbol; current_synchro_data.d_TOW_at_current_symbol = d_TOW_at_current_symbol;
current_synchro_data.d_TOW_hybrid_at_current_symbol = current_synchro_data.d_TOW_at_current_symbol - delta_t; //delta_t = t_gal - t_gps ----> t_gps = t_gal -delta_t current_synchro_data.d_TOW_hybrid_at_current_symbol = current_synchro_data.d_TOW_at_current_symbol - delta_t; //delta_t = t_gal - t_gps ----> t_gps = t_gal -delta_t

View File

@ -71,7 +71,7 @@ gps_l1_ca_telemetry_decoder_cc::gps_l1_ca_telemetry_decoder_cc(
// set the preamble // set the preamble
unsigned short int preambles_bits[GPS_CA_PREAMBLE_LENGTH_BITS] = GPS_PREAMBLE; unsigned short int preambles_bits[GPS_CA_PREAMBLE_LENGTH_BITS] = GPS_PREAMBLE;
memcpy((unsigned short int*)this->d_preambles_bits, (unsigned short int*)preambles_bits, GPS_CA_PREAMBLE_LENGTH_BITS*sizeof(unsigned short int)); //memcpy((unsigned short int*)this->d_preambles_bits, (unsigned short int*)preambles_bits, GPS_CA_PREAMBLE_LENGTH_BITS*sizeof(unsigned short int));
// preamble bits to sampled symbols // preamble bits to sampled symbols
d_preambles_symbols = (signed int*)malloc(sizeof(signed int) * GPS_CA_PREAMBLE_LENGTH_SYMBOLS); d_preambles_symbols = (signed int*)malloc(sizeof(signed int) * GPS_CA_PREAMBLE_LENGTH_SYMBOLS);
@ -80,7 +80,7 @@ gps_l1_ca_telemetry_decoder_cc::gps_l1_ca_telemetry_decoder_cc(
{ {
for (unsigned int j = 0; j < GPS_CA_TELEMETRY_SYMBOLS_PER_BIT; j++) for (unsigned int j = 0; j < GPS_CA_TELEMETRY_SYMBOLS_PER_BIT; j++)
{ {
if (d_preambles_bits[i] == 1) if (preambles_bits[i] == 1)
{ {
d_preambles_symbols[n] = 1; d_preambles_symbols[n] = 1;
} }
@ -158,7 +158,7 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_
{ {
if (in[0][i].Flag_valid_symbol_output == true) if (in[0][i].Flag_valid_symbol_output == true)
{ {
if (in[0][i].Prompt_I < 0) // symbols clipping if (in[0][i].Prompt_I < 0) // symbols clipping
{ {
corr_value -= d_preambles_symbols[i] * in[0][i].correlation_length_ms; corr_value -= d_preambles_symbols[i] * in[0][i].correlation_length_ms;
} }
@ -174,14 +174,15 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_
//******* frame sync ****************** //******* frame sync ******************
if (abs(corr_value) == GPS_CA_PREAMBLE_LENGTH_SYMBOLS) if (abs(corr_value) == GPS_CA_PREAMBLE_LENGTH_SYMBOLS)
{ {
//TODO: Rewrite with state machine
if (d_stat == 0) if (d_stat == 0)
{ {
d_GPS_FSM.Event_gps_word_preamble(); d_GPS_FSM.Event_gps_word_preamble();
//record the preamble sample stamp
d_preamble_time_seconds = in[0][0].Tracking_timestamp_secs; // record the preamble sample stamp d_preamble_time_seconds = in[0][0].Tracking_timestamp_secs; // record the preamble sample stamp
DLOG(INFO) << "Preamble detection for SAT " << this->d_satellite << "in[0][0].Tracking_timestamp_secs=" << round(in[0][0].Tracking_timestamp_secs * 1000.0); DLOG(INFO) << "Preamble detection for SAT " << this->d_satellite << "in[0][0].Tracking_timestamp_secs=" << round(in[0][0].Tracking_timestamp_secs * 1000.0);
//sync the symbol to bits integrator //sync the symbol to bits integrator
d_symbol_accumulator = 0; d_symbol_accumulator = 0; d_symbol_accumulator_counter = 0;
d_symbol_accumulator_counter = 0;
d_frame_bit_index = 0; d_frame_bit_index = 0;
d_stat = 1; // enter into frame pre-detection status d_stat = 1; // enter into frame pre-detection status
} }
@ -190,10 +191,11 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_
preamble_diff_ms = round((in[0][0].Tracking_timestamp_secs - d_preamble_time_seconds) * 1000.0); preamble_diff_ms = round((in[0][0].Tracking_timestamp_secs - d_preamble_time_seconds) * 1000.0);
if (abs(preamble_diff_ms - GPS_SUBFRAME_MS) < 1) if (abs(preamble_diff_ms - GPS_SUBFRAME_MS) < 1)
{ {
DLOG(INFO) << "Preamble confirmation for SAT " << this->d_satellite << "in[0][0].Tracking_timestamp_secs=" << round(in[0][0].Tracking_timestamp_secs * 1000.0); DLOG(INFO) << "Preamble confirmation for SAT " << this->d_satellite << "in[0][0].Tracking_timestamp_secs=" << round(in[0][0].Tracking_timestamp_secs * 1000.0);
d_GPS_FSM.Event_gps_word_preamble(); d_GPS_FSM.Event_gps_word_preamble();
d_flag_preamble = true; d_flag_preamble = true;
d_preamble_time_seconds = in[0][0].Tracking_timestamp_secs; // record the PRN start sample index associated to the preamble d_preamble_time_seconds = in[0][0].Tracking_timestamp_secs;// - d_preamble_duration_seconds; //record the PRN start sample index associated to the preamble
if (!d_flag_frame_sync) if (!d_flag_frame_sync)
{ {
// send asynchronous message to tracking to inform of frame sync and extend correlation time // send asynchronous message to tracking to inform of frame sync and extend correlation time
@ -212,21 +214,24 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_
DLOG(INFO) << " Frame sync SAT " << this->d_satellite << " with preamble start at " << d_preamble_time_seconds << " [s]"; DLOG(INFO) << " Frame sync SAT " << this->d_satellite << " with preamble start at " << d_preamble_time_seconds << " [s]";
} }
} }
else }
}
else
{
if (d_stat == 1)
{
preamble_diff_ms = round((in[0][0].Tracking_timestamp_secs - d_preamble_time_seconds) * 1000.0);
if (preamble_diff_ms > GPS_SUBFRAME_MS+1)
{ {
if (preamble_diff_ms > GPS_SUBFRAME_MS + 1) DLOG(INFO) << "Lost of frame sync SAT " << this->d_satellite << " preamble_diff= " << preamble_diff_ms;
{ d_stat = 0; //lost of frame sync
DLOG(INFO) << "Lost of frame sync SAT " << this->d_satellite << " preamble_diff_ms= " << preamble_diff_ms; d_flag_frame_sync = false;
d_stat = 0; // lost of frame sync flag_TOW_set = false;
d_flag_frame_sync = false;
flag_TOW_set = false;
}
} }
} }
} }
//******* SYMBOL TO BIT ******* //******* SYMBOL TO BIT *******
if (in[0][0].Flag_valid_symbol_output == true) if (in[0][0].Flag_valid_symbol_output == true)
{ {
// extended correlation to bit period is enabled in tracking! // extended correlation to bit period is enabled in tracking!
@ -234,207 +239,207 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_
d_symbol_accumulator_counter += in[0][0].correlation_length_ms; d_symbol_accumulator_counter += in[0][0].correlation_length_ms;
} }
if (d_symbol_accumulator_counter >= 20) if (d_symbol_accumulator_counter >= 20)
{ {
if (d_symbol_accumulator > 0) if (d_symbol_accumulator > 0)
{ //symbol to bit { //symbol to bit
d_GPS_frame_4bytes += 1; //insert the telemetry bit in LSB d_GPS_frame_4bytes += 1; //insert the telemetry bit in LSB
} }
d_symbol_accumulator = 0; d_symbol_accumulator = 0;
d_symbol_accumulator_counter = 0; d_symbol_accumulator_counter = 0;
//******* bits to words ****** //******* bits to words ******
d_frame_bit_index++; d_frame_bit_index++;
if (d_frame_bit_index == 30) if (d_frame_bit_index == 30)
{ {
d_frame_bit_index = 0; d_frame_bit_index = 0;
// parity check // parity check
// Each word in wordbuff is composed of: // Each word in wordbuff is composed of:
// Bits 0 to 29 = the GPS data word // Bits 0 to 29 = the GPS data word
// Bits 30 to 31 = 2 LSBs of the GPS word ahead. // Bits 30 to 31 = 2 LSBs of the GPS word ahead.
// prepare the extended frame [-2 -1 0 ... 30] // prepare the extended frame [-2 -1 0 ... 30]
if (d_prev_GPS_frame_4bytes & 0x00000001) if (d_prev_GPS_frame_4bytes & 0x00000001)
{ {
d_GPS_frame_4bytes = d_GPS_frame_4bytes | 0x40000000; d_GPS_frame_4bytes = d_GPS_frame_4bytes | 0x40000000;
} }
if (d_prev_GPS_frame_4bytes & 0x00000002) if (d_prev_GPS_frame_4bytes & 0x00000002)
{ {
d_GPS_frame_4bytes = d_GPS_frame_4bytes | 0x80000000; d_GPS_frame_4bytes = d_GPS_frame_4bytes | 0x80000000;
} }
/* Check that the 2 most recently logged words pass parity. Have to first /* Check that the 2 most recently logged words pass parity. Have to first
invert the data bits according to bit 30 of the previous word. */ invert the data bits according to bit 30 of the previous word. */
if(d_GPS_frame_4bytes & 0x40000000) if(d_GPS_frame_4bytes & 0x40000000)
{ {
d_GPS_frame_4bytes ^= 0x3FFFFFC0; // invert the data bits (using XOR) d_GPS_frame_4bytes ^= 0x3FFFFFC0; // invert the data bits (using XOR)
} }
if (gps_l1_ca_telemetry_decoder_cc::gps_word_parityCheck(d_GPS_frame_4bytes)) if (gps_l1_ca_telemetry_decoder_cc::gps_word_parityCheck(d_GPS_frame_4bytes))
{ {
memcpy(&d_GPS_FSM.d_GPS_frame_4bytes, &d_GPS_frame_4bytes, sizeof(char)*4); memcpy(&d_GPS_FSM.d_GPS_frame_4bytes, &d_GPS_frame_4bytes, sizeof(char)*4);
d_GPS_FSM.d_preamble_time_ms = d_preamble_time_seconds * 1000.0; d_GPS_FSM.d_preamble_time_ms = d_preamble_time_seconds * 1000.0;
d_GPS_FSM.Event_gps_word_valid(); d_GPS_FSM.Event_gps_word_valid();
// send TLM data to PVT using asynchronous message queues // send TLM data to PVT using asynchronous message queues
if (d_GPS_FSM.d_flag_new_subframe == true) if (d_GPS_FSM.d_flag_new_subframe == true)
{ {
switch (d_GPS_FSM.d_subframe_ID) switch (d_GPS_FSM.d_subframe_ID)
{ {
case 3: //we have a new set of ephemeris data for the current SV case 3: //we have a new set of ephemeris data for the current SV
if (d_GPS_FSM.d_nav.satellite_validation() == true) if (d_GPS_FSM.d_nav.satellite_validation() == true)
{ {
// get ephemeris object for this SV (mandatory) // get ephemeris object for this SV (mandatory)
std::shared_ptr<Gps_Ephemeris> tmp_obj = std::make_shared<Gps_Ephemeris>(d_GPS_FSM.d_nav.get_ephemeris()); std::shared_ptr<Gps_Ephemeris> tmp_obj = std::make_shared<Gps_Ephemeris>(d_GPS_FSM.d_nav.get_ephemeris());
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
} }
break; break;
case 4: // Possible IONOSPHERE and UTC model update (page 18) case 4: // Possible IONOSPHERE and UTC model update (page 18)
if (d_GPS_FSM.d_nav.flag_iono_valid == true) if (d_GPS_FSM.d_nav.flag_iono_valid == true)
{ {
std::shared_ptr<Gps_Iono> tmp_obj = std::make_shared<Gps_Iono>( d_GPS_FSM.d_nav.get_iono()); std::shared_ptr<Gps_Iono> tmp_obj = std::make_shared<Gps_Iono>( d_GPS_FSM.d_nav.get_iono());
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
} }
if (d_GPS_FSM.d_nav.flag_utc_model_valid == true) if (d_GPS_FSM.d_nav.flag_utc_model_valid == true)
{ {
std::shared_ptr<Gps_Utc_Model> tmp_obj = std::make_shared<Gps_Utc_Model>(d_GPS_FSM.d_nav.get_utc_model()); std::shared_ptr<Gps_Utc_Model> tmp_obj = std::make_shared<Gps_Utc_Model>(d_GPS_FSM.d_nav.get_utc_model());
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
} }
break; break;
case 5: case 5:
// get almanac (if available) // get almanac (if available)
//TODO: implement almanac reader in navigation_message //TODO: implement almanac reader in navigation_message
break; break;
default: default:
break; break;
} }
d_GPS_FSM.clear_flag_new_subframe(); d_GPS_FSM.clear_flag_new_subframe();
} }
d_flag_parity = true; d_flag_parity = true;
} }
else else
{ {
d_GPS_FSM.Event_gps_word_invalid(); d_GPS_FSM.Event_gps_word_invalid();
d_flag_parity = false; d_flag_parity = false;
} }
d_prev_GPS_frame_4bytes = d_GPS_frame_4bytes; // save the actual frame d_prev_GPS_frame_4bytes = d_GPS_frame_4bytes; // save the actual frame
d_GPS_frame_4bytes = d_GPS_frame_4bytes & 0; d_GPS_frame_4bytes = d_GPS_frame_4bytes & 0;
} }
else else
{ {
d_GPS_frame_4bytes <<= 1; //shift 1 bit left the telemetry word d_GPS_frame_4bytes <<= 1; //shift 1 bit left the telemetry word
} }
} }
// output the frame // output the frame
consume_each(1); //one by one 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 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][0];
//2. Add the telemetry decoder information //2. Add the telemetry decoder information
if (this->d_flag_preamble == true and d_GPS_FSM.d_nav.d_TOW > 0) if (this->d_flag_preamble == true and d_GPS_FSM.d_nav.d_TOW > 0)
//update TOW at the preamble instant (todo: check for valid d_TOW) //update TOW at the preamble instant (todo: check for valid d_TOW)
// JAVI: 30/06/2014 // JAVI: 30/06/2014
// TOW, in GPS, is referred to the START of the SUBFRAME, that is, THE FIRST SYMBOL OF THAT SUBFRAME, NOT THE PREAMBLE. // TOW, in GPS, is referred to the START of the SUBFRAME, that is, THE FIRST SYMBOL OF THAT SUBFRAME, NOT THE PREAMBLE.
// thus, no correction should be done. d_TOW_at_Preamble should be renamed to d_TOW_at_subframe_start. // thus, no correction should be done. d_TOW_at_Preamble should be renamed to d_TOW_at_subframe_start.
// Sice we detected the preable, then, we are in the last symbol of that preamble, or just at the start of the first subframe symbol. // Sice we detected the preable, then, we are in the last symbol of that preamble, or just at the start of the first subframe symbol.
{ {
d_TOW_at_Preamble = d_GPS_FSM.d_nav.d_TOW + GPS_SUBFRAME_SECONDS; //we decoded the current TOW when the last word of the subframe arrive, so, we have a lag of ONE SUBFRAME d_TOW_at_Preamble = d_GPS_FSM.d_nav.d_TOW + GPS_SUBFRAME_SECONDS; //we decoded the current TOW when the last word of the subframe arrive, so, we have a lag of ONE SUBFRAME
d_TOW_at_current_symbol = d_TOW_at_Preamble; d_TOW_at_current_symbol = d_TOW_at_Preamble;
Prn_timestamp_at_preamble_ms = in[0][0].Tracking_timestamp_secs * 1000.0; Prn_timestamp_at_preamble_ms = in[0][0].Tracking_timestamp_secs * 1000.0;
if (flag_TOW_set == false) if (flag_TOW_set == false)
{ {
flag_TOW_set = true; flag_TOW_set = true;
} }
} }
else else
{ {
d_TOW_at_current_symbol = d_TOW_at_current_symbol + GPS_L1_CA_CODE_PERIOD; d_TOW_at_current_symbol = d_TOW_at_current_symbol + GPS_L1_CA_CODE_PERIOD;
} }
current_synchro_data.d_TOW = d_TOW_at_Preamble; current_synchro_data.d_TOW = d_TOW_at_Preamble;
current_synchro_data.d_TOW_at_current_symbol = d_TOW_at_current_symbol; current_synchro_data.d_TOW_at_current_symbol = d_TOW_at_current_symbol;
current_synchro_data.d_TOW_hybrid_at_current_symbol = current_synchro_data.d_TOW_at_current_symbol; // to be used in the hybrid configuration current_synchro_data.d_TOW_hybrid_at_current_symbol = current_synchro_data.d_TOW_at_current_symbol; // to be used in the hybrid configuration
current_synchro_data.Flag_valid_word = (d_flag_frame_sync == true and d_flag_parity == true and flag_TOW_set == true); current_synchro_data.Flag_valid_word = (d_flag_frame_sync == true and d_flag_parity == true and flag_TOW_set == true);
current_synchro_data.Flag_preamble = d_flag_preamble; current_synchro_data.Flag_preamble = d_flag_preamble;
current_synchro_data.Prn_timestamp_ms = in[0][0].Tracking_timestamp_secs * 1000.0; current_synchro_data.Prn_timestamp_ms = in[0][0].Tracking_timestamp_secs * 1000.0;
current_synchro_data.Prn_timestamp_at_preamble_ms = Prn_timestamp_at_preamble_ms; current_synchro_data.Prn_timestamp_at_preamble_ms = Prn_timestamp_at_preamble_ms;
if (flag_PLL_180_deg_phase_locked == true) if (flag_PLL_180_deg_phase_locked == true)
{ {
//correct the accumulated phase for the costas loop phase shift, if required //correct the accumulated phase for the costas loop phase shift, if required
current_synchro_data.Carrier_phase_rads += GPS_PI; current_synchro_data.Carrier_phase_rads += GPS_PI;
} }
if(d_dump == true) if(d_dump == true)
{ {
// MULTIPLEXED FILE RECORDING - Record results to file // MULTIPLEXED FILE RECORDING - Record results to file
try try
{ {
double tmp_double; double tmp_double;
tmp_double = d_TOW_at_current_symbol; tmp_double = d_TOW_at_current_symbol;
d_dump_file.write((char*)&tmp_double, sizeof(double)); d_dump_file.write((char*)&tmp_double, sizeof(double));
tmp_double = current_synchro_data.Prn_timestamp_ms; tmp_double = current_synchro_data.Prn_timestamp_ms;
d_dump_file.write((char*)&tmp_double, sizeof(double)); d_dump_file.write((char*)&tmp_double, sizeof(double));
tmp_double = d_TOW_at_Preamble; tmp_double = d_TOW_at_Preamble;
d_dump_file.write((char*)&tmp_double, sizeof(double)); d_dump_file.write((char*)&tmp_double, sizeof(double));
} }
catch (const std::ifstream::failure & e) catch (const std::ifstream::failure & e)
{ {
LOG(WARNING) << "Exception writing observables dump file " << e.what(); LOG(WARNING) << "Exception writing observables dump file " << e.what();
} }
} }
//todo: implement averaging //todo: implement averaging
d_average_count++; d_average_count++;
if (d_average_count == d_decimation_output_factor) if (d_average_count == d_decimation_output_factor)
{ {
d_average_count = 0; d_average_count = 0;
//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;
//std::cout<<"GPS L1 TLM output on CH="<<this->d_channel << " SAMPLE STAMP="<<d_sample_counter/d_decimation_output_factor<<std::endl; //std::cout<<"GPS L1 TLM output on CH="<<this->d_channel << " SAMPLE STAMP="<<d_sample_counter/d_decimation_output_factor<<std::endl;
return 1; return 1;
} }
else else
{ {
return 0; return 0;
} }
} }
void gps_l1_ca_telemetry_decoder_cc::set_decimation(int decimation) void gps_l1_ca_telemetry_decoder_cc::set_decimation(int decimation)
{ {
d_decimation_output_factor = decimation; d_decimation_output_factor = decimation;
} }
void gps_l1_ca_telemetry_decoder_cc::set_satellite(Gnss_Satellite satellite) void gps_l1_ca_telemetry_decoder_cc::set_satellite(Gnss_Satellite satellite)
{ {
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
LOG(INFO) << "Setting decoder Finite State Machine to satellite " << d_satellite; LOG(INFO) << "Setting decoder Finite State Machine to satellite " << d_satellite;
d_GPS_FSM.i_satellite_PRN = d_satellite.get_PRN(); d_GPS_FSM.i_satellite_PRN = d_satellite.get_PRN();
DLOG(INFO) << "Navigation Satellite set to " << d_satellite; DLOG(INFO) << "Navigation Satellite set to " << d_satellite;
} }
void gps_l1_ca_telemetry_decoder_cc::set_channel(int channel) void gps_l1_ca_telemetry_decoder_cc::set_channel(int channel)
{ {
d_channel = channel; d_channel = channel;
d_GPS_FSM.i_channel_ID = channel; d_GPS_FSM.i_channel_ID = channel;
DLOG(INFO) << "Navigation channel set to " << channel; DLOG(INFO) << "Navigation channel set to " << channel;
// ############# ENABLE DATA FILE LOG ################# // ############# ENABLE DATA FILE LOG #################
if (d_dump == true) if (d_dump == true)
{ {
if (d_dump_file.is_open() == false) if (d_dump_file.is_open() == false)
{ {
try try
{ {
d_dump_filename = "telemetry"; d_dump_filename = "telemetry";
d_dump_filename.append(boost::lexical_cast<std::string>(d_channel)); d_dump_filename.append(boost::lexical_cast<std::string>(d_channel));
d_dump_filename.append(".dat"); d_dump_filename.append(".dat");
d_dump_file.exceptions ( std::ifstream::failbit | std::ifstream::badbit ); d_dump_file.exceptions ( std::ifstream::failbit | std::ifstream::badbit );
d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary);
LOG(INFO) << "Telemetry decoder dump enabled on channel " << d_channel LOG(INFO) << "Telemetry decoder dump enabled on channel " << d_channel
<< " Log file: " << d_dump_filename.c_str(); << " Log file: " << d_dump_filename.c_str();
} }
catch (const std::ifstream::failure &e) catch (const std::ifstream::failure &e)
{ {
LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what(); LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what();
} }
} }
} }
} }

View File

@ -85,7 +85,7 @@ private:
bool gps_word_parityCheck(unsigned int gpsword); bool gps_word_parityCheck(unsigned int gpsword);
// constants // constants
unsigned short int d_preambles_bits[GPS_CA_PREAMBLE_LENGTH_BITS]; //unsigned short int d_preambles_bits[GPS_CA_PREAMBLE_LENGTH_BITS];
// class private vars // class private vars
int *d_preambles_symbols; int *d_preambles_symbols;

View File

@ -385,14 +385,7 @@ int galileo_e1_dll_pll_veml_tracking_cc::general_work (int noutput_items __attri
{ {
std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
pmt::pmt_t value = pmt::from_long(3);//3 -> loss of lock this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
this->message_port_pub(pmt::mp("events"), value);
// std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
// if (d_queue != gr::msg_queue::sptr())
// {
// d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
// }
d_carrier_lock_fail_counter = 0; d_carrier_lock_fail_counter = 0;
d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
} }

View File

@ -110,7 +110,7 @@ Galileo_E1_Tcp_Connector_Tracking_cc::Galileo_E1_Tcp_Connector_Tracking_cc(
{ {
// Telemetry bit synchronization message port input // Telemetry bit synchronization message port input
this->message_port_register_in(pmt::mp("preamble_timestamp_s")); this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
this->message_port_register_out(pmt::mp("events"));
this->set_relative_rate(1.0/vector_length); this->set_relative_rate(1.0/vector_length);
// initialize internal vars // initialize internal vars
d_queue = queue; d_queue = queue;
@ -394,11 +394,8 @@ int Galileo_E1_Tcp_Connector_Tracking_cc::general_work (int noutput_items __attr
{ {
std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
if (d_queue != gr::msg_queue::sptr())
{
d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
}
d_carrier_lock_fail_counter = 0; d_carrier_lock_fail_counter = 0;
d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
} }

View File

@ -109,7 +109,7 @@ Galileo_E5a_Dll_Pll_Tracking_cc::Galileo_E5a_Dll_Pll_Tracking_cc(
{ {
// Telemetry bit synchronization message port input // Telemetry bit synchronization message port input
this->message_port_register_in(pmt::mp("preamble_timestamp_s")); this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
this->message_port_register_out(pmt::mp("events"));
this->set_relative_rate(1.0 / vector_length); this->set_relative_rate(1.0 / vector_length);
// initialize internal vars // initialize internal vars
d_queue = queue; d_queue = queue;
@ -586,11 +586,7 @@ int Galileo_E5a_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute
{ {
std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
if (d_queue != gr::msg_queue::sptr())
{
d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
}
d_carrier_lock_fail_counter = 0; d_carrier_lock_fail_counter = 0;
d_state = 0; // TODO: check if disabling tracking is consistent with the channel state machine d_state = 0; // TODO: check if disabling tracking is consistent with the channel state machine
} }
@ -615,11 +611,7 @@ int Galileo_E5a_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute
{ {
std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
if (d_queue != gr::msg_queue::sptr())
{
d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
}
d_carrier_lock_fail_counter = 0; d_carrier_lock_fail_counter = 0;
d_state = 0; d_state = 0;
} }

View File

@ -548,14 +548,7 @@ int gps_l1_ca_dll_pll_c_aid_tracking_cc::general_work (int noutput_items __attri
{ {
std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
pmt::pmt_t value = pmt::from_long(3);//3 -> loss of lock this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
this->message_port_pub(pmt::mp("events"), value);
//std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
//if (d_queue != gr::msg_queue::sptr())
// {
// d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
// }
d_carrier_lock_fail_counter = 0; d_carrier_lock_fail_counter = 0;
d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
} }

View File

@ -104,6 +104,7 @@ gps_l1_ca_dll_pll_c_aid_tracking_sc::gps_l1_ca_dll_pll_c_aid_tracking_sc(
{ {
// Telemetry bit synchronization message port input // Telemetry bit synchronization message port input
this->message_port_register_in(pmt::mp("preamble_timestamp_s")); this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
this->message_port_register_out(pmt::mp("events"));
// initialize internal vars // initialize internal vars
d_queue = queue; d_queue = queue;
d_dump = dump; d_dump = dump;
@ -425,11 +426,7 @@ int gps_l1_ca_dll_pll_c_aid_tracking_sc::general_work (int noutput_items __attri
{ {
std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
if (d_queue != gr::msg_queue::sptr())
{
d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
}
d_carrier_lock_fail_counter = 0; d_carrier_lock_fail_counter = 0;
d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
} }

View File

@ -105,7 +105,6 @@ Gps_L1_Ca_Dll_Pll_Tracking_cc::Gps_L1_Ca_Dll_Pll_Tracking_cc(
{ {
// Telemetry bit synchronization message port input // Telemetry bit synchronization message port input
this->message_port_register_in(pmt::mp("preamble_timestamp_s")); this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
this->message_port_register_out(pmt::mp("events")); this->message_port_register_out(pmt::mp("events"));
// initialize internal vars // initialize internal vars
@ -408,13 +407,7 @@ int Gps_L1_Ca_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute__
{ {
std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
pmt::pmt_t value = pmt::from_long(3);//3 -> loss of lock this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
this->message_port_pub(pmt::mp("events"), value);
// std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory());
// if (d_queue != gr::msg_queue::sptr())
// {
// d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
// }
d_carrier_lock_fail_counter = 0; d_carrier_lock_fail_counter = 0;
d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
} }

View File

@ -101,6 +101,7 @@ Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc(
{ {
// Telemetry bit synchronization message port input // Telemetry bit synchronization message port input
this->message_port_register_in(pmt::mp("preamble_timestamp_s")); this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
this->message_port_register_out(pmt::mp("events"));
// initialize internal vars // initialize internal vars
d_queue = queue; d_queue = queue;
d_dump = dump; d_dump = dump;
@ -431,11 +432,7 @@ int Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::general_work (int noutput_items __attribu
{ {
std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
if (d_queue != gr::msg_queue::sptr())
{
d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
}
d_carrier_lock_fail_counter = 0; d_carrier_lock_fail_counter = 0;
d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
} }

View File

@ -104,6 +104,7 @@ Gps_L1_Ca_Tcp_Connector_Tracking_cc::Gps_L1_Ca_Tcp_Connector_Tracking_cc(
{ {
// Telemetry bit synchronization message port input // Telemetry bit synchronization message port input
this->message_port_register_in(pmt::mp("preamble_timestamp_s")); this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
this->message_port_register_out(pmt::mp("events"));
// initialize internal vars // initialize internal vars
d_queue = queue; d_queue = queue;
d_dump = dump; d_dump = dump;
@ -441,10 +442,7 @@ int Gps_L1_Ca_Tcp_Connector_Tracking_cc::general_work (int noutput_items __attri
{ {
std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
if (d_queue != gr::msg_queue::sptr()) {
d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
}
d_carrier_lock_fail_counter = 0; d_carrier_lock_fail_counter = 0;
d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine

View File

@ -104,6 +104,7 @@ gps_l2_m_dll_pll_tracking_cc::gps_l2_m_dll_pll_tracking_cc(
{ {
// Telemetry bit synchronization message port input // Telemetry bit synchronization message port input
this->message_port_register_in(pmt::mp("preamble_timestamp_s")); this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
this->message_port_register_out(pmt::mp("events"));
// initialize internal vars // initialize internal vars
d_queue = queue; d_queue = queue;
d_dump = dump; d_dump = dump;
@ -412,11 +413,7 @@ int gps_l2_m_dll_pll_tracking_cc::general_work (int noutput_items __attribute__(
{ {
std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
std::unique_ptr<ControlMessageFactory> cmf(new ControlMessageFactory()); this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
if (d_queue != gr::msg_queue::sptr())
{
d_queue->handle(cmf->GetQueueMessage(d_channel, 2));
}
d_carrier_lock_fail_counter = 0; d_carrier_lock_fail_counter = 0;
d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
} }

View File

@ -91,7 +91,6 @@
#include "gps_l1_ca_observables.h" #include "gps_l1_ca_observables.h"
#include "galileo_e1_observables.h" #include "galileo_e1_observables.h"
#include "hybrid_observables.h" #include "hybrid_observables.h"
#include "mixed_observables.h"
#include "gps_l1_ca_pvt.h" #include "gps_l1_ca_pvt.h"
#include "galileo_e1_pvt.h" #include "galileo_e1_pvt.h"
#include "hybrid_pvt.h" #include "hybrid_pvt.h"
@ -227,17 +226,9 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetObservables(std::shared
std::string default_implementation = "GPS_L1_CA_Observables"; std::string default_implementation = "GPS_L1_CA_Observables";
std::string implementation = configuration->property("Observables.implementation", default_implementation); std::string implementation = configuration->property("Observables.implementation", default_implementation);
LOG(INFO) << "Getting Observables with implementation " << implementation; LOG(INFO) << "Getting Observables with implementation " << implementation;
unsigned int Galileo_channels = configuration->property("Channels_Galileo.count", 0); // DEPRECATED unsigned int Galileo_channels = configuration->property("Channels_1B.count", 0);
if(Galileo_channels == 0)
{
Galileo_channels = configuration->property("Channels_1B.count", 0);
}
Galileo_channels += configuration->property("Channels_5X.count", 0); Galileo_channels += configuration->property("Channels_5X.count", 0);
unsigned int GPS_channels = configuration->property("Channels_GPS.count", 0); // DEPRECATED unsigned int GPS_channels = configuration->property("Channels_1C.count", 0);
if(GPS_channels == 0)
{
GPS_channels = configuration->property("Channels_1C.count", 0);
}
GPS_channels += configuration->property("Channels_2S.count", 0); GPS_channels += configuration->property("Channels_2S.count", 0);
return GetBlock(configuration, "Observables", implementation, Galileo_channels + GPS_channels, Galileo_channels + GPS_channels, queue); return GetBlock(configuration, "Observables", implementation, Galileo_channels + GPS_channels, Galileo_channels + GPS_channels, queue);
} }
@ -250,77 +241,14 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetPVT(std::shared_ptr<Con
std::string default_implementation = "Pass_Through"; std::string default_implementation = "Pass_Through";
std::string implementation = configuration->property("PVT.implementation", default_implementation); std::string implementation = configuration->property("PVT.implementation", default_implementation);
LOG(INFO) << "Getting PVT with implementation " << implementation; LOG(INFO) << "Getting PVT with implementation " << implementation;
unsigned int Galileo_channels = configuration->property("Channels_Galileo.count", 0); // DEPRECATED unsigned int Galileo_channels =configuration->property("Channels_1B.count", 0);
if(Galileo_channels == 0)
{
Galileo_channels = configuration->property("Channels_1B.count", 0);
}
Galileo_channels += configuration->property("Channels_5X.count", 0); Galileo_channels += configuration->property("Channels_5X.count", 0);
unsigned int GPS_channels = configuration->property("Channels_GPS.count", 0); // DEPRECATED unsigned int GPS_channels =configuration->property("Channels_1C.count", 0);
if(GPS_channels == 0)
{
GPS_channels = configuration->property("Channels_1C.count", 0);
}
GPS_channels += configuration->property("Channels_2S.count", 0); GPS_channels += configuration->property("Channels_2S.count", 0);
return GetBlock(configuration, "PVT", implementation, Galileo_channels + GPS_channels, 1, queue); return GetBlock(configuration, "PVT", implementation, Galileo_channels + GPS_channels, 1, queue);
} }
//********* GPS CHANNEL *****************
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_GPS(
std::shared_ptr<ConfigurationInterface> configuration,
std::string acq, std::string trk, std::string tlm, int channel,
boost::shared_ptr<gr::msg_queue> queue)
{
LOG(INFO) << "Instantiating Channel " << channel << " with Acquisition Implementation: "
<< acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder implementation: " << tlm;
std::string aux = configuration->property("Acquisition_GPS" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
std::string appendix1;
if(aux.compare("W") != 0)
{
appendix1 = boost::lexical_cast<std::string>(channel);
}
else
{
appendix1 = "";
}
aux = configuration->property("Tracking_GPS" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
std::string appendix2;
if(aux.compare("W") != 0)
{
appendix2 = boost::lexical_cast<std::string>(channel);
}
else
{
appendix2 = "";
}
aux = configuration->property("TelemetryDecoder_GPS" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
std::string appendix3;
if(aux.compare("W") != 0)
{
appendix3 = boost::lexical_cast<std::string>(channel);
}
else
{
appendix3 = "";
}
std::unique_ptr<GNSSBlockInterface> pass_through_ = GetBlock(configuration, "Channel", "Pass_Through", 1, 1, queue);
std::unique_ptr<AcquisitionInterface> acq_ = GetAcqBlock(configuration, "Acquisition_GPS" + appendix1, acq, 1, 0, queue);
std::unique_ptr<TrackingInterface> trk_ = GetTrkBlock(configuration, "Tracking_GPS" + appendix2, trk, 1, 1, queue);
std::unique_ptr<TelemetryDecoderInterface> tlm_ = GetTlmBlock(configuration, "TelemetryDecoder_GPS" + appendix3, tlm, 1, 1);
std::unique_ptr<GNSSBlockInterface> channel_(new Channel(configuration.get(), channel, pass_through_.release(),
acq_.release(),
trk_.release(),
tlm_.release(),
"Channel", "GPS" + appendix1, queue));
return channel_;
}
//********* GPS L1 C/A CHANNEL ***************** //********* GPS L1 C/A CHANNEL *****************
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1C( std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1C(
std::shared_ptr<ConfigurationInterface> configuration, std::shared_ptr<ConfigurationInterface> configuration,
@ -328,6 +256,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1C(
boost::shared_ptr<gr::msg_queue> queue) boost::shared_ptr<gr::msg_queue> queue)
{ {
//TODO: REMOVE APPENDIX!! AND CHECK ALTERNATIVE MECHANISM TO GET PARTICULARIZED PARAMETERS
LOG(INFO) << "Instantiating Channel " << channel << " with Acquisition Implementation: " LOG(INFO) << "Instantiating Channel " << channel << " with Acquisition Implementation: "
<< acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder implementation: " << tlm; << acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder implementation: " << tlm;
@ -431,62 +360,6 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_2S(
return channel_; return channel_;
} }
//********* GALILEO CHANNEL *****************
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_Galileo(
std::shared_ptr<ConfigurationInterface> configuration,
std::string acq, std::string trk, std::string tlm, int channel,
boost::shared_ptr<gr::msg_queue> queue)
{
std::stringstream stream;
stream << channel;
std::string id = stream.str();
LOG(INFO) << "Instantiating Channel " << id << " with Acquisition Implementation: "
<< acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder implementation: " << tlm;
std::string aux = configuration->property("Acquisition_Galileo" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
std::string appendix1;
if(aux.compare("W") != 0)
{
appendix1 = boost::lexical_cast<std::string>(channel);
}
else
{
appendix1 = "";
}
aux = configuration->property("Tracking_Galileo" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
std::string appendix2;
if(aux.compare("W") != 0)
{
appendix2 = boost::lexical_cast<std::string>(channel);
}
else
{
appendix2 = "";
}
aux = configuration->property("TelemetryDecoder_Galileo" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
std::string appendix3;
if(aux.compare("W") != 0)
{
appendix3 = boost::lexical_cast<std::string>(channel);
}
else
{
appendix3 = "";
}
std::unique_ptr<GNSSBlockInterface> pass_through_ = GetBlock(configuration, "Channel", "Pass_Through", 1, 1, queue);
std::unique_ptr<AcquisitionInterface> acq_ = GetAcqBlock(configuration, "Acquisition_Galileo" + appendix1, acq, 1, 0, queue);
std::unique_ptr<TrackingInterface> trk_ = GetTrkBlock(configuration, "Tracking_Galileo" + appendix2, trk, 1, 1, queue);
std::unique_ptr<TelemetryDecoderInterface> tlm_ = GetTlmBlock(configuration, "TelemetryDecoder_Galileo" + appendix3, tlm, 1, 1);
std::unique_ptr<GNSSBlockInterface> channel_(new Channel(configuration.get(), channel, pass_through_.release(),
acq_.release(),
trk_.release(),
tlm_.release(),
"Channel", "Galileo", queue));
return channel_;
}
//********* GALILEO E1 B CHANNEL ***************** //********* GALILEO E1 B CHANNEL *****************
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1B( std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1B(
std::shared_ptr<ConfigurationInterface> configuration, std::shared_ptr<ConfigurationInterface> configuration,
@ -604,385 +477,146 @@ std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> GNSSBlockFacto
std::shared_ptr<ConfigurationInterface> configuration, boost::shared_ptr<gr::msg_queue> queue) std::shared_ptr<ConfigurationInterface> configuration, boost::shared_ptr<gr::msg_queue> queue)
{ {
std::string default_implementation = "Pass_Through"; std::string default_implementation = "Pass_Through";
unsigned int channel_count;
std::string tracking_implementation; std::string tracking_implementation;
std::string telemetry_decoder_implementation; std::string telemetry_decoder_implementation;
std::string acquisition_implementation; std::string acquisition_implementation;
unsigned int total_channels = configuration->property("Channels_GPS.count", 0) +
configuration->property("Channels_1C.count", 0) +
configuration->property("Channels_2S.count", 0) +
configuration->property("Channels_Galileo.count", 0) +
configuration->property("Channels_1B.count", 0) +
configuration->property("Channels_5X.count", 0);
std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> channels(new std::vector<std::unique_ptr<GNSSBlockInterface>>(total_channels));
unsigned int channel_absolute_id = 0; unsigned int channel_absolute_id = 0;
unsigned int Channels_1C_count=configuration->property("Channels_1C.count", 0);
unsigned int Channels_2S_count=configuration->property("Channels_2S.count", 0);
unsigned int Channels_1B_count=configuration->property("Channels_1B.count", 0);
unsigned int Channels_5X_count=configuration->property("Channels_5X.count", 0);
unsigned int total_channels = Channels_1C_count +
Channels_2S_count +
Channels_1B_count +
Channels_5X_count;
std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> channels(new std::vector<std::unique_ptr<GNSSBlockInterface>>(total_channels));
//**************** GPS L1 C/A CHANNELS ********************** //**************** GPS L1 C/A CHANNELS **********************
channel_count = configuration->property("Channels_GPS.count", 0); // DEPRECATED
if (channel_count == 0) LOG(INFO) << "Getting " << Channels_1C_count << " GPS L1 C/A channels";
tracking_implementation = configuration->property("Tracking_1C.implementation", default_implementation);
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1C.implementation", default_implementation);
acquisition_implementation = configuration->property("Acquisition_1C.implementation", default_implementation);
for (unsigned int i = 0; i < Channels_1C_count; i++)
{ {
channel_count = configuration->property("Channels_1C.count", 0);
}
LOG(INFO) << "Getting " << channel_count << " GPS L1 C/A channels";
tracking_implementation = configuration->property("Tracking_GPS.implementation", default_implementation);
if (tracking_implementation.compare(default_implementation) == 0)
{
tracking_implementation = configuration->property("Tracking_1C.implementation", default_implementation);
}
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_GPS.implementation", default_implementation);
if (telemetry_decoder_implementation.compare(default_implementation) == 0)
{
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1C.implementation", default_implementation);
}
acquisition_implementation = configuration->property("Acquisition_GPS.implementation", default_implementation);
if (acquisition_implementation.compare(default_implementation) == 0)
{
acquisition_implementation = configuration->property("Acquisition_1C.implementation", default_implementation);
}
bool apply_;
std::string s;
for (unsigned int i = 0; i < total_channels; i++)
{
apply_ = false;
if( total_channels == channel_count )
{
apply_ = true;
}
// Search for specific implementation of that particular channel in config file
//(i.e. Acquisition_GPS0.implementation=xxxx) DEPRECATED
s = configuration->property("Channel" + boost::lexical_cast<std::string>(i) + ".signal", configuration->property("Channel.signal", std::string("W")));
if( s.compare("1C") == 0 )
{
apply_ = true;
}
std::string acquisition_implementation_specific = configuration->property(
"Acquisition_GPS" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation);
//(i.e. Acquisition_1C0.implementation=xxxx) //(i.e. Acquisition_1C0.implementation=xxxx)
if(acquisition_implementation_specific.compare(default_implementation) == 0) std::string acquisition_implementation_specific = configuration->property(
{
acquisition_implementation_specific = configuration->property(
"Acquisition_1C" + boost::lexical_cast<std::string>(i) + ".implementation", "Acquisition_1C" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation); acquisition_implementation);
}
if(acquisition_implementation_specific.compare(default_implementation) != 0)
{
acquisition_implementation = acquisition_implementation_specific;
apply_ = true;
}
//(i.e. Tracking_GPS0.implementation=xxxx) DEPRECATED
std::string tracking_implementation_specific = configuration->property(
"Tracking_GPS" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation);
//(i.e. Tracking_1C0.implementation=xxxx) //(i.e. Tracking_1C0.implementation=xxxx)
if(tracking_implementation_specific.compare(default_implementation) == 0) std::string tracking_implementation_specific = configuration->property(
{
tracking_implementation_specific = configuration->property(
"Tracking_1C" + boost::lexical_cast<std::string>(i) + ".implementation", "Tracking_1C" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation); tracking_implementation);
} std::string telemetry_decoder_implementation_specific = configuration->property(
if(tracking_implementation_specific.compare(default_implementation) != 0)
{
tracking_implementation = tracking_implementation_specific;
apply_ = true;
}
//(i.e. TelemetryDecoder_GPS0.implementation=xxxx) DEPRECATED
std::string telemetry_decoder_implementation_specific = configuration->property(
"TelemetryDecoder_GPS" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation);
//(i.e. TelemetryDecoder_1C0.implementation=xxxx)
if(telemetry_decoder_implementation_specific.compare(default_implementation) == 0)
{
telemetry_decoder_implementation_specific = configuration->property(
"TelemetryDecoder_1C" + boost::lexical_cast<std::string>(i) + ".implementation", "TelemetryDecoder_1C" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation); telemetry_decoder_implementation);
}
if(telemetry_decoder_implementation_specific.compare(default_implementation) != 0)
{
telemetry_decoder_implementation = telemetry_decoder_implementation_specific;
apply_ = true;
}
// Push back the channel to the vector of channels, if apply. // Push back the channel to the vector of channels
if((configuration->property("Channels_GPS.count", 0) > 0) and apply_) channels->at(channel_absolute_id) = std::move(GetChannel_1C(configuration,
{ acquisition_implementation_specific,
channels->at(i) = std::move(GetChannel_GPS(configuration, tracking_implementation_specific,
acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue)); telemetry_decoder_implementation_specific,
channel_absolute_id++; channel_absolute_id,
} queue));
if((configuration->property("Channels_1C.count", 0) > 0) and apply_) channel_absolute_id++;
{
channels->at(i) = std::move(GetChannel_1C(configuration,
acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue));
channel_absolute_id++;
}
} }
//**************** GPS L2C (M) CHANNELS ********************** //**************** GPS L2C (M) CHANNELS **********************
channel_count = configuration->property("Channels_2S.count", 0); LOG(INFO)<< "Getting " << Channels_2S_count << " GPS L2C (M) channels";
tracking_implementation = configuration->property("Tracking_2S.implementation", default_implementation);
LOG(INFO) << "Getting " << channel_count << " GPS L2C (M) channels";
tracking_implementation = configuration->property("Tracking_2S.implementation", default_implementation);
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_2S.implementation", default_implementation); telemetry_decoder_implementation = configuration->property("TelemetryDecoder_2S.implementation", default_implementation);
acquisition_implementation = configuration->property("Acquisition_2S.implementation", default_implementation); acquisition_implementation = configuration->property("Acquisition_2S.implementation", default_implementation);
for (unsigned int i = 0; i < Channels_2S_count; i++)
for (unsigned int i = 0; i < total_channels; i++)
{ {
apply_ = false; //(i.e. Acquisition_1C0.implementation=xxxx)
if( total_channels == channel_count )
{
apply_ = true;
}
// Search for specific implementation of that particular channel in config file
//(i.e. Acquisition_2S0.implementation=xxxx)
s = configuration->property("Channel" + boost::lexical_cast<std::string>(i) + ".signal", configuration->property("Channel.signal", std::string("W")));
if( s.compare("2S") == 0 )
{
apply_ = true;
}
std::string acquisition_implementation_specific = configuration->property( std::string acquisition_implementation_specific = configuration->property(
"Acquisition_2S" + boost::lexical_cast<std::string>(i) + ".implementation", "Acquisition_2S" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation); acquisition_implementation);
//(i.e. Tracking_1C0.implementation=xxxx)
if(acquisition_implementation_specific.compare(default_implementation) != 0) std::string tracking_implementation_specific = configuration->property(
{ "Tracking_2S" + boost::lexical_cast<std::string>(i) + ".implementation",
acquisition_implementation = acquisition_implementation_specific; tracking_implementation);
apply_ = true;
}
//(i.e. Tracking_2S0.implementation=xxxx)
std::string tracking_implementation_specific = configuration->property(
"Tracking_2S" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation);
if(tracking_implementation_specific.compare(default_implementation) != 0)
{
tracking_implementation = tracking_implementation_specific;
apply_ = true;
}
//(i.e. TelemetryDecoder_1C0.implementation=xxxx)
std::string telemetry_decoder_implementation_specific = configuration->property( std::string telemetry_decoder_implementation_specific = configuration->property(
"TelemetryDecoder_2S" + boost::lexical_cast<std::string>(i) + ".implementation", "TelemetryDecoder_2S" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation); telemetry_decoder_implementation);
if(telemetry_decoder_implementation_specific.compare(default_implementation) != 0) // Push back the channel to the vector of channels
{ channels->at(channel_absolute_id) = std::move(GetChannel_2S(configuration,
telemetry_decoder_implementation = telemetry_decoder_implementation_specific; acquisition_implementation_specific,
apply_ = true; tracking_implementation_specific,
} telemetry_decoder_implementation_specific,
channel_absolute_id,
queue));
// Push back the channel to the vector of channels, if apply. channel_absolute_id++;
if((channel_count > 0) and apply_)
{
channels->at(i) = std::move(GetChannel_2S(configuration,
acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue));
channel_absolute_id++;
}
} }
//**************** GALILEO E1 B (I/NAV OS) ********************** //**************** GALILEO E1 B (I/NAV OS) **********************
channel_count = configuration->property("Channels_Galileo.count", 0); // DEPRECATED
if (channel_count == 0)
{
channel_count = configuration->property("Channels_1B.count", 0);
}
LOG(INFO) << "Getting " << channel_count << " Galileo E1 B (I/NAV OS) channels"; LOG(INFO) << "Getting " << Channels_1B_count << " GALILEO E1 B (I/NAV OS) channels";
tracking_implementation = configuration->property("Tracking_1B.implementation", default_implementation);
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1B.implementation", default_implementation);
acquisition_implementation = configuration->property("Acquisition_1B.implementation", default_implementation);
for (unsigned int i = 0; i < Channels_1B_count; i++)
{
//(i.e. Acquisition_1C0.implementation=xxxx)
std::string acquisition_implementation_specific = configuration->property(
"Acquisition_1B" + boost::lexical_cast<std::string>(i) + ".implementation",
acquisition_implementation);
//(i.e. Tracking_1C0.implementation=xxxx)
std::string tracking_implementation_specific = configuration->property(
"Tracking_1B" + boost::lexical_cast<std::string>(i) + ".implementation",
tracking_implementation);
std::string telemetry_decoder_implementation_specific = configuration->property(
"TelemetryDecoder_1B" + boost::lexical_cast<std::string>(i) + ".implementation",
telemetry_decoder_implementation);
tracking_implementation = configuration->property("Tracking_Galileo.implementation", default_implementation); // DEPRECATED // Push back the channel to the vector of channels
if (tracking_implementation.compare(default_implementation) == 0) channels->at(channel_absolute_id) = std::move(GetChannel_1B(configuration,
{ acquisition_implementation_specific,
tracking_implementation = configuration->property("Tracking_1B.implementation", std::string("W")); tracking_implementation_specific,
} telemetry_decoder_implementation_specific,
channel_absolute_id,
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_Galileo.implementation", default_implementation); // DEPRECATED queue));
if (telemetry_decoder_implementation.compare(default_implementation) == 0) channel_absolute_id++;
{ }
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1B.implementation", std::string("W"));
}
acquisition_implementation = configuration->property("Acquisition_Galileo.implementation", default_implementation); // DEPRECATED
if (acquisition_implementation.compare(default_implementation) == 0)
{
acquisition_implementation = configuration->property("Acquisition_1B.implementation", std::string("W"));
}
for (unsigned int i = 0; i < total_channels; i++)
{
apply_ = false;
if( total_channels == channel_count )
{
apply_ = true;
}
// Search for specific implementation of that particular channel in config file
//(i.e. Acquisition_Galileo0.implementation=xxxx) DEPRECATED
s = configuration->property("Channel" + boost::lexical_cast<std::string>(i) + ".signal", configuration->property("Channel.signal", std::string("W")));
if( s.compare("1B") == 0 )
{
apply_ = true;
}
std::string acquisition_implementation_specific = configuration->property(
"Acquisition_Galileo" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation);
//(i.e. Acquisition_1B0.implementation=xxxx)
if(acquisition_implementation_specific.compare(default_implementation) == 0)
{
acquisition_implementation_specific = configuration->property(
"Acquisition_1B" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation);
}
if(acquisition_implementation_specific.compare(default_implementation) != 0)
{
acquisition_implementation = acquisition_implementation_specific;
apply_ = true;
}
//(i.e. Tracking_Galileo0.implementation=xxxx) DEPRECATED
std::string tracking_implementation_specific = configuration->property(
"Tracking_Galileo" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation);
//(i.e. Tracking_1B0.implementation=xxxx)
if(tracking_implementation_specific.compare(default_implementation) == 0)
{
tracking_implementation_specific = configuration->property(
"Tracking_1B" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation);
}
if(tracking_implementation_specific.compare(default_implementation) != 0)
{
tracking_implementation = tracking_implementation_specific;
apply_ = true;
}
//(i.e. TelemetryDecoder_Galileo0.implementation=xxxx) DEPRECATED
std::string telemetry_decoder_implementation_specific = configuration->property(
"TelemetryDecoder_Galileo" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation);
//(i.e. TelemetryDecoder_1B0.implementation=xxxx)
if(telemetry_decoder_implementation_specific.compare(default_implementation) == 0)
{
telemetry_decoder_implementation_specific = configuration->property(
"TelemetryDecoder_1B" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation);
}
if(telemetry_decoder_implementation_specific.compare(default_implementation) != 0)
{
telemetry_decoder_implementation = telemetry_decoder_implementation_specific;
apply_ = true;
}
// Push back the channel to the vector of channels, if apply.
if((configuration->property("Channels_Galileo.count", 0) > 0) and apply_)
{
channels->at(i) = std::move(GetChannel_Galileo(configuration,
acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue));
channel_absolute_id++;
}
if((configuration->property("Channels_1B.count", 0) > 0) and apply_)
{
channels->at(i) = std::move(GetChannel_1B(configuration,
acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue));
channel_absolute_id++;
}
}
//**************** GALILEO E5a I (F/NAV OS) CHANNELS ********************** //**************** GALILEO E5a I (F/NAV OS) CHANNELS **********************
channel_count = configuration->property("Channels_5X.count", 0); LOG(INFO) << "Getting " << Channels_5X_count << " GALILEO E5a I (F/NAV OS) channels";
tracking_implementation = configuration->property("Tracking_5X.implementation", default_implementation);
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_5X.implementation", default_implementation);
acquisition_implementation = configuration->property("Acquisition_5X.implementation", default_implementation);
for (unsigned int i = 0; i < Channels_5X_count; i++)
{
//(i.e. Acquisition_1C0.implementation=xxxx)
std::string acquisition_implementation_specific = configuration->property(
"Acquisition_5X" + boost::lexical_cast<std::string>(i) + ".implementation",
acquisition_implementation);
//(i.e. Tracking_1C0.implementation=xxxx)
std::string tracking_implementation_specific = configuration->property(
"Tracking_5X" + boost::lexical_cast<std::string>(i) + ".implementation",
tracking_implementation);
std::string telemetry_decoder_implementation_specific = configuration->property(
"TelemetryDecoder_5X" + boost::lexical_cast<std::string>(i) + ".implementation",
telemetry_decoder_implementation);
LOG(INFO) << "Getting " << channel_count << " GALILEO E5a I (F/NAV OS) channels"; // Push back the channel to the vector of channels
channels->at(channel_absolute_id) = std::move(GetChannel_5X(configuration,
tracking_implementation = configuration->property("Tracking_5X.implementation", default_implementation); acquisition_implementation_specific,
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_5X.implementation", default_implementation); tracking_implementation_specific,
acquisition_implementation = configuration->property("Acquisition_5X.implementation", default_implementation); telemetry_decoder_implementation_specific,
channel_absolute_id,
for (unsigned int i = 0; i < total_channels; i++) queue));
{ channel_absolute_id++;
apply_ = false; }
if( total_channels == channel_count )
{
apply_ = true;
}
// Search for specific implementation of that particular channel in config file
//(i.e. Acquisition_5X0.implementation=xxxx)
s = configuration->property("Channel" + boost::lexical_cast<std::string>(i) + ".signal", configuration->property("Channel.signal", std::string("W")));
if( s.compare("5X") == 0 )
{
apply_ = true;
}
std::string acquisition_implementation_specific = configuration->property(
"Acquisition_5X" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation);
if(acquisition_implementation_specific.compare(default_implementation) != 0)
{
acquisition_implementation = acquisition_implementation_specific;
apply_ = true;
}
//(i.e. Tracking_5X0.implementation=xxxx)
std::string tracking_implementation_specific = configuration->property(
"Tracking_5X" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation);
if(tracking_implementation_specific.compare(default_implementation) != 0)
{
tracking_implementation = tracking_implementation_specific;
apply_ = true;
}
//(i.e. TelemetryDecoder_5X0.implementation=xxxx)
std::string telemetry_decoder_implementation_specific = configuration->property(
"TelemetryDecoder_5X" + boost::lexical_cast<std::string>(i) + ".implementation",
default_implementation);
if(telemetry_decoder_implementation_specific.compare(default_implementation) != 0)
{
telemetry_decoder_implementation = telemetry_decoder_implementation_specific;
apply_ = true;
}
// Push back the channel to the vector of channels, if apply.
if((channel_count > 0) and apply_)
{
channels->at(i) = std::move(GetChannel_5X(configuration,
acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue));
channel_absolute_id++;
}
}
return channels; return channels;
} }
/* /*
* Returns the block with the required configuration and implementation * Returns the block with the required configuration and implementation
* *
@ -1382,12 +1016,6 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetBlock(
out_streams)); out_streams));
block = std::move(block_); block = std::move(block_);
} }
else if (implementation.compare("Mixed_Observables") == 0)
{
std::unique_ptr<GNSSBlockInterface> block_(new MixedObservables(configuration.get(), role, in_streams,
out_streams));
block = std::move(block_);
}
// PVT ------------------------------------------------------------------------- // PVT -------------------------------------------------------------------------
else if (implementation.compare("GPS_L1_CA_PVT") == 0) else if (implementation.compare("GPS_L1_CA_PVT") == 0)
{ {

View File

@ -83,10 +83,6 @@ public:
boost::shared_ptr<gr::msg_queue> queue); boost::shared_ptr<gr::msg_queue> queue);
private: private:
// DEPRECATED
std::unique_ptr<GNSSBlockInterface> GetChannel_GPS(std::shared_ptr<ConfigurationInterface> configuration,
std::string acq, std::string trk, std::string tlm, int channel,
boost::shared_ptr<gr::msg_queue> queue);
std::unique_ptr<GNSSBlockInterface> GetChannel_1C(std::shared_ptr<ConfigurationInterface> configuration, std::unique_ptr<GNSSBlockInterface> GetChannel_1C(std::shared_ptr<ConfigurationInterface> configuration,
std::string acq, std::string trk, std::string tlm, int channel, std::string acq, std::string trk, std::string tlm, int channel,
@ -96,11 +92,6 @@ private:
std::string acq, std::string trk, std::string tlm, int channel, std::string acq, std::string trk, std::string tlm, int channel,
boost::shared_ptr<gr::msg_queue> queue); boost::shared_ptr<gr::msg_queue> queue);
//DEPRECATED
std::unique_ptr<GNSSBlockInterface> GetChannel_Galileo(std::shared_ptr<ConfigurationInterface> configuration,
std::string acq, std::string trk, std::string tlm, int channel,
boost::shared_ptr<gr::msg_queue> queue);
std::unique_ptr<GNSSBlockInterface> GetChannel_1B(std::shared_ptr<ConfigurationInterface> configuration, std::unique_ptr<GNSSBlockInterface> GetChannel_1B(std::shared_ptr<ConfigurationInterface> configuration,
std::string acq, std::string trk, std::string tlm, int channel, std::string acq, std::string trk, std::string tlm, int channel,
boost::shared_ptr<gr::msg_queue> queue); boost::shared_ptr<gr::msg_queue> queue);

View File

@ -187,7 +187,6 @@ void GNSSFlowgraph::connect()
} }
DLOG(INFO) << "blocks connected internally"; DLOG(INFO) << "blocks connected internally";
// Signal Source (i) > Signal conditioner (i) > // Signal Source (i) > Signal conditioner (i) >
int RF_Channels = 0; int RF_Channels = 0;
int signal_conditioner_ID = 0; int signal_conditioner_ID = 0;
@ -257,7 +256,6 @@ void GNSSFlowgraph::connect()
return; return;
} }
} }
DLOG(INFO) << "Signal source connected to signal conditioner"; DLOG(INFO) << "Signal source connected to signal conditioner";
// Signal conditioner (selected_signal_source) >> channels (i) (dependent of their associated SignalSource_ID) // Signal conditioner (selected_signal_source) >> channels (i) (dependent of their associated SignalSource_ID)
@ -294,22 +292,20 @@ void GNSSFlowgraph::connect()
return; return;
} }
std::string default_signal = configuration_->property("Channel.signal", std::string("1C")); std::string gnss_signal = channels_.at(i)->get_signal().get_signal_str(); // use channel's implicit signal!
std::string gnss_signal = (configuration_->property("Channel" + boost::lexical_cast<std::string>(i) + ".signal", default_signal)); std::cout<<"gnss_signal "<<gnss_signal<<std::endl;
while (gnss_signal.compare(available_GNSS_signals_.front().get_signal_str()) != 0 ) while (gnss_signal.compare(available_GNSS_signals_.front().get_signal_str()) != 0 )
{ {
available_GNSS_signals_.push_back(available_GNSS_signals_.front()); available_GNSS_signals_.push_back(available_GNSS_signals_.front());
available_GNSS_signals_.pop_front(); available_GNSS_signals_.pop_front();
} }
channels_.at(i)->set_signal(available_GNSS_signals_.front()); channels_.at(i)->set_signal(available_GNSS_signals_.front());
LOG(INFO) << "Channel " << i << " assigned to " << available_GNSS_signals_.front();
//channels_.at(i)->start_channel();
if (channels_state_[i] == 1) if (channels_state_[i] == 1)
{ {
channels_.at(i)->start_acquisition(); channels_.at(i)->start_acquisition();
available_GNSS_signals_.pop_front(); available_GNSS_signals_.pop_front();
LOG(INFO) << "Channel " << i << " assigned to " << available_GNSS_signals_.front();
LOG(INFO) << "Channel " << i << " connected to observables and ready for acquisition"; LOG(INFO) << "Channel " << i << " connected to observables and ready for acquisition";
} }
else else
@ -379,7 +375,6 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what)
case 0: case 0:
LOG(INFO) << "Channel " << who << " ACQ FAILED satellite " << channels_.at(who)->get_signal().get_satellite() << ", Signal " << channels_.at(who)->get_signal().get_signal_str(); LOG(INFO) << "Channel " << who << " ACQ FAILED satellite " << channels_.at(who)->get_signal().get_satellite() << ", Signal " << channels_.at(who)->get_signal().get_signal_str();
available_GNSS_signals_.push_back(channels_.at(who)->get_signal()); available_GNSS_signals_.push_back(channels_.at(who)->get_signal());
//TODO: Optimize the channel and signal matching! //TODO: Optimize the channel and signal matching!
while ( channels_.at(who)->get_signal().get_signal_str().compare(available_GNSS_signals_.front().get_signal_str()) != 0 ) while ( channels_.at(who)->get_signal().get_signal_str().compare(available_GNSS_signals_.front().get_signal_str()) != 0 )
{ {
@ -388,6 +383,7 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what)
} }
channels_.at(who)->set_signal(available_GNSS_signals_.front()); channels_.at(who)->set_signal(available_GNSS_signals_.front());
available_GNSS_signals_.pop_front(); available_GNSS_signals_.pop_front();
usleep(100);
channels_.at(who)->start_acquisition(); channels_.at(who)->start_acquisition();
break; break;
case 1: case 1:
@ -556,13 +552,9 @@ void GNSSFlowgraph::set_signals_list()
/* /*
* Read GNSS-SDR default GNSS system and signal * Read GNSS-SDR default GNSS system and signal
*/ */
std::string default_system = configuration_->property("Channel.system", std::string("")); // DEPRECATED
std::string default_signal = configuration_->property("Channel.signal", std::string(""));
unsigned int total_channels = configuration_->property("Channels_GPS.count", 0) + unsigned int total_channels = configuration_->property("Channels_1C.count", 0) +
configuration_->property("Channels_1C.count", 0) +
configuration_->property("Channels_2S.count", 0) + configuration_->property("Channels_2S.count", 0) +
configuration_->property("Channels_Galileo.count", 0) +
configuration_->property("Channels_1B.count", 0) + configuration_->property("Channels_1B.count", 0) +
configuration_->property("Channels_5X.count", 0); configuration_->property("Channels_5X.count", 0);
@ -583,7 +575,6 @@ void GNSSFlowgraph::set_signals_list()
std::string sv_list = configuration_->property("Galileo.prns", std::string("") ); std::string sv_list = configuration_->property("Galileo.prns", std::string("") );
if( sv_list.length() > 0 ) if( sv_list.length() > 0 )
{ {
// Reset the available prns: // Reset the available prns:
@ -613,7 +604,6 @@ void GNSSFlowgraph::set_signals_list()
available_gps_prn = tmp_set; available_gps_prn = tmp_set;
} }
} }
sv_list = configuration_->property("SBAS.prns", std::string("") ); sv_list = configuration_->property("SBAS.prns", std::string("") );
if( sv_list.length() > 0 ) if( sv_list.length() > 0 )
@ -630,7 +620,7 @@ void GNSSFlowgraph::set_signals_list()
} }
} }
if ((configuration_->property("Channels_1C.count", 0) > 0) or (default_system.find(std::string("GPS")) != std::string::npos) or (default_signal.compare("1C") == 0) or (configuration_->property("Channels_GPS.count", 0) > 0) ) if (configuration_->property("Channels_1C.count", 0) > 0 )
{ {
/* /*
* Loop to create GPS L1 C/A signals * Loop to create GPS L1 C/A signals
@ -644,7 +634,7 @@ void GNSSFlowgraph::set_signals_list()
} }
} }
if ((configuration_->property("Channels_2S.count", 0) > 0) or (default_system.find(std::string("GPS L2C M")) != std::string::npos) ) if (configuration_->property("Channels_2S.count", 0) > 0)
{ {
/* /*
* Loop to create GPS L2C M signals * Loop to create GPS L2C M signals
@ -658,8 +648,7 @@ void GNSSFlowgraph::set_signals_list()
} }
} }
if (configuration_->property("Channels_SBAS.count", 0) > 0)
if ((configuration_->property("Channels_SBAS.count", 0) > 0) or default_system.find(std::string("SBAS")) != std::string::npos)
{ {
/* /*
* Loop to create SBAS L1 C/A signals * Loop to create SBAS L1 C/A signals
@ -674,7 +663,7 @@ void GNSSFlowgraph::set_signals_list()
} }
if ((configuration_->property("Channels_1B.count", 0) > 0) or (default_system.find(std::string("Galileo")) != std::string::npos) or (default_signal.compare("1B") == 0) or (configuration_->property("Channels_Galileo.count", 0) > 0)) if (configuration_->property("Channels_1B.count", 0) > 0)
{ {
/* /*
* Loop to create the list of Galileo E1 B signals * Loop to create the list of Galileo E1 B signals
@ -688,7 +677,7 @@ void GNSSFlowgraph::set_signals_list()
} }
} }
if ((configuration_->property("Channels_5X.count", 0) > 0) ) if (configuration_->property("Channels_5X.count", 0) > 0 )
{ {
/* /*
* Loop to create the list of Galileo E1 B signals * Loop to create the list of Galileo E1 B signals
@ -701,7 +690,6 @@ void GNSSFlowgraph::set_signals_list()
*available_gnss_prn_iter), std::string("5X"))); *available_gnss_prn_iter), std::string("5X")));
} }
} }
/* /*
* Ordering the list of signals from configuration file * Ordering the list of signals from configuration file
*/ */
@ -711,45 +699,32 @@ void GNSSFlowgraph::set_signals_list()
for (unsigned int i = 0; i < total_channels; i++) for (unsigned int i = 0; i < total_channels; i++)
{ {
std::string gnss_signal = (configuration_->property("Channel" + boost::lexical_cast<std::string>(i) + ".signal", default_signal)); std::string gnss_signal = (configuration_->property("Channel" + boost::lexical_cast<std::string>(i) + ".signal", std::string("1C")));
std::string gnss_system; std::string gnss_system;
if((gnss_signal.compare("1C") == 0) or (gnss_signal.compare("2S") == 0) ) gnss_system = "GPS"; if((gnss_signal.compare("1C") == 0) or (gnss_signal.compare("2S") == 0) ) gnss_system = "GPS";
if((gnss_signal.compare("1B") == 0) or (gnss_signal.compare("5X") == 0) ) gnss_system = "Galileo"; if((gnss_signal.compare("1B") == 0) or (gnss_signal.compare("5X") == 0) ) gnss_system = "Galileo";
LOG(INFO) << "Channel " << i << " system " << gnss_system << ", signal " << gnss_signal;
unsigned int sat = configuration_->property("Channel" + boost::lexical_cast<std::string>(i) + ".satellite", 0); unsigned int sat = configuration_->property("Channel" + boost::lexical_cast<std::string>(i) + ".satellite", 0);
LOG(INFO) << "Channel " << i << " system " << gnss_system << ", signal " << gnss_signal <<", sat "<<sat;
if (((sat == 0) || (sat == gnss_it->get_satellite().get_PRN())) and ( gnss_it->get_signal_str().compare(gnss_signal) == 0 ) ) // 0 = not PRN in configuration file if (sat == 0) // 0 = not PRN in configuration file
{ {
gnss_it++; gnss_it++;
} }
else else
{ {
Gnss_Signal signal_value = Gnss_Signal(Gnss_Satellite(gnss_system, ( sat != 0 ? sat : gnss_it->get_satellite().get_PRN())), gnss_signal); Gnss_Signal signal_value = Gnss_Signal(Gnss_Satellite(gnss_system, sat), gnss_signal);
if( gnss_it == available_GNSS_signals_.begin() ) available_GNSS_signals_.remove(signal_value);
{
available_GNSS_signals_.remove(signal_value);
gnss_it = available_GNSS_signals_.begin();
}
else
{
available_GNSS_signals_.remove(signal_value);
}
available_GNSS_signals_.insert(gnss_it, signal_value); available_GNSS_signals_.insert(gnss_it, signal_value);
} }
} }
// **** FOR DEBUGGING THE LIST OF GNSS SIGNALS **** // **** FOR DEBUGGING THE LIST OF GNSS SIGNALS ****
// std::cout << "default_system=" << default_system << std::endl; std::list<Gnss_Signal>::iterator available_gnss_list_iter;
// std::cout << "default_signal=" << default_signal << std::endl; for (available_gnss_list_iter = available_GNSS_signals_.begin(); available_gnss_list_iter
// std::list<Gnss_Signal>::iterator available_gnss_list_iter; != available_GNSS_signals_.end(); available_gnss_list_iter++)
// for (available_gnss_list_iter = available_GNSS_signals_.begin(); available_gnss_list_iter {
// != available_GNSS_signals_.end(); available_gnss_list_iter++) std::cout << *available_gnss_list_iter << std::endl;
// { }
// std::cout << *available_gnss_list_iter << std::endl;
// }
} }

View File

@ -36,6 +36,10 @@ Gnss_Signal::Gnss_Signal()
this->signal = ""; this->signal = "";
} }
Gnss_Signal::Gnss_Signal(const std::string& signal_)
{
this->signal = signal_;
}
Gnss_Signal::Gnss_Signal(const Gnss_Satellite& satellite_, const std::string& signal_) Gnss_Signal::Gnss_Signal(const Gnss_Satellite& satellite_, const std::string& signal_)
{ {

View File

@ -48,6 +48,7 @@ private:
std::string signal; std::string signal;
public: public:
Gnss_Signal(); Gnss_Signal();
Gnss_Signal(const std::string& signal_);
Gnss_Signal(const Gnss_Satellite& satellite_, const std::string& signal_); Gnss_Signal(const Gnss_Satellite& satellite_, const std::string& signal_);
~Gnss_Signal(); ~Gnss_Signal();
std::string get_signal_str() const; //!< Get the satellite signal {"1C" for GPS L1 C/A, "2S" for GPS L2C (M), "1B" for Galileo E1B, "5X" for Galileo E5a} std::string get_signal_str() const; //!< Get the satellite signal {"1C" for GPS L1 C/A, "2S" for GPS L2C (M), "1B" for Galileo E1B, "5X" for Galileo E5a}

View File

@ -172,6 +172,7 @@ target_link_libraries(run_tests ${CLANG_FLAGS}
${GNURADIO_ANALOG_LIBRARIES} ${GNURADIO_ANALOG_LIBRARIES}
${ARMADILLO_LIBRARIES} ${ARMADILLO_LIBRARIES}
${VOLK_LIBRARIES} ${VOLK_LIBRARIES}
channel_fsm
gnss_sp_libs gnss_sp_libs
gnss_rx gnss_rx
gnss_system_parameters gnss_system_parameters

View File

@ -47,14 +47,20 @@ file(GLOB FRONT_END_CAL_HEADERS "*.h")
add_library(front_end_cal_lib ${FRONT_END_CAL_SOURCES} ${FRONT_END_CAL_HEADERS}) add_library(front_end_cal_lib ${FRONT_END_CAL_SOURCES} ${FRONT_END_CAL_HEADERS})
source_group(Headers FILES ${FRONT_END_CAL_HEADERS}) source_group(Headers FILES ${FRONT_END_CAL_HEADERS})
target_link_libraries(front_end_cal_lib ${Boost_LIBRARIES} target_link_libraries(front_end_cal_lib ${MAC_LIBRARIES}
${Boost_LIBRARIES}
${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES}
${GNURADIO_BLOCKS_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES}
${GNURADIO_FFT_LIBRARIES}
${GNURADIO_FILTER_LIBRARIES}
${GFlags_LIBS} ${GFlags_LIBS}
${GLOG_LIBRARIES} ${GLOG_LIBRARIES}
${ARMADILLO_LIBRARIES} ${ARMADILLO_LIBRARIES}
${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES}
${GNSS_SDR_OPTIONAL_LIBS}
rx_core_lib
gnss_rx gnss_rx
channel_fsm
gnss_sp_libs gnss_sp_libs
) )
@ -70,18 +76,24 @@ add_custom_command(TARGET front-end-cal POST_BUILD
${CMAKE_SOURCE_DIR}/install/$<TARGET_FILE_NAME:front-end-cal>) ${CMAKE_SOURCE_DIR}/install/$<TARGET_FILE_NAME:front-end-cal>)
target_link_libraries(front-end-cal ${GNURADIO_RUNTIME_LIBRARIES} target_link_libraries(front-end-cal ${MAC_LIBRARIES}
${GNURADIO_BLOCKS_LIBRARIES} ${Boost_LIBRARIES}
${Boost_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES}
${GFlags_LIBS} ${GNURADIO_BLOCKS_LIBRARIES}
${GLOG_LIBRARIES} ${GNURADIO_FFT_LIBRARIES}
${ARMADILLO_LIBRARIES} ${GNURADIO_FILTER_LIBRARIES}
gnss_rx ${GFlags_LIBS}
gnss_sp_libs ${GLOG_LIBRARIES}
front_end_cal_lib ${ARMADILLO_LIBRARIES}
${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES}
${GNSS_SDR_OPTIONAL_LIBS}
rx_core_lib
gnss_rx
gnss_sp_libs
front_end_cal_lib
) )
install(TARGETS front-end-cal install(TARGETS front-end-cal
RUNTIME DESTINATION bin RUNTIME DESTINATION bin
COMPONENT "front-end-cal" COMPONENT "front-end-cal"