[hamradio-commits] [gnss-sdr] 177/251: bug found in PRN resampler code. Disabled optimization

Carles Fernandez carles_fernandez-guest at moszumanska.debian.org
Wed Sep 2 00:22:47 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 26a6bbd37a2ece8db27bb173e5295da348851525
Author: Javier <jarribas at cttc.es>
Date:   Fri Jun 12 19:28:56 2015 +0200

    bug found in PRN resampler code. Disabled optimization
---
 conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf      | 22 ++---
 ...channel_GPS_L2_M_Flexiband_bin_file_III_1b.conf | 97 +++++++++++++---------
 src/algorithms/libs/gps_l2c_signal.cc              | 13 ++-
 .../gps_l2_m_dll_pll_tracking_cc.cc                | 15 ++--
 4 files changed, 85 insertions(+), 62 deletions(-)

diff --git a/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf b/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf
index 33cec6f..35c5ad1 100644
--- a/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf
+++ b/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf
@@ -7,7 +7,7 @@
 
 ;######### GLOBAL OPTIONS ##################
 ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=5000000
+GNSS-SDR.internal_fs_hz=2000000
 
 ;######### CONTROL_THREAD CONFIG ############
 ControlThread.wait_for_flowgraph=false
@@ -28,9 +28,9 @@ GNSS-SDR.SUPL_CI=0x31b0
 SignalSource.implementation=UHD_Signal_Source
 SignalSource.device_address=192.168.50.2
 SignalSource.item_type=cshort
-SignalSource.sampling_frequency=5000000
+SignalSource.sampling_frequency=2000000
 SignalSource.freq=1227600000
-SignalSource.gain=60
+SignalSource.gain=35
 SignalSource.subdevice=A:0
 SignalSource.samples=0
 SignalSource.repeat=false
@@ -71,7 +71,7 @@ InputFilter.band2_error=1.0
 
 InputFilter.filter_type=bandpass
 InputFilter.grid_density=16
-InputFilter.sampling_frequency=5000000
+InputFilter.sampling_frequency=2000000
 InputFilter.IF=0
 
 ;######### RESAMPLER CONFIG ############
@@ -79,13 +79,13 @@ Resampler.implementation=Pass_Through
 Resampler.dump=false
 Resampler.dump_filename=../data/resampler.dat
 Resampler.item_type=gr_complex
-Resampler.sample_freq_in=5000000
-Resampler.sample_freq_out=5000000
+Resampler.sample_freq_in=2000000
+Resampler.sample_freq_out=2000000
 
 
 ;######### CHANNELS GLOBAL CONFIG ############
 ;#count: Number of available GPS satellite channels.
-Channels_2S.count=1
+Channels_2S.count=2
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
 
@@ -114,7 +114,7 @@ Acquisition_2S.item_type=gr_complex
 Acquisition_2S.if=0
 Acquisition_2S.coherent_integration_time_ms=1
 Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
-Acquisition_2S.threshold=0.0008
+Acquisition_2S.threshold=0.001
 ;Acquisition_2S.pfa=0.00001
 Acquisition_2S.doppler_max=5000
 Acquisition_2S.doppler_step=30
@@ -130,15 +130,15 @@ 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=3.0;
-Tracking_2S.dll_bw_hz=1;
+Tracking_2S.pll_bw_hz=2.0;
+Tracking_2S.dll_bw_hz=0.3;
 Tracking_2S.fll_bw_hz=2.0;
 Tracking_2S.order=3;
 Tracking_2S.early_late_space_chips=0.5;
 
 ;######### TELEMETRY DECODER GPS CONFIG ############
 TelemetryDecoder_2S.implementation=GPS_L2_M_Telemetry_Decoder
-TelemetryDecoder_2S.dump=false
+TelemetryDecoder_2S.dump=true
 TelemetryDecoder_2S.decimation_factor=1;
 
 ;######### OBSERVABLES 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 0e9504d..9f39011 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
@@ -7,7 +7,7 @@
 
 ;######### GLOBAL OPTIONS ##################
 ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
-GNSS-SDR.internal_fs_hz=5000000
+GNSS-SDR.internal_fs_hz=2500000
 
 ;######### CONTROL_THREAD CONFIG ############
 ControlThread.wait_for_flowgraph=false
@@ -139,7 +139,7 @@ InputFilter0.sampling_frequency=20000000
 InputFilter0.IF=0
 
 ;# Decimation factor after the frequency tranaslating block
