DWM3000 CIR Amplitude Inconsistency

We used a pair of Tx-RXs to send and receive consecutive frames, and collected the CIR magnitudes of Preamble per frame.
Despite the static environment, the value of CIR amplitude was not constant as shown in the figure below

  • We aligned plotted CIR amplitudes by adjusting FP_INDEX to 250 index, i.e. first path index is 250.
  • The plotted CIR amplitudes are calculated by accum_cir_amplitude / accum_count.
  • configured with Channel 9, 128 preamble length 128, and 9th preamble code


Frame Diagnosis Informations
[CIR 1]
{‘ipatov_rx_status’: 0,
‘ipatov_poa’: 5522,
‘xtal_offset’: 8190,
‘cia_diag1’: 40192,
‘ipatov_peak_amplitude’: 7029,
‘ipatov_peak_index’: 241,
‘ipatov_power’: 56,
‘ipatov_F1’: 5489,
‘ipatov_F2’: 7025,
‘ipatov_F3’: 4835,
‘ipatov_fp_index’: 239,
‘ipatov_accum_count’: 111,
‘dgc_decision’: 2}

[CIR 3]: received 100 ms later than [CIR 1]
{‘ipatov_rx_status’: 0,
‘ipatov_poa’: 4432,
‘xtal_offset’: 6,
‘cia_diag1’: 40192,
‘ipatov_peak_amplitude’: 5078,
‘ipatov_peak_index’: 239,
‘ipatov_power’: 30,
‘ipatov_F1’: 5083,
‘ipatov_F2’: 4704,
‘ipatov_F3’: 1545,
‘ipatov_fp_index’: 238,
‘ipatov_accum_count’: 113,
‘dgc_decision’: 3}

We assume that these problems are related to AGC or DGC. We want to adjust the scale of the CIR amplitudes. How can we do this?


Hi Jinew,

Thanks for reporting the issue. We are looking into this and will respond with feedback soon.
In order to properly evaluate this issue, can you share the details about which firmware are you using for this test and the test enviromnet?

Thanks & Regards,

We used DWM3000evbs as a tx-rx pair.
They were separated by 1m distance, and frames were transmitted every 25ms from tx to rx in a static environment .

We used a python progroam to be reported CIR samples, diagnotics and DGC_DECISIONs from rx module through USB CDC.

[dwt_readdiagnotics code]

// rx_info->rx_diag : dwt_rxdiag_t variable
memset(&rx_info->rx_diag, 0, sizeof(rx_info->rx_diag));
rx_info->dgc_decision = dwt_get_dgcdecision();

[dwt_readaccdata code]

       uint16_t num_samples;
	if (config->rxCode < 9) {
		num_samples = 992;
	else {
		num_samples = 1016;
	if (config->stsMode != DWT_STS_MODE_OFF) {
		if (config->pdoaMode == DWT_PDOA_M3)
			num_samples += 512 * 2;
			num_samples += 512;
	memset(rx_info->acc_data, 0, MAX_ACC_LEN);
	rx_info->acc_data_len = num_samples*6 + 1;
	dwt_readaccdata(rx_info->acc_data, rx_info->acc_data_len, 0);


We made the mistake of not handling the fraction index part of FP_INDEX. After handling this, the result of collecting CIR again is shown in the figure below. Plotting was performed by aligning FP_INDEX to the 249~251 index.
CIR magnitude’s scales and values are determined according to DGC_decision value.
We want to calibrate these magnitudes ​​so that they are on a similar scale.