Commit 678b8a23 authored by Robert Schmidt's avatar Robert Schmidt

Merge remote-tracking branch 'origin/nr_ue_odd_prb_fixes' into integration_2022_wk38

parents 1273846c 4e024e1f
...@@ -680,39 +680,7 @@ void dlsch_detection_mrc_TM34(NR_DL_FRAME_PARMS *frame_parms, ...@@ -680,39 +680,7 @@ void dlsch_detection_mrc_TM34(NR_DL_FRAME_PARMS *frame_parms,
unsigned short nb_rb, unsigned short nb_rb,
unsigned char dual_stream_UE); unsigned char dual_stream_UE);
/** \fn dlsch_extract_rbs_single(int32_t **rxdataF, /** \fn dlsch_extract_rbs(int32_t **rxdataF,
int32_t **dl_ch_estimates,
int32_t **rxdataF_ext,
int32_t **dl_ch_estimates_ext,
uint32_t *rb_alloc,
uint8_t symbol,
NR_DL_FRAME_PARMS *frame_parms)
\brief This function extracts the received resource blocks, both channel estimates and data symbols,
for the current allocation and for single antenna eNB transmission.
@param rxdataF Raw FFT output of received signal
@param dl_ch_estimates Channel estimates of current slot
@param rxdataF_ext FFT output for RBs in this allocation
@param dl_ch_estimates_ext Channel estimates for RBs in this allocation
@param rb_alloc RB allocation vector
@param symbol Symbol to extract
@param n_dmrs_cdm_groups
@param frame_parms Pointer to frame descriptor
*/
unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
int **dl_ch_estimates,
int **rxdataF_ext,
int **dl_ch_estimates_ext,
unsigned char symbol,
uint8_t pilots,
uint8_t config_type,
unsigned short start_rb,
unsigned short nb_rb_pdsch,
uint8_t n_dmrs_cdm_groups,
NR_DL_FRAME_PARMS *frame_parms,
uint16_t dlDmrsSymbPos,
int chest_time_type);
/** \fn dlsch_extract_rbs_multiple(int32_t **rxdataF,
int32_t **dl_ch_estimates, int32_t **dl_ch_estimates,
int32_t **rxdataF_ext, int32_t **rxdataF_ext,
int32_t **dl_ch_estimates_ext, int32_t **dl_ch_estimates_ext,
...@@ -737,19 +705,19 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF, ...@@ -737,19 +705,19 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
@param frame_parms Pointer to frame descriptor @param frame_parms Pointer to frame descriptor
*/ */
void nr_dlsch_extract_rbs(int **rxdataF, void nr_dlsch_extract_rbs(int **rxdataF,
int **dl_ch_estimates, int **dl_ch_estimates,
int **rxdataF_ext, int **rxdataF_ext,
int **dl_ch_estimates_ext, int **dl_ch_estimates_ext,
unsigned char symbol, unsigned char symbol,
uint8_t pilots, uint8_t pilots,
uint8_t config_type, uint8_t config_type,
unsigned short start_rb, unsigned short start_rb,
unsigned short nb_rb_pdsch, unsigned short nb_rb_pdsch,
uint8_t n_dmrs_cdm_groups, uint8_t n_dmrs_cdm_groups,
uint8_t Nl, uint8_t Nl,
NR_DL_FRAME_PARMS *frame_parms, NR_DL_FRAME_PARMS *frame_parms,
uint16_t dlDmrsSymbPos, uint16_t dlDmrsSymbPos,
int chest_time_type); int chest_time_type);
/** \fn dlsch_extract_rbs_TM7(int32_t **rxdataF, /** \fn dlsch_extract_rbs_TM7(int32_t **rxdataF,
int32_t **dl_bf_ch_estimates, int32_t **dl_bf_ch_estimates,
......
...@@ -495,15 +495,34 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, ...@@ -495,15 +495,34 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
uint8_t pmi=pusch_pdu->Tpmi; uint8_t pmi=pusch_pdu->Tpmi;
if (pmi == 0) {//unitary Precoding if (pmi == 0) {//unitary Precoding
if(ap< pusch_pdu->nrOfLayers) if (k + NR_NB_SC_PER_RB <= frame_parms->ofdm_symbol_size) { // RB does not cross DC
memcpy((void*)&txdataF[ap][l*frame_parms->ofdm_symbol_size + k], if (ap<pusch_pdu->nrOfLayers)
(void*)&tx_precoding[ap][2*(l*frame_parms->ofdm_symbol_size + k)], memcpy(&txdataF[ap][l*frame_parms->ofdm_symbol_size + k],
NR_NB_SC_PER_RB*sizeof(int32_t)); &tx_precoding[ap][2*(l*frame_parms->ofdm_symbol_size + k)],
else NR_NB_SC_PER_RB*sizeof(int32_t));
memset((void*)&txdataF[ap][l*frame_parms->ofdm_symbol_size + k], else
0, memset(&txdataF[ap][l*frame_parms->ofdm_symbol_size + k],
NR_NB_SC_PER_RB*sizeof(int32_t)); 0,
NR_NB_SC_PER_RB*sizeof(int32_t));
} else { // RB does cross DC
int neg_length = frame_parms->ofdm_symbol_size - k;
int pos_length = NR_NB_SC_PER_RB - neg_length;
if (ap<pusch_pdu->nrOfLayers) {
memcpy(&txdataF[ap][l*frame_parms->ofdm_symbol_size + k],
&tx_precoding[ap][2*(l*frame_parms->ofdm_symbol_size + k)],
neg_length*sizeof(int32_t));
memcpy(&txdataF[ap][l*frame_parms->ofdm_symbol_size],
&tx_precoding[ap][2*(l*frame_parms->ofdm_symbol_size)],
pos_length*sizeof(int32_t));
} else {
memset(&txdataF[ap][l*frame_parms->ofdm_symbol_size + k],
0,
neg_length*sizeof(int32_t));
memset(&txdataF[ap][l*frame_parms->ofdm_symbol_size],
0,
pos_length*sizeof(int32_t));
}
}
k += NR_NB_SC_PER_RB; k += NR_NB_SC_PER_RB;
if (k >= frame_parms->ofdm_symbol_size) { if (k >= frame_parms->ofdm_symbol_size) {
k -= frame_parms->ofdm_symbol_size; k -= frame_parms->ofdm_symbol_size;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment