1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-06-24 05:53:16 +00:00

Fixing resampling

This commit is contained in:
Carles Fernandez 2015-06-12 19:45:20 +02:00
commit 2984ff938e
4 changed files with 85 additions and 62 deletions

View File

@ -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 ############.

View File

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

View File

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

View File

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