RadarBartlettBeamformerDoA (Direction of Arrival)#

Functions#

NVCVStatus pvaDoaBartlettBeamformingComputeSteeringVectors(NVCVTensorHandle virtualArrayLocations, NVCVTensorHandle azimuthBins, NVCVTensorHandle elevationBins, NVCVTensorHandle steeringVectors)

Computes steering vectors for Bartlett beamforming DOA estimation.

NVCVStatus pvaDoaBartlettBeamformingCreate(NVCVOperatorHandle *handle, NVCVTensorRequirements const *const snapshotsTensorRequirements, NVCVTensorRequirements const *const detectionListTensorRequirements, NVCVTensorRequirements const *const ddmDopplerOffsetsTensorRequirements, NVCVTensorRequirements const *const targetAnglesTensorRequirements, NVCVTensorRequirements const *const targetIndexMapTensorRequirements, PVADoaBartlettBeamformingParams const *const params)

Constructs an instance of the Bartlett Beamforming DOA operator.

NVCVStatus pvaDoaBartlettBeamformingSubmit(NVCVOperatorHandle handle, cudaStream_t stream, NVCVTensorHandle const detectionCount, NVCVTensorHandle const snapshots, NVCVTensorHandle const steeringVectors, NVCVTensorHandle const azimuthBins, NVCVTensorHandle const elevationBins, NVCVTensorHandle const detectionList, NVCVTensorHandle const ddmDopplerOffsets, NVCVTensorHandle targetCount, NVCVTensorHandle targetAngles, NVCVTensorHandle targetIndexMap)

Submits the Bartlett Beamforming DOA operator to a CUDA stream.

NVCVStatus pvaDoaBartlettBeamformingSubmit(NVCVOperatorHandle handle, cupvaStream_t stream, NVCVTensorHandle const detectionCount, NVCVTensorHandle const snapshots, NVCVTensorHandle const steeringVectors, NVCVTensorHandle const azimuthBins, NVCVTensorHandle const elevationBins, NVCVTensorHandle const detectionList, NVCVTensorHandle const ddmDopplerOffsets, NVCVTensorHandle targetCount, NVCVTensorHandle targetAngles, NVCVTensorHandle targetIndexMap)

Submits the Bartlett Beamforming DOA operator to a cuPVA stream.

Functions#

NVCVStatus pvaDoaBartlettBeamformingComputeSteeringVectors(
NVCVTensorHandle virtualArrayLocations,
NVCVTensorHandle azimuthBins,
NVCVTensorHandle elevationBins,
NVCVTensorHandle steeringVectors,
)#

Computes steering vectors for Bartlett beamforming DOA estimation.

This utility function computes steering vectors based on virtual antenna array locations and angle bins, and fills the provided tensor. The steering vectors can be reused across multiple operator submissions as long as the antenna configuration and angle bins remain unchanged.

Steering vectors are computed as: e^(-j·2π·phase) where phase = vcPosition.x · cos(elevation) · sin(azimuth) + vcPosition.y · sin(elevation) Virtual antenna array locations are in wavelengths.

Parameters:
  • virtualArrayLocations[in] Virtual antenna array locations tensor (in wavelengths). Shape: [numTxAntennas, numRxAntennas]. Data Type: NVCV_DATA_TYPE_2F32 (2-channel float32, representing [x, y] coordinates). For each TX-RX antenna pair, Channel 0: x position, Channel 1: y position.

    • Must not be NULL.

    • numTxAntennas × numRxAntennas ≤ 64 (maximum 64 virtual channels).

    • numTxAntennas × numRxAntennas must be divisible by 8.

  • azimuthBins[in] Azimuth angle bins tensor (degrees). Data Layout: [W] where W = numAzimuthBins. Data Type: NVCV_DATA_TYPE_F32.

    • Must not be NULL.

  • elevationBins[in] Elevation angle bins tensor (degrees). Data Layout: [W] where W = numElevationBins. Data Type: NVCV_DATA_TYPE_F32.

    • Must not be NULL.

  • steeringVectors[out] Output tensor: Steering vectors. Data Layout: [numAzimuthBins][numElevationBins][numTxAntennas][numRxAntennas]. Rank: 4. Data Type: NVCV_DATA_TYPE_2S16 (Complex Q15 fixed-point).

    • Must not be NULL.

