I use a esp32 to interact with the DW3000 chip directly. I am now at a point where I need to get the signal strength in order to correct the signal strength bias that is further explained in the application note 11.

I read the CIR value from register 0x0C:2C and use it in the calculation of the signal strength.
The results I get (in a steady environment) vary by around 5dB - which I find is quite a lot:

I’ve compared the results to the raw values that are used in the power calculation and found a significant spike in the CIR value (from ~35 to ~80) whenever the signal power gets lower.

I have 3 questions that can hopefully be answered (maybe even from the qorvo support itself?):

How is the CIR power value calculated? Is it an estimate? If so, it is stated nowhere.

According to chapter 4.7.2 of the DW3000 manual, there are 3 subregisters where the CIR power value can be read from. They seem to be identical, but one of them (0x0C:2C) uses a 17 bit reserved space compared to 16 bits for the others. Is there a difference in the values and if not, why is there 1 bit more in this one register?

The application note 11 (“Sources of Error in DW1000 based twr schemes”) states to adjust the range bias depending on the signal strength. Chapter 4.7.1 of the dw3000 manual shows a different approach to calculate the signal power of the first path.
Which of those approaches (chapter 4.7.1 vs 4.7.2) is more applicable for doing this kind of bias adjustment?

We estimate the received signal power level according to the CIR. In DW3000 User Manual Section 4.7.2, you can find the formula to calculate RSSI based on CIR value. If you don’t take the DGC_DECISON into account, it is normal to have 5-6 dB fluctuations in your readings at the same input power level. For that reason, I recommend you use RSSI readings instead of implementing your method to calculate the received signal power level.

I actually use the calculation from chapter 4.7.2 of the user manual. My method looks like this:

double DW3000Class::getSignalStrength() { //Returns the signal strength of the received frame in dBm
int CIRpower = read(0x0C, 0x2C) & 0x1FF;
int PAC_val = read(0x0C, 0x58) & 0xFFF;
unsigned int DGC_decision = (read(0x03, 0x60) >> 28) & 0x7;
double PRF_const = 121.7;
return 10 * log10((CIRpower * (1 << 21)) / pow(PAC_val, 2)) + (6 * DGC_decision) - PRF_const;
}

As you can see, the DGC_DECISION gets integrated in this calculation as well, so I’d expect it not to spike that way.

Where can I find a precalculated value of the RSSI readings in the DW3000 register? If I understand correctly, the only option is to calculate it yourself given the equation in chapter 4.7.2.

I am glad that you have already known that part in the user manual.

You can try to use the Slotted_TWR_Demo_ARM in the software package in the link below to get the RSSI readings from the DW3000. It uses the same formula as your method and calculates the RSSI.

The graph in the user manual which looks quite linear is an average estimate of the RSSI in conducted measurement. This means there are several measurements and corresponding RSSI readings are taken and averaged to estimate received power level.

You can do the same to improve your accuracy of received power level estimation.

You can try the same measurement in the conducted domain to see if the fluctuation is decreased. If so, you can use the first path power level to estimate the received power level instead of RSSI if you want to measure the LOS UWB signal strength instead of other noise or reflections.

For your 3rd question about adjusting the range bias,

Since we don’t have DGC in DW1000, the range bias is far worse than the DW3000. Thanks to DGC, we can adjust the receiver gain in DW3000 and hence minimize the effect of range bias. Therefore, there isn’t any range bias correction in the DW3000 user manual according to the received signal level.

In APS011, the received signal is estimated by using Friis’ path loss formula. Therefore, it doesn’t rely on the RSSI or first path power readings.

That would probably be good information to include in the comparison to the DW1000 - especially when upgrading from 1000 to 3000, but good to know, thanks