-InputFilter0.decimation_factor=4
+InputFilter0.decimation_factor=8
 
 ;######### RESAMPLER CONFIG 0 ############
 ;## Resamples the input data. 
@@ -231,7 +231,7 @@ InputFilter1.sampling_frequency=20000000
 InputFilter1.IF=0
 
 ;# Decimation factor after the frequency tranaslating block
-InputFilter1.decimation_factor=4
+InputFilter1.decimation_factor=8
 
 
 ;######### RESAMPLER CONFIG 1 ############
@@ -268,7 +268,7 @@ Resampler2.implementation=Pass_Through
 ;######### CHANNELS GLOBAL CONFIG ############
 ;#count: Number of available GPS satellite channels.
 Channels_1C.count=1
-Channels_2S.count=6
+Channels_2S.count=1
 ;#count: Number of available Galileo satellite channels.
 ;Channels_Galileo.count=0
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
@@ -448,7 +448,7 @@ 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.0004  
+Acquisition_2S1.threshold=0.0005  
 ;Acquisition_2S1.pfa=0.001
 Acquisition_2S1.doppler_max=5000
 Acquisition_2S1.doppler_min=-5000
@@ -460,7 +460,7 @@ 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.0004 
+Acquisition_2S2.threshold=0.0003 
 ;Acquisition_2S2.pfa=0.001
 Acquisition_2S2.doppler_max=5000
 Acquisition_2S2.doppler_min=-5000
@@ -472,7 +472,7 @@ 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.0004 
+Acquisition_2S3.threshold=0.0003 
 ;Acquisition_2S3.pfa=0.001
 Acquisition_2S3.doppler_max=5000
 Acquisition_2S3.doppler_min=-5000
@@ -484,7 +484,7 @@ 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.0004 
+Acquisition_2S4.threshold=0.0003 
 ;Acquisition_2S4.pfa=0.001
 Acquisition_2S4.doppler_max=5000
 Acquisition_2S4.doppler_min=-5000
@@ -496,7 +496,7 @@ 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.0004 
+Acquisition_2S5.threshold=0.0003 
 ;Acquisition_2S5.pfa=0.001
 Acquisition_2S5.doppler_max=5000
 Acquisition_2S5.doppler_min=-5000
@@ -508,7 +508,7 @@ 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.0004 
+Acquisition_2S6.threshold=0.0003 
 ;Acquisition_2S6.pfa=0.001
 Acquisition_2S6.doppler_max=5000
 Acquisition_2S6.doppler_min=-5000
@@ -520,13 +520,25 @@ 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.0004
+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
+
 
 ;######### ACQUISITION CHANNELS CONFIG ######
 ;#The following options are specific to each channel and overwrite the generic options
@@ -628,8 +640,8 @@ Tracking_2S1.item_type=gr_complex
 Tracking_2S1.if=0
 Tracking_2S1.dump=true
 Tracking_2S1.dump_filename=./tracking_ch_
-Tracking_2S1.pll_bw_hz=3.0;
-Tracking_2S1.dll_bw_hz=2;
+Tracking_2S1.pll_bw_hz=2.0;
+Tracking_2S1.dll_bw_hz=0.3;
 Tracking_2S1.fll_bw_hz=2.0;
 Tracking_2S1.order=3;
 Tracking_2S1.early_late_space_chips=0.5;
@@ -639,8 +651,8 @@ 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=3.0;
-Tracking_2S2.dll_bw_hz=1;
+Tracking_2S2.pll_bw_hz=2.0;
+Tracking_2S2.dll_bw_hz=0.3;
 Tracking_2S2.fll_bw_hz=2.0;
 Tracking_2S2.order=3;
 Tracking_2S2.early_late_space_chips=0.5;
@@ -650,8 +662,8 @@ 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=3.0;
-Tracking_2S3.dll_bw_hz=1;
+Tracking_2S3.pll_bw_hz=2.0;
+Tracking_2S3.dll_bw_hz=0.3;
 Tracking_2S3.fll_bw_hz=2.0;
 Tracking_2S3.order=3;
 Tracking_2S3.early_late_space_chips=0.5;
@@ -661,8 +673,8 @@ 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=3.0;
-Tracking_2S4.dll_bw_hz=1;
+Tracking_2S4.pll_bw_hz=2.0;
+Tracking_2S4.dll_bw_hz=0.3;
 Tracking_2S4.fll_bw_hz=2.0;
 Tracking_2S4.order=3;
 Tracking_2S4.early_late_space_chips=0.5;
