Channel Sounding Distance accurancy issue

Hello Support Team,

I am currently testing the new Channel Sounding feature on two nRF54L15 boards, on which I flashed your Channel Sounding samples (initiator and reflector).
I noticed that the distance accuracy (for example, using the IFFT) is not as precise as I expected (see the graph below). 

I tested with real distances of 5 m and 4.5 m, but the measured values were significantly different — with more than 4 m of error for the 4.5 m test. I am a bit confused about this behavior.

I also performed a test at 13 m in another environment, this time with more Bluetooth devices nearby that could generate interference. However, the IFFT results were very irregular, and I find it difficult to understand its behavior.

Do you have any idea what could cause this inaccuracy ?

For these tests, I was in a typical indoor environment.
The only change I made in the code was adjusting the sleepins time from 5 s to 1 s.
I am using NCS version 3.1.0.

Thank you for your help

Parents
  • Hi,

    So first of all, CS isn't UWB; the best you can expect is ±0.5m. So the distance is progressing in steps. The way it almost seems that you've made it do on the bottom 13m test(?) might be a good way to look at it. Differentiating between ±0.5m would be impossible/hard.

    Secondly, it is tempting to simply say that you should disregard anything but the IFFT measurement - which I would also claim performs ok-ish in the tests you've shown (although I am not so sure why it bounces down to 0 in the 13m test). IFFT might be the most developed algorithm, but the truth is rather that all of these metrics work best in different situations. RSSI is okay in short range for instance, and RTT is best for very long ranges. This old webinar (which is meant to describe how our old "Distance Toolbox" worked, but the tech is almost the same) goes a bit further into the details of what separates these measurements. Another thing I just realized when finding the webinar now is that phase slope might get you a max range, but don't quote me on that.

    Most importantly: if you really want a good accuracy for your product, what you would typically do is to buy a third party algorithm that gets you a better accuracy than what our free code does. I assume the better algorithms combine all of these metrics in some fancy way. If you contact your local regional sales manager I bet he would be able to put you in contact with someone selling third party CS algorithms.

    Regards,

    Elfving

  • Hi Elfving,

    Thanks a lot for your detailed feedback and for clarifying the limitations of Channel Sounding accuracy.

    Yes, I watched the webinar and also tested the different methods using the previous Distance Toolbox. It helped me indeed to understand more about the different method.

    To come back to the 13 m test, I understand that the distance progresses in steps, but I was surprised by how long it takes to reach an acceptable level of accuracy. 
    Also In that setup, the initiator and reflector were in different rooms, about 13 m apart — can Channel Sounding still work properly under those conditions?

    I also have a few additional questions:

    • Does the relative orientation of the Bluetooth antennas affect the accuracy?

    • Does the sleep time parameter influence the results, and what exactly is its role?

    • Can the reflector be moving, or does it need to remain static?

    • Are there any parameters I could tune to improve accuracy before considering a third-party algorithm?

    Thank you for your help and time,

    Best regards,


    Fhar

Reply
  • Hi Elfving,

    Thanks a lot for your detailed feedback and for clarifying the limitations of Channel Sounding accuracy.

    Yes, I watched the webinar and also tested the different methods using the previous Distance Toolbox. It helped me indeed to understand more about the different method.

    To come back to the 13 m test, I understand that the distance progresses in steps, but I was surprised by how long it takes to reach an acceptable level of accuracy. 
    Also In that setup, the initiator and reflector were in different rooms, about 13 m apart — can Channel Sounding still work properly under those conditions?

    I also have a few additional questions:

    • Does the relative orientation of the Bluetooth antennas affect the accuracy?

    • Does the sleep time parameter influence the results, and what exactly is its role?

    • Can the reflector be moving, or does it need to remain static?

    • Are there any parameters I could tune to improve accuracy before considering a third-party algorithm?

    Thank you for your help and time,

    Best regards,


    Fhar

