Classes | Modules | Functions
Tracking
Collaboration diagram for Tracking:

Classes

struct  cn0_est_state_t
struct  correlation_t

Modules

 Tracking Loops

Functions

void calc_navigation_measurement (u8 n_channels, channel_measurement_t meas[], navigation_measurement_t nav_meas[], double nav_time, ephemeris_t ephemerides[])
void calc_navigation_measurement_ (u8 n_channels, channel_measurement_t *meas[], navigation_measurement_t *nav_meas[], double nav_time, ephemeris_t *ephemerides[])
float cn0_est (cn0_est_state_t *s, float I)
void cn0_est_init (cn0_est_state_t *s, float bw, float cn0_0, float cutoff_freq, float loop_freq)
int nav_meas_cmp (const void *a, const void *b)
u8 tdcp_doppler (u8 n_new, navigation_measurement_t *m_new, u8 n_old, navigation_measurement_t *m_old, navigation_measurement_t *m_corrected)

Detailed Description

Functions used in tracking.


Function Documentation

void calc_navigation_measurement ( u8  n_channels,
channel_measurement_t  meas[],
navigation_measurement_t  nav_meas[],
double  nav_time,
ephemeris_t  ephemerides[] 
)

Definition at line 596 of file track.c.

void calc_navigation_measurement_ ( u8  n_channels,
channel_measurement_t meas[],
navigation_measurement_t nav_meas[],
double  nav_time,
ephemeris_t ephemerides[] 
)
Todo:
Handle GPS time properly here, e.g. week rollover

Definition at line 613 of file track.c.

float cn0_est ( cn0_est_state_t s,
float  I 
)

Estimate the Carrier-to-Noise Density, $ C / N_0 $ of a tracked signal.

Implements a modification of the estimator presented in [1]. In [1] the estimator essentially uses a moving average over the reciprocal of the Signal-to-Noise Ratio (SNR). To reduce memory utilisation a simple IIR low-pass filter is used instead.

The noise and signal powers estimates for the $k$-th observation, $\hat P_{N, k}$ and $\hat P_{S, k}$, are calculated as follows:

\[ \hat P_{N, k} = \left( \left| I_k \right| - \left| I_{k-1} \right| \right)^2 \]

\[ \hat P_{S, k} = \frac{1}{2} \left( I_k^2 + I_{k-1}^2 \right) \]

Where $I_k$ is the in-phase output of the prompt correlator for the $k$-th integration period.

The "Noise-to-Signal Ratio" (NSR) is estimated and filtered with a simple low-pass IIR filter:

\[ {NSR}_k = A \frac{\hat P_{N, k}}{\hat P_{S, k}} + (1 - A) {NSR}_{k-1} \]

Where the IIR filter coefficient, $A$ can be calculated in terms of a cutoff frequency $f_c$ and the loop update frequency $f = 1/T$.

\[ A = \frac{f_c}{f_c + f} \]

The filtered NSR value is converted to a $ C / N_0 $ value and returned.

\[ \left( \frac{C}{N_0} \right)_k = 10 \log_{10} \left( \frac{B_{eqn}}{{NSR}_k} \right) \]

References:

  1. "Comparison of Four SNR Estimators for QPSK Modulations", Norman C. Beaulieu, Andrew S. Toms, and David R. Pauluzzi (2000), IEEE Communications Letters, Vol. 4, No. 2
  2. "Are Carrier-to-Noise Algorithms Equivalent in All Situations?" Inside GNSS, Jan / Feb 2010.
Parameters:
sThe estimator state struct to initialise.
IThe prompt in-phase correlation from the tracking correlators.
Returns:
The Carrier-to-Noise Density, $ C / N_0 $, in dBHz.

Definition at line 575 of file track.c.

void cn0_est_init ( cn0_est_state_t s,
float  bw,
float  cn0_0,
float  cutoff_freq,
float  loop_freq 
)

Initialise the $ C / N_0 $ estimator state.

See cn0_est() for a full description.

Parameters:
sThe estimator state struct to initialise.
bwThe loop noise bandwidth in Hz.
cn0_0The initial value of $ C / N_0 $ in dBHz.
cutoff_freqThe low-pass filter cutoff frequency, $f_c$, in Hz.
loop_freqThe loop update frequency, $f$, in Hz.

Definition at line 513 of file track.c.

int nav_meas_cmp ( const void *  a,
const void *  b 
)

Compare navigation message by PRN. This function is designed to be used together with qsort() etc.

Definition at line 662 of file track.c.

u8 tdcp_doppler ( u8  n_new,
navigation_measurement_t m_new,
u8  n_old,
navigation_measurement_t m_old,
navigation_measurement_t m_corrected 
)

Set measurement precise Doppler using time difference of carrier phase.

Note:
The return array `m_tdcp` should have space to contain the number of measurements with common PRNs between `m_new` and `m_old`. Making the array at least `MIN(n_new, n_old)` long will ensure sufficient space.
Parameters:
n_newNumber of measurements in `m_new` m_new Array of new navigation measurements
n_oldNumber of measurements in `m_old` m_new Array of old navigation measurements, sorted by PRN
m_tdcpArray in which to store the output measurements
Returns:
The number of measurements written to `m_tdcp`

Definition at line 680 of file track.c.



swiftnav
Author(s):
autogenerated on Sat Jun 8 2019 18:57:01