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 thatxoA[:,0]
contains all Azimuth angle of arrival andxoA[:,1]
stores all the elevation angle of arrival. * IfrefPositionAoA
is None, then \(\text{N}_\text{ref,2} = \text{N}_\text{ref}\) andrefPosition
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 thatxoA[:,0]
contains all Azimuth angle of arrival andxoA[:,1]
stores all the elevation angle of arrival. * IfrefPositionAoA
is None, then \(\text{N}_\text{ref,2} = \text{N}_\text{ref}\) andrefPosition
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!”