Children
  • Fhar said:

    Also In that setup, the initiator and reflector were in different rooms, about 13 m apart — can Channel Sounding still work properly under those conditions?

    It would impact it, though bodies (or anything containing water) would typically impact it more. So the question is rather how much accuracy you need, given your use case. 

    Fhar said:
    Does the relative orientation of the Bluetooth antennas affect the accuracy?

    Well I guess it could. I am not really a HW guy, but the radiation pattern would for sure play a role. And if you use multiple antennas (as is common in some direction finding and channel sounding use-cases) then ofcourse the orientation of that plane would play a role.

    Fhar said:
    Does the sleep time parameter influence the results, and what exactly is its role

    I am not sure if I am familiar with that one. Where did you find this?

    Fhar said:
    Can the reflector be moving, or does it need to remain static?

    It can be moving. I think the IFFT estimates work better with more previous samples, so it won't benefit the estimates if the distance follows eg. a quick sine wave, though it is made to track something moving.

    Fhar said:
    Are there any parameters I could tune to improve accuracy before considering a third-party algorithm?

    It is hard to point to a specific spot in the code where you should do one specific thing. My impression is that there is a lot one could do here. Currently, a 3-stage average filter is used in the SDK. If you want something simple, then maybe it would be enough to raise that to a 5-stage filter, as well as only relying on the IFFT estimate. 

    Though you could also add an antenna matrix and the code for that, try to combine all the different estimates (IFFT, phase slope etc.), and on top of that add a Kalman filter. 

    Regards,

    Elfving

  • I am not sure if I am familiar with that one. Where did you find this?

    Yes sorry, It refers indeed to the delay between each measurement ( in my understanding). In the code, it is called in the main loop as  k_sleep(K_MSEC(5000));, which introduces a 5-second pause between distance readings.

    Currently, a 3-stage average filter is used in the SDK. If you want something simple, then maybe it would be enough to raise that to a 5-stage filter, as well as only relying on the IFFT estimate. 

    Regarding the "3-stage average filter", I couldn’t clearly identify it in the code either. I tried increasing the sliding window size from #define DE_SLIDING_WINDOW_SIZE (9) to 15 and then 20, but didn’t notice any significant improvement in the results. If you have more insight on where this filter is implemented or how it’s supposed to work, I’d be happy to look into it further.

    Though you could also add an antenna matrix and the code for that, try to combine all the different estimates (IFFT, phase slope etc.), and on top of that add a Kalman filter. 

    I assume it requires multiple antennas to work correctly. From what I know, the Dev Kit nrf54L15 dk only has a single Bluetooth antenna isn't ? 

    So the question is rather how much accuracy you need, given your use case. 

    I initially tested the Channel Sounding solution to achieve precise distance measurements (ideally <1 meter), even with obstacles like walls.
    Recent tests with both Dev Kits aligned face-to-face ( antennas looking at each other) . It seems I have better results — around 0.5 to 1 meter error for short distances (0–6 meters) without obstacles.
    Next, I’ll need to re-test with obstacles, making sure the antennas are properly aligned — which is a bit trickier when the devices are in separate rooms.

    Thank you again for your help and time, 

    Regards, 

    Fhar

  • Fhar said:

    Yes sorry, It refers indeed to the delay between each measurement ( in my understanding). In the code, it is called in the main loop as  k_sleep(K_MSEC(5000));, which introduces a 5-second pause between distance readings.

    Ah, I think that just is there to limit what gets logged so that it is easier for the user to understand the sample.

    Fhar said:
    Regarding the "3-stage average filter", I couldn’t clearly identify it in the code either.

    I heard this from the relevant team, and I now see that by this they meant they filter it, and then take the average or something, and I guess it has 3 stages in that sense. My thinking was that you could increase the amount of samples used for this process, which I see is controlled by DE_SLIDING_WINDOW_SIZE which is set to 9 by default. The averaging is done here.

    Fhar said:

    I assume it requires multiple antennas to work correctly. From what I know, the Dev Kit nrf54L15 dk only has a single Bluetooth antenna isn't ? 

    Yeah, for the multiple antenna version of channel sounding you need that, and the DKs only have one.

    Fhar said:
    I initially tested the Channel Sounding solution to achieve precise distance measurements (ideally <1 meter), even with obstacles like walls.
    Recent tests with both Dev Kits aligned face-to-face ( antennas looking at each other) . It seems I have better results — around 0.5 to 1 meter error for short distances (0–6 meters) without obstacles.

    That sort of precision is the goal for channel sounding, though better algorithms might give you these results in other situations, and with potential obstructions.

    Note that you can get much better precision with what is called UWB, though that is something we sadly do not provide. I also hear that it costs a lot more.

    Fhar said:
    Thank you again for your help and time, 

    No problem at all, please let us know if there is anything else.

    Regards,
    Elfving

  • It looks like what is called "average" is actually a median filter. This works differently as outliers are ignored totally while in average they will impact the results. You use median filters here as one of the quirks of phase based ranging is that you can get suddenly get very wrong results caused by for instance multipath. With a median filter these are removed while with average they would "count".

    More advanced and tailored filtering can also be used if you need even better performance

Related