How is the CIR power value calculated?

Hello folks,

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?):

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

2. 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?

3. 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?

(I use a 64MHz PRF and no STS btw)

Best regards
Fhilb

Hi @Philb,

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.

https://www.qorvo.com/products/d/da008154

Let us know if you have any other questions.

Kind regards,
Emre

Hello Emre,

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.

Kind regards
Fhilb

Hi @fhilb,

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.

https://www.qorvo.com/products/d/da007992

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.

1. You can do the same to improve your accuracy of received power level estimation.
2. 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.

Kind regards,
Emre