Three points/questions for the decawave people here:
Firstly a silly typo, the last paragraph of section 2 starts “There are two three approaches”.
Secondly you’ve missed what seems to me like a fairly obvious mitigation technique when using two way ranging: When using TWR it’s possible to calculate two different ranges, the tag-anchor-tag measured range and the anchor-tag-anchor measured range. Due to clock differences these two will be different, the whole point of TWR is to minimize the errors that create these differences, but they are still going to be fairly similar. If you see one range significantly different to the other then that is a good indication that something went wrong with your timing measurements. This doesn’t catch all instances of the problem but it can help reduce them. The ones that get through tend to be the larger errors when multiple packets were incorrectly detected, larger errors are easier to catch with an outlier filter.
Your final option is to filter out signals with a first path before a certain index. I’ve asked before and never had a reply - is there any way to automate this?
I’d imagine that there is some microcode running on the DW1000 that performs the first path detection, scanning through the CIR memory for the first point over the threshold. If so then the initial location to start that search would be set somewhere to being 0. If that start point value was set somewhere in the large banks of reserved register space then if you knew the correct memory location you could change the first path search to start at say 650 rather than 0 and so automatically reject the reflected peaks.
This is all based on random speculation as to how the internals of the DW1000 work which is probably complete wrong but it would be nice at least to have it confirmed that it’s not possible.