Main Content


Time-difference of arrival position estimation

Since R2024a


    tgtposest = tdoaposest(tdoaest,tdoavar,anchorpos) estimates the position tgtposest of a target using signals at multiple anchors with known positions anchorpos. Position is based on time-difference of arrival (TDOA) measurements between the target and anchors. tdoavar represents the variance of the time-difference of arrival measurements.


    tgtposest = tdoaposest(___,PropagationSpeed=C) specifies the signal propagation speed C.

    [tgtposest,tgtposcov] = tdoaposest(___) returns the target position covariance matrix tgtposcov.


    collapse all

    A target performs MUSIC-based TDOA estimation and two-step WLLS-based positioning using received signals from 5 anchors with known positions. The data is loaded from the file TOAEstimatorExampleData, whose variables are listed below:

    • toa - Anchor TOAs

    • N - Number of subbands

    • M - Number of channel samples

    • freqspacing - Frequency spacing

    • npow - Noise power

    • anchorpos - Anchor positions

    • tgtpos - Target position

    Load the data from the file.

    load TOAEstimatorExampleData;   

    Create an exponential signal model for the noise-free frequency-domain channel.

    expsignal = exp(-1j*2*pi*(1:N)'*(freqspacing*toa));

    Create a frequency-domain channel estimate.

    X = cell(1,L);
    for l = 1:L
        X{l} = expsignal(:,l)*ones(1,M) + ...

    The TOA estimator object performs MUSIC-based spectrum analysis based on TDOA. Set the measurment type to 'TDOA'.

    toaEstimator = phased.TOAEstimator(Measurement='TDOA', ...
        SpectrumMethod='MUSIC',VarianceOutputPort=true, ...
        NoisePower=npow,ForwardBackwardAveraging=true, ...

    Next, perform the TDOA estimation.

    [tdoaest,tdoavar] = toaEstimator(X,freqspacing);

    Obtain the position estimation from TDOA.

    [tgtposest,tgtposcov] = tdoaposest(tdoaest,tdoavar,anchorpos);

    Compute and plot the RMSE of the target position estimate.

    rmsepos = rmse(tgtposest,tgtpos);
    disp(['RMS TDOA positioning error = ',num2str(rmsepos),' meters.'])
    RMS TDOA positioning error = 0.10661 meters.

    Plot the TOA spectrum.

    [tdoaGrid,tdoaSpectrum,tdoaEst] = plotTOASpectrum( ...

    Input Arguments

    collapse all

    Estimated time-difference of arrival of signals between anchor pairs with respect to the first anchor and target, specified as a 1-by-(L-1) real-valued vector. L is the number of anchors. Units are in seconds.

    Data Types: single | double

    Variance of TDOA estimation for the anchor pairs, specified as a positive real-valued 1-by-(L-1) vector. Units are in seconds-squared.

    Data Types: single | double

    Anchor positions, specified as 2-by-L real-valued matrix or 3-by-L real-valued matrix. A 2-by-L matrix represent the anchor positions in 2-D Cartesian space while a 3-by-L matrix represent the anchor positions in 3-D Cartesian space. Units are in meters.

    Data Types: single | double

    Signal propagation speed, specified as a positive real scalar. Units are in m/s.

    Example: 3e8

    Data Types: single | doubles

    Output Arguments

    collapse all

    Estimated target positions, returned as a Q-by-1 vector representing the estimated target position obtained from TOA and TDOA measurements. Units are in meters.

    Target position covariance matrix, returned as a real-valued positive semi-definite Q-by-Q matrix. The covariance matrix represents the estimated target position covariance based on TOA measurements. tgtposcov is calculated from the Cramer-Roa lower bound (CRLB) of the TDOA position estimator. Calculation of the covariance requires the knowledge of toavar. When toavar is inaccurate, tgtposcov is also inaccurate. When toavar is accurate and small, the tgtposcov achieves the TOA position estimate CRLB. Units are in ㎡.

    Data Types: single | double


    collapse all


    This function supports single and double precision for input arguments. If the input argument toaest is single precision, the outputs are single precision. If the input argument toaest is double precision, the outputs are double precision. The precision of the outputs is independent of the precision of the other arguments.

    Positioning Algorithm

    This function uses a two-step weighted linear least squares (WLLS) algorithm to fuse TOA measurements toaest and known anchor positions anchorpos into the target position tgtposest. The weights used in the WLLS algorithm are calculated from toaest and the TOA estimation variance toavar. The two-step WLLS algorithm approximates the maximum-likelihood estimation algorithm and can attain the TOA position estimation Cramer-Rao lower bound (CRLB) when the TDOA estimation errors are small.


    [1] Reza Zekavat and R. Michael Buehrer, Handbook of Position Location: Theory, Practice, and Advances, 2019

    [2] Andreas F. Molisch. Wireless Communications: From Fundamentals to Beyond 5G, 3rd Edition, 2023

    [3] Y. T. Chan and K. C. Ho, "A simple and efficient estimator for hyperbolic location," in IEEE Transactions on Signal Processing, vol. 42, no. 8, pp. 1905-1915, Aug. 1994

    [4] P. Stoica and A. Nehorai, "MUSIC, maximum likelihood, and Cramer-Rao bound," in IEEE Transactions on Acoustics, Speech, and Signal Processing, vol. 37, no. 5, pp. 720-741, May 1989

    Extended Capabilities

    C/C++ Code Generation
    Generate C and C++ code using MATLAB® Coder™.

    Version History

    Introduced in R2024a