So in aoaprocdsp.c, specifically AoAProcDSP_XYZEstimation() we have the following:
peakAzimIm = (float) azimuthFftOut[maxIdx].imag; peakAzimRe = (float) azimuthFftOut[maxIdx].real; peakElevIm = (float) res->elevationFftOut[maxIdx].imag; peakElevRe = (float) res->elevationFftOut[maxIdx].real;
where max_index gets passed in as a parameter
/** * @b Description * @n * This function is called per object and it calculates its x/y/z coordinates * based on Azimuth/elevation FFT outputs. It stores the coordinates * to the output list of type @ref DPIF_PointCloudCartesian_t and it also * calculates object's SNR and the noise level and writes into the side * information list of type @ref DPIF_PointCloudSideInfo_t * * @param[in] aoaDspObj Pointer to AoA DPU internal object * * @param[in] objOutIdx Index of the current object in the output lists @ref DPIF_PointCloudCartesian_t and @ref DPIF_PointCloudSideInfo_t * * @param[in] objInCfarIdx Index of the current object in CFAR output list @ref DPIF_CFARDetList_t * * @param[in] maxIdx Peak position in the FFT output of azimuth antennas * * @param[in] dopplerSignIdx The signed Doppler index * * @retval objOutIdx Index for the next object in the output list * * * \ingroup DPU_AOAPROC_INTERNAL_FUNCTION * */ static uint32_t AoAProcDSP_XYZestimation ( AOADspObj *aoaDspObj, uint32_t objOutIdx, uint32_t objInCfarIdx, uint32_t maxIdx, int32_t dopplerSignIdx )
If so, it doesn't seem quite right. You can imagine a scenario where the target moves directly towards the radar, thereby changing the elevation angle while the azimuth stays constant.
We see this separation in the function AoAProcHWA_XYZestimationAoA2D() that is part of the AoAHWA2D DPU. This function seems to have different indices for elevation and azimuth peaks, as would make sense.
So, to put it bluntly, is there something wrong with the AoAProcDSP XYZ estimation or is this intended functionality?