Introduction

GPS satellites are orbiting roughly 20,000 km above the surface of the earth. As such, signals undergo a tremendous amount of free space loss before reaching users. At the same time, signals have to go through the ionosphere and troposphere. While all these difficulties were taken into account during the design of the system and as such the −158.5 dBW power of the legacy, L1 C/A signal is acquired easily and tracked by receivers under open sky conditions, urban canyons and indoor environments add challenges limiting the scope of the system.

Attenuation of 25 dB or more can easily be encountered under those adverse conditions (Lachapelle 2004). Common solutions aiming to overcome these difficulties include a significant increase in the coherent integration time (Watson et al. 2006; Ziedan and Garrison 2004) leading to the well-known data bit transitions problem. Indeed, as the L1 C/A signal carries the navigation message at 50 Hz, one cannot use coherent integration time longer than 20 ms without using Assisted-GPS (use of external information to perform data wipe-off) or performing a data bit estimation technique. However, both techniques remain limited by either the availability of external information or the user motion and local oscillator stability.

This paper is based on Gernot et al. (2008), which was presented at the Institute of Navigation GNSS 2008 meeting. The method employs a Kalman filter tracking loop to combine the energy of both L1 C/A and L2C signals enhance performance under adverse conditions. This paper is organized as follows:

  • the ionospheric effect on GNSS signals is briefly presented from a signal tracking point of view.

  • standard tracking methods are demonstrated using real data to highlight their limitations and to demonstrate the ionospheric effects.

  • a combined Kalman filter making used of both L1 C/A and L2 CM and CL codes is developed. This filter overcomes the ionospheric problem by estimating the total electron content (TEC) encountered on the signal path.

Ionosphere and tracking

It is well known that GPS signals are affected by the ionosphere by a code delay τ c and a phase advance that are both proportional to the TEC and inversely proportional to the carrier frequency f squared.

$$ \tau_{c} = {\frac{40.3}{{cf^{2} }}}10^{16} {\text{TEC}} $$
(1)

where c is the speed of light and TEC is in units of 1016 electrons/m2. When expressed in cycles, the phase advance is

$$ \varphi_{p} = {\frac{40.3}{cf}}10^{16} {\text{TEC}} $$
(2)

Differentiating Eq. 2 with respect to time gives the ionospheric frequency shift

$$ f_{D}^{i} = {\frac{{{\text{d}}\phi_{p} }}{{{\text{d}}t}}} = {\frac{40.3}{cf}}10^{16} {\frac{\text{dTEC}}{{{\text{d}}t}}} $$
(3)

Under normal ionospheric conditions (no scintillations), the frequency shift induced by the ionosphere is mainly due to the change in signal path due to satellite motion.

The Doppler effect on the L1 signal due to the relative motion, f D1, can directly be related to the Doppler effect due to the relative motion on L2, f D2, as

$$ f_{D1}^{\text{motion}}\, =\, {\frac{{f_{1} }}{{f_{2} }}}f_{{_{D2} }}^{\text{motion}} $$
(4)

This is only true if the definition of the Doppler effect only includes the relative motion between user and satellite. If one were to define the Doppler effect as the frequency shift from the transmitted frequency, this relation does not hold anymore. Indeed, the relationship between the ionosphere-induced frequency shift is inverse to the above one,

$$ f_{{_{D1} }}^{\text{iono}}\, =\, {\frac{{f_{2} }}{{f_{1} }}}f_{{_{D2} }}^{iono} $$
(5)

In order to illustrate these two effects, complex I and Q samples were collected under open sky conditions. Then, the L1 C/A signal was used to track both L1 and L2 GPS signals, the principle being simply to track L1 and feeding the output parameters to the DLL and PLL tracking loops of L2. Figure 1 represents the equivalent PLL tracking loop used. A similar scheme could be drawn in terms of DLL tracking.

Fig. 1
figure 1

L1 PLL feeding L2 tracking

Figures 2 and 3 show the results obtained using real data in terms of L1 and L2 code discriminator outputs and the L1 and L2 real parts of the prompt correlators, respectively.

Fig. 2
figure 2

L1 and L2 code discriminator outputs

Fig. 3
figure 3

Output of the real part of the L1 and L2 prompt correlators

The code delay caused by the ionosphere can be easily seen in Fig. 2 as the DLL discriminator output of the L2 signal shows an offset of about 0.02 chips. As such, in a common DLL scheme, this offset informs the DLL tracking loop that the local code used to track the signal is late compared to the incoming code and should be advanced by 0.02 chips.

The phase advance phenomenon expected should be observable in Fig. 3 at a lower amplitude for the real part of the prompt correlator on L2 compared to that of L1. Indeed, the phase of the local carrier for L1 should be synchronized to the phase of the incoming carrier. However, due to the ionosphere-induced phase difference between the L1 and L2 incoming signals, the phase of the local L2 carrier, which is identical to the phase of L1, should have an offset with its incoming signal. As such, the visible effect would be that the L2 incoming signal power should be shared between the real and complex part of the L2 prompt correlator. However, the observed phenomenon is a residual carrier frequency error on the L2 signal. This last point is due to the fact that a simple phase shift would be observed only if the TEC encountered on the signal path would not change over time. This does not hold as the satellite motion results in a change of signal path through the ionosphere. Therefore, if one were to assume the ionosphere to be a layer between the satellite and the user, the TEC encountered by the signal would directly depend on the satellite elevation and changes as the satellite is moving through the sky. This change induces a change in the phase advance observed and as such, a frequency shift as shown in Eq. 3.

Development of a Kalman filer–based combined L1/L2 tracking

A Kalman filter was developed to combine the L1 and L2 code discriminator outputs and phase discriminator outputs in order to estimate the parameters needed to track both L1 and L2 signals. This is shown in Fig. 4.

Fig. 4
figure 4

Principle of proposed Kalman filter-based tracking method

Derivation of the observation models

In order to implement a Kalman filter to relate the observation to the estimated states, observation models are required. Observation models will now be developed for each of the discriminator outputs.

Phase discriminator outputs

Before describing the parameters estimated, it is important to note that the relationship between phase and TEC is

$$ \varphi = \phi + {\frac{40.3}{cf}}10^{16} {\text{TEC}} $$
(6)

with φ being the total signal phase in cycles and ϕ representing the phase in cycles that would be measured if no ionospheric effect were present (i.e., the phase variation in range between the satellite and user). As such, the total phase variation between two measurement epochs is

$$ \delta \varphi = \delta \phi + {\frac{40.3}{{cf_{1} }}}10^{16} \delta {\text{TEC}} $$
(7)

Assuming that one has achieved phase lock on the signal, the quantity represented in Eq. 7 can then be directly related to the average phase error between two coherent integrations, i.e., the output of the phase discriminator \( \delta \hat{\varphi } \). Therefore, if one were to use the atan discriminator due to its convenient auto-normalization properties, this last point can be summarized as

$$ \delta \varphi = E(\delta \hat{\varphi }) = {{E\left( {atan\left( {{\frac{{Q_{P} }}{{I_{P} }}}} \right)} \right)} \mathord{\left/ {\vphantom {{E\left( {atan\left( {{\frac{{Q_{P} }}{{I_{P} }}}} \right)} \right)} {2\pi }}} \right. \kern-\nulldelimiterspace} {2\pi }} $$
(8)

The atan discriminator has its output limited to the interval [−π/2, π/2]. As such, \( \delta \hat{\varphi } \) being expressed in cycles is limited to [−1/4, 1/4]. However, the purpose of the discussion at hand is to keep the coherent integration time lower than 20 ms in order to avoid the need for data bit estimation or assistance data. As such, even if an error of 10 Hz in the Doppler frequency was made and a 50 TECU vertical TEC was observed, the error created due to the Doppler frequency would be 1.25 rad and the change in phase due to the maximum TEC variations due to elevation change over the tracking period would be about 1.5 × 10−3 rad for L1 and 2 × 10−3 rad for L1. Therefore, the total phase error would still be within the interval [−π/2, π/2].

Finally, by noticing that the average phase variation due to motion is directly related to the Doppler, one can write:

$$ \delta \phi_{1}\, =\, {\frac{{f_{1} }}{{f_{2} }}}\delta \phi_{2} $$
(9)

Therefore, by rewriting Eqs. 79 for the L1 and L2 signals, the following relationship can be obtained and used as a measurement model to estimate the phase change on L2 due to motion and the variation in TEC encountered on the signal path,

$$ \left[ {\begin{array}{*{20}c} {\delta \hat{\varphi }_{1} } \\ {\delta \hat{\varphi }_{2}^{\text{CM}} } \\ {\delta \hat{\varphi }_{2}^{\text{CL}} } \\ \end{array} } \right] = \left[ {\begin{array}{*{20}c} {{\frac{{f_{1} }}{{f_{2} }}}} & 1 \\ 1 & {{\frac{{f_{1} }}{{f_{2} }}}} \\ 1 & {{\frac{{f_{1} }}{{f_{2} }}}} \\ \end{array} } \right]\left[ {\begin{array}{*{20}c} {\delta \phi_{2} } \\ {\delta iono_{{\rm L}1}^{P} } \\ \end{array} } \right] \to Z = HX $$
(10)

with \( \delta iono_{{\rm L}1}^{P} = {\frac{40.3}{{cf_{1} }}}10^{16} \delta {\text{TEC}} \) and \( \delta \varphi_{2} \) expressed in cycles. The superscript P is used to indicate that the estimated ionospheric effect comes from the phase discriminators outputs and as such is limited to [−1/4, 1/4].

As L1 and L2 are transmitted on different frequency bands, the noise corrupting the discriminator output on each frequency is independent. Similarly, as the L2 CM and CL codes are orthogonal, the noise corrupting the phase discriminator outputs for the CM and CL codes is uncorrelated.

However, computing the variance of the atan discriminator proves to be challenging. Another approach proposed is to compute the variance of the simpler I.Q discriminator and compare it to the variance of the atan discriminator obtained through a Monte-Carlo simulation. The expected value and variance of the I.Q discriminator can be expressed as

$$ E(\delta \hat{\varphi }) = E\left( {{\frac{{I_{P} Q_{P} }}{2\pi }}} \right) = E\left( {{{atan\left( {{\frac{{Q_{P} }}{{I_{P} }}}} \right)} \mathord{\left/ {\vphantom {{atan\left( {{\frac{{Q_{P} }}{{I_{P} }}}} \right)} {2\pi }}} \right. \kern-\nulldelimiterspace} {2\pi }}} \right) = \delta \varphi $$
(11)
$$ var(\delta \hat{\varphi }) = \sigma_{{\delta \hat{\varphi }}}^{2} = {\frac{1}{{4\pi^{2} }}}\left( {\sigma_{N}^{2} + \sigma_{N}^{4} } \right) $$
(12)

with \( \sigma_{N}^{2} = {\frac{1}{{2{\frac{C}{{N_{0} }}}T}}} \) and T being the coherent integration time.

Moreover, Gernot et al. (2008) showed that the I.Q and atan discriminators can be considered equivalent and approximated as Gaussian for C/N0 values greater than 20 dB-Hz.

Code discriminator outputs

In order to track the signal, one must not only estimate the phase error through the phase discriminator output but also the code error through the code discriminator output. The L1 and L2 code discriminator outputs can be related between themselves and with the ionospheric effect. Similarly to the phase discriminator, the code discriminator can be related to the phase error due to motion and the TEC variation. The relationship between the code delay, the range and the ionospheric variations for L1 and L2 is

$$ \delta \tau_{{\rm L}1} = \delta d - {\frac{{f_{c} }}{{f_{1} }}}\delta iono_{{\rm L}1}^{P} - {\frac{{f_{c} }}{{f_{1} }}}\delta iono_{{\rm L}1}^{C} $$
(13)
$$ \delta \tau_{{\rm L}2} = \delta d - {\frac{{f_{c} f_{1} }}{{f_{2}^{2} }}}\delta iono_{{\rm L}1}^{P} - {\frac{{f_{c} f_{1} }}{{f_{2}^{2} }}}\delta iono_{{\rm L}1}^{C} $$
(14)

where δτ is the total change in code delay between two measurement epochs in chips, δd (chip) the change in code delay due to motion only minus the change in phase due to motion (as such, it should converge toward zero), f c the code frequency and \( \delta iono_{{\rm L}1}^{P} + \delta iono_{{\rm L}1}^{C} \) the ionospheric effect as it is visible on the code. The total effect expressed in cycles is

$$ \delta iono_{{\rm L}1}^{P} + \delta iono_{{\rm L}1}^{C} = {\frac{40.3}{{cf_{1} }}}10^{16} \delta {\text{TEC}} $$
(15)

Unlike the case of the phase, the code delay induced by the ionosphere is not limited (it actually is limited by the correlator spacing but this parameter is large enough to contain the whole effect). The ionospheric effect does not change enough from one epoch to another to leave the interval [−1/4, 1/4] cycles. However, \( \delta iono_{{\rm L}1}^{C} \) must be included in order to correct for the initial relative code delay and phase advance between L1 and L2 induced by the ionosphere.

Similarly to the phase variation, the code variation can be related to the code discriminator as long as code lock was approximately achieved (i.e., after the acquisition process). Therefore, using the popular normalized early minus late envelope, we can write

$$ \delta \hat{\tau } = \left( {1 - \Updelta_{\text{EL}} /2} \right){\frac{{\sqrt {I_{{\rm E}}^{2} + Q_{{\rm E}}^{2} } - \sqrt {I_{{\rm L}}^{2} + Q_{{\rm L}}^{2} } }}{{\sqrt {I_{{\rm E}}^{2} + Q_{{\rm E}}^{2} } + \sqrt {I_{{\rm L}}^{2} + Q_{{\rm L}}^{2} } }}}\quad ({\text{chip}}) $$
(16)

where ΔEL is the distance between the early and late discriminator in chips, also referred as early-late spacing. Hence, \( E(\delta \hat{\tau }) = \delta \tau \). Therefore, using Eqs. 10, 13, 14 and 16, a model making use of both phase and code discriminators can be derived, namely

$$ \left[ {\begin{array}{*{20}c} {\delta \hat{\varphi }_{1} } \\ {\delta \hat{\varphi }_{2}^{\text{CM}} } \\ {\delta \hat{\varphi }_{2}^{\text{CL}} } \\ {\delta \hat{\tau }_{1} } \\ {\delta \hat{\tau }_{2}^{\text{CM}} } \\ {\delta \hat{\tau }_{2}^{\text{CL}} } \\ \end{array} } \right] = \left[ {\begin{array}{*{20}c} {{\frac{{f_{1} }}{{f_{2} }}}} & 0 & 1 & 0 \\ 1 & 0 & {{\frac{{f_{1} }}{{f_{2} }}}} & 0 \\ 1 & 0 & {{\frac{{f_{1} }}{{f_{2} }}}} & 0 \\ 0 & 1 & { - {\frac{{f_{c} }}{{f_{1} }}}} & { - {\frac{{f_{c} }}{{f_{1} }}}} \\ 0 & 1 & { - {\frac{{f_{c} f_{1} }}{{f_{2}^{2} }}}} & { - {\frac{{f_{c} f_{1} }}{{f_{2}^{2} }}}} \\ 0 & 1 & { - {\frac{{f_{c} f_{1} }}{{f_{2}^{2} }}}} & { - {\frac{{f_{c} f_{1} }}{{f_{2}^{2} }}}} \\ \end{array} } \right]\left[ {\begin{array}{*{20}c} {\delta \phi_{2} } \\ {\delta d} \\ {\delta iono_{{\rm L}1}^{P} } \\ {\delta iono_{{\rm L}1}^{C} } \\ \end{array} } \right] $$
(17)

