Introduction

Carrier phase integer ambiguity resolution is the key to fast and high-precision GNSS positioning and navigation. It is the process of resolving the unknown cycle ambiguities of the double-differenced carrier phase data as integers. Once this has been done successfully, the carrier phase data will act as very precise pseudorange data, thus making very precise positioning and navigation possible.

In this contribution, we consider the GNSS model for attitude determination. GNSS attitude ambiguity resolution is a rich field of current studies, with a wide variety of challenging (terrestrial, sea, air and space) applications, see e.g. Lu (1995), Tu et al. (1996), Montgomery et al. (1999), Peng et al. (1999), Hodgart and Purivigraipong (2000), Caporali (2001), Lopes (2002), Yoon and Lundberg (2002), Ziebart and Cross (2003), Park and Teunissen (2003), Dai et al. (2004), Lin et al. (2004), Simsky et al. (2005), Kuylen et al. (2005), Buist (2007), Hide and Pinchin (2007), Pinchin et al. (2008).

The earliest methods of attitude ambiguity resolution are the so-called motion-based methods, see e.g. Cohen and Parkinson (1992), Cohen (1996), Crassidis et al. (1999), Chun and Park (1995). These methods take advantage of the change in receiver-satellite geometry that is induced by the platform’s motion. They are not applicable, however, on an epoch-by-epoch basis, as the presence of motion is needed per se. Another class of methods is the class of search-based methods, see e.g. Brown (1992), Knight (1994), Park et al. (1996). These methods are not necessarily dependent on motion and can therefore be used instantaneously in principle. They differ in the search domain used and in the objective function to be optimized. The Knight method (Knight 1994), for instance, searches for the optimal relative antenna positions. It requires some initial knowledge of the platform’s attitude, in the absence of which the method is reported to become problematic (Gomez and Lammers 2004). Also in the ARCE method (Park et al. 1996), relative antenna positions are searched for. These methods divide, as e.g. Jang and Kee (2009) and as some of the older baseline ambiguity resolution methods, e.g. Hatch (1990), the n-dimensional integer ambiguity vector into a 3-dimensional so-called independent part and an (n − 3)-dimensional dependent part. The independent part is then used in the baseline search.

More recent attitude determination methods search in the ambiguity domain. Several of them make use of the popular LAMBDA method, see e.g. Peng et al. (1999), Furuno (2003), Lin et al. (2004), Monikes et al. (2005), Kuylen et al. (2006), Hauschild and Montenbruck (2007), Hauschild et al. (2008),Wang et al. (2009a, b), as this method is known to be efficient and known to maximize the ambiguity success rate (Teunissen 1995, 1999; Verhagen and Teunissen 2006). However, the standard LAMBDA method has been developed for unconstrained and/or linearly constrained GNSS models. The method is therefore not necessarily optimal for the GNSS attitude determination problem, for which often the baseline length is provided as well. Many of the existing methods make use of this additional information, by checking whether or not the candidate baselines satisfy the given baseline length, see e.g. Park et al. (1996), Monikes et al. (2005), Kuylen et al. (2006), Wang et al. (2009a, b). Although this usage of the baseline length indeed improves ambiguity resolution, methods that use such an approach are still ad hoc as this validity check does not do full justice to the given information.

In order to do proper justice to the a priori information, the nonlinear baseline constraint should be fully integrated into the ambiguity objective function, thereby receiving a proper weighting in its minimization and providing guidance for the integer search. The first method for which this has been achieved is the constrained LAMBDA method (Teunissen 2007). This method, which is a nontrivial modification of the LAMBDA method, is applicable to any GNSS compass model. The method’s constrained integer least-squares theory has been described in detail in Teunissen (2009).

In this contribution, we analyse the practical performance of the constrained (C-) LAMBDA method. This is done by means of extensive tests, using simulated as well as actual GNSS data. We focus on stand-alone, unaided, single-frequency, single-epoch attitude determination, as this is the most challenging case of GNSS compass processing. Our field tests, with receivers of different make and type, cover two static land experiments, one in the Netherlands and one in Australia, and two dynamic experiments, a low-dynamics vessel experiment and a high-dynamics aircraft experiment.

This contribution is organized as follows. In "The GNSS compass model", we introduce the GNSS compass model. It is a nonlinear constrained version of the short-baseline GNSS model. In "The least-squares solution", we apply the least-squares principle to the GNSS compass model, and we show how to simultaneously incorporate the integer ambiguity constraints and the baseline length constraint. The ambiguity objective function so obtained is shown to be quite different from that of the standard LAMBDA method, as well as from all the existing methods that make use of a baseline length constraint.

