cuPHY  0.1
CUDA PHY Layer Acceration Library
Data Structures | Typedefs | Functions
Channel Equalization

This section describes the channel equalization functions of the cuPHY application programming interface. More...

Data Structures

struct  cuphyPuschRxChEqLaunchCfg_t
 

Typedefs

typedef struct cuphyPuschRxChEq * cuphyPuschRxChEqHndl_t
 

Functions

cuphyStatus_t cuphyCreatePuschRxChEq (cuphyContext_t ctx, cuphyPuschRxChEqHndl_t *pPuschRxChEqHndl, uint8_t enableCpuToGpuDescrAsyncCpy, void **ppStatDescrCpu, void **ppStatDescrGpu, cudaStream_t strm)
 Allocate and initialize a cuPHY PuschRx channel equalization object. More...
 
cuphyStatus_t cuphyDemodulateSymbol (cuphyContext_t context, cuphyTensorDescriptor_t tLLR, void *pLLR, cuphyTensorDescriptor_t tSym, const void *pSym, int log2_QAM, float noiseVariance, cudaStream_t strm)
 Perform symbol demodulation. More...
 
cuphyStatus_t cuphyDestroyPuschRxChEq (cuphyPuschRxChEqHndl_t puschRxChEqHndl)
 Destroys a cuPHY PUSCH channel equalization object. More...
 
cuphyStatus_t cuphyModulateSymbol (cuphyTensorDescriptor_t tSym, void *pSym, cuphyTensorDescriptor_t tBits, const void *pBits, int log2_QAM, cudaStream_t strm)
 Perform symbol modulation. More...
 
cuphyStatus_t cuphyPuschRxChEqGetDescrInfo (size_t *pStatDescrSizeBytes, size_t *pStatDescrAlignBytes, size_t *pCoefCompDynDescrSizeBytes, size_t *pCoefCompDynDescrAlignBytes, size_t *pSoftDemapDynDescrSizeBytes, size_t *pSoftDemapDynDescrAlignBytes)
 Helper to compute cuPHY channel equalization descriptor buffer sizes and alignments. More...
 
cuphyStatus_t cuphySetupPuschRxChEqCoefCompute (cuphyPuschRxChEqHndl_t puschRxChEqHndl, cuphyPuschRxUeGrpPrms_t *pDrvdUeGrpPrmsCpu, cuphyPuschRxUeGrpPrms_t *pDrvdUeGrpPrmsGpu, uint16_t nUeGrps, uint16_t nMaxPrb, uint8_t enableCfoCorrection, uint8_t enablePuschTdi, uint8_t enableCpuToGpuDescrAsyncCpy, void **pDynDescrsCpu, void **pDynDescrsGpu, cuphyPuschRxChEqLaunchCfgs_t *pLaunchCfgs, cudaStream_t strm)
 Setup cuPHY channel equalization coefficient compute for slot processing. More...
 
cuphyStatus_t cuphySetupPuschRxChEqSoftDemap (cuphyPuschRxChEqHndl_t puschRxChEqHndl, cuphyPuschRxUeGrpPrms_t *pDrvdUeGrpPrmsCpu, cuphyPuschRxUeGrpPrms_t *pDrvdUeGrpPrmsGpu, uint16_t nUeGrps, uint16_t nMaxPrb, uint8_t enableCfoCorrection, uint8_t enablePuschTdi, uint8_t enableCpuToGpuDescrAsyncCpy, void *pDynDescrsCpu, void *pDynDescrsGpu, cuphyPuschRxChEqLaunchCfgs_t *pLaunchCfgs, cudaStream_t strm)
 Setup cuPHY channel equalization soft demap for slot processing. More...
 

Detailed Description

Typedef Documentation

◆ cuphyPuschRxChEqHndl_t

typedef struct cuphyPuschRxChEq* cuphyPuschRxChEqHndl_t

cuPHY PUSCH Receiver channel equalization handle

Function Documentation

◆ cuphyCreatePuschRxChEq()

cuphyStatus_t cuphyCreatePuschRxChEq ( cuphyContext_t  ctx,
cuphyPuschRxChEqHndl_t pPuschRxChEqHndl,
uint8_t  enableCpuToGpuDescrAsyncCpy,
void **  ppStatDescrCpu,
void **  ppStatDescrGpu,
cudaStream_t  strm 
)

