[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