From 32690a7d59defc8904d7bdb9b039c19e739cd549 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Fri, 13 Jan 2012 00:49:24 +0000 Subject: [PATCH] Tracking Classes are now upper case. git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@125 64b25241-fba3-4117-9849-534c7e92360d --- .../gps_l1_ca_dll_fll_pll_tracking_cc.cc | 114 ++++++++++-------- .../gps_l1_ca_dll_fll_pll_tracking_cc.h | 12 +- .../gps_l1_ca_dll_pll_tracking_cc.cc | 83 +++++++------ .../gps_l1_ca_dll_pll_tracking_cc.h | 14 +-- .../tracking/libs/tracking_2nd_DLL_filter.cc | 15 +-- .../tracking/libs/tracking_2nd_DLL_filter.h | 7 +- .../tracking/libs/tracking_2nd_PLL_filter.cc | 62 ++++++---- .../tracking/libs/tracking_2nd_PLL_filter.h | 6 +- .../tracking/libs/tracking_FLL_PLL_filter.cc | 89 ++++++++------ .../tracking/libs/tracking_FLL_PLL_filter.h | 6 +- 10 files changed, 230 insertions(+), 178 deletions(-) diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_fll_pll_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_fll_pll_tracking_cc.cc index b300b7abe..b2aed28f1 100644 --- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_fll_pll_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_fll_pll_tracking_cc.cc @@ -61,66 +61,80 @@ using google::LogMessage; gps_l1_ca_dll_fll_pll_tracking_cc_sptr gps_l1_ca_dll_fll_pll_make_tracking_cc(unsigned int satellite, long if_freq, long fs_in, unsigned - int vector_length, gr_msg_queue_sptr queue, bool dump, std::string dump_filename, int order, float fll_bw_hz, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) { + int vector_length, gr_msg_queue_sptr queue, bool dump, std::string dump_filename, int order, + float fll_bw_hz, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) +{ - return gps_l1_ca_dll_fll_pll_tracking_cc_sptr(new gps_l1_ca_dll_fll_pll_tracking_cc(satellite, if_freq, - fs_in, vector_length, queue, dump, dump_filename, order, fll_bw_hz, pll_bw_hz,dll_bw_hz,early_late_space_chips)); + return gps_l1_ca_dll_fll_pll_tracking_cc_sptr(new Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc(satellite, if_freq, + fs_in, vector_length, queue, dump, dump_filename, order, fll_bw_hz, pll_bw_hz,dll_bw_hz, + early_late_space_chips)); } -void gps_l1_ca_dll_fll_pll_tracking_cc::forecast (int noutput_items, - gr_vector_int &ninput_items_required){ + + + +void Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ ninput_items_required[0] =d_vector_length*2; //set the required available samples in each call } -gps_l1_ca_dll_fll_pll_tracking_cc::gps_l1_ca_dll_fll_pll_tracking_cc(unsigned int satellite, long if_freq, long fs_in, unsigned - int vector_length, gr_msg_queue_sptr queue, bool dump, std::string dump_filename, int order, float fll_bw_hz, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) : - gr_block ("gps_l1_ca_dll_fll_pll_tracking_cc", gr_make_io_signature (1, 1, sizeof(gr_complex)), - gr_make_io_signature(5, 5, sizeof(double))) { - //gr_sync_decimator ("gps_l1_ca_dll_pll_tracking_cc", gr_make_io_signature (1, 1, sizeof(gr_complex)), - // gr_make_io_signature(3, 3, sizeof(float)),vector_length) { - // initialize internal vars - d_queue = queue; - d_dump = dump; - d_satellite = satellite; - d_if_freq = if_freq; - d_fs_in = fs_in; - d_vector_length = vector_length; - d_early_late_spc_chips = early_late_space_chips; // Define early-late offset (in chips) + + + +Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc::Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc(unsigned int satellite, + long if_freq, long fs_in, unsigned int vector_length, gr_msg_queue_sptr queue, bool dump, + std::string dump_filename, int order, float fll_bw_hz, float pll_bw_hz, float dll_bw_hz, + float early_late_space_chips) : + gr_block ("Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc", gr_make_io_signature (1, 1, sizeof(gr_complex)), + gr_make_io_signature(5, 5, sizeof(double))) +{ + //gr_sync_decimator ("gps_l1_ca_dll_pll_tracking_cc", gr_make_io_signature (1, 1, sizeof(gr_complex)), + // gr_make_io_signature(3, 3, sizeof(float)),vector_length) { + // initialize internal vars + d_queue = queue; + d_dump = dump; + d_satellite = satellite; + d_if_freq = if_freq; + d_fs_in = fs_in; + d_vector_length = vector_length; + d_early_late_spc_chips = early_late_space_chips; // Define early-late offset (in chips) d_dump_filename=dump_filename; - // Initialize tracking variables ========================================== - d_carrier_loop_filter.set_params(fll_bw_hz,pll_bw_hz,order); + // Initialize tracking variables ========================================== + d_carrier_loop_filter.set_params(fll_bw_hz,pll_bw_hz,order); // Get space for a vector with the C/A code replica sampled 1x/chip - d_ca_code=new gr_complex[(int)GPS_L1_CA_CODE_LENGTH_CHIPS+2]; + d_ca_code = new gr_complex[(int)GPS_L1_CA_CODE_LENGTH_CHIPS+2]; // Get space for the resampled early / prompt / late local replicas - d_early_code= new gr_complex[d_vector_length*2]; - d_prompt_code=new gr_complex[d_vector_length*2]; - d_late_code=new gr_complex[d_vector_length*2]; + d_early_code = new gr_complex[d_vector_length*2]; + d_prompt_code =new gr_complex[d_vector_length*2]; + d_late_code =new gr_complex[d_vector_length*2]; // space for carrier wipeoff LO vector - d_carr_sign=new gr_complex[d_vector_length*2]; + d_carr_sign = new gr_complex[d_vector_length*2]; // sample synchronization - d_sample_counter=0; - d_sample_counter_seconds=0; - d_acq_sample_stamp=0; - d_last_seg=0;// this is for debug output only + d_sample_counter = 0; + d_sample_counter_seconds = 0; + d_acq_sample_stamp = 0; + d_last_seg = 0;// this is for debug output only - d_enable_tracking=false; + d_enable_tracking = false; - d_current_prn_length_samples=(int)d_vector_length; + d_current_prn_length_samples = (int)d_vector_length; // CN0 estimation and lock detector buffers - d_cn0_estimation_counter=0; - d_Prompt_buffer=new gr_complex[CN0_ESTIMATION_SAMPLES]; - d_carrier_lock_test=1; - d_CN0_SNV_dB_Hz=0; - d_carrier_lock_fail_counter=0; - d_carrier_lock_threshold=5; - + d_cn0_estimation_counter = 0; + d_Prompt_buffer = new gr_complex[CN0_ESTIMATION_SAMPLES]; + d_carrier_lock_test = 1; + d_CN0_SNV_dB_Hz = 0; + d_carrier_lock_fail_counter = 0; + d_carrier_lock_threshold = 5; } -void gps_l1_ca_dll_fll_pll_tracking_cc::start_tracking(){ + + + +void Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc::start_tracking(){ /* * correct the code phase according to the delay between acq and trk @@ -193,7 +207,7 @@ void gps_l1_ca_dll_fll_pll_tracking_cc::start_tracking(){ std::cout<<"PULL-IN Doppler [Hz]= "< *channel_internal_queue) +void Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc::set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_fll_pll_tracking_cc.h b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_fll_pll_tracking_cc.h index 930e90749..dd10f233b 100644 --- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_fll_pll_tracking_cc.h +++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_fll_pll_tracking_cc.h @@ -48,8 +48,8 @@ #include #include "concurrent_queue.h" -class gps_l1_ca_dll_fll_pll_tracking_cc; -typedef boost::shared_ptr +class Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc; +typedef boost::shared_ptr gps_l1_ca_dll_fll_pll_tracking_cc_sptr; gps_l1_ca_dll_fll_pll_tracking_cc_sptr @@ -71,7 +71,7 @@ gps_l1_ca_dll_fll_pll_make_tracking_cc(unsigned int satellite, /*! * \brief This class implements a DLL and a FLL assisted PLL tracking loop block */ -class gps_l1_ca_dll_fll_pll_tracking_cc: public gr_block +class Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc: public gr_block { private: @@ -90,7 +90,7 @@ private: float dll_bw_hz, float early_late_space_chips); - gps_l1_ca_dll_fll_pll_tracking_cc(unsigned int satellite, + Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc(unsigned int satellite, long if_freq, long fs_in, unsigned int vector_length, @@ -149,7 +149,7 @@ private: // FLL + PLL filter float d_FLL_discriminator_hz; // This is a class variable because FLL needs to have memory - tracking_FLL_PLL_filter d_carrier_loop_filter; + Tracking_FLL_PLL_filter d_carrier_loop_filter; float d_acc_carrier_phase_rad; unsigned long int d_sample_counter; @@ -174,7 +174,7 @@ private: public: - ~gps_l1_ca_dll_fll_pll_tracking_cc(); + ~Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc(); void set_satellite(unsigned int satellite); void set_channel(unsigned int channel); diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc index b4e0fb2b7..d3ee87526 100644 --- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc +++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc @@ -64,15 +64,16 @@ using google::LogMessage; gps_l1_ca_dll_pll_tracking_cc_sptr gps_l1_ca_dll_pll_make_tracking_cc(unsigned int satellite, long if_freq, long fs_in, unsigned - int vector_length, gr_msg_queue_sptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) + int vector_length, gr_msg_queue_sptr queue, bool dump, std::string dump_filename, + float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) { - return gps_l1_ca_dll_pll_tracking_cc_sptr(new gps_l1_ca_dll_pll_tracking_cc(satellite, if_freq, + return gps_l1_ca_dll_pll_tracking_cc_sptr(new Gps_L1_Ca_Dll_Pll_Tracking_cc(satellite, if_freq, fs_in, vector_length, queue, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips)); } -void gps_l1_ca_dll_pll_tracking_cc::forecast (int noutput_items, +void Gps_L1_Ca_Dll_Pll_Tracking_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { ninput_items_required[0] = (int)d_vector_length*2; //set the required available samples in each call @@ -80,13 +81,13 @@ void gps_l1_ca_dll_pll_tracking_cc::forecast (int noutput_items, -gps_l1_ca_dll_pll_tracking_cc::gps_l1_ca_dll_pll_tracking_cc(unsigned int satellite, long if_freq, long fs_in, unsigned +Gps_L1_Ca_Dll_Pll_Tracking_cc::Gps_L1_Ca_Dll_Pll_Tracking_cc(unsigned int satellite, long if_freq, long fs_in, unsigned int vector_length, gr_msg_queue_sptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) : - gr_block ("gps_l1_ca_dll_pll_tracking_cc", gr_make_io_signature (1, 1, sizeof(gr_complex)), + gr_block ("Gps_L1_Ca_Dll_Pll_Tracking_cc", gr_make_io_signature (1, 1, sizeof(gr_complex)), gr_make_io_signature(5, 5, sizeof(double))) { - //gr_sync_decimator ("gps_l1_ca_dll_pll_tracking_cc", gr_make_io_signature (1, 1, sizeof(gr_complex)), + //gr_sync_decimator ("Gps_L1_Ca_Dll_Pll_Tracking_cc", gr_make_io_signature (1, 1, sizeof(gr_complex)), // gr_make_io_signature(3, 3, sizeof(float)),vector_length) { // initialize internal vars d_queue = queue; @@ -145,7 +146,7 @@ gps_l1_ca_dll_pll_tracking_cc::gps_l1_ca_dll_pll_tracking_cc(unsigned int satell d_carrier_lock_threshold = 5; } -void gps_l1_ca_dll_pll_tracking_cc::start_tracking() +void Gps_L1_Ca_Dll_Pll_Tracking_cc::start_tracking() { /* * correct the code phase according to the delay between acq and trk @@ -224,7 +225,7 @@ void gps_l1_ca_dll_pll_tracking_cc::start_tracking() -void gps_l1_ca_dll_pll_tracking_cc::update_local_code() +void Gps_L1_Ca_Dll_Pll_Tracking_cc::update_local_code() { float tcode_chips; float rem_code_phase_chips; @@ -258,7 +259,7 @@ void gps_l1_ca_dll_pll_tracking_cc::update_local_code() -void gps_l1_ca_dll_pll_tracking_cc::update_local_carrier() +void Gps_L1_Ca_Dll_Pll_Tracking_cc::update_local_carrier() { float phase_rad, phase_step_rad; @@ -276,7 +277,7 @@ void gps_l1_ca_dll_pll_tracking_cc::update_local_carrier() -gps_l1_ca_dll_pll_tracking_cc::~gps_l1_ca_dll_pll_tracking_cc() +Gps_L1_Ca_Dll_Pll_Tracking_cc::~Gps_L1_Ca_Dll_Pll_Tracking_cc() { d_dump_file.close(); delete[] d_ca_code; @@ -296,7 +297,7 @@ gps_l1_ca_dll_pll_tracking_cc::~gps_l1_ca_dll_pll_tracking_cc() * Notice that this is a class derived from gr_sync_decimator, so each of the ninput_items has vector_length samples */ -int gps_l1_ca_dll_pll_tracking_cc::general_work (int noutput_items, gr_vector_int &ninput_items, +int Gps_L1_Ca_Dll_Pll_Tracking_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { @@ -317,11 +318,12 @@ int gps_l1_ca_dll_pll_tracking_cc::general_work (int noutput_items, gr_vector_in d_Prompt = gr_complex(0,0); d_Late = gr_complex(0,0); - if (d_enable_tracking==true){ + if (d_enable_tracking == true) + { /* * Receiver signal alignment */ - if (d_pull_in==true) + if (d_pull_in == true) { int samples_offset; @@ -332,13 +334,13 @@ int gps_l1_ca_dll_pll_tracking_cc::general_work (int noutput_items, gr_vector_in acq_trk_shif_correction_samples = d_next_prn_length_samples - fmod((float)acq_to_trk_delay_samples, (float)d_next_prn_length_samples); //std::cout<<"acq_trk_shif_correction="< *channel_internal_queue) +void Gps_L1_Ca_Dll_Pll_Tracking_cc::set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.h b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.h index 08f439e8b..49ab3b965 100644 --- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.h +++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.h @@ -48,8 +48,8 @@ #include #include "concurrent_queue.h" -class gps_l1_ca_dll_pll_tracking_cc; -typedef boost::shared_ptr +class Gps_L1_Ca_Dll_Pll_Tracking_cc; +typedef boost::shared_ptr gps_l1_ca_dll_pll_tracking_cc_sptr; gps_l1_ca_dll_pll_tracking_cc_sptr @@ -68,7 +68,7 @@ gps_l1_ca_dll_pll_make_tracking_cc(unsigned int satellite, long if_freq, /*! * \brief This class implements a DLL + PLL tracking loop block */ -class gps_l1_ca_dll_pll_tracking_cc: public gr_block +class Gps_L1_Ca_Dll_Pll_Tracking_cc: public gr_block { private: @@ -84,7 +84,7 @@ private: float dll_bw_hz, float early_late_space_chips); - gps_l1_ca_dll_pll_tracking_cc(unsigned int satellite, long if_freq, + Gps_L1_Ca_Dll_Pll_Tracking_cc(unsigned int satellite, long if_freq, long fs_in, unsigned int vector_length, gr_msg_queue_sptr queue, @@ -128,8 +128,8 @@ private: float d_rem_carr_phase_rad; // PLL and DLL filter library - tracking_2nd_DLL_filter d_code_loop_filter; - tracking_2nd_PLL_filter d_carrier_loop_filter; + Tracking_2nd_DLL_filter d_code_loop_filter; + Tracking_2nd_PLL_filter d_carrier_loop_filter; // acquisition float d_acq_code_phase_samples; @@ -168,7 +168,7 @@ private: public: - ~gps_l1_ca_dll_pll_tracking_cc(); + ~Gps_L1_Ca_Dll_Pll_Tracking_cc(); void set_satellite(unsigned int satellite); void set_channel(unsigned int channel); diff --git a/src/algorithms/tracking/libs/tracking_2nd_DLL_filter.cc b/src/algorithms/tracking/libs/tracking_2nd_DLL_filter.cc index e53edaa6c..d410e01df 100644 --- a/src/algorithms/tracking/libs/tracking_2nd_DLL_filter.cc +++ b/src/algorithms/tracking/libs/tracking_2nd_DLL_filter.cc @@ -38,7 +38,7 @@ #include "tracking_2nd_DLL_filter.h" -void tracking_2nd_DLL_filter::calculate_lopp_coef(float* tau1,float* tau2, float lbw, float zeta, float k) +void Tracking_2nd_DLL_filter::calculate_lopp_coef(float* tau1,float* tau2, float lbw, float zeta, float k) { // Solve natural frequency float Wn; @@ -50,16 +50,16 @@ void tracking_2nd_DLL_filter::calculate_lopp_coef(float* tau1,float* tau2, float -void tracking_2nd_DLL_filter::set_DLL_BW(float dll_bw_hz) +void Tracking_2nd_DLL_filter::set_DLL_BW(float dll_bw_hz) { //Calculate filter coefficient values - d_dllnoisebandwidth =dll_bw_hz; + d_dllnoisebandwidth = dll_bw_hz; calculate_lopp_coef(&d_tau1_code, &d_tau2_code, d_dllnoisebandwidth, d_dlldampingratio, 1.0);// Calculate filter coefficient values } -void tracking_2nd_DLL_filter::initialize(float d_acq_code_phase_samples) +void Tracking_2nd_DLL_filter::initialize(float d_acq_code_phase_samples) { // code tracking loop parameters d_old_code_nco = 0.0; @@ -68,7 +68,7 @@ void tracking_2nd_DLL_filter::initialize(float d_acq_code_phase_samples) -float tracking_2nd_DLL_filter::get_code_nco(float DLL_discriminator) +float Tracking_2nd_DLL_filter::get_code_nco(float DLL_discriminator) { float code_nco; code_nco = d_old_code_nco + (d_tau2_code/d_tau1_code)*(DLL_discriminator - d_old_code_error) + DLL_discriminator * (d_pdi_code/d_tau1_code); @@ -79,12 +79,13 @@ float tracking_2nd_DLL_filter::get_code_nco(float DLL_discriminator) -tracking_2nd_DLL_filter::tracking_2nd_DLL_filter () +Tracking_2nd_DLL_filter::Tracking_2nd_DLL_filter () { d_pdi_code = 0.001;// Summation interval for code d_dlldampingratio = 0.7; } -tracking_2nd_DLL_filter::~tracking_2nd_DLL_filter () + +Tracking_2nd_DLL_filter::~Tracking_2nd_DLL_filter () {} diff --git a/src/algorithms/tracking/libs/tracking_2nd_DLL_filter.h b/src/algorithms/tracking/libs/tracking_2nd_DLL_filter.h index 00f61d5f6..f2b57bed7 100644 --- a/src/algorithms/tracking/libs/tracking_2nd_DLL_filter.h +++ b/src/algorithms/tracking/libs/tracking_2nd_DLL_filter.h @@ -44,7 +44,7 @@ * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S. H. Jensen, A Software-Defined GPS and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007, Applied and Numerical Harmonic Analysis. */ -class tracking_2nd_DLL_filter +class Tracking_2nd_DLL_filter { private: // PLL filter parameters @@ -58,12 +58,13 @@ private: float d_old_code_nco; void calculate_lopp_coef(float* tau1,float* tau2, float lbw, float zeta, float k); + public: void set_DLL_BW(float dll_bw_hz); //! Set DLL loop bandwidth [Hz] void initialize(float d_acq_code_phase_samples); float get_code_nco(float DLL_discriminator); - tracking_2nd_DLL_filter(); - ~tracking_2nd_DLL_filter(); + Tracking_2nd_DLL_filter(); + ~Tracking_2nd_DLL_filter(); }; #endif diff --git a/src/algorithms/tracking/libs/tracking_2nd_PLL_filter.cc b/src/algorithms/tracking/libs/tracking_2nd_PLL_filter.cc index f73b0ae2f..383fb7a27 100644 --- a/src/algorithms/tracking/libs/tracking_2nd_PLL_filter.cc +++ b/src/algorithms/tracking/libs/tracking_2nd_PLL_filter.cc @@ -37,45 +37,57 @@ #include "tracking_2nd_PLL_filter.h" -void tracking_2nd_PLL_filter::calculate_lopp_coef(float* tau1,float* tau2, float lbw, float zeta, float k){ - // Solve natural frequency - float Wn; - Wn = lbw*8*zeta / (4*zeta*zeta + 1); - // solve for t1 & t2 - *tau1 = k / (Wn * Wn); - *tau2 = (2.0 * zeta) / Wn; +void Tracking_2nd_PLL_filter::calculate_lopp_coef(float* tau1,float* tau2, float lbw, float zeta, float k) +{ + // Solve natural frequency + float Wn; + Wn = lbw*8*zeta / (4*zeta*zeta + 1); + // solve for t1 & t2 + *tau1 = k / (Wn * Wn); + *tau2 = (2.0 * zeta) / Wn; } -void tracking_2nd_PLL_filter::set_PLL_BW(float pll_bw_hz) + + +void Tracking_2nd_PLL_filter::set_PLL_BW(float pll_bw_hz) { - //Calculate filter coefficient values - d_pllnoisebandwidth=pll_bw_hz; - calculate_lopp_coef(&d_tau1_carr, &d_tau2_carr, d_pllnoisebandwidth, d_plldampingratio,0.25);// Calculate filter coefficient values + //Calculate filter coefficient values + d_pllnoisebandwidth = pll_bw_hz; + calculate_lopp_coef(&d_tau1_carr, &d_tau2_carr, d_pllnoisebandwidth, d_plldampingratio, 0.25);// Calculate filter coefficient values } -void tracking_2nd_PLL_filter::initialize(float d_acq_carrier_doppler_hz) + + + +void Tracking_2nd_PLL_filter::initialize(float d_acq_carrier_doppler_hz) { // carrier/Costas loop parameters d_old_carr_nco = 0.0; d_old_carr_error = 0.0; } -float tracking_2nd_PLL_filter::get_carrier_nco(float PLL_discriminator) + + + +float Tracking_2nd_PLL_filter::get_carrier_nco(float PLL_discriminator) { - float carr_nco; - carr_nco = d_old_carr_nco+(d_tau2_carr/d_tau1_carr)*(PLL_discriminator - d_old_carr_error) + PLL_discriminator * (d_pdi_carr/d_tau1_carr); - d_old_carr_nco = carr_nco; - d_old_carr_error = PLL_discriminator; - return carr_nco; + float carr_nco; + carr_nco = d_old_carr_nco+(d_tau2_carr/d_tau1_carr)*(PLL_discriminator - d_old_carr_error) + PLL_discriminator * (d_pdi_carr/d_tau1_carr); + d_old_carr_nco = carr_nco; + d_old_carr_error = PLL_discriminator; + return carr_nco; } -tracking_2nd_PLL_filter::tracking_2nd_PLL_filter () + + +Tracking_2nd_PLL_filter::Tracking_2nd_PLL_filter () { - //--- PLL variables -------------------------------------------------------- - d_pdi_carr = 0.001;// Summation interval for carrier - d_plldampingratio=0.65; + //--- PLL variables -------------------------------------------------------- + d_pdi_carr = 0.001;// Summation interval for carrier + d_plldampingratio=0.65; } -tracking_2nd_PLL_filter::~tracking_2nd_PLL_filter () -{ -} + + +Tracking_2nd_PLL_filter::~Tracking_2nd_PLL_filter () +{} diff --git a/src/algorithms/tracking/libs/tracking_2nd_PLL_filter.h b/src/algorithms/tracking/libs/tracking_2nd_PLL_filter.h index 48e5ddc54..a1ee8ac69 100644 --- a/src/algorithms/tracking/libs/tracking_2nd_PLL_filter.h +++ b/src/algorithms/tracking/libs/tracking_2nd_PLL_filter.h @@ -44,7 +44,7 @@ * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S. H. Jensen, A Software-Defined GPS and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007, Applied and Numerical Harmonic Analysis. */ -class tracking_2nd_PLL_filter +class Tracking_2nd_PLL_filter { private: // PLL filter parameters @@ -63,8 +63,8 @@ public: void set_PLL_BW(float pll_bw_hz); //! Set PLL loop bandwidth [Hz] void initialize(float d_acq_carrier_doppler_hz); float get_carrier_nco(float PLL_discriminator); - tracking_2nd_PLL_filter(); - ~tracking_2nd_PLL_filter(); + Tracking_2nd_PLL_filter(); + ~Tracking_2nd_PLL_filter(); }; #endif diff --git a/src/algorithms/tracking/libs/tracking_FLL_PLL_filter.cc b/src/algorithms/tracking/libs/tracking_FLL_PLL_filter.cc index 318ed9565..b25bf70c6 100644 --- a/src/algorithms/tracking/libs/tracking_FLL_PLL_filter.cc +++ b/src/algorithms/tracking/libs/tracking_FLL_PLL_filter.cc @@ -34,7 +34,7 @@ #include "tracking_FLL_PLL_filter.h" #include -void tracking_FLL_PLL_filter::set_params(float fll_bw_hz,float pll_bw_hz, int order) +void Tracking_FLL_PLL_filter::set_params(float fll_bw_hz,float pll_bw_hz, int order) { /* * Filter design (Kaplan 2nd ed., Pag. 181 Fig. 181) @@ -54,31 +54,42 @@ void tracking_FLL_PLL_filter::set_params(float fll_bw_hz,float pll_bw_hz, int or d_pll_w0f = fll_bw_hz/0.53; d_pll_w0f2 = d_pll_w0f*d_pll_w0f; - }else - { - /* - * 2nd order PLL with 1st order FLL assist - */ - d_pll_a2 = 1.414; - d_pll_w0p = pll_bw_hz/0.53; - d_pll_w0p2 = d_pll_w0p*d_pll_w0p; - d_pll_w0f = fll_bw_hz/0.25; - } - -} -void tracking_FLL_PLL_filter::initialize(float d_acq_carrier_doppler_hz) -{ - if (d_order==3) + } + else { - d_pll_x = 2.0*d_acq_carrier_doppler_hz; - d_pll_w = 0; - }else{ - d_pll_w = d_acq_carrier_doppler_hz; - d_pll_x = 0; + /* + * 2nd order PLL with 1st order FLL assist + */ + d_pll_a2 = 1.414; + d_pll_w0p = pll_bw_hz/0.53; + d_pll_w0p2 = d_pll_w0p*d_pll_w0p; + d_pll_w0f = fll_bw_hz/0.25; } } -float tracking_FLL_PLL_filter::get_carrier_error(float FLL_discriminator, float PLL_discriminator, float correlation_time_s) + + + + +void Tracking_FLL_PLL_filter::initialize(float d_acq_carrier_doppler_hz) +{ + if (d_order==3) + { + d_pll_x = 2.0 * d_acq_carrier_doppler_hz; + d_pll_w = 0; + } + else + { + d_pll_w = d_acq_carrier_doppler_hz; + d_pll_x = 0; + } +} + + + + + +float Tracking_FLL_PLL_filter::get_carrier_error(float FLL_discriminator, float PLL_discriminator, float correlation_time_s) { float carrier_error_hz; if (d_order==3) @@ -89,32 +100,32 @@ float tracking_FLL_PLL_filter::get_carrier_error(float FLL_discriminator, float d_pll_w = d_pll_w + correlation_time_s * (d_pll_w0p3 * PLL_discriminator + d_pll_w0f2 * FLL_discriminator); d_pll_x = d_pll_x + correlation_time_s * (0.5*d_pll_w + d_pll_a2 * d_pll_w0f * FLL_discriminator + d_pll_a3 * d_pll_w0p2 * PLL_discriminator); carrier_error_hz = 0.5*d_pll_x + d_pll_b3 * d_pll_w0p * PLL_discriminator; - }else - { - /* - * 2nd order PLL with 1st order FLL assist - */ - float pll_w_new; - pll_w_new = d_pll_w + PLL_discriminator*d_pll_w0p2*correlation_time_s + FLL_discriminator*d_pll_w0f*correlation_time_s ; - carrier_error_hz = 0.5*(pll_w_new + d_pll_w)+d_pll_a2 * d_pll_w0p*PLL_discriminator; - d_pll_w =pll_w_new; - /*std::cout<<" d_pll_w = "<