ESPRIT based DoA Estimation
This module implements a method for estimating the delays using Estimation of Signal Parameters via Rotational Invariance Techniques (ESPRIT) method.
Code example
# Ntx, Nty, dtx, dty will be taken from antenna arrays propoerties
# Hk is estimated at the receiver.
# However, for perfect CSI, it can be directly taken from channel.OFDM.
Lpath = 5 # Returns DoAs for 5 strongest paths
espritDoa = ESPRIT_DoA(Ntx, Nty, Hk.shape[1]) # Create a ESPRIT DoA Object
xoA_est = espritDoa(Hk, Lpath, dtx, dty) # Return 2 x 5 DoA matrix
# row-0 is azimuth angles for each path
# row-1 is elevation angles for each path
- class toolkit5G.Positioning.ESPRIT_DoA(Nr_x, Nr_y, Nobservation)[source]
This module provides an API to estimate the 2D
azimuth ( ) and elevation ( ) direction of Arrival using ESPRIT(Estimation of signal parameters via rotational invariant techniques). The module expects OFDM channel estimates ( ) as an input and exploits the structure in this channel using number of antennas placed in columns ( ), number of antennas placed in rows ( ), spacing between antennas placed in columns ( ) and spacing between antennas placed in rows ( ) to estimate the 2D ( ) angle of arrival traced by multi-paths ( ) while propagating over the wireless channel.Tip
and are inputted usingNr_xandNr_yto __init__ method. and are inputted usingd_spcgx_Rxandd_spcgy_Rxto __call__ method. is inputted asnumPaths. is vector returned by the class.
- Parameters:
Nr_x – int Defines the Number of Antenna in the receiver side along the x-axis.Should be a positive integer greater than 2.
Nr_y – int Defines the Number of Antenna in the receiver side along the y-axis.Should be a positive integer greater than 2.
Nobservation – int Defines the number of time samples. They may be fft size or fft size*numSymbols etc. Should be a positive non-zero integer.
Important
Nr_x and Nr_x must be even integers to estimate 2D direction of arrivals.
- Input:
Hk (np.ndarray) – Defines the channel matrix. It should have a size (Nr_x*Nr_y, Nobservation).
numPaths (int) – Defines the number of propagation paths.
d_spcgx_Rx (number) – Defines the spacing between antennas along x-axis. It should be >0.
d_spcgy_Rx (number) – Defines the spacing between antenna along y-axis. It should be >0.
- Output:
(2,
numPaths), float – 2D angles of arrival ofnumPathsstrongest multi-paths in the channel. Row-0 is azimuth angles for each path and row-1 is elevation angles for each path.- Raises:
ValueError – [Error-ESPRIT_DoA]: ‘Hk’ should be a 2D NumPy array!
ValueError – [Error-ESPRIT_DoA]: Input Dimensions mismatch!n Hk.shape[0] should equal Nr_x*Nr_y and Hk.shape[1] should equal Nobservation.
ValueError – [ESPRIT-DoA]: ‘Nr_x’ must be positive even integer, greater than or equal to 2
ValueError – [ESPRIT-DoA]: ‘Nr_y’ must be positive even integer, greater than or equal to 2
ValueError – [ESPRIT-DoA]: ‘Nobservation’ must be a positive integer
ValueError – [ESPRIT-DoA]: ‘d_spcgx_Rx’ must be a positive number > 0!
ValueError – [ESPRIT-DoA]: ‘d_spcgy_Rx’ must be a positive number > 0!