As the code frequency is identical to L1 and L2, the code delays differ only by the ionospheric effect (no scale factor is required).

As the measurement vector now includes the code discriminator outputs, the covariance matrix C Z of the measurements becomes more complicated as one now needs to compute the variance of the code discriminator as well as the covariance between the code and phase discriminator in addition to the phase discriminator variance. Any covariance between the L1 and L2 discriminator remains zero as the noise on L1 is independent of the noise on L2. Similarly, as the CM and CL codes are orthogonal, any covariance between them is null:

$$ C_{Z} = \left[ {\begin{array}{*{20}c} {\sigma_{{\delta \hat{\varphi }_{1} }}^{2} } & 0 & 0 & {\sigma_{{\delta \hat{\varphi }_{1} ,\delta \hat{\tau }_{1} }} } & 0 & 0 \\ 0 & {\sigma_{{\delta \hat{\varphi }_{2}^{\text{CM}} }}^{2} } & 0 & 0 & {\sigma_{{\delta \hat{\varphi }_{2}^{\text{CM}} ,\,\delta \hat{\tau }_{2}^{\text{CM}} }} } & 0 \\ 0 & 0 & {\sigma_{{\delta \hat{\varphi }_{2}^{\text{CL}} }}^{2} } & 0 & 0 & {\sigma_{{\delta \hat{\varphi }_{2}^{\text{CL}} ,\,\delta \hat{\tau }_{2}^{\text{CL}} }} } \\ {\sigma_{{\delta \hat{\varphi }_{1} ,\delta \hat{\tau }_{1} }} } & 0 & 0 & {\sigma_{{\delta \hat{\tau }_{1} }}^{2} } & 0 & 0 \\ 0 & {\sigma_{{\delta \hat{\varphi }_{2}^{\text{CM}} ,\,\delta \hat{\tau }_{2}^{\text{CM}} }} } & 0 & 0 & {\sigma_{{\delta \hat{\tau }_{2}^{\text{CM}} }}^{2} } & 0 \\ 0 & 0 & {\sigma_{{\delta \hat{\varphi }_{2}^{\text{CL}} ,\delta \hat{\tau }_{2}^{\text{CL}} }} } & 0 & 0 & {\sigma_{{\delta \hat{\tau }_{2}^{\text{CL}} }}^{2} } \\ \end{array} } \right] $$
(18)

A similar approach to the phase case is used to compute the code discriminator variance. Gernot et al. (2008) showed that the normalized early minus late discriminator has the same properties as the early minus late power discriminator, which can be approximated as Gaussian for C/N0 greater than 20 dB-Hz. The equation of the early minus late power discriminator is

$$ {\frac{1}{{2\left( {2 - \Updelta_{\text{EL}} } \right)}}}\left[ {I_{\rm E}^{2} + Q_{\rm E}^{2} - \left( {I_{\rm L}^{2} + Q_{\rm L}^{2} } \right)} \right] , $$
(19)

and its expected value and variance are

$$ \begin{aligned} & E\left[ {{\frac{1}{{2\left( {2 - \Updelta_{\text{EL}} } \right)}}}\left[ {I_{\rm }^{2} + Q_{\rm E}^{2} - \left( {I_{\rm L}^{2} + Q_{\rm L}^{2} } \right)} \right]} \right] \\ & \quad = E\left[ {\left( {1 - \Updelta_{\text{EL}} } \right){\frac{{\sqrt {I_{\rm E}^{2} + Q_{\rm E}^{2} } - \sqrt {I_{\rm L}^{2} + Q_{\rm L}^{2} } }}{{\sqrt {I_{\rm E}^{2} + Q_{\rm E}^{2} } + \sqrt {I_{\rm L}^{2} + Q_{\rm L}^{2} } }}}} \right] = E(\delta \hat{\tau }) = \delta \tau \\ \end{aligned} $$
(20)

and

$$ \begin{aligned} var(\delta \hat{\tau })& = \sigma_{{\delta \hat{\tau }}}^{2} \\ & = \sigma_{w}^{2} \left[ {1/2 + {\frac{{2\delta \tau^{2} }}{{(2 - \Updelta_{\text{EL}} )^{2} }}} - (1 - \Updelta_{\text{EL}} )\left( {1/2 - {\frac{{2\delta \tau^{2} }}{{(2 - \Updelta_{\text{EL}} )^{2} }}}} \right)} \right] & & + 2\sigma_{w}^{4} {\frac{{\Updelta_{\text{EL}} }}{{2 - \Updelta_{\text{EL}} }}} \\ \end{aligned} $$
(21)