Allocates a cuPHY channel equalization object and returns a handle in the address provided by the caller.

Returns CUPHY_STATUS_INVALID_ARGUMENT if pPuschRxChEqHndl and/or ppStatDescrCpu and/or ppStatDescrGpu and/or ctx is NULL.

Returns CUPHY_STATUS_ALLOC_FAILED if a PuschRxChEq object cannot be allocated

Returns CUPHY_STATUS_SUCCESS if allocation and initialization were successful

Parameters
ctx- cuPHY context
pPuschRxChEqHndl- Address to return the new PuschRxChEq instance
enableCpuToGpuDescrAsyncCpy- flag if non-zero enables async copy of CPU descriptor into GPU
ppStatDescrCpu- Pointer to array of static descriptors in CPU memory
ppStatDescrGpu- Pointer to array of static descriptors in GPU memory
strm- CUDA stream for descriptor copy operation
Returns
CUPHY_STATUS_SUCCESS, CUPHY_STATUS_ALLOC_FAILED, CUPHY_STATUS_INVALID_ARGUMENT
See also
cuphyStatus_t,cuphyGetErrorName,cuphyGetErrorString,cuphyPuschRxChEqGetDescrInfo,cuphySetupPuschRxChEqCoefCompute,cuphySetupPuschRxChEqSoftDemap,cuphyDestroyPuschRxChEq

◆ cuphyDemodulateSymbol()

cuphyStatus_t cuphyDemodulateSymbol ( cuphyContext_t  context,
cuphyTensorDescriptor_t  tLLR,
void *  pLLR,
cuphyTensorDescriptor_t  tSym,
const void *  pSym,
int  log2_QAM,
float  noiseVariance,
cudaStream_t  strm 
)

Perform symbol demodulation, generating log-likelihood values (LLRs) for each bit

Returns CUPHY_STATUS_SUCCESS if demodulation is launched successfully

Returns CUPHY_STATUS_INVALID_ARGUMENT if context, tSym, pSym, tLLR, or pLLR are NULL or if log2_QAM is not between 1 and 8 (inclusive) or if noiseVariance is negative

Parameters
context- cuPHY context
tLLR- tensor descriptor for output log-likelihood values
pLLR- address of output log-likelihood values
tSym- tensor descriptor for symbol values
pSym- address of symbol tensor data
log2_QAM- log2(QAM), describing the quadrature amplitude that the symbols were modulated with
noiseVariance- QAM noise variance
strm- CUDA stream for kernel launch
Returns
CUPHY_STATUS_SUCCESS, CUPHY_STATUS_INVALID_ARGUMENT
See also
cuphyStatus_t,cuphyGetErrorName,cuphyGetErrorString,cuphyModulateSymbol

◆ cuphyDestroyPuschRxChEq()

cuphyStatus_t cuphyDestroyPuschRxChEq ( cuphyPuschRxChEqHndl_t  puschRxChEqHndl)

Destroys a cuPHY PUSCH channel equalization object that was previously created by cuphyCreatePuschRxChEq. The handle provided to this function should not be used for any operations after this function returns.

Returns CUPHY_STATUS_INVALID_ARGUMENT if puschRxChEqHndl is NULL.

Returns CUPHY_STATUS_SUCCESS if destruction was successful.

Parameters
puschRxChEqHndl- handle to previously allocated PuschRxChEq instance
Returns
CUPHY_STATUS_SUCCESS, CUPHY_STATUS_INVALID_ARGUMENT
See also
cuphyStatus_t,cuphyGetErrorName,cuphyGetErrorString,cuphyCreatePuschRxChEq,cuphyPuschRxChEqGetDescrInfo,cuphySetupPuschRxChEqCoefCompute,cuphySetupPuschRxChEqSoftDemap

◆ cuphyModulateSymbol()

cuphyStatus_t cuphyModulateSymbol ( cuphyTensorDescriptor_t  tSym,
void *  pSym,
cuphyTensorDescriptor_t  tBits,
const void *  pBits,
int  log2_QAM,
cudaStream_t  strm 
)

Perform symbol modulation, generating symbol values for an input sequence of bits