In "The C-LAMBDA method", we briefly describe the steps of the C-LAMBDA method. Due to the complexity involved, particular attention is given to the size setting of the non-ellipsoidal search space and to the search and shrink strategy employed. "Simulation experiment", "Static experiment", "Ship experiment" and "Aircraft experiment" are devoted to the experiments. The results of our extensive simulations are reported in "Simulation experiment". Both the success rate and the computational speed are analysed for different measurement scenarios. Comparisons with the standard LAMBDA method are also included. In "Static experiment", the results of our two static experiments are reported. The empirical success rates of this and the following sections have been obtained from using post-processing results as ‘ground truth’. The high success rates of the simulations are confirmed, and also the method’s robustness is illustrated. In the last two sections, we report the results of our dynamic experiments. The vessel and aircraft experiments both confirm the method’s excellent single-frequency, single-epoch performance.

The GNSS compass model

In principle, all GNSS baseline models can be cast in the following frame of linear(ized) observation equations (Teunissen 1997a).

$$ E(y) = Aa + Bb;\quad D(y) = Q_{yy} ;\quad a \in {\mathbb{Z}}^{n} ,\quad b \in {\mathbb{R}}^{p} $$
(1)

where y is the given GNSS data vector of order m, and a and b are the unknown parameter vectors of order n and p, respectively. E(·) and D(·) denote the expectation and dispersion operator, respectively, and A and B are the given design matrices that link the data vector to the unknown parameters. Matrix A contains the carrier wavelengths, and the geometry matrix B contains the receiver-satellite unit line-of-sight vectors. The variance matrix of y is given by the positive definite matrix Q yy . The data vector y will usually consist of the “observed minus computed” single- or multi-frequency double-difference (DD) phase and/or pseudorange (code) observations accumulated over all observation epochs. The entries of vector a are then the DD carrier phase ambiguities, expressed in units of cycles rather than range. They are known to be integers, \( a \in {\mathbb{Z}}^{n} . \) The entries of the vector b will consist of the remaining unknown parameters, such as baseline components (coordinates) and possibly atmospheric delay parameters (troposphere, ionosphere). They are known to be real-valued, \( b \in {\mathbb{R}}^{p} . \) Since we consider the GNSS Compass application in the present contribution, we restrict attention to the case of satellite tracking with two nearby antennas. The short distance between the two antennas implies that we may neglect the (differential) atmospheric delays. Thus, p = 3 and \( b \in {\mathbb{R}}^{3} \) consists then only of the three coordinates of the between baseline vector of the two antennas.

In the single-frequency, single-epoch case, we have, when tracking n + 1 satellites, m = 2n DD carrier phase and pseudorange observables, n single-frequency integer ambiguities and three baseline components.

If we may assume that the two antennas are firmly attached to the body of the moving platform, the length of the baseline vector may be determined a priori. In that case, we can strengthen the GNSS model Eq. (1) by imposing the baseline length constraint. The resulting model reads then

$$ E(y) = Aa + Bb;\quad D(y) = Q_{yy} ;\quad a \in {\mathbb{Z}}^{n} ,\quad b \in {\mathbb{R}}^{p = 3} ,\quad ||b||\, = \,l $$
(2)

where l denotes the known baseline length and \( ||b|| = \sqrt {b_{1}^{2} + b_{2}^{2} + b_{3}^{2} } . \) This GNSS model is referred to as the compass model, see e.g. Teunissen (2007). The required compass information (e.g. heading and elevation) follows from the baseline solution of Eq. (2). To obtain the most precise compass information, use needs to be made of the very precise carrier phase data. The inclusion of the carrier phase data into the model accounts for the presence of the unknown integer ambiguity vector \( a \in {\mathbb{Z}}^{n} \) in Eq. (2).

Although our constrained ambiguity resolution method for solving model Eq. (2) will be tested with single-frequency GPS data, we emphasize that the method is generally applicable and thus also applicable to next generation, multi-frequency GNSSs (e.g., modernized GPS, Galileo, Beidou/Compass), whether they are used as standalone systems or in combination. We focus, however, on the single-frequency, single-epoch performance, as it is the most challenging case for ambiguity resolution. We also note that the requirements for a “single-epoch” performance are more stringent than those for a “real-time” performance. A “real-time” performance can still rely on past information, and it does therefore not necessarily permit a “cold start” as the “single-epoch” performance does. Since our single-epoch processing does not rely on past data, it also does not rely on the assumed time-invariance of the carrier phase ambiguities. Hence, when successful, the epoch-by-epoch ambiguity resolution has the additional advantage of being insensitive to cycle slips.

The least-squares solution

If we apply the least-squares (LS) principle to model Eq. (2) and use \( Q_{yy}^{ - 1} \) as weight matrix, we need to solve the minimization problem

$$ \mathop {\min }\limits_{{a \in Z^{n} ,b \in R^{3} ,\left\| b \right\| = l}} \left\| {y - Aa - Bb} \right\|_{{Q_{yy} }}^{2} $$
(3)

