Develop our own TOA Algorithm based on MDEK 1001

Hi all,
We plan to develop our own TOA(time of arrival) Algorithm based on MDEK 1001.
The steps of the plan are as follows.

  1. Develop our program using development tool chain provided by Decawave, and place it on User C Code Space on decawave 1001.
  2. Use C API to get calculated distances among tag and anchors.
  3. Develop program on Raspberry pi to get distance information from UART interface between Raspberry pi and DWM1001.
  4. Transmit distance information from Raspberry pi to Server,and develop TOA algorithm on Server.
    Please suggest if this plan is feasible.
    Thank you!
    Jeremy Kuo

Hi Jeremy,

I think there is a bit of confusion in your thoughts.

Decawave’s provide a firmware to use with DWM1001 which is Two Way Ranging, so based on time of flight.

Another common topology for networks is TDoA (Time Difference of Arrival) which I believe is the one your are referring to ? Is that correct ?

For a TDoA solution, please note that you are only interested in what time a signal emitted by a tag is
is received by each anchors. The difference of arrival allow you to determine the position of the tag. All anchors must be synchronized relatively to the same clock.

It is possible to develop a TDoA solution on the dwm1001 but you will have to start from scratch, it does not really make sense to try to develop it above the firmware provided by decawave (which is two way ranging).

Note that Decawave also has a TDoA solution available, if you are interested please contact the sales department.


It is not a trivial effort so “feasible” will depend on the time and money you are willing to invest, and what you hope to gain by developing your own.

We have an investment of at least 20 man years in RTLS algorithm development here at Ciholas. The seeming simplicity of the mathematics when first examined belie the true complexity of the real world in these systems.

For example:

A TDoA/ToA system requires some concept of global time. That is, you have to establish how to convert the time of arrival of a tag packet measured in the anchor local time to a universal global time shared in the entire system. There is no practical hardware solution to this (even sending clock signals via cables doesn’t work), so it requires modeling the local anchor clocks against a global time reference. This alone requires in depth understanding of crystals and oscillators to accomplish.

If your system will grow to any size, you also have to synchronize anchors that can’t hear each other directly. One clumsy solution is to divide your space into clumps of anchors and a tag moves between zones, which introduces problems at the boundaries. A more elegant solution is a distributed mesh time sync system with a uniform system wide concept of precise time so that there are no zone boundaries and a tag smoothly moves among the anchors. That is what we do, it can work with hundreds of anchors spread over huge areas, but it was a non trivial project to develop and test that. Testing, in particular, can be enormously time consuming and costly since you have to do it at scale for it to have meaning.

There are similar complexities with anchor communication, occlusion mitigation, system configuration and monitoring, data weighting, non linearity, position noise, etc, etc. Many of the challenges are not obvious at the start.

Realistically, developing your own TDoA/ToA system won’t be feasible unless you have a big project that can afford the time and money to develop it in house. If you have a special need, the best bet is to find a provider who can customize their existing solution to provide it.

Mike Ciholas, President, Ciholas, Inc
3700 Bell Road, Newburgh, IN 47630 USA
+1 812 962 9408


Hi Yves,
Thank you for your reply!
We would like to develop TOA, not TDOA.
We hope we can get TWR ranging data(distance) for a specific tag from different anchors, and transmit these ranging data from anchors to a server. With the information from a specific tag to 3 different anchors, we can calculate the position based on TOA.
We have checked DWM1001-API-Guide, in section 4.3.9 dwm_loc_get, it seems we can get distance from a tag to anchors. However, we are not sure if it is correct.
Any suggestions are welcomed!
Thank you!

As Yves alluded to, what you describe is not ToA or TDoA, it is two way ranging (TWR), or the measurement of tag to anchor ranges by exchanging packets between them, for a set of anchors, something we call multirange location. This can be done in various modes (single sided, double sided, and grouping anchor sets), but all of it boils down to an exchange of packets between anchors and tags to measure time of flight (ToF). It is not a TDoA or ToA system.

Once you have a set of range measurements, then you can geometrically locate a tag. 2 anchors is enough to locate a tag with a known Z axis and known side of symmetry (general solution is a circle in space so you need something else to pick a point). 3 anchors is enough to locate a tag in 3D space if you can disambiguate the side of symmetry (generally assumed to be below the plane formed by the anchor array, but a point above it also fits the data). 4 anchors will locate in 3D space unambiguously, but introduces issues in a purely geometric treatment.

The real problem in such systems is that a purely geometric solution produces weird or no results in certain corner cases triggered by noise in the measurements, or by overly constrained results with 4 or more anchors. Geometric solutions are often very sensitive to noise or bad data over other methods.

In this context, “geometric solution” means one that is based on a formula where you can stick in the measurements and it produces a position. Usually based on trigonometric principles derived from assumed ideal relationships. Algorithms based on “best fit” or search concepts work much better but require considerable effort to optimize and tune for real world behavior to achieve acceptable results.

Mike Ciholas, President, Ciholas, Inc
3700 Bell Road, Newburgh, IN 47630 USA
+1 812 962 9408

1 Like

Hi Mike,
Got it. Thank you for your suggestions!