[hamradio-commits] [gnss-sdr] 08/251: GPS L2C M acquisition incremental update: Added preliminarly support of multiple signals on the same system in GNSS-SDR architecture
Carles Fernandez
carles_fernandez-guest at moszumanska.debian.org
Wed Sep 2 00:22:30 UTC 2015
This is an automated email from the git hooks/post-receive script.
carles_fernandez-guest pushed a commit to branch master
in repository gnss-sdr.
commit 12b5d798a7e21dc59666decfc790d0397137cfa6
Author: Javier <jarribas at cttc.es>
Date: Fri Apr 24 19:11:45 2015 +0200
GPS L2C M acquisition incremental update: Added preliminarly support of
multiple signals on the same system in GNSS-SDR architecture
---
...channel_GPS_L2_M_Flexiband_bin_file_III_1a.conf | 477 +++++++++++++++++++++
src/algorithms/acquisition/adapters/CMakeLists.txt | 1 +
.../adapters/gps_l2_m_pcps_acquisition.cc | 15 +-
src/algorithms/libs/CMakeLists.txt | 1 +
src/algorithms/libs/gps_l2c_signal.cc | 25 +-
src/algorithms/libs/gps_l2c_signal.h | 8 +-
src/core/receiver/gnss_block_factory.cc | 7 +
src/core/receiver/gnss_flowgraph.cc | 69 ++-
src/core/system_parameters/GPS_L2C.h | 2 +-
9 files changed, 561 insertions(+), 44 deletions(-)
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
new file mode 100644
index 0000000..051a919
--- /dev/null
+++ b/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf
@@ -0,0 +1,477 @@
+; Default configuration file
+; You can define your own receiver and invoke it by doing
+; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
+;
+
+[GNSS-SDR]
+
+;######### GLOBAL OPTIONS ##################
+;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
+GNSS-SDR.internal_fs_hz=5000000
+
+;######### CONTROL_THREAD CONFIG ############
+ControlThread.wait_for_flowgraph=false
+
+;######### SUPL RRLP GPS assistance configuration #####
+GNSS-SDR.SUPL_gps_enabled=false
+GNSS-SDR.SUPL_read_gps_assistance_xml=true
+GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com
+GNSS-SDR.SUPL_gps_ephemeris_port=7275
+GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com
+GNSS-SDR.SUPL_gps_acquisition_port=7275
+GNSS-SDR.SUPL_MCC=244
+GNSS-SDR.SUPL_MNS=5
+GNSS-SDR.SUPL_LAC=0x59e2
+GNSS-SDR.SUPL_CI=0x31b0
+
+;######### SIGNAL_SOURCE CONFIG ############
+;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
+SignalSource.implementation=Flexiband_Signal_Source
+
+SignalSource.flag_read_file=true
+;SignalSource.signal_file=/datalogger/captures/eclipse/eclipse_IIIa_2.bin
+SignalSource.signal_file=/datalogger/signals/Fraunhofer/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
+
+;# FPGA firmware file
+SignalSource.firmware_file=flexiband_III-1b.bit
+
+;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
+SignalSource.RF_channels=2
+
+;#frontend channels gain. Not usable yet!
+SignalSource.gain1=0
+SignalSource.gain2=0
+SignalSource.gain3=0
+
+;#frontend channels AGC
+SignalSource.AGC=true
+
+;# USB 3.0 packet buffer size (number of SuperSpeed packets)
+SignalSource.usb_packet_buffer=128
+
+;######################################################
+;######### RF CHANNEL 0 SIGNAL CONDITIONER ############
+;######################################################
+
+;######### SIGNAL_CONDITIONER 0 CONFIG ############
+;## It holds blocks to change data type, filter and resample input data.
+SignalConditioner0.implementation=Signal_Conditioner
+
+;######### DATA_TYPE_ADAPTER 0 CONFIG ############
+DataTypeAdapter0.implementation=Pass_Through
+DataTypeAdapter0.item_type=gr_complex
+
+;######### INPUT_FILTER 0 CONFIG ############
+;## Filter the input data. Can be combined with frequency translation for IF signals
+
+;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
+;#[Pass_Through] disables this block
+;#[Fir_Filter] enables a FIR Filter
+;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
+
+InputFilter0.implementation=Freq_Xlating_Fir_Filter
+
+;#dump: Dump the filtered data to a file.
+InputFilter0.dump=false
+
+;#dump_filename: Log path and filename.
+InputFilter0.dump_filename=../data/input_filter.dat
+
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
+;#These options are based on parameters of gnuradio's function: gr_remez.
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
+;#the desired reponse on those bands, and the weight given to the error in those bands.
+
+;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
+InputFilter0.input_item_type=gr_complex
+
+;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
+InputFilter0.output_item_type=gr_complex
+
+;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
+InputFilter0.taps_item_type=float
+
+;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
+InputFilter0.number_of_taps=5
+
+;#number_of _bands: Number of frequency bands in the filter.
+InputFilter0.number_of_bands=2
+
+;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
+;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
+;#The number of band_begin and band_end elements must match the number of bands
+
+InputFilter0.band1_begin=0.0
+InputFilter0.band1_end=0.45
+InputFilter0.band2_begin=0.55
+InputFilter0.band2_end=1.0
+
+;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
+;#The number of ampl_begin and ampl_end elements must match the number of bands
+
+InputFilter0.ampl1_begin=1.0
+InputFilter0.ampl1_end=1.0
+InputFilter0.ampl2_begin=0.0
+InputFilter0.ampl2_end=0.0
+
+;#band_error: weighting applied to each band (usually 1).
+;#The number of band_error elements must match the number of bands
+InputFilter0.band1_error=1.0
+InputFilter0.band2_error=1.0
+
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
+InputFilter0.filter_type=bandpass
+
+;#grid_density: determines how accurately the filter will be constructed.
+;The minimum value is 16; higher values are slower to compute the filter.
+InputFilter0.grid_density=16
+
+;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
+;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
+;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
+; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
+InputFilter0.sampling_frequency=20000000
+;# IF deviation due to front-end LO inaccuracies [HZ]
+InputFilter0.IF=-205000
+
+;# Decimation factor after the frequency tranaslating block
+InputFilter0.decimation_factor=4
+
+;######### RESAMPLER CONFIG 0 ############
+;## Resamples the input data.
+Resampler0.implementation=Pass_Through
+
+;######################################################
+;######### RF CHANNEL 1 SIGNAL CONDITIONER ############
+;######################################################
+
+;######### SIGNAL_CONDITIONER 1 CONFIG ############
+;## It holds blocks to change data type, filter and resample input data.
+SignalConditioner1.implementation=Signal_Conditioner
+
+;######### DATA_TYPE_ADAPTER 1 CONFIG ############
+DataTypeAdapter1.implementation=Pass_Through
+DataTypeAdapter1.item_type=gr_complex
+
+;######### INPUT_FILTER 0 CONFIG ############
+;## Filter the input data. Can be combined with frequency translation for IF signals
+
+;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
+;#[Pass_Through] disables this block
+;#[Fir_Filter] enables a FIR Filter
+;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
+
+InputFilter1.implementation=Freq_Xlating_Fir_Filter
+
+;#dump: Dump the filtered data to a file.
+InputFilter1.dump=false
+
+;#dump_filename: Log path and filename.
+InputFilter1.dump_filename=../data/input_filter.dat
+
+;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
+;#These options are based on parameters of gnuradio's function: gr_remez.
+;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
+;#the desired reponse on those bands, and the weight given to the error in those bands.
+
+;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
+InputFilter1.input_item_type=gr_complex
+
+;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
+InputFilter1.output_item_type=gr_complex
+
+;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
+InputFilter1.taps_item_type=float
+
+;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
+InputFilter1.number_of_taps=5
+
+;#number_of _bands: Number of frequency bands in the filter.
+InputFilter1.number_of_bands=2
+
+;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...].
+;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
+;#The number of band_begin and band_end elements must match the number of bands
+
+InputFilter1.band1_begin=0.0
+InputFilter1.band1_end=0.45
+InputFilter1.band2_begin=0.55
+InputFilter1.band2_end=1.0
+
+;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
+;#The number of ampl_begin and ampl_end elements must match the number of bands
+
+InputFilter1.ampl1_begin=1.0
+InputFilter1.ampl1_end=1.0
+InputFilter1.ampl2_begin=0.0
+InputFilter1.ampl2_end=0.0
+
+;#band_error: weighting applied to each band (usually 1).
+;#The number of band_error elements must match the number of bands
+InputFilter1.band1_error=1.0
+InputFilter1.band2_error=1.0
+
+;#filter_type: one of "bandpass", "hilbert" or "differentiator"
+InputFilter1.filter_type=bandpass
+
+;#grid_density: determines how accurately the filter will be constructed.
+;The minimum value is 16; higher values are slower to compute the filter.
+InputFilter1.grid_density=16
+
+;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
+;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
+;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
+; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
+InputFilter1.sampling_frequency=20000000
+;# IF deviation due to front-end LO inaccuracies [HZ]
+InputFilter1.IF=100000
+
+;# Decimation factor after the frequency tranaslating block
+InputFilter1.decimation_factor=4
+
+
+;######### RESAMPLER CONFIG 1 ############
+;## Resamples the input data.
+Resampler1.implementation=Pass_Through
+
+;######### SIGNAL_CONDITIONER 2 CONFIG ############
+;## It holds blocks to change data type, filter and resample input data.
+SignalConditioner2.implementation=Pass_Through
+
+;######### DATA_TYPE_ADAPTER 2 CONFIG ############
+DataTypeAdapter2.implementation=Pass_Through
+DataTypeAdapter2.item_type=gr_complex
+
+;######### INPUT_FILTER 2 CONFIG ############
+InputFilter2.implementation=Pass_Through
+
+;#dump: Dump the filtered data to a file.
+InputFilter2.dump=false
+
+;#dump_filename: Log path and filename.
+InputFilter2.dump_filename=../data/input_filter.dat
+
+;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
+InputFilter2.input_item_type=gr_complex
+
+;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
+InputFilter2.output_item_type=gr_complex
+
+;######### RESAMPLER CONFIG 2 ############
+;## Resamples the input data.
+Resampler2.implementation=Pass_Through
+
+;######### CHANNELS GLOBAL CONFIG ############
+;#count: Number of available GPS satellite channels.
+Channels_GPS.count=2
+;#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=2
+;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS
+;#if the option is disabled by default is assigned GPS
+Channel.system=GPS, GPS L2C M
+
+;# CHANNEL CONNECTION
+Channel0.RF_channel_ID=0
+Channel0.system=GPS
+Channel0.signal=1C
+
+Channel1.RF_channel_ID=1
+Channel1.system=GPS L2C M
+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
+
+;#signal:
+;#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
+
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
+Acquisition_GPS0.dump=false
+;#filename: Log path and filename
+Acquisition_GPS0.dump_filename=./acq_dump.dat
+;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
+Acquisition_GPS0.item_type=gr_complex
+;#if: Signal intermediate frequency in [Hz]
+Acquisition_GPS0.if=0
+;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
+Acquisition_GPS0.coherent_integration_time_ms=1
+;#implementation: Acquisition algorithm selection for this channel:
+Acquisition_GPS0.implementation=GPS_L1_CA_PCPS_Acquisition
+;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
+Acquisition_GPS0.threshold=0.006
+;#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_GPS0.pfa=0.0001
+;#doppler_max: Maximum expected Doppler shift [Hz]
+Acquisition_GPS0.doppler_max=10000
+;#doppler_max: Doppler step in the grid search [Hz]
+Acquisition_GPS0.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_GPS0.bit_transition_flag=false
+;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
+Acquisition_GPS0.max_dwells=1
+
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
+Acquisition_GPS1.dump=false
+;#filename: Log path and filename
+Acquisition_GPS1.dump_filename=./acq_dump.dat
+;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
+Acquisition_GPS1.item_type=gr_complex
+;#if: Signal intermediate frequency in [Hz]
+Acquisition_GPS1.if=0
+;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
+Acquisition_GPS1.coherent_integration_time_ms=1
+;#implementation: Acquisition algorithm selection for this channel:
+Acquisition_GPS1.implementation=GPS_L2_M_PCPS_Acquisition
+;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
+Acquisition_GPS1.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_GPS1.pfa=0.0001
+;#doppler_max: Maximum expected Doppler shift [Hz]
+Acquisition_GPS1.doppler_max=10000
+;#doppler_max: Doppler step in the grid search [Hz]
+Acquisition_GPS1.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_GPS1.bit_transition_flag=false
+;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
+Acquisition_GPS1.max_dwells=1
+
+
+;######### ACQUISITION GLOBAL CONFIG ############
+
+;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
+Acquisition_GPS.dump=true
+;#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.coherent_integration_time_ms=1
+;#implementation: Acquisition algorithm selection for this channel:
+Acquisition_GPS.implementation=GPS_L2_M_PCPS_Acquisition
+;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
+Acquisition_GPS.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
+;#doppler_max: Maximum expected Doppler shift [Hz]
+Acquisition_GPS.doppler_max=10000
+;#doppler_max: Doppler step in the grid search [Hz]
+Acquisition_GPS.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
+;#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 CHANNELS CONFIG ######
+;#The following options are specific to each channel and overwrite the generic options
+
+
+;######### TRACKING GLOBAL CONFIG ############
+
+;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking]
+Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_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
+
+;#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=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_
+
+;#pll_bw_hz: PLL loop filter bandwidth [Hz]
+Tracking_GPS.pll_bw_hz=40.0;
+
+;#dll_bw_hz: DLL loop filter bandwidth [Hz]
+Tracking_GPS.dll_bw_hz=3.0;
+
+;#fll_bw_hz: FLL loop filter bandwidth [Hz]
+Tracking_GPS.fll_bw_hz=10.0;
+
+;#order: PLL/DLL loop filter order [2] or [3]
+Tracking_GPS.order=3;
+
+;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
+Tracking_GPS.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
+;#decimation factor
+TelemetryDecoder_GPS.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=10
+
+;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
+PVT.flag_averaging=true
+
+;#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
+
+;# RINEX, KML, and NMEA 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
+
+
+;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
+PVT.dump=false
+
+;######### OUTPUT_FILTER CONFIG ############
+;# Receiver output filter: Leave this block disabled in this version
+OutputFilter.implementation=Null_Sink_Output_Filter
+OutputFilter.filename=data/gnss-sdr.dat
+OutputFilter.item_type=gr_complex
diff --git a/src/algorithms/acquisition/adapters/CMakeLists.txt b/src/algorithms/acquisition/adapters/CMakeLists.txt
index 781ecd1..e72f05f 100644
--- a/src/algorithms/acquisition/adapters/CMakeLists.txt
+++ b/src/algorithms/acquisition/adapters/CMakeLists.txt
@@ -24,6 +24,7 @@ set(ACQ_ADAPTER_SOURCES
gps_l1_ca_pcps_acquisition_fine_doppler.cc
gps_l1_ca_pcps_tong_acquisition.cc
gps_l1_ca_pcps_quicksync_acquisition.cc
+ gps_l2_m_pcps_acquisition.cc
galileo_e1_pcps_ambiguous_acquisition.cc
galileo_e1_pcps_cccwsr_ambiguous_acquisition.cc
galileo_e1_pcps_quicksync_ambiguous_acquisition.cc
diff --git a/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc b/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc
index 9a38c2a..abe4510 100644
--- a/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc
+++ b/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc
@@ -37,8 +37,8 @@
#include <boost/math/distributions/exponential.hpp>
#include <glog/logging.h>
#include <gnuradio/msg_queue.h>
-#include "gps_sdr_signal_processing.h"
-#include "GPS_L1_CA.h"
+#include "gps_l2c_signal.h"
+#include "GPS_L2C.h"
#include "configuration_interface.h"
@@ -55,7 +55,7 @@ GpsL2MPcpsAcquisition::GpsL2MPcpsAcquisition(
std::string default_dump_filename = "./data/acquisition.dat";
DLOG(INFO) << "role " << role;
-
+ std::cout<<"GpsL2MPcpsAcquisition role = "<<role<<std::endl;
item_type_ = configuration_->property(role + ".item_type",
default_item_type);
//float pfa = configuration_->property(role + ".pfa", 0.0);
@@ -81,8 +81,8 @@ GpsL2MPcpsAcquisition::GpsL2MPcpsAcquisition(
default_dump_filename);
//--- Find number of samples per spreading code -------------------------
- code_length_ = round(fs_in_
- / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS));
+ code_length_ = round((double)fs_in_
+ / (GPS_L2_M_CODE_RATE_HZ / (double)GPS_L2_M_CODE_LENGTH_CHIPS));
vector_length_ = code_length_ * sampled_ms_;
@@ -221,7 +221,7 @@ signed int GpsL2MPcpsAcquisition::mag()
void GpsL2MPcpsAcquisition::init()
{
acquisition_cc_->init();
- set_local_code();
+ //set_local_code();
}
@@ -230,8 +230,7 @@ void GpsL2MPcpsAcquisition::set_local_code()
// if (item_type_.compare("gr_complex") == 0)
// {
std::complex<float>* code = new std::complex<float>[code_length_];
-
- gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0);
+ gps_l2c_m_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_);
for (unsigned int i = 0; i < sampled_ms_; i++)
{
diff --git a/src/algorithms/libs/CMakeLists.txt b/src/algorithms/libs/CMakeLists.txt
index 90ce61d..beea7c8 100644
--- a/src/algorithms/libs/CMakeLists.txt
+++ b/src/algorithms/libs/CMakeLists.txt
@@ -18,6 +18,7 @@
set(GNSS_SPLIBS_SOURCES
+ gps_l2c_signal.cc
galileo_e1_signal_processing.cc
gnss_sdr_valve.cc
gnss_signal_processing.cc
diff --git a/src/algorithms/libs/gps_l2c_signal.cc b/src/algorithms/libs/gps_l2c_signal.cc
index 9d8e610..b238bab 100644
--- a/src/algorithms/libs/gps_l2c_signal.cc
+++ b/src/algorithms/libs/gps_l2c_signal.cc
@@ -36,16 +36,15 @@
#include <cmath>
-int8_t gps_l2c_m_shift(int x)
+int32_t gps_l2c_m_shift(int32_t x)
{
- int8_t a;
- return (int8_t)((x>>1)^(x&1)*0445112474);
+ return (int32_t)((x>>1)^((x&1)*0445112474));
}
-void gps_l2c_m_code(int8_t * _dest, int _prn)
+void gps_l2c_m_code(int32_t * _dest, unsigned int _prn)
{
- int x;
- x= GPS_L2C_M_INIT_REG[_prn];
+ int32_t x;
+ x= GPS_L2C_M_INIT_REG[_prn-1];
for (int n=0; n<GPS_L2_M_CODE_LENGTH_CHIPS; n++)
{
x= gps_l2c_m_shift(x);
@@ -54,12 +53,16 @@ void gps_l2c_m_code(int8_t * _dest, int _prn)
}
/*
- * Generates complex GPS L1 C/A code for the desired SV ID and sampled to specific sampling frequency
+ * Generates complex GPS L2C M code for the desired SV ID and sampled to specific sampling frequency
*/
-void gps_l1_ca_code_gen_complex_sampled(std::complex<float>* _dest, unsigned int _prn, signed int _fs)
+void gps_l2c_m_code_gen_complex_sampled(std::complex<float>* _dest, unsigned int _prn, signed int _fs)
{
- int8_t _code[GPS_L2_M_CODE_LENGTH_CHIPS];
+ int32_t _code[GPS_L2_M_CODE_LENGTH_CHIPS];
+ if (_prn<51)
+ {
+ gps_l2c_m_code(_code, _prn);
+ }
signed int _samplesPerCode, _codeValueIndex;
float _ts;
@@ -92,12 +95,12 @@ void gps_l1_ca_code_gen_complex_sampled(std::complex<float>* _dest, unsigned int
if (i == _samplesPerCode - 1)
{
//--- Correct the last index (due to number rounding issues) -----------
- _dest[i] = std::complex(1.0-2.0*_code[_codeLength - 1],0);
+ _dest[i] = std::complex<float>(1.0-2.0*_code[_codeLength - 1],0);
}
else
{
- _dest[i] = std::complex(1.0-2.0*_code[_codeValueIndex],0);; //repeat the chip -> upsample
+ _dest[i] = std::complex<float>(1.0-2.0*_code[_codeValueIndex],0);; //repeat the chip -> upsample
}
}
}
diff --git a/src/algorithms/libs/gps_l2c_signal.h b/src/algorithms/libs/gps_l2c_signal.h
index 9049805..4cea098 100644
--- a/src/algorithms/libs/gps_l2c_signal.h
+++ b/src/algorithms/libs/gps_l2c_signal.h
@@ -37,13 +37,7 @@
#include <iostream>
#include "GPS_L2C.h"
-//!Generates complex GPS L2C M code for the desired SV ID and code shift, and sampled to specific sampling frequency
-void gps_l2_m_code_gen_complex(std::complex<float>* _dest, signed int _prn, unsigned int _chip_shift);
-
-//! Generates N complex GPS L2C M codes for the desired SV ID and code shift
-void gps_l2_m_code_gen_complex_sampled(std::complex<float>* _dest, unsigned int _prn, signed int _fs, unsigned int _chip_shift, unsigned int _ncodes);
-
//! Generates complex GPS L2C M code for the desired SV ID and code shift
-void gps_l2_m_code_gen_complex_sampled(std::complex<float>* _dest, unsigned int _prn, signed int _fs, unsigned int _chip_shift);
+void gps_l2c_m_code_gen_complex_sampled(std::complex<float>* _dest, unsigned int _prn, signed int _fs);
#endif /* GNSS_GPS_L2C_SIGNAL_H_ */
diff --git a/src/core/receiver/gnss_block_factory.cc b/src/core/receiver/gnss_block_factory.cc
index 4579585..8893ec5 100644
--- a/src/core/receiver/gnss_block_factory.cc
+++ b/src/core/receiver/gnss_block_factory.cc
@@ -62,6 +62,7 @@
#include "freq_xlating_fir_filter.h"
#include "beamformer_filter.h"
#include "gps_l1_ca_pcps_acquisition.h"
+#include "gps_l2_m_pcps_acquisition.h"
#include "gps_l1_ca_pcps_multithread_acquisition.h"
#include "gps_l1_ca_pcps_tong_acquisition.h"
#include "gps_l1_ca_pcps_assisted_acquisition.h"
@@ -826,6 +827,12 @@ std::unique_ptr<AcquisitionInterface> GNSSBlockFactory::GetAcqBlock(
out_streams, queue));
block = std::move(block_);
}
+ else if (implementation.compare("GPS_L2_M_PCPS_Acquisition") == 0)
+ {
+ std::unique_ptr<AcquisitionInterface> block_(new GpsL2MPcpsAcquisition(configuration.get(), role, in_streams,
+ out_streams, queue));
+ block = std::move(block_);
+ }
else if (implementation.compare("Galileo_E1_PCPS_Ambiguous_Acquisition") == 0)
{
std::unique_ptr<AcquisitionInterface> block_(new GalileoE1PcpsAmbiguousAcquisition(configuration.get(), role, in_streams,
diff --git a/src/core/receiver/gnss_flowgraph.cc b/src/core/receiver/gnss_flowgraph.cc
index 7f9d287..44858b0 100644
--- a/src/core/receiver/gnss_flowgraph.cc
+++ b/src/core/receiver/gnss_flowgraph.cc
@@ -227,25 +227,30 @@ void GNSSFlowgraph::connect()
for (int j = 0; j < RF_Channels; j++)
{
//Connect the multichannel signal source to multiple signal conditioners
- // check number of signal source output ports todo!
- if (sig_source_.at(i)->get_right_block()->input_signature()->max_streams() > 1)
+ // GNURADIO max_streams=-1 means infinite ports!
+ LOG(WARNING)<<"sig_source_.at(i)->get_right_block()->output_signature()->max_streams()="<<sig_source_.at(i)->get_right_block()->output_signature()->max_streams();
+ LOG(WARNING)<<"sig_conditioner_.at(signal_conditioner_ID)->get_left_block()->input_signature()="<<sig_conditioner_.at(signal_conditioner_ID)->get_left_block()->input_signature()->max_streams();
+
+ if (sig_source_.at(i)->get_right_block()->output_signature()->max_streams() > 1)
{
+
+ LOG(WARNING)<<"connecting sig_source_ "<<i<<" stream "<<j<<" to conditioner "<<j;
top_block_->connect(sig_source_.at(i)->get_right_block(), j, sig_conditioner_.at(signal_conditioner_ID)->get_left_block(), 0);
- //std::cout<<"connect sig_source_ "<<i<<" stream "<<j<<" to conditioner "<<j<<std::endl;
+
}
else
{
if (j == 0)
{
// RF_channel 0 backward compatibility with single channel sources
+ LOG(WARNING)<<"connecting sig_source_ "<<i<<" stream "<<0<<" to conditioner "<<j<<std::endl;
top_block_->connect(sig_source_.at(i)->get_right_block(), 0, sig_conditioner_.at(signal_conditioner_ID)->get_left_block(), 0);
- //std::cout<<"connect sig_source_ "<<i<<" stream "<<0<<" to conditioner "<<j<<std::endl;
}
else
{
// Multiple channel sources using multiple output blocks of single channel (requires RF_channel selector in call)
+ LOG(WARNING)<<"connecting sig_source_ "<<i<<" stream "<<j<<" to conditioner "<<j<<std::endl;
top_block_->connect(sig_source_.at(i)->get_right_block(j), 0, sig_conditioner_.at(signal_conditioner_ID)->get_left_block(), 0);
- //std::cout<<"connect sig_source_ "<<i<<" stream "<<j<<" to conditioner "<<j<<std::endl;
}
}
@@ -299,8 +304,17 @@ void GNSSFlowgraph::connect()
}
//discriminate between systems
+ std::string default_system = configuration_->property("Channel.system", std::string("GPS"));
+ std::string default_signal = configuration_->property("Channel.signal", std::string("1C"));
+ std::string gnss_system = (configuration_->property("Channel"
+ + boost::lexical_cast<std::string>(i) + ".system",
+ default_system));
+ std::string gnss_signal = (configuration_->property("Channel"
+ + boost::lexical_cast<std::string>(i) + ".signal",
+ default_signal));
//TODO: add a specific string member to the channel template, and not re-use the implementation field!
- while (channels_.at(i)->implementation() != available_GNSS_signals_.front().get_satellite().get_system())
+ while (channels_.at(i)->implementation() != available_GNSS_signals_.front().get_satellite().get_system()
+ or gnss_signal != available_GNSS_signals_.front().get_signal() )
{
available_GNSS_signals_.push_back(available_GNSS_signals_.front());
available_GNSS_signals_.pop_front();
@@ -388,10 +402,12 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what)
switch (what)
{
case 0:
- LOG(INFO) << "Channel " << who << " ACQ FAILED satellite " << channels_.at(who)->get_signal().get_satellite();
+ LOG(INFO) << "Channel " << who << " ACQ FAILED satellite " << channels_.at(who)->get_signal().get_satellite()<<", Signal " << channels_.at(who)->get_signal().get_signal();
available_GNSS_signals_.push_back(channels_.at(who)->get_signal());
- while (channels_.at(who)->get_signal().get_satellite().get_system() != available_GNSS_signals_.front().get_satellite().get_system())
+ //TODO: Optimize the channel and signal matching!
+ while (channels_.at(who)->get_signal().get_satellite().get_system() != available_GNSS_signals_.front().get_satellite().get_system()
+ or channels_.at(who)->get_signal().get_signal() != available_GNSS_signals_.front().get_signal() )
{
available_GNSS_signals_.push_back(available_GNSS_signals_.front());
available_GNSS_signals_.pop_front();
@@ -424,7 +440,7 @@ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what)
for (unsigned int i = 0; i < channels_count_; i++)
{
LOG(INFO) << "Channel " << i << " in state " << channels_state_[i] << std::endl;
- }
+ }channels_.at(who)->set_signal(available_GNSS_signals_.front());
break;
case 2:
@@ -590,6 +606,24 @@ void GNSSFlowgraph::set_signals_list()
}
}
+ if (default_system.find(std::string("GPS L2C M")) != std::string::npos )
+ {
+ /*
+ * Loop to create GPS L2C M signals
+ */
+ std::set<unsigned int> available_gps_prn = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28,
+ 29, 30, 31, 32 };
+
+ for (available_gnss_prn_iter = available_gps_prn.begin();
+ available_gnss_prn_iter != available_gps_prn.end();
+ available_gnss_prn_iter++)
+ {
+ available_GNSS_signals_.push_back(Gnss_Signal(Gnss_Satellite(std::string("GPS"),
+ *available_gnss_prn_iter), std::string("2S")));
+ }
+ }
+
if (default_system.find(std::string("SBAS")) != std::string::npos)
{
@@ -660,19 +694,20 @@ void GNSSFlowgraph::set_signals_list()
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<Gnss_Signal>::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::cout<<"default_system="<<default_system<<std::endl;
+ std::cout<<"default_signal="<<default_signal<<std::endl;
+ std::list<Gnss_Signal>::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/GPS_L2C.h b/src/core/system_parameters/GPS_L2C.h
index e14cd37..3b08df3 100644
--- a/src/core/system_parameters/GPS_L2C.h
+++ b/src/core/system_parameters/GPS_L2C.h
@@ -51,7 +51,7 @@ const int GPS_L2_L_CODE_LENGTH_CHIPS = 767250; //!< GPS L2 L code length [chi
const double GPS_L2_L_PERIOD = 1.5; //!< GPS L2 L code period [seconds]
-const int GPS_L2C_M_INIT_REG[115] =
+const int32_t GPS_L2C_M_INIT_REG[115] =
{0742417664, 0756014035,0002747144,0066265724, // 1:4
0601403471, 0703232733, 0124510070,0617316361, // 5:8
0047541621, 0733031046, 0713512145, 0024437606,
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/gnss-sdr.git
More information about the pkg-hamradio-commits
mailing list