refactor: make rxdataF_comp 4D array
put symbol index as first dimension. It is necessary because the offset for the buffer to start of a symbol can be arbitrary and hence not aligned to 32 byte boundary. Having each symbol in a separate dimension ensures alignment.
This commit is contained in:
@@ -1384,7 +1384,8 @@ void nr_pdsch_ptrs_processing(int nbRx,
|
|||||||
c16_t ptrs_phase_per_slot[][14],
|
c16_t ptrs_phase_per_slot[][14],
|
||||||
int32_t ptrs_re_per_slot[][14],
|
int32_t ptrs_re_per_slot[][14],
|
||||||
uint32_t rx_size_symbol,
|
uint32_t rx_size_symbol,
|
||||||
c16_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
|
int nl,
|
||||||
|
c16_t rxdataF_comp[][nl][nbRx][rx_size_symbol],
|
||||||
NR_DL_FRAME_PARMS *frame_parms,
|
NR_DL_FRAME_PARMS *frame_parms,
|
||||||
NR_DL_UE_HARQ_t *dlsch0_harq,
|
NR_DL_UE_HARQ_t *dlsch0_harq,
|
||||||
NR_DL_UE_HARQ_t *dlsch1_harq,
|
NR_DL_UE_HARQ_t *dlsch1_harq,
|
||||||
@@ -1477,7 +1478,7 @@ void nr_pdsch_ptrs_processing(int nbRx,
|
|||||||
*nb_rb,
|
*nb_rb,
|
||||||
rnti,
|
rnti,
|
||||||
frame_parms->ofdm_symbol_size,
|
frame_parms->ofdm_symbol_size,
|
||||||
rxdataF_comp[0][aarx] + symbol * rx_size_symbol,
|
rxdataF_comp[symbol][0][aarx],
|
||||||
gold,
|
gold,
|
||||||
(int16_t *)&phase_per_symbol[symbol],
|
(int16_t *)&phase_per_symbol[symbol],
|
||||||
&ptrs_re_symbol[symbol]);
|
&ptrs_re_symbol[symbol]);
|
||||||
@@ -1510,9 +1511,9 @@ void nr_pdsch_ptrs_processing(int nbRx,
|
|||||||
#ifdef DEBUG_DL_PTRS
|
#ifdef DEBUG_DL_PTRS
|
||||||
printf("[PHY][DL][PTRS]: Rotate Symbol %2d with %d + j* %d\n", i, phase_per_symbol[i].r,phase_per_symbol[i].i);
|
printf("[PHY][DL][PTRS]: Rotate Symbol %2d with %d + j* %d\n", i, phase_per_symbol[i].r,phase_per_symbol[i].i);
|
||||||
#endif
|
#endif
|
||||||
rotate_cpx_vector(&rxdataF_comp[0][aarx][i * rx_size_symbol],
|
rotate_cpx_vector(rxdataF_comp[i][0][aarx],
|
||||||
&phase_per_symbol[i],
|
&phase_per_symbol[i],
|
||||||
&rxdataF_comp[0][aarx][i * rx_size_symbol],
|
rxdataF_comp[i][0][aarx],
|
||||||
((*nb_rb) * NR_NB_SC_PER_RB),
|
((*nb_rb) * NR_NB_SC_PER_RB),
|
||||||
15);
|
15);
|
||||||
}// if not DMRS Symbol
|
}// if not DMRS Symbol
|
||||||
|
|||||||
@@ -141,7 +141,8 @@ void nr_pdsch_ptrs_processing(int nbRx,
|
|||||||
c16_t ptrs_phase_per_slot[][14],
|
c16_t ptrs_phase_per_slot[][14],
|
||||||
int32_t ptrs_re_per_slot[][14],
|
int32_t ptrs_re_per_slot[][14],
|
||||||
uint32_t rx_size_symbol,
|
uint32_t rx_size_symbol,
|
||||||
c16_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
|
int nl,
|
||||||
|
c16_t rxdataF_comp[][nl][nbRx][rx_size_symbol],
|
||||||
NR_DL_FRAME_PARMS *frame_parms,
|
NR_DL_FRAME_PARMS *frame_parms,
|
||||||
NR_DL_UE_HARQ_t *dlsch0_harq,
|
NR_DL_UE_HARQ_t *dlsch0_harq,
|
||||||
NR_DL_UE_HARQ_t *dlsch1_harq,
|
NR_DL_UE_HARQ_t *dlsch1_harq,
|
||||||
|
|||||||
@@ -133,15 +133,15 @@ static uint32_t build_csi_overlap_bitmap(fapi_nr_dl_config_dlsch_pdu_rel15_t *dl
|
|||||||
|
|
||||||
static void nr_dlsch_channel_compensation(uint32_t rx_size_symbol,
|
static void nr_dlsch_channel_compensation(uint32_t rx_size_symbol,
|
||||||
int nbRx,
|
int nbRx,
|
||||||
|
uint8_t n_layers,
|
||||||
c16_t rxdataF_ext[][rx_size_symbol],
|
c16_t rxdataF_ext[][rx_size_symbol],
|
||||||
int32_t dl_ch_estimates_ext[][rx_size_symbol],
|
int32_t dl_ch_estimates_ext[][rx_size_symbol],
|
||||||
c16_t dl_ch_mag[][nbRx][rx_size_symbol],
|
c16_t dl_ch_mag[][nbRx][rx_size_symbol],
|
||||||
c16_t dl_ch_magb[][nbRx][rx_size_symbol],
|
c16_t dl_ch_magb[][nbRx][rx_size_symbol],
|
||||||
c16_t dl_ch_magr[][nbRx][rx_size_symbol],
|
c16_t dl_ch_magr[][nbRx][rx_size_symbol],
|
||||||
c16_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
|
c16_t rxdataF_comp[][n_layers][nbRx][rx_size_symbol],
|
||||||
int ***rho,
|
int ***rho,
|
||||||
NR_DL_FRAME_PARMS *frame_parms,
|
NR_DL_FRAME_PARMS *frame_parms,
|
||||||
uint8_t n_layers,
|
|
||||||
unsigned char symbol,
|
unsigned char symbol,
|
||||||
int length,
|
int length,
|
||||||
unsigned char mod_order,
|
unsigned char mod_order,
|
||||||
@@ -175,7 +175,7 @@ static void nr_dlsch_channel_compensation(uint32_t rx_size_symbol,
|
|||||||
dl_ch_mag128b = (simde__m128i *)dl_ch_magb[l][aarx];
|
dl_ch_mag128b = (simde__m128i *)dl_ch_magb[l][aarx];
|
||||||
dl_ch_mag128r = (simde__m128i *)dl_ch_magr[l][aarx];
|
dl_ch_mag128r = (simde__m128i *)dl_ch_magr[l][aarx];
|
||||||
rxdataF128 = (simde__m128i *)rxdataF_ext[aarx];
|
rxdataF128 = (simde__m128i *)rxdataF_ext[aarx];
|
||||||
rxdataF_comp128 = (simde__m128i *)(rxdataF_comp[l][aarx] + symbol * rx_size_symbol);
|
rxdataF_comp128 = (simde__m128i *)(rxdataF_comp[symbol][l][aarx]);
|
||||||
|
|
||||||
for (int rb = 0; rb < nb_rb_0; rb++) {
|
for (int rb = 0; rb < nb_rb_0; rb++) {
|
||||||
if (mod_order > 2) {
|
if (mod_order > 2) {
|
||||||
@@ -390,7 +390,7 @@ static void nr_dlsch_extract_rbs(uint32_t rxdataF_sz,
|
|||||||
static void nr_dlsch_detection_mrc(uint32_t rx_size_symbol,
|
static void nr_dlsch_detection_mrc(uint32_t rx_size_symbol,
|
||||||
short nl,
|
short nl,
|
||||||
short n_rx,
|
short n_rx,
|
||||||
c16_t rxdataF_comp[][n_rx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
|
c16_t rxdataF_comp[][nl][n_rx][rx_size_symbol],
|
||||||
int ***rho,
|
int ***rho,
|
||||||
c16_t dl_ch_mag[][n_rx][rx_size_symbol],
|
c16_t dl_ch_mag[][n_rx][rx_size_symbol],
|
||||||
c16_t dl_ch_magb[][n_rx][rx_size_symbol],
|
c16_t dl_ch_magb[][n_rx][rx_size_symbol],
|
||||||
@@ -403,12 +403,12 @@ static void nr_dlsch_detection_mrc(uint32_t rx_size_symbol,
|
|||||||
|
|
||||||
if (n_rx > 1) {
|
if (n_rx > 1) {
|
||||||
for (int l = 0; l < nl; l++) {
|
for (int l = 0; l < nl; l++) {
|
||||||
rxdataF_comp128_0 = (simde__m128i *)(rxdataF_comp[l][0] + symbol * rx_size_symbol);
|
rxdataF_comp128_0 = (simde__m128i *)(rxdataF_comp[symbol][l][0]);
|
||||||
dl_ch_mag128_0 = (simde__m128i *)dl_ch_mag[l][0];
|
dl_ch_mag128_0 = (simde__m128i *)dl_ch_mag[l][0];
|
||||||
dl_ch_mag128_0b = (simde__m128i *)dl_ch_magb[l][0];
|
dl_ch_mag128_0b = (simde__m128i *)dl_ch_magb[l][0];
|
||||||
dl_ch_mag128_0r = (simde__m128i *)dl_ch_magr[l][0];
|
dl_ch_mag128_0r = (simde__m128i *)dl_ch_magr[l][0];
|
||||||
for (int aarx = 1; aarx < n_rx; aarx++) {
|
for (int aarx = 1; aarx < n_rx; aarx++) {
|
||||||
rxdataF_comp128_1 = (simde__m128i *)(rxdataF_comp[l][aarx] + symbol * rx_size_symbol);
|
rxdataF_comp128_1 = (simde__m128i *)(rxdataF_comp[symbol][l][aarx]);
|
||||||
dl_ch_mag128_1 = (simde__m128i *)dl_ch_mag[l][aarx];
|
dl_ch_mag128_1 = (simde__m128i *)dl_ch_mag[l][aarx];
|
||||||
dl_ch_mag128_1b = (simde__m128i *)dl_ch_magb[l][aarx];
|
dl_ch_mag128_1b = (simde__m128i *)dl_ch_magb[l][aarx];
|
||||||
dl_ch_mag128_1r = (simde__m128i *)dl_ch_magr[l][aarx];
|
dl_ch_mag128_1r = (simde__m128i *)dl_ch_magr[l][aarx];
|
||||||
@@ -719,7 +719,7 @@ void nr_conjch0_mult_ch1(c16_t *ch0, c16_t *ch1, c16_t *ch0conj_ch1, unsigned sh
|
|||||||
static void nr_dlsch_mmse(uint32_t rx_size_symbol,
|
static void nr_dlsch_mmse(uint32_t rx_size_symbol,
|
||||||
unsigned char n_rx,
|
unsigned char n_rx,
|
||||||
unsigned char nl, // number of layer
|
unsigned char nl, // number of layer
|
||||||
c16_t rxdataF_comp[][n_rx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
|
c16_t rxdataF_comp[][nl][n_rx][rx_size_symbol],
|
||||||
c16_t dl_ch_mag[][n_rx][rx_size_symbol],
|
c16_t dl_ch_mag[][n_rx][rx_size_symbol],
|
||||||
c16_t dl_ch_magb[][n_rx][rx_size_symbol],
|
c16_t dl_ch_magb[][n_rx][rx_size_symbol],
|
||||||
c16_t dl_ch_magr[][n_rx][rx_size_symbol],
|
c16_t dl_ch_magr[][n_rx][rx_size_symbol],
|
||||||
@@ -802,7 +802,7 @@ static void nr_dlsch_mmse(uint32_t rx_size_symbol,
|
|||||||
// print_shorts(" H_h_H=",(int16_t*)&conjH_H_elements[ctx*nl+rtx][0][0]);
|
// print_shorts(" H_h_H=",(int16_t*)&conjH_H_elements[ctx*nl+rtx][0][0]);
|
||||||
// print_shorts(" Inv_H_h_H=",(int16_t*)&inv_H_h_H[ctx*nl+rtx][0]);
|
// print_shorts(" Inv_H_h_H=",(int16_t*)&inv_H_h_H[ctx*nl+rtx][0]);
|
||||||
mult_complex_vectors(inv_H_h_H[ctx][rtx],
|
mult_complex_vectors(inv_H_h_H[ctx][rtx],
|
||||||
rxdataF_comp[ctx][0] + symbol * rx_size_symbol,
|
rxdataF_comp[symbol][ctx][0],
|
||||||
outtemp,
|
outtemp,
|
||||||
sizeofArray(outtemp),
|
sizeofArray(outtemp),
|
||||||
shift - (fp_flag == 1 ? 1 : 0));
|
shift - (fp_flag == 1 ? 1 : 0));
|
||||||
@@ -818,7 +818,7 @@ static void nr_dlsch_mmse(uint32_t rx_size_symbol,
|
|||||||
|
|
||||||
//Copy zero_forcing out to output array
|
//Copy zero_forcing out to output array
|
||||||
for (int rtx = 0; rtx < nl; rtx++)
|
for (int rtx = 0; rtx < nl; rtx++)
|
||||||
nr_element_sign(rxdataF_zforcing[rtx], rxdataF_comp[rtx][0] + symbol * rx_size_symbol, nb_rb_0, +1);
|
nr_element_sign(rxdataF_zforcing[rtx], rxdataF_comp[symbol][rtx][0], nb_rb_0, +1);
|
||||||
|
|
||||||
//Update LLR thresholds with the Matrix determinant
|
//Update LLR thresholds with the Matrix determinant
|
||||||
simde__m128i *dl_ch_mag128_0=NULL,*dl_ch_mag128b_0=NULL,*dl_ch_mag128r_0=NULL,*determ_fin_128;
|
simde__m128i *dl_ch_mag128_0=NULL,*dl_ch_mag128b_0=NULL,*dl_ch_mag128r_0=NULL,*determ_fin_128;
|
||||||
@@ -910,8 +910,9 @@ static void nr_dlsch_layer_demapping(int16_t *llr_cw[2],
|
|||||||
static void nr_dlsch_llr(uint32_t rx_size_symbol,
|
static void nr_dlsch_llr(uint32_t rx_size_symbol,
|
||||||
int nbRx,
|
int nbRx,
|
||||||
uint sz,
|
uint sz,
|
||||||
|
int nl,
|
||||||
int16_t layer_llr[][sz],
|
int16_t layer_llr[][sz],
|
||||||
c16_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
|
c16_t rxdataF_comp[][nl][nbRx][rx_size_symbol],
|
||||||
c16_t dl_ch_mag[rx_size_symbol],
|
c16_t dl_ch_mag[rx_size_symbol],
|
||||||
c16_t dl_ch_magb[rx_size_symbol],
|
c16_t dl_ch_magb[rx_size_symbol],
|
||||||
c16_t dl_ch_magr[rx_size_symbol],
|
c16_t dl_ch_magr[rx_size_symbol],
|
||||||
@@ -924,22 +925,22 @@ static void nr_dlsch_llr(uint32_t rx_size_symbol,
|
|||||||
switch (dlsch[0].dlsch_config.qamModOrder) {
|
switch (dlsch[0].dlsch_config.qamModOrder) {
|
||||||
case 2 :
|
case 2 :
|
||||||
for(int l = 0; l < dlsch[0].Nl; l++)
|
for(int l = 0; l < dlsch[0].Nl; l++)
|
||||||
nr_qpsk_llr(&rxdataF_comp[l][0][symbol * rx_size_symbol], layer_llr[l] + llr_offset_symbol, len);
|
nr_qpsk_llr(&rxdataF_comp[symbol][l][0][0], layer_llr[l] + llr_offset_symbol, len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4 :
|
case 4 :
|
||||||
for(int l = 0; l < dlsch[0].Nl; l++)
|
for(int l = 0; l < dlsch[0].Nl; l++)
|
||||||
nr_16qam_llr(&rxdataF_comp[l][0][symbol * rx_size_symbol], dl_ch_mag, layer_llr[l] + llr_offset_symbol, len);
|
nr_16qam_llr(&rxdataF_comp[symbol][l][0][0], dl_ch_mag, layer_llr[l] + llr_offset_symbol, len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6 :
|
case 6 :
|
||||||
for(int l=0; l < dlsch[0].Nl; l++)
|
for(int l=0; l < dlsch[0].Nl; l++)
|
||||||
nr_64qam_llr(&rxdataF_comp[l][0][symbol * rx_size_symbol], dl_ch_mag, dl_ch_magb, layer_llr[l] + llr_offset_symbol, len);
|
nr_64qam_llr(&rxdataF_comp[symbol][l][0][0], dl_ch_mag, dl_ch_magb, layer_llr[l] + llr_offset_symbol, len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 8:
|
case 8:
|
||||||
for(int l=0; l < dlsch[0].Nl; l++)
|
for(int l=0; l < dlsch[0].Nl; l++)
|
||||||
nr_256qam_llr(&rxdataF_comp[l][0][symbol * rx_size_symbol], dl_ch_mag, dl_ch_magb, dl_ch_magr, layer_llr[l] + llr_offset_symbol, len);
|
nr_256qam_llr(&rxdataF_comp[symbol][l][0][0], dl_ch_mag, dl_ch_magb, dl_ch_magr, layer_llr[l] + llr_offset_symbol, len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -951,19 +952,19 @@ static void nr_dlsch_llr(uint32_t rx_size_symbol,
|
|||||||
if (dlsch1_harq) {
|
if (dlsch1_harq) {
|
||||||
switch (dlsch[1].dlsch_config.qamModOrder) {
|
switch (dlsch[1].dlsch_config.qamModOrder) {
|
||||||
case 2 :
|
case 2 :
|
||||||
nr_qpsk_llr(&rxdataF_comp[0][0][symbol * rx_size_symbol], layer_llr[0] + llr_offset_symbol, len);
|
nr_qpsk_llr(&rxdataF_comp[symbol][0][0][0], layer_llr[0] + llr_offset_symbol, len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
nr_16qam_llr(&rxdataF_comp[0][0][symbol * rx_size_symbol], dl_ch_mag, layer_llr[0] + llr_offset_symbol, len);
|
nr_16qam_llr(&rxdataF_comp[symbol][0][0][0], dl_ch_mag, layer_llr[0] + llr_offset_symbol, len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6 :
|
case 6 :
|
||||||
nr_64qam_llr(&rxdataF_comp[0][0][symbol * rx_size_symbol], dl_ch_mag, dl_ch_magb, layer_llr[0] + llr_offset_symbol, len);
|
nr_64qam_llr(&rxdataF_comp[symbol][0][0][0], dl_ch_mag, dl_ch_magb, layer_llr[0] + llr_offset_symbol, len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 8 :
|
case 8 :
|
||||||
nr_256qam_llr(&rxdataF_comp[0][0][symbol * rx_size_symbol], dl_ch_mag, dl_ch_magb, dl_ch_magr, layer_llr[0] + llr_offset_symbol, len);
|
nr_256qam_llr(&rxdataF_comp[symbol][0][0][0], dl_ch_mag, dl_ch_magb, dl_ch_magr, layer_llr[0] + llr_offset_symbol, len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -993,7 +994,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
int32_t *log2_maxh,
|
int32_t *log2_maxh,
|
||||||
int rx_size_symbol,
|
int rx_size_symbol,
|
||||||
int nbRx,
|
int nbRx,
|
||||||
c16_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
|
c16_t rxdataF_comp[][dlsch->Nl][nbRx][rx_size_symbol],
|
||||||
c16_t ptrs_phase_per_slot[][NR_SYMBOLS_PER_SLOT],
|
c16_t ptrs_phase_per_slot[][NR_SYMBOLS_PER_SLOT],
|
||||||
int32_t ptrs_re_per_slot[][NR_SYMBOLS_PER_SLOT],
|
int32_t ptrs_re_per_slot[][NR_SYMBOLS_PER_SLOT],
|
||||||
int G,
|
int G,
|
||||||
@@ -1264,6 +1265,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
start_meas_nr_ue_phy(ue, DLSCH_CHANNEL_COMPENSATION_STATS);
|
start_meas_nr_ue_phy(ue, DLSCH_CHANNEL_COMPENSATION_STATS);
|
||||||
nr_dlsch_channel_compensation(rx_size_symbol,
|
nr_dlsch_channel_compensation(rx_size_symbol,
|
||||||
nbRx,
|
nbRx,
|
||||||
|
nl,
|
||||||
rxdataF_ext,
|
rxdataF_ext,
|
||||||
dl_ch_estimates_ext,
|
dl_ch_estimates_ext,
|
||||||
dl_ch_mag,
|
dl_ch_mag,
|
||||||
@@ -1272,7 +1274,6 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
rxdataF_comp,
|
rxdataF_comp,
|
||||||
NULL,
|
NULL,
|
||||||
fp,
|
fp,
|
||||||
nl,
|
|
||||||
symbol,
|
symbol,
|
||||||
nb_re_pdsch,
|
nb_re_pdsch,
|
||||||
dlsch_config->qamModOrder,
|
dlsch_config->qamModOrder,
|
||||||
@@ -1371,6 +1372,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
ptrs_phase_per_slot,
|
ptrs_phase_per_slot,
|
||||||
ptrs_re_per_slot,
|
ptrs_re_per_slot,
|
||||||
rx_size_symbol,
|
rx_size_symbol,
|
||||||
|
nl,
|
||||||
rxdataF_comp,
|
rxdataF_comp,
|
||||||
fp,
|
fp,
|
||||||
dlsch0_harq,
|
dlsch0_harq,
|
||||||
@@ -1385,6 +1387,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
nr_dlsch_llr(rx_size_symbol,
|
nr_dlsch_llr(rx_size_symbol,
|
||||||
nbRx,
|
nbRx,
|
||||||
layer_llr_size,
|
layer_llr_size,
|
||||||
|
nl,
|
||||||
layer_llr,
|
layer_llr,
|
||||||
rxdataF_comp,
|
rxdataF_comp,
|
||||||
dl_ch_mag[0][0],
|
dl_ch_mag[0][0],
|
||||||
@@ -1419,13 +1422,13 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
size_t offset = 0;
|
size_t offset = 0;
|
||||||
for (int i = startSymbIdx; i < startSymbIdx + nbSymb; i++) {
|
for (int i = startSymbIdx; i < startSymbIdx + nbSymb; i++) {
|
||||||
size_t data_size = sizeof(c16_t) * dl_valid_re[i];
|
size_t data_size = sizeof(c16_t) * dl_valid_re[i];
|
||||||
UEscopeCopyUnsafe(ue, pdschRxdataF_comp, &rxdataF_comp[0][0][rx_size_symbol * i], data_size, offset, i);
|
UEscopeCopyUnsafe(ue, pdschRxdataF_comp, &rxdataF_comp[i][0][0][0], data_size, offset, i);
|
||||||
offset += data_size;
|
offset += data_size;
|
||||||
}
|
}
|
||||||
UEunlockScopeData(ue, pdschRxdataF_comp)
|
UEunlockScopeData(ue, pdschRxdataF_comp)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
UEscopeCopy(ue, pdschRxdataF_comp, rxdataF_comp[0], sizeof(c16_t), nbRx, rx_size_symbol * fp->symbols_per_slot, 0);
|
UEscopeCopy(ue, pdschRxdataF_comp, rxdataF_comp[0], sizeof(c16_t), nbRx, rx_size_symbol, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1453,10 +1456,8 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
if (ue->phy_sim_pdsch_rxdataF_comp)
|
if (ue->phy_sim_pdsch_rxdataF_comp)
|
||||||
for (int a = 0; a < nbRx; a++) {
|
for (int a = 0; a < nbRx; a++) {
|
||||||
for (int l = 0; l < nl; l++) {
|
for (int l = 0; l < nl; l++) {
|
||||||
int offset = (void *)rxdataF_comp[l][a] - (void *)rxdataF_comp[0] + symbol * rx_size_symbol * sizeof(c16_t);
|
int offset = (void *)rxdataF_comp[symbol][l][a] - (void *)rxdataF_comp[0];
|
||||||
memcpy(ue->phy_sim_pdsch_rxdataF_comp + offset,
|
memcpy(ue->phy_sim_pdsch_rxdataF_comp + offset, rxdataF_comp[symbol][l][a], sizeof(c16_t) * rx_size_symbol);
|
||||||
rxdataF_comp[l][a] + symbol * rx_size_symbol,
|
|
||||||
sizeof(c16_t) * rx_size_symbol);
|
|
||||||
}
|
}
|
||||||
memcpy((c16_t *)ue->phy_sim_pdsch_dl_ch_estimates + pdsch_est_size * a, dl_ch_estimates, pdsch_est_size * sizeof(c16_t));
|
memcpy((c16_t *)ue->phy_sim_pdsch_dl_ch_estimates + pdsch_est_size * a, dl_ch_estimates, pdsch_est_size * sizeof(c16_t));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -318,7 +318,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
int32_t *log2_maxh,
|
int32_t *log2_maxh,
|
||||||
int rx_size_symbol,
|
int rx_size_symbol,
|
||||||
int nbRx,
|
int nbRx,
|
||||||
c16_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
|
c16_t rxdataF_comp[][dlsch->Nl][nbRx][rx_size_symbol],
|
||||||
c16_t ptrs_phase_per_slot[][NR_SYMBOLS_PER_SLOT],
|
c16_t ptrs_phase_per_slot[][NR_SYMBOLS_PER_SLOT],
|
||||||
int32_t ptrs_re_per_slot[][NR_SYMBOLS_PER_SLOT],
|
int32_t ptrs_re_per_slot[][NR_SYMBOLS_PER_SLOT],
|
||||||
int G,
|
int G,
|
||||||
|
|||||||
@@ -617,12 +617,13 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue,
|
|||||||
|
|
||||||
const uint32_t rx_size_symbol = (freq_alloc.num_rbs * NR_NB_SC_PER_RB + 15) & ~15;
|
const uint32_t rx_size_symbol = (freq_alloc.num_rbs * NR_NB_SC_PER_RB + 15) & ~15;
|
||||||
fourDimArray_t *toFree2 = NULL;
|
fourDimArray_t *toFree2 = NULL;
|
||||||
allocCast3D(rxdataF_comp,
|
allocCast4D(rxdataF_comp,
|
||||||
c16_t,
|
c16_t,
|
||||||
toFree2,
|
toFree2,
|
||||||
|
ue->frame_parms.symbols_per_slot,
|
||||||
dlsch[0].Nl,
|
dlsch[0].Nl,
|
||||||
ue->frame_parms.nb_antennas_rx,
|
ue->frame_parms.nb_antennas_rx,
|
||||||
rx_size_symbol * ue->frame_parms.symbols_per_slot,
|
rx_size_symbol,
|
||||||
false);
|
false);
|
||||||
|
|
||||||
uint32_t nvar = 0;
|
uint32_t nvar = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user