Day 4: Data Filtering — Cleaning Signals with a Smile

Lecturer: Dr. Andrew, Senior Researcher, Navigation Systems Laboratory

Date: March 2003


Introduction to Filtering: Data Loves Order Too

Imagine you are in a kitchen preparing a navigation soup — yes, a soup that will help your satellite avoid getting lost in space! On Day 3 the students arrived on time, and Andrew gave a short lecture where we gathered the ingredients: we took raw data, cleaned it up, added pseudoranges, and even lightly seasoned them with Sagnac corrections. Inspired by that success, Andrew continued on Day 4, showing how to make the data even better. Today we will dive into filtering: remove all the noise so the data becomes smooth as silk, and calculate just how "noisy" they are. Time to grab our cosmic ladles — let's begin!

A metaphorical illustration of navigation data filtering as preparing a smooth soup from raw ingredients
Navigation Soup: Filtering makes it smooth and delicious!

Data Filtering: The Mathematical Mop

1. What Are We Filtering and Why? Saving the Pseudoranges

We take our beloved pseudoranges (\(S_{C/A}\), \(S_{L1}\), \(S_{L2}\)) and their rates (\(\dot{S}_{C/A}\), \(\dot{S}_{L1}\), \(\dot{S}_{L2}\)), as well as phase pseudoranges (\(\varphi_{L1}\), \(\varphi_{L2}\)) and their derivatives. These are "cosmic measures" that help us understand where the satellite is and how fast it is moving. Details of exactly what we filter are in Section 6.1. But data behaves like a temperamental child: it jumps around or falls into first-order discontinuities. For example, \(S_{C/A}\) can suddenly "drop off a cliff," and we have to catch it.

For that we have a special detector — "Oh no, something went wrong":

\[ \lfloor \frac{\Delta S}{\delta t \cdot c} + 0.5 \rfloor = 0 \]

where:

  • \(\Delta S\) is the difference between the current value and the expected one
  • \(\delta t\) is the time interval
  • \(c\) is the speed of light
  • The floor function \(\lfloor \cdot \rfloor\) returns the integer part

If a break is detected, we patch it so the signals don't jerk around like a caffeinated cat at a disco. And if the data is unreliable (flag = 1), we zero it out — no garbage in our soup!

2. Smoothing: Making Data Silky Smooth

Now we bring out our magical mathematical mop — a filter that smooths the data. We take each pair (e.g., \(S_{C/A}\) and \(\dot{S}_{C/A}\)) and start combing through them. Matrix \(R\) tells us how noisy the data are — its values are set by the operator, like a chef adding salt:

\[ R = \begin{pmatrix} D_{\eta}^{2} & 0 \\ 0 & D_{\dot{\eta}}^{2} \end{pmatrix} \]

Then we use a polynomial with coefficients \(a_0, a_1, \ldots\) to make the data behave nicely. Result: \(\eta = a_0\), \(\dot{\eta} = a_1\). We refine the recipe as new data come in!

3. Refining the Coefficients: "All Under Control!"

At the start we set \(a_0\) to the current pseudorange, \(a_1\) to the rate, and the rest (\(a_2, \ldots\)) to zero — "let's not complicate things yet." We then check reliability:

\[ \varepsilon_0^{2} + \varepsilon_1^{2} < \varepsilon_{\max}^{2} \]

where \(\varepsilon\) is the difference between measurement and prediction. If the difference is large, we mark it (flag = 1) and skip it. If all looks good, we update the coefficients with the matrices — our filter won't let the satellite lie!

4. Measuring the Noise: Statistics on Guard

The cherry on top — calculating how noisy the data are. Root Mean Square Deviation (RMSD):

\[ \sigma_{\eta} = \sqrt{P_{0,0}}, \qquad \sigma_{\dot{\eta}} = \sqrt{P_{1,1}} \]

The smaller the RMSD, the calmer our soup — and the more accurate the satellite's path!

Epilogue: "Cleanliness Is the Foundation of Navigation!"

With filtering we have turned noisy data into a smooth navigation broth. Discontinuities are patched, irregularities smoothed, and noise measured — see details in Section 6.4. The satellite flies confidently, and Andrew and I truly deserve a cup of tea — or soup? 😄


Technical Details of Filtering

6.1. Filtering Measured Parameters

Filtering of measured parameters is performed separately for each GNSS receiver and each spacecraft. Smoothed estimates are formed at the reference time of the last frame \(t\).

Filtering is applied to the following parameter groups:

\[ S_{C/A} \text{ and } \dot{S}_{C/A}; \quad S_{L1} \text{ and } \dot{S}_{L1}; \quad S_{L2} \text{ and } \dot{S}_{L2}; \quad \varphi_{L1} \text{ and } \dot{\varphi}_{L1}; \quad \varphi_{L2} \text{ and } \dot{\varphi}_{L2} \]

For brevity, indices specifying receiver number, satellite number and type are omitted. The following notation is used:

\[ \begin{pmatrix} \eta \\ \dot{\eta} \end{pmatrix} = \begin{pmatrix} S_{C/A} \\ \dot{S}_{C/A} \end{pmatrix}, \quad \begin{pmatrix} S_{L1} \\ \dot{S}_{L1} \end{pmatrix}, \quad \begin{pmatrix} S_{L2} \\ \dot{S}_{L2} \end{pmatrix}, \quad \begin{pmatrix} \varphi_{L1} \\ \dot{\varphi}_{L1} \end{pmatrix} \quad \text{or} \quad \begin{pmatrix} \varphi_{L2} \\ \dot{\varphi}_{L2} \end{pmatrix} \]

For measurements flagged as unreliable (flag = 1), the corresponding pseudorange and rate values are set to zero.

During smoothing, first-order discontinuities of \(S_{C/A}\) are eliminated.

Detection of discontinuities uses:

\[ \lfloor \frac{\Delta S}{\delta t \cdot c} + 0.5 \rfloor = 0 \]

where

\[ \Delta S = S_{C/A} - \left( \tilde{S}_{C/A} + 0.5 \cdot \bigl( \tilde{\dot{S}}_{L1} + \dot{S}_{L1} \bigr) \cdot (t - \tilde{\tau}) \right) \]

The tilde (~) refers to the last preceding point with reliable \(S_{C/A}\) and \(\dot{S}_{L1}\) values.

6.2. Smoothing Parameters

\[ R = \begin{pmatrix} D_{\eta}^{2} & 0 \\ 0 & D_{\dot{\eta}}^{2} \end{pmatrix} \]

— a priori noise covariance matrix (values \(D_{\eta}\) and \(D_{\dot{\eta}}\) are set by the operator).

Smoothed values \((\eta_{i,j,k,1}\) and \(\dot{\eta}_{i,j,k,1})\) obtained by receiver \(i\) for spacecraft \(j\) at the current time are:

\[ \eta_{i,j,k,2} = a_0, \qquad \dot{\eta}_{i,j,k,2} = a_1 \]

The inverse of a \(2 \times 2\) matrix is calculated as:

\[ R^{-1} = \frac{1}{r_{11} \cdot r_{22} - r_{12} \cdot r_{21}} \begin{pmatrix} r_{22} & -r_{12} \\ -r_{21} & r_{11} \end{pmatrix} \]

6.3. Initial Estimates and Coefficient Refinement

The covariance and coefficient-refinement equations below follow the classical Kalman filtering tradition introduced by Rudolf E. Kálmán in 1960 — a public mathematical method later used in aerospace navigation and widely documented in GPS/GNSS receiver algorithms.

Initial coefficients are set to the measured values at the initial time:

\[ a_0 = \eta_{i,j,k,1}; \qquad a_1 = \dot{\eta}_{i,j,k,1}; \qquad a_2 = \dots = a_M = 0 \]

Coefficients are refined as reliable data arrive, according to:

a) Reliability check:

\[ \varepsilon_0^2 + \varepsilon_1^2 < \varepsilon_{\max}^2 \]

where

\[ \varepsilon = \begin{pmatrix} \eta_n \\ \dot{\eta}_n \end{pmatrix} - H \cdot \Phi (t_n - \tilde{\tau}) \cdot A \]

If the condition fails, the point is discarded (flags \(\text{Pr}_{\eta_{i,j,k}}\), \(\text{Pr}_{\dot{\eta}_{i,j,k}}\) = 1). Steps b) and c) are skipped.

b) Covariance update:

\[ P = \Phi (t_n - \tilde{\tau}) \cdot P \cdot \Phi (t_n - \tilde{\tau}) \] \[ P = P - P \cdot H^T \cdot (H \cdot P \cdot H^T + R)^{-1} \cdot H \cdot P \]

c) Coefficient vector refinement:

\[ A = \Phi (t_n - \tilde{\tau}) \cdot A + P \cdot H^T \cdot R^{-1} \cdot \left( \begin{pmatrix} \eta_n \\ \dot{\eta}_n \end{pmatrix} - H \cdot \Phi (t_n - \tilde{\tau}) \cdot A \right) \]

6.4. Calculation of RMS Fluctuation Errors

RMS fluctuation errors of measurement parameters are computed as:

\[ \sigma_{\eta_{i,j,k,2}} = \sqrt{P_{0,0}}, \qquad \sigma_{\dot{\eta}_{i,j,k,2}} = \sqrt{P_{1,1}} \]

These values provide a quantitative measure of the filtering quality and remaining noise in the smoothed parameters.