Commit 1aed7b58 authored by Robert Schmidt's avatar Robert Schmidt

Cleanly pass pusch_vars to nr_pusch_channel_estimation()

Pass pointer to data. This necessitates to move delay from
NR_gNB_ULSCH_t (ULSCH data, including transport channels etc) to
NR_gNB_PUSCH (lower-PHY PUSCH data):

1. This allows to pass a single pointer to nr_pusch_channel_estimation()
2. To me, delay estimation seems to be a lower-PHY calculation, so it
   fits better anyway.
Signed-off-by: default avatarRobert Schmidt <robert.schmidt@openairinterface.org>
parent e8e3f60e
...@@ -452,7 +452,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, ...@@ -452,7 +452,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
int nl, int nl,
unsigned short p, unsigned short p,
unsigned char symbol, unsigned char symbol,
int ul_id, NR_gNB_PUSCH *pusch_vars,
int beam_nb, int beam_nb,
unsigned short bwp_start_subcarrier, unsigned short bwp_start_subcarrier,
nfapi_nr_pusch_pdu_t *pusch_pdu, nfapi_nr_pusch_pdu_t *pusch_pdu,
...@@ -534,7 +534,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, ...@@ -534,7 +534,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
int nest_count = 0; int nest_count = 0;
uint64_t noise_amp2 = 0; uint64_t noise_amp2 = 0;
delay_t *delay = &gNB->ulsch[ul_id].delay; delay_t *delay = &pusch_vars->delay;
memset(delay, 0, sizeof(*delay)); memset(delay, 0, sizeof(*delay));
int nb_antennas_rx = fp->nb_antennas_rx; int nb_antennas_rx = fp->nb_antennas_rx;
...@@ -579,7 +579,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, ...@@ -579,7 +579,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
rdata->delay = &delay_arr[rdata->aarx]; rdata->delay = &delay_arr[rdata->aarx];
rdata->beam_nb = beam_nb; rdata->beam_nb = beam_nb;
rdata->frame_parms = fp; rdata->frame_parms = fp;
rdata->pusch_vars = &gNB->pusch_vars[ul_id]; rdata->pusch_vars = pusch_vars;
rdata->chest_freq = gNB->chest_freq; rdata->chest_freq = gNB->chest_freq;
rdata->rxdataF = gNB->common_vars.rxdataF; rdata->rxdataF = gNB->common_vars.rxdataF;
rdata->scope = gNB->scopeData; rdata->scope = gNB->scopeData;
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
\param Ns slot number (0..19) \param Ns slot number (0..19)
\param p \param p
\param symbol symbol within slot \param symbol symbol within slot
\param ul_id \param pusch_vars lower-phy PUSCH info
\param bwp_start_subcarrier first allocated subcarrier \param bwp_start_subcarrier first allocated subcarrier
\param pusch_pdu \param pusch_pdu
\param max_ch maximum value of estimated channel \param max_ch maximum value of estimated channel
...@@ -29,7 +29,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, ...@@ -29,7 +29,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
int nl, int nl,
unsigned short p, unsigned short p,
unsigned char symbol, unsigned char symbol,
int ul_id, NR_gNB_PUSCH *pusch_vars,
int beam_nb, int beam_nb,
unsigned short bwp_start_subcarrier, unsigned short bwp_start_subcarrier,
nfapi_nr_pusch_pdu_t *pusch_pdu, nfapi_nr_pusch_pdu_t *pusch_pdu,
......
...@@ -1159,7 +1159,7 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, uint8_t ulsch_id, uint32_t frame, uint8_t ...@@ -1159,7 +1159,7 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, uint8_t ulsch_id, uint32_t frame, uint8_t
nl, nl,
get_dmrs_port(nl, rel15_ul->dmrs_ports), get_dmrs_port(nl, rel15_ul->dmrs_ports),
symbol, symbol,
ulsch_id, pusch_vars,
beam_nb, beam_nb,
bwp_start_subcarrier, bwp_start_subcarrier,
rel15_ul, rel15_ul,
......
...@@ -187,7 +187,6 @@ typedef struct { ...@@ -187,7 +187,6 @@ typedef struct {
bool active; bool active;
/// Flag to indicate that the UL configuration has been handled. Used to remove a stale ULSCH when frame wraps around /// Flag to indicate that the UL configuration has been handled. Used to remove a stale ULSCH when frame wraps around
uint8_t handled; uint8_t handled;
delay_t delay;
} NR_gNB_ULSCH_t; } NR_gNB_ULSCH_t;
typedef struct { typedef struct {
...@@ -275,6 +274,8 @@ typedef struct { ...@@ -275,6 +274,8 @@ typedef struct {
int llr_offset[14]; int llr_offset[14];
/// flag to indicate DTX on reception /// flag to indicate DTX on reception
int DTX; int DTX;
/// delay estimation
delay_t delay;
} NR_gNB_PUSCH; } NR_gNB_PUSCH;
/// Context data structure for RX/TX portion of slot processing /// Context data structure for RX/TX portion of slot processing
......
...@@ -542,7 +542,7 @@ static void nr_fill_indication(PHY_VARS_gNB *gNB, ...@@ -542,7 +542,7 @@ static void nr_fill_indication(PHY_VARS_gNB *gNB,
nfapi_nr_pusch_pdu_t *pusch_pdu = &harq_process->ulsch_pdu; nfapi_nr_pusch_pdu_t *pusch_pdu = &harq_process->ulsch_pdu;
// Get estimated timing advance for MAC // Get estimated timing advance for MAC
const int sync_pos = gNB->ulsch[ULSCH_id].delay.est_delay; const int sync_pos = pusch->delay.est_delay;
// scale the 16 factor in N_TA calculation in 38.213 section 4.2 according to the used FFT size // scale the 16 factor in N_TA calculation in 38.213 section 4.2 according to the used FFT size
uint16_t bw_scaling = 16 * gNB->frame_parms.ofdm_symbol_size / 2048; uint16_t bw_scaling = 16 * gNB->frame_parms.ofdm_symbol_size / 2048;
......
...@@ -1208,6 +1208,7 @@ int main(int argc, char *argv[]) ...@@ -1208,6 +1208,7 @@ int main(int argc, char *argv[])
uint8_t round = 0; uint8_t round = 0;
crc_status = 1; crc_status = 1;
errors_decoding = 0; errors_decoding = 0;
NR_gNB_PUSCH *pusch_vars = &gNB->pusch_vars[UE_id];
while (round < max_rounds && crc_status && !stop) { while (round < max_rounds && crc_status && !stop) {
...@@ -1594,7 +1595,6 @@ int main(int argc, char *argv[]) ...@@ -1594,7 +1595,6 @@ int main(int argc, char *argv[])
} }
} }
NR_gNB_PUSCH *pusch_vars = &gNB->pusch_vars[UE_id];
if (n_trials == 1 && round == 0) { if (n_trials == 1 && round == 0) {
__attribute__((unused)) int off = ((nb_rb & 1) == 1) ? 4 : 0; __attribute__((unused)) int off = ((nb_rb & 1) == 1) ? 4 : 0;
...@@ -1742,9 +1742,9 @@ int main(int argc, char *argv[]) ...@@ -1742,9 +1742,9 @@ int main(int argc, char *argv[])
if (!crc_status) if (!crc_status)
effRate += ((double)TBS) / (double)round; effRate += ((double)TBS) / (double)round;
sum_pusch_delay += ulsch_gNB->delay.est_delay; sum_pusch_delay += pusch_vars->delay.est_delay;
min_pusch_delay = min(ulsch_gNB->delay.est_delay, min_pusch_delay); min_pusch_delay = min(pusch_vars->delay.est_delay, min_pusch_delay);
max_pusch_delay = max(ulsch_gNB->delay.est_delay, max_pusch_delay); max_pusch_delay = max(pusch_vars->delay.est_delay, max_pusch_delay);
delay_pusch_est_count++; delay_pusch_est_count++;
if (do_SRS == 1) { if (do_SRS == 1) {
......
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