\( \sigma_{w}^{2} \) being the noise variance at the correlators output.

By assuming that lock was achieved and ΔEL = 0.1 such that δτ is small, the following simplified expression can be obtained assuming δτ ≈ 0:

$$ var(\delta \hat{\tau }) = \sigma_{{\delta \hat{\tau }}}^{2} = \sigma_{w}^{2} \Updelta_{\text{EL}} + 2\sigma_{w}^{4} {\frac{{\Updelta_{\text{EL}} }}{{2 - \Updelta_{\text{EL}} }}} $$
(22)

Regarding the covariance of the phase atan discriminator and the normalized early minus late envelope discriminator, Gernot et al. (2008) showed that the covariance of the atan and normalized early minus late envelope discriminators is negligible for C/N0 values greater than 20 dB-Hz. Therefore, the six measurement types can be assumed to be uncorrelated.

Derivation of the dynamic model

As the goal is to be able to track L1 and L2 signals over time, estimating the phase error at the end of coherent integrations is not sufficient. The following three parameters are required to implement a robust Kalman filter-based tracking module:

  • Δφ0 error in the local carrier phase at the beginning of the integration interval including the ionospheric effect

  • δf 0 error in the local carrier frequency at the beginning of the integration interval

  • δa 0 phase acceleration error (frequency rate error) at the beginning of the integration interval

Note that \( \delta \varphi = \delta \varphi_{0} + \frac{T}{2} \cdot \delta f_{0} + {\frac{{T^{2} }}{6}}\delta a_{0} \) and represents the average phase error over an interval of T seconds.

The total number of elements composing the state vector derived from the observation model must then be increased from four to six in order to include the frequency error and phase acceleration error:

$$ X = \left[ {\begin{array}{*{20}c} {\delta \phi_{0,2} } \\ {\delta f_{0,2} } \\ {\delta a_{0,2} } \\ {\delta d} \\ {\delta iono_{{\rm L}1}^{P} } \\ {\delta iono_{{\rm L}1}^{C} } \\ \end{array} } \right] $$
(23)

where the subscript 2 refers to the L2 signal. Recall that δϕ0 does not include the ionospheric effect.

In order to take into account the extension of the state vector, the observation model must be modified by inserting two columns of zeros into the design matrix corresponding to the two additional states that are not directly observed.

The purpose of deriving a dynamic model is to find the relationship relating the time derivative of the state vector to the state vector itself as

$$ \dot{X} = {\text{FX}} + {\text{GW}} $$
(24)

As the frequency is the time derivative of the phase and the phase acceleration is the time derivative of the frequency, the following relationships can be written where the term w refers to the process noise of the model (Details on the process noise model are given later in this section):

$$ \delta \dot{\phi }_{0} = \delta f_{0} + w_{\text{clock}} $$
(25)
$$ \delta \dot{f}_{0} = \delta a_{0} + w_{\text{freq}} $$
(26)
$$ \delta \dot{a}_{0} = 0 + w_{\text{acc}} $$
(27)

The code Doppler error \( \delta \dot{d} \) can be related to the frequency error \( \delta \dot{f} \) by converting the frequency error from radians to chips through the factor β,

$$ \delta \dot{d} = \beta \cdot \delta f_{0} + w_{d} $$
(28)

Therefore, one can express w d as

$$ w_{d} = w_{\text{code}} + \beta w_{\text{clock}} $$
(29)

The symbol β represents the ratio of the chipping rate to the carrier frequency. In the case at hand, as one estimates the L2 frequency error, the conversion is done as

$$ \beta = {\frac{{f_{c} }}{{f_{2} }}} = {\frac{1}{1,200}} $$
(30)

Finally, as the time derivative of the ionosphere is not estimated, the following relationships are derived:

$$ {\frac{{{\text{d}}\left( {\delta iono_{{\rm L}1}^{P} } \right)}}{{{\text{d}}t}}} = 0 + w_{iono,p} $$
(31)
$$ {\frac{{{\text{d}}\left( {\delta iono_{{\rm L}1}^{C} } \right)}}{{{\text{d}}t}}} = 0 + w_{iono,c} $$
(32)

The process noise on \( {\frac{{{\text{d}}\left( {\delta iono_{{\rm L}1}^{P} } \right)}}{{{\text{d}}t}}} \) is present in order to counteract possible divergences between phase and code measurements. As \( \delta iono_{{\rm L}1}^{P} \) and \( \delta iono_{{\rm L}1}^{C} \) are part of the same quantity \( \delta iono_{{\rm L}1}^{P} + \delta iono_{{\rm L}1}^{C} \) which is in turn used to evaluate the total ionospheric effect, \( w_{iono,p} \) is mainly present to stabilize the dynamic model and as such is considered independent of \( w_{iono,c} \). The dynamic model (Eq. 24) can then be formulated with

