DWM1001-DEV + PANS Distance Accuracy

Hi, I would like to ask for some advice on further steps I could take with DWM1001-DEV, on top of the user guide instructions.

I have installed PANS 2.0 firmware, have created RTLS network and I’m able to poll the anchor-tag distances from a tag by using ‘dwm_loc_get’ call.

I’m mostly satisfied with the measurements that I get, but as a newbie with DWM1001, I would like to ask if there is anything that can be done, on top of the base setup, to improve the distance measurements?

I’m asking because there are some instabilities in the measurements I get, especially when I myself physically approach any node (without breaking LOS). Here is an example of such reading. I’m mostly interested in the distance measurements, so my test setup consists of one tag and one achor.

Distance readings

Setup

Thank you, I’d appreciate any guidance.

Unfortunately the short answer is probably not easily.

Define “physically approach a node”, are we talking 1m, 1cm, 1mm?
If you get within the near field of the antenna (a few wavelengths) then you will impact the antenna gain pattern, if you get close to the line of sight path then you could attenuate the signal or create reflections which destructively interfere with the signal and so cause reflections to be picked up instead of the LOS signal.
So depending on what exactly is happening noise spikes are to be expected. Plus UWB radio is very low power and is trying to measure signal times to fractions of a nanosecond, even under ideal conditions it’s going to be a little noisy. You add in all of the RF noise in a typical room and you’re going to get the occasional bad measurement.

The simple wins all involve getting the best possible signal conditions. Avoid putting the units hard up against walls, keeping electronics / housings a little away from the antennas, keeping things off the floor, and ensure you have the best antenna orientation. You’ve already done all of that.
There may be a very slight gain by raising things up from the desk surface a little more and possibly rotating 180 degrees about the vertical axis so the component sides are facing each other. But I’d expect any improvement from that to be minimal at best.

Using PANS there isn’t a lot more you can do to improve the performance other than improve the physical setup which is already close enough to perfect. All the other settings are locked down in order to maintain the approvals certification.
You can improve overall system performance by adding some processing to the measurements. Any large errors will always result in distances that are too long (there is one exception to this but it’s fairly rare). So if you reject any measurements that represent a large jump in range and then apply a low pass filter or averaging to what’s left you can get a better range number at the cost of a slightly slower response to changes in range.

PANS is generic, as an off the shelf system it’s great but since it’s generic it’s never going to be optimised for any given situation. If you only want point to point range then different firmware will let you measure the range much more rapidly giving more points to average / filter. While this doesn’t remove the noise directly it means you can filter while maintaining responsiveness and do it all on the hardware so that the output from the device is cleaner. However since this involves custom firmware it’s significantly more effort and development work, especially if you need to certify the final result.

Which brings us back to the short answer, while you could in theory improve on this there probably isn’t much you can easily do to improve things in any meaningful way.

Thank you a lot for such a detailed answer, @AndyA!

I think that your suggestion to go with filtering is a promising approach. I would like to try, but currently I get only about 1-1.5 distance measurements per second per anchor, which isn’t much for averaging.

I’m using ‘dwm_loc_get’ command over serial in TLV mode. Would you say that this is an expected rate for this approach? Or maybe there is a faster alternative way to read distances in PANS, like listening to a stream of measurements?

Starting in approximately 1 meter from the node, and not wearing any electronic devices. I guess, this briefly introduces an alternative pathway, I just didn’t expect that reflection could be in any way comparable to the direct propagation in signal power.

Many thanks!

I’m not too familiar with PANS, I know roughly how it works but have never actually used it myself so I can’t give any good answers on how to configure it. If there are any configuration options for higher update rates or lower maximum numbers of tags then that may help.

I’m surprised you’re seeing any measurable impact 1m away. In terms of these frequencies people are good RF absorbers so I would expect an impact in the 10-20 cm region but not that far away unless you’re blocking or close to blocking the LOS path.

If you can access the CIR data through PANS (I’m not sure if it’s possible or not) then that can give you an indication of what the reflections look like. Generally unless you’re in the middle of an open field they are quite horrible and often stronger than the direct signal.

Thank you, I’ll look into that.

Have you used different firmware with DWM1001 instead of PANS?

I used the DWM1000, just the RF chip without a processor, and later the DW1000 chip directly. I started this all long enough ago that I wrote my own libraries and ranging system based on the user manual and application notes rather than using any of the decawave code.

A lot more work but it means that the whole system is tuned to being exactly what I wanted. Plus it forces you to understand exactly what is going on.

Hi @kakhmadeev
for PANS SW you can the update rate up to 10Hz - in shell the command is aurs 1 1 in api it is dwm_upd_rate_set.

Cheers
Jk

Thanks, did that. Now, by calling ‘les’ in shell mode and then parcing the stream from serial port, I’m getting distances at 10 samples per second. I’ll explore the filtering options, from here.

I have a last question, not sure if it deserves its own topic, but let me know if it does:
I have one tag and four anchors. Now, I’m pulling tag-achnor distances d1..d4 from a tag node. Is it possible to pull them from an anchor? Should I look into establishing a bridge node for that?