where \( ||\cdot||_{{Q_{yy} }}^{2} = (\cdot)^{T} Q_{yy}^{ - 1} (\cdot). \) This problem was first introduced in Park and Teunissen (2003) and is referred to as a quadratically constrained (mixed) integer least-squares problem. If we solve Eq. (3) without the integer constraint \( a \in {\mathbb{Z}}^{n} \) and without the baseline length constraint \( \left\| b \right\| = l, \) we obtain the so-called unconstrained float solution, denoted as \( \hat{a} \) and \( \hat{b}. \) If we solve Eq. (3) without the integer constraint \( a \in {\mathbb{Z}}^{n} , \) but with the baseline length constraint \( \left\| b \right\| = l \) imposed, we obtain the so-called constrained float solution, denoted as \( \bar{a} \) and \( \bar{b} \). And if we solve Eq. (3), assuming a known, but without the baseline length constraint, we obtain the conditional baseline solution, denoted as \( \hat{b}(a). \)

As was shown in Teunissen (2007), one can write Eq. (3) as

$$ \begin{array}{*{20}c} {\mathop {\min }\limits_{{a \in {\mathbb{Z}}^{n} ,b \in {\mathbb{R}}^{3} ,||b||l}} ||y - Aa - Bb||_{{Q_{yy} }}^{2} = } \\ {||\hat{e}||_{{Q_{yy} }}^{2} + \, \mathop {\min }\limits_{{a \in {\mathbb{Z}}^{n} }} \left( {||\hat{a} - a||_{{Q_{{\hat{a}\hat{a}}} }}^{2} + \mathop {\min }\limits_{{b \in {\mathbb{R}}^{3} ,||b|| = l}} ||\hat{b}(a) - b||_{{Q_{{\hat{b}(a)\hat{b}(a)}} }}^{2} } \right)} \\ \end{array} $$
(4)

where \( \hat{e} = y - A\hat{a} - B\hat{b} \) is the LS residual vector, and \( Q_{{\hat{a}\hat{a}}} \) and \( Q_{{\hat{b}(a)\hat{b}(a)}} \) are the variance matrices of \( \hat{a} \) and \( \hat{b}(a), \) respectively.

If we define

$$ F(a) = ||\hat{a} - a||_{{Q_{{\hat{a}\hat{a}}} }}^{2} + ||\hat{b}(a) - \overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{b} (a)||_{{Q_{{\hat{b}(a)\hat{b}(a)}} }}^{2} $$
(5)

with (denoting the argument of a function as ‘arg’)

$$ \overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{b} (a) = \arg \mathop {\min }\limits_{{b \in {\mathbb{R}}^{3} ,||b|| = l}} ||\hat{b}(a) - b||_{{Q_{{\hat{b}(a)\hat{b}(a)}} }}^{2} $$
(6)

then the sought for LS solution of Eq. (3) is given as

$$ \overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{a} = \arg \mathop {\min }\limits_{{a \in {\mathbb{Z}}^{n} }} F(a),\:\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{b} = \overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{b} (\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{a} ). $$
(7)

These are the integer ambiguities that we would like to compute in case of the GNSS compass model. It will be clear that the computation of \( \overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{a} \) is much more complicated than in case of the unconstrained GNSS model Eq. (1). The ambiguity objective function F(a) is not a quadratic function anymore, and the ambiguity search space has become a nonellipsoidal search space. The constrained (C-) LAMBDA method has been developed to compute the baseline constrained integer ambiguity solution \( \overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{a} \) of Eq. (7) in a rigorous and efficient way. Its relation to the standard LAMBDA method can be understood as follows. Note that in the absence of the constraint \( ||b|| = l \) in Eq. (6), \( \overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{b} (a) \) would be identical to \( \hat{b}(a), \) and Eq. (5) would reduce to \( F(a) = ||\hat{a} - a||_{{Q_{{\hat{a}\hat{a}}} }}^{2} , \) which is the objective function that is integer minimized with the standard LAMBDA method.

The C-LAMBDA method

We now briefly describe the options and steps of the C-LAMBDA method. First, we describe a rather naive approach, which is based on a straightforward exhaustive search. The advantage of this approach is that the search routines of the standard LAMBDA method can be used. Its disadvantage is that it will be inefficient for most single-frequency models. However, for a GNSS model of enough strength, like a multi-frequency model, this approach can still have its merits.

Following the naive approach, we describe the more subtle search and shrink approach of C-LAMBDA. This approach tries to do more justice to the nonellipsoidal shape of the search space. A large part of its efficiency stems from the fact that the search space is shrunk before the search is executed. For more details on the C-LAMBDA method, we refer to Teunissen (2007, 2009).

An exhaustive search

In principle, the solution \( \overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{a} \) of Eq. (7) can be computed by means of an exhaustive search in the search space

$$ \Upomega (\chi^{2} ) = \left\{ {a \in {\mathbb{Z}}^{n} \:|\:F(a) \le \chi^{2} } \right\}. $$
(8)

