diff --git a/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf b/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf index 02b148585..c8030fbe3 100644 --- a/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf +++ b/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf @@ -1,7 +1,7 @@ ; 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 ; 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] @@ -29,11 +29,12 @@ GNSS-SDR.SUPL_CI=0x31b0 ; # implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) 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 ; # 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] SignalSource.sampling_frequency=4000000 @@ -42,7 +43,7 @@ SignalSource.sampling_frequency=4000000 SignalSource.freq=1575420000 ; # gain: Front-end Gain in [dB] -SignalSource.gain=50 +SignalSource.gain=40 ; # subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=A:0 @@ -69,13 +70,15 @@ SignalSource.enable_throttle_control=false ;#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=Pass_Through +SignalConditioner.implementation=Signal_Conditioner +;SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through +DataTypeAdapter.item_type=cshort +;DataTypeAdapter.item_type=cbyte ;######### INPUT_FILTER CONFIG ############ ;## 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 ;#[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=Pass_Through +;InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. 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. ;#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. InputFilter.output_item_type=gr_complex @@ -109,7 +112,7 @@ InputFilter.output_item_type=gr_complex 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 +InputFilter.number_of_taps=11 ;#number_of _bands: Number of frequency bands in the filter. 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 InputFilter.band1_begin=0.0 -InputFilter.band1_end=0.45 -InputFilter.band2_begin=0.55 +InputFilter.band1_end=0.48 +InputFilter.band2_begin=0.52 InputFilter.band2_end=1.0 ;#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 ############ ;#count: Number of available GPS satellite channels. -Channels_GPS.count=12 +Channels_1C.count=8 ;#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 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.system=GPS 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 ###### ;#The following options are specific to each channel and overwrite the generic options @@ -210,30 +225,30 @@ Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ ;#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 -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. -Acquisition_GPS.item_type=gr_complex +Acquisition_1C.item_type=gr_complex ;#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] -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] -Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition -;Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Tong_Acquisition +Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#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] -;Acquisition_GPS.pfa=0.001 +;Acquisition_1C.pfa=0.00001 ;#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] -Acquisition_GPS.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]) -Acquisition_GPS.bit_transition_flag=false +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]) +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_GPS.max_dwells=1 +Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### @@ -243,37 +258,37 @@ Acquisition_GPS.max_dwells=1 ;######### TRACKING GLOBAL CONFIG ############ ;#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. -Tracking_GPS.item_type=gr_complex +Tracking_1C.item_type=gr_complex ;#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] -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. -Tracking_GPS.dump_filename=./tracking_ch_ +Tracking_1C.dump_filename=./tracking_ch_ ;#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] -Tracking_GPS.dll_bw_hz=4.0; +Tracking_1C.dll_bw_hz=4.0; ;#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] -Tracking_GPS.early_late_space_chips=0.5; +Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A -TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder -TelemetryDecoder_GPS.dump=false +TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder +TelemetryDecoder_1C.dump=false ;#decimation factor -TelemetryDecoder_GPS.decimation_factor=1; +TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#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. 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. PVT.dump_filename=./PVT @@ -316,7 +331,7 @@ PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 -PVT.flag_rtcm_server=false +PVT.flag_rtcm_server=true PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 diff --git a/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf b/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf index 9de67266a..c171bd109 100644 --- a/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf +++ b/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf @@ -1,4 +1,3 @@ -; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; @@ -13,281 +12,73 @@ GNSS-SDR.internal_fs_hz=4000000 ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ -;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source - -;#filename: path to file with the captured GNSS signal samples to be processed -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.filename=/datalogger/signals/Agilent/New York/4msps.dat +SignalSource.item_type=gr_complex SignalSource.sampling_frequency=4000000 - -;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 - -;#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.samples=250000000 SignalSource.repeat=false - -;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false - 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 ;######### SIGNAL_CONDITIONER CONFIG ############ -;## It holds blocks to change data type, filter and resample input data. - -;#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 +SignalConditioner.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ -;#count: Number of available GPS satellite channels. -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_1C.count=8 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 -;######### 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 ############ - -;#dump: Enable or disable the acquisition internal data file logging [true] or [false] -Acquisition_GPS.dump=false -;#filename: Log path and filename -Acquisition_GPS.dump_filename=./acq_dump.dat -;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. -Acquisition_GPS.item_type=gr_complex -;#if: Signal intermediate frequency in [Hz] -Acquisition_GPS.if=0 -;#sampled_ms: Signal block duration for the acquisition signal detection [ms] -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 +Acquisition_1C.dump=false +Acquisition_1C.dump_filename=./acq_dump.dat +Acquisition_1C.item_type=gr_complex +Acquisition_1C.if=0 +Acquisition_1C.sampled_ms=1 +Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition +Acquisition_1C.threshold=0.005 +;Acquisition_1C.pfa=0.01 +Acquisition_1C.doppler_max=10000 +Acquisition_1C.doppler_step=500 ;######### TRACKING GLOBAL CONFIG ############ - -;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] -Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU -;#item_type: Type and resolution for each of the signal samples. -Tracking_GPS.item_type=gr_complex - -;#sampling_frequency: Signal Intermediate Frequency in [Hz] -Tracking_GPS.if=0 - -;#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; +Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU +Tracking_1C.item_type=gr_complex +Tracking_1C.if=0 +Tracking_1C.dump=false +Tracking_1C.dump_filename=../data/epl_tracking_ch_ +Tracking_1C.pll_bw_hz=45.0; +Tracking_1C.dll_bw_hz=2.0; +Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ -;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A -TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder -TelemetryDecoder_GPS.dump=false -;#decimation factor -TelemetryDecoder_GPS.decimation_factor=1; +TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder +TelemetryDecoder_1C.dump=false +TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ -;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables - -;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false - -;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ -;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT - -;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 - -;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [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 - -;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. 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 - -;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; - -;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; - -;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 - PVT.flag_rtcm_server=false PVT.flag_rtcm_tty_port=false PVT.rtcm_dump_devname=/dev/pts/1 - -;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false + diff --git a/conf/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf b/conf/gnss-sdr_Hybrid_nsr_bak.conf similarity index 57% rename from conf/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf rename to conf/gnss-sdr_Hybrid_nsr_bak.conf index c8030fbe3..d800508dd 100644 --- a/conf/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf +++ b/conf/gnss-sdr_Hybrid_nsr_bak.conf @@ -1,20 +1,22 @@ -; 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 -; and run: -; gnss-sdr --config_file=/path/to/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf +; Default configuration file +; You can define your own receiver and invoke it by doing +; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. -GNSS-SDR.internal_fs_hz=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 ############ ControlThread.wait_for_flowgraph=false ;######### 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_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 @@ -26,36 +28,30 @@ GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ -; # implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) -SignalSource.implementation=UHD_Signal_Source +;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) +SignalSource.implementation=Nsr_File_Signal_Source -; # When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...) -SignalSource.device_address=192.168.40.2 +;#filename: path to file with the captured GNSS signal samples to be processed +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. -;SignalSource.item_type=gr_complex -SignalSource.item_type=cshort +;#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 +;#sampling_frequency: Original Signal sampling frequency in [Hz] +SignalSource.sampling_frequency=20480000 -; # freq: RF front-end center frequency in [Hz] +;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 -; # gain: Front-end Gain in [dB] -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. +;#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 +;#repeat: Repeat the processing file. Disable this option in this version 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_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 ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner -;SignalConditioner.implementation=Pass_Through ;######### 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 DataTypeAdapter.implementation=Pass_Through -DataTypeAdapter.item_type=cshort -;DataTypeAdapter.item_type=cbyte +DataTypeAdapter.item_type=float ;######### 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. +;#[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 +InputFilter.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. 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. ;#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. -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. InputFilter.output_item_type=gr_complex @@ -112,7 +105,7 @@ InputFilter.output_item_type=gr_complex 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=11 +InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. 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 InputFilter.band1_begin=0.0 -InputFilter.band1_end=0.48 -InputFilter.band2_begin=0.52 +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) ...]. @@ -146,12 +139,16 @@ InputFilter.filter_type=bandpass ;The minimum value is 16; higher values are slower to compute the filter. 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. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz -InputFilter.sampling_frequency=4000000 -InputFilter.IF=0 +InputFilter.IF=5499998.47412109 +;# Decimation factor after the frequency tranaslating block +InputFilter.decimation_factor=8 ;######### RESAMPLER CONFIG ############ @@ -160,69 +157,25 @@ InputFilter.IF=0 ;#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 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 ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#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 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 -;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 ###### -;#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 +;#signal: +;# "1C" GPS L1 C/A +;# "2S" GPS L2 L2C (M) +;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) +;# "5X" GALILEO E5a I+Q -;######### ACQUISITION GLOBAL CONFIG ############ + +;######### GPS ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false @@ -233,33 +186,47 @@ Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#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] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition -;#threshold: Acquisition threshold. It will be ignored if pfa is defined. -Acquisition_1C.threshold=0.01 +;#threshold: Acquisition threshold +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] -;Acquisition_1C.pfa=0.00001 +;Acquisition_1C.pfa=0.01 ;#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] -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]) -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_1C.doppler_step=250 -;######### ACQUISITION CHANNELS CONFIG ###### -;#The following options are specific to each channel and overwrite the generic options +;######### GALILEO ACQUISITION CONFIG ############ +;#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 -;#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 ;#sampling_frequency: Signal Intermediate Frequency in [Hz] @@ -269,30 +236,80 @@ Tracking_1C.if=0 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. -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] -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] -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] Tracking_1C.order=3; -;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] -Tracking_1C.early_late_space_chips=0.5; +;######### TRACKING GALILEO CONFIG ############ + +;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] +Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking +;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. +Tracking_1B.item_type=gr_complex + +;#sampling_frequency: Signal Intermediate Frequency in [Hz] +Tracking_1B.if=0 + +;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] +Tracking_1B.dump=false + +;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. +Tracking_1B.dump_filename=../data/veml_tracking_ch_ + +;#pll_bw_hz: PLL loop filter bandwidth [Hz] +Tracking_1B.pll_bw_hz=15.0; + +;#dll_bw_hz: DLL loop filter bandwidth [Hz] +Tracking_1B.dll_bw_hz=2.0; + +;#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 ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#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 ############ ;#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] Observables.dump=false @@ -302,38 +319,27 @@ Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ -;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. -PVT.implementation=GPS_L1_CA_PVT - +;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT Hybrid_PVT GALILEO_E1_PVT] in this version. +PVT.implementation=Hybrid_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#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] -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. -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. 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 diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf index 1464d2a95..7b382d96f 100644 --- a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf +++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf @@ -29,7 +29,7 @@ GNSS-SDR.SUPL_CI=0x31b0 SignalSource.implementation=Flexiband_Signal_Source 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. 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/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] -InputFilter0.IF=-205000 +InputFilter0.IF=0; +;#-205000 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 @@ -195,14 +196,10 @@ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. -Channels_GPS.count=8 -;#count: Number of available Galileo satellite channels. -Channels_Galileo.count=0 +Channels_1C.count=8 + ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver 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 Channel0.RF_channel_ID=0 @@ -225,31 +222,32 @@ Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ ;#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 -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. -Acquisition_GPS.item_type=gr_complex +Acquisition_1C.item_type=gr_complex ;#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] -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] -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. -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] -;Acquisition_GPS.pfa=0.0001 +;Acquisition_1C.pfa=0.0001 ;#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] -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 ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_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 -Acquisition_GPS.max_dwells=1 +Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### @@ -259,37 +257,41 @@ Acquisition_GPS.max_dwells=1 ;######### TRACKING GLOBAL CONFIG ############ ;#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. -Tracking_GPS.item_type=gr_complex +Tracking_1C.item_type=gr_complex ;#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] -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. -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] -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] -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] -Tracking_GPS.order=3; +Tracking_1C.order=3; ;#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 ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A -TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder -TelemetryDecoder_GPS.dump=false +TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder +TelemetryDecoder_1C.dump=false ;#decimation factor -TelemetryDecoder_GPS.decimation_factor=1; +TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. diff --git a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf index 3072fcefb..450eee366 100644 --- a/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf +++ b/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf @@ -192,7 +192,7 @@ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#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 Channels.in_acquisition=1 @@ -232,31 +232,31 @@ Channel7.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ ;#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 -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. -Acquisition_GPS.item_type=gr_complex +Acquisition_1C.item_type=gr_complex ;#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] -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] -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. -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] -;Acquisition_GPS.pfa=0.0001 +;Acquisition_1C.pfa=0.0001 ;#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] -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 ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_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 -Acquisition_GPS.max_dwells=1 +Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### @@ -266,37 +266,37 @@ Acquisition_GPS.max_dwells=1 ;######### TRACKING GLOBAL CONFIG ############ ;#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. -Tracking_GPS.item_type=gr_complex +Tracking_1C.item_type=gr_complex ;#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] -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. -Tracking_GPS.dump_filename=./tracking_ch_ +Tracking_1C.dump_filename=./tracking_ch_ ;#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] -Tracking_GPS.dll_bw_hz=3.0; +Tracking_1C.dll_bw_hz=3.0; ;#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] -Tracking_GPS.early_late_space_chips=0.5; +Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A -TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder -TelemetryDecoder_GPS.dump=false +TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder +TelemetryDecoder_1C.dump=false ;#decimation factor -TelemetryDecoder_GPS.decimation_factor=1; +TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. diff --git a/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf b/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf index 68e5a0bae..e0641d074 100644 --- a/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf +++ b/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf @@ -29,8 +29,7 @@ GNSS-SDR.SUPL_CI=0x31b0 SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=true -SignalSource.signal_file=/datalogger/L125_III1b_210s.usb -#SignalSource.signal_file=/datalogger/captures/flexiband_III_1b_cap1.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. SignalSource.item_type=gr_complex @@ -270,15 +269,13 @@ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. -Channels_1C.count=8 -Channels_1B.count=1 -Channels_2S.count=1 -;#count: Number of available Galileo satellite channels. -;Channels_Galileo.count=0 +Channels_1C.count=2 +Channels_1B.count=4 +Channels_2S.count=4 + ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 - ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) @@ -288,55 +285,22 @@ Channels.in_acquisition=1 ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 -Channel0.signal=1C - Channel1.RF_channel_ID=0 -Channel1.signal=1C - -Channel2.RF_channel_ID=0 -Channel2.signal=1C - -Channel3.RF_channel_ID=0 -Channel3.signal=1C - -Channel4.RF_channel_ID=0 -Channel4.signal=1C - -Channel5.RF_channel_ID=0 -Channel5.signal=1C - +Channel2.RF_channel_ID=1 +Channel3.RF_channel_ID=1 +Channel4.RF_channel_ID=1 +Channel5.RF_channel_ID=1 Channel6.RF_channel_ID=0 -Channel6.signal=1C - Channel7.RF_channel_ID=0 -Channel7.signal=1C - Channel8.RF_channel_ID=0 -Channel8.signal=1B - -Channel9.RF_channel_ID=1 -Channel9.signal=2S - +Channel9.RF_channel_ID=0 Channel10.RF_channel_ID=1 -Channel10.signal=2S - Channel11.RF_channel_ID=1 -Channel11.signal=2S - Channel12.RF_channel_ID=1 -Channel12.signal=2S - Channel13.RF_channel_ID=1 -Channel13.signal=2S - Channel14.RF_channel_ID=1 -Channel14.signal=2S - Channel15.RF_channel_ID=1 -Channel15.signal=2S -Channel16.RF_channel_ID=1 -Channel16.signal=2S ;######### SPECIFIC CHANNELS CONFIG ###### ;#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] -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.if=0 Tracking_1C.dump=false @@ -404,8 +368,8 @@ Acquisition_2S.max_dwells=1 Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.if=0 -Tracking_2S.dump=false -Tracking_2S.dump_filename=./tracking_ch_ +Tracking_2S.dump=true +Tracking_2S.dump_filename=../data/epl_tracking_ch_ Tracking_2S.pll_bw_hz=1.5; Tracking_2S.dll_bw_hz=0.3; Tracking_2S.order=3; @@ -489,7 +453,7 @@ TelemetryDecoder_1B.decimation_factor=5; ;######### OBSERVABLES CONFIG ############ ;#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] Observables.dump=false @@ -500,19 +464,19 @@ Observables.dump_filename=./observables.dat ;######### 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=Hybrid_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#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] PVT.output_rate_ms=100 ;#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 diff --git a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf index 1525d8f49..ad7cd61ac 100644 --- a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf +++ b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf @@ -28,9 +28,9 @@ GNSS-SDR.SUPL_CI=0x31b0 ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) 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/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. SignalSource.item_type=gr_complex @@ -269,7 +269,7 @@ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=1 -Channels_2S.count=1 +Channels_2S.count=7 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 @@ -282,17 +282,14 @@ Channels.in_acquisition=1 ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 -Channel0.signal=1C Channel1.RF_channel_ID=1 -Channel1.signal=2S - -;Channel2.RF_channel_ID=0 -;Channel3.RF_channel_ID=0 -;Channel4.RF_channel_ID=0 -;Channel5.RF_channel_ID=0 -;Channel6.RF_channel_ID=0 -;Channel7.RF_channel_ID=0 +Channel2.RF_channel_ID=0 +Channel3.RF_channel_ID=0 +Channel4.RF_channel_ID=0 +Channel5.RF_channel_ID=0 +Channel6.RF_channel_ID=0 +Channel7.RF_channel_ID=0 ;######### SPECIFIC CHANNELS CONFIG ###### diff --git a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf index 36c3b6f7a..ef46f3249 100644 --- a/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf +++ b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf @@ -29,8 +29,7 @@ GNSS-SDR.SUPL_CI=0x31b0 SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=true -#SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb -SignalSource.signal_file=/datalogger/captures/test.dat +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. SignalSource.item_type=gr_complex @@ -269,13 +268,11 @@ Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=1 -Channels_2S.count=1 +Channels_2S.count=5 ;#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 - ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) @@ -285,53 +282,21 @@ Channels.in_acquisition=1 ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 -Channel0.signal=1C - Channel1.RF_channel_ID=1 -Channel1.signal=2S - Channel2.RF_channel_ID=1 -Channel2.signal=2S - Channel3.RF_channel_ID=1 -Channel3.signal=2S - Channel4.RF_channel_ID=1 -Channel4.signal=2S - Channel5.RF_channel_ID=1 -Channel5.signal=2S - Channel6.RF_channel_ID=1 -Channel6.signal=2S - Channel7.RF_channel_ID=1 -Channel7.signal=2S - - Channel8.RF_channel_ID=1 -Channel8.signal=2S - Channel9.RF_channel_ID=1 -Channel9.signal=2S - Channel10.RF_channel_ID=1 -Channel10.signal=2S - Channel11.RF_channel_ID=1 -Channel11.signal=2S - Channel12.RF_channel_ID=1 -Channel12.signal=2S - Channel13.RF_channel_ID=1 -Channel13.signal=2S - Channel14.RF_channel_ID=1 -Channel14.signal=2S - Channel15.RF_channel_ID=1 -Channel15.signal=2S ;######### 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 ;# 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_filename=./acq_dump.dat Acquisition_2S1.item_type=gr_complex Acquisition_2S1.if=0 Acquisition_2S1.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S1.threshold=0.0001 -;Acquisition_2S1.pfa=0.001 Acquisition_2S1.doppler_max=5000 Acquisition_2S1.doppler_min=-5000 Acquisition_2S1.doppler_step=30 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 ############ @@ -497,7 +400,28 @@ Tracking_1C.order=3; 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.item_type=gr_complex Tracking_2S1.if=0 @@ -507,77 +431,6 @@ Tracking_2S1.pll_bw_hz=2.0; Tracking_2S1.dll_bw_hz=0.5; Tracking_2S1.order=3; 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 ############ diff --git a/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc index 48457faf2..0ce0fd483 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc @@ -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(0, 0, sizeof(gr_complex))) { + this->message_port_register_out(pmt::mp("events")); d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_state = 0; diff --git a/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc index 3baa46bdc..c024937f4 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc @@ -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(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_active = false; d_state = 0; diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc index 512075933..091958add 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc @@ -76,7 +76,6 @@ pcps_acquisition_cc::pcps_acquisition_cc( d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_state = 0; - //d_queue = queue; d_freq = freq; d_fs_in = fs_in; d_samples_per_ms = samples_per_ms; @@ -447,15 +446,12 @@ int pcps_acquisition_cc::general_work(int noutput_items, d_active = false; d_state = 0; - d_sample_counter += d_fft_size * ninput_items[0]; // sample counter consume_each(ninput_items[0]); acquisition_message = 1; - this->message_port_pub(pmt::mp("events"), pmt::from_long(acquisition_message)); - 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 consume_each(ninput_items[0]); acquisition_message = 2; - this->message_port_pub(pmt::mp("events"), pmt::from_long(acquisition_message)); break; diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc index ce0b951a1..79dc4c278 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc @@ -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(0, 0, sizeof(gr_complex))) { + this->message_port_register_out(pmt::mp("events")); d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_queue = queue; diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_sc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_sc.cc index 610a5adfc..50a0c9364 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_sc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_sc.cc @@ -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(0, 0, 0)) { + this->message_port_register_out(pmt::mp("events")); d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_state = 0; diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc index d3d6d1b2e..d581ab6e6 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc @@ -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(0, 0, sizeof(gr_complex))) { + this->message_port_register_out(pmt::mp("events")); d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_queue = queue; diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc index dbd2c650e..9ba128c68 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc @@ -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(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_active = false; d_state = 0; diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc index c6c662c89..3912c39aa 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc @@ -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(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_active = false; d_state = 0; diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc index 22f82a64a..63f163268 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc @@ -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(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_active = false; d_state = 0; diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc index 9078a78cd..cd2fe700c 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc @@ -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(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_active = false; d_state = 0; diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc index 7af96e3b0..cc9eb97ff 100644 --- a/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc +++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc @@ -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(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_active = false; d_state = 0; diff --git a/src/algorithms/channel/adapters/channel.cc b/src/algorithms/channel/adapters/channel.cc index 99285669a..104421ab3 100644 --- a/src/algorithms/channel/adapters/channel.cc +++ b/src/algorithms/channel/adapters/channel.cc @@ -94,7 +94,8 @@ Channel::Channel(ConfigurationInterface *configuration, unsigned int channel, channel_fsm_.set_queue(queue_); connected_ = false; - gnss_signal_ = Gnss_Signal(); + + gnss_signal_ = Gnss_Signal(implementation_); chennel_msg_rx= channel_msg_receiver_make_cc(&channel_fsm_, repeat_); diff --git a/src/algorithms/channel/libs/CMakeLists.txt b/src/algorithms/channel/libs/CMakeLists.txt index e169fd43b..cbb2966da 100644 --- a/src/algorithms/channel/libs/CMakeLists.txt +++ b/src/algorithms/channel/libs/CMakeLists.txt @@ -37,3 +37,6 @@ file(GLOB CHANNEL_FSM_HEADERS "*.h") add_library(channel_fsm ${CHANNEL_FSM_SOURCES} ${CHANNEL_FSM_HEADERS}) source_group(Headers FILES ${CHANNEL_FSM_HEADERS}) add_dependencies(channel_fsm glog-${glog_RELEASE}) + +target_link_libraries(channel_fsm gnss_rx) + diff --git a/src/algorithms/channel/libs/channel_fsm.cc b/src/algorithms/channel/libs/channel_fsm.cc index a03da509b..be55bbf28 100644 --- a/src/algorithms/channel/libs/channel_fsm.cc +++ b/src/algorithms/channel/libs/channel_fsm.cc @@ -81,6 +81,10 @@ public: //std::cout << "Enter Channel_Acq_S1 " << std::endl; context ().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() { this->process_event(Ev_channel_start_acquisition()); + //std::cout<<"Ev_channel_start_acquisition launched"<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(); std::unique_ptr cmf(new ControlMessageFactory()); if (queue_ != gr::msg_queue::make()) diff --git a/src/algorithms/observables/adapters/CMakeLists.txt b/src/algorithms/observables/adapters/CMakeLists.txt index 6f526dc4c..0969dc22e 100644 --- a/src/algorithms/observables/adapters/CMakeLists.txt +++ b/src/algorithms/observables/adapters/CMakeLists.txt @@ -20,7 +20,6 @@ set(OBS_ADAPTER_SOURCES gps_l1_ca_observables.cc galileo_e1_observables.cc hybrid_observables.cc - mixed_observables.cc ) include_directories( diff --git a/src/algorithms/observables/adapters/mixed_observables.cc b/src/algorithms/observables/adapters/mixed_observables.cc deleted file mode 100644 index 22fc1c780..000000000 --- a/src/algorithms/observables/adapters/mixed_observables.cc +++ /dev/null @@ -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 . - * - * ------------------------------------------------------------------------- - */ - - -#include "mixed_observables.h" -#include "configuration_interface.h" -#include - -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_; -} - diff --git a/src/algorithms/observables/adapters/mixed_observables.h b/src/algorithms/observables/adapters/mixed_observables.h deleted file mode 100644 index 661f630b3..000000000 --- a/src/algorithms/observables/adapters/mixed_observables.h +++ /dev/null @@ -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 . - * - * ------------------------------------------------------------------------- - */ - -#ifndef GNSS_SDR_MIXED_OBSERVABLES_H_ -#define GNSS_SDR_MIXED_OBSERVABLES_H_ - -#include -#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 diff --git a/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt b/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt index 6f4b25ffb..f879f93e4 100644 --- a/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt +++ b/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt @@ -20,7 +20,6 @@ set(OBS_GR_BLOCKS_SOURCES gps_l1_ca_observables_cc.cc galileo_e1_observables_cc.cc hybrid_observables_cc.cc - mixed_observables_cc.cc ) include_directories( diff --git a/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.cc b/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.cc deleted file mode 100644 index b4d0f9bac..000000000 --- a/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.cc +++ /dev/null @@ -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 . - * - * ------------------------------------------------------------------------- - */ - -#include "mixed_observables_cc.h" -#include -#include -#include -#include -#include -#include -#include -#include -#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& a, const std::pair& b) -{ - return (a.second.Prn_timestamp_ms) < (b.second.Prn_timestamp_ms); -} - - -bool MixedPairCompare_gnss_synchro_d_TOW_at_current_symbol(const std::pair& a, const std::pair& 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 current_gnss_synchro_map; - std::map::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(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="<second.Channel_ID].Pseudorange_m<. - * - * ------------------------------------------------------------------------- - */ - - -#ifndef GNSS_SDR_MIXED_OBSERVABLES_CC_H_ -#define GNSS_SDR_MIXED_OBSERVABLES_CC_H_ - -#include -#include -#include - - -class mixed_observables_cc; - -typedef boost::shared_ptr 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 diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e1b_telemetry_decoder_cc.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e1b_telemetry_decoder_cc.cc index 8203e9476..139f1f7a4 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e1b_telemetry_decoder_cc.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e1b_telemetry_decoder_cc.cc @@ -463,8 +463,6 @@ int galileo_e1b_telemetry_decoder_cc::general_work (int noutput_items __attribut 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_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 diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.cc index 660b2f439..347c1fa2e 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.cc @@ -71,7 +71,7 @@ gps_l1_ca_telemetry_decoder_cc::gps_l1_ca_telemetry_decoder_cc( // set the 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 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++) { - if (d_preambles_bits[i] == 1) + if (preambles_bits[i] == 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].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; } @@ -174,14 +174,15 @@ int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute_ //******* frame sync ****************** if (abs(corr_value) == GPS_CA_PREAMBLE_LENGTH_SYMBOLS) { + //TODO: Rewrite with state machine if (d_stat == 0) { 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 - 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 - d_symbol_accumulator = 0; - d_symbol_accumulator_counter = 0; + d_symbol_accumulator = 0; d_symbol_accumulator_counter = 0; d_frame_bit_index = 0; 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); 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_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) { // 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]"; } } - 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_ms= " << preamble_diff_ms; - d_stat = 0; // lost of frame sync - d_flag_frame_sync = false; - flag_TOW_set = false; - } + DLOG(INFO) << "Lost of frame sync SAT " << this->d_satellite << " preamble_diff= " << preamble_diff_ms; + d_stat = 0; //lost of frame sync + d_flag_frame_sync = false; + flag_TOW_set = false; } } } //******* SYMBOL TO BIT ******* - if (in[0][0].Flag_valid_symbol_output == true) { // 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; } if (d_symbol_accumulator_counter >= 20) - { - if (d_symbol_accumulator > 0) - { //symbol to bit - d_GPS_frame_4bytes += 1; //insert the telemetry bit in LSB - } - d_symbol_accumulator = 0; - d_symbol_accumulator_counter = 0; - //******* bits to words ****** - d_frame_bit_index++; - if (d_frame_bit_index == 30) - { - d_frame_bit_index = 0; - // parity check - // Each word in wordbuff is composed of: - // Bits 0 to 29 = the GPS data word - // Bits 30 to 31 = 2 LSBs of the GPS word ahead. - // prepare the extended frame [-2 -1 0 ... 30] - if (d_prev_GPS_frame_4bytes & 0x00000001) - { - d_GPS_frame_4bytes = d_GPS_frame_4bytes | 0x40000000; - } - if (d_prev_GPS_frame_4bytes & 0x00000002) - { - d_GPS_frame_4bytes = d_GPS_frame_4bytes | 0x80000000; - } - /* 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. */ - if(d_GPS_frame_4bytes & 0x40000000) - { - 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)) - { - 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.Event_gps_word_valid(); - // send TLM data to PVT using asynchronous message queues - if (d_GPS_FSM.d_flag_new_subframe == true) - { - switch (d_GPS_FSM.d_subframe_ID) - { - case 3: //we have a new set of ephemeris data for the current SV - if (d_GPS_FSM.d_nav.satellite_validation() == true) - { - // get ephemeris object for this SV (mandatory) - std::shared_ptr tmp_obj = std::make_shared(d_GPS_FSM.d_nav.get_ephemeris()); - this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); - } - break; - case 4: // Possible IONOSPHERE and UTC model update (page 18) - if (d_GPS_FSM.d_nav.flag_iono_valid == true) - { - std::shared_ptr tmp_obj = std::make_shared( d_GPS_FSM.d_nav.get_iono()); - this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); - } - if (d_GPS_FSM.d_nav.flag_utc_model_valid == true) - { - std::shared_ptr tmp_obj = std::make_shared(d_GPS_FSM.d_nav.get_utc_model()); - this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); - } - break; - case 5: - // get almanac (if available) - //TODO: implement almanac reader in navigation_message - break; - default: - break; - } - d_GPS_FSM.clear_flag_new_subframe(); - } + { + if (d_symbol_accumulator > 0) + { //symbol to bit + d_GPS_frame_4bytes += 1; //insert the telemetry bit in LSB + } + d_symbol_accumulator = 0; + d_symbol_accumulator_counter = 0; + //******* bits to words ****** + d_frame_bit_index++; + if (d_frame_bit_index == 30) + { + d_frame_bit_index = 0; + // parity check + // Each word in wordbuff is composed of: + // Bits 0 to 29 = the GPS data word + // Bits 30 to 31 = 2 LSBs of the GPS word ahead. + // prepare the extended frame [-2 -1 0 ... 30] + if (d_prev_GPS_frame_4bytes & 0x00000001) + { + d_GPS_frame_4bytes = d_GPS_frame_4bytes | 0x40000000; + } + if (d_prev_GPS_frame_4bytes & 0x00000002) + { + d_GPS_frame_4bytes = d_GPS_frame_4bytes | 0x80000000; + } + /* 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. */ + if(d_GPS_frame_4bytes & 0x40000000) + { + 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)) + { + 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.Event_gps_word_valid(); + // send TLM data to PVT using asynchronous message queues + if (d_GPS_FSM.d_flag_new_subframe == true) + { + switch (d_GPS_FSM.d_subframe_ID) + { + case 3: //we have a new set of ephemeris data for the current SV + if (d_GPS_FSM.d_nav.satellite_validation() == true) + { + // get ephemeris object for this SV (mandatory) + std::shared_ptr tmp_obj = std::make_shared(d_GPS_FSM.d_nav.get_ephemeris()); + this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); + } + break; + case 4: // Possible IONOSPHERE and UTC model update (page 18) + if (d_GPS_FSM.d_nav.flag_iono_valid == true) + { + std::shared_ptr tmp_obj = std::make_shared( d_GPS_FSM.d_nav.get_iono()); + this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); + } + if (d_GPS_FSM.d_nav.flag_utc_model_valid == true) + { + std::shared_ptr tmp_obj = std::make_shared(d_GPS_FSM.d_nav.get_utc_model()); + this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj)); + } + break; + case 5: + // get almanac (if available) + //TODO: implement almanac reader in navigation_message + break; + default: + break; + } + d_GPS_FSM.clear_flag_new_subframe(); + } - d_flag_parity = true; - } - else - { - d_GPS_FSM.Event_gps_word_invalid(); - d_flag_parity = false; - } - d_prev_GPS_frame_4bytes = d_GPS_frame_4bytes; // save the actual frame - d_GPS_frame_4bytes = d_GPS_frame_4bytes & 0; - } - else - { - d_GPS_frame_4bytes <<= 1; //shift 1 bit left the telemetry word - } - } - // output the frame - consume_each(1); //one by one - Gnss_Synchro current_synchro_data; //structure to save the synchronization information and send the output object to the next block - //1. Copy the current tracking output - current_synchro_data = in[0][0]; - //2. Add the telemetry decoder information - if (this->d_flag_preamble == true and d_GPS_FSM.d_nav.d_TOW > 0) - //update TOW at the preamble instant (todo: check for valid d_TOW) - // 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. - // 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. - { - 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; - Prn_timestamp_at_preamble_ms = in[0][0].Tracking_timestamp_secs * 1000.0; - if (flag_TOW_set == false) - { - flag_TOW_set = true; - } - } - else - { - d_TOW_at_current_symbol = d_TOW_at_current_symbol + GPS_L1_CA_CODE_PERIOD; - } + d_flag_parity = true; + } + else + { + d_GPS_FSM.Event_gps_word_invalid(); + d_flag_parity = false; + } + d_prev_GPS_frame_4bytes = d_GPS_frame_4bytes; // save the actual frame + d_GPS_frame_4bytes = d_GPS_frame_4bytes & 0; + } + else + { + d_GPS_frame_4bytes <<= 1; //shift 1 bit left the telemetry word + } + } + // output the frame + consume_each(1); //one by one + Gnss_Synchro current_synchro_data; //structure to save the synchronization information and send the output object to the next block + //1. Copy the current tracking output + current_synchro_data = in[0][0]; + //2. Add the telemetry decoder information + if (this->d_flag_preamble == true and d_GPS_FSM.d_nav.d_TOW > 0) + //update TOW at the preamble instant (todo: check for valid d_TOW) + // 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. + // 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. + { + 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; + Prn_timestamp_at_preamble_ms = in[0][0].Tracking_timestamp_secs * 1000.0; + if (flag_TOW_set == false) + { + flag_TOW_set = true; + } + } + else + { + 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_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.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.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.d_TOW = d_TOW_at_Preamble; + 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.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.Prn_timestamp_ms = in[0][0].Tracking_timestamp_secs * 1000.0; + current_synchro_data.Prn_timestamp_at_preamble_ms = Prn_timestamp_at_preamble_ms; - if (flag_PLL_180_deg_phase_locked == true) - { - //correct the accumulated phase for the costas loop phase shift, if required - current_synchro_data.Carrier_phase_rads += GPS_PI; - } + if (flag_PLL_180_deg_phase_locked == true) + { + //correct the accumulated phase for the costas loop phase shift, if required + current_synchro_data.Carrier_phase_rads += GPS_PI; + } - if(d_dump == true) - { - // MULTIPLEXED FILE RECORDING - Record results to file - try - { - double tmp_double; - tmp_double = d_TOW_at_current_symbol; - d_dump_file.write((char*)&tmp_double, sizeof(double)); - tmp_double = current_synchro_data.Prn_timestamp_ms; - d_dump_file.write((char*)&tmp_double, sizeof(double)); - tmp_double = d_TOW_at_Preamble; - d_dump_file.write((char*)&tmp_double, sizeof(double)); - } - catch (const std::ifstream::failure & e) - { - LOG(WARNING) << "Exception writing observables dump file " << e.what(); - } - } + if(d_dump == true) + { + // MULTIPLEXED FILE RECORDING - Record results to file + try + { + double tmp_double; + tmp_double = d_TOW_at_current_symbol; + d_dump_file.write((char*)&tmp_double, sizeof(double)); + tmp_double = current_synchro_data.Prn_timestamp_ms; + d_dump_file.write((char*)&tmp_double, sizeof(double)); + tmp_double = d_TOW_at_Preamble; + d_dump_file.write((char*)&tmp_double, sizeof(double)); + } + catch (const std::ifstream::failure & e) + { + LOG(WARNING) << "Exception writing observables dump file " << e.what(); + } + } - //todo: implement averaging + //todo: implement averaging - d_average_count++; - if (d_average_count == d_decimation_output_factor) - { - d_average_count = 0; - //3. Make the output (copy the object contents to the GNURadio reserved memory) - *out[0] = current_synchro_data; - //std::cout<<"GPS L1 TLM output on CH="<d_channel << " SAMPLE STAMP="<(d_channel)); - d_dump_filename.append(".dat"); - 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) << "Telemetry decoder dump enabled on channel " << d_channel - << " Log file: " << d_dump_filename.c_str(); - } - catch (const std::ifstream::failure &e) - { - LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what(); - } - } - } -} + void gps_l1_ca_telemetry_decoder_cc::set_channel(int channel) + { + d_channel = channel; + d_GPS_FSM.i_channel_ID = channel; + DLOG(INFO) << "Navigation channel set to " << channel; + // ############# ENABLE DATA FILE LOG ################# + if (d_dump == true) + { + if (d_dump_file.is_open() == false) + { + try + { + d_dump_filename = "telemetry"; + d_dump_filename.append(boost::lexical_cast(d_channel)); + d_dump_filename.append(".dat"); + 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) << "Telemetry decoder dump enabled on channel " << d_channel + << " Log file: " << d_dump_filename.c_str(); + } + catch (const std::ifstream::failure &e) + { + LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what(); + } + } + } + } diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h index 961d83c53..d0b2763fe 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h @@ -85,7 +85,7 @@ private: bool gps_word_parityCheck(unsigned int gpsword); // 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 int *d_preambles_symbols; diff --git a/src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.cc index f431a157f..30a10d3d9 100755 --- a/src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.cc @@ -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; 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"), value); - -// std::unique_ptr cmf(new ControlMessageFactory()); -// if (d_queue != gr::msg_queue::sptr()) -// { -// d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); -// } + this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } diff --git a/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.cc index c12987957..cac3487bd 100644 --- a/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.cc @@ -110,7 +110,7 @@ Galileo_E1_Tcp_Connector_Tracking_cc::Galileo_E1_Tcp_Connector_Tracking_cc( { // Telemetry bit synchronization message port input 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); // initialize internal vars 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; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; - std::unique_ptr cmf(new ControlMessageFactory()); - if (d_queue != gr::msg_queue::sptr()) - { - d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); - } + this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock + d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } diff --git a/src/algorithms/tracking/gnuradio_blocks/galileo_e5a_dll_pll_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/galileo_e5a_dll_pll_tracking_cc.cc index fb1cdc921..26733945f 100644 --- a/src/algorithms/tracking/gnuradio_blocks/galileo_e5a_dll_pll_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/galileo_e5a_dll_pll_tracking_cc.cc @@ -109,7 +109,7 @@ Galileo_E5a_Dll_Pll_Tracking_cc::Galileo_E5a_Dll_Pll_Tracking_cc( { // Telemetry bit synchronization message port input 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); // initialize internal vars 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; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; - std::unique_ptr cmf(new ControlMessageFactory()); - if (d_queue != gr::msg_queue::sptr()) - { - d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); - } + this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock d_carrier_lock_fail_counter = 0; 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; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; - std::unique_ptr cmf(new ControlMessageFactory()); - if (d_queue != gr::msg_queue::sptr()) - { - d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); - } + this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock d_carrier_lock_fail_counter = 0; d_state = 0; } diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.cc index cfad63678..3d5f5de61 100644 --- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.cc @@ -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; 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"), value); - - //std::unique_ptr cmf(new ControlMessageFactory()); - //if (d_queue != gr::msg_queue::sptr()) - // { - // d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); - // } + this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_sc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_sc.cc index ba79f15d4..8b84dc5de 100644 --- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_sc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_sc.cc @@ -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 this->message_port_register_in(pmt::mp("preamble_timestamp_s")); + this->message_port_register_out(pmt::mp("events")); // initialize internal vars d_queue = queue; 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; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; - std::unique_ptr cmf(new ControlMessageFactory()); - if (d_queue != gr::msg_queue::sptr()) - { - d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); - } + this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc index a51913ee2..52e86641c 100644 --- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc @@ -105,7 +105,6 @@ Gps_L1_Ca_Dll_Pll_Tracking_cc::Gps_L1_Ca_Dll_Pll_Tracking_cc( { // Telemetry bit synchronization message port input this->message_port_register_in(pmt::mp("preamble_timestamp_s")); - this->message_port_register_out(pmt::mp("events")); // 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; 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"), value); -// std::unique_ptr cmf(new ControlMessageFactory()); -// if (d_queue != gr::msg_queue::sptr()) -// { -// d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); -// } + this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_gpu_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_gpu_cc.cc index 0d3379324..fc0048fde 100644 --- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_gpu_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_gpu_cc.cc @@ -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 this->message_port_register_in(pmt::mp("preamble_timestamp_s")); + this->message_port_register_out(pmt::mp("events")); // initialize internal vars d_queue = queue; 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; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; - std::unique_ptr cmf(new ControlMessageFactory()); - if (d_queue != gr::msg_queue::sptr()) - { - d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); - } + this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.cc index 25bdd1168..9207c7959 100644 --- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.cc @@ -104,6 +104,7 @@ Gps_L1_Ca_Tcp_Connector_Tracking_cc::Gps_L1_Ca_Tcp_Connector_Tracking_cc( { // Telemetry bit synchronization message port input this->message_port_register_in(pmt::mp("preamble_timestamp_s")); + this->message_port_register_out(pmt::mp("events")); // initialize internal vars d_queue = queue; 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; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; - std::unique_ptr cmf(new ControlMessageFactory()); - if (d_queue != gr::msg_queue::sptr()) { - d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); - } + this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l2_m_dll_pll_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l2_m_dll_pll_tracking_cc.cc index 1a7fd963e..ee3684341 100644 --- a/src/algorithms/tracking/gnuradio_blocks/gps_l2_m_dll_pll_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/gps_l2_m_dll_pll_tracking_cc.cc @@ -104,6 +104,7 @@ gps_l2_m_dll_pll_tracking_cc::gps_l2_m_dll_pll_tracking_cc( { // Telemetry bit synchronization message port input this->message_port_register_in(pmt::mp("preamble_timestamp_s")); + this->message_port_register_out(pmt::mp("events")); // initialize internal vars d_queue = queue; 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; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; - std::unique_ptr cmf(new ControlMessageFactory()); - if (d_queue != gr::msg_queue::sptr()) - { - d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); - } + this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } diff --git a/src/core/receiver/gnss_block_factory.cc b/src/core/receiver/gnss_block_factory.cc index 719b82a28..5d3916eb3 100644 --- a/src/core/receiver/gnss_block_factory.cc +++ b/src/core/receiver/gnss_block_factory.cc @@ -91,7 +91,6 @@ #include "gps_l1_ca_observables.h" #include "galileo_e1_observables.h" #include "hybrid_observables.h" -#include "mixed_observables.h" #include "gps_l1_ca_pvt.h" #include "galileo_e1_pvt.h" #include "hybrid_pvt.h" @@ -227,17 +226,9 @@ std::unique_ptr GNSSBlockFactory::GetObservables(std::shared std::string default_implementation = "GPS_L1_CA_Observables"; std::string implementation = configuration->property("Observables.implementation", default_implementation); LOG(INFO) << "Getting Observables with implementation " << implementation; - unsigned int Galileo_channels = configuration->property("Channels_Galileo.count", 0); // DEPRECATED - if(Galileo_channels == 0) - { - Galileo_channels = configuration->property("Channels_1B.count", 0); - } + unsigned int Galileo_channels = configuration->property("Channels_1B.count", 0); Galileo_channels += configuration->property("Channels_5X.count", 0); - unsigned int GPS_channels = configuration->property("Channels_GPS.count", 0); // DEPRECATED - if(GPS_channels == 0) - { - GPS_channels = configuration->property("Channels_1C.count", 0); - } + unsigned int GPS_channels = configuration->property("Channels_1C.count", 0); GPS_channels += configuration->property("Channels_2S.count", 0); return GetBlock(configuration, "Observables", implementation, Galileo_channels + GPS_channels, Galileo_channels + GPS_channels, queue); } @@ -250,77 +241,14 @@ std::unique_ptr GNSSBlockFactory::GetPVT(std::shared_ptrproperty("PVT.implementation", default_implementation); LOG(INFO) << "Getting PVT with implementation " << implementation; - unsigned int Galileo_channels = configuration->property("Channels_Galileo.count", 0); // DEPRECATED - if(Galileo_channels == 0) - { - Galileo_channels = configuration->property("Channels_1B.count", 0); - } + unsigned int Galileo_channels =configuration->property("Channels_1B.count", 0); Galileo_channels += configuration->property("Channels_5X.count", 0); - unsigned int GPS_channels = configuration->property("Channels_GPS.count", 0); // DEPRECATED - if(GPS_channels == 0) - { - GPS_channels = configuration->property("Channels_1C.count", 0); - } + unsigned int GPS_channels =configuration->property("Channels_1C.count", 0); GPS_channels += configuration->property("Channels_2S.count", 0); return GetBlock(configuration, "PVT", implementation, Galileo_channels + GPS_channels, 1, queue); } - -//********* GPS CHANNEL ***************** -std::unique_ptr GNSSBlockFactory::GetChannel_GPS( - std::shared_ptr configuration, - std::string acq, std::string trk, std::string tlm, int channel, - boost::shared_ptr 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(channel) + ".implementation", std::string("W")); - std::string appendix1; - if(aux.compare("W") != 0) - { - appendix1 = boost::lexical_cast(channel); - } - else - { - appendix1 = ""; - } - aux = configuration->property("Tracking_GPS" + boost::lexical_cast(channel) + ".implementation", std::string("W")); - std::string appendix2; - if(aux.compare("W") != 0) - { - appendix2 = boost::lexical_cast(channel); - } - else - { - appendix2 = ""; - } - aux = configuration->property("TelemetryDecoder_GPS" + boost::lexical_cast(channel) + ".implementation", std::string("W")); - std::string appendix3; - if(aux.compare("W") != 0) - { - appendix3 = boost::lexical_cast(channel); - } - else - { - appendix3 = ""; - } - - std::unique_ptr pass_through_ = GetBlock(configuration, "Channel", "Pass_Through", 1, 1, queue); - std::unique_ptr acq_ = GetAcqBlock(configuration, "Acquisition_GPS" + appendix1, acq, 1, 0, queue); - std::unique_ptr trk_ = GetTrkBlock(configuration, "Tracking_GPS" + appendix2, trk, 1, 1, queue); - std::unique_ptr tlm_ = GetTlmBlock(configuration, "TelemetryDecoder_GPS" + appendix3, tlm, 1, 1); - - std::unique_ptr 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 ***************** std::unique_ptr GNSSBlockFactory::GetChannel_1C( std::shared_ptr configuration, @@ -328,6 +256,7 @@ std::unique_ptr GNSSBlockFactory::GetChannel_1C( boost::shared_ptr queue) { + //TODO: REMOVE APPENDIX!! AND CHECK ALTERNATIVE MECHANISM TO GET PARTICULARIZED PARAMETERS LOG(INFO) << "Instantiating Channel " << channel << " with Acquisition Implementation: " << acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder implementation: " << tlm; @@ -431,62 +360,6 @@ std::unique_ptr GNSSBlockFactory::GetChannel_2S( return channel_; } -//********* GALILEO CHANNEL ***************** -std::unique_ptr GNSSBlockFactory::GetChannel_Galileo( - std::shared_ptr configuration, - std::string acq, std::string trk, std::string tlm, int channel, - boost::shared_ptr 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(channel) + ".implementation", std::string("W")); - std::string appendix1; - if(aux.compare("W") != 0) - { - appendix1 = boost::lexical_cast(channel); - } - else - { - appendix1 = ""; - } - aux = configuration->property("Tracking_Galileo" + boost::lexical_cast(channel) + ".implementation", std::string("W")); - std::string appendix2; - if(aux.compare("W") != 0) - { - appendix2 = boost::lexical_cast(channel); - } - else - { - appendix2 = ""; - } - aux = configuration->property("TelemetryDecoder_Galileo" + boost::lexical_cast(channel) + ".implementation", std::string("W")); - std::string appendix3; - if(aux.compare("W") != 0) - { - appendix3 = boost::lexical_cast(channel); - } - else - { - appendix3 = ""; - } - - std::unique_ptr pass_through_ = GetBlock(configuration, "Channel", "Pass_Through", 1, 1, queue); - std::unique_ptr acq_ = GetAcqBlock(configuration, "Acquisition_Galileo" + appendix1, acq, 1, 0, queue); - std::unique_ptr trk_ = GetTrkBlock(configuration, "Tracking_Galileo" + appendix2, trk, 1, 1, queue); - std::unique_ptr tlm_ = GetTlmBlock(configuration, "TelemetryDecoder_Galileo" + appendix3, tlm, 1, 1); - - std::unique_ptr channel_(new Channel(configuration.get(), channel, pass_through_.release(), - acq_.release(), - trk_.release(), - tlm_.release(), - "Channel", "Galileo", queue)); - - return channel_; -} - //********* GALILEO E1 B CHANNEL ***************** std::unique_ptr GNSSBlockFactory::GetChannel_1B( std::shared_ptr configuration, @@ -604,385 +477,146 @@ std::unique_ptr>> GNSSBlockFacto std::shared_ptr configuration, boost::shared_ptr queue) { std::string default_implementation = "Pass_Through"; - unsigned int channel_count; std::string tracking_implementation; std::string telemetry_decoder_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>> channels(new std::vector>(total_channels)); - 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>> channels(new std::vector>(total_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(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(i) + ".implementation", - default_implementation); - //(i.e. Acquisition_1C0.implementation=xxxx) - if(acquisition_implementation_specific.compare(default_implementation) == 0) - { - acquisition_implementation_specific = configuration->property( + std::string acquisition_implementation_specific = configuration->property( "Acquisition_1C" + boost::lexical_cast(i) + ".implementation", - default_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(i) + ".implementation", - default_implementation); + acquisition_implementation); //(i.e. Tracking_1C0.implementation=xxxx) - if(tracking_implementation_specific.compare(default_implementation) == 0) - { - tracking_implementation_specific = configuration->property( + std::string tracking_implementation_specific = configuration->property( "Tracking_1C" + boost::lexical_cast(i) + ".implementation", - default_implementation); - } - - 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(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( + tracking_implementation); + std::string telemetry_decoder_implementation_specific = configuration->property( "TelemetryDecoder_1C" + boost::lexical_cast(i) + ".implementation", - default_implementation); - } - if(telemetry_decoder_implementation_specific.compare(default_implementation) != 0) - { - telemetry_decoder_implementation = telemetry_decoder_implementation_specific; - apply_ = true; - } + telemetry_decoder_implementation); - // Push back the channel to the vector of channels, if apply. - if((configuration->property("Channels_GPS.count", 0) > 0) and apply_) - { - channels->at(i) = std::move(GetChannel_GPS(configuration, - acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue)); - channel_absolute_id++; - } - if((configuration->property("Channels_1C.count", 0) > 0) and apply_) - { - channels->at(i) = std::move(GetChannel_1C(configuration, - acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue)); - channel_absolute_id++; - } + // Push back the channel to the vector of channels + channels->at(channel_absolute_id) = std::move(GetChannel_1C(configuration, + acquisition_implementation_specific, + tracking_implementation_specific, + telemetry_decoder_implementation_specific, + channel_absolute_id, + queue)); + channel_absolute_id++; } //**************** GPS L2C (M) CHANNELS ********************** - channel_count = configuration->property("Channels_2S.count", 0); - - LOG(INFO) << "Getting " << channel_count << " GPS L2C (M) channels"; - - tracking_implementation = configuration->property("Tracking_2S.implementation", default_implementation); + LOG(INFO)<< "Getting " << Channels_2S_count << " GPS L2C (M) channels"; + tracking_implementation = configuration->property("Tracking_2S.implementation", default_implementation); telemetry_decoder_implementation = configuration->property("TelemetryDecoder_2S.implementation", default_implementation); acquisition_implementation = configuration->property("Acquisition_2S.implementation", default_implementation); - - for (unsigned int i = 0; i < total_channels; i++) + for (unsigned int i = 0; i < Channels_2S_count; i++) { - apply_ = false; - 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(i) + ".signal", configuration->property("Channel.signal", std::string("W"))); - if( s.compare("2S") == 0 ) - { - apply_ = true; - } + //(i.e. Acquisition_1C0.implementation=xxxx) std::string acquisition_implementation_specific = configuration->property( - "Acquisition_2S" + boost::lexical_cast(i) + ".implementation", - default_implementation); - - if(acquisition_implementation_specific.compare(default_implementation) != 0) - { - acquisition_implementation = acquisition_implementation_specific; - apply_ = true; - } - - //(i.e. Tracking_2S0.implementation=xxxx) - std::string tracking_implementation_specific = configuration->property( - "Tracking_2S" + boost::lexical_cast(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) + "Acquisition_2S" + boost::lexical_cast(i) + ".implementation", + acquisition_implementation); + //(i.e. Tracking_1C0.implementation=xxxx) + std::string tracking_implementation_specific = configuration->property( + "Tracking_2S" + boost::lexical_cast(i) + ".implementation", + tracking_implementation); std::string telemetry_decoder_implementation_specific = configuration->property( - "TelemetryDecoder_2S" + boost::lexical_cast(i) + ".implementation", - default_implementation); + "TelemetryDecoder_2S" + boost::lexical_cast(i) + ".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. - 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++; - } + // Push back the channel to the vector of channels + channels->at(channel_absolute_id) = std::move(GetChannel_2S(configuration, + acquisition_implementation_specific, + tracking_implementation_specific, + telemetry_decoder_implementation_specific, + channel_absolute_id, + queue)); + channel_absolute_id++; } - //**************** 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(i) + ".implementation", + acquisition_implementation); + //(i.e. Tracking_1C0.implementation=xxxx) + std::string tracking_implementation_specific = configuration->property( + "Tracking_1B" + boost::lexical_cast(i) + ".implementation", + tracking_implementation); + std::string telemetry_decoder_implementation_specific = configuration->property( + "TelemetryDecoder_1B" + boost::lexical_cast(i) + ".implementation", + telemetry_decoder_implementation); - tracking_implementation = configuration->property("Tracking_Galileo.implementation", default_implementation); // DEPRECATED - if (tracking_implementation.compare(default_implementation) == 0) - { - tracking_implementation = configuration->property("Tracking_1B.implementation", std::string("W")); - } - - telemetry_decoder_implementation = configuration->property("TelemetryDecoder_Galileo.implementation", default_implementation); // DEPRECATED - if (telemetry_decoder_implementation.compare(default_implementation) == 0) - { - 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(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(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(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(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(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(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(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++; - } - } + // Push back the channel to the vector of channels + channels->at(channel_absolute_id) = std::move(GetChannel_1B(configuration, + acquisition_implementation_specific, + tracking_implementation_specific, + telemetry_decoder_implementation_specific, + channel_absolute_id, + queue)); + channel_absolute_id++; + } //**************** 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(i) + ".implementation", + acquisition_implementation); + //(i.e. Tracking_1C0.implementation=xxxx) + std::string tracking_implementation_specific = configuration->property( + "Tracking_5X" + boost::lexical_cast(i) + ".implementation", + tracking_implementation); + std::string telemetry_decoder_implementation_specific = configuration->property( + "TelemetryDecoder_5X" + boost::lexical_cast(i) + ".implementation", + telemetry_decoder_implementation); - LOG(INFO) << "Getting " << channel_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 < 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_5X0.implementation=xxxx) - s = configuration->property("Channel" + boost::lexical_cast(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(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(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(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++; - } - } + // Push back the channel to the vector of channels + channels->at(channel_absolute_id) = std::move(GetChannel_5X(configuration, + acquisition_implementation_specific, + tracking_implementation_specific, + telemetry_decoder_implementation_specific, + channel_absolute_id, + queue)); + channel_absolute_id++; + } return channels; } - /* * Returns the block with the required configuration and implementation * @@ -1382,12 +1016,6 @@ std::unique_ptr GNSSBlockFactory::GetBlock( out_streams)); block = std::move(block_); } - else if (implementation.compare("Mixed_Observables") == 0) - { - std::unique_ptr block_(new MixedObservables(configuration.get(), role, in_streams, - out_streams)); - block = std::move(block_); - } // PVT ------------------------------------------------------------------------- else if (implementation.compare("GPS_L1_CA_PVT") == 0) { diff --git a/src/core/receiver/gnss_block_factory.h b/src/core/receiver/gnss_block_factory.h index 7eb596a21..10d8c4dc4 100644 --- a/src/core/receiver/gnss_block_factory.h +++ b/src/core/receiver/gnss_block_factory.h @@ -83,10 +83,6 @@ public: boost::shared_ptr queue); private: - // DEPRECATED - std::unique_ptr GetChannel_GPS(std::shared_ptr configuration, - std::string acq, std::string trk, std::string tlm, int channel, - boost::shared_ptr queue); std::unique_ptr GetChannel_1C(std::shared_ptr configuration, 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, boost::shared_ptr queue); - //DEPRECATED - std::unique_ptr GetChannel_Galileo(std::shared_ptr configuration, - std::string acq, std::string trk, std::string tlm, int channel, - boost::shared_ptr queue); - std::unique_ptr GetChannel_1B(std::shared_ptr configuration, std::string acq, std::string trk, std::string tlm, int channel, boost::shared_ptr queue); diff --git a/src/core/receiver/gnss_flowgraph.cc b/src/core/receiver/gnss_flowgraph.cc index a79b4cd9b..3231ec687 100644 --- a/src/core/receiver/gnss_flowgraph.cc +++ b/src/core/receiver/gnss_flowgraph.cc @@ -187,7 +187,6 @@ void GNSSFlowgraph::connect() } DLOG(INFO) << "blocks connected internally"; - // Signal Source (i) > Signal conditioner (i) > int RF_Channels = 0; int signal_conditioner_ID = 0; @@ -257,7 +256,6 @@ void GNSSFlowgraph::connect() return; } } - DLOG(INFO) << "Signal source connected to signal conditioner"; // Signal conditioner (selected_signal_source) >> channels (i) (dependent of their associated SignalSource_ID) @@ -294,22 +292,20 @@ void GNSSFlowgraph::connect() return; } - std::string default_signal = configuration_->property("Channel.signal", std::string("1C")); - std::string gnss_signal = (configuration_->property("Channel" + boost::lexical_cast(i) + ".signal", default_signal)); - + std::string gnss_signal = channels_.at(i)->get_signal().get_signal_str(); // use channel's implicit signal! + std::cout<<"gnss_signal "<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) { channels_.at(i)->start_acquisition(); 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"; } else @@ -379,7 +375,6 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what) 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(); available_GNSS_signals_.push_back(channels_.at(who)->get_signal()); - //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 ) { @@ -388,6 +383,7 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what) } channels_.at(who)->set_signal(available_GNSS_signals_.front()); available_GNSS_signals_.pop_front(); + usleep(100); channels_.at(who)->start_acquisition(); break; case 1: @@ -556,13 +552,9 @@ void GNSSFlowgraph::set_signals_list() /* * 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) + - configuration_->property("Channels_1C.count", 0) + + unsigned int total_channels = 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); @@ -583,7 +575,6 @@ void GNSSFlowgraph::set_signals_list() std::string sv_list = configuration_->property("Galileo.prns", std::string("") ); - if( sv_list.length() > 0 ) { // Reset the available prns: @@ -613,7 +604,6 @@ void GNSSFlowgraph::set_signals_list() available_gps_prn = tmp_set; } } - sv_list = configuration_->property("SBAS.prns", std::string("") ); 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 @@ -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 @@ -658,8 +648,7 @@ void GNSSFlowgraph::set_signals_list() } } - - if ((configuration_->property("Channels_SBAS.count", 0) > 0) or default_system.find(std::string("SBAS")) != std::string::npos) + if (configuration_->property("Channels_SBAS.count", 0) > 0) { /* * 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 @@ -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 @@ -701,7 +690,6 @@ void GNSSFlowgraph::set_signals_list() *available_gnss_prn_iter), std::string("5X"))); } } - /* * 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++) { - std::string gnss_signal = (configuration_->property("Channel" + boost::lexical_cast(i) + ".signal", default_signal)); + std::string gnss_signal = (configuration_->property("Channel" + boost::lexical_cast(i) + ".signal", std::string("1C"))); std::string gnss_system; 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"; - - LOG(INFO) << "Channel " << i << " system " << gnss_system << ", signal " << gnss_signal; - unsigned int sat = configuration_->property("Channel" + boost::lexical_cast(i) + ".satellite", 0); - - 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 + LOG(INFO) << "Channel " << i << " system " << gnss_system << ", signal " << gnss_signal <<", sat "<get_satellite().get_PRN())), gnss_signal); - if( gnss_it == available_GNSS_signals_.begin() ) - { - available_GNSS_signals_.remove(signal_value); - gnss_it = available_GNSS_signals_.begin(); - } - else - { - available_GNSS_signals_.remove(signal_value); - } + Gnss_Signal signal_value = Gnss_Signal(Gnss_Satellite(gnss_system, sat), gnss_signal); + available_GNSS_signals_.remove(signal_value); available_GNSS_signals_.insert(gnss_it, signal_value); } } // **** FOR DEBUGGING THE LIST OF GNSS SIGNALS **** - // std::cout << "default_system=" << default_system << std::endl; - // std::cout << "default_signal=" << default_signal << std::endl; - // std::list::iterator 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::list::iterator 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; + } } diff --git a/src/core/system_parameters/gnss_signal.cc b/src/core/system_parameters/gnss_signal.cc index 399a6a9ac..aaeb1a71b 100644 --- a/src/core/system_parameters/gnss_signal.cc +++ b/src/core/system_parameters/gnss_signal.cc @@ -36,6 +36,10 @@ Gnss_Signal::Gnss_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_) { diff --git a/src/core/system_parameters/gnss_signal.h b/src/core/system_parameters/gnss_signal.h index de83af6a0..4922e5399 100644 --- a/src/core/system_parameters/gnss_signal.h +++ b/src/core/system_parameters/gnss_signal.h @@ -48,6 +48,7 @@ private: std::string signal; public: Gnss_Signal(); + Gnss_Signal(const std::string& signal_); Gnss_Signal(const Gnss_Satellite& satellite_, const std::string& 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} diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index ede1f1ea2..ce8c40e43 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -172,6 +172,7 @@ target_link_libraries(run_tests ${CLANG_FLAGS} ${GNURADIO_ANALOG_LIBRARIES} ${ARMADILLO_LIBRARIES} ${VOLK_LIBRARIES} + channel_fsm gnss_sp_libs gnss_rx gnss_system_parameters diff --git a/src/utils/front-end-cal/CMakeLists.txt b/src/utils/front-end-cal/CMakeLists.txt index 5c8b5c93b..349b161ea 100644 --- a/src/utils/front-end-cal/CMakeLists.txt +++ b/src/utils/front-end-cal/CMakeLists.txt @@ -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}) 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_BLOCKS_LIBRARIES} + ${GNURADIO_FFT_LIBRARIES} + ${GNURADIO_FILTER_LIBRARIES} ${GFlags_LIBS} ${GLOG_LIBRARIES} ${ARMADILLO_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} + ${GNSS_SDR_OPTIONAL_LIBS} + rx_core_lib gnss_rx + channel_fsm gnss_sp_libs ) @@ -70,18 +76,24 @@ add_custom_command(TARGET front-end-cal POST_BUILD ${CMAKE_SOURCE_DIR}/install/$) -target_link_libraries(front-end-cal ${GNURADIO_RUNTIME_LIBRARIES} - ${GNURADIO_BLOCKS_LIBRARIES} - ${Boost_LIBRARIES} - ${GFlags_LIBS} - ${GLOG_LIBRARIES} - ${ARMADILLO_LIBRARIES} - gnss_rx - gnss_sp_libs - front_end_cal_lib - ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} +target_link_libraries(front-end-cal ${MAC_LIBRARIES} + ${Boost_LIBRARIES} + ${GNURADIO_RUNTIME_LIBRARIES} + ${GNURADIO_BLOCKS_LIBRARIES} + ${GNURADIO_FFT_LIBRARIES} + ${GNURADIO_FILTER_LIBRARIES} + ${GFlags_LIBS} + ${GLOG_LIBRARIES} + ${ARMADILLO_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 RUNTIME DESTINATION bin COMPONENT "front-end-cal"