Introduction

Successful GNSS software should include a pre-processing step for screening of data. During this pre-processing step, the most severe irregularities in the data should be detected if necessary repaired. Several techniques were presented for this purpose. For instance, the receiver autonomous integrity monitoring (RAIM) algorithms are generally based on checking consistency of solutions from different combinations of satellite data (Farrell and Van Graas 1992; Lee 2012). Other methods estimate cycle slips as additional unknowns in a least-squares or Kalman filtering processing (Banville and Langley 2010). Some methods used linear combinations of the observations or their time difference to estimate cycle slips (Blewitt 1990). The detection–identification–adaptation (DIA) is another method for quality control of single-baseline GNSS observations, which has been discussed in Teunissen (1990, 1998) and De Jong and Teunissen (2000). De Bakker el al. (2009a) used the DIA method to investigate quality control of single-receiver single-satellite geometry-free model with a focus on the analysis of the minimal detectable bias (MDB), which is a measure for the size of the errors that can be detected with a certain power and probability of false alarm.

While most attention was given to validation of GPS observations, some studies consider multi-constellation GNSS. For instance, quality control of GPS with GLONASS was discussed in De Jong et al. (2001), and GPS with Galileo was considered in Ene et al. (2007), De Bakker el al. (2009b), and Neri et al. (2011). Most studies consider the case of dual-frequency observations due to the fact that signals availability was limited to only GPS and GLONASS (Kim and Langley 2002). Some recent studies consider triple frequencies from GPS or Galileo (Guo et al. 2011). With the availability of new systems such as BeiDou, QZSS as well as Galileo, research is still needed in modelling and validation of quadruple or higher-frequency observations. In addition, as the number of visible satellites is increasing due to the presence of multi-constellation GNSS systems, there will be an increased likelihood that multiple outliers may occur in the collected observations at one epoch. Detection of multiple outliers in the data has been discussed in Kok (1984) and Teunissen (1990), and for RAIM in Blanch et al. (2010).

A method is presented for validation of GNSS data using a single-receiver single-satellite approach and utilizing the DIA approach. The method is applicable for real-time or post-mission data processing. A re-parameterization approach of the unknowns in a geometry-free model is presented, and the used functional and dynamic modelling is discussed. The technique is applied for screening data of each satellite in an independent processing, i.e. one by one at each epoch and in a successive manner between epochs.

First, the multi-frequency single-receiver single-satellite method is discussed. Next, examples of its performance for processing data of a continuously operating reference station are presented. Data from three GNSS, namely GPS, GLONASS, and Galileo, collected simultaneously for three consecutive days will be checked. Finally, the performance of the method is demonstrated, and conclusions are given.

Single-receiver single-satellite geometry-free modelling

The carrier phase and pseudorange observation equations of a single receiver that tracks a single satellite on frequency f j (for j = 1 to n) at time instant t read (Teunissen and Kleusberg 1998; Leick 2004; Kaplan 2006):

$$\begin{aligned} \phi_{j} (t) & = \rho (t) + c(\delta t_{r} (t) - \delta t^{s} (t)) + T(t) - \mu_{j} I(t) + b_{{\phi_{j} }} (t) + \varepsilon_{{\phi_{j} }} (t) \\ p_{j} (t) & = \rho (t) + c(\delta t_{r} (t) - \delta t^{s} (t)) + T(t) + \mu_{j} I(t) + b_{{p_{j} }} (t) + \varepsilon_{{p_{j} }} (t) \\ \end{aligned}$$
(1)

where ϕ j (t) and p j (t) denote the observed carrier phase and pseudoranges in distance units (m), respectively, with corresponding zero-mean noise terms \(\varepsilon_{{\phi_{j}}} (t)\) and \(\varepsilon_{{p_{j}}} (t)\). ρ(t) denotes the receiver-satellite range, c is the speed of light, δt r (t) and δt s(t) are the receiver and satellite clock errors, and T(t) is the tropospheric delay. The parameter I(t) denotes the ionospheric delay for code observations and advance in phase observations expressed in units of distance with respect to the first frequency. For frequency f j , the ionospheric coefficient μ j  = f 21 /f 2 j is used to express its ionosphere in terms of I(t). The parameters \(b_{{p_{j}}} (t)\) and \(b_{{\phi_{j}}} (t)\) are the code and phase biases (including the phase ambiguity) at epoch (t), respectively. A geometry-free approach is used where positioning is of no interest at this stage. Thus, the satellite orbit error is not present in the model as knowledge of the accurate 3D satellite position is not needed. The ionospheric delay I(t) can be decomposed into two components; its initial value I(t o ) and the difference from this value, which is denoted as (δI), such that:

$$I(t) = I(t_{o} ) + \delta I(t)$$
(2)

where t o refers to the initial epoch of data processing.

The model given in (1) shows that the problem at hand is under-determined. The rank defect is caused by the fact that the information content of the observables is such that only time differences of the parameters can be determined. The rank deficiency in the model solution is reduced by re-parameterization of the unknowns in the observation equations as follows (El-Mowafy et al. 2010):

$$\rho^{ *} (t) = \rho (t) + c(\delta t_{r} (t) - \delta t^{s} (t)) + T(t)$$
(3)
$$\rho^{ * *} (t) = \rho^{ *} (t) - \rho^{ *} (t_{o} )$$
(4)
$$b_{{\phi_{j} }}^{ *} (t) = b_{{\phi_{j} }} (t) + [\rho^{ *} (t_{o} ) - \mu_{j} I(t_{o} )]$$
(5)
$$b_{{p_{j} }}^{ *} (t) = b_{{p_{j} }} (t) + [\rho^{ *} (t_{o} ) + \mu_{j} I(t_{o} )]$$
(6)

where j = 1 to n. The observation equations in terms of the re-parameterized vector of unknowns \(( {\rho^{**} (t),\delta I(t),\,b_{{\phi_{j} }}^{ *} (t),b_{{p_{j} }}^{ *} (t)})^{T}\) at time t then read:

$$\begin{aligned} \phi_{j} (t) & = \rho^{**} \left( t \right) - \mu_{j} \delta I(t) + b_{{\phi_{j} }}^{*} (t) + \varepsilon_{{\phi_{j} }} (t) \\ p_{j} (t) & = \rho^{**} (t) + \mu_{j } \delta I(t) + b_{{p_{j} }}^{*} (t) + \varepsilon_{{p_{j} }} (t) \\ \end{aligned}$$
(7)

During initialization when processing, the first two terms on the right-hand side of the equation equal zeros at the first epoch (t o ), leading to \(b_{{\phi_{j} }}^{ *} (t_{o} )\) and \(b_{{p_{j} }}^{ *} (t_{o} )\) equal \(\phi_{j} (t_{o} )\) and p j (t o ), for frequency j, respectively. The rank deficiency is completely removed by predicting the unknowns in (7), as will be discussed in the next section, and treating the predicted unknowns as pseudo-observations. At time t, for the unknown vector \(\left[ {\rho^{ * *} (t),\delta I\left( t \right),b_{{\phi_{j} }}^{ *} (t),b_{{p_{j} }}^{ *} (t)} \right]^{T}\) denoted in a general form as x t we have:

$$\widetilde{{x_{t} }} = {{\Upphi}}_{t/t - 1} \widehat{x}_{t - 1}$$
(8)

where \({{\Upphi}}_{t/t - 1}\) is the transition matrix, \(\widehat{x}_{t - 1}\) and \(\widehat{x}_{t}\) are the estimated and predicted vectors of unknowns at times t − 1 and t. The reparameterized unknown range \(\rho^{ * *}\) is in general hard to predict unless the satellite and receiver motion and dynamics are taken into consideration. One way to avoid the complexity of this scenario is to model \(\rho^{ * *}\) using a random walk process. However, this process requires good stochastic information, and one has also to consider the fact that a random walk process noise increases with time. Alternatively, the reparameterized unknown range \(\rho^{ * *}\) can be considered unlinked in time and thus excluded from the prediction process, such that the predicted vector of unknowns reads:

$$\widehat{g}_{t} = M \widetilde{x}_{t}$$
(9)

where M is a (1 + 2n) × (2 + 2n) matrix, where its first column includes zero elements and the remaining columns form an identity matrix of size (1 + 2n) (Teunissen, personal communication). The vector \(\widehat{g}_{t}\) now reads \(\left[ {\delta I(t),\,b_{{\phi_{j} }}^{ *} (t),\,b_{{\phi_{j} }}^{ *} (t)} \right]^{T}\), for j = 1 to n.

Processing can be performed using Kalman filtering; however, this needs some manipulation of its formulation to account for the use of \(\widehat{g}_{t}\) instead of \(\widetilde{x}_{t}\). Equivalently, one can use a parametric least-squares’ adjustment, processing epoch-by-epoch, and augmenting the observation model using the predicted unknowns as pseudo-observations, such that:

$$\left[ {\begin{array}{*{20}c} {y_{t} } \\ {\widehat{g}_{t} } \\ \end{array} } \right] = \left[ {\begin{array}{*{20}c} {A_{t}^{'} } \\ M \\ \end{array} } \right]x_{t} + \varepsilon_{t}$$
(10)

with

$$A_{t}^{\prime } = \left[ {\begin{array}{*{20}c} {\begin{array}{*{20}c} u & { - \mu_{j} } \\ u & { + \mu_{j} } \\ \end{array} } & {\begin{array}{*{20}c} I & 0 \\ 0 & I \\ \end{array} } \\ \end{array} } \right]$$
(11)

where y t is the vector of observations, which comprises code and phase observations, u is a column vector of ones with a size n, μ j here denotes a column vector of μ j for each frequency j, where j = 1 to n, I is the identity matrix of size n, and ɛ t denotes a zero-mean vector of observation noise. The estimated values of the unknowns \(\widehat{x}_{t}\) can then be determined as follows:

$$\widehat{x}_{t} = \left[ {A_{t}^{\prime T} Q_{{y_{t} }}^{ - 1} A_{t}^{\prime } + M_{t}^{T} Q_{{\widehat{g}_{t/t - 1} }}^{ - 1} M_{t} ]^{ - 1} [A_{t}^{\prime T} Q_{{y_{t} }}^{ - 1} y_{t} + M_{t}^{T} Q_{{\widehat{g}_{t/t - 1} }}^{ - 1} \widehat{g}_{t/t - 1} } \right]$$
(12)

with a covariance matrix equals \(\left[ {A_{t}^{\prime T} Q_{{y_{t} }}^{ - 1} A_{t}^{\prime } + M_{t}^{T} Q_{{\widehat{g}_{t/t - 1} }}^{ - 1} M_{t} } \right]^{ - 1}\). The method continues between epochs until re-initialization is needed; then, the processing time is set as t o and the procedure is repeated.

Dynamic and stochastic modelling

In (7), the ionospheric delay \(\delta I\) and the bias components \(b_{{\phi_{j} }}^{ *}\), and \(b_{{p_{j} }}^{ *}\) are assumed changing relatively smoothly with time for a short period (El-Mowafy 2009), which can be assumed between 15 and 30 min, depending on site and observing conditions. The temporal correlations of the three biases, denoted in a general term as β, are assumed exponentially decaying with time by using a first-order autoregressive stochastic process, such that:

$$\beta = {\text{e}}^{{ - |{{\Updelta}}t|/\tau }}$$
(13)

where \({{\Updelta}}t\) is the time interval between the epochs (t − 1) and (t) and τ is the correlation time length. The dynamic models of δI, \(b_{{\phi_{j} }}^{ *}\) and \(b_{{p_{j} }}^{ *}\) for a frequency j at t then read:

$$\delta I\left( t \right) = \beta_{\delta I} \delta I(t - 1) + d_{\delta I} (t)$$
(14)
$$b_{{\phi_{j} }}^{ *} (t) = \beta_{{ b_{{\phi_{j} }}^{ *} }} b_{{\phi_{j} }}^{ *} (t - 1) + d_{{ b_{{\phi_{j} }}^{ *} }} (t)$$
(15)
$$b_{{p_{j} }}^{ *} (t) = \beta_{{ b_{{p_{j} }}^{ *} }} b_{{p_{j} }}^{ *} (t - 1) + d_{{ b_{{p_{j} }}^{ *} }} (t)$$
(16)

where \(\beta_{\delta I} ,\,\beta_{{ b_{{\phi_{j} }}^{ *} }}\) and \(\beta_{{ b_{{p_{j} }}^{ *} }}\) are the temporal correlations for \(\delta I(t),\,b_{{\phi_{j} }}^{ *} (t)\) and \(b_{{p_{j} }}^{ *} (t)\). \(d_{\delta I} (t),\,d_{{b_{{\phi_{j} }}^{ *} }} (t)\) and \(d_{{b_{{p_{j} }}^{ *} }} (t)\) are their process noises, which are assumed Gaussian white noises. The transition matrix in (8) then reads:

$$\Upphi_{t/t - 1} = {\text{diag}}[\beta_{\delta I} , \beta_{{b_{{\phi_{j} }}^{*} }} , \beta_{{b_{{p_{j} }}^{*} }} ]$$
(17)

for j = 1 to n, where \(\beta_{{b_{{\phi_{j} }}^{ *} }} {\text{and}}\,\beta_{{b_{{p_{j} }}^{ *} }}\) are diagonal matrices including the values of \(\beta_{{ b_{{\phi_{j} }}^{ *} }}\) and \(\beta_{{ b_{{p_{j} }}^{ *} }}\) for each frequency. The variance of each process noise is \(\left[ {\frac{\vartheta }{2/\tau }(1 - \beta^{2} )} \right]\) (Gelb 1974), where \(\vartheta\) denotes its spectral density. No auto-correlation nor cross-correlation among code and phase measurements are assumed in the used stochastic model.

Validation of the observations using the single-receiver single-satellite model

For detection of outliers in the observations, one may consider examining the model using observations only from the current epoch t. This is referred to as Local Testing. In local validation of GNSS observations, one may wish to test q number of possible errors in the observations, where q < df, where df is the degrees of freedom of the model. For u number of unknowns and excluding the unknown \(\rho^{ * *}\) during the prediction process, the number of predicted unknowns is u − 1. Thus, the degrees of freedom for n number of observed frequencies are \([2n + (u - 1)] - u = 2n - 1\). The best estimator of the error vector \(\widehat{\nabla}_{t}\) can be determined from (Teunissen 2006):

$$\widehat{\nabla}_{t} = \left( {C_{t}^{T} Q_{{y_{t} }}^{ - 1} Q_{{\widehat{e}_{t} }} Q_{{y_{t} }}^{ - 1} C_{t} } \right)^{ - 1} C_{t}^{T} Q_{{y_{t} }}^{ - 1} \widehat{e}_{t}$$
(18)

and its covariance matrix is:

$$Q_{{\widehat{\nabla}_{t} }} = \left( {C_{t}^{T} Q_{{y_{t} }}^{ - 1} Q_{{\widehat{e}_{t} }} Q_{{y_{t} }}^{ - 1} C_{t} } \right)^{ - 1}$$
(19)

where \(\widehat{e}_{t}\) and \(Q_{{\widehat{e}_{t} }}\) are the computed observation residuals and their covariance matrix from the least-squares solution, where:

$$\widehat{e}_{t} = Y_{t} - A_{t} \widehat{x}_{t} = \left[ {\begin{array}{*{20}c} {y_{t} } \\ {\widehat{g}_{t} } \\ \end{array} } \right] - \left[ {\begin{array}{*{20}c} {A_{t}^{'} } \\ M \\ \end{array} } \right]\widehat{x}_{t}$$
(20)

and \(Q_{{\widehat{e}_{t} }} = Q_{{Y_{t} }} - [A_{t} (A_{t}^{T} Q_{{Y_{t} }}^{ - 1} A_{t} )^{ - 1} A_{t}^{T} ]\), with \(A_{t} = \left[ {\begin{array}{*{20}c} {A_{t}^{'} } \\ M \\ \end{array} } \right],\) and \(Q_{{Y_{t} }} = \left[ {\begin{array}{*{20}c} {Q_{{y_{t} }} } & 0 \\ 0 & {Q_{{\widehat{g}_{t} }} } \\ \end{array} } \right]\) are the covariance matrix of the observations and predicted unknowns. C t is the matrix describing which observations are examined, such that each column of C t describes one possible error. The elements of each column are set to zeros except the element corresponding to the examined observation, which equals 1.

Possible detection of the presence of model errors in local testing can be performed by examining the local overall model (LOM) statistic T LOM, which can be formulated as (Teunissen 2006):

$$T_{\text{LOM}} = \widehat{\nabla}_{t}^{T} Q_{{\widehat{\nabla}_{t} }}^{ - 1} \widehat{\nabla}_{t}$$
(21)

and measurement or model errors are suspected when:

$$T_{\text{LOM}} \ge \chi_{\alpha }^{2} (df,0)$$
(22)

where χ 2 α is the chi-squared value for a significance level α.

Once the presence of model errors is detected, one needs to identify the erroneous measurement(s) that causes such model errors. The matrix C t is set to test all possibilities of the presence of errors in the observations. For local testing, two cases are of particular interest:

  1. 1.

    The case of a single outlier in one code or phase observation, i.e. q = 1. In this case, the C t matrix reduces to a column vector c t , \(\widehat{\nabla}_{t}\) becomes a scalar, and the test statistic can be computed as follows (Baarda 1968):

$$w_{t} = \frac{{\widehat{\nabla}_{t} }}{{\sigma_{{\widehat{\nabla}_{t} }} }}$$
(23)

where \(\sigma_{{\widehat{\nabla}_{t} }}\) is the standard deviation of \(\widehat{\nabla}_{t}\). The null hypothesis, denoted as H o , is set to present the case that no outliers are present in the data. H o is rejected if

$$|w_{t} | \ge N_{{\frac{\alpha }{2}}} (0,1)$$
(24)
  1. 2.

    The case of multiple outliers, or complete loss of lock either in phase or in code observations is seen, i.e. when 1 < q ≤ df. In this case, C t is a matrix with a number of columns equals q.

For the cases mentioned above, where different alternative hypotheses are examined, we have mixed size cases (i.e. q = 1 for a single outlier and q > 1 for the case of multiple outliers). Therefore, a unified criterion needs to be set to compare the statistical testing outcomes of different alternative hypotheses in order to identify possible observations that may contain the errors. This can be performed by comparing the p values under the χ 2 distribution for different alternative hypotheses (where p value is the probability of obtaining a test statistic at least as extreme as the observed one). All alternative hypotheses are ranked in a descending order according to their p values, where the alternative hypothesis that has the smallest p value is considered as the most likely alternative hypothesis. For the case of q = 1, the p value of w 2 t is computed as it has a χ 2 distribution.

In identification testing, one has to consider the correlations among observation errors as this may cause identification of wrong observations that do not include the outliers and missing the faulty ones if they have significant correlation. For observations i and j, and ignoring the time index, the correlation coefficient between their corresponding errors is denoted as \(\xi_{{\widehat{\nabla}_{i} ,\widehat{\nabla}_{j} }}\) reads:

$$\xi_{{\widehat{\nabla}_{i} ,\widehat{\nabla}_{j} }} = \frac{{c_{i}^{T} Q_{Y}^{ - 1} Q_{{\widehat{e}}} Q_{Y}^{ - 1} c_{j} }}{{\sqrt {c_{i}^{T} Q_{Y}^{ - 1} Q_{{\widehat{e}}} Q_{Y}^{ - 1} c_{i} } \sqrt {c_{j}^{T} Q_{Y}^{ - 1} Q_{{\widehat{e}}} Q_{Y}^{ - 1} c_{j} } }}$$
(25)

where c i and c j are zero-column vectors except for the elements corresponding to the observations i and j which equal 1. If single-frequency observations are used in the given model, the correlation between phase and code observation errors is almost −1 and identification is not possible. For multi-frequency data, the correlation between phase errors is nearly −1, whereas that between code observation errors is almost zero. This means that phase errors will be hard to identify due to their high correlation, whereas error identification will be possible for code errors since there is no correlation between them. In this study, we will restrict attention to detection and identification of outliers in code observations in the local-testing case and detection of cycle slips in phase observations. To detect cycle slips, more than one epoch of data have to be examined. This is referred to as Global testing, where the global overall model (GOM) statistic T GOM reads:

$$T_{\text{GOM}} = \mathop \sum \limits_{i = t - \delta t}^{t} \widehat{\nabla}_{i}^{T} Q_{{\widehat{\nabla}_{i} }}^{ - 1} \widehat{\nabla}_{i}$$
(26)

where δt denotes to the time interval considered in computation of T GOM (e.g. two or three epochs). The T GOM statistic has also a chi-squared distribution under H o and cycle slips are suspected in phase observations if this statistic exceeds a critical value of chi-squared using the chosen significance level and degrees of freedom that are computed from the accumulated observations. Once a cycle slip is detected, the validation procedure is re-initialized.

Testing the single-receiver single-satellite validation of GNSS measurements

The previous sections summarize the single-receiver single-satellite approach for validation of GNSS data. This approach has the following advantages:

  • No satellite positions need to be known beforehand, and thus, no complete navigation messages need to be read and used. In this case, observation weighting can be performed using, for instance, the signal-to-noise ratio.

  • Measurements from systems with a limited number of operational satellites, such as Galileo and QZSS, can be screened without the need for having a complete positioning solution.

  • There is no need for the determination of inter-system biases when using data from different constellations.

In addition, the approach has the following capabilities:

  • It can detect multi-faults at any one epoch for each satellite.

  • Fault detection can be performed for a single- or multi-frequency observations.

  • Due to the method flexibility, it can be applied to any receiver type and make, and under static or kinematic modes.

In this section, practical testing of the proposed method is carried out. Description of the test data and assumptions are first given. Next, evaluation of the performance of the method is discussed, first for detection and identification of outliers in code observations in a local testing, and next for detection of cycle slips in phase observations.

Test description

The single-receiver single-satellite method is tested using data that span 3 days as a representative sample. The observations were collected in a static mode at a continuously operating reference station (CORS) at Curtin University, Western Australia, during the period 15/3/2012 to 17/3/2012 with 30 s sampling interval. Observations from GPS, GLONASS and Galileo were collected using a geodetic-grade multi-frequency multi-GNSS antenna (TRM59800.00) and receiver (Septentrio POLARX4). Tracked signals in the test included L1, L2, and L5 code and phase observations for GPS, L1 and L2 for GLONASS, and E1, E5a, and E5b for Galileo. Over each day, 32 GPS satellites, 24 GLONASS satellites, and four Galileo satellites (including GIOVE A and B, and IOV PRN 11 and 12) were observed.

An indication on the correctness of the model and assumed observation stochastic information used can be obtained by examining whether the estimated w test statistic of the observed signals has a standard normal distribution as an incorrect model or inappropriate stochastic assumptions would lead to a wrong distribution. This can be performed by inspection of the probability plots of the w test statistic. In this plot, the data are ordered and plotted against the corresponding percentage points from a standard normal distribution in such a way that the points should form an approximate straight line. Departures from this straight line indicate departures from normality. An example of tested normal probability plots is given in Fig. 1 for \({p}_{1}\) code observations of GLONASS satellite PRN 18 collected on 15/3/2012. In our tests, the observations were weighted using an elevation-angle-dependent model in the form \([1 + 10 \times {\rm e}^{{(- E^{o}/10^{o})}}]\) (Euler and Goad 1991; Teunissen and de Bakker 2012); where \(E^{o}\) is the observed elevation angle. The standard deviations used for the undifferenced observations were selected according to the observation type (phase/code), frequency, and constellation and to satisfy the condition that the w test statistic of each observed signal has a standard normal distribution. These standard deviations along zenith direction agreed in general with the values given in the literature. For δI, \(b_{{\phi_{j} }}^{ *}\) and \(b_{{p_{j} }}^{ *}\), the used spectral densities were 3, 2, and 50 mm2/s, with correlation times 1,500, 300, and 300 s, respectively.

Fig. 1
figure 1

Normal probability plot of w test statistic for p 1 observations of GLONASS

Evaluation of the method performance in detection and identification of outliers in code observations

To evaluate the performance of the proposed algorithm, the following approach was carried out. First, several artificial errors were inserted at known epochs in the test data. Next, the proposed single-receiver single-satellite validation approach was performed. A check was carried out to examine whether the algorithm was able to detect the presence of the inserted errors at their known epochs. The inserted errors in code observations ranged between 0.6 and 5 m. These ranges were selected such that the minimum values equal the MDB, which is the minimum error that can be detected for each observation type with the chosen probabilities of false alarm and miss-detection, taken as 0.001 and 0.2, respectively. The MDBs are computed from the covariance matrix of the observations (see Teunissen 1998). The artificial errors were created using the MATLAB function “rand” such that they have random values that were bounded between 0.6 and 5 m. The inserted errors had almost a standard uniform distribution. Extra errors were added close to the lower bound to further test the method at this critical value. An example of the distribution of the inserted errors in p1 code errors for GLONASS satellites on 15/3/2012 is given in Fig. 2.

Fig. 2
figure 2

Distribution of inserted errors for GLONASS p1 code measurements

In total, 5,599 artificial errors were inserted in the code data. Table 1 gives the number of errors inserted in each system for each of the three test days followed by the percentage of successful detection of the inserted errors referenced to their known information. The errors were inserted for all observed 32 GPS satellites, 24 GLONASS satellites, and four Galileo satellites throughout the 24 h of data for each of the test days and for all available frequencies. In general, the number of inserted errors was proportional to the number of satellites observed in each system. The specific epochs and observations where these errors were inserted as well as their values were recorded. The results of Table 1 are a function of the test significance level (α). Using a significance level for w test statistics equals 0.001, the significance level for the local overall model in the detection test was computed using Baarda’s B method (Baarda 1968), which assumes same probability for type II error (failure to reject a false null hypothesis) in both the detection and identification tests. In this study, this probability is taken as 0.2. The corresponding α for dual-frequency observations was computed as 0.0052, which is the case for GLONASS satellites and most GPS satellites. For triple-frequency observations, i.e. for Galileo satellites and GPS PRN 1 and 25, α was computed as 0.0123.

Table 1 Percentage of epochs with detected code observation outliers (for all frequencies)

The success of detection summarized in Table 1 was separately given for errors within three bands (0.6–2, 2–3.5 m, and the last 3.5–5 m). Detection results showed that the algorithm success rate increases as the error size increases and it was best for Galileo, followed by GPS and last GLONASS. For GPS, over the three test days, the successful detection of code outliers was on average 77.4, 92.63, and 96.6 % for the error ranges 0.6–2, 2–3.5, and 3.5–5 m, respectively. The detection of code outliers for GLONASS was less than that of GPS. These percentages were significantly better with Galileo measurements, which on average were 94.3, 98.0, and 99.63 %. This can be attributed to the better signal quality of GPS compared with GLONASS and the enhanced quality of Galileo measurements as well as the more number of observations it has, which helps strengthening the application of the model.

For the epochs where detection was successful, a check was performed to examine whether the observations of the artificial errors can be correctly identified. Table 2 shows the overall percentage for identification of errors for the same data and testing period that was discussed in the analysis of results of error detection. Successful error identification was assessed for each of the three error bands 0.6–2, 2–3.5, and 3.5–5 m. Results showed that the success rates of identifying outliers for the three error bands (for the epochs where errors were detected) were close and increased as error size increased. For GPS and Galileo, the method was successful in identifying code outliers ranged from approximately 90 % up to 99.5 %. The identification of outliers were almost 4–10 % less for GLONASS. The variability of the success rate can be attributed to different observation precisions.

Table 2 Percentage of identification of code outliers (for all frequencies)

The advantage of the method is demonstrated in another test by applying it in a single-point-positioning (SPP) mode using measurements only from the current Galileo constellation, which includes four IOV satellites, PRN 11, 12, 19, and 20. The used data spanned approximately 3 h on 2/7/2013 (between 1:30 and 4:26 where the four satellites were simultaneously visible), collected at a CORS in Curtin University in a static mode with a sampling interval of 30 s using a Trimble Net R9 receiver. The data were screened epoch-by-epoch for detection and identification of code outliers. Such capability is not possible by current statistical validation methods, as they require redundancy of satellite measurements, which was not available in this test as only four satellites were used. However, with the single-receiver single-satellite method, data validation was possible owing to the fact that each satellite data was screened independently. A similar possible scenario can be experienced when working with other constellations in what is called “urban canyon”. During the SPP processing of Galileo measurements, only one code outlier was detected and removed. The coordinate differences along the East, North, and Up directions between the epoch-by-epoch SPP least-squares solution and the known station coordinates were computed and found to be bounded within ±5 m, indicating that no outliers were left in the data. Figures 3 and 4 show two examples of the time series of the ionosphere-free combination:

$$m_{{p_{i} }} = p_{i} - \phi_{i} + 2\lambda_{i}^{2} \frac{{\phi_{j} - \phi_{i} }}{{\lambda_{j}^{2} - \lambda_{i}^{2} }}$$
(27)

which mainly gives multipath and code noise for the Galileo satellites 11 and 12, where i refers to the frequency E1 and j refers to E5a frequency. As the figures show, no undetected outliers can be seen.

Fig. 3
figure 3

Iono-free combination for PRN 11

Fig. 4
figure 4

Iono-free combination for PRN 12

Evaluation of the method performance in detection of cycle slips

To evaluate the detection of cycle slips, a similar approach was carried out, where 970 artificial cycle slips were inserted in the phase data of the three systems GPS, GLONASS, and Galileo. The cycle slips were inserted for all available frequencies throughout the 24 h of data for the three test days as given in Table 3. Global testing was performed to examine whether the algorithm was able to detect the presence of the inserted cycle slips. The inserted slips were random but ranged from one cycle to six cycles with almost a standard uniform distribution. Table 3 summarizes the numbers of inserted cycle slips and the percentage of their successful detection within two bands (1–3 cycles and 4–6 cycles). The table shows consistency in detection of cycle slips and that successful detection for GPS was on average approximately 95 and 98 %, respectively, for the two test bands. For Galileo, the latter had improved to 100 %. For GLONASS, the success rates were slightly less than GPS and Galileo for the reasons discussed earlier.

Table 3 Percentage of epochs with detected phase observation cycle slips (for all frequencies)

Another test for evaluation of the performance of the method in cycle slips detection was executed by processing GPS data of 15/3/12, which contain the above slips using Bernese GNSS software version 5 in a precise point-positioning (PPP) mode (see Dach et al. 2007 for the methods used in Bernese for detection of cycle slips). The number of cycle slips reported by Bernese software was compared with the inserted slips and with the slips detected by the single-receiver single-satellite method. Out of the 144 cycle slips in the data, Bernse software flagged 141 slips. Comparing this with the results of the proposed method, which had detected 140 cycle slips, shows that the performance of the single-receiver single-satellite validation method was comparable to that of Bernse software for the test at hand.

Summary

A method that can be applied for real-time or post-mission quality control of GNSS measurements is presented using a single-receiver single-satellite DIA approach. The advantages of this approach include: it is applicable to any GNSS with any arbitrary number of frequencies, no need for the navigation message, the approach is able to detect faulty measurements for systems with a limited number of operational satellites, and there is no need for the determination of inter-system biases when using data from different constellations.

The capability of the proposed algorithm was evaluated for detection and identification of outliers in code observations and detection of cycle slips in phase observations of GPS, GLONASS, and Galileo. Artificial errors were inserted in a data set that spans 3 days for all frequencies. The method was successful in detecting from 77.4 to 96.6 % on average for the errors ranging between 0.6 and 5 m in GPS observations. For GLONASS, the overall performance was slightly less than GPS, whereas for Galileo measurements, the average rates of successful detection ranged between 94.3 and 99.63 %. This can be attributed to differences in signal quality and number of observations, which helps strengthening the application of the model. Evaluation of the method performance in correct identification of code outliers showed that the method was successful in identifying 89.4–96.9 % of GPS code outliers and with slightly lower performance for GLONASS. For Galileo, the rates of successful identification of outliers were much better with average values between 96.8 and 99.4 %. Successful detection of artificial cycle slips in phase data was between 95 and 99 % for GPS and Galileo and was a little less for GLONASS.

The advantage of the method is demonstrated in another test using it in a single-point-positioning where measurements from only four IOV Galileo satellites were processed. Unlike other statistical testing methods, satellite redundancy was not needed as data of each satellite were screened independently. In another test, comparison between the number of cycle slip detected using the proposed method with that of Bernese software during PPP processing shows that they have a comparable performance.