First, one collects all integer vectors that lie inside Ω(χ2), and from this set, one then selects the integer vector that returns the smallest value for F(a). Note, however, that the search space is no longer an ellipsoid, as it was in the unconstrained case. This complicates the search. As a remedy, one can work with an ellipsoidal search space that encompasses \( \Upomega (\chi^{2} ). \) The rudimentary steps for computing \( \overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{a} \) are then as follows:

  1. 1.

    Set the size of the search space by taking \( \tilde{\chi }^{2} = F(\tilde{a}) \) for some \( \tilde{a} \in {\mathbb{Z}}^{n} . \) For a discussion on the choice of \( \tilde{a}, \) see "Computational timing".

  2. 2.

    Enumerate all the integer vectors contained in the larger (ellipsoidal) search space

    $$ \Upomega_{0} (\tilde{\chi }^{2} ) = \left\{ {a \in {\mathbb{Z}}^{n} ||\hat{a} - a||_{{Q_{{\hat{a}}} }}^{2} \le \tilde{\chi }^{2} } \right\} \supset \Upomega (\tilde{\chi }^{2} ) . $$

    This can be efficiently performed with the standard LAMBDA method.

  3. 3.

    Compute F(a) for each collected integer vector, and select the one which returns the smallest value for this objective function.

Clearly, this exhaustive search is simple and rather straightforward to apply. However, it also has the tendency of being rather inefficient, in particular if the underlying GNSS model lacks sufficient strength. Since F(a) needs to be computed for all integer candidates, this also holds true for the rather time-consuming computation of \( \overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{b} (a), \) cf. Eq. (6). Hence, the whole search becomes very inefficient if the search space contains too many integer vectors. This can be avoided if one is in the position of computing a small enough value for \( \tilde{\chi }^{2} , \) which is possible if the underlying GNSS model has sufficient strength. This is the case for example with short-baseline, multi-frequency models, where the bootstrapped solution (or even the rounded one) based on the unconstrained float solution is already close to the final fixed solution. This is generally not the case, however, for the single-frequency, single-epoch GNSS models that we are considering in the present contribution. For such models, we need an alternative, much more efficient approach.

Search and shrink

To make the search much more efficient, a search and shrink strategy was introduced in Teunissen (2007). It aims at iteratively reducing the size of the search space without the necessity of computing \( \overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{b} (a) \) at each step. An important element of this approach lies in its capacity of bounding the function F(a) by functions that are easier to evaluate.

If we make use of the maximum (λmax) and the minimum (λmin) eigenvalues of the matrix \( Q_{{\hat{b}(a)\hat{b}(a)}}^{ - 1} , \) we can construct the following inequalities:

$$ \begin{array}{*{20}c} {F_{1} (a) \le F(a) \le F_{2} (a)} \\ {F_{1} (a) = \,||\hat{a} - a||_{{Q_{{\hat{a}\hat{a}}} }}^{2} + \lambda_{\min } \left( {||\hat{b}(a)||_{{I_{3} }} - l} \right)^{2} } \\ {F_{2} (a) = \,||a - a||_{{Q_{{\hat{a}\hat{a}}} }}^{2} + \lambda_{\max } \left( {||\hat{b}(a)||_{{I_{3} }} - l} \right)^{2} } \\ \end{array} $$
(9)

With the two functions F 1(a) and F 2(a) correspond the two search spaces

$$ \begin{aligned} \Upomega_{1} (\chi^{2} ) & = \left\{ {a \in {\mathbb{Z}}^{n} \:|\:F_{1} (a) \le \chi^{2} } \right\} \\ \Upomega_{2} (\chi^{2} ) & = \left\{ {a \in {\mathbb{Z}}^{n} \:|\:F_{2} (a) \le \chi^{2} } \right\} \\ \end{aligned} $$
(10)

Note that

$$ \Upomega_{2} (\chi^{2} ) \subset \Upomega (\chi^{2} ) \subset \Upomega_{1} (\chi^{2} ) $$
(11)

In brief, the algorithm now works as follows. We first determine the integer minimizer of F 2(a) by means of a search and shrink strategy. Starting with a certain initial \( \chi_{0}^{2} , \) we search for an integer vector in the (decorrelated) space Ω2:

$$ \Upomega_{2} (\chi_{0}^{2} ) = \left\{ {a \in {\mathbb{Z}}^{n} \:|\:F_{2} (a) \le \chi_{0}^{2} } \right\} \subset \Upomega (\chi_{0}^{2} ) $$
(12)

As soon as such an integer vector is found, say \( \tilde{a}, \) the space is shrunk to the value \( \tilde{\chi }^{2} = F_{2} (\tilde{a}) < \chi_{0}^{2} , \) and the search continues in this smaller set. In this way, the search proceeds rather quickly towards the integer minimizer of F 2(a), which we denote as \( \overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{a}_{2} . \) The integer minimizer \( \overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{a}_{2} \) is not necessarily the minimizer of F(a), but the sought for minimizer \( \overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{a} \) is known to lie inside the set