Returns CUPHY_STATUS_SUCCESS if modulation is launched successfully

Returns CUPHY_STATUS_INVALID_ARGUMENT if tSym, pSym, tBits, or pBits are NULL, or if log2_QAM does not represent a supported modulation value (1, 2, 4, 6, or 8) Returns CUPHY_STATUS_UNSUPPORTED_TYPE is tSym is not of type CUPHY_C_32F or CUPHY_C_16F, or if tBits is not of type CUPHY_BIT Returns CUPHY_STATUS_SIZE_MISMATCH if tBits is not a multiple of log2_QAM, or if the first dimension of tSym is not equal to first dimension of tBits divided by log2_QAM

Parameters
tSym- tensor descriptor for complex symbol values
pSym- address of output symbol values
tBits- tensor descriptor for input bit
pBits- address of input bit values
log2_QAM- log2(QAM), describing the quadrature amplitude that the symbols were modulated with. This is the number of bits represented by each symbol. Value values are 1 (BPSK), 2 (QPSK), 4 (QAM16), 6 (QAM64), and 8 (QAM256)
strm- CUDA stream for kernel launch
Returns
CUPHY_STATUS_SUCCESS, CUPHY_STATUS_INVALID_ARGUMENT
See also
cuphyStatus_t,cuphyGetErrorName,cuphyGetErrorString,cuphyDemodulateSymbol

◆ cuphyPuschRxChEqGetDescrInfo()

cuphyStatus_t cuphyPuschRxChEqGetDescrInfo ( size_t *  pStatDescrSizeBytes,
size_t *  pStatDescrAlignBytes,
size_t *  pCoefCompDynDescrSizeBytes,
size_t *  pCoefCompDynDescrAlignBytes,
size_t *  pSoftDemapDynDescrSizeBytes,
size_t *  pSoftDemapDynDescrAlignBytes 
)

Computes cuPHY PUSCH channel equalization descriptor buffer sizes and alignments. To be used by the caller to allocate these buffers (in CPU and GPU memories) and provide them to other PuschRxChEq APIs

Returns CUPHY_STATUS_INVALID_ARGUMENT if pStatDescrSizeBytes and/or pStatDescrAlignBytes and/or pCoefCompDynDescrSizeBytes and/or pCoefCompDynDescrAlignBytes and/or pSoftDemapDynDescrSizeBytes and/or pSoftDemapDynDescrAlignBytes

Returns CUPHY_STATUS_SUCCESS if allocation and initialization were successful.

Parameters
pStatDescrSizeBytes- Size in bytes of equalizer common static descriptor
pStatDescrAlignBytes- Alignment in bytes of equalizer common static descriptor
pCoefCompDynDescrSizeBytes- Size in bytes of coefficient compute dynamic descriptor
pCoefCompDynDescrAlignBytes- Alignment in bytes of coefficient compute dynamic descriptor
pSoftDemapDynDescrSizeBytes- Size in bytes of soft demap dynamic descriptor
pSoftDemapDynDescrAlignBytes- Alignment in bytes of soft demap dynamic descriptor
Returns
CUPHY_STATUS_SUCCESS, CUPHY_STATUS_INVALID_ARGUMENT
See also
cuphyStatus_t,cuphyGetErrorName,cuphyGetErrorString,cuphyCreatePuschRxChEq,cuphySetupPuschRxChEqCoefCompute,cuphySetupPuschRxChEqSoftDemap,cuphyDestroyPuschRxChEq

◆ cuphySetupPuschRxChEqCoefCompute()

cuphyStatus_t cuphySetupPuschRxChEqCoefCompute ( cuphyPuschRxChEqHndl_t  puschRxChEqHndl,
cuphyPuschRxUeGrpPrms_t *  pDrvdUeGrpPrmsCpu,
cuphyPuschRxUeGrpPrms_t *  pDrvdUeGrpPrmsGpu,
uint16_t  nUeGrps,
uint16_t  nMaxPrb,
uint8_t  enableCfoCorrection,
uint8_t  enablePuschTdi,
uint8_t  enableCpuToGpuDescrAsyncCpy,
void **  pDynDescrsCpu,
void **  pDynDescrsGpu,
cuphyPuschRxChEqLaunchCfgs_t *  pLaunchCfgs,
cudaStream_t  strm 
)

