Move more variables to nr_srs_channel_estimation() function
This commit is contained in:
@@ -970,9 +970,6 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB,
|
||||
int32_t srs_estimated_channel_freq[][1<<srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size*(1<<srs_pdu->num_symbols)],
|
||||
int32_t srs_estimated_channel_time[][1<<srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size],
|
||||
int32_t srs_estimated_channel_time_shifted[][1<<srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size],
|
||||
uint32_t *signal_power,
|
||||
uint32_t *noise_power_per_rb,
|
||||
uint32_t *noise_power,
|
||||
int8_t *snr_per_rb,
|
||||
int8_t *snr) {
|
||||
|
||||
@@ -993,6 +990,7 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB,
|
||||
}
|
||||
|
||||
c16_t srs_ls_estimated_channel[frame_parms->ofdm_symbol_size*(1<<srs_pdu->num_symbols)];
|
||||
uint32_t noise_power_per_rb[srs_pdu->bwp_size];
|
||||
int16_t ch_real[frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS];
|
||||
int16_t ch_imag[frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS];
|
||||
int16_t noise_real[frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS];
|
||||
@@ -1003,6 +1001,7 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB,
|
||||
|
||||
for (int p_index = 0; p_index < N_ap; p_index++) {
|
||||
|
||||
memset(srs_ls_estimated_channel, 0, frame_parms->ofdm_symbol_size*(1<<srs_pdu->num_symbols)*sizeof(c16_t));
|
||||
memset(srs_estimated_channel_freq[ant][p_index], 0, frame_parms->ofdm_symbol_size*(1<<srs_pdu->num_symbols)*sizeof(int32_t));
|
||||
|
||||
#ifdef SRS_DEBUG
|
||||
@@ -1178,21 +1177,21 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB,
|
||||
} // for (int ant = 0; ant < frame_parms->nb_antennas_rx; ant++)
|
||||
|
||||
// Compute signal power
|
||||
*signal_power = calc_power(ch_real,frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS)
|
||||
+ calc_power(ch_imag,frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS);
|
||||
uint32_t signal_power = calc_power(ch_real,frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS)
|
||||
+ calc_power(ch_imag,frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS);
|
||||
|
||||
#ifdef SRS_DEBUG
|
||||
LOG_I(NR_PHY,"signal_power = %u\n", *signal_power);
|
||||
LOG_I(NR_PHY,"signal_power = %u\n", signal_power);
|
||||
#endif
|
||||
|
||||
if (*signal_power == 0) {
|
||||
if (signal_power == 0) {
|
||||
LOG_W(NR_PHY, "Received SRS signal power is 0\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Compute noise power
|
||||
|
||||
const uint8_t signal_power_bits = log2_approx(*signal_power);
|
||||
const uint8_t signal_power_bits = log2_approx(signal_power);
|
||||
const uint8_t factor_bits = signal_power_bits < 32 ? 32 - signal_power_bits : 0; // 32 due to input of dB_fixed(uint32_t x)
|
||||
const int32_t factor_dB = dB_fixed(1<<factor_bits);
|
||||
|
||||
@@ -1224,7 +1223,7 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB,
|
||||
|
||||
noise_power_per_rb[rb] = max(sum_re2 / n_noise_est - (sum_re / n_noise_est) * (sum_re / n_noise_est) +
|
||||
sum_im2 / n_noise_est - (sum_im / n_noise_est) * (sum_im / n_noise_est), 1);
|
||||
snr_per_rb[rb] = dB_fixed((int32_t)((*signal_power<<factor_bits)/noise_power_per_rb[rb])) - factor_dB;
|
||||
snr_per_rb[rb] = dB_fixed((int32_t)((signal_power<<factor_bits)/noise_power_per_rb[rb])) - factor_dB;
|
||||
|
||||
#ifdef SRS_DEBUG
|
||||
LOG_I(NR_PHY,"noise_power_per_rb[%i] = %i, snr_per_rb[%i] = %i dB\n", rb, noise_power_per_rb[rb], rb, snr_per_rb[rb]);
|
||||
@@ -1232,13 +1231,13 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB,
|
||||
|
||||
} // for (int rb = 0; rb < m_SRS_b; rb++)
|
||||
|
||||
*noise_power = calc_power(noise_real,frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS)
|
||||
+ calc_power(noise_imag,frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS);
|
||||
uint32_t noise_power = calc_power(noise_real,frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS)
|
||||
+ calc_power(noise_imag,frame_parms->nb_antennas_rx*N_ap*M_sc_b_SRS);
|
||||
|
||||
*snr = dB_fixed((int32_t)((*signal_power<<factor_bits)/(*noise_power))) - factor_dB;
|
||||
*snr = dB_fixed((int32_t)((signal_power<<factor_bits)/(noise_power))) - factor_dB;
|
||||
|
||||
#ifdef SRS_DEBUG
|
||||
LOG_I(NR_PHY,"noise_power = %u, SNR = %i dB\n", *noise_power, *snr);
|
||||
LOG_I(NR_PHY,"noise_power = %u, SNR = %i dB\n", noise_power, *snr);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -76,9 +76,6 @@ int nr_srs_channel_estimation(const PHY_VARS_gNB *gNB,
|
||||
int32_t srs_estimated_channel_freq[][1<<srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size*(1<<srs_pdu->num_symbols)],
|
||||
int32_t srs_estimated_channel_time[][1<<srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size],
|
||||
int32_t srs_estimated_channel_time_shifted[][1<<srs_pdu->num_ant_ports][gNB->frame_parms.ofdm_symbol_size],
|
||||
uint32_t *signal_power,
|
||||
uint32_t *noise_power_per_rb,
|
||||
uint32_t *noise_power,
|
||||
int8_t *snr_per_rb,
|
||||
int8_t *snr);
|
||||
#endif
|
||||
|
||||
@@ -885,10 +885,7 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
|
||||
int32_t srs_estimated_channel_freq[frame_parms->nb_antennas_rx][1<<srs_pdu->num_ant_ports][frame_parms->ofdm_symbol_size*N_symb_SRS] __attribute__ ((aligned(32)));
|
||||
int32_t srs_estimated_channel_time[frame_parms->nb_antennas_rx][1<<srs_pdu->num_ant_ports][frame_parms->ofdm_symbol_size] __attribute__ ((aligned(32)));
|
||||
int32_t srs_estimated_channel_time_shifted[frame_parms->nb_antennas_rx][1<<srs_pdu->num_ant_ports][frame_parms->ofdm_symbol_size];
|
||||
uint32_t noise_power_per_rb[srs_pdu->bwp_size];
|
||||
int8_t snr_per_rb[srs_pdu->bwp_size];
|
||||
uint32_t signal_power;
|
||||
uint32_t noise_power;
|
||||
int8_t snr;
|
||||
|
||||
// At least currently, the configuration is constant, so it is enough to generate the sequence just once.
|
||||
@@ -909,9 +906,6 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
|
||||
srs_estimated_channel_freq,
|
||||
srs_estimated_channel_time,
|
||||
srs_estimated_channel_time_shifted,
|
||||
&signal_power,
|
||||
noise_power_per_rb,
|
||||
&noise_power,
|
||||
snr_per_rb,
|
||||
&snr);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user