$$ \Upomega (\chi_{1}^{2} ) \subset \Upomega_{1} (\chi_{1}^{2} ) = \left\{ {a \in {\mathbb{Z}}^{n} \:|\:F_{1} (a) \le \chi_{1}^{2} } \right\} $$
(13)

with \( \chi_{1}^{2} = F_{2} (\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{a}_{2} ). \) All the integer vectors contained in Ω1 are then enumerated, and the integer minimizer of F(a) is selected.

The search algorithm is thus divided in three consecutive steps: shrinking (working with the set Ω2), enumerating (working with the set Ω1) and minimizing (computing F(a) for the remaining candidates). For a detailed description of the search and shrink strategy, we refer to Teunissen (2009). In addition to the search and shrink strategy, the C-LAMBDA method also has the option of the search and expansion strategy as introduced in Park and Teunissen (2003), see also Teunissen (2007) and Buist (2007). This strategy is not part of the present tests, since it has been shown to generally have comparable numerical performance as the search and shrink strategy.

In the next four sections, we report on our testing of the C-LAMBDA method. Four different types of experiments have been conducted. The first one is an extensive and controlled simulation experiment. This is followed by three different types of field experiments, namely static experiments, a low-dynamics vessel experiment and a high-dynamics aircraft experiment.

Simulation experiment

In this section, we present our simulation results. For different measurement scenarios, the success rate and computational speed of C-LAMBDA are analysed and compared with the standard LAMBDA method.

Simulation set-up

The GNSS design matrices (cf. compass model in Eq. 2) needed for the simulations were constructed by means of the VISUAL software (Verhagen 2006) using the assumed receiver locations and the actual GPS constellation as input (date and time: 22 Jan 2008 00:00; GPS week 1463; location: latitude 50°, longitude 3°). For the stochastic model, we assumed different noise levels, ranging from 1 to 30 mm for the undifferenced phase data and from 5 to 30 cm for the undifferenced code data. For each simulation scenario, a set of 105 Gaussian distributed data vectors was generated. Then, each simulation was repeated for the different geometries (number of satellites with varying PDOPs) and for the different combinations of measurement precision.

Two different aspects of the methods were investigated: the success rate, which depends on the strength of the underlying GNSS model, and the speediness of the method, which is mainly related to the search strategy adopted.

Single-frequency, single-epoch success rates

The experimental success rate is defined as the percentage of occurrences that the computed integer solution is equal to the true integer vector. Table 1 shows the 2 m baseline, LAMBDA and C-LAMBDA, single-frequency, single-epoch (SF/SE) success rates as function of the number of satellites tracked and the phase and code noise levels (σϕ, σp).

Table 1 Simulation-based SF/SE success rates for LAMBDA and C-LAMBDA, as function of the number of satellites and code/phase noise levels

The C-LAMBDA method clearly provides much better results than its unconstrained version. The differences in success rate are particularly pronounced when the strength of the underlying GNSS model becomes weaker (fewer satellites and/or higher measurement noise).

Making use of the baseline constraint in these cases improves the success rate considerably. According to Table 1, already five satellites, with a code standard deviation of 30 cm and a phase standard deviation of 3 mm, give a higher than 70% success rate for C-LAMBDA. Understandably, the differences in success rate become less pronounced when the strength of the underlying GNSS model increases. For instance, with eight satellites and a phase and code precision of 3 mm and 5 cm, respectively, a close to 100% success rate is already achieved with the standard LAMBDA method.

Computational timing

An important aspect of GNSS ambiguity resolution is the speed with which the various computations can be performed. This is particularly relevant for applications that require (near) real-time results.

First, we consider the overall timing of our search and shrink procedure. It will be clear that for the efficiency of this procedure, it is important that one is able to set the size of the search space at an appropriate level, i.e. not too small and not too large. To guarantee that the search space is nonempty and that it thus includes the sought for integer minimizer, the size of the search space is set by taking \( \tilde{\chi }^{2} = F_{2} (\tilde{a} ) \) for some \( \tilde{a} \in {\mathbb{Z}}^{n} . \) We studied four different ways of choosing such \( \tilde{a} \): rounding the unconstrained float solution \( \hat{a} \) (R1) and rounding the constrained float solution \( \bar{a} \) (R2); bootstrapping the constrained float solution \( \bar{a} \) (B1) and bootstrapping the constrained float solution \( \bar{a}, \) using the Hessian matrix of F(a) as weight matrix, (B2). In all these four cases, we first applied a decorrelating Z-transformation before rounding or bootstrapping was done, see Teunissen (1995).

The timing results show that the speed of C-LAMBDA is close to that of standard LAMBDA, although a bit slower, as can be expected because of its increased complexity. The best timing performance was achieved with the R2 and the B2 method of setting the size of the search space. It followed that the enumeration and minimization step take the shortest time, while the shrinking process generally accounts for at least 60% of the total computational time, which on average was about 5–6 ms (MATLAB Windows environment on a 2.13 GHz Intel core 2 CPU) for all scenarios that achieved a larger than 99% C-LAMBDA success rate.