$$ \begin{aligned} X = & \left[ {\begin{array}{*{20}c} {\delta \phi_{0,2} } \\ {\delta f_{0,2} } \\ {\delta a_{0,2} } \\ {\delta d} \\ {\delta iono_{{\rm L}1}^{P} } \\ {\delta iono_{{\rm L}1}^{C} } \\ \end{array} } \right],\quad F = \left[ {\begin{array}{*{20}c} 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & {{\frac{{f_{c} }}{{f_{2} }}}} & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ \end{array} } \right],\quad G = \left[ {\begin{array}{*{20}c} 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 \\ {{\frac{{f_{c} }}{{f_{2} }}}} & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 \\ \end{array} } \right]\;{\text{and}} \\ W = & \left[ {\begin{array}{*{20}c} {w_{\text{clock}} } \\ {w_{\text{freq}} } \\ {w_{\text{acc}} } \\ {w_{\text{code}} } \\ {w_{iono,p} } \\ {w_{iono,c} } \\ \end{array} } \right]. \\ \end{aligned} $$

It becomes necessary to determine the covariance matrix Q of the process noise defined by the expected value of W; it has diagonal elements \( \left[ {S_{\text{clock}} ,S_{\text{freq}} ,S_{\text{acc}} ,S_{\text{code}} ,S_{iono,p} ,S_{iono,c} } \right] \) representing the spectral density of the process noise.

The derivation of the values of the variances of the noise associated to the dynamic model is done as follows:

  • Sclock and Sfreq depend on the oscillator parameters as they correspond to the expected error on the phase and frequency that can occur between updates from the observation model. From Brown and Hwang (1997), if one were to assume the general two states model presented in Fig. 5, the clock errors of the receiver could be created from white noise components. Assuming that the spectral amplitudes of n1 and n2 are Sfreq and Sclock, Brown and Hwang (1997) show that an accurate clock model matching (Van Dierendonck et al. 1984) occurs when

    $$ S_{\text{clock}} = {\frac{{h_{0} }}{2}}f_{{\rm L}2}^{2} \,{\text{cycles}}^{2} \,s^{ - 1} \quad {\text{and}}\quad S_{\text{freq}} = 2\pi^{2} h_{ - 2} f_{{\rm L}2}^{2} \,{\text{cycles}}^{2} \,s^{ - 3} , $$

    provided that x p is expressed in cycles, x f is expressed in cycles s−1 and one is tracking the L2 signal. The parameters h0 and h2 are dependent on the oscillator used as shown in Table 1.

    Table 1 h-Parameters for different types of oscillator (from Julien 2005)
    Fig. 5
    figure 5

    General two-state model describing the clock errors (after Brown and Hwang 1997)

  • Sacc depends on the rate of change of the line-of-sight (LOS) range variation or the change in Doppler. Neglecting user motion, the Doppler for L2 is approximately 4,000 Hz at the horizon and 0 Hz at the zenith. Moreover, at midlatitudes, a typical GPS satellite takes approximately 2 h from the horizon to the zenith. Thus, the average variation is 0.5 Hz/s. Thus, a value of Sacc = 0.25 cycles s−5 is chosen.

  • Scode corresponds to the expected divergence between the variation of the delay for the code and the phase over time (the common change over time being already accounted for by Sclock through G). The only divergence between the code and phase comes from the ionosphere and is already taken into account. Therefore, the value of this parameter is kept Scode = 5 × 10−6 chip2 s−1.

  • S iono,c corresponds to the ionospheric effect variation over time. As a satellite takes approximately 4 h from the horizon to horizon, the variation of TEC encountered on the signal path is mainly due to the satellite motion (assuming no scintillation). Assuming a vertical TEC value of 60 TECU, the delay experienced by the L2 signal transmitted by a satellite at the horizon is about 48 m, whereas the delay for a satellite at the zenith is about 16 m. Therefore, the variation is 32 m in 7,200 s, hence around 5 × 10−3 m in 1 s. The final value of S iono,c is then set to S iono,c  = 7 × 10−4 cycles2 s−1. Regarding S iono,p , it is set to the same values as S iono,c in order to stabilize the dynamic model.

Results and analysis

As a first step toward the validation of the proposed combined L1/L2 Kalman filter-based tracking method, a simple simulation process is set up. The purpose of this simulation is to verify that the combined tracking is indeed capable of correctly tracking and estimating the desired parameters under ideal conditions. Once this necessary verification is done, real data tracking is attempted. Results from two real data scenarios are presented. First, signals that have been artificially attenuated using a variable attenuator are tracked to demonstrate the performance of the new filter as a function of signal strength. Second, real data collected during low ionospheric scintillation is tracked to demonstrate the ability of the new method to track relative delay changes between the L1 and L2C signals.

Using simulation data

In order to verify the proposed tracking method, a simple L1/L2 signal simulator was developed. As the goal was to test the tracking module presented under ideal conditions, errors such as orbital and instrumental errors, tropospheric delay, oscillator errors and multipath were not implemented. Similarly, the simulator developed is only simulating one satellite and does not make use of ephemeris to compute true data bits but considers these random. However, the ionospheric errors (phase advance and code delay), Doppler effect and realistic C/N0 are considered. The ionospheric error is modeled as a constant code delay or phase advance computed from the input TEC value. The Doppler frequency is not considered fixed but can change linearly over time and is adapted sample per sample. Table 2 presents the parameters used to simulate L1 C/A and L2C complex samples.

