DFT based Method

This module implements a method for estimating delays using the Discrete Fourier Transform (DFT) technique. This method utilizes the discrete Fourier transform to compute the power delay profile (PDP) and estimates delays by identifying the peaks in the PDP. Additionally, it can employ Fourier oversampling to up-sample the time-domain channel, further enhancing the resolution of Time of Arrival (ToA) estimates. However, this method experiences performance degradation in scenarios where channel state information (CSI) is unavailable across all sub-carriers, which is common in practical situations.


DFT based method suffers performance degradation if channel state information (CSI) is not available across all the sub-carriers which is very common in practical scenarios.

Code example

# shape of Hf: (numSubcarriers, numObservations)
osFactor   = 16
Lpath      = 12
dftToA     = DFT_ToA(osFactor)
delays     = dftToA(H, Lpath, scs, prominence=0.05, height=0.05)
fig, ax = dftToA.displayPDPs(delays[0]*0.25, delays[-1]*1.25)
Alternative text

API Documentation

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

class toolkit5G.Positioning.DFT_ToA(oversamplingFactor=1)[source]

This method provides the API for estimating the time of arrival (ToA)/delay for multi-path based on the discrete Fourier transform method.


oversamplingFactor (int) – Defines the time domain oversampling factor. Default value is 1. It also represents the factor for the DFT interpolation.


The higher the oversampling factor, the better the resolution/accuracy of ToA estimates. The oversamplingFactor uses fourier interpolation for improving the accuracy. However, the complexity and memory consumption increases with the value of oversamplingFactor.

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

  • numPaths (int) – Number of dominant paths. The delay/ToA of numPaths paths in estimated and returned. Default value is 1.

  • subcarrierSpacing (int or float) – Subcarrier spacing used for OFDM in Hz.

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


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

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

  • ValueError – [Error-DFT_ToA]: ‘numPaths’ must be a positive integer less than number of Nfft!

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

  • ValueError – [Error-DFT_ToA]: ‘height’ must be non-negative number!

  • ValueError – [Error-DFT_ToA]: ‘prominence’ must be non-negative number!

  • ValueError – [Error-DFT_ToA]: ‘Num-subcarriers’(Nfft) must be a positive integer!

  • ValueError – [Error-DFT_ToA]: ‘xMin’ must be a positive number!

  • ValueError – [Error-DFT_ToA]: ‘xMax’ must be a positive number larger than ‘xMin’!

DFT_ToA.displayPDPs(xMin=0, xMax=None)[source]

Displays the power delay profile for the channel input to the methods.

  • xMin (number) – minimum delay from where to start plotting the power delay profile. Default value is 0.

  • xMax (number) – maximum delay where power delay profile plotting should stop. Default value is None.


(fig, ax) – return fig, ax objects.