That the enumeration and minimization can be done so quickly is due to the successful performance of the shrinking process. It is the shrinking that allows one to finally work with so small search spaces. The mean number of enumerated integer vectors was very small (1.77 or less) for all the cases of five or more satellites and \( \varvec{\sigma}_{\phi } \le 3\,{\text{mm}},\varvec{\sigma}_{p} \le 15\,{\text{cm,}} \) while the maximum number of enumerated integer vectors was only 21. Thus, the number of integer vectors inside the shrunken search space is indeed very small in general, and it gets smaller as the strength of the underlying GNSS model gets larger (more satellites and/or lower noise).

Static experiment

Two independent static experiments were carried out to test the performance of the C-LAMBDA method with real-world data. In the first experiment, conducted in the Netherlands, the antennae of three Trimble receivers were placed in known formation above a known reference point in an obstacle-free environment. In the second experiment, conducted in Perth, Australia, six Sokkia antenna/receivers were placed along a straight line at known distances from one another. The multipath-sensitive environment of the second experiment also allowed us to test the robustness of the ambiguity resolution methods.

The Dutch experiment

Three Trimble receivers were used in the first experiment (see Fig. 1). One antenna (Trimble Zephyr Geodetic L1/L2 with ground plane) was placed above a known static reference point in the province of Limburg, the Netherlands. The other two antennas (Trimble Geodetic with ground plane) were placed in close proximity of the first and at a known fixed distance. The three antennas were connected to a Trimble R7 and two Trimble SSi (A and B) receivers. Data were collected at 1 Hz, with a zero cut-off elevation angle, between 10:44 and 13:29, UTC time, for a total of 9915 epochs logged.

Fig. 1
figure 1

Set-up of 1st static experiment (Netherlands): ground station with static 3-antennae configuration. The number of satellites tracked and PDOP values are plotted

Figure 1 also shows the number of satellites tracked and the PDOP. The number of tracked satellites equalled nine most of the time with a few drops to eight satellites. The PDOP was around two most of the time with a few excursions to values around three. Table 2 shows the success rates and the mean computational times obtained with the two LAMBDA methods. Both methods show the same order of computational efficiency, and they both produce high success rates. The mean computational times, as well as the time contributions of shrinking, enumeration and minimization, were found consistent with our findings from simulation. In fact, the shrinking process resulted, in all cases except one, in a search space containing only a single integer vector.

Table 2 SF/SE success rates and B2-based computational times for the ground station

As pointed out already, both LAMBDA methods show very high SF/SE success rates in Table 2. This is perhaps somewhat surprising for the unconstrained case. However, in the present case, this is due to the geometry and good data quality.

To analyse the robustness of the two methods against changing number of tracked satellites, we eliminated satellites from the data set and repeated the computations for varying number of tracked satellites. The results of Table 3 show that LAMBDA is significantly affected by the drop in number of tracked satellites. C-LAMBDA, on the other hand, maintains its excellent performance.

Table 3 SF/SE success rates for the three baselines as function of the number of used satellites

Table 4 shows, for each of the three baselines, the mean values and standard deviations for the ambiguity-resolved attitude angles (heading ψ and elevation θ). From Table 4, it follows that the elevation angles are determined with a somewhat lesser precision than the heading angles. This is due to the fact that the vertical baseline components are always of poorer precision than the horizontal baseline components (only satellites above the horizon are tracked). Also note that the observation differencing between different types of antennae/receivers resulted in higher noise levels: the angular estimate standard deviations on the baseline A-B were always smaller than the one relative to the baselines A-R7 and B-R7.

Table 4 Mean values and standard deviations of the GPS SF/SE derived, ambiguity resolved, (constant) attitude angles (heading ψ and elevation θ)

The Australian experiment

Our second static experiment took place on 31 August 2009 at the Bentley campus of Curtin University of Technology, Perth, Australia. Figure 2 shows the set-up: five baselines, with lengths of 0.6–1–2–5–10 m, were simultaneously measured with six receivers. The receiver positions were staked out in a straight line using a total station. The GNSS receivers used were Sokkia (GSR 2700 ISX) receivers, capable of tracking GPS and GLONASS satellites. Data were collected at 1 Hz, with a zero cut-off elevation angle, between 02:40 and 03:14, UTC time (2079) epochs. We only used the single-frequency L1 GPS measurements. Table 5 shows the single-frequency, single-epoch success rates for the five baselines. Again, C-LAMBDA was superior to LAMBDA, but this time, the difference between the two methods was much larger than in Table 2.

Fig. 2
figure 2

Set-up of 2nd static experiment (Australia), with the five baselines of varying length

Table 5 SF/SE success rates for the five baselines of the 2nd static experiment

The two reasons for this bigger difference are that in the current experiment, the geometry and data are of a lesser quality than of that used in Table 2. Let us first consider the influence of the geometry. Figure 3 shows the number of tracked satellites and the PDOP. Clearly, this situation is much less favourable than that of the Dutch experiment. To zoom in on the influence of satellite variability, we repeated the computations, as we did in the Dutch experiment, with a varying number of satellites used.