Table 2 L1 C/A and L2C Simulation parameters

Four parameters were considered in order to validate the combined tracking proposed. First of all, the tracking capabilities of the Kalman filter are verified through the Doppler error, defined as the estimated Doppler frequency minus the true Doppler frequency as shown in Fig. 6.

Fig. 6
figure 6

Observed Doppler frequency errors for L1 and L2

Another parameter of interest when testing the behavior of the combined tracking method is the code error defined as the estimated code delay output by the Kalman filter minus the true code delay given by the simulator. As the code delay is then used to estimate the pseudorange between the GPS satellite and the receiver, the code error (in cm) is shown in Fig. 7.

Fig. 7
figure 7

Observed code errors (in cm) for L1 and L2

The third parameter of interest toward the validation of the proposed method and its performance is the carrier phase error. Once again, as the final purpose of a GPS receiver is to provide possible users with their positions, the phase error (in cm) is shown in Fig. 8.

Fig. 8
figure 8

Observed carrier phase errors for L1 and L2

As illustrated by Figs. 6, 7 and 8, the Kalman filter-based combined tracking method is able to track both L1 and L2 signals. The Doppler error being close to zero shows that the proposed method properly tracked the Doppler frequency of L1 and L2. Similarly, the code and carrier phase errors being close to zero proves that the combined tracking properly follows the code delay and carrier phase parameters over time. Therefore, the proposed method is capable of providing the pseudorange and phase measurements for both L1 and L2, necessary for high accuracy positioning.

Finally, as the proposed method also estimates the ionospheric effect, one can deduce the resulting TEC values. In order to verify that the output TEC values of the Kalman filter is correct, the TEC errors defined as the differences between the estimated TEC and true TEC values are plotted in Fig. 9.

Fig. 9
figure 9

Observed TEC errors

The estimated TEC error rapidly converges toward the simulated value of 30 TECUs, and the error converges toward zero (the Kalman filter was initialized with a value of 10 TECU). As such, the proposed combined tracking method not only doubles the number of observations with respect to common L1 tracking only but also provides the user with accurate and rapid estimates of the total electron content encountered on the signal path.

Using real data with attenuation

In order to further validate the proposed tracking method, real data was used. The data was taken under opened sky conditions, and a variable attenuator was used to degrade the C/N0 at a rate of 1 dB per second. The data collection scheme is shown in Fig. 10. The L1 and L2 signals are first collected using a dual frequency antenna, then passed through the variable attenuator and finally collected by a L1/L2 front-end externally clocked by an OCXO oscillator. The oscillator h-parameters are then used in the Kalman filter model as mentioned in the previous section. Finally, the collected data is transferred to a computer executing the Kalman filter-based tracking program.

Fig. 10
figure 10

Real data collection scheme

The variable attenuator is set to 0 dB attenuation during the first 20 s and then increased by 1 dB/s. The resulting C/N0 as computed by an external reference commercial receiver tracking L1 C/A only over time is shown in Fig. 11. Note that after 25 dB-Hz, the C/N0 profile is estimated by the Kalman filter correlator outputs as the external reference receiver lost lock.

Fig. 11
figure 11

L1 C/N0 profile over time as estimated by an external commercial receiver

In order to evaluate and compare the performance of the Kalman filter-based tracking developed, the L1 and L2 signals are also tracked using standard tracking module as presented in Ward et al. (2006). The L1 and L2 single frequency standard tracking modules make use of a third-order PLL and second-order DLL with carrier aiding. The bandwidths implemented are 15 Hz for the PLL and 0.5 Hz for the DLL. A narrow correlator spacing of 0.1 chips was used. The coherent integration time was 20 ms. Regarding L2 standard tracking, both the CM and CL code were merged into one code to compute the correlator output. This was easily done as the CM code did not transmit data at the time of the experiments. Therefore, the L2 standard tracking module behaves like a single code corresponding to the sum of the CM and CL codes. The developed Kalman filter tracking does not make use of this but assumes that the CM code does transmit data.

Figures 12 and 13 show the Doppler frequency as measured by the Kalman filter method and the standard tracking methods for both L1 and L2.

Fig. 12
figure 12

L1 Doppler as measured by the standard L1 only tracking module and the L1/L2 Kalman filter-based tracking module

Fig. 13
figure 13

L2 Doppler as measured by the standard L2 only tracking module and the L1/L2 Kalman filter-based tracking module

The Doppler frequencies output by the Kalman filter are smoother than those output by the single frequency tracking module. The L2 standard tracking module is obviously noisier than the L1 tracking module as the resulting L2 CM plus CL code remains 1.5 dB below the L1 C/A code in terms of received signal power.

