[hamradio-commits] [gnss-sdr] 99/236: Bug fixes in GPS CA L1 20 extended correlator

Carles Fernandez carles_fernandez-guest at moszumanska.debian.org
Tue Apr 26 16:02:39 UTC 2016


This is an automated email from the git hooks/post-receive script.

carles_fernandez-guest pushed a commit to branch next
in repository gnss-sdr.

commit 6c2f3d8f434851fb7dc6b19032488530a14477fd
Author: Javier Arribas <javiarribas at gmail.com>
Date:   Tue Mar 15 17:58:58 2016 +0100

    Bug fixes in GPS CA L1 20 extended correlator
---
 .../gps_l1_ca_dll_pll_c_aid_tracking_cc.cc         | 30 +++++++++++++---------
 .../gps_l1_ca_dll_pll_c_aid_tracking_cc.h          |  5 +++-
 2 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.cc
index 4f98804..57b1736 100644
--- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.cc
+++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.cc
@@ -198,6 +198,7 @@ gps_l1_ca_dll_pll_c_aid_tracking_cc::gps_l1_ca_dll_pll_c_aid_tracking_cc(
     d_acq_code_phase_samples = 0.0;
     d_acq_carrier_doppler_hz = 0.0;
     d_carrier_doppler_hz = 0.0;
+    d_code_error_filt_chips_Ti = 0.0;
     d_acc_carrier_phase_cycles = 0.0;
     d_code_phase_samples = 0.0;
 
@@ -324,8 +325,8 @@ int gps_l1_ca_dll_pll_c_aid_tracking_cc::general_work (int noutput_items, gr_vec
 
     // process vars
     double code_error_filt_secs_Ti = 0.0;
-    double CURRENT_INTEGRATION_TIME_S;
-    double CORRECTED_INTEGRATION_TIME_S;
+    double CURRENT_INTEGRATION_TIME_S = 0.0;
+    double CORRECTED_INTEGRATION_TIME_S = 0.0;
     double dll_code_error_secs_Ti = 0.0;
     double old_d_rem_code_phase_samples;
     if (d_enable_tracking == true)
@@ -392,14 +393,16 @@ int gps_l1_ca_dll_pll_c_aid_tracking_cc::general_work (int noutput_items, gr_vec
 
 		            if (d_preamble_synchronized==false)
 		            {
+							d_code_loop_filter.set_DLL_BW(d_dll_bw_narrow_hz);
+							d_carrier_loop_filter.set_params(10.0, d_pll_bw_narrow_hz,2);
 		            		d_preamble_synchronized=true;
 		            		std::cout<<"dll="<<d_dll_bw_hz<<" dll_n="<<d_dll_bw_narrow_hz<<" pll="<<d_pll_bw_hz<<" pll_n="<<d_pll_bw_narrow_hz<<std::endl;
+
 		            }
 					current_synchro_data.symbol_integration_enabled=true;
 					// UPDATE INTEGRATION TIME
 	            	CURRENT_INTEGRATION_TIME_S = static_cast<double>(GPS_CA_TELEMETRY_SYMBOLS_PER_BIT)*GPS_L1_CA_CODE_PERIOD;
-				    d_code_loop_filter.set_DLL_BW(d_dll_bw_narrow_hz);
-				    d_carrier_loop_filter.set_params(10.0, d_pll_bw_narrow_hz,2);
+
 					enable_dll_pll=true;
 
 				}else{
@@ -407,7 +410,9 @@ int gps_l1_ca_dll_pll_c_aid_tracking_cc::general_work (int noutput_items, gr_vec
 					if(d_preamble_synchronized==true)
 					{
 						// continue extended coherent correlation
-						d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + d_carrier_phase_step_rad * d_correlation_length_samples, GPS_TWO_PI);
+
+						//remnant carrier phase [rads]
+						d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + d_carrier_phase_step_rad * static_cast<double>(d_correlation_length_samples), GPS_TWO_PI);
 
 						// Compute the next buffer length based on the period of the PRN sequence and the code phase error estimation
 						double T_chip_seconds = 1 / d_code_freq_chips;
@@ -416,8 +421,7 @@ int gps_l1_ca_dll_pll_c_aid_tracking_cc::general_work (int noutput_items, gr_vec
 						int K_prn_samples = round(T_prn_samples);
 						double K_T_prn_error_samples=K_prn_samples-T_prn_samples;
 
-						old_d_rem_code_phase_samples=d_rem_code_phase_samples;
-						d_rem_code_phase_samples= d_rem_code_phase_samples - K_T_prn_error_samples -dll_code_error_secs_Ti * static_cast<double>(d_fs_in);
+						d_rem_code_phase_samples= d_rem_code_phase_samples - K_T_prn_error_samples;
 						d_rem_code_phase_integer_samples=round(d_rem_code_phase_samples);
 						d_correlation_length_samples = K_prn_samples + d_rem_code_phase_integer_samples; //round to a discrete samples
 						d_rem_code_phase_samples=d_rem_code_phase_samples-d_rem_code_phase_integer_samples;
@@ -463,10 +467,12 @@ int gps_l1_ca_dll_pll_c_aid_tracking_cc::general_work (int noutput_items, gr_vec
 				// DLL discriminator
 				d_code_error_chips_Ti = dll_nc_e_minus_l_normalized(d_correlator_outs[0], d_correlator_outs[2]); //[chips/Ti] //early and late
 				// Code discriminator filter
-				d_code_error_filt_chips = d_code_loop_filter.get_code_nco(d_code_error_chips_Ti); //input [chips/Ti] -> output [chips/second]
-				code_error_filt_secs_Ti = d_code_error_filt_chips*CURRENT_INTEGRATION_TIME_S/d_code_freq_chips; // [s/Ti]
+				d_code_error_filt_chips_s = d_code_loop_filter.get_code_nco(d_code_error_chips_Ti); //input [chips/Ti] -> output [chips/second]
+				d_code_error_filt_chips_Ti = d_code_error_filt_chips_s*CURRENT_INTEGRATION_TIME_S;
+				code_error_filt_secs_Ti = d_code_error_filt_chips_Ti/d_code_freq_chips; // [s/Ti]
 				// DLL code error estimation [s/Ti]
-				dll_code_error_secs_Ti = - code_error_filt_secs_Ti + d_pll_to_dll_assist_secs_Ti;
+				// PLL to DLL assistance is disable due to the use of a fractional resampler that allows the correction of the code Doppler effect.
+				dll_code_error_secs_Ti = - code_error_filt_secs_Ti;// + d_pll_to_dll_assist_secs_Ti;
 
 				// ################## CARRIER AND CODE NCO BUFFER ALIGNEMENT #######################
 
@@ -663,14 +669,14 @@ int gps_l1_ca_dll_pll_c_aid_tracking_cc::general_work (int noutput_items, gr_vec
 
                     //DLL commands
                     d_dump_file.write(reinterpret_cast<char*>(&d_code_error_chips_Ti), sizeof(double));
-                    d_dump_file.write(reinterpret_cast<char*>(&d_code_error_filt_chips), sizeof(double));
+                    d_dump_file.write(reinterpret_cast<char*>(&d_code_error_filt_chips_Ti), sizeof(double));
 
                     // CN0 and carrier lock test
                     d_dump_file.write(reinterpret_cast<char*>(&d_CN0_SNV_dB_Hz), sizeof(double));
                     d_dump_file.write(reinterpret_cast<char*>(&d_carrier_lock_test), sizeof(double));
 
                     // AUX vars (for debug purposes)
-                    tmp_double = d_code_phase_step_chips;
+                    tmp_double = d_code_error_chips_Ti*CURRENT_INTEGRATION_TIME_S;
                     d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double));
                     tmp_double = static_cast<double>(d_sample_counter + d_correlation_length_samples);
                     d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double));
diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.h b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.h
index 4fb4468..fec006c 100644
--- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.h
+++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_cc.h
@@ -48,6 +48,7 @@
 #include "gnss_synchro.h"
 #include "tracking_2nd_DLL_filter.h"
 #include "tracking_FLL_PLL_filter.h"
+#include "tracking_loop_filter.h"
 #include "cpu_multicorrelator.h"
 
 class gps_l1_ca_dll_pll_c_aid_tracking_cc;
@@ -141,6 +142,7 @@ private:
     int d_rem_code_phase_integer_samples;
 
     // PLL and DLL filter library
+    //Tracking_2nd_DLL_filter d_code_loop_filter;
     Tracking_2nd_DLL_filter d_code_loop_filter;
     Tracking_FLL_PLL_filter d_carrier_loop_filter;
 
@@ -161,7 +163,8 @@ private:
     double d_code_phase_samples;
     double d_pll_to_dll_assist_secs_Ti;
     double d_code_error_chips_Ti;
-    double d_code_error_filt_chips;
+    double d_code_error_filt_chips_s;
+    double d_code_error_filt_chips_Ti;
     double d_carr_phase_error_secs_Ti;
 
     // symbol history to detect bit transition

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