Fig. 3
figure 3

Second static experiment: number of tracked satellites and the PDOP for the five baselines

The results are given in Table 6. Again, we note that C-LAMBDA is far more robust against variability in number of tracked satellites than LAMBDA is. We also observe that instead of achieving an increase in success rate, a decrease in success rate is realized when changing from 6 to 7 satellites. The reason is a very pronounced presence of multipath from the moment the 7th satellite (PRN 32) was included. This is shown very clearly in the multipath time series of Fig. 4. Thus, instead of expecting an increase in success rate, a decrease was realized due to the severe multipath generated by the rise of the 7th satellite. Again, however, we note the robustness of the C-LAMBDA method. LAMBDA is much more affected by the presence of multipath than C-LAMBDA is.

Table 6 SF/SE success rates for the five baselines of the 2nd static experiment as function of the number of used satellites
Fig. 4
figure 4

Multipath time series of 2nd static experiment (multipath combination Mc = C1 − 4.092 L1 + 3.092 L2 for different satellites)

Ship experiment

We now demonstrate the performance of the C-LAMBDA method for data collected on a moving platform. The data were collected at 1 Hz, with a zero cut-off elevation angle, on board a vessel in the Netherlands (Schie river near Delft) and concerns therefore a baseline of which the orientation is relatively slowly changing. Details of the experiment can be found in Kechine et al. (2003). Two receivers (1 Leica SR530, 1 Ashtech Z12) were used, both connected to their own GPS antenna (Fig. 5). These two antennas form a baseline of 2 m. As the antennas are placed on their own mast, are using a choke-ring (Ashtech) or are survey grade (Leica AT502) and have a relatively free field-of-view, the impact of blocking and multipath on the observations is expected to be very small. Both receivers are of the surveying type providing very precise observations. Although dual-frequency observations are available for both receivers, only single-frequency, single-epoch (SF/SE) observations were used for the ambiguity resolution.

Fig. 5
figure 5

Vessel with Ashtech Z12 and Leica SR530 receivers and number of tracked satellites/PDOP

Figure 6 shows in the local East-North-Up frame the horizontal float coordinates x(t), y(t) of the baseline vector between the two antennas as function of time. From this figure, it is clear that the vessel moves four times up and down the same trajectory. Figure 6 also shows the float and fixed baseline solutions. The fixed solutions are positioned on a circle with a diameter twice the baseline length. The reference antenna is located at the origin, and the second antenna moving on a circle around the origin at a distance equal the baseline length. Their relative position only changes when the vessel makes a turn. The number of locked GPS satellites during the experiment is between 6 and 8, and the PDOP is between 2.2 and 4.2.

Fig. 6
figure 6

Ship experiment. Left: antennae baseline trajectory (x(t), y(t)) expressed in horizontal East-North coordinates as function of time. The duration of the experiment is 2.5 h. Right: Float (grey) and fixed (black) baseline solutions

Table 7 shows the overall success rate of the 2.5 h experiment, as well as the success rates per constant number of locked satellites (6, 7 or 8). C-LAMBDA clearly outperforms LAMBDA, and again we note that C-LAMBDA is much less sensitive to variations in the number of tracked satellites than LAMBDA is. The low six-satellite success rate of LAMBDA is not only due to the number of tracked satellites, but in this case also to the relatively poor geometry.

Table 7 Vessel SF/SE success rates: overall and per constant number of locked satellites

Aircraft experiment

In addition to the low-dynamics platform tests of the previous section, we also tested the single-frequency, single-epoch performance of C-LAMBDA on flights of a jet aircraft (Cessna Citation II).

The aircraft and flight

Our flight test was conducted with the Cessna Citation II aircraft of the Faculty of Aerospace Engineering, Delft University of Technology (see Fig. 7). The aircraft was equipped with three GNSS antennas: one on the body, approximately in the middle of the fuselage (dual frequency L1/L2), one on the wing and one on the nose (both single-frequency L1). The three antennas formed the body-nose baseline b1 and the body-wing baseline b2 (see Fig. 7). All three antennas were connected to a Septentrio PolaRx2@, logging data at 10 Hz for the entire duration of the flight. Data were collected on 1 November 2007, between 10:06 and 14:23, UTC time, resulting in a total of 154511 epochs logged.

Fig. 7
figure 7

The aircraft with antennae configuration

The aircraft flew from Amsterdam International Airport to the central part of the province of Limburg in the Netherlands, where it undertook a number of runs over our reference station (see Fig. 8). This allowed us to also collect dual-frequency GNSS relative navigation data. This precise relative navigation data of the aircraft with respect to the reference station has been analysed in Buist (2008). Here, it will also be used for attitude comparison purposes. During the test flight, we generally had good satellite tracking and good PDOP (8–9 satellites and average PDOP of 2).

