MUSIC based ToA Estimation

This module implements a method for estimating the delays using MUltiple SIgnal Classification (MUSIC) method.


Code example

# shape of Hf: (numSubcarriers, numObservations)
L         = 12
min_delay = 10**(-8)
max_delay = 2.5*10**(-6)
music     = MUSIC_ToA()
delays    = music(Hf, numberOfPath=L, subCarrierSpacing=scs, min_delay=min_delay, max_delay=max_delay)
fig, ax = music.displayMUSICSpectrum()
Alternative text
fig, ax = music.displayEigenValues(0, 30)
Alternative text

API Documentation

The following documentation provides the details about the input and output API for MUSIC algorithm for ToA Estimation.

class toolkit5G.Positioning.MUSIC_ToA(numSamples=1000)[source]

This module provides interface for estimating the time of arrival (ToA)/delays using MU ltiple SI gnal C* lassification (MUSIC) method. It returns the delays experienced by numberOfPath strongest multi-paths while propagation over wireless channels.

Parameters:

numSamples (int) – Number of samples for MUSIC spectrum computation. Default value is 1000.

Input:
  • 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.

  • min_delay=0 – minimum possible values of delay. Default value is 0. It is used for computing the MUSIC spectrum.

  • max_delay=10**(-5) – maximum possible values of delay. Default value is 0. It is used for computing the MUSIC spectrum.

  • height (float) – Heigth value used for identifying the spikes in the MUSIC spectrum. Default value is 0.05. For more details, read height in find_peaks module of SciPy.

  • prominence (float) – Prominence value used for identifying the spikes in the MUSIC spectrum. Default value is 0.05. For more details, read prominence in find_peaks module of SciPy.

Output:

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

Attributes:
  • eigenValues ((numSubcarriers,), float) – Eigen values of the MUSIC correlation matrix. It can be used for estimating the number of dominant paths in wireless channel.

  • delayGrid ((numSamples,), flaat) – Delay grid of MUSIC spectrum. Denotes the numSamples from the interval [min_delay, max_delay]

  • musicSpectrum ((numSamples,), flaat) – MUSIC spectrum values at the delay grid values.

  • peakValues ((numSpikes,), float) – Values of the spike found in the MUSIC spectrum for the given height and prominence.

Tip

The larger the value of numSamples higher the accuracy of ToA estimates and higher will the computational complexity and memory consumption of the module.

Warning

The channel state information (H) should have subcarriers along the first (0-th) dimension.

Note

min_delay and min_delay values help in managing the computational complexity and estimation accuracy for delays estimation.

Note

The MUSIC algorithm estimates the delays based on the MUSIC spectrum. This MUSIC spectrum contains spikes at time instants corresponding to actual multipath delays. Once, the MUSIC spectrum is estimated, the algorithms identifies the peaks in this spectrum. The height and prominence helps in finding this spikes. For more details, read find_peaks in SciPy.

Tip

Very low value of height degrades the immunity against noise floor. On the other hand very high value of height results in missing the weak multipath components. In case, the LoS path is weak, this reduces the accuracy of positioning.

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

  • ValueError – [Error-MUSIC_ToA]: ‘subCarrierSpacing’ must be non-negative integer or float!

  • ValueError – [Error-MUSIC_ToA]: ‘numSamples’ must be a positive integer!

  • ValueError – [Error: MUSIC-ToA]: numberOfPath (number of paths) must be a positive integer less than number of subcarriers!

  • ValueError – [Error-MUSIC_ToA]: ‘numSubcarriers’ must be a positive integer!

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

  • ValueError – [Error-MUSIC_ToA]: ‘min_delay’ must be non-negative integer or float!

  • ValueError – [Error-MUSIC_ToA]: ‘max_delay’ must be non-negative integer or float greater than ‘min_delay’

  • ValueError – [Error-MUSIC_ToA]: ‘idxLow’ must be an integer from interval [0, numSubcarriers]!

  • ValueError – [Error-MUSIC_ToA]: ‘idxHigh’ must be an integer from interval [idxLow, numSubcarriers]!

displayEigenValues(idxLow=0, idxHigh=-1, displayPlot=True)[source]

Displays the eigen values for each possible basis in decreasing order.

Parameters:
  • idxLow (int) – Lowest index from where to start plotting.

  • idxHigh (int) – Highest index till where to plot.

Returns:

fig is figure type matplotlib object and ax is axes type matplotlib object.

Return type:

(fig, ax), tuple

Raises:
  • ValueError – [Error-MUSIC_ToA]: ‘idxLow’ must be an integer from interval [0, numSubcarriers]!

  • ValueError – [Error-MUSIC_ToA]: ‘idxHigh’ must be an integer from interval [idxLow, numSubcarriers]!

displayMUSICSpectrum(displayPlot=True)[source]

Plots the MUSIC spectrum for the given channel for the configured parameters.

Returns:

fig is figure type matplotlib object and ax is axes type matplotlib object.

Return type:

(fig, ax), tuple