[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