Return values:
  • NVCV_ERROR_INVALID_ARGUMENT – Some parameter is NULL or outside valid range, or tensor doesn’t match requirements.

  • NVCV_ERROR_INTERNAL – Internal error during computation.

  • NVCV_SUCCESS – Operation executed successfully.

NVCVStatus pvaDoaBartlettBeamformingCreate(
NVCVOperatorHandle *handle,
NVCVTensorRequirements const *const snapshotsTensorRequirements,
NVCVTensorRequirements const *const detectionListTensorRequirements,
NVCVTensorRequirements const *const ddmDopplerOffsetsTensorRequirements,
NVCVTensorRequirements const *const targetAnglesTensorRequirements,
NVCVTensorRequirements const *const targetIndexMapTensorRequirements,
PVADoaBartlettBeamformingParams const *const params,
)#

Constructs an instance of the Bartlett Beamforming DOA operator.

This operator performs Bartlett beamforming (conventional beamforming) for Direction of Arrival (DOA) estimation using pre-computed steering vectors. It outputs target angles (azimuth, elevation, and optional power) and a target index map.

Limitations:

 - Maximum detections/targets: 8192
 - Virtual channels: numTxAntennas x numRxAntennas <= 64, must be divisible by 8
 - numAzimuthBins <= 256
 - numElevationBins <= 255
 - Full 2D mode: numAzimuthBins x numElevationBins <= 2048
Separable mode:
 When separableParams.enableSeparable is true, uses a 2-step search
 (azimuth at el0, then neighborhood × all elevations) for reduced
 complexity: O(numAz + (2N+1) × numEl) vs O(numAz × numEl).
 See \ref PVASeparableBartlettParams for configuration.

Parameters:
  • handle[out] Where the operator instance handle will be written to.

    • Must not be NULL.

  • snapshotsTensorRequirements[in] Snapshots tensor requirements.

    • Data Layout: [CHW] — C: number of detections (numDetections); H: number of TX antennas (numTxAntennas); W: number of RX antennas (numRxAntennas).

    • Rank: 3

    • Data Type: NVCV_DATA_TYPE_2S32 (Complex SQ11.20 fixed-point).

  • detectionListTensorRequirements[in] Range-Doppler Detection List tensor requirements.

    • Data Layout: [HW] — H: number of detections (numDetections); W: 2 (rangeIdx, dopplerIdx).

    • Rank: 2

    • Data Type: NVCV_DATA_TYPE_S32.

  • ddmDopplerOffsetsTensorRequirements[in] DDM Doppler Offsets tensor requirements.

    • Data Layout: [W] — W: number of Doppler folds (numDopplerFolds), typically 1.

    • Rank: 1

    • Data Type: NVCV_DATA_TYPE_F32.

    • Currently only the first element (TX1 offset) is used.

  • targetAnglesTensorRequirements[in] Target angles tensor requirements.

    • Data Layout: [HW] — H: 2 (without peak power) or 3 (with peak power); W: maximum number of targets (capacity).

    • Rank: 2

    • Data Type: NVCV_DATA_TYPE_F32.

    • Target angles in SOA form — row 0: azimuth (degrees); row 1: elevation (degrees); row 2: optional peak power (dB). Valid target count is in targetCount tensor.

  • targetIndexMapTensorRequirements[in] Target index map tensor requirements.

    • Data Layout: [W] — W: maximum number of targets (capacity).

    • Rank: 1

    • Data Type: NVCV_DATA_TYPE_S32.

    • Maps each target to its corresponding detection index.

  • params[in] Pointer to the Bartlett Beamforming parameters. PVADoaBartlettBeamformingParams.

Return values:
  • NVCV_ERROR_INVALID_ARGUMENT – Handle is null or some parameter is outside valid range.

  • NVCV_ERROR_OUT_OF_MEMORY – Not enough memory to create the operator.

  • NVCV_ERROR_INVALID_IMAGE_FORMAT – Image format is invalid.

  • NVCV_SUCCESS – Operation executed successfully.

