Clarification on 14-bit POA Conversion and Discrepancy from First Path Phase in PDOA Mode 3

Hi all,
I’m working with UWB diagnostics data in PDOA Mode 3, and I have a couple of questions regarding the POA (Phase of Arrival) values.

From the diagnostics, I receive 14-bit unsigned POA values for ipatovPOA, stsPOA, and sts2POA. Based on my understanding, these values can be converted to phase in radians by using the formula:

POA (radians) = POA_value * (2 * π / 2¹⁴)

Q1: Is this conversion correct? Does this give me the expected [0, 2π) phase range?

Q2: If the above conversion is correct, I’m noticing a difference between the POA values obtained from diagnostics and those derived from the CIR’s first path sample. Specifically:

  • POA from CIR first path samples:
    • ipatov: 0.2880 rad
    • sts: 5.9854 rad
    • sts2: 6.0356 rad
  • POA from diagnostics using the 14-bit formula above:
    • ipatov: 0.3858 rad
    • sts: 1.8116 rad
    • sts2: 1.8392 rad

There seems to be a significant discrepancy. Could anyone help me understand why this difference occurs? Are these two sets of POA values expected to align, or is there an offset or reference difference I should be accounting for?

Any insights or clarifications would be greatly appreciated!
Thanks in advance.

They are supposed to align.
POA values are actually signed numbers, but stored as unsigned numbers. So you cannot simply use the formula in your post. You need to judge whether it is positive or negative, and then convert it to signed number. This could be the reason why you got different results for POA readings and result from CIR.

BC

I read your post, and based on that, I added logic to check the sign using the 14th bit (MSB) and apply appropriate adjustments. I also included the division by (2**11) as mentioned.

After that, I calculated the phase of the sample at the First Path Index (FP_INDEX) and compared it, only to find that there’s a noticeable discrepancy. I also computed the PDOA between STS_1 and STS_2 and observed that the result differed somewhat from the (PDOA / 2**11) value provided in the diagnostics.

I suspect this is because FP_INDEX refers to samples at 1 ns resolution, rather than the finer 1/64 ns resolution. As a result, the derived phase may be slightly inaccurate. I believe that if we compensate for the fractional part of the FP_INDEX as a phase shift, the result might align more closely with the diagnostics value. What do you think about this approach?

This is my poa_uint16_to_radian function in my python project:

def poa_uint16_to_radian(poa_uint16):
    """
    Convert a 14-bit signed POA value (stored in uint16) to radians.
    POA format: signed 14-bit fixed-point (rad × 2^11)

    Parameters:
        poa_uint16 (int): Raw POA value (0–16383 range assumed)

    Returns:
        float: Phase in radians (range: -π to +π)
    """

    # 1. Extract 14-bit value
    poa_14bit = poa_uint16 & 0x3FFF

    # 2. Convert to signed 14-bit integer
    if poa_14bit >= 8192:
        poa_signed = poa_14bit - 16384  # Two's complement for negative values
    else:
        poa_signed = poa_14bit

    # 3. Convert fixed-point value to radians
    phase_rad = poa_signed / 2048.0  # Since value is in rad × 2^11

    return phase_rad

And this is the result of two samples.
Sample 1:

[sts_1_fp_sample, sts_2_fp_sample]
2.826986177688784 2.997290328233547
[diag_stsPOA, diag_sts2POA]
2.501953125 2.666015625

[sts_1_fp_sample - sts_2_fp_sample]
-0.1703041505447631
[diag_stsPOA - diag_sts2POA]
-0.1640625

[diag_pdoa]
-0.18603515625

Sample 2:

[sts_1_fp_sample, sts_2_fp_sample]
-1.3774794636095957 -1.5226034746003427
[diag_stsPOA, diag_sts2POA]
0.705078125 0.5537109375

[sts_1_fp_sample - sts_2_fp_sample]
0.145124010990747
[diag_stsPOA - diag_sts2POA]
0.1513671875

[diag_pdoa]
0.17333984375

I’m conducting the measurements in a clear LOS environment with a 50 cm distance, but the values still vary each time. What do you think could be the reason for this?

Additionally, the results of 1000 samples’ PDOA is:

Thanks!

It is normal that POA changes for different measurements because of time-varying carrier frequency offsets. PDOAs should remain more or less the same.

For a single CIR measurement, the phases around the FP index (at least for the range of FPI±1) should be quite similar if it is a clear LOS environment.