mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-10-18 09:07:42 +00:00
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
This commit is contained in:
@@ -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 ()
|
||||
{}
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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 ()
|
||||
{}
|
||||
|
@@ -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
|
||||
|
@@ -34,7 +34,7 @@
|
||||
#include "tracking_FLL_PLL_filter.h"
|
||||
#include <iostream>
|
||||
|
||||
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 = "<<carrier_error_hz<<
|
||||
}
|
||||
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 = "<<carrier_error_hz<<
|
||||
", pll_w_new = "<<pll_w_new
|
||||
<<", PLL_discriminator=" <<PLL_discriminator
|
||||
<<" FLL_discriminator ="<<FLL_discriminator
|
||||
<<" correlation_time_s = "<<correlation_time_s<<"\r\n";*/
|
||||
}
|
||||
}
|
||||
|
||||
return carrier_error_hz;
|
||||
|
||||
}
|
||||
|
||||
tracking_FLL_PLL_filter::tracking_FLL_PLL_filter ()
|
||||
{
|
||||
}
|
||||
|
||||
tracking_FLL_PLL_filter::~tracking_FLL_PLL_filter ()
|
||||
{
|
||||
|
||||
}
|
||||
Tracking_FLL_PLL_filter::Tracking_FLL_PLL_filter ()
|
||||
{}
|
||||
|
||||
Tracking_FLL_PLL_filter::~Tracking_FLL_PLL_filter ()
|
||||
{}
|
||||
|
||||
|
@@ -34,7 +34,7 @@
|
||||
/*!
|
||||
* \brief This class implements a hybrid FLL and PLL filter for tracking carrier loop
|
||||
*/
|
||||
class tracking_FLL_PLL_filter
|
||||
class Tracking_FLL_PLL_filter
|
||||
{
|
||||
private:
|
||||
// FLL + PLL filter parameters
|
||||
@@ -53,8 +53,8 @@ public:
|
||||
void set_params(float fll_bw_hz,float pll_bw_hz, int order);
|
||||
void initialize(float d_acq_carrier_doppler_hz);
|
||||
float get_carrier_error(float FLL_discriminator, float PLL_discriminator, float correlation_time_s);
|
||||
tracking_FLL_PLL_filter();
|
||||
~tracking_FLL_PLL_filter();
|
||||
Tracking_FLL_PLL_filter();
|
||||
~Tracking_FLL_PLL_filter();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user