Range bias error

Hello, please I’m trying to deal with errors due to obstacle (LOS). I got a really good range measure in NLOS case with the example code given by decave after calibration with antenna delay. But when I put my body between the differents tags I got until 1m error in mean while it’s said in APS011 that bias error are taken into account.
So my questions are:

  • which command may I use to get signal power received ?
  • Is is realist to try to calibrate in a environnemnt where there are many object presents ?
    Thanks.

The command to get the power depends on the system / firmware you are running. The user manuals will give you the registers to read and the maths to do to calculate both first path and total power. These numbers and the difference between them can give an indication of how clean the signal is but aren’t some magic indicator that will give you a definitive LOS / NLOS indication.
Is it realistic to calibrate for lots of objects? Depends on the objects, their permanence and material and how accurate you need the end result to be.

As you discovered your body is a very good signal blocker. Big sacks of salty water (or people as we call them) are very good RF absorbers at higher frequencies. That’s why microwave ovens work so well.

When signals are blocked there are two possibilities:

  1. The signal passes through the obstruction but is weaker that LOS. In this situation you can decrease the receive threshold and hope to still pick it up. If you do pick the signal up it will be delayed a small amount due to the lower signal level.
  2. The signal is completely blocked / blocked to the point it’s too weak to pick up. In this situation you will often pick up a reflection, the range will be significantly longer than truth. The reflection can at times be stronger than the direct signal.

In the event of 1) you can look at the signal levels and attempt to correct the errors.
In situation 2) all you can realistically do is detect that this has happened and avoid using the bad signal. You can detect based on signal level but this can be unreliable or based on ranges. Going by the range requires either some history data to detect a jump in position or range, this only works with short term obstructions. Or you can over determine the position, if you have more ranges than you need then if one signal is reflected the maths won’t add up to give a single position solution. You can then try to work out which range is the bad one. If nothing else the failure to converge on a single solution is a good indicator of a low quality position.

1 Like

Thank you for your quick response.
But I’ve some questions:

  • what do you means by decrease the receive threshold ?
  • How do you differentiate if it’s reflected signal or if the signal just cross the obstacle ?
    Thanks.
  • what do you means by decrease the receive threshold ?

The chip detects the time for the leading edge of a signal by looking for the received signal crossing a certain power level.

This required level is calculated based on the noise level of the environment and a couple of register settings, in the DW1000 this is Sub-Register 0x2E:0806, LDE_CFG1. Exactly how these values and the noise level are used to calculate the threshold has as far as I can tell never been fully explained.
For LOS operation you generally want a higher threshold to avoid false triggers but dropping this threshold can increase the ability to detect weak signals either due to long ranges or due to the direct path being blocked.

This then has an impact on range measurement, a weaker signal needs to get closer to it’s peak before it reaches the same level which means later detection for signals that have been partly blocked. If the threshold is lowered things will be detected sooner and so all other things being equal you will read shorter ranges.

How do you differentiate if it’s reflected signal or if the signal just cross the obstacle ?

If I knew that I’d be paying someone else to answer forum questions :slight_smile:
As mentioned before you can make a guess based on signal levels. Or you can measure 4 or more ranges and look for things that don’t add up. It’s the sort of thing that looking at a full data log a human can pick out the bad signals and work out what they were fairly quickly and easily. Doing it automatically and in real time is a lot harder.
As a first pass you could take the shortest range you ever see as truth, reflections will always have to travel further after all. Any significant increases in range that can’t be explained by motion must then be due to reflections. But what if the range drops to half way between the two, is that now a direct signal and you’ve moved or is it a different reflection? And then in just the right situations (or the wrong situations depending on how you look at it) a reflection can result in a measurement that is shorter than truth. It’s rare and is very environment specific but can happen.

You can normally tell what’s going on and where the true signal is if you look at the CIR data. But that’s slow enough to read that it’s not practical for anything that wants a reasonable update rate.

1 Like

Thank you :slight_smile:
You helped me a lot.