1 Introduction

In the field of array signal processing, the problem of estimating two-dimensional direction of arrivals (2D-DOAs), namely, the azimuth and elevation angles, of narrowband signal sources by using planar arrays has always been a research hotspot [13]. The L-shaped array, which consists of two linear subarrays connected orthogonally at one end of each subarray, has advantages of simple structure and relatively high estimation accuracy [4] when compared with various planar array geometries, such as the parallel uniform linear array [5], the rectangular array [6], and the circular array [7]. Thus, 2D-DOA estimation using L-shaped array has received considerable attention [813]. Most previous researches exploit the rotational invariance of the uniform L-shaped array to estimate and pair the elevations and azimuths, such as propagator method (PM) [812], trilinear decomposition-based algorithm [13, 14], estimation of signal parameters via rotational invariance techniques (ESPRIT) [1517], high-order cumulant method [18] and so on. However, on the one hand, the algorithms mentioned above require the array to be shift-invariant. On the other hand, some of them [1318] impose constraints on the sensor spacing, which is limited to a half-wavelength strictly, to avoid phase ambiguities. Hence, they can be only used with uniformly-spaced L-shaped array whose spacing has to be restricted within a half-wavelength.

When considering the non-uniform L-shaped array, which is a more general condition in practice, the generalized ESPRIT (GESPRIT) algorithm [19] can be employed since it uses the idea of rank reduction and requires no shift-invariance properties. However, it may yield some ambiguous DOA estimation especially under low signal-to-noise ratio (SNR) or with a limited number of snapshots. Causes for the performance degradation have been analyzed in [20, 21] with improvements made correspondingly meanwhile. The joint elevation and azimuth direction finding (JEADF) algorithm [22] is an application of GESPRIT algorithm. It exploits both signal and noise subspaces by introducing a novel joint electric angle. However, it fails when multi targets share the equivalent electric angles [23] and can be used only when there is an equivalent number of the sensor along the two different directions of L-shaped array.

This aim of this paper is to employ GESPRIT algorithm for 2D-DOA estimation of multiple incoherent sources with non-uniform L-shaped array. The natural extension of GESPRIT algorithm for 2D-DOA estimation has poor performance under low SNRs or with a small number of snapshots, which will be proven in the simulation section. With reference to NGESPRIT algorithm [21], we exploit a 2D-NGESPRIT algorithm which can ensure the rank reduction and possesses better estimation performance with the same computational cost as 2D-GESPRIT algorithm. However, both the two algorithms mentioned above require a two-dimensional angular scanning which is highly time consuming for a dense angular grid. To reduce the computational complexity, we propose a successive GESPRIT (S-GESPRIT) algorithm, which firstly uses the elevation information embedded in the subarray along one direction of L-shaped array to start one-dimensional (1D) spectral peak searching for estimation of elevation and azimuth angles successively. Since the proposed S-GESPRIT algorithm needs 1D spectral search only, it has much lower complexity than the 2D-NESPRIT algorithm. It is demonstrated that the proposed algorithm outperforms the 2D-GESPRIT and 2D-PM [24] algorithms significantly. Compared with the 2D-NGESPRIT algorithm, it imposes very close 2D-DOA estimation performance. Furthermore, the proposed algorithm requires no additional pair matching and has no constraints on element spacing. The simulations are provided to verify the effectiveness and improvement of the proposed S-GESPRIT algorithm.

The reminder of this paper is organized as follows. In Sect. 2, the data model for a non-uniform L-shaped array is introduced. In Sect. 3, 2D-DOA estimation algorithms based on 2D-GESPRIT method are given. In Sect. 4, the successive GESPRIT (S-GESPRIT) algorithm is proposed and the related analysis is provided, including the computational complexity comparison between the proposed algorithm and the 2D-NESPRIT algorithm. In Sect. 5, we present the derivation of Cramer–Rao bound (CRB) for 2D-DOA estimation. Numerical simulation results are presented in Sect. 6, while the conclusions are drawn in Sect. 7.

Notation: Lower-case (upper-case) boldface symbols denote vectors (matrices). (·)T, (·)H, (·)−1 and (·)+ denote the operators of transpose, conjugate-transpose, inverse, and pseudo-inverse, respectively. diag{v} represents a diagonal matrix whose diagonal element is a vector v. angle(·) is to stake the phase angles of complex. det{·} is to take the determinant. ⊗, \( \circ \) and ⊙ represent the Kronecker product, Khatri–Rao product and Hadamard product, respectively. I p is a p × p identity matrix. E{·} denotes expectation operator. Re{·} and Im{·} are to get the real and the imaginary part of the complex.

2 Data Model

