PDoA Mechanism - variable p

I am using QM33120WDK1, looked for the source code qorvo providing.
The following figure is what I understood.
1

Based on variable d between two antennas 1&2 and variable r from antenna 1 to the tag, and lastly variable p, we can get the angle / coordinate x&y.

I was going back to the code that where variable p from.
I could reach to somewhere read pdoa result from this function.

/**
 * dw3000_readpdoa - Read the PDOA result.
 * @dw: The DW device.
 *
 * This is used to read the PDOA result, it is the phase difference between
 * either the Ipatov and STS POA, or the two STS POAs, depending on the PDOA
 * mode of operation. (POA - Phase Of Arrival).
 * NOTE: To convert to degrees: float pdoa_deg =
 * ((float)pdoa / (1 << 11)) * 180 / M_PI.
 *
 * Return: The PDOA result (signed in [1:-11] radian units).
 */
static inline s16 dw3000_readpdoa(struct dwchip_s *dw)
{
    int16_t tmp;
    dw->dwt_driver->dwt_mcps_ops->ioctl(dw, DWT_READPDOA, 0, (void *)&tmp);
    return tmp;
}

Input is coming from this structure : dwchip_s → mcps802154_llhw : Low-level hardware without MCPS
Getting data from SPI communication from dw series chip.

Question 1. The terms that are used in here : Ipatov, STS POA, MCPS
Question 2. So, where is variable coming from?

Uwb sp1 type of frames structure is sync-sfd-sts-phr-data.

Sync is neutral and is equal to Ipatov, which is a name of scientist who discovered autocorrelated sequences which are named “ipatov sequences” - search wikipedia.

STS is a “Secure Time Stamp” specially generated by special block sequence, similar to ipatov, but is used for security, read 802.15.4-2020 standard.

POA is “phase of arrival”;

MCPS - is an abreviature from sw, in your case a structure which has a pointer to the low level driver instance…

I think if you’ll put more questions here, those who are writing documentation would improve it

Declaration of p that I wanna know :

float p_diff_m; /* Path difference between the ports (m). */

But the value from function that is called ‘rx_get_measurement’ at the beginning.

Final Question : How to get this measurement? Where does this input from? Can someone explain this to me?

static int rx_get_measurement(struct mcps802154_llhw *llhw, void *rx_ctx,
struct mcps802154_rx_measurement_info *info)
{
struct dwchip_s *dw = (struct dwchip_s *)llhw->priv;
dwt_config_t *config = dw->config->rxtx_config->pdwCfg;

My guess : just low-level hardware(=dw series chip) get that value by it working when the power get in, is it correct?

Than again, how the chip that get value?

any answer for this?

It is hard to guess what you mean on your questions.

i would advise you invest some time on the reading the example code which you have and digging how it works.

Hi @hank1 !

The signal from the tag is received by both antennas but with different phases due to the distance “d”, from this difference, the AoA is estimated. So, no need to calculate “p” (I don’t even know if it is possible, considering the data available).

Please take a look at this FiRa Consortium video, explaining more about AoA/PDoA:

Kind regards!