Fig. 8
figure 8

Relative navigation set-up during experiment

Success rate and timing

First, we consider the computational speed of the algorithms. The computational times are still fast, although a bit longer than for the static ground station data of "Static experiment". The mean computational times (MATLAB Windows environment on 2.13 GHz Intel core 2 CPU) for baselines b1 and b2 were 7.7 and 7.5 ms for LAMBDA, and 31.9 and 19.4 ms for (B2) C-LAMBDA. The somewhat slower performance compared to the ground station data is due to the higher noise of the aircraft data. Also, the presence of multipath, particularly in baseline b1, slows the algorithms somewhat. The results are, however, still very fast, and we emphasize here that they are truly single-epoch processed, i.e. no external information nor information from past epochs has been used. Also, the time division between shrinking, enumeration and minimization was consistent with the previous experiments. Again, the minimization step was very fast due to the low number of integer vectors that remained in the shrunken search space, and in most cases, only one single integer vector remained.

Table 8 shows the success rates for both the standard and the constrained LAMBDA method. Note the large improvement the constrained LAMBDA method has over the unconstrained method. For both baselines, the success rate shows a large improvement. When compared to the static ground station data, the success rates are lower, which can again be explained by the higher noise levels and the presence of multipath in the aircraft data. In particular, the data of the nose-antenna suffered, thus reducing the success rate of b1. Nevertheless, the success rates of C-LAMBDA are impressive if one keeps in mind that they have been realized on a highly dynamic platform, using unaided, single-epoch processing of only single-frequency data.

Table 8 Aircraft SF/SE empirical success rates for the two baselines b1 and b2

Attitude comparison

We used two different and independent methods to compare the GPS-derived aircraft attitudes. With the first method, we made use of the precise relative positioning of the three aircraft antennas with respect to the ground station (see Fig. 8). The three (long) baselines from the aircraft antennae to the ground station can namely also be used to calculate the orientation of the aircraft. We used the unconstrained LAMBDA method to obtain the precise fixed solutions for these three baselines. In order to minimize the atmospheric influences, the baselines were only processed for relative distances up to 10 km. The aircraft attitudes obtained from this relative navigation approach compared very well with the direct GPS attitude determination results, and the differences mostly contained within 0.2 degree.

The aircraft was also equipped with an Inertial Navigation System (INS), a Honeywell Laseref II IRS (YG1782B). Its output was used as second method to compare our GPS-derived aircraft attitude results. The empirical standard deviations of the GPS-INS angular differences are given in Table 9. It shows the real-time angular accuracies that can be obtained for an aircraft using baseline constrained GPS ambiguity resolution.

Table 9 GPS SF/SE–INS attitude accuracy

Summary and conclusions

In this contribution, the performance of a new GNSS attitude determination method was analysed by means of extensive experimental testing. The method is a nontrivial modification of the standard LAMBDA method. In contrast to existing methods that make use of the known baseline length, our method does full justice to the given information by fully integrating the nonlinear baseline constraint into the ambiguity objective function. As a result, the a priori information receives a proper weighting in the ambiguity objective function, thus leading to higher success rates. Due to the non-ellipsoidal shape of the ambiguity search space, the method’s integer search is more complex than when using unconstrained ambiguity resolution methods. We have shown, however, that this increased complexity is not a hindrance for its numerical efficiency. Despite the fact that our code was not time-optimized, the search and shrink procedure, with the sharp bounding functions, was already capable of a very fast numerical performance.

Our method is generally applicable, i.e. to the current dual-frequency GPS as well as to the next generation, multi-frequency GNSSs (e.g., modernized GPS, Galileo, Beidou/Compass), whether they are used as stand-alone systems or in combination. We, however, focused our tests on its stand-alone, unaided, single-frequency, single-epoch performance, as this is the most challenging case for ambiguity resolution.

The method was tested, using simulated as well as actual GPS data. The simulations cover a large number of different measurement scenarios, where the impact of measurement precision and receiver-satellite geometry was analysed. Our field tests, with receivers of different manufacturers and type, cover two static land experiments, one in the Netherlands and one in Australia, and two dynamic experiments, a low-dynamics vessel experiment and a high-dynamics aircraft experiment.

All these tests show consistent results. They all show the method’s excellent single-frequency, single-epoch performance. The rigorous inclusion of the baseline length constraint into the ambiguity objective function shows dramatic improvements in the success rates. Additionally, it was demonstrated that this also resulted in quite an increase in robustness against multipath and receiver-satellite geometry changes. We believe, in analogy with the standard LAMBDA method, that it will be difficult to devise a method that, with the same information, is capable of achieving higher success rates than C-LAMBDA. Further improvements on the speediness of the method are, however, possible. In addition, further research is needed so as to be able to describe the probabilistic properties of the ambiguity-resolved parameters of the GNSS compass model, this in analogy with the existing theory of the unconstrained GNSS model (Teunissen 1997b, 2000, 2002).