NVCVStatus pvaDoaBartlettBeamformingSubmit(
NVCVOperatorHandle handle,
cudaStream_t stream,
NVCVTensorHandle const detectionCount,
NVCVTensorHandle const snapshots,
NVCVTensorHandle const steeringVectors,
NVCVTensorHandle const azimuthBins,
NVCVTensorHandle const elevationBins,
NVCVTensorHandle const detectionList,
NVCVTensorHandle const ddmDopplerOffsets,
NVCVTensorHandle targetCount,
NVCVTensorHandle targetAngles,
NVCVTensorHandle targetIndexMap,
)#

Submits the Bartlett Beamforming DOA operator to a CUDA stream.

Performs beamforming on the provided snapshots using pre-computed steering vectors to estimate azimuth and elevation angles for each detection.

Note

CUDA stream support requirements:

  • PVA SDK 2.7.0 or later

  • Jetpack 7 or later

  • DriveOS 7 or later

  • x86 Emulator is not supported

Parameters:
  • handle[in] Handle to the operator.

    • Must not be NULL.

  • stream[in] Handle to a valid CUDA stream.

  • detectionCount[in] Input tensor: Detection Count. Data Layout: [W] where W=1. Data Type: NVCV_DATA_TYPE_S32.

  • snapshots[in] Input tensor: Snapshots. Data Layout: [CHW] where C=numDetections, H=numTxAntennas, W=numRxAntennas. Data Type: NVCV_DATA_TYPE_2S32 (Complex SQ11.20 fixed-point). Antenna snapshots extracted from range-Doppler map for each detection.

  • steeringVectors[in] Input tensor: Pre-computed steering vectors. Data Layout: [numAzimuthBins][numElevationBins][numTxAntennas][numRxAntennas]. Rank: 4. Data Type: NVCV_DATA_TYPE_2S16 (Complex Q15 fixed-point).

    • Must not be NULL.

    • Must be computed using pvaDoaBartlettBeamformingComputeSteeringVectors.

    • Must match the antenna configuration and angle bins.

  • azimuthBins[in] Input tensor: Azimuth angle bins for peak index to angle mapping. Data Layout: [W] where W = numAzimuthBins. Data Type: NVCV_DATA_TYPE_F32.

    • Must not be NULL.

    • Must match the azimuth bins used to compute steering vectors.

  • elevationBins[in] Input tensor: Elevation angle bins for peak index to angle mapping. Data Layout: [W] where W = numElevationBins. Data Type: NVCV_DATA_TYPE_F32.

    • Must not be NULL.

    • Must match the elevation bins used to compute steering vectors.

  • detectionList[in] Input tensor: Range-Doppler Detection List. Data Layout: [HW] where H=numDetections, W=2 (rangeIdx, dopplerIdx). Data Type: NVCV_DATA_TYPE_S32.

  • ddmDopplerOffsets[in] Input tensor: DDM Doppler Offsets. Data Layout: [W] where W=numDopplerFolds (typically 1). Data Type: NVCV_DATA_TYPE_F32. Currently only the first element (TX1 offset) is used.

  • targetCount[out] Output tensor: Target Count. Data Layout: [W] where W=1. Data Type: NVCV_DATA_TYPE_S32.

  • targetAngles[out] Output tensor: Target Angles. Data Layout: [HW] where H=2 (without peak power) or 3 (with peak power), W=Maximum number of targets (capacity). Data Type: NVCV_DATA_TYPE_F32.

    • Row 0: Azimuth angles (degrees)

    • Row 1: Elevation angles (degrees)

    • Row 2: Optional: Peak power (dB)

  • targetIndexMap[out] Output tensor: Target Index Map. Data Layout: [W] where W=Maximum number of targets (capacity). Data Type: NVCV_DATA_TYPE_S32. Maps each target to its corresponding detection index.

Return values:
  • NVCV_ERROR_INVALID_ARGUMENT – Handle is null or steering vectors don’t match operator configuration.

  • NVCV_ERROR_INTERNAL – Internal error in the operator, invalid types passed in.

  • NVCV_SUCCESS – Operation executed successfully.

