ESPRIT based ToA Estimation

ESPRIT (Estimation of Signal Parameters via Rotational Invariance Techniques) is a method used for estimating the Time of Arrival (ToA) of signals in wireless communication systems.

  1. Principle: ESPRIT is a high-resolution spectral estimation technique that exploits the rotational invariance property of the signal covariance matrix to estimate signal parameters accurately. In the context of ToA estimation, ESPRIT exploits the cyclostationarity of the received signal to estimate the delay parameters.

  2. Signal Model: ESPRIT assumes the received signal is modeled as a linear combination of delayed versions of a known waveform, corrupted by additive noise. Mathematically, the received signal can be expressed as a matrix equation involving the signal covariance matrix.

  3. Eigenvalue Decomposition: ESPRIT performs eigenvalue decomposition on the signal covariance matrix to extract the signal subspace corresponding to the delays of interest. By exploiting the orthogonality of the signal subspace, ESPRIT is able to estimate the delay parameters directly from the eigenvalues and eigenvectors of the covariance matrix.

  4. ToA Estimation: Once the signal subspace is obtained, ESPRIT estimates the delays by analyzing the phase differences between pairs of eigenvectors corresponding to adjacent eigenvalues. The delays are then calculated from the phase differences using trigonometric relationships.

  5. Advantages: ESPRIT offers several advantages for ToA estimation, including high resolution, robustness to noise, and computational efficiency. It can accurately estimate the ToA of signals even in the presence of strong interference or noise.

  6. Implementation Considerations: ESPRIT-based ToA estimation requires knowledge of the signal waveform and the number of delays to be estimated. It also assumes that the received signal is narrowband and exhibits cyclostationarity. Practical implementation may involve preprocessing steps such as synchronization, channel estimation, and interference cancellation to improve performance.

Its a powerful technique that offers high accuracy and resolution for determining signal arrival times in wireless communication systems. It is particularly useful in scenarios where precise timing information is critical, such as in radar, localization, and synchronization applications.

Code example

# shape of Hf: (numSubcarriers, numObservations)
L         = 12
esprit    = ESPRIT_ToA(Hf.shape)
delays    = esprit(Hf, numberOfPath=L, subcarrierSpacing=scs)

API Documentation

The following documentation provides the details about the input and output API for ESPRIT based ToA Estimation.

class toolkit5G.Positioning.ESPRIT_ToA(shape)[source]

This module provides interface for estimating the time of arrival (ToA)/delays using ESPRIT technique. This method reports the delays experienced by L strongest multi-paths while propagation over wireless channels.


shape ((2,), tuple) – shape of channel estimates matrix which has a dimension of \(\text{N}_\text{sc} \times \text{N}_\text{obs}\) where \(\text{N}_\text{sc}\) denotes the number of subcarriers and \(\text{N}_\text{obs}\) number of diverse observations/measurements of channel estimates available. For example shape = (1024, 16) if channel is estimated over 1024 subcarriers and 16 independent channel observations.

  • H ((numSubcarriers, :), np.complex) – Frequency domain (OFDM) channel state information across numSubcarriers. The second dimension provides the information diversity (time domain, space domain etc.).

  • numberOfPath (int) – Number of paths. The delay/ToA of each path in estimated. Default value is 1.

  • subcarrierSpacing (int or float) – Subcarrier spacing in Hz. Default value is None.


(numberOfPath, ), float – Delays of L-strongest multi-paths.

  • ValueError – [Error-ESPRIT_ToA]: ‘H’ should be a 2D NumPy array!

  • ValueError – “[Error-ESPRIT_ToA]: shape of H must be tuple of size 2!”

  • ValueError – “[Error-ESPRIT_ToA]: Neither of the two dimensions in ‘shape’ can be zero!”

  • ValueError – “[Error-ESPRIT_TOA]: The ‘shape[0]’ must be Even!”

  • Exception – “[Error-ESPRIT_ToA]: ‘subCarrierSpacing’ must be non-negative integer or float!”

  • ValueError – “[Error-ESPRIT_ToA]: numSubcarriers must be a positive integer!”

  • ValueError – “[Error-ESPRIT_ToA]: ‘numberOfPath’ must be a positive integer less than number of subcarriers!”