Merge remote-tracking branch 'origin/remove-small-races-in-ue' into integration_2023_w36
This commit is contained in:
@@ -110,8 +110,6 @@
|
|||||||
{"ulsch_ldpc_encoding_stats", &(UE->ulsch_ldpc_encoding_stats),0,1},\
|
{"ulsch_ldpc_encoding_stats", &(UE->ulsch_ldpc_encoding_stats),0,1},\
|
||||||
{"ulsch_interleaving_stats", &(UE->ulsch_interleaving_stats),0,1},\
|
{"ulsch_interleaving_stats", &(UE->ulsch_interleaving_stats),0,1},\
|
||||||
{"ulsch_multiplexing_stats", &(UE->ulsch_multiplexing_stats),0,1},\
|
{"ulsch_multiplexing_stats", &(UE->ulsch_multiplexing_stats),0,1},\
|
||||||
{"generic_stat", &(UE->generic_stat),0,1},\
|
|
||||||
{"generic_stat_bis", &(UE->generic_stat_bis[0]),0,LTE_SLOTS_PER_SUBFRAME},\
|
|
||||||
{"ofdm_demod_stats", &(UE->ofdm_demod_stats),0,1},\
|
{"ofdm_demod_stats", &(UE->ofdm_demod_stats),0,1},\
|
||||||
{"dlsch_rx_pdcch_stats", &(UE->dlsch_rx_pdcch_stats),0,1},\
|
{"dlsch_rx_pdcch_stats", &(UE->dlsch_rx_pdcch_stats),0,1},\
|
||||||
{"rx_dft_stats", &(UE->rx_dft_stats),0,1},\
|
{"rx_dft_stats", &(UE->rx_dft_stats),0,1},\
|
||||||
|
|||||||
@@ -879,7 +879,6 @@ int config_request(nfapi_pnf_config_t *config, nfapi_pnf_phy_config_t *phy, nfap
|
|||||||
|
|
||||||
if (req->sch_config.physical_cell_id.tl.tag == NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG) {
|
if (req->sch_config.physical_cell_id.tl.tag == NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG) {
|
||||||
fp->Nid_cell = req->sch_config.physical_cell_id.value;
|
fp->Nid_cell = req->sch_config.physical_cell_id.value;
|
||||||
fp->nushift = fp->Nid_cell%6;
|
|
||||||
num_tlv++;
|
num_tlv++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1049,8 +1048,7 @@ int nr_config_request(nfapi_pnf_config_t *config, nfapi_pnf_phy_config_t *phy, n
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (req->cell_config.phy_cell_id.tl.tag == NFAPI_NR_CONFIG_PHY_CELL_ID_TAG) {
|
if (req->cell_config.phy_cell_id.tl.tag == NFAPI_NR_CONFIG_PHY_CELL_ID_TAG) {
|
||||||
fp->Nid_cell = req->cell_config.phy_cell_id.value; //sch_config.physical_cell_id.value;
|
fp->Nid_cell = req->cell_config.phy_cell_id.value; // sch_config.physical_cell_id.value;
|
||||||
fp->nushift = fp->Nid_cell%6;
|
|
||||||
num_tlv++;
|
num_tlv++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -86,8 +86,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
c16_t **ul_ch_estimates = (c16_t **)pusch_vars->ul_ch_estimates;
|
c16_t **ul_ch_estimates = (c16_t **)pusch_vars->ul_ch_estimates;
|
||||||
const int symbolSize = gNB->frame_parms.ofdm_symbol_size;
|
const int symbolSize = gNB->frame_parms.ofdm_symbol_size;
|
||||||
const int soffset = (Ns&3)*gNB->frame_parms.symbols_per_slot*symbolSize;
|
const int soffset = (Ns&3)*gNB->frame_parms.symbols_per_slot*symbolSize;
|
||||||
const int nushift = (p>>1)&1;
|
const int nushift = (p >> 1) & 1;
|
||||||
gNB->frame_parms.nushift = nushift;
|
|
||||||
int ch_offset = symbolSize*symbol;
|
int ch_offset = symbolSize*symbol;
|
||||||
const int symbol_offset = symbolSize*symbol;
|
const int symbol_offset = symbolSize*symbol;
|
||||||
|
|
||||||
|
|||||||
@@ -635,18 +635,13 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
|
|||||||
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP])
|
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP])
|
||||||
{
|
{
|
||||||
int pilot[200] __attribute__((aligned(16)));
|
int pilot[200] __attribute__((aligned(16)));
|
||||||
unsigned short k;
|
|
||||||
unsigned int pilot_cnt;
|
unsigned int pilot_cnt;
|
||||||
int16_t ch[2],*pil,*rxF;
|
int16_t ch[2],*pil,*rxF;
|
||||||
int symbol_offset;
|
int symbol_offset;
|
||||||
|
|
||||||
|
|
||||||
uint8_t nushift;
|
|
||||||
uint8_t ssb_index=current_ssb->i_ssb;
|
uint8_t ssb_index=current_ssb->i_ssb;
|
||||||
uint8_t n_hf=current_ssb->n_hf;
|
uint8_t n_hf=current_ssb->n_hf;
|
||||||
|
|
||||||
nushift = ue->frame_parms.Nid_cell%4;
|
|
||||||
ue->frame_parms.nushift = nushift;
|
|
||||||
unsigned int ssb_offset = ue->frame_parms.first_carrier_offset + ue->frame_parms.ssb_start_subcarrier;
|
unsigned int ssb_offset = ue->frame_parms.first_carrier_offset + ue->frame_parms.ssb_start_subcarrier;
|
||||||
if (ssb_offset>= ue->frame_parms.ofdm_symbol_size) ssb_offset-=ue->frame_parms.ofdm_symbol_size;
|
if (ssb_offset>= ue->frame_parms.ofdm_symbol_size) ssb_offset-=ue->frame_parms.ofdm_symbol_size;
|
||||||
|
|
||||||
@@ -656,8 +651,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
|
|||||||
|
|
||||||
symbol_offset = ue->frame_parms.ofdm_symbol_size*symbol;
|
symbol_offset = ue->frame_parms.ofdm_symbol_size*symbol;
|
||||||
|
|
||||||
|
unsigned int k = ue->frame_parms.Nid_cell % 4;
|
||||||
k = nushift;
|
|
||||||
|
|
||||||
#ifdef DEBUG_PBCH
|
#ifdef DEBUG_PBCH
|
||||||
printf("PBCH DMRS Correlation : gNB_id %d , OFDM size %d, Ncp=%d, Ns=%d, k=%d symbol %d\n", proc->gNB_id, ue->frame_parms.ofdm_symbol_size, ue->frame_parms.Ncp, Ns, k, symbol);
|
printf("PBCH DMRS Correlation : gNB_id %d , OFDM size %d, Ncp=%d, Ns=%d, k=%d symbol %d\n", proc->gNB_id, ue->frame_parms.ofdm_symbol_size, ue->frame_parms.Ncp, Ns, k, symbol);
|
||||||
@@ -805,8 +799,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
//int slot_pbch;
|
//int slot_pbch;
|
||||||
|
|
||||||
uint8_t nushift;
|
uint8_t nushift;
|
||||||
nushift = ue->frame_parms.Nid_cell%4;
|
nushift = ue->frame_parms.Nid_cell % 4;
|
||||||
ue->frame_parms.nushift = nushift;
|
|
||||||
unsigned int ssb_offset = ue->frame_parms.first_carrier_offset + ue->frame_parms.ssb_start_subcarrier;
|
unsigned int ssb_offset = ue->frame_parms.first_carrier_offset + ue->frame_parms.ssb_start_subcarrier;
|
||||||
if (ssb_offset>= ue->frame_parms.ofdm_symbol_size) ssb_offset-=ue->frame_parms.ofdm_symbol_size;
|
if (ssb_offset>= ue->frame_parms.ofdm_symbol_size) ssb_offset-=ue->frame_parms.ofdm_symbol_size;
|
||||||
|
|
||||||
@@ -1660,12 +1653,8 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
|
|||||||
uint8_t nushift = 0;
|
uint8_t nushift = 0;
|
||||||
if (config_type == NFAPI_NR_DMRS_TYPE1) {
|
if (config_type == NFAPI_NR_DMRS_TYPE1) {
|
||||||
nushift = (p >> 1) & 1;
|
nushift = (p >> 1) & 1;
|
||||||
if (p < 4)
|
|
||||||
ue->frame_parms.nushift = nushift;
|
|
||||||
} else { // NFAPI_NR_DMRS_TYPE2
|
} else { // NFAPI_NR_DMRS_TYPE2
|
||||||
nushift = delta;
|
nushift = delta;
|
||||||
if (p < 6)
|
|
||||||
ue->frame_parms.nushift = nushift;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
delay_t delay = {0};
|
delay_t delay = {0};
|
||||||
|
|||||||
@@ -406,8 +406,11 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
//--------------------- RBs extraction ---------------------
|
//--------------------- RBs extraction ---------------------
|
||||||
//----------------------------------------------------------
|
//----------------------------------------------------------
|
||||||
const int n_rx = frame_parms->nb_antennas_rx;
|
const int n_rx = frame_parms->nb_antennas_rx;
|
||||||
|
time_stats_t meas = {0};
|
||||||
|
const bool meas_enabled = cpumeas(CPUMEAS_GETSTATE);
|
||||||
|
|
||||||
start_meas(&ue->generic_stat_bis[slot]);
|
if (meas_enabled)
|
||||||
|
start_meas(&meas);
|
||||||
{
|
{
|
||||||
__attribute__((aligned(32))) c16_t rxdataF_ext[nbRx][rx_size_symbol];
|
__attribute__((aligned(32))) c16_t rxdataF_ext[nbRx][rx_size_symbol];
|
||||||
memset(rxdataF_ext, 0, sizeof(rxdataF_ext));
|
memset(rxdataF_ext, 0, sizeof(rxdataF_ext));
|
||||||
@@ -429,14 +432,21 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
frame_parms,
|
frame_parms,
|
||||||
dlsch[0].dlsch_config.dlDmrsSymbPos,
|
dlsch[0].dlsch_config.dlDmrsSymbPos,
|
||||||
ue->chest_time);
|
ue->chest_time);
|
||||||
stop_meas(&ue->generic_stat_bis[slot]);
|
if (meas_enabled) {
|
||||||
|
stop_meas(&meas);
|
||||||
|
LOG_D(PHY,
|
||||||
|
"[AbsSFN %u.%d] Slot%d Symbol %d: Pilot/Data extraction %5.2f \n",
|
||||||
|
frame,
|
||||||
|
nr_slot_rx,
|
||||||
|
slot,
|
||||||
|
symbol,
|
||||||
|
meas.p_time / (cpuf * 1000.0));
|
||||||
|
}
|
||||||
if (ue->phy_sim_pdsch_rxdataF_ext)
|
if (ue->phy_sim_pdsch_rxdataF_ext)
|
||||||
for (unsigned char aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) {
|
for (unsigned char aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) {
|
||||||
int offset = ((void *)rxdataF_ext[aarx] - (void *)rxdataF_ext) + symbol * rx_size_symbol;
|
int offset = ((void *)rxdataF_ext[aarx] - (void *)rxdataF_ext) + symbol * rx_size_symbol;
|
||||||
memcpy(ue->phy_sim_pdsch_rxdataF_ext + offset, rxdataF_ext, rx_size_symbol * sizeof(c16_t));
|
memcpy(ue->phy_sim_pdsch_rxdataF_ext + offset, rxdataF_ext, rx_size_symbol * sizeof(c16_t));
|
||||||
}
|
}
|
||||||
if (cpumeas(CPUMEAS_GETSTATE))
|
|
||||||
LOG_D(PHY, "[AbsSFN %u.%d] Slot%d Symbol %d: Pilot/Data extraction %5.2f \n", frame, nr_slot_rx, slot, symbol, ue->generic_stat_bis[slot].p_time / (cpuf * 1000.0));
|
|
||||||
|
|
||||||
nb_re_pdsch = (pilots == 1)
|
nb_re_pdsch = (pilots == 1)
|
||||||
? ((config_type == NFAPI_NR_DMRS_TYPE1) ? nb_rb_pdsch * (12 - 6 * dlsch[0].dlsch_config.n_dmrs_cdm_groups) : nb_rb_pdsch * (12 - 4 * dlsch[0].dlsch_config.n_dmrs_cdm_groups))
|
? ((config_type == NFAPI_NR_DMRS_TYPE1) ? nb_rb_pdsch * (12 - 6 * dlsch[0].dlsch_config.n_dmrs_cdm_groups) : nb_rb_pdsch * (12 - 4 * dlsch[0].dlsch_config.n_dmrs_cdm_groups))
|
||||||
@@ -444,18 +454,26 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
//----------------------------------------------------------
|
//----------------------------------------------------------
|
||||||
//--------------------- Channel Scaling --------------------
|
//--------------------- Channel Scaling --------------------
|
||||||
//----------------------------------------------------------
|
//----------------------------------------------------------
|
||||||
start_meas(&ue->generic_stat_bis[slot]);
|
if (meas_enabled)
|
||||||
|
start_meas(&meas);
|
||||||
nr_dlsch_scale_channel(rx_size_symbol, dl_ch_estimates_ext, frame_parms, nl, n_rx, symbol, pilots, nb_re_pdsch, nb_rb_pdsch);
|
nr_dlsch_scale_channel(rx_size_symbol, dl_ch_estimates_ext, frame_parms, nl, n_rx, symbol, pilots, nb_re_pdsch, nb_rb_pdsch);
|
||||||
stop_meas(&ue->generic_stat_bis[slot]);
|
if (meas_enabled) {
|
||||||
|
stop_meas(&meas);
|
||||||
|
LOG_D(PHY,
|
||||||
|
"[AbsSFN %u.%d] Slot%d Symbol %d: Channel Scale %5.2f \n",
|
||||||
|
frame,
|
||||||
|
nr_slot_rx,
|
||||||
|
slot,
|
||||||
|
symbol,
|
||||||
|
meas.p_time / (cpuf * 1000.0));
|
||||||
|
}
|
||||||
|
|
||||||
if (cpumeas(CPUMEAS_GETSTATE))
|
//----------------------------------------------------------
|
||||||
LOG_D(PHY, "[AbsSFN %u.%d] Slot%d Symbol %d: Channel Scale %5.2f \n", frame, nr_slot_rx, slot, symbol, ue->generic_stat_bis[slot].p_time / (cpuf * 1000.0));
|
//--------------------- Channel Level Calc. ----------------
|
||||||
|
//----------------------------------------------------------
|
||||||
//----------------------------------------------------------
|
if (meas_enabled)
|
||||||
//--------------------- Channel Level Calc. ----------------
|
start_meas(&meas);
|
||||||
//----------------------------------------------------------
|
if (first_symbol_flag == 1) {
|
||||||
start_meas(&ue->generic_stat_bis[slot]);
|
|
||||||
if (first_symbol_flag==1) {
|
|
||||||
nr_dlsch_channel_level(rx_size_symbol, dl_ch_estimates_ext, frame_parms, nl, avg, symbol, nb_re_pdsch, nb_rb_pdsch);
|
nr_dlsch_channel_level(rx_size_symbol, dl_ch_estimates_ext, frame_parms, nl, avg, symbol, nb_re_pdsch, nb_rb_pdsch);
|
||||||
avgs = 0;
|
avgs = 0;
|
||||||
for (aatx=0;aatx<nl;aatx++)
|
for (aatx=0;aatx<nl;aatx++)
|
||||||
@@ -476,45 +494,56 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
*log2_maxh = (log2_approx(avgs)/2) + 1;
|
*log2_maxh = (log2_approx(avgs)/2) + 1;
|
||||||
//LOG_I(PHY, "avgs Power per SC is %d lg2_maxh %d\n", avgs, log2_maxh);
|
//LOG_I(PHY, "avgs Power per SC is %d lg2_maxh %d\n", avgs, log2_maxh);
|
||||||
LOG_D(PHY, "[DLSCH] AbsSubframe %d.%d log2_maxh = %d (%d,%d)\n", frame % 1024, nr_slot_rx, *log2_maxh, avg[0], avgs);
|
LOG_D(PHY, "[DLSCH] AbsSubframe %d.%d log2_maxh = %d (%d,%d)\n", frame % 1024, nr_slot_rx, *log2_maxh, avg[0], avgs);
|
||||||
}
|
}
|
||||||
stop_meas(&ue->generic_stat_bis[slot]);
|
if (meas_enabled) {
|
||||||
|
stop_meas(&meas);
|
||||||
|
LOG_D(PHY,
|
||||||
|
"[AbsSFN %u.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f \n",
|
||||||
|
frame,
|
||||||
|
nr_slot_rx,
|
||||||
|
slot,
|
||||||
|
symbol,
|
||||||
|
first_symbol_flag,
|
||||||
|
meas.p_time / (cpuf * 1000.0));
|
||||||
|
}
|
||||||
#if T_TRACER
|
#if T_TRACER
|
||||||
T(T_UE_PHY_PDSCH_ENERGY, T_INT(gNB_id), T_INT(0), T_INT(frame%1024), T_INT(nr_slot_rx),
|
T(T_UE_PHY_PDSCH_ENERGY,
|
||||||
T_INT(avg[0]), T_INT(avg[1]), T_INT(avg[2]), T_INT(avg[3]));
|
T_INT(gNB_id),
|
||||||
|
T_INT(0),
|
||||||
|
T_INT(frame % 1024),
|
||||||
|
T_INT(nr_slot_rx),
|
||||||
|
T_INT(avg[0]),
|
||||||
|
T_INT(avg[1]),
|
||||||
|
T_INT(avg[2]),
|
||||||
|
T_INT(avg[3]));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (cpumeas(CPUMEAS_GETSTATE))
|
//----------------------------------------------------------
|
||||||
LOG_D(PHY,
|
//--------------------- channel compensation ---------------
|
||||||
"[AbsSFN %u.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f \n",
|
//----------------------------------------------------------
|
||||||
frame, nr_slot_rx, slot, symbol, first_symbol_flag, ue->generic_stat_bis[slot].p_time / (cpuf * 1000.0));
|
// Disable correlation measurement for optimizing UE
|
||||||
|
if (meas_enabled)
|
||||||
//----------------------------------------------------------
|
start_meas(&meas);
|
||||||
//--------------------- channel compensation ---------------
|
nr_dlsch_channel_compensation(rx_size_symbol,
|
||||||
//----------------------------------------------------------
|
nbRx,
|
||||||
// Disable correlation measurement for optimizing UE
|
rxdataF_ext,
|
||||||
start_meas(&ue->generic_stat_bis[slot]);
|
dl_ch_estimates_ext,
|
||||||
nr_dlsch_channel_compensation(rx_size_symbol,
|
dl_ch_mag,
|
||||||
nbRx,
|
dl_ch_magb,
|
||||||
rxdataF_ext,
|
dl_ch_magr,
|
||||||
dl_ch_estimates_ext,
|
rxdataF_comp,
|
||||||
dl_ch_mag,
|
NULL,
|
||||||
dl_ch_magb,
|
frame_parms,
|
||||||
dl_ch_magr,
|
nl,
|
||||||
rxdataF_comp,
|
symbol,
|
||||||
NULL,
|
nb_re_pdsch,
|
||||||
frame_parms,
|
first_symbol_flag,
|
||||||
nl,
|
dlsch[0].dlsch_config.qamModOrder,
|
||||||
symbol,
|
nb_rb_pdsch,
|
||||||
nb_re_pdsch,
|
*log2_maxh,
|
||||||
first_symbol_flag,
|
measurements); // log2_maxh+I0_shift
|
||||||
dlsch[0].dlsch_config.qamModOrder,
|
if (meas_enabled) {
|
||||||
nb_rb_pdsch,
|
stop_meas(&meas);
|
||||||
*log2_maxh,
|
|
||||||
measurements); // log2_maxh+I0_shift
|
|
||||||
stop_meas(&ue->generic_stat_bis[slot]);
|
|
||||||
}
|
|
||||||
if (cpumeas(CPUMEAS_GETSTATE))
|
|
||||||
LOG_D(PHY,
|
LOG_D(PHY,
|
||||||
"[AbsSFN %u.%d] Slot%d Symbol %d log2_maxh %d Channel Comp %5.2f \n",
|
"[AbsSFN %u.%d] Slot%d Symbol %d log2_maxh %d Channel Comp %5.2f \n",
|
||||||
frame,
|
frame,
|
||||||
@@ -522,22 +551,54 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
slot,
|
slot,
|
||||||
symbol,
|
symbol,
|
||||||
*log2_maxh,
|
*log2_maxh,
|
||||||
ue->generic_stat_bis[slot].p_time / (cpuf * 1000.0));
|
meas.p_time / (cpuf * 1000.0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
start_meas(&ue->generic_stat_bis[slot]);
|
if (meas_enabled)
|
||||||
|
start_meas(&meas);
|
||||||
|
|
||||||
if (n_rx > 1) {
|
if (n_rx > 1) {
|
||||||
nr_dlsch_detection_mrc(rx_size_symbol, nl, n_rx, rxdataF_comp, NULL, dl_ch_mag, dl_ch_magb, dl_ch_magr, symbol, nb_rb_pdsch, nb_re_pdsch);
|
nr_dlsch_detection_mrc(rx_size_symbol,
|
||||||
if (nl >= 2)//Apply zero forcing for 2, 3, and 4 Tx layers
|
nl,
|
||||||
nr_zero_forcing_rx(
|
n_rx,
|
||||||
rx_size_symbol, n_rx, nl, rxdataF_comp, dl_ch_mag, dl_ch_magb, dl_ch_magr, dl_ch_estimates_ext, nb_rb_pdsch, dlsch[0].dlsch_config.qamModOrder, *log2_maxh, symbol, nb_re_pdsch);
|
rxdataF_comp,
|
||||||
|
NULL,
|
||||||
|
dl_ch_mag,
|
||||||
|
dl_ch_magb,
|
||||||
|
dl_ch_magr,
|
||||||
|
symbol,
|
||||||
|
nb_rb_pdsch,
|
||||||
|
nb_re_pdsch);
|
||||||
|
if (nl >= 2) // Apply zero forcing for 2, 3, and 4 Tx layers
|
||||||
|
nr_zero_forcing_rx(rx_size_symbol,
|
||||||
|
n_rx,
|
||||||
|
nl,
|
||||||
|
rxdataF_comp,
|
||||||
|
dl_ch_mag,
|
||||||
|
dl_ch_magb,
|
||||||
|
dl_ch_magr,
|
||||||
|
dl_ch_estimates_ext,
|
||||||
|
nb_rb_pdsch,
|
||||||
|
dlsch[0].dlsch_config.qamModOrder,
|
||||||
|
*log2_maxh,
|
||||||
|
symbol,
|
||||||
|
nb_re_pdsch);
|
||||||
}
|
}
|
||||||
stop_meas(&ue->generic_stat_bis[slot]);
|
|
||||||
|
|
||||||
if (cpumeas(CPUMEAS_GETSTATE))
|
if (meas_enabled) {
|
||||||
LOG_D(PHY, "[AbsSFN %u.%d] Slot%d Symbol %d: Channel Combine and zero forcing %5.2f \n", frame, nr_slot_rx, slot, symbol, ue->generic_stat_bis[slot].p_time / (cpuf * 1000.0));
|
stop_meas(&meas);
|
||||||
|
LOG_D(PHY,
|
||||||
|
"[AbsSFN %u.%d] Slot%d Symbol %d: Channel Combine and zero forcing %5.2f \n",
|
||||||
|
frame,
|
||||||
|
nr_slot_rx,
|
||||||
|
slot,
|
||||||
|
symbol,
|
||||||
|
meas.p_time / (cpuf * 1000.0));
|
||||||
|
}
|
||||||
|
|
||||||
start_meas(&ue->generic_stat_bis[slot]);
|
if (meas_enabled)
|
||||||
|
start_meas(&meas);
|
||||||
/* Store the valid DL RE's */
|
/* Store the valid DL RE's */
|
||||||
dl_valid_re[symbol-1] = nb_re_pdsch;
|
dl_valid_re[symbol-1] = nb_re_pdsch;
|
||||||
|
|
||||||
@@ -652,9 +713,16 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
stop_meas(&ue->generic_stat_bis[slot]);
|
if (meas_enabled) {
|
||||||
if (cpumeas(CPUMEAS_GETSTATE))
|
stop_meas(&meas);
|
||||||
LOG_D(PHY, "[AbsSFN %u.%d] Slot%d Symbol %d: LLR Computation %5.2f \n", frame, nr_slot_rx, slot, symbol, ue->generic_stat_bis[slot].p_time / (cpuf * 1000.0));
|
LOG_D(PHY,
|
||||||
|
"[AbsSFN %u.%d] Slot%d Symbol %d: LLR Computation %5.2f \n",
|
||||||
|
frame,
|
||||||
|
nr_slot_rx,
|
||||||
|
slot,
|
||||||
|
symbol,
|
||||||
|
meas.p_time / (cpuf * 1000.0));
|
||||||
|
}
|
||||||
|
|
||||||
#if T_TRACER
|
#if T_TRACER
|
||||||
T(T_UE_PHY_PDSCH_IQ,
|
T(T_UE_PHY_PDSCH_IQ,
|
||||||
|
|||||||
@@ -57,10 +57,11 @@ static uint16_t nr_pbch_extract(uint32_t rxdataF_sz,
|
|||||||
struct complex16 dl_ch_estimates_ext[][PBCH_MAX_RE_PER_SYMBOL],
|
struct complex16 dl_ch_estimates_ext[][PBCH_MAX_RE_PER_SYMBOL],
|
||||||
uint32_t symbol,
|
uint32_t symbol,
|
||||||
uint32_t s_offset,
|
uint32_t s_offset,
|
||||||
NR_DL_FRAME_PARMS *frame_parms) {
|
NR_DL_FRAME_PARMS *frame_parms,
|
||||||
|
int nushiftmod4)
|
||||||
|
{
|
||||||
uint16_t rb;
|
uint16_t rb;
|
||||||
uint8_t i,j,aarx;
|
uint8_t i, j, aarx;
|
||||||
int nushiftmod4 = frame_parms->nushift;
|
|
||||||
AssertFatal(symbol>=1 && symbol<5,
|
AssertFatal(symbol>=1 && symbol<5,
|
||||||
"symbol %d illegal for PBCH extraction\n",
|
"symbol %d illegal for PBCH extraction\n",
|
||||||
symbol);
|
symbol);
|
||||||
@@ -395,12 +396,12 @@ int nr_rx_pbch(PHY_VARS_NR_UE *ue,
|
|||||||
{
|
{
|
||||||
int max_h=0;
|
int max_h=0;
|
||||||
int symbol;
|
int symbol;
|
||||||
//uint8_t pbch_a[64];
|
// uint8_t pbch_a[64];
|
||||||
//FT ?? cppcheck doesn't like pbch_a allocation because of line 525..and i don't get what this variable is for..
|
// FT ?? cppcheck doesn't like pbch_a allocation because of line 525..and i don't get what this variable is for..
|
||||||
//uint8_t *pbch_a = malloc(sizeof(uint8_t) * NR_POLAR_PBCH_PAYLOAD_BITS);
|
// uint8_t *pbch_a = malloc(sizeof(uint8_t) * NR_POLAR_PBCH_PAYLOAD_BITS);
|
||||||
uint8_t nushift;
|
|
||||||
uint16_t M;
|
|
||||||
uint8_t Lmax=frame_parms->Lmax;
|
uint8_t Lmax=frame_parms->Lmax;
|
||||||
|
int M = NR_POLAR_PBCH_E;
|
||||||
|
int nushift = (Lmax == 4) ? i_ssb & 3 : i_ssb & 7;
|
||||||
//uint16_t crc;
|
//uint16_t crc;
|
||||||
//unsigned short idx_demod =0;
|
//unsigned short idx_demod =0;
|
||||||
uint32_t decoderState=0;
|
uint32_t decoderState=0;
|
||||||
@@ -440,7 +441,8 @@ int nr_rx_pbch(PHY_VARS_NR_UE *ue,
|
|||||||
dl_ch_estimates_ext,
|
dl_ch_estimates_ext,
|
||||||
symbol,
|
symbol,
|
||||||
symbol_offset,
|
symbol_offset,
|
||||||
frame_parms);
|
frame_parms,
|
||||||
|
nushift);
|
||||||
#ifdef DEBUG_PBCH
|
#ifdef DEBUG_PBCH
|
||||||
LOG_I(PHY,"[PHY] PBCH Symbol %d ofdm size %d\n",symbol, frame_parms->ofdm_symbol_size );
|
LOG_I(PHY,"[PHY] PBCH Symbol %d ofdm size %d\n",symbol, frame_parms->ofdm_symbol_size );
|
||||||
LOG_I(PHY,"[PHY] PBCH starting channel_level\n");
|
LOG_I(PHY,"[PHY] PBCH starting channel_level\n");
|
||||||
@@ -496,9 +498,7 @@ int nr_rx_pbch(PHY_VARS_NR_UE *ue,
|
|||||||
printf("pbch rx llr %d\n",*(pbch_e_rx+cnt));
|
printf("pbch rx llr %d\n",*(pbch_e_rx+cnt));
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
//un-scrambling
|
// un-scrambling
|
||||||
M = NR_POLAR_PBCH_E;
|
|
||||||
nushift = (Lmax==4)? i_ssb&3 : i_ssb&7;
|
|
||||||
uint32_t unscrambling_mask = (Lmax==64)?0x100006D:0x1000041;
|
uint32_t unscrambling_mask = (Lmax==64)?0x100006D:0x1000041;
|
||||||
uint32_t pbch_a_interleaved=0;
|
uint32_t pbch_a_interleaved=0;
|
||||||
uint32_t pbch_a_prime=0;
|
uint32_t pbch_a_prime=0;
|
||||||
|
|||||||
@@ -592,8 +592,6 @@ typedef struct {
|
|||||||
time_stats_t ulsch_interleaving_stats;
|
time_stats_t ulsch_interleaving_stats;
|
||||||
time_stats_t ulsch_multiplexing_stats;
|
time_stats_t ulsch_multiplexing_stats;
|
||||||
|
|
||||||
time_stats_t generic_stat;
|
|
||||||
time_stats_t generic_stat_bis[LTE_SLOTS_PER_SUBFRAME];
|
|
||||||
time_stats_t ue_front_end_stat;
|
time_stats_t ue_front_end_stat;
|
||||||
time_stats_t ue_front_end_per_slot_stat[LTE_SLOTS_PER_SUBFRAME];
|
time_stats_t ue_front_end_per_slot_stat[LTE_SLOTS_PER_SUBFRAME];
|
||||||
time_stats_t pdcch_procedures_stat;
|
time_stats_t pdcch_procedures_stat;
|
||||||
|
|||||||
@@ -229,8 +229,6 @@ struct NR_DL_FRAME_PARMS {
|
|||||||
c16_t timeshift_symbol_rotation[4096*2] __attribute__ ((aligned (16)));
|
c16_t timeshift_symbol_rotation[4096*2] __attribute__ ((aligned (16)));
|
||||||
/// Table used to apply the delay compensation in DL/UL
|
/// Table used to apply the delay compensation in DL/UL
|
||||||
c16_t delay_table[2 * MAX_DELAY_COMP + 1][NR_MAX_OFDM_SYMBOL_SIZE];
|
c16_t delay_table[2 * MAX_DELAY_COMP + 1][NR_MAX_OFDM_SYMBOL_SIZE];
|
||||||
/// shift of pilot position in one RB
|
|
||||||
uint8_t nushift;
|
|
||||||
/// SRS configuration from TS 38.331 RRC
|
/// SRS configuration from TS 38.331 RRC
|
||||||
SRS_NR srs_nr;
|
SRS_NR srs_nr;
|
||||||
/// Power used by SSB in order to estimate signal strength and path loss
|
/// Power used by SSB in order to estimate signal strength and path loss
|
||||||
|
|||||||
@@ -1019,7 +1019,8 @@ void pdsch_processing(PHY_VARS_NR_UE *ue,
|
|||||||
int gNB_id = proc->gNB_id;
|
int gNB_id = proc->gNB_id;
|
||||||
|
|
||||||
NR_UE_DLSCH_t *dlsch = &phy_data->dlsch[0];
|
NR_UE_DLSCH_t *dlsch = &phy_data->dlsch[0];
|
||||||
start_meas(&ue->generic_stat);
|
time_stats_t meas = {0};
|
||||||
|
start_meas(&meas);
|
||||||
// do procedures for C-RNTI
|
// do procedures for C-RNTI
|
||||||
int ret_pdsch = 0;
|
int ret_pdsch = 0;
|
||||||
|
|
||||||
@@ -1131,7 +1132,7 @@ void pdsch_processing(PHY_VARS_NR_UE *ue,
|
|||||||
ue->csirs_vars[gNB_id]->active = 0;
|
ue->csirs_vars[gNB_id]->active = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
start_meas(&ue->generic_stat);
|
start_meas(&meas);
|
||||||
|
|
||||||
if (nr_slot_rx==9) {
|
if (nr_slot_rx==9) {
|
||||||
if (frame_rx % 10 == 0) {
|
if (frame_rx % 10 == 0) {
|
||||||
@@ -1157,9 +1158,9 @@ void pdsch_processing(PHY_VARS_NR_UE *ue,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stop_meas(&ue->generic_stat);
|
stop_meas(&meas);
|
||||||
if (cpumeas(CPUMEAS_GETSTATE))
|
if (cpumeas(CPUMEAS_GETSTATE))
|
||||||
LOG_D(PHY, "after ldpc decode until end of Rx %5.2f \n", ue->generic_stat.p_time / (cpuf * 1000.0));
|
LOG_D(PHY, "after ldpc decode until end of Rx %5.2f \n", meas.p_time / (cpuf * 1000.0));
|
||||||
|
|
||||||
#ifdef EMOS
|
#ifdef EMOS
|
||||||
phy_procedures_emos_UE_RX(ue,slot,gNB_id);
|
phy_procedures_emos_UE_RX(ue,slot,gNB_id);
|
||||||
|
|||||||
@@ -495,7 +495,6 @@ int main(int argc, char **argv)
|
|||||||
frame_parms->nb_antenna_ports_gNB = n_tx;
|
frame_parms->nb_antenna_ports_gNB = n_tx;
|
||||||
frame_parms->N_RB_DL = N_RB_DL;
|
frame_parms->N_RB_DL = N_RB_DL;
|
||||||
frame_parms->Nid_cell = Nid_cell;
|
frame_parms->Nid_cell = Nid_cell;
|
||||||
frame_parms->nushift = Nid_cell%4;
|
|
||||||
frame_parms->ssb_type = nr_ssb_type_C;
|
frame_parms->ssb_type = nr_ssb_type_C;
|
||||||
frame_parms->freq_range = mu<2 ? nr_FR1 : nr_FR2;
|
frame_parms->freq_range = mu<2 ? nr_FR1 : nr_FR2;
|
||||||
|
|
||||||
|
|||||||
@@ -233,8 +233,7 @@ int init_test(unsigned char N_tx, unsigned char N_rx, unsigned char transmission
|
|||||||
frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
|
frame_parms->N_RB_DL = N_RB_DL; //50 for 10MHz and 25 for 5 MHz
|
||||||
frame_parms->N_RB_UL = N_RB_DL;
|
frame_parms->N_RB_UL = N_RB_DL;
|
||||||
frame_parms->Ncp = extended_prefix_flag;
|
frame_parms->Ncp = extended_prefix_flag;
|
||||||
frame_parms->Nid_cell = Nid_cell;
|
frame_parms->Nid_cell = Nid_cell;
|
||||||
frame_parms->nushift = Nid_cell%6;
|
|
||||||
frame_parms->nb_antennas_tx = N_tx;
|
frame_parms->nb_antennas_tx = N_tx;
|
||||||
frame_parms->nb_antennas_rx = N_rx;
|
frame_parms->nb_antennas_rx = N_rx;
|
||||||
frame_parms->frame_type = frame_type;
|
frame_parms->frame_type = frame_type;
|
||||||
|
|||||||
Reference in New Issue
Block a user