Setup cuPHY PUSCH channel equalization coefficient compute in preparation towards slot execution

Returns CUPHY_STATUS_SUCCESS if setup is successful.

Returns CUPHY_STATUS_INVALID_ARGUMENT if puschRxChEqHndl and/or pLaunchCfgs and/or pDynDescrsCpu and/or pDynDescrsGpu is NULL.

Parameters
puschRxChEqHndl- Handle to previously created PuschRxChEq instance
pDrvdUeGrpPrmsCpu- Pointer to derived UE groups parameters in CPU memory
pDrvdUeGrpPrmsGpu- Pointer to derived UE groups parameters in GPU memory
nUeGrps- total number of UE groups to be processed
nMaxPrb- maximum number of data PRBs across all UE groups
enableCfoCorrection- enable application of CFO correction
enablePuschTdi- enable time domain interpolation on equalizer coefficients
enableCpuToGpuDescrAsyncCpy- Flag when set enables async copy of CPU descriptor into GPU
pDynDescrsCpu- Pointer to dynamic descriptor in CPU memory
pDynDescrsGpu- Pointer to dynamic descriptor in GPU memory
pLaunchCfgs- Pointer to channel estimation launch configurations
strm- CUDA stream for descriptor copy operation
Returns
CUPHY_STATUS_SUCCESS, CUPHY_STATUS_INVALID_ARGUMENT
See also
cuphyStatus_t,cuphyGetErrorName,cuphyGetErrorString,cuphyCreatePuschRxChEq,cuphyPuschRxChEqGetDescrInfo,cuphySetupPuschRxChEqSoftDemap,cuphyDestroyPuschRxChEq

◆ cuphySetupPuschRxChEqSoftDemap()

cuphyStatus_t cuphySetupPuschRxChEqSoftDemap ( cuphyPuschRxChEqHndl_t  puschRxChEqHndl,
cuphyPuschRxUeGrpPrms_t *  pDrvdUeGrpPrmsCpu,
cuphyPuschRxUeGrpPrms_t *  pDrvdUeGrpPrmsGpu,
uint16_t  nUeGrps,
uint16_t  nMaxPrb,
uint8_t  enableCfoCorrection,
uint8_t  enablePuschTdi,
uint8_t  enableCpuToGpuDescrAsyncCpy,
void *  pDynDescrsCpu,
void *  pDynDescrsGpu,
cuphyPuschRxChEqLaunchCfgs_t *  pLaunchCfgs,
cudaStream_t  strm 
)

Setup cuPHY PUSCH channel equalization soft demap in preparation towards slot execution

Returns CUPHY_STATUS_SUCCESS if setup is successful.

Returns CUPHY_STATUS_INVALID_ARGUMENT if puschRxChEqHndl and/or pLaunchCfgs and/or pDynDescrsCpu and/or pDynDescrsGpu is NULL.

Parameters
puschRxChEqHndl- Handle to previously created PuschRxChEq instance
pDrvdUeGrpPrmsCpu- Pointer to derived UE groups parameters in CPU memory
pDrvdUeGrpPrmsGpu- Pointer to derived UE groups parameters in GPU memory
nUeGrps- total number of UE groups to be processed
nMaxPrb- maximum number of data PRBs across all UE groups
enableCfoCorrection- enable application of CFO correction
enablePuschTdi- enable time domain interpolation on equalizer coefficients
enableCpuToGpuDescrAsyncCpy- Flag when set enables async copy of CPU descriptor into GPU
pDynDescrsCpu- Pointer to dynamic descriptor in CPU memory
pDynDescrsGpu- Pointer to dynamic descriptor in GPU memory
pLaunchCfgs- Pointer to channel estimation launch configurations
strm- CUDA stream for descriptor copy operation
Returns
CUPHY_STATUS_SUCCESS, CUPHY_STATUS_INVALID_ARGUMENT
See also
cuphyStatus_t,cuphyGetErrorName,cuphyGetErrorString,cuphyCreatePuschRxChEq,cuphyPuschRxChEqGetDescrInfo,cuphySetupPuschRxChEqCoefCompute,cuphyDestroyPuschRxChEq