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()
fig, ax = music.displayEigenValues(0, 30)
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
numberOfPathstrongest 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 acrossnumSubcarriers. 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
heightinfind_peaksmodule ofSciPy.prominence (float) – Prominence value used for identifying the spikes in the MUSIC spectrum. Default value is 0.05. For more details, read
prominenceinfind_peaksmodule ofSciPy.
- 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
numSamplesfrom 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
heightandprominence.
Tip
The larger the value of
numSampleshigher 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_delayandmin_delayvalues 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
heightandprominencehelps in finding this spikes. For more details, readfind_peaksinSciPy.Tip
Very low value of
heightdegrades the immunity against noise floor. On the other hand very high value ofheightresults 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:
figis figure type matplotlib object andaxis 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]!