@@ -673,8 +685,8 @@ 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=3.0;
-Tracking_2S5.dll_bw_hz=1;
+Tracking_2S5.pll_bw_hz=2.0;
+Tracking_2S5.dll_bw_hz=0.3;
 Tracking_2S5.fll_bw_hz=2.0;
 Tracking_2S5.order=3;
 Tracking_2S5.early_late_space_chips=0.5;
@@ -684,8 +696,8 @@ 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=3.0;
-Tracking_2S6.dll_bw_hz=1;
+Tracking_2S6.pll_bw_hz=2.0;
+Tracking_2S6.dll_bw_hz=0.3;
 Tracking_2S6.fll_bw_hz=2.0;
 Tracking_2S6.order=3;
 Tracking_2S6.early_late_space_chips=0.5;
@@ -695,11 +707,22 @@ 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=3.0;
-Tracking_2S7.dll_bw_hz=1;
+Tracking_2S7.pll_bw_hz=2.0;
+Tracking_2S7.dll_bw_hz=0.3;
 Tracking_2S7.fll_bw_hz=2.0;
 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.fll_bw_hz=2.0;
+Tracking_2S8.order=3;
+Tracking_2S8.early_late_space_chips=0.5;
 
 
 ;######### TELEMETRY DECODER GPS CONFIG ############
@@ -754,21 +777,21 @@ TelemetryDecoder_2S4.implementation=GPS_L2_M_Telemetry_Decoder
 TelemetryDecoder_2S4.dump=false
 TelemetryDecoder_2S4.decimation_factor=1;
 
-TelemetryDecoder_2S12.implementation=GPS_L2_M_Telemetry_Decoder
-TelemetryDecoder_2S12.dump=false
-TelemetryDecoder_2S12.decimation_factor=1;
+TelemetryDecoder_2S5.implementation=GPS_L2_M_Telemetry_Decoder
+TelemetryDecoder_2S5.dump=false
+TelemetryDecoder_2S5.decimation_factor=1;
 
-TelemetryDecoder_2S13.implementation=GPS_L2_M_Telemetry_Decoder
-TelemetryDecoder_2S13.dump=false
-TelemetryDecoder_2S13.decimation_factor=1;
+TelemetryDecoder_2S6.implementation=GPS_L2_M_Telemetry_Decoder
+TelemetryDecoder_2S6.dump=false
+TelemetryDecoder_2S6.decimation_factor=1;
 
-TelemetryDecoder_2S14.implementation=GPS_L2_M_Telemetry_Decoder
-TelemetryDecoder_2S14.dump=false
-TelemetryDecoder_2S14.decimation_factor=1;
+TelemetryDecoder_2S7.implementation=GPS_L2_M_Telemetry_Decoder
+TelemetryDecoder_2S7.dump=false
+TelemetryDecoder_2S7.decimation_factor=1;
 
-TelemetryDecoder_2S15.implementation=GPS_L2_M_Telemetry_Decoder
-TelemetryDecoder_2S15.dump=false
-TelemetryDecoder_2S15.decimation_factor=1;
+TelemetryDecoder_2S8.implementation=GPS_L2_M_Telemetry_Decoder
+TelemetryDecoder_2S8.dump=false
+TelemetryDecoder_2S8.decimation_factor=1;
 
 
 ;######### OBSERVABLES CONFIG ############