From the Doppler frequencies, the L1 only standard tracking module seems to track longer than the L2 only standard tracking module. This is once again explained by the power difference between the two signals. However, the proposed Kalman filter seems to be able to keep track of the signals even longer than the L1 single frequency tracking module. In order to confirm this impression and quantify the sensitivity of the combined tracking technique with respect to the single frequency tracking technique, the phase lock indicators defined by Van Dierendonck (1996) are computed and shown in Figs. 14 and 15. The phase lock indicators for L1 and L2 for the Kalman filter-based tracking are derived from the real and imaginary parts of the L1 and L2 correlator outputs, respectively, using the following formula

$$ {\text{PLI}}(t) = {\frac{{\left( {\sum\nolimits_{i = 1}^{M} {I_{P} (t + i)} } \right)^{2} - \left( {\sum\nolimits_{i = 1}^{M} {Q_{P} (t + i)} } \right)^{2} }}{{\left( {\sum\nolimits_{i = 1}^{M} {I_{P} (t + i)} } \right)^{2} + \left( {\sum\nolimits_{i = 1}^{M} {Q_{P} (t + i)} } \right)}}} $$
(33)

The phase lock indicators derived from the proposed combined tracking are different for L1 and L2 since the noise and the phase errors on L1 are different from the noise and phase errors on L2.

Fig. 14
figure 14

Phase lock indicator computed on the L1 C/A signal for the L1 only standard tracking module and the Kalman filter-based tracking

Fig. 15
figure 15

Phase lock indicator computed on the L2 CM + CL signal for the L2 only standard tracking module and the Kalman filter-based tracking

As shown through the computation of the phase lock indicators, the proposed Kalman filter-based combining method has a sensitivity 3.2 dB greater than the L1 single frequency tracking module and 4.8 dB greater than the L2 single frequency tracking module. This means that by using the Kalman-filtered combination of both L1 and L2 signals as opposed to L1 aiding of L2, one is able to create a tracking method with increased sensitivity. These results are in accordance with previous work performed by (Petovello et al. 2008a, b) which shows that a single frequency L1 C/A Kalman filter already results in an improvement of 2–3 dB over standard tracking schemes in terms of sensitivity.

The proposed method not only permits tracking of both signals at once with a greater sensitivity than standard single frequency tracking loops but also outputs an estimated value of the TEC encountered on the signal path. The estimated TEC is shown in Fig. 16 as a function of time. As a means of comparison, the estimated TEC values obtained from GSNRx™ (Petovello et al. 2008a, b) and from a NovAtel OEMV-3 (both L2C capable) are presented. The values are derived from carrier-smoothed pseudoranges for both receivers.

Fig. 16
figure 16

Estimated (slant) TEC values encountered on the signal path as a function of time

However, even if the above values are in accordance with each other, they do not match the vertical TEC value of 8.9 TECU generated by the International GNSS Service (IGS). Indeed, the TEC values generated by either receiver or the Kalman filter-based tracking method are corrupted by the satellite and receiver instrumental biases. Appendix C of Gernot (2009) shows how it is possible to correct for the satellite bias using the TGD parameter provided in the broadcast ephemeris and how one can estimate the receiver instrumental bias and ionospheric effect if two or more L2C satellites are tracked. An estimate of the receiver instrumental bias of 12.8 ns was obtained using data collected 2 weeks before the above attenuated data collection. Since the instrumental biases are almost constant over time, the same value was used for correcting the TEC values shown in Fig. 16. The satellite elevation was then computed to determine the vertical TEC and compare it to the IGS-generated value, as shown in Fig. 17.

Fig. 17
figure 17

Satellite and receiver bias free vertical TEC values derived from the Kalman filter-based tracking and compared to the IGS-generated values

As this data set was collected under quiet ionospheric conditions, the ionospheric effects disturbing the L1 and L2 signals are also constant over time. Therefore, the TEC encountered on the signal path is also almost constant (barely changing due to satellite motion), which represents ideal conditions for the method developed herein. However, it is well known that the TEC can vary quickly during ionospheric scintillation events. The method will be tested in future when data affected by scintillation becomes available.

Conclusions

The main problem with inter-frequency combination is due to the frequency-dependent effects induced by the ionosphere, resulting in an additional code delay and phase advance different for each signal. It has been shown that using one signal only to track both L1 C/A and L2C is not possible as it results in a residual Doppler frequency error and a bad synchronization of the local code. In order to solve these difficulties, one can either track each signal independently or use one signal to aid the other. However, neither of these solutions actually combines the signals as they do not make use of both signals to obtain better estimates of the desired parameters and as such, the tracking performance is limited to the signal of greatest power. Therefore, a Kalman filter-based tracking method combining the outputs of the phase and code discriminators and aiming to estimate the TEC variation on the signal path was proposed. The implemented Kalman filter-based tracking is able to outperform the single frequency tracking on L1 and L2. The sensitivity of the proposed method is 3 dB above L1 standard tracking and 4.5 dB above L2 standard tracking, provided that the single frequency tracking modules have a PLL bandwidth of 15 Hz and a DLL bandwidth of 0.5 Hz with carrier aiding for a static receiver under attenuation. As a by-product of the combined tracking, the TEC encountered along the signal path is estimated. It was shown that the Kalman filter tracking also provides a fast and accurate estimate of the TEC when corrected for the satellite and receiver instrumental biases.