Least Square based Position Estimator for Hybrid ToA/mRTT and DoA

A hybrid positioning method that combines time measurements and Angle measurements leverages the strengths of both approaches to achieve more accurate and robust positioning in wireless communication systems.

  • The hybrid positioning method combines ToA/TDoA and AoA measurements to enhance accuracy and reliability.

  • ToA/TDoA measurements provide accurate distance estimates, while AoA measurements offer directional information.

  • By fusing ToA/TDoA and AoA measurements using techniques such as multilateration or maximum likelihood estimation, the hybrid method can mitigate the limitations of each individual technique.

  • For example, ToA/TDoA measurements can help resolve ambiguity in AoA estimates, while AoA measurements can provide additional constraints for refining ToA/TDoA-based localization.

Note

Hybrid Positioning requires only 1-2 LoS reference nodes with strong links in comparison to TDoA/AoA which requires 3-4 LoS reference nodes.


Code example

posEstimator  = HybridToAAoA()
# Position Estimation Object:
    # Positioning based on: Hybrid ToA and DOA
    # Optimization Method: Least Square
    # txPosition: (numTranmitter, 3)
    # doaEst: (numTranmitter, 2)
    # ToAe: (numTranmitter, )

positionEstimate, error   = posEstimator(refPosition=txPosition, toa=ToAe, doa = doaEst)

The input output interface for usage of Hybrid ToA/mRTT and DoA algorithm is provided below.

class toolkit5G.Positioning.HybridToAAoA[source]

This modules uses least squares optimization framework to estimate the node location using time of arrival (TDoA) measurements.

Parameters:

None

Input:
  • refPosition ((\(\text{N}_\text{ref}\), 3), np.number) – Reference locations with respect to whom ToAs are estimated.

  • toa ((\(\text{N}_\text{ref}\),), np.number) – Time difference of arrival with respected to \(\text{N}_\text{ref}\) reference locations.

  • xoA ((\(\text{N}_\text{ref,2}\),k), np.number) – Angle of arrival (in radians) with respected to \(\text{N}_\text{ref,2}\) reference locations wrt to which xoAs are estimated. * If k is 1, It assume that xoA contains all Azimuth angle of arrival. * If k is 2, It assume that xoA[:,0] contains all Azimuth angle of arrival and xoA[:,1] stores all the elevation angle of arrival. * If refPositionAoA is None, then \(\text{N}_\text{ref,2} = \text{N}_\text{ref}\) and refPosition is considered to be the reference positioning wrt to which xoAs are estimated.

  • refPositionAoA ((\(\text{N}_\text{ref,2}\), 3), np.number) – Reference locations with respect to whom xoAs are estimated.

Important

\(\text{N}_\text{ref}\), \(\text{N}_\text{ref,2}\) should be higher than 1 (>1).

Output:
  • (N, 3), np.number – Position estimate. If the height of all the transmitter is same, then N=2 else N=1.

    • For equiheight transmitters, there exist two estimates of the height of the UE.

    • One above the transmitter and other below it.

    • This phenomenon results in 2 estimate of the position of the UE.

    • However, both these estimates have the same (x, y) co-ordinate.

  • np.number – Uncertainty in Position Estimates. The lower the value better the position estimates.

Raises:
  • ValueError – “[Error-HybridToAAoA]: ‘refPosition’ must be an array of numbers!”

  • ValueError – “[Error-HybridToAAoA]: ‘toa’ must be an array of numbers!”

  • ValueError – “[Error-HybridToAAoA]: ‘refPosition’ must be an 2D numpy array!”

  • ValueError – “[Error-HybridToAAoA]: ‘refPosition’ must be an numpy array of size (nRefnode x 3). refPosition.shape[1] is not equal to 3!”

  • ValueError – “[Error-HybridToAAoA]: ‘refPosition’ must be an numpy array of size (nRefnode x 3). refPosition.shape[0] should be more than 3 for trilateration!”

  • ValueError – “[Error-HybridToAAoA]: ‘number of refPositions’ must be consistent with number of measurements! refPosition.shape[0] should be equal to toa.size+1”

  • ValueError – “[Error-HybridToAAoA]: ‘refPosition’ must be an array of numbers!”

  • ValueError – “[Error-HybridToAAoA]: ‘xoA’ must be an array of numbers!”

  • ValueError – “[Error-HybridToAAoA]: ‘xoA’ must have 2 dimension!”

  • ValueError – “[Error-HybridToAAoA]: ‘xoA’ must have shape (Nref, 2) or (Nref, 1) with Nref>2!”

  • ValueError – “[Error-HybridToAAoA]: ‘number of refPositions’ must be consistent with number of measurements! refPosition(AoA).shape[0] should be equal to xoA.shape[0]!”

  • ValueError – “[Error-HybridToAAoA]: ‘refPosition’ must be an numpy array of size (nRefnode x 3). refPosition.shape[0] should be more than 3 for trilateration!”


Least Square based Position Estimator for Hybrid TDoA and DoA

Code example: Position Estimation using Hybrid TDoA and Direction of Arrival Estimates

posEstimator  = HybridTDoAAoA()
# Position Estimation Object:
    # Positioning based on: Hybrid TDoA and DOA
    # Optimization Method: Least Square
    # txPosition: (numTranmitter, 3)
    # doaEst: (numTranmitter, 2)
    # tdoaEst: (numTranmitter-1, )

positionEstimate, error   = posEstimator(refPosition=txPosition, tdoa=tdoaEst, doa = doaEst)

The input output interface for usage of Hybrid TDoA and DoA algorithm is provided below.

class toolkit5G.Positioning.HybridTDoAAoA[source]

This modules uses least squares optimization framework to estimate the node location using time difference of arrival (TDoA) measurements.

Parameters:

None

Input:
  • refPosition ((\(\text{N}_\text{ref}\), 3), np.number) – Reference locations with respect to whom ToAs are estimated.

  • tdoa ((\(\text{N}_\text{ref}-1\),), np.number) – Time difference of arrival with respected to \(\text{N}_\text{ref}\) reference locations.

  • xoA ((\(\text{N}_\text{ref}-1\),k), np.number) – Angle of arrival (in radians) with respected to \(\text{N}_\text{ref}\) reference locations. * If k is 1, It assume that xoA contains all Azimuth angle of arrival. * If k is 2, It assume that xoA[:,0] contains all Azimuth angle of arrival and xoA[:,1] stores all the elevation angle of arrival. * If refPositionAoA is None, then \(\text{N}_\text{ref,2} = \text{N}_\text{ref}\) and refPosition is considered to be the reference positioning wrt to which xoAs are estimated.

  • refPositionAoA ((\(\text{N}_\text{ref,2}\), 3), np.number) – Reference locations with respect to whom xoAs are estimated.

Important

\(\text{N}_\text{ref}\), \(\text{N}_\text{ref,2}\) should be higher than 1 (>1).

Output:
  • (N, 3), np.number – Position estimate. If the height of all the transmitter is same, then N=2 else N=1.

    • For equiheight transmitters, there exist two estimates of the height of the UE.

    • One above the transmitter and other below it.

    • This phenomenon results in 2 estimate of the position of the UE.

    • However, both these estimates have the same (x, y) co-ordinate.

  • np.number – Uncertainty in Position Estimates. The lower the value better the position estimates.

Raises:
  • ValueError – “[Error-HybridTDoAAoA]: ‘refPosition’ must be an array of numbers!”

  • ValueError – “[Error-HybridTDoAAoA]: ‘tdoa’ must be an array of numbers!”

  • ValueError – “[Error-HybridTDoAAoA]: ‘refPosition’ must be an 2D numpy array!”

  • ValueError("[Error-HybridTDoAAoA] – ‘refPosition’ must be an numpy array of size (nRefnode x 3). refPosition.shape[1] is not equal to 3!”:

  • ValueError – “[Error-HybridTDoAAoA]: ‘refPosition’ must be an numpy array of size (nRefnode x 3). refPosition.shape[0] should be more than equal to 1 (>=1) for trilateration!”

  • ValueError – “[Error-HybridTDoAAoA]: ‘number of refPositions’ must be consistent with number of measurements! refPosition.shape[0] should be equal to tdoa.size+1”

  • ValueError – “[Error-HybridTDoAAoA]: ‘refPosition’ must be an array of numbers!”

  • ValueError – “[Error-HybridTDoAAoA]: ‘xoA’ must be an array of numbers!”

  • ValueError – “[Error-HybridTDoAAoA]: ‘xoA’ must have 2 dimension!”

  • ValueError – “[Error-HybridTDoAAoA]: ‘xoA’ must have shape (Nref, 2) or (Nref, 1) with Nref>=1!”

  • ValueError – “[Error-HybridTDoAAoA]: ‘number of refPositions’ must be consistent with number of measurements! refPosition(AoA).shape[0] should be equal to xoA.shape[0]!”

  • ValueError' – “[Error-HybridTDoAAoA]: ‘refPosition’ must be an numpy array of size (nRefnode x 3). refPosition.shape[0] should be more than 3 for trilateration!”