diff --git a/src/algorithms/libs/gps_l2c_signal.cc b/src/algorithms/libs/gps_l2c_signal.cc
index cb0dcc7..5672b3a 100644
--- a/src/algorithms/libs/gps_l2c_signal.cc
+++ b/src/algorithms/libs/gps_l2c_signal.cc
@@ -86,15 +86,14 @@ void gps_l2c_m_code_gen_complex_sampled(std::complex<float>* _dest, unsigned int
     signed int _samplesPerCode, _codeValueIndex;
     float _ts;
     float _tc;
-    const signed int _codeFreqBasis = GPS_L2_M_CODE_RATE_HZ; //Hz
     const signed int _codeLength = GPS_L2_M_CODE_LENGTH_CHIPS;
 
     //--- Find number of samples per spreading code ----------------------------
-    _samplesPerCode = static_cast<int>(static_cast<double>(_fs) / (static_cast<double>(_codeFreqBasis) / static_cast<double>(_codeLength)));
+    _samplesPerCode = static_cast<int>(static_cast<double>(_fs) / (static_cast<double>(GPS_L2_M_CODE_RATE_HZ) / static_cast<double>(_codeLength)));
 
     //--- Find time constants --------------------------------------------------
     _ts = 1.0 / static_cast<float>(_fs);   // Sampling period in sec
-    _tc = 1.0 / static_cast<float>(_codeFreqBasis);  // C/A chip period in sec
+    _tc = 1.0 / static_cast<float>(GPS_L2_M_CODE_RATE_HZ);  // C/A chip period in sec
 
     float aux;
 
@@ -108,9 +107,9 @@ void gps_l2c_m_code_gen_complex_sampled(std::complex<float>* _dest, unsigned int
             // millisecond).
     	    //TODO: Check this formula! Seems to start with an extra sample
 
-            // _codeValueIndex = ceil((_ts * ((float)i + 1)) / _tc) - 1;
-            aux = (_ts * (i + 1)) / _tc;
-            _codeValueIndex = static_cast<int>(static_cast<long>(aux)) - 1;
+            _codeValueIndex = ceil((_ts * ((float)i + 1)) / _tc) - 1;
+            //aux = (_ts * (i + 1)) / _tc;
+            //_codeValueIndex = static_cast<int>(static_cast<long>(aux)) - 1;
 
             //--- Make the digitized version of the C/A code -----------------------
             // The "upsampled" code is made by selecting values form the CA code
@@ -123,7 +122,7 @@ void gps_l2c_m_code_gen_complex_sampled(std::complex<float>* _dest, unsigned int
                 }
             else
                 {
-                    _dest[i] = std::complex<float>(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
                 }
         }
     delete[] _code;
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 402e15e..d55bb8b 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
@@ -357,17 +357,18 @@ int gps_l2_m_dll_pll_tracking_cc::general_work (int noutput_items, gr_vector_int
                     int samples_offset;
                     float acq_trk_shif_correction_samples;
                     int acq_to_trk_delay_samples;
-                    acq_to_trk_delay_samples = d_sample_counter - d_acq_sample_stamp;
-                    acq_trk_shif_correction_samples = d_current_prn_length_samples - fmod(static_cast<float>(acq_to_trk_delay_samples), static_cast<float>(d_current_prn_length_samples));
-                    samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples+(1.5*(d_fs_in/GPS_L2_M_CODE_RATE_HZ)));
+                    acq_to_trk_delay_samples = (d_sample_counter - (d_acq_sample_stamp-d_current_prn_length_samples));
+                    acq_trk_shif_correction_samples = fmod(static_cast<float>(acq_to_trk_delay_samples), static_cast<float>(d_current_prn_length_samples));
+                    samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples);//+(1.5*(d_fs_in/GPS_L2_M_CODE_RATE_HZ)));
                     // /todo: Check if the sample counter sent to the next block as a time reference should be incremented AFTER sended or BEFORE
                     //d_sample_counter_seconds = d_sample_counter_seconds + (((double)samples_offset) / static_cast<double>(d_fs_in));
                     d_sample_counter = d_sample_counter + samples_offset; //count for the processed samples
                     d_pull_in = false;
-                    //std::cout<<" d_acq_code_phase_samples="<<d_acq_code_phase_samples<<std::endl;
-                    //std::cout<<" acq_trk_shif_correction_samples="<<acq_trk_shif_correction_samples<<std::endl;
-                    //std::cout<<" d_current_prn_length_samples="<<d_current_prn_length_samples<<std::endl;
-                    //std::cout<<" samples_offset="<<samples_offset<<std::endl;
+                    std::cout<<" acq_to_trk_delay_samples="<<acq_to_trk_delay_samples<<std::endl;
+                    std::cout<<" acq_trk_shif_correction_samples="<<acq_trk_shif_correction_samples<<std::endl;
+                    std::cout<<" d_acq_code_phase_samples="<<d_acq_code_phase_samples<<std::endl;
+                    std::cout<<" d_current_prn_length_samples="<<d_current_prn_length_samples<<std::endl;
+                    std::cout<<" samples_offset="<<samples_offset<<std::endl;
                     // Fill the acquisition data
                     current_synchro_data = *d_acquisition_gnss_synchro;
                     current_synchro_data.Flag_valid_tracking = false;

-- 
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