Our enterprise system currently supports 2 positioning modes (= 2 positioning protocols): TDOA (Time Difference of Arrival) and TWR (Two Way Ranging). Each technique has its own properties and can be applied for different use cases:

Time Difference of Arrival (TDOA)

In TDOA mode, tags will periodically transmit a UWB blink, without any regard for other tags or anchors. Because the tag must only send a single UWB transmission, the positioning can happen fast and at low power. With the commonly used Aloha protocol, tags only send and never receive resulting in incredibly low power consumption, with battery lifetimes of several years.

In TDOA the tag will never know its position, unless it is fed back to it.

Two Way Ranging (TWR)

In a TWR system, messages are sent back and forth between anchors and tags. Combining the time-of-flight and the speed-of-light, the distance of the tag to each anchor can be determined: The gateway instructs the anchors to initiate communication with the tags and to range with them, one by one and report their ranges back. These ranges are then used to calculate the position of the tag by means of trilateration. Because messages are sent back and forth between tags and anchors, TWR requires an advanced positioning schedule and the amount of tags that can be positioned in a certain area is limited.

These ranges are not only available on the gateway but also on the tag itself. And when the UWB packets are send between the anchors and tags, the anchors also send their coordinates. Thus, the tag has both the coordinates of the anchors, and the ranges to them, which means that the tag can also calculate its own position within the coordinate system you have defined.


TDOA is typically used in low-power, large-scale applications such as asset tracking. Similarly, in applications that require very high update rates, such as in competitive sports, TDOA has an advantage.

TWR is typically used in applications where a very high accuracy is acquired, where the position needs to be available on the tag and/or gateway, and where battery life is less important. Also, for applications where the tags would be outside the anchor area, TWR would be a preferred choice.

TWR is only supported for anchors with Firmware 1.7 or above and tags with Firmware 2.1 or above. When you switch between TDOA and TWR you will also have to reconfigure your tags with our Pozyx Device Configurator tool. See the Configuring the tags section.

Scheduling settings (TWR only)

When your system is configured to use TWR you will need to set some additional settings:

Tag update rate

This is the number of position updates you want per tag per second. Setting a higher update rate will lower the amount of tags that you can schedule.

In a TWR system the tag update rate is defined by the gateway (because the anchors initiate the communication with the tags). In a TDOA system the tag update rate is defined by the tag itself (because the tag simply blinks at a certain rate). The update rate in a TDOA system is set via the Pozyx device configurator tool. See the Configuring the tags section for more info.

Scheduled tags

TWR requires an advanced positioning schedule to orchestrate the back and forth communication between the anchors and the individual tags. Our software will create this schedule based on the tags that you list here. This means that only the tags listed here will be positioned.

Our web application will tell you how many tags you can schedule at the selected update rate:

You can schedule more tags than the supported amount of tags, but then it can’t be guaranteed that you will receive position updates for each tag at the desired update rate. This will depend on the density of your tags: if all tags are very close to each other, they will all be ranging with the same subset of anchors. In this case scheduling more tags than supported will cause the actual update rate to be lower than the one you have set1. On the other hand, if your tags are spread out, they will be ranging with different anchors and in this case scheduling more tags than supported will not lead to a drop in update rate. The amount of tags supported is the worst-case scenario.

At the moment it is not possible to configure tags with different update rates.

Positioning profiles

As your application may consist of different tags located on different heights or with different filter requirements, multiple positioning profiles with different settings can be defined. Per tag a different profile can be selected. The different options per profile are explained in more detail below.

To create a positioning profile, click the New positioning profile button and give it a name (e.g. AGV). It will inherit its initial settings from the Default profile. The Default profile is the positioning profile that will be applied to all tags that don’t have a positioning profile assigned.

After creating a positioning profile, you can assign it to a tag by going to the DevicesTags page and changing the positioning profile from the Default profile to the one that you want to assign:

The actual configuration of the positioning profile will depend on the version of our positioning engine running on your gateway: in release 2020.2 we introduced a new positioning engine with better filtering and smoothing2, but this new positioning engine requires a different set of settings, and it is not possible to simply map the settings from the old positioning engine to the new one and have the exact same position result. Automatically transferring everyone to the new positioning engine could therefore be a breaking change3 and thus we have chosen for an opt-in approach.

If you are seeing the warning below on the Positioning settings page, then your system has the new positioning engine build in, but it is still running the old one.

You can simply upgrade by clicking on the link inside of it. Be aware that the filtering in this new engine is different (and thus also the position result), as explained above.

Below we will describe what you can configure for each positioning profile and indicate whether this option is only applicable to the old positioning engine, only to the new positioning engine, or to both:

Positioning algorithm (old positioning engine only)

Two options are available as positioning algorithm:

  • The UWB only works purely on the UWB signals without taking any predictions of movement into account.

  • The second option, Tracking (Kalman), adds a Kalman prediction filter to the pure UWB measurements. Velocity values will be present in the positioning results once Kalman tracking is selected.

This option disappeared with the introduction of the new positioning engine as a Kalman filter will always be used.

Dimension (old and new positioning engine)

By default, the dimension of the positioning is configured to 2.5D. This means that you will get the (x, y) position of your tag projected in a surface with fixed z-coordinate (this is parallel with the ground floor). Unlike for 2D positioning, the anchors and tags can be on different heights.

Since release 2020.2 it is also possible to set the dimension to 3D, in which case you will get the (x, y, z) position of your tag. Note that 3D positioning requires a much more advanced anchor setup than 2.5D positioning. See the Choosing the anchors' locations section for more info about this.

Both with 2.5D and 3D you will get an (x, y, z) output. The difference is that with 2.5D this z will be fixed to the height you specify in your positioning profile. Switching between 2.5D and 3D changes nothing to the output format itself.

Height (old and new positioning engine, 2.5D only)

The correct configuration of the height of the tags (in mm) is important for accurate positioning in 2.5D. In this field, you can fill in the fixed height above the ground at which your tag will move around.

Min height and Max height (old and new positioning engine, 3D only)

Here you define the min and max heights between which your tags can move in 3D. This is important for filtering out outliers.

Filter type and Filter strength (old positioning engine only)

A filter can be applied to the positioning results that you get from the positioning algorithm. The app gives the choice between two filters:

  • Outlier only is a median filter that filters over a window defined by the configured filter strength.

  • Full adds a double exponential filter to the median filter.

The filter strength varies from Weak to Strong, corresponding to respectively a window of 2 and 5 positions. Note that increasing the filter strength will make the positioning smoother but will also increase the delay of your positioning results. For most applications, Outlier only will give the best performance.

Movement model (new positioning engine only)

You have the choice between two movement models:

  • Unpredictable movement: In the unpredictable movement model, the velocity of the tag is assumed to be normally distributed around 0.

  • Predictable movement: In the predicable movement model, the acceleration of the tag is assumed to be normally distributed around 0.

If your tags have a high update rate compared to their movement speed, then the updates will be relatively easy for the positioning system to predict. Select predictable movement in this case. Select unpredictable movement in all other cases.
Velocity values will be present in the positioning results.

Freedom of movement (new positioning engine only)

If you have an unpredictable movement model and a lot of variance in the speed of the tags is expected, select a stronger freedom of movement. If you don't expect variance in the speed, select a weaker freedom of movement.

If you have a predictable movement model and a lot of variance in the acceleration of the tags is expected, select a stronger freedom of movement. If you don't expect variance in the acceleration, select a weaker freedom of movement.

1 The way this happens is unpredictable: The update rate will not drop with the same amount for each tag. It could be that 1 tag is still being positioned at 10 Hz while another one is not being positioned at all.

2 The smoothing feature is only used in Pozyx Analytics because smoothing is only possible with a delay: filtering only takes previous positions into account, smoothing also takes future positions into account.
3 Some of our customers might have built additional filtering or smoothing on the positioning data they retrieve from their Pozyx system. Slightly different filtering in their Pozyx system could e.g. lead to the removal from a bias that they have already removed with their custom filtering / smoothing, leading to worse positioning results in the end.