Commit 3cc61718 authored by rmagueta's avatar rmagueta

ULSCH power computation in a different way

parent 0be397b2
...@@ -123,6 +123,14 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb ...@@ -123,6 +123,14 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
PHY_MEASUREMENTS_gNB *measurements = &gNB->measurements; PHY_MEASUREMENTS_gNB *measurements = &gNB->measurements;
int rb, nb_symb[275]={0}; int rb, nb_symb[275]={0};
allocCast2D(ulsch_power,
unsigned int,
gNB->measurements.ulsch_power,
frame_parms->nb_antennas_rx,
frame_parms->N_RB_UL,
false);
clearArray(gNB->measurements.ulsch_power, unsigned int);
allocCast2D(n0_subband_power, allocCast2D(n0_subband_power,
unsigned int, unsigned int,
gNB->measurements.n0_subband_power, gNB->measurements.n0_subband_power,
...@@ -140,9 +148,24 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb ...@@ -140,9 +148,24 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
for (int s=first_symb;s<(first_symb+num_symb);s++) { for (int s=first_symb;s<(first_symb+num_symb);s++) {
int offset0 = ((slot&3)*frame_parms->symbols_per_slot + s) * frame_parms->ofdm_symbol_size; int offset0 = ((slot&3)*frame_parms->symbols_per_slot + s) * frame_parms->ofdm_symbol_size;
for (rb=0; rb<frame_parms->N_RB_UL; rb++) { for (rb=0; rb<frame_parms->N_RB_UL; rb++) {
int offset = offset0 + (frame_parms->first_carrier_offset + (rb * 12)) % frame_parms->ofdm_symbol_size;
for (int aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) {
int32_t *ul_ch = (int32_t *)&common_vars->rxdataF[aarx][offset];
int32_t signal_energy;
if (((frame_parms->N_RB_UL & 1) == 1) && (rb == (frame_parms->N_RB_UL >> 1))) {
signal_energy = signal_energy_nodc(ul_ch, 6);
ul_ch = (int32_t *)&common_vars->rxdataF[aarx][offset0];
signal_energy += signal_energy_nodc(ul_ch, 6);
} else {
signal_energy = signal_energy_nodc(ul_ch, 12);
}
ulsch_power[aarx][rb] += signal_energy;
LOG_D(NR_PHY, "slot %d symbol %d RB %d aarx %d n0_subband_power %d\n", slot, s, rb, aarx, signal_energy);
}
if ((gNB->rb_mask_ul[s][rb >> 5] & (1U << (rb & 31))) == 0 && // check that rb was not used in this subframe if ((gNB->rb_mask_ul[s][rb >> 5] & (1U << (rb & 31))) == 0 && // check that rb was not used in this subframe
!(I0_SKIP_DC && rb == frame_parms->N_RB_UL>>1)) { // skip middle PRB because of artificial noise possibly created by FFT !(I0_SKIP_DC && rb == frame_parms->N_RB_UL>>1)) { // skip middle PRB because of artificial noise possibly created by FFT
int offset = offset0 + (frame_parms->first_carrier_offset + (rb*12))%frame_parms->ofdm_symbol_size;
nb_symb[rb]++; nb_symb[rb]++;
for (int aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) { for (int aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
int32_t *ul_ch = (int32_t *)&common_vars->rxdataF[aarx][offset]; int32_t *ul_ch = (int32_t *)&common_vars->rxdataF[aarx][offset];
...@@ -172,6 +195,7 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb ...@@ -172,6 +195,7 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
if (nb_symb[rb] > 0) { if (nb_symb[rb] > 0) {
for (int aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) { for (int aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) {
n0_subband_power[aarx][rb] /= nb_symb[rb]; n0_subband_power[aarx][rb] /= nb_symb[rb];
ulsch_power[aarx][rb] /= num_symb;
n0_subband_power_dB[aarx][rb] = dB_fixed(n0_subband_power[aarx][rb]); n0_subband_power_dB[aarx][rb] = dB_fixed(n0_subband_power[aarx][rb]);
n0_subband_tot_perPRB += n0_subband_power[aarx][rb]; n0_subband_tot_perPRB += n0_subband_power[aarx][rb];
n0_subband_tot_perANT[aarx] += n0_subband_power[aarx][rb]; n0_subband_tot_perANT[aarx] += n0_subband_power[aarx][rb];
......
...@@ -1496,6 +1496,12 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, ...@@ -1496,6 +1496,12 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
pusch_vars, pusch_vars,
symbol, symbol,
rel15_ul->nrOfLayers); rel15_ul->nrOfLayers);
allocCast2D(ulsch_power,
unsigned int,
gNB->measurements.ulsch_power,
frame_parms->nb_antennas_rx,
frame_parms->N_RB_UL,
false);
allocCast2D(n0_subband_power, allocCast2D(n0_subband_power,
unsigned int, unsigned int,
gNB->measurements.n0_subband_power, gNB->measurements.n0_subband_power,
...@@ -1509,15 +1515,21 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, ...@@ -1509,15 +1515,21 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
pusch_vars->ulsch_power[aarx] = 0; pusch_vars->ulsch_power[aarx] = 0;
pusch_vars->ulsch_noise_power[aarx] = 0; pusch_vars->ulsch_noise_power[aarx] = 0;
} }
for (int aatx = 0; aatx < rel15_ul->nrOfLayers; aatx++) { for (int rb = 0; rb < rel15_ul->rb_size; rb++) {
pusch_vars->ulsch_power[aarx] += signal_energy_nodc( pusch_vars->ulsch_power[aarx] +=
&pusch_vars->ul_ch_estimates[aatx * gNB->frame_parms.nb_antennas_rx + aarx][symbol * frame_parms->ofdm_symbol_size], ulsch_power[aarx][rel15_ul->bwp_start + rel15_ul->rb_start + rb] / rel15_ul->rb_size;
rel15_ul->rb_size * 12);
}
for (int rb = 0; rb < rel15_ul->rb_size; rb++)
pusch_vars->ulsch_noise_power[aarx] += pusch_vars->ulsch_noise_power[aarx] +=
n0_subband_power[aarx][rel15_ul->bwp_start + rel15_ul->rb_start + rb] / rel15_ul->rb_size; n0_subband_power[aarx][rel15_ul->bwp_start + rel15_ul->rb_start + rb] / rel15_ul->rb_size;
} }
LOG_D(PHY,
"aa %d, bwp_start%d, rb_start %d, rb_size %d: ulsch_power %d, ulsch_noise_power %d\n",
aarx,
rel15_ul->bwp_start,
rel15_ul->rb_start,
rel15_ul->rb_size,
pusch_vars->ulsch_power[aarx],
pusch_vars->ulsch_noise_power[aarx]);
}
} }
} }
......
...@@ -561,6 +561,8 @@ typedef struct { ...@@ -561,6 +561,8 @@ typedef struct {
fourDimArray_t *n0_subband_power; fourDimArray_t *n0_subband_power;
//! estimated avg noise power per RB per RX ant (dB) //! estimated avg noise power per RB per RX ant (dB)
fourDimArray_t *n0_subband_power_dB; fourDimArray_t *n0_subband_power_dB;
//! estimated avg power per RB per RX ant (lin)
fourDimArray_t *ulsch_power;
//! estimated avg subband noise power (dB) //! estimated avg subband noise power (dB)
unsigned int n0_subband_power_avg_dB; unsigned int n0_subband_power_avg_dB;
//! estimated avg subband noise power per antenna (dB) //! estimated avg subband noise power per antenna (dB)
......
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