As shown in Fig. 1, we consider a L-shaped array which consists of two linear subarrays with M/N omnidirectional sensors on the z- and x-axes, respectively. The sensor placed at the origin is the reference one for each subarray. We let \( z_{m} ,x_{n} \left( {m = 1, \ldots ,M,\;n = 1, \ldots ,N} \right) \) denote the distance of the mth/nth sensor along the z- and x-axes from the origin, respectively and z 1 = x 1 = 0. In this work, the (n, m) th sensor stands for one with coordinate (x n , 0, z m ) and \( \left\{ {\begin{array}{*{20}c} {z_{m} = 0} & {\left( {n,m} \right) \in \left\{ {\left( {1,1} \right),\left( {2,1} \right), \ldots ,\left( {N,1} \right)} \right\}} \\ {x_{n} = 0} & {\left( {n,m} \right) \in \left\{ {\left( {1,1} \right),\left( {1,2} \right), \ldots ,\left( {1,M} \right)} \right\}} \\ \end{array} } \right. \). Assume there are K (K < M + N − 1) far-field, narrow-band and non-coherent signals impinging on the sensor array from distinct directions with the elevation and azimuth angles \( \theta_{k} ,\phi_{k} \), k = 1,…,K and \( \theta_{k} \in \left[ {0,\pi /2} \right],\phi_{k} \in \left[ {0,\pi } \right] \). Then after being sampled, the received signal of the (n, m)th sensor can be expressed as [5]

$$ x_{n,m} (t) = \sum\limits_{k = 1}^{K} {s_{k} (t)e^{{j2\pi (x_{n} \cos \phi_{k} \sin \theta_{k} + z_{m} \cos \theta_{k} )/\lambda }} } + n_{n,m} (t) $$
(1)

where s k (t) is signal associated with the kth wave front, t denotes the time index, λ stands for the wavelength and n n,m (t) denotes the additive white Gaussian noise with zero mean and variance σ 2.

Fig. 1
figure 1

The array configuration of non-uniform L-shaped array

The steering matrix of the two linear subarrays can be written as

$$ {\mathbf{A}}_{z} = \left[ {{\mathbf{a}}_{z} \left( {\theta_{1} ,\phi_{1} } \right), \ldots ,{\mathbf{a}}_{z} \left( {\theta_{K} ,\phi_{K} } \right)} \right] $$
(2)
$$ {\mathbf{A}}_{x} = \left[ {{\mathbf{a}}_{x} \left( {\theta_{1} ,\phi_{1} } \right), \ldots ,{\mathbf{a}}_{x} \left( {\theta_{K} ,\phi_{K} } \right)} \right] $$
(3)

where \( {\mathbf{a}}_{z} \left( {\theta_{k} ,\phi_{k} } \right) = \left[ {\nu_{M,k} , \ldots ,\nu_{1,k} } \right]^{T} \), \( {\mathbf{a}}_{x} \left( {\theta_{k} ,\phi_{k} } \right) = \left[ {\mu_{1,k} , \ldots ,\mu_{N,k} } \right]^{T} \), \( \nu_{m,k} = e^{{j\alpha_{k} z_{m} }} ,\mu_{n,k} = e^{{j\beta_{k} x_{n} }} \), \( \alpha_{k} = 2\pi \cos \theta_{k} /\lambda \) and \( \beta_{k} = 2\pi \cos \phi_{k} \sin \theta_{k} /\lambda \).

Then the received signal of each subarray can be given by

$$ {\mathbf{y}}_{z} (t) = {\mathbf{A}}_{z} {\mathbf{s}}(t) + {\mathbf{n}}_{z} (t) $$
(4)
$$ {\mathbf{y}}_{x} (t) = {\mathbf{A}}_{x} {\mathbf{s}}(t) + {\mathbf{n}}_{x} (t) $$
(5)

where \( {\mathbf{s}}(t) = \left[ {s_{1} (t), \ldots ,s_{K} (t)} \right]^{T} \), \( {\mathbf{n}}_{z} (t) = \left[ {n_{1M} (t), \ldots ,n_{1,1} (t)} \right]^{T} \), \( {\mathbf{n}}_{x} (t) = \left[ {n_{1,1} (t), \ldots ,n_{N,1} (t)} \right]^{T} \).

We assume the additive noise is statistically independent of the incident signals [11]. The number of incident sources K can be estimated easily with the method [2527] and is assumed to be known in this work.

3 Generalized ESPRIT Algorithm for Two-Dimensional Direction of Arrival (2D-DOA) Estimation

In this section, we will briefly introduce the two-dimensional GESPRIT (2D-GESPRIT) algorithm for joint elevation and azimuth angles estimation.

We let y(t) represent the received signal, which is given by

$$ {\mathbf{y}}(t) = \left[ {\begin{array}{*{20}c} {{\mathbf{y}}_{z} (t)} \\ {{\mathbf{y}}_{x} (t)} \\ \end{array} } \right] = {\bar{\mathbf{A}}\mathbf{s}}(t) + {\mathbf{n}}(t) $$
(6)

where \( {\bar{\mathbf{A}}} = \left[ {{\mathbf{A}}_{z}^{T} ,{\mathbf{A}}_{x}^{T} } \right]^{T} \) and \( {\mathbf{n}}(t) = \left[ {{\mathbf{n}}_{z}^{T} (t),{\mathbf{n}}_{x}^{T} (t)} \right]^{T} \).

To apply the generalized ESPRIT algorithm, we must use the correlation matrix \( {\mathbf{R}} = E\left\{ {{\mathbf{y}}(t){\mathbf{y}}^{H} (t)} \right\} \), which can be estimated by \( {\hat{\mathbf{R}}} = \frac{1}{L}\sum\nolimits_{l = 1}^{L} {{\mathbf{y}}\left( {t_{l} } \right){\mathbf{y}}^{H} \left( {t_{l} } \right)} \) in actual implementation, where L is the number of snapshots.

Using eigenvalue decomposition, \( {\hat{\mathbf{R}}} \) can be denoted by [1517]

$$ {\hat{\mathbf{R}}} = {\mathbf{E}}_{s} {\mathbf{D}}_{s} {\mathbf{E}}_{s}^{H} + {\mathbf{E}}_{n} {\mathbf{D}}_{n} {\mathbf{E}}_{n}^{H} $$
(7)

where D s denotes a K × K diagonal matrix formed by K largest eigenvalues, and D n denotes a diagonal matrix formed by remaining (M + N − 1 − K) smallest eigenvalues. E s is the matrix composed of the eigenvectors corresponding to the K largest eigenvalues. E n includes the remaining eigenvectors. E s and E n represent the signal subspace and noise subspace, respectively.

From traditional viewpoint of generalized ESPRIT [19], the whole array should be partitioned into two different subarrays (called Subarray 1 and Subarray 2) which possess an equivalent number of sensors. With loss of generality, as shown in Fig. 2, we choose the \( \left\{ {\left( {1,M} \right), \ldots ,\left( {1,1} \right),\left( {2,1} \right),\left( {3,1} \right), \ldots ,\left( {N - 1,1} \right)} \right\} \) sensors as Subarray 1 and \( \left\{ {\left( {1,M - 1} \right), \ldots ,\left( {1,1} \right),\left( {2,1} \right),\left( {3,1} \right), \ldots ,\left( {N,1} \right)} \right\} \) sensors as Subarray 2.

Fig. 2
figure 2

Subarry 1 and Subarray 2

Then we let \( {\bar{\mathbf{A}}}_{1} ,{\bar{\mathbf{A}}}_{2} \) denote each steering matrix of each subarray, which contains the first M + N − 1 and last M + N − 1 rows of \( {\bar{\mathbf{A}}} \), respectively. The kth column of \( {\bar{\mathbf{A}}}_{1} \) is \( {\mathbf{a}}_{1,k} = \left[ {\nu_{M,k} , \ldots ,\nu_{1,k} ,\mu_{1,k} , \ldots ,\mu_{N - 1,k} } \right]^{T} \) and we obtain

$$ {\bar{\mathbf{A}}}_{2} = \left[ {{\mathbf{Q}}_{1} {\mathbf{a}}_{1,1} , \ldots ,{\mathbf{Q}}_{K} {\mathbf{a}}_{1,K} } \right] $$
(8)

where \( {\mathbf{Q}}_{k} = diag\left\{ {\nu_{M - 1,k}^{\prime } , \ldots ,\nu_{1,k}^{\prime } ,1,\mu_{2,k}^{\prime } , \ldots ,\mu_{N,k}^{\prime } } \right\} \) and \( \nu_{{m^{\prime } ,k}}^{\prime } = e^{{j\left( {z_{{m^{\prime } }} - z_{{m^{\prime } + 1}} } \right)\alpha_{k} }} \), \( \mu_{{n^{\prime } ,k}}^{\prime } = e^{{j\left( {x_{{n^{\prime } }} - x_{{n^{\prime } - 1}} } \right)\beta_{k} }} \) and \( m^{\prime } = 1, \ldots ,M - 1,n^{\prime } = 2, \ldots ,N \).

Since the sources are non-coherent, there is a unique, non-singular K × K matrix T satisfying

$$ {\mathbf{E}}_{1} = {\bar{\mathbf{A}}}_{1} {\mathbf{T}},{\mathbf{E}}_{2} = {\bar{\mathbf{A}}}_{2} {\mathbf{T}} $$
(9)

where E 1, E 2 represent the signal subspaces of Subarray 1 and Subarray 2, which contain the first M + N − 1 and last M + N − 1 rows of E s respectively.

We define \( {\varvec{\Omega}}\left( {\theta ,\phi } \right) = diag\left\{ {\varOmega_{M - 1} , \ldots ,\varOmega_{1} ,1,\varOmega_{2}^{\prime } , \ldots ,\varOmega_{N}^{\prime } } \right\} \), where \( \varOmega_{{m^{\prime } }} = e^{{j\left( {z_{{m^{\prime } }} - z_{{m^{\prime } + 1}} } \right)\alpha }} ,\varOmega_{{n^{\prime } }}^{{^{\prime } }} = e^{{j\left( {x_{{n^{\prime}}} - x_{{n^{\prime } - 1}} } \right)\beta }} \), \( m^{\prime } = 1, \ldots ,M - 1 \), \( n^{\prime } = 2, \ldots ,N \) and \( \alpha = 2\pi \cos \theta /\lambda ,\beta = 2\pi \cos \phi \sin \theta /\lambda \). And define [19]

$$ {\mathbf{P}}\left( {\theta ,\phi } \right) = {\mathbf{E}}_{2} - {\varvec{\Omega}}\left( {\theta ,\phi } \right){\mathbf{E}}_{1} = {\mathbf{F}}\left( {\theta ,\phi } \right){\mathbf{T}} $$
(10)

where \( {\mathbf{F}}\left( {\theta ,\phi } \right) = \left[ {\left( {{\mathbf{Q}}_{1} - {\varvec{\Omega}}\left( {\theta ,\phi } \right)} \right){\mathbf{a}}_{1,1} , \ldots ,\left( {{\mathbf{Q}}_{K} - {\varvec{\Omega}}\left( {\theta ,\phi } \right)} \right){\mathbf{a}}_{1,K} } \right] \).

When \( \left( {\theta ,\phi } \right) = \left( {\theta_{k} ,\phi_{k} } \right)\text{, }\left( {k = 1, \ldots ,K} \right) \), the kth column of \( {\mathbf{F}}\left( {\theta ,\phi } \right) \) becomes equal to zero and the left side of (10), i.e., \( {\mathbf{P}}\left( {\theta ,\phi } \right) \), will drop rank. Using the idea, we can form a M × K full column rank matrix W which makes \( {\mathbf{W}}^{H} {\mathbf{P}}\left( {\theta ,\phi } \right) \) drop rank when \( \left( {\theta ,\phi } \right) = \left( {\theta_{k} ,\phi_{k} } \right) \). To make our algorithm consistent with the conventional ESPRIT algorithm, W = E 1 is chosen [19].

Till now, the joint elevation and azimuth angle estimation problem can be converted into a 2D-spectrum peak searching problem, which is given by

$$ f_{{2D{ - }GESPRIT}} \left( {\theta ,\phi } \right) = \frac{1}{{\det \left\{ {{\mathbf{E}}_{1}^{H} {\mathbf{P}}\left( {\theta ,\phi } \right)} \right\}}}\quad \theta \in \left[ {0,\pi /2} \right],\phi \in \left[ {0,\pi } \right] $$
(11)

As demonstrated in [21], the rank reduction of \( {\mathbf{E}}_{1}^{H} {\mathbf{P}}\left( {\theta ,\phi } \right) \) cannot be ensured and the spectrum (11) may produce ambiguous DOA estimates. Consequently, in actual implementation, when SNR is low or the number of snapshots is small [21], the GESPRIT performs poorly. NGESPRIT algorithm [21], which is for 1D-DOA estimation, can ensure the rank reduction and improve the estimation performance. Here we extend it to the 2D-DOA estimation case and derive a new 2D-NGESPRIT algorithm with a new spatial spectrum function

$$ f_{{2D{ - }NGESPRIT}} \left( {\theta ,\phi } \right) = \frac{1}{{\det \left\{ {{\mathbf{P}}^{H} \left( {\theta ,\phi } \right){\mathbf{P}}\left( {\theta ,\phi } \right)} \right\}}}\quad \theta \in \left[ {0,\pi /2} \right],\phi \in \left[ {0,\pi } \right] $$
(12)

In Sect. 5, we will compare the performance of the 2D-GESPRIT and 2D-NGESPRIT algorithms through simulation results and demonstrate that 2D-NESPRIT algorithm has a superior estimation performance. Notably, the 2D-NGESPRIT algorithm still needs an exhaustive 2D spectral peak search, which needs high computational cost and large memory capacity. Aiming at this weakness, we propose a successive GESPRIT (S-GESPRIT) algorithm, which needs 1D spectral searches only and can reduce the computational complexity to a large extent.

4 The Proposed Successive GESPRIT (S-GESPRIT) Algorithm

When dealing with such a scenario like multi-dimensional parameter estimation, the successive idea can be exploited to reduce the computational complexity. The existing applications contain angle estimation in multiple-input multiple-output (MIMO) radar [28], acoustic vector-sensor array [29] and joint estimation of time of arrival (TOA) and DOA in the impulse radio ultra wideband (IR-UWB) System [30]. The proposed successive GESPRIT (S-GESPRIT) algorithm can be seen as a combination of successive idea and GESPRIT algorithms and keeps both advantages, which are significant complexity reduction and low requirement for array geometry, respectively. In the proposed algorithm, we firstly use the elevation angles information embedded in the sensors along the z-axis to obtain the initial elevation estimation and convert the 2D-GESPRIT spectral search into multiple 1D searches for azimuth and elevation angles in succession. The S-GESPRIT algorithm avoids the 2D spectral peak searching, saves calculating workload and needs no additional pair matching procedure. Note, as far as we know, the S-GESPRIT algorithm has not been reported openly up to now.

4.1 The Initial Elevation Angles Estimation

Notably, the phase parameter of A z , which is the steering matrix of the subarray along the z-axis, relates to the elevation angles only and is independent of the azimuth angles. Thus we can firstly exploit the 1D-GESPRIT algorithm to obtain the initial estimates of the elevation angles with the received signal of z-axis.

To make full use of the received signal, we choose the first and last M-1 sensors along the z-axis as Subarray Z1 and Subarray Z2 as shown in Fig. 3, which respectively contain the \( \left\{ {\left( {1,2} \right), \ldots ,\left( {1,M} \right)} \right\} \) and \( \left\{ {\left( {1,1} \right), \ldots ,\left( {1,M - 1} \right)} \right\} \) sensors. The 1D spectrum function for the initial elevation angles estimation is given by

$$ f_{\text{Z}} (\theta ) = \frac{1}{{\det \left\{ {{\mathbf{U}}_{\text{Z}}^{H} \left( \theta \right){\mathbf{U}}_{\text{Z}} (\theta )} \right\}}}\quad \theta \in \left[ {0,\pi /2} \right] $$
(13)

where \( {\mathbf{U}}_{\text{Z}} \left( \theta \right)\varvec{ = }{\mathbf{E}}_{{{\text{Z}}2}} - {\varvec{\Omega}}_{\text{Z}} \left( \theta \right){\mathbf{E}}_{{{\text{Z}}1}} \), \( {\varvec{\Omega}}_{\text{Z}} \left( \theta \right) = diag\left\{ {\varOmega_{M - 1} , \ldots ,\varOmega_{1} } \right\} \) and \( {\mathbf{E}}_{{{\text{Z}}1}}^{{}} ,{\mathbf{E}}_{{{\text{Z}}2}}^{{}} \) are the corresponding signal subspaces of Subarray Z1 and Subarray Z2 which are formed by the 1 ~ (M − 1) and 2 ~ M rows of E s . We can obtain the initial estimation of elevation angles \( \left\{ {\theta_{k}^{ini} } \right\},k = 1, \ldots ,K \) by finding K peaks of (13) for K targets.

Fig. 3
figure 3

Subarray Z1 and Subarray Z2

4.2 The 2D-DOA Estimation in Succession

With the initial estimation of elevation angles \( \left\{ {\theta_{k}^{ini} } \right\},k = 1, \ldots ,K \), we can obtain the estimation of azimuth angle of the kth target, i.e., \( \left\{ {\hat{\phi }_{k}^{{}} } \right\} \) by keeping the kth elevation angle fixed to \( \theta_{k}^{ini} \) in (12) and searching the peak of the following 1D spectrum globally

$$ f_{azi} \left( \phi \right) = \frac{1}{{\det \left\{ {{\mathbf{P}}^{H} \left( {\theta ,\phi } \right){\mathbf{P}}\left( {\theta ,\phi } \right)} \right\}}}\quad \phi \in \left[ {0,\pi } \right],\theta = \theta_{k}^{ini} $$
(14)

Using the spectrum function shown in (15), the elevation angles \( \hat{\theta }_{k} \) can be estimated by locally searching within \( \left[ {\theta_{k}^{ini} - \Delta \theta ,\theta_{k}^{ini} + \Delta \theta } \right] \), where \( \Delta \theta \) is a small value

$$ f\left( \theta \right) = \frac{1}{{\det \left\{ {{\mathbf{P}}^{H} \left( {\theta ,\phi } \right){\mathbf{P}}\left( {\theta ,\phi } \right)} \right\}}}\quad \theta \in \left[ {\theta_{k}^{ini} - \Delta \theta ,\theta_{k}^{ini} + \Delta \theta } \right],\phi = \hat{\phi }_{k} $$
(15)

To sum up, the major steps of S-GESPRIT algorithm for 2D-DOA estimation with non-uniform L-shaped array can be concluded as follows:

  1. 1.

    Compute the covariance matrix \( {\hat{\mathbf{R}}} \) and obtain the signal subspace E s .

  2. 2.

    Take the signal subspace \( {\mathbf{E}}_{{{\text{Z}}1}} ,{\mathbf{E}}_{{{\text{Z}}2}} \) corresponding to Subarray Z1 and Subarray Z2, compute the initial elevation angles estimation \( \left\{ {\theta_{k}^{ini} } \right\},k = 1, \ldots ,K \) by finding the spectral peak of (13) globally within \( \left[ {0,\pi /2} \right] \).

  3. 3.

    Substitute the elevation estimates into the 2D spectrum function (12) and calculate the corresponding azimuth estimates \( \left\{ {\hat{\phi }_{k}^{{}} } \right\},k = 1, \ldots ,K \) through (14) using 1D global spectral peak searching within \( \left[ {0,\pi } \right] \).

  4. 4.

    Obtain the elevation estimates \( \left\{ {\hat{\theta }_{k}^{{}} } \right\},k = 1, \ldots ,K \) via 1D local spectral search (15) within \( \left[ {\theta_{k}^{ini} - \Delta \theta ,\theta_{k}^{ini} + \Delta \theta } \right] \), where Δθ is a small value.

4.3 Complexity Analysis

The computational complexity of the 2D-GESPRIT and the S-GESPRIT algorithms are analyzed simply as following, where we consider chiefly on the complex multiplication, which is the major computation in the GESPRIT-based algorithms. Notably, the 2D-GESPRIT and 2D-NGESPRIT algorithms have the same computational complexity.

In S-GESPRIT algorithm, the spectral search of initial elevation estimation and azimuth estimation are global searches within \( \left[ {0,\pi /2} \right] \) and \( \left[ {0,\pi } \right] \), respectively and the spectral search of elevation estimation is a local search within \( \left[ {\theta_{k}^{ini} - \Delta \theta ,\theta_{k}^{ini} + \Delta \theta } \right] \), where Δθ is a small value. In 2D-NGESPRIT algorithm, the spectral search of elevation and azimuth estimation are both global searches in \( \left[ {0,\pi /2} \right] \) and \( \left[ {0,\pi } \right] \). It is assumed that the times of global searches within \( \left[ {0,\pi /2} \right] \) and \( \left[ {0,\pi } \right] \) are u and v, respectively, which means the search interval is partitioned into u and v equal sections and conduct u and v searches according to this angular grid. The time of local search within \( \left[ {\theta_{k}^{ini} - \Delta \theta ,\theta_{k}^{ini} + \Delta \theta } \right] \) is denoted by q, where q is normally less than u and v.

For the sake of convenience, we denote M + N by H. Computing the covariance matrix and eigenvalue-decomposition in both algorithms cost \( O\left\{ {H^{2} \left( {H + L} \right)} \right\} \). The 2D-search of spectral peak in 2D-NGESPRIT needs \( O\left\{ {uv\left( {\left( {H - 1} \right)^{2} K + \left( {H - 1} \right)K^{2} + K^{3} } \right)} \right\} \), while in S-GESPRIT algorithm, the initial elevation angle estimation costs \( O\left\{ {u\left( {\left( {M - 1} \right)^{2} K + \left( {M - 1} \right)K^{2} + K^{3} } \right)} \right\} \) and the azimuth and elevation estimation require \( O\left\{ {v\left( {H - 1} \right)^{2} K^{2} + 2v\left( {H - 1} \right)K^{3} + vK^{4} } \right\} \) and \( O\left\{ {q\left( {H - 1} \right)^{2} K^{2} + 2q\left( {H - 1} \right)K^{3} } \right.\left. { + qK^{4} } \right\} \), respectively.

To sum up, the 2D-NGESPRIT algorithm requires \( O\left\{ {uv\left( {H - 1} \right)^{2} K + uv\left( {H - 1} \right)K^{2} + uvK^{3} } \right. \) \( \left. { + H^{2} \left( {H + L} \right)} \right\} \) totally, while the S-GESPRIT algorithm needs \( O\left\{ {H^{2} \left( {H + L} \right) + u\left( {M - 1} \right)^{2} K + \left( {u\left( {M - 1} \right) + \left( {v + q} \right)\left( {H - 1} \right)} \right)K^{2} + \left( {u + 2\left( {v + q} \right)\left( {H - 1} \right)} \right)K^{3} + \left( {v + q} \right)K^{4} } \right\} \), where q is normally less than u and v.

Figure 4 shows the simulations for complexity comparison. On the left side, we assume M = N=10, K = 2, L = 100, q = 200 and both u and v increase from 5000 to 10,000 and on the right side, the parameters are set to be N = 10, K = 2, L = 100, u = v = 5000, q = 200 and M increases from 5 to 20. It is straightforward to obtain that our proposed algorithm has much lower computational cost than the conventional 2D-GESPRIT algorithm. With the search times increasing, the superiority will be more distinct.

Fig. 4
figure 4

Computational complexity of 2D-GESPRIT and S-GESPRIT algorithm versus search times and the number of sensors

4.4 Discussion

Since the initialization procedure is directly related to the estimation accuracy of the proposed algorithm, the value of M and N have significant effects on the performance. It is straightforward to find that the aforementioned S-GESPRIT algorithm performs better when M > N. When there is a L-shaped array with more sensors along the x-axis, we herein propose an approach using the received signal from sensors along the x-axis for initialization based on the same successive idea.

We let \( \varphi_{k} \) denote the angles from x-axis to the direction of the kth source, respectively and note that \( \cos \varphi_{k} = \cos \phi_{k} \sin \theta_{k} \). When N > M, we can use the received signal from x-axis for better initial estimation. In this case, the angular parameter we estimate firstly is \( \left\{ {\varphi_{k} } \right\},k = 1, \ldots ,K \). The estimation step is compactly presented as following.

Select the first and last N − 1 sensors along the x-axis as Subarray X1 and Subarray X2, which respectively contain the \( \left\{ {\left( {1,1} \right), \ldots ,\left( {N - 1,1} \right)} \right\} \) and \( \left\{ {\left( {2,1} \right), \ldots ,\left( {N,1} \right)} \right\} \) sensors. The corresponding signal subspaces are denoted as E X1, E X2. The cost function for initial \( \left\{ {\hat{\varphi }_{k}^{ini} } \right\},k = 1, \ldots ,K \) estimation is

$$ f_{\text{X}} \left( \varphi \right) = \frac{1}{{\det \left\{ {{\mathbf{U}}_{\text{X}}^{H} \left( \varphi \right){\mathbf{U}}_{\text{X}} \left( \varphi \right)} \right\}}}\quad \varphi \in \left[ {0,\pi } \right] $$
(16)

where \( {\mathbf{U}}_{\text{X}} \left( \varphi \right)\varvec{ = }{\mathbf{E}}_{{{\text{X}}2}} - {\varvec{\Omega}}_{\text{X}} \left( \varphi \right){\mathbf{E}}_{{{\text{X}}1}} \), \( {\varvec{\Omega}}_{\text{X}} \left( \varphi \right) = diag\left\{ {\varOmega_{2}^{\prime \prime } , \ldots ,\varOmega_{N}^{\prime \prime } } \right\} \), \( \varOmega_{{n^{\prime } }}^{\prime \prime } = e^{{j\left( {x_{{n^{\prime } }} - x_{{n^{\prime } - 1}} } \right)\gamma }} ,n^{\prime } = 2, \ldots ,N \) and \( \gamma = 2\pi \cos \varphi /\lambda \).

Then we estimate the kth elevation angle \( \hat{\theta }_{k} \) via spectrum

$$ f_{ele} \left( \theta \right) = \frac{1}{{\det \left\{ {{\mathbf{B}}^{H} \left( {\theta ,\varphi } \right){\mathbf{B}}\left( {\theta ,\varphi } \right)} \right\}}}\text{ }\phi \in \left[ {0,\frac{\pi }{2}} \right],\varphi = \varphi_{k}^{ini} $$
(17)

where \( {\mathbf{B}}\left( {\theta ,\varphi } \right) = {\mathbf{E}}_{s2} - {\mathbf{\rm O}}\left( {\theta ,\varphi } \right){\mathbf{E}}_{s1} \), \( {\mathbf{\rm O}}\left( {\theta ,\phi } \right) = diag\left\{ {\varOmega_{M - 1} , \ldots ,\varOmega_{1} ,1,\varOmega_{2}^{\prime \prime } , \ldots ,\varOmega_{N}^{\prime \prime } } \right\} \), \( \varOmega_{{m^{\prime } }} = e^{{j\left( {z_{{m^{\prime } }} - z_{{m^{\prime } + 1}} } \right)\alpha }} \), \( \varOmega_{{n^{\prime } }}^{\prime \prime } = e^{{j\left( {x_{{n^{\prime } }} - x_{{n^{\prime } - 1}} } \right)\gamma }} \), \( m^{\prime } = 1, \ldots ,M - 1 \), \( n^{\prime } = 2, \ldots ,N \) and \( \alpha = 2\pi \cos \theta /\lambda ,\gamma = 2\pi \cos \varphi /\lambda \).

More accurate \( \left\{ {\hat{\varphi }_{k} } \right\},k = 1, \ldots ,K \) estimation can be obtained by finding the value which maximizes the following cost function within \( \left[ {\varphi_{k}^{ini} - \Delta \varphi ,\varphi_{k}^{ini} + \Delta \varphi } \right] \)

$$ f\left( \varphi \right) = \frac{1}{{\det \left\{ {{\mathbf{B}}^{H} \left( {\theta ,\varphi } \right){\mathbf{B}}\left( {\theta ,\varphi } \right)} \right\}}}\quad \varphi \in \left[ {\varphi_{k}^{ini} - \Delta \varphi ,\varphi_{k}^{ini} + \Delta \varphi } \right],\theta = \hat{\theta }_{k} $$
(18)

where \( \Delta \varphi \) is a small value.

Then the azimuth angles \( \left\{ {\hat{\phi }_{k}^{{}} } \right\} \) can be estimated by

$$ \hat{\phi }_{k} = \arccos \left( {\cos \hat{\varphi }_{k} /\sin \hat{\theta }_{k} } \right) $$
(19)

Through the approach mentioned above, when there are more sensors along the x-axis, the S-GESPRIT algorithm can also perform closely to the 2D-NGESPRIT algorithm and will be proven in Fig. 8 in the simulations.

We compactly conclude the advantages of the proposed S-GESPRIT algorithm as follows:

  1. 1.

    It only needs 1D spectral peak searching for 2D-DOA estimation and has much lower complexity than the conventional 2D-GESPRIT algorithm, which has be shown in detail in Fig. 4.

  2. 2.

    It has very close performance of 2D-DOA estimation to the 2D-NGESPRIT algorithm, which will be proved in Figs. 7 and 8.

  3. 3.

    It can obtain the automatically paired elevation and azimuth angle estimation.

  4. 4.

    It can be suitable for non-uniform L-shaped array and has no constraints on the sensor spacing.

5 Cramer–Rao Bound (CRB)

We assume that the signal s(t) is deterministic, and then estimation parameter vector is expressed as [31]

$$ {\varvec{\upzeta}} = \left[ {\theta_{1} , \ldots ,\theta_{K} ,\phi_{1} , \ldots ,\phi_{K} ,\text{Re} \{ s(t_{1} )\} , \ldots ,\text{Re} \{ s(t_{L} )\} ,\text{Im} \{ s(t_{1} )\} , \ldots ,\text{Im} \{ s(t_{L} )\} ,\sigma^{2} } \right]^{T} $$
(20)

From [31], we know that the (i, j) element of the CRB matrix (P cr ) for \( {\varvec{\upzeta}} \) can be expressed as

$$ \left[ {{\mathbf{P}}_{cr}^{ - 1} } \right]_{ij} = tr\left[ {{\varvec{\Gamma}}^{ - 1} {\varvec{\Gamma}}_{i}^{\prime } {\varvec{\Gamma}}^{ - 1} {\varvec{\Gamma}}_{j}^{\prime } } \right] + 2\text{Re} \left[ {{\varvec{\upmu}}_{j}^{{\prime {\rm H}}} {\varvec{\Gamma}}^{ - 1} {\varvec{\upmu}}_{j}^{\prime } } \right] $$
(21)

where \( {\varvec{\Gamma}}_{i}^{\prime } \), \( {\varvec{\Gamma}}_{j}^{\prime } \) and \( {\varvec{\upmu}}_{i}^{\prime } \), \( {\varvec{\upmu}}_{j}^{\prime } \) are the derivatives of Γ and μ on the ith or jth element of \( {\varvec{\upzeta}} \), respectively. tr[·] is to get the trace. The covariance matrix is just related to σ 2, so the first part of (21) can be ignored. Then the (i, j) element of the CRB matrix (P cr ) can be rewritten as

$$ \left[ {{\mathbf{P}}_{cr}^{ - 1} } \right]_{ij} = 2\text{Re} \left[ {{\varvec{\upmu}}_{i}^{\prime H} {\varvec{\Gamma}}^{ - 1} {\varvec{\upmu}}_{j}^{\prime } } \right] $$
(22)

The mean μ and the covariance matrix Γ of Y are

$$ {\varvec{\upmu}} = \left[ {\begin{array}{*{20}c} {{\bar{\mathbf{A}}\mathbf{s}}\left( {t_{1} } \right)} \\ \vdots \\ {{\bar{\mathbf{A}}\mathbf{s}}\left( {t_{L} } \right)} \\ \end{array} } \right]= {\mathbf{GS}},{\varvec{\Gamma}} = \left[ {\begin{array}{*{20}c} {\sigma^{2} {\mathbf{I}}_{M + N} } & {} & 0 \\ {} & \ddots & {} \\ 0 & {} & {\sigma^{2} {\mathbf{I}}_{M + N} } \\ \end{array} } \right] $$
(23)

where \( {\mathbf{G}} = \left[ {\begin{array}{*{20}c} {{\bar{\mathbf{A}}}} & {} & 0 \\ {} & \ddots & {} \\ 0 & {} & {{\bar{\mathbf{A}}}} \\ \end{array} } \right] \), \( {\mathbf{S}} = \left[ {\begin{array}{*{20}c} {{\mathbf{s}}\left( {t_{1} } \right)} \\ \vdots \\ {{\mathbf{s}}\left( {t_{L} } \right)} \\ \end{array} } \right] \).

It is straightforward to obtain \( \frac{{\partial {\varvec{\upmu}}}}{{\partial {\bar{\mathbf{s}}}^{T} }} = {\mathbf{G}} \), \( \frac{{\partial {\varvec{\upmu}}}}{{\partial {\tilde{\mathbf{s}}}^{T} }} = j{\mathbf{G}} \) and

$$ \frac{{\partial {\varvec{\upmu}}_{k} }}{{\theta_{k} }} = \left[ {\begin{array}{*{20}c} {\frac{{\partial {\mathbf{a}}\left( {\theta_{k} ,\phi_{k} } \right)}}{{\partial \theta_{k} }}{\mathbf{s}}\left( {t_{1} } \right)} \\ \vdots \\ {\frac{{\partial {\mathbf{a}}\left( {\theta_{k} ,\phi_{k} } \right)}}{{\partial \theta_{k} }}{\mathbf{s}}\left( {t_{J} } \right)} \\ \end{array} } \right] = \left[ {\begin{array}{*{20}c} {{\mathbf{d}}_{k,\theta } {\mathbf{s}}_{k} \left( {t_{1} } \right)} \\ \vdots \\ {{\mathbf{d}}_{k,\theta } {\mathbf{s}}_{k} \left( {t_{J} } \right)} \\ \end{array} } \right],{\kern 1pt} \quad k = 1, \ldots ,K $$
(24)
$$ \frac{{\partial {\varvec{\upmu}}_{k} }}{{\phi_{k} }} = \left[ {\begin{array}{*{20}c} {\frac{{\partial {\mathbf{a}}\left( {\theta_{k} ,\phi_{k} } \right)}}{{\partial \phi_{k} }}{\mathbf{s}}\left( {t_{1} } \right)} \\ \vdots \\ {\frac{{\partial {\mathbf{a}}\left( {\theta_{k} ,\phi_{k} } \right)}}{{\partial \phi_{k} }}{\mathbf{s}}\left( {t_{J} } \right)} \\ \end{array} } \right] = \left[ {\begin{array}{*{20}c} {{\mathbf{d}}_{k,\phi } {\mathbf{s}}_{k} \left( {t_{1} } \right)} \\ \vdots \\ {{\mathbf{d}}_{k,\phi } {\mathbf{s}}_{k} \left( {t_{J} } \right)} \\ \end{array} } \right],\quad {\kern 1pt} k = 1, \ldots ,K $$
(25)

where \( {\mathbf{a}}\left( {\theta_{k} ,\phi_{k} } \right) \) is the kth column of \( {\bar{\mathbf{A}}} \), \( {\mathbf{d}}_{k,\theta } = \frac{{\partial {\mathbf{a}}\left( {\theta_{k} ,\phi_{k} } \right)}}{{\partial \theta_{k} }} \), \( {\mathbf{d}}_{k,\phi } = \frac{{\partial {\mathbf{a}}\left( {\theta_{k} ,\phi_{k} } \right)}}{{\partial \phi_{k} }} \) and s k (t) is the kth element of s(t).

Define

$$ {\varvec{\Delta}} = \left[ {\begin{array}{*{20}c} {{\mathbf{d}}_{1,\theta } {\mathbf{s}}_{1} \left( {t_{1} } \right)} & \cdots & {{\mathbf{d}}_{K,\theta } {\mathbf{s}}_{K} \left( {t_{1} } \right)} \\ \vdots & \ddots & \vdots \\ {{\mathbf{d}}_{1,\theta } {\mathbf{s}}_{1} \left( {t_{J} } \right)} & \cdots & {{\mathbf{d}}_{K,\theta } {\mathbf{s}}_{K} \left( {t_{J} } \right)} \\ \end{array} \text{ }\begin{array}{*{20}c} {{\mathbf{d}}_{1,\phi } {\mathbf{s}}_{1} \left( {t_{1} } \right)} & \cdots & {{\mathbf{d}}_{K,\phi } {\mathbf{s}}_{K} \left( {t_{1} } \right)} \\ \vdots & \ddots & \vdots \\ {{\mathbf{d}}_{1,\phi } {\mathbf{s}}_{1} \left( {t_{J} } \right)} & \cdots & {{\mathbf{d}}_{K,\phi } {\mathbf{s}}_{K} \left( {t_{J} } \right)} \\ \end{array} } \right] $$
(26)

Now we have

$$ \frac{{\partial {\varvec{\upmu}}}}{{\partial {\varvec{\upzeta}}^{T} }} = \left[ {{\varvec{\Delta}},{\mathbf{G}},j{\mathbf{G}},0} \right] $$
(27)

According to (27)

$$ 2\text{Re} \left\{ {\frac{{\partial {\varvec{\upmu}}^{H} }}{{\partial {\varvec{\upzeta}}}}{\varvec{\Gamma}}^{ - 1} \frac{{\partial {\varvec{\upmu}}}}{{\partial {\varvec{\upzeta}}^{T} }}} \right\} = \left[ {\begin{array}{*{20}c} {\mathbf{J}} & 0 \\ 0 & 0 \\ \end{array} } \right] $$
(28)

where

$$ {\mathbf{J}} = \frac{2}{{\sigma^{2} }}\text{Re} \left\{ {\left[ {\begin{array}{*{20}c} {{\varvec{\Delta}}^{H} } \\ {{\mathbf{G}}^{H} } \\ {{\mathbf{ - }}j{\mathbf{G}}^{H} } \\ \end{array} } \right]\left[ {\begin{array}{*{20}c} {\varvec{\Delta}} & {\mathbf{G}} & {j{\mathbf{G}}} \\ \end{array} } \right]} \right\} $$
(29)

We only consider the part of CRB which is corresponding to the elevation and azimuth angles in J −1 and define

$$ {\mathbf{B = }}({\mathbf{G}}^{H} {\mathbf{G}})^{ - 1} {\mathbf{G}}^{H} {\varvec{\Delta}} $$
(30)
$$ {\mathbf{V}} = \left[ {\begin{array}{*{20}c} {\mathbf{I}} & 0 & 0 \\ { - {\bar{\mathbf{B}}}} & {\mathbf{I}} & 0 \\ { - {\tilde{\mathbf{B}}}} & 0 & {\mathbf{I}} \\ \end{array} } \right] $$
(31)

where \( {\bar{\mathbf{B}}} = \text{Re} \{ {\mathbf{B}}\} \) and \( {\tilde{\mathbf{B}}} = \text{Im} \{ {\mathbf{B}}\} \). B −1 exists since A H A is nonsingular.

According to [31], we obtain

$$ \left[ {\begin{array}{*{20}c} {\varvec{\Delta}} & {\mathbf{G}} & {j{\mathbf{G}}} \\ \end{array} } \right]{\mathbf{V}} = \left[ {\begin{array}{*{20}c} {({\varvec{\Delta}} - {\mathbf{GB}})} & {\mathbf{G}} & {j{\mathbf{G}}} \\ \end{array} } \right] = \left[ {\begin{array}{*{20}c} {\prod_{{\mathbf{G}}}^{{ \bot }} {\varvec{\Delta}}} & {\mathbf{G}} & {j{\mathbf{G}}} \\ \end{array} } \right] $$
(32)

where \( {\varvec{\Pi}}_{{\mathbf{G}}}^{{ \bot }} = {\mathbf{I}} - {\mathbf{G}}({\mathbf{G}}^{H} {\mathbf{G}})^{ - 1} {\mathbf{G}}^{H} \) is the orthogonal projection operator of G H onto null space and \( {\mathbf{G}}^{H} \prod_{{\mathbf{G}}}^{{ \bot }} = 0 \).

Thus we can get

$$ \begin{aligned} {\mathbf{V}}^{H} {\mathbf{JV}} & = \frac{2}{{\sigma^{2} }}\text{Re} \left\{ {{\mathbf{V}}\left[ {\begin{array}{*{20}c} {{\varvec{\Delta}}^{H} } \\ {{\mathbf{G}}^{H} } \\ { - j{\mathbf{G}}^{H} } \\ \end{array} } \right]\left[ {\begin{array}{*{20}c} {\varvec{\Delta}} & {\mathbf{G}} & {j{\mathbf{G}}} \\ \end{array} } \right]{\mathbf{V}}} \right\} \\ & = \frac{2}{{\sigma^{2} }}\text{Re} \left\{ {\left[ {\begin{array}{*{20}c} {{\varvec{\Delta}}^{H} \prod_{{\mathbf{G}}}^{{ \bot }} } \\ {{\mathbf{G}}^{H} } \\ { - j{\mathbf{G}}^{H} } \\ \end{array} } \right]\left[ {\begin{array}{*{20}c} {\prod_{{\mathbf{G}}}^{{ \bot }} {\varvec{\Delta}}} & {\mathbf{G}} & {j{\mathbf{G}}} \\ \end{array} } \right]} \right\} \\ & = \frac{2}{{\sigma^{2} }}\text{Re} \left\{ {\left[ {\begin{array}{*{20}c} {{\varvec{\Delta}}^{H} \prod_{{\mathbf{G}}}^{{ \bot }} {\varvec{\Delta}}} & 0 & 0 \\ 0 & {{\mathbf{G}}^{H} {\mathbf{G}}} & {j{\mathbf{G}}^{H} {\mathbf{G}}} \\ 0 & { - j{\mathbf{G}}^{H} {\mathbf{G}}} & {j{\mathbf{G}}^{H} {\mathbf{G}}} \\ \end{array} } \right]} \right\} \\ \end{aligned} $$
(33)

Thus

$$ \begin{aligned} {\mathbf{J}}^{ - 1} & = {\mathbf{V}}({\mathbf{V}}^{T} {\mathbf{JV}})^{ - 1} {\mathbf{V}}^{T} \\ & = \frac{{\sigma^{2} }}{2}\left[ {\begin{array}{*{20}c} {\mathbf{I}} & 0 & 0 \\ { - {\bar{\mathbf{B}}}} & {\mathbf{I}} & 0 \\ { - {\tilde{\mathbf{B}}}} & 0 & {\mathbf{I}} \\ \end{array} } \right]\left[ {\begin{array}{*{20}c} {\text{Re} ({\varvec{\Delta}}^{H} \prod_{{\mathbf{G}}}^{{ \bot }} {\varvec{\Delta}})^{ - 1} } & 0 & 0 \\ 0 & \tau & \tau \\ 0 & \tau & \tau \\ \end{array} } \right]\left[ {\begin{array}{*{20}c} {\mathbf{I}} & { - {\bar{\mathbf{B}}}} & { - {\tilde{\mathbf{B}}}} \\ 0 & {\mathbf{I}} & 0 \\ 0 & 0 & {\mathbf{I}} \\ \end{array} } \right] \\ & = \left[ {\begin{array}{*{20}c} {\frac{{\sigma^{2} }}{2}[\text{Re} ({\varvec{\Delta}}^{H} \prod_{{\mathbf{G}}}^{{ \bot }} {\varvec{\Delta}})]^{ - 1} } & \tau & \tau \\ \tau & \tau & \tau \\ \tau & \tau & \tau \\ \end{array} } \right] \\ \end{aligned} $$
(34)

where τ denotes the uninteresting part in the derivation. Combining (33) and (34), we give the CRB matrix as follows

$$ {\text{CRB}} = \frac{{\sigma^{2} }}{2}\left[ {\text{Re} ({\varvec{\Delta}}^{H} {\prod}_{{\mathbf{G}}}^{{ \bot }} {\varvec{\Delta}})} \right]^{ - 1} $$
(35)

After further simplification [31], we can rewrite the CRB of 2D-DOA estimation for non-uniform L-shaped array as

$$ {\text{CRB}} = \frac{{\sigma^{2} }}{2J}\left\{ {\text{Re} \left[ {{\mathbf{D}}^{H} {\varvec{\Pi}}_{{{\bar{\mathbf{A}}}}}^{ \bot } {\mathbf{D}} \odot {\hat{\mathbf{P}}}_{w}^{T} } \right]} \right\}^{ - 1} $$
(36)

where \( {\mathbf{D}} = \left[ {\frac{{\partial {\mathbf{a}}(\theta_{1} ,\phi_{1} )}}{{\partial \theta_{1} }}, \ldots ,\frac{{\partial {\mathbf{a}}(\theta_{K} ,\phi_{K} )}}{{\partial \theta_{K} }},\frac{{\partial {\mathbf{a}}(\theta_{1} ,\phi_{1} )}}{{\partial \phi_{1} }}, \ldots ,\frac{{\partial {\mathbf{a}}(\theta_{K} ,\phi_{K} )}}{{\partial \phi_{K} }}} \right] \), \( {\varvec{\Pi}}_{{{\bar{\mathbf{A}}}}}^{ \bot } = {\mathbf{I}} - {\bar{\mathbf{A}}}\left( {{\bar{\mathbf{A}}}^{H} {\bar{\mathbf{A}}}} \right)^{ - 1} {\bar{\mathbf{A}}}^{H} \), \( {\hat{\mathbf{P}}}_{w}^{{}} = \left[ {\begin{array}{*{20}c} {{\mathbf{P}}_{s} } & {{\mathbf{P}}_{s} } \\ {{\mathbf{P}}_{s} } & {{\mathbf{P}}_{s} } \\ \end{array} } \right] \), \( {\mathbf{P}}_{s} = \frac{1}{L}\sum\nolimits_{l = 1}^{L} {s\left( {t_{l} } \right)s^{H} \left( {t_{l} } \right)} \) and \( \odot \) denotes the Hadamard product.

6 Simulation Results

In this section, Monte Carlo simulations are conducted to assess the DOA estimation performance of the proposed algorithm. Define root mean square error (RMSE) of elevation/azimuth angles as

$$ RMSE = \frac{1}{K}\sum\nolimits_{k = 1}^{K} {\sqrt {\frac{1}{P}\sum\nolimits_{p = 1}^{P} {\left[ {\left( {\hat{a}_{k,p} - a_{k} } \right)^{2} } \right]} } } $$
(37)

with \( \hat{a}_{k,p} \) being the estimate of elevation/azimuth angles of the pth Monte Carlo trial, respectively.

In all the simulations, the time of Monte Carlo trials in almost every simulation is set to be over 500, which means P > 500. We assume the arbitrary L-shaped array contains 10 sensors placed at \( \left[ { 0 , 0. 7 , 1. 6 , 2. 4 , 3. 3 , 4. 1 , 4. 9 , 5. 6 , 6. 4 , 7. 2 , 8. 5 , 9. 7 , 1 1. 4 , 1 2. 3 , 1 3. 2} \right] \times \frac{\lambda }{2} \) on the x-axis and 15 sensors at \( \left[ { 0 , 0. 6 , 1. 4 , 2. 1 , 2. 7 , 3. 5 , 4. 2 , 5. 1 , 5. 9 , 6. 7} \right] \times \frac{\lambda }{2} \) on the z-axis and there are 2 independent sources located at (20°, 40°) and (50°, 80°), respectively. All the simulations of S-GESPRIT algorithms use received signal from z-axis for initialization, except simulations in Fig. 8, which compares the estimation performance of S-GESPRIT using received signal from z-axis and x-axis, respectively.

Figure 5 shows the estimation results over 30 Monte Carlo runs under SNR = 5 dB and each pair of point refers to one estimation result. In this experiment, we can see the estimation results are distributed near the theoretical location of the sources, which can demonstrate the effectiveness of the proposed algorithm.

Fig. 5
figure 5

Estimation results in SNR = 5 dB

Figure 6 indicates the estimation results of close sources under SNR = 5 dB and SNR = 25 dB. It is assumed there are two close sources from (20°, 40°) and (24°, 44°), respectively and the number of Monte Carlo runs is 30. It is clearly shown that under a rather high SNR, the proposed S-GESPRIT algorithm can obtain a more distinct estimation result and separate close targets effectively under high SNRs.

Fig. 6
figure 6

Estimation results of close sources under SNR = 5 dB and SNR = 25 dB

Figure 7 illustrates the performance of the proposed S-GESPRIT algorithm relative to the 2D-GESPRIT, 2D-NGESPRIT, 2D-PM [24] algorithms, which has no constraints on the element spacing too, and the CRB. We set L = 200, M = 10, N = 10 here, respectively. Due to the characteristic of the L-shaped array, each algorithm has better elevation angle estimation performance than the azimuth estimation, which has been verified by the CRB. The 2D-GESPRIT algorithm, which is the direct extension of GESPRIT algorithm, has the worst performance, especially under low SNRs. After adopting the idea proposed in [21], it is shown that the 2D-NGESPRIT algorithm outperforms the former one and the 2D-PM algorithm. Our proposed algorithm has a very close estimation performance to the 2D-NESPRIT algorithm and notably, the proposed S-GESPRIT algorithm only needs a much lower computational complexity.

Fig. 7
figure 7

Performance comparison when M = 10 and N = 10

Figure 8 shows the performance comparison among the S-GEPSRIT algorithms using received signal of z-axis and x-axis for initialization respectively, the 2D-NGESPRIT algorithm and the CRB when M = 5, N = 15. The ‘S-GESPRIT’ in Fig. 8 uses the received signal from z-axis for initialization, while the ‘S-GESPRIT in Discussion’ uses the received signal from x-axis for initialization. As demonstrated in Fig. 8, the estimation performance of S-GESPRIT using received signal from z-axis becomes worst in this case. The S-GESPRIT using received signal from x-axis performs closely to the 2D-NGESPRIT algorithm. Only when SNR is low, it performs a little worse than 2D-NGESPRIT. Notably, the proposed S-GESPRIT algorithm has much lower computational complexity than 2D-NGESPRIT.

Fig. 8
figure 8

Performance comparison when M = 5 and N = 15

Figure 9 presents the performance versus snapshot number. From Fig. 9, it is indicated that the angle estimation performance of the proposed algorithm becomes better with snapshot number increasing.

Fig. 9
figure 9

RMSE of elevation and azimuth angle estimation versus the number of snapshots

Figures 10 and 11 depict the estimation performance with different numbers of sensors along the z- and x-axis, respectively. In order to facilitate comparison, we assume the uniform L-shaped array with half-wavelength spacing is employed and the received signal from z-axis is used for initialization. In Fig. 10, there are 5 sensors along the x-axis and M = 5, M = 10, M = 15 sensors along the z-axis, respectively. It is demonstrated that when the equivalent number of sensors along the x-axis is used, more sensors along z-axis would improve the initial elevation angle estimation performance, which will make the azimuth angle estimates more accurate because the azimuth angle estimation actually depends on the initial elevation angle estimation. Thus the estimation performance of both the elevation and azimuth will be improved under this circumstance. In Fig. 11, on the contrary, there are 5 sensors along the z-axis and N = 5, N = 10, N = 15 sensors along the x-axis, respectively. Figure 11 suggests that more sensors along the x-axis will improve the azimuth estimation performance. Due to the re-substitution and local 1D search in (15), the elevation estimation performance will be improved slightly. However, it is indicated that the elevation estimation performance is related to the number of sensors along the z-axis to a large extent when using the received signal from z-axis for initialization.

Fig. 10
figure 10

RMSE of elevation and azimuth angle estimation with different number of sensors along the z-axis

Fig. 11
figure 11

RMSE of elevation and azimuth angle estimation with different number of sensors along the x-axis

7 Conclusion

In this study, we have investigated the 2D-DOA estimation problem using GESPRIT algorithm for non-uniform L-shaped array. Through our work, we develop the 2D-NGESPRIT algorithm by extending GESPRIT algorithm, which can eliminate the ambiguity and achieve high estimation accuracy. To reduce the computational complexity of the 2D-NGESPRIT algorithm, we propose the S-GESPRIT algorithm, which exploits the elevation angle information embedded in the sensors along the z-axis to obtain the initial estimation of elevation angles and achieves the azimuth and elevation angle estimation in succession via 1D spectral searches. The proposed algorithm has very close estimation performance to the 2D-NGESPRIT algorithm and outperforms the 2D-GESPRIT and 2D-PM algorithms. It has much lower computational cost and needs no additional pair matching. Moreover, it has no constraints on the element spacing. We also derive the CRB for joint elevation and azimuth angle estimation for a non-uniform L-shaped array. Numerical simulations verify the effectiveness and improvement of our proposed algorithm.