NVCVStatus pvaDoaBartlettBeamformingSubmit(
NVCVOperatorHandle handle,
cupvaStream_t stream,
NVCVTensorHandle const detectionCount,
NVCVTensorHandle const snapshots,
NVCVTensorHandle const steeringVectors,
NVCVTensorHandle const azimuthBins,
NVCVTensorHandle const elevationBins,
NVCVTensorHandle const detectionList,
NVCVTensorHandle const ddmDopplerOffsets,
NVCVTensorHandle targetCount,
NVCVTensorHandle targetAngles,
NVCVTensorHandle targetIndexMap,
)#

Submits the Bartlett Beamforming DOA operator to a cuPVA stream.

Performs beamforming on the provided snapshots using pre-computed steering vectors to estimate azimuth and elevation angles for each detection.

Parameters:
  • handle[in] Handle to the operator.

    • Must not be NULL.

  • stream[in] Handle to a valid cuPVA stream.

  • detectionCount[in] Input tensor: Detection Count. Data Layout: [W] where W=1. Data Type: NVCV_DATA_TYPE_S32.

  • snapshots[in] Input tensor: Snapshots. Data Layout: [CHW] where C=numDetections, H=numTxAntennas, W=numRxAntennas. Data Type: NVCV_DATA_TYPE_2S32 (Complex SQ11.20 fixed-point). Antenna snapshots extracted from range-Doppler map for each detection.

  • steeringVectors[in] Input tensor: Pre-computed steering vectors. Data Layout: [numAzimuthBins][numElevationBins][numTxAntennas][numRxAntennas]. Rank: 4. Data Type: NVCV_DATA_TYPE_2S16 (Complex Q15 fixed-point).

    • Must not be NULL.

    • Must be computed using pvaDoaBartlettBeamformingComputeSteeringVectors.

    • Must match the antenna configuration and angle bins.

  • azimuthBins[in] Input tensor: Azimuth angle bins for peak index to angle mapping. Data Layout: [W] where W = numAzimuthBins. Data Type: NVCV_DATA_TYPE_F32.

    • Must not be NULL.

    • Must match the azimuth bins used to compute steering vectors.

  • elevationBins[in] Input tensor: Elevation angle bins for peak index to angle mapping. Data Layout: [W] where W = numElevationBins. Data Type: NVCV_DATA_TYPE_F32.

    • Must not be NULL.

    • Must match the elevation bins used to compute steering vectors.

  • detectionList[in] Input tensor: Range-Doppler Detection List. Data Layout: [HW] where H=numDetections, W=2 (rangeIdx, dopplerIdx). Data Type: NVCV_DATA_TYPE_S32.

  • ddmDopplerOffsets[in] Input tensor: DDM Doppler Offsets. Data Layout: [W] where W=numDopplerFolds (typically 1). Data Type: NVCV_DATA_TYPE_F32. Currently only the first element (TX1 offset) is used.

  • targetCount[out] Output tensor: Target Count. Data Layout: [W] where W=1. Data Type: NVCV_DATA_TYPE_S32.

  • targetAngles[out] Output tensor: Target Angles. Data Layout: [HW] where H=2 (without peak power) or 3 (with peak power), W=Maximum number of targets (capacity). Data Type: NVCV_DATA_TYPE_F32. Actual valid target count is returned in targetCount tensor.

    • Row 0: Azimuth angles (degrees)

    • Row 1: Elevation angles (degrees)

    • Row 2: Optional: Peak power (dB)

  • targetIndexMap[out] Output tensor: Target Index Map. Data Layout: [W] where W=Maximum number of targets (capacity). Data Type: NVCV_DATA_TYPE_S32. Maps each target to its corresponding detection index.

Return values:
  • NVCV_ERROR_INVALID_ARGUMENT – Handle is null or steering vectors don’t match operator configuration.

  • NVCV_ERROR_INTERNAL – Internal error in the operator, invalid types passed in.

  • NVCV_SUCCESS – Operation executed successfully.