Merge remote-tracking branch 'origin/remove-rms-magic-number' into integration_2024_w22
This commit is contained in:
@@ -79,6 +79,12 @@ static inline const char *rnti_types(nr_rnti_type_t rr)
|
|||||||
|
|
||||||
#define NR_MAX_NB_LAYERS 4 // 8
|
#define NR_MAX_NB_LAYERS 4 // 8
|
||||||
|
|
||||||
|
// Since the IQ samples are represented by SQ15 R+I (see https://en.wikipedia.org/wiki/Q_(number_format)) we need to compensate when
|
||||||
|
// calcualting signal energy. Instead of shifting each sample right by 15, we can normalize the result in dB scale once its
|
||||||
|
// calcualted. Signal energy is calculated using RMS^2, where each sample is squared before taking the average of the sum, therefore
|
||||||
|
// the total shift is 2 * 15, in dB scale thats 10log10(2^(15*2))
|
||||||
|
#define SQ15_SQUARED_NORM_FACTOR_DB 90.3089986992
|
||||||
|
|
||||||
typedef struct nr_bandentry_s {
|
typedef struct nr_bandentry_s {
|
||||||
int16_t band;
|
int16_t band;
|
||||||
uint64_t ul_min;
|
uint64_t ul_min;
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ void nr_gnb_measurements(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
ulsch_measurements->wideband_cqi_tot = dB_fixed2(rx_power_tot, meas->n0_power_tot);
|
ulsch_measurements->wideband_cqi_tot = dB_fixed2(rx_power_tot, meas->n0_power_tot);
|
||||||
ulsch_measurements->rx_rssi_dBm =
|
ulsch_measurements->rx_rssi_dBm =
|
||||||
rx_power_avg_dB + 30 - 10 * log10(pow(2, 30)) - (rx_gain - rx_gain_offset) - dB_fixed(fp->ofdm_symbol_size);
|
rx_power_avg_dB + 30 - SQ15_SQUARED_NORM_FACTOR_DB - (rx_gain - rx_gain_offset) - dB_fixed(fp->ofdm_symbol_size);
|
||||||
|
|
||||||
LOG_D(PHY,
|
LOG_D(PHY,
|
||||||
"[RNTI %04x] RSSI %d dBm/RE, RSSI (digital) %d dB (N_RB_UL %d), WBand CQI tot %d dB, N0 Power tot %d, RX Power tot %d\n",
|
"[RNTI %04x] RSSI %d dBm/RE, RSSI (digital) %d dB (N_RB_UL %d), WBand CQI tot %d dB, N0 Power tot %d, RX Power tot %d\n",
|
||||||
|
|||||||
@@ -489,10 +489,10 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
|
|||||||
peak_estimator(&chT_interpol[rxAnt][0], NR_PRS_IDFT_OVERSAMP_FACTOR * frame_params->ofdm_symbol_size, &prs_toa, &ch_pwr, mean_val);
|
peak_estimator(&chT_interpol[rxAnt][0], NR_PRS_IDFT_OVERSAMP_FACTOR * frame_params->ofdm_symbol_size, &prs_toa, &ch_pwr, mean_val);
|
||||||
|
|
||||||
// adjusting the rx_gains for channel peak power
|
// adjusting the rx_gains for channel peak power
|
||||||
ch_pwr_dbm = 10 * log10(ch_pwr) + 30 - 10 * log10(pow(2, 30)) - ((int)openair0_cfg[0].rx_gain[0] - (int)openair0_cfg[0].rx_gain_offset[0]) - dB_fixed(frame_params->ofdm_symbol_size);
|
ch_pwr_dbm = 10 * log10(ch_pwr) + 30 - SQ15_SQUARED_NORM_FACTOR_DB - ((int)openair0_cfg[0].rx_gain[0] - (int)openair0_cfg[0].rx_gain_offset[0]) - dB_fixed(frame_params->ofdm_symbol_size);
|
||||||
|
|
||||||
prs_meas[rxAnt]->rsrp_dBm =
|
prs_meas[rxAnt]->rsrp_dBm =
|
||||||
10 * log10(prs_meas[rxAnt]->rsrp) + 30 - 10 * log10(pow(2, 30)) - ((int)openair0_cfg[0].rx_gain[0] - (int)openair0_cfg[0].rx_gain_offset[0]) - dB_fixed(ue->frame_parms.ofdm_symbol_size);
|
10 * log10(prs_meas[rxAnt]->rsrp) + 30 - SQ15_SQUARED_NORM_FACTOR_DB - ((int)openair0_cfg[0].rx_gain[0] - (int)openair0_cfg[0].rx_gain_offset[0]) - dB_fixed(ue->frame_parms.ofdm_symbol_size);
|
||||||
|
|
||||||
//prs measurements
|
//prs measurements
|
||||||
prs_meas[rxAnt]->gNB_id = gNB_id;
|
prs_meas[rxAnt]->gNB_id = gNB_id;
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ void nr_ue_measurements(PHY_VARS_NR_UE *ue,
|
|||||||
ue->measurements.rx_power_avg_dB[gNB_id] = dB_fixed( ue->measurements.rx_power_avg[gNB_id]);
|
ue->measurements.rx_power_avg_dB[gNB_id] = dB_fixed( ue->measurements.rx_power_avg[gNB_id]);
|
||||||
ue->measurements.wideband_cqi_tot[gNB_id] = ue->measurements.rx_power_tot_dB[gNB_id] - ue->measurements.n0_power_tot_dB;
|
ue->measurements.wideband_cqi_tot[gNB_id] = ue->measurements.rx_power_tot_dB[gNB_id] - ue->measurements.n0_power_tot_dB;
|
||||||
ue->measurements.wideband_cqi_avg[gNB_id] = ue->measurements.rx_power_avg_dB[gNB_id] - dB_fixed(ue->measurements.n0_power_avg);
|
ue->measurements.wideband_cqi_avg[gNB_id] = ue->measurements.rx_power_avg_dB[gNB_id] - dB_fixed(ue->measurements.n0_power_avg);
|
||||||
ue->measurements.rx_rssi_dBm[gNB_id] = ue->measurements.rx_power_avg_dB[gNB_id] + 30 - 10*log10(pow(2, 30)) - ((int)openair0_cfg[0].rx_gain[0] - (int)openair0_cfg[0].rx_gain_offset[0]) - dB_fixed(ue->frame_parms.ofdm_symbol_size);
|
ue->measurements.rx_rssi_dBm[gNB_id] = ue->measurements.rx_power_avg_dB[gNB_id] + 30 - SQ15_SQUARED_NORM_FACTOR_DB - ((int)openair0_cfg[0].rx_gain[0] - (int)openair0_cfg[0].rx_gain_offset[0]) - dB_fixed(ue->frame_parms.ofdm_symbol_size);
|
||||||
|
|
||||||
LOG_D(PHY, "[gNB %d] Slot %d, RSSI %d dB (%d dBm/RE), WBandCQI %d dB, rxPwrAvg %d, n0PwrAvg %d\n",
|
LOG_D(PHY, "[gNB %d] Slot %d, RSSI %d dB (%d dBm/RE), WBandCQI %d dB, rxPwrAvg %d, n0PwrAvg %d\n",
|
||||||
gNB_id,
|
gNB_id,
|
||||||
@@ -219,7 +219,7 @@ void nr_ue_ssb_rsrp_measurements(PHY_VARS_NR_UE *ue,
|
|||||||
|
|
||||||
rsrp /= nb_re;
|
rsrp /= nb_re;
|
||||||
ue->measurements.ssb_rsrp_dBm[ssb_index] = 10*log10(rsrp) +
|
ue->measurements.ssb_rsrp_dBm[ssb_index] = 10*log10(rsrp) +
|
||||||
30 - 10*log10(pow(2,30)) -
|
30 - SQ15_SQUARED_NORM_FACTOR_DB -
|
||||||
((int)openair0_cfg[0].rx_gain[0] - (int)openair0_cfg[0].rx_gain_offset[0]) -
|
((int)openair0_cfg[0].rx_gain[0] - (int)openair0_cfg[0].rx_gain_offset[0]) -
|
||||||
dB_fixed(ue->frame_parms.ofdm_symbol_size);
|
dB_fixed(ue->frame_parms.ofdm_symbol_size);
|
||||||
|
|
||||||
@@ -296,7 +296,7 @@ void nr_ue_rrc_measurements(PHY_VARS_NR_UE *ue,
|
|||||||
#ifdef DEBUG_MEAS_RRC
|
#ifdef DEBUG_MEAS_RRC
|
||||||
const int psd_awgn = -174;
|
const int psd_awgn = -174;
|
||||||
const int scs = 15000 * (1 << ue->frame_parms.numerology_index);
|
const int scs = 15000 * (1 << ue->frame_parms.numerology_index);
|
||||||
const int nf_usrp = ue->measurements.n0_power_tot_dB + 3 + 30 - ((int)rx_gain - (int)rx_gain_offset) - 10 * log10(pow(2, 30)) - (psd_awgn + dB_fixed(scs) + dB_fixed(ue->frame_parms.ofdm_symbol_size));
|
const int nf_usrp = ue->measurements.n0_power_tot_dB + 3 + 30 - ((int)rx_gain - (int)rx_gain_offset) - SQ15_SQUARED_NORM_FACTOR_DB - (psd_awgn + dB_fixed(scs) + dB_fixed(ue->frame_parms.ofdm_symbol_size));
|
||||||
LOG_D(PHY, "In [%s][slot:%d] NF USRP %d dB\n", __FUNCTION__, slot, nf_usrp);
|
LOG_D(PHY, "In [%s][slot:%d] NF USRP %d dB\n", __FUNCTION__, slot, nf_usrp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -306,7 +306,7 @@ void nr_ue_rrc_measurements(PHY_VARS_NR_UE *ue,
|
|||||||
slot,
|
slot,
|
||||||
ue->measurements.n0_power_tot,
|
ue->measurements.n0_power_tot,
|
||||||
ue->measurements.n0_power_tot_dB,
|
ue->measurements.n0_power_tot_dB,
|
||||||
ue->measurements.n0_power_tot_dB + 30 - 10 * log10(pow(2, 30)) - dB_fixed(ue->frame_parms.ofdm_symbol_size)
|
ue->measurements.n0_power_tot_dB + 30 - SQ15_SQUARED_NORM_FACTOR_DB - dB_fixed(ue->frame_parms.ofdm_symbol_size)
|
||||||
- ((int)rx_gain - (int)rx_gain_offset));
|
- ((int)rx_gain - (int)rx_gain_offset));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -347,7 +347,7 @@ void nr_sl_psbch_rsrp_measurements(sl_nr_ue_phy_params_t *sl_phy_params,
|
|||||||
}
|
}
|
||||||
|
|
||||||
psbch_rx->rsrp_dB_per_RE = 10 * log10(rsrp / num_re);
|
psbch_rx->rsrp_dB_per_RE = 10 * log10(rsrp / num_re);
|
||||||
psbch_rx->rsrp_dBm_per_RE = psbch_rx->rsrp_dB_per_RE + 30 - 10 * log10(pow(2, 30))
|
psbch_rx->rsrp_dBm_per_RE = psbch_rx->rsrp_dB_per_RE + 30 - SQ15_SQUARED_NORM_FACTOR_DB
|
||||||
- ((int)openair0_cfg[0].rx_gain[0] - (int)openair0_cfg[0].rx_gain_offset[0])
|
- ((int)openair0_cfg[0].rx_gain[0] - (int)openair0_cfg[0].rx_gain_offset[0])
|
||||||
- dB_fixed(fp->ofdm_symbol_size);
|
- dB_fixed(fp->ofdm_symbol_size);
|
||||||
|
|
||||||
|
|||||||
@@ -40,9 +40,6 @@
|
|||||||
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
|
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
|
||||||
#include "PHY/NR_UE_ESTIMATION/filt16a_32.h"
|
#include "PHY/NR_UE_ESTIMATION/filt16a_32.h"
|
||||||
|
|
||||||
// 10*log10(pow(2,30))
|
|
||||||
#define pow_2_30_dB 90
|
|
||||||
|
|
||||||
// Additional memory allocation, because of applying the filter and the memory offset to ensure memory alignment
|
// Additional memory allocation, because of applying the filter and the memory offset to ensure memory alignment
|
||||||
#define FILTER_MARGIN 32
|
#define FILTER_MARGIN 32
|
||||||
|
|
||||||
@@ -254,7 +251,7 @@ int nr_get_csi_rs_signal(const PHY_VARS_NR_UE *ue,
|
|||||||
|
|
||||||
|
|
||||||
*rsrp = rsrp_sum/meas_count;
|
*rsrp = rsrp_sum/meas_count;
|
||||||
*rsrp_dBm = dB_fixed(*rsrp) + 30 - pow_2_30_dB
|
*rsrp_dBm = dB_fixed(*rsrp) + 30 - SQ15_SQUARED_NORM_FACTOR_DB
|
||||||
- ((int)openair0_cfg[0].rx_gain[0] - (int)openair0_cfg[0].rx_gain_offset[0]) - dB_fixed(ue->frame_parms.ofdm_symbol_size);
|
- ((int)openair0_cfg[0].rx_gain[0] - (int)openair0_cfg[0].rx_gain_offset[0]) - dB_fixed(ue->frame_parms.ofdm_symbol_size);
|
||||||
|
|
||||||
#ifdef NR_CSIRS_DEBUG
|
#ifdef NR_CSIRS_DEBUG
|
||||||
|
|||||||
Reference in New Issue
Block a user