remove rb_mask_ul from permanent storage for stack local usage
This commit is contained in:
@@ -114,10 +114,8 @@ void dump_nr_I0_stats(FILE *fd,PHY_VARS_gNB *gNB) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gNB_I0_measurements(PHY_VARS_gNB *gNB, int slot, int first_symb, int num_symb, uint32_t rb_mask_ul[14][9])
|
||||||
|
{
|
||||||
void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb) {
|
|
||||||
|
|
||||||
NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms;
|
NR_DL_FRAME_PARMS *frame_parms = &gNB->frame_parms;
|
||||||
NR_gNB_COMMON *common_vars = &gNB->common_vars;
|
NR_gNB_COMMON *common_vars = &gNB->common_vars;
|
||||||
PHY_MEASUREMENTS_gNB *measurements = &gNB->measurements;
|
PHY_MEASUREMENTS_gNB *measurements = &gNB->measurements;
|
||||||
@@ -140,7 +138,7 @@ 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++) {
|
||||||
if ((gNB->rb_mask_ul[s][rb >> 5] & (1U << (rb & 31))) == 0 && // check that rb was not used in this subframe
|
if ((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;
|
int offset = offset0 + (frame_parms->first_carrier_offset + (rb*12))%frame_parms->ofdm_symbol_size;
|
||||||
nb_symb[rb]++;
|
nb_symb[rb]++;
|
||||||
@@ -192,7 +190,6 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Scope: This function computes the UL SNR from the UL channel estimates
|
// Scope: This function computes the UL SNR from the UL channel estimates
|
||||||
//
|
//
|
||||||
// Todo:
|
// Todo:
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
|
|||||||
|
|
||||||
void dump_nr_I0_stats(FILE *fd,PHY_VARS_gNB *gNB);
|
void dump_nr_I0_stats(FILE *fd,PHY_VARS_gNB *gNB);
|
||||||
|
|
||||||
void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot,int first_symb,int num_symb);
|
void gNB_I0_measurements(PHY_VARS_gNB *gNB, int slot, int first_symb, int num_symb, uint32_t rb_mask_ul[14][9]);
|
||||||
|
|
||||||
void nr_gnb_measurements(PHY_VARS_gNB *gNB,
|
void nr_gnb_measurements(PHY_VARS_gNB *gNB,
|
||||||
NR_gNB_ULSCH_t *ulsch,
|
NR_gNB_ULSCH_t *ulsch,
|
||||||
|
|||||||
@@ -622,9 +622,6 @@ typedef struct PHY_VARS_gNB_s {
|
|||||||
/// PUSCH DMRS
|
/// PUSCH DMRS
|
||||||
uint32_t ****nr_gold_pusch_dmrs;
|
uint32_t ****nr_gold_pusch_dmrs;
|
||||||
|
|
||||||
// Mask of occupied RBs, per symbol and PRB
|
|
||||||
uint32_t rb_mask_ul[14][9];
|
|
||||||
|
|
||||||
/// PRS sequence
|
/// PRS sequence
|
||||||
uint32_t ****nr_gold_prs;
|
uint32_t ****nr_gold_prs;
|
||||||
|
|
||||||
|
|||||||
@@ -541,20 +541,20 @@ void nr_fill_indication(PHY_VARS_gNB *gNB, int frame, int slot_rx, int ULSCH_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Function to fill UL RB mask to be used for N0 measurements
|
// Function to fill UL RB mask to be used for N0 measurements
|
||||||
void fill_ul_rb_mask(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
|
static void fill_ul_rb_mask(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, uint32_t rb_mask_ul[14][9])
|
||||||
|
{
|
||||||
int rb = 0;
|
int rb = 0;
|
||||||
int rb2 = 0;
|
int rb2 = 0;
|
||||||
int prbpos = 0;
|
int prbpos = 0;
|
||||||
|
|
||||||
for (int symbol = 0; symbol < 14; symbol++) {
|
for (int symbol = 0; symbol < 14; symbol++) {
|
||||||
for (int m = 0; m < 9; m++) {
|
for (int m = 0; m < 9; m++) {
|
||||||
gNB->rb_mask_ul[symbol][m] = 0;
|
rb_mask_ul[symbol][m] = 0;
|
||||||
for (int i = 0; i < 32; i++) {
|
for (int i = 0; i < 32; i++) {
|
||||||
prbpos = (m * 32) + i;
|
prbpos = (m * 32) + i;
|
||||||
if (prbpos>gNB->frame_parms.N_RB_UL)
|
if (prbpos>gNB->frame_parms.N_RB_UL)
|
||||||
break;
|
break;
|
||||||
gNB->rb_mask_ul[symbol][m] |= (gNB->ulprbbl[prbpos] > 0 ? 1U : 0) << i;
|
rb_mask_ul[symbol][m] |= (gNB->ulprbbl[prbpos] > 0 ? 1U : 0) << i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -574,7 +574,7 @@ void fill_ul_rb_mask(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
|
|||||||
rb2 = rb + pucch_pdu->bwp_start +
|
rb2 = rb + pucch_pdu->bwp_start +
|
||||||
((symbol < pucch_pdu->start_symbol_index+(pucch_pdu->nr_of_symbols>>1)) || (pucch_pdu->freq_hop_flag == 0) ?
|
((symbol < pucch_pdu->start_symbol_index+(pucch_pdu->nr_of_symbols>>1)) || (pucch_pdu->freq_hop_flag == 0) ?
|
||||||
pucch_pdu->prb_start : pucch_pdu->second_hop_prb);
|
pucch_pdu->prb_start : pucch_pdu->second_hop_prb);
|
||||||
gNB->rb_mask_ul[symbol][rb2>>5] |= (((uint32_t)1)<<(rb2&31));
|
rb_mask_ul[symbol][rb2>>5] |= (((uint32_t)1)<<(rb2&31));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -599,7 +599,7 @@ void fill_ul_rb_mask(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
|
|||||||
LOG_D(PHY, "symbol %d Filling rb_mask_ul rb_size %d\n", symbol, ulsch_harq->ulsch_pdu.rb_size);
|
LOG_D(PHY, "symbol %d Filling rb_mask_ul rb_size %d\n", symbol, ulsch_harq->ulsch_pdu.rb_size);
|
||||||
for (rb = 0; rb < ulsch_harq->ulsch_pdu.rb_size; rb++) {
|
for (rb = 0; rb < ulsch_harq->ulsch_pdu.rb_size; rb++) {
|
||||||
rb2 = rb + ulsch_harq->ulsch_pdu.rb_start + ulsch_harq->ulsch_pdu.bwp_start;
|
rb2 = rb + ulsch_harq->ulsch_pdu.rb_start + ulsch_harq->ulsch_pdu.bwp_start;
|
||||||
gNB->rb_mask_ul[symbol][rb2 >> 5] |= 1U << (rb2 & 31);
|
rb_mask_ul[symbol][rb2 >> 5] |= 1U << (rb2 & 31);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -613,14 +613,13 @@ void fill_ul_rb_mask(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
|
|||||||
nfapi_nr_srs_pdu_t *srs_pdu = &srs->srs_pdu;
|
nfapi_nr_srs_pdu_t *srs_pdu = &srs->srs_pdu;
|
||||||
for(int symbol = 0; symbol<(1<<srs_pdu->num_symbols); symbol++) {
|
for(int symbol = 0; symbol<(1<<srs_pdu->num_symbols); symbol++) {
|
||||||
for(rb = srs_pdu->bwp_start; rb < (srs_pdu->bwp_start+srs_pdu->bwp_size); rb++) {
|
for(rb = srs_pdu->bwp_start; rb < (srs_pdu->bwp_start+srs_pdu->bwp_size); rb++) {
|
||||||
gNB->rb_mask_ul[gNB->frame_parms.symbols_per_slot - srs_pdu->time_start_position - 1 + symbol][rb >> 5] |= 1U
|
rb_mask_ul[gNB->frame_parms.symbols_per_slot - srs_pdu->time_start_position - 1 + symbol][rb >> 5] |= 1U
|
||||||
<< (rb & 31);
|
<< (rb & 31);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int fill_srs_reported_symbol_list(nfapi_nr_srs_reported_symbol_t *prgs,
|
int fill_srs_reported_symbol_list(nfapi_nr_srs_reported_symbol_t *prgs,
|
||||||
@@ -718,8 +717,9 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
|
|||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_UESPEC_RX,1);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_UESPEC_RX,1);
|
||||||
LOG_D(PHY,"phy_procedures_gNB_uespec_RX frame %d, slot %d\n",frame_rx,slot_rx);
|
LOG_D(PHY,"phy_procedures_gNB_uespec_RX frame %d, slot %d\n",frame_rx,slot_rx);
|
||||||
|
// Mask of occupied RBs, per symbol and PRB
|
||||||
fill_ul_rb_mask(gNB, frame_rx, slot_rx);
|
uint32_t rb_mask_ul[14][9];
|
||||||
|
fill_ul_rb_mask(gNB, frame_rx, slot_rx, rb_mask_ul);
|
||||||
|
|
||||||
int first_symb=0,num_symb=0;
|
int first_symb=0,num_symb=0;
|
||||||
if (gNB->frame_parms.frame_type == TDD)
|
if (gNB->frame_parms.frame_type == TDD)
|
||||||
@@ -731,7 +731,7 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
num_symb = NR_NUMBER_OF_SYMBOLS_PER_SLOT;
|
num_symb = NR_NUMBER_OF_SYMBOLS_PER_SLOT;
|
||||||
gNB_I0_measurements(gNB,slot_rx,first_symb,num_symb);
|
gNB_I0_measurements(gNB, slot_rx, first_symb, num_symb, rb_mask_ul);
|
||||||
|
|
||||||
const int soffset = (slot_rx & 3) * gNB->frame_parms.symbols_per_slot * gNB->frame_parms.ofdm_symbol_size;
|
const int soffset = (slot_rx & 3) * gNB->frame_parms.symbols_per_slot * gNB->frame_parms.ofdm_symbol_size;
|
||||||
int offset = 10 * gNB->frame_parms.ofdm_symbol_size + gNB->frame_parms.first_carrier_offset;
|
int offset = 10 * gNB->frame_parms.ofdm_symbol_size + gNB->frame_parms.first_carrier_offset;
|
||||||
|
|||||||
@@ -32,7 +32,6 @@
|
|||||||
#include "PHY/NR_TRANSPORT/nr_dci.h"
|
#include "PHY/NR_TRANSPORT/nr_dci.h"
|
||||||
#include "phy_frame_config_nr.h"
|
#include "phy_frame_config_nr.h"
|
||||||
|
|
||||||
void fill_ul_rb_mask(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx);
|
|
||||||
void nr_set_ssb_first_subcarrier(nfapi_nr_config_request_scf_t *cfg, NR_DL_FRAME_PARMS *fp);
|
void nr_set_ssb_first_subcarrier(nfapi_nr_config_request_scf_t *cfg, NR_DL_FRAME_PARMS *fp);
|
||||||
void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx, int frame_tx, int slot_tx, int do_meas);
|
void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx, int frame_tx, int slot_tx, int do_meas);
|
||||||
int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx);
|
int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx);
|
||||||
|
|||||||
@@ -629,16 +629,17 @@ int main(int argc, char **argv)
|
|||||||
12);
|
12);
|
||||||
|
|
||||||
// set UL mask for pucch allocation
|
// set UL mask for pucch allocation
|
||||||
|
uint32_t rb_mask_ul[14][9] = {0};
|
||||||
for (int s=0;s<frame_parms->symbols_per_slot;s++){
|
for (int s=0;s<frame_parms->symbols_per_slot;s++){
|
||||||
if (s>=startingSymbolIndex && s<(startingSymbolIndex+nrofSymbols))
|
if (s>=startingSymbolIndex && s<(startingSymbolIndex+nrofSymbols))
|
||||||
for (int rb=0; rb<N_RB; rb++) {
|
for (int rb=0; rb<N_RB; rb++) {
|
||||||
int rb2 = rb+startingPRB;
|
int rb2 = rb+startingPRB;
|
||||||
gNB->rb_mask_ul[s][rb2>>5] |= (1<<(rb2&31));
|
rb_mask_ul[s][rb2 >> 5] |= (1 << (rb2 & 31));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// noise measurement (all PRBs)
|
// noise measurement (all PRBs)
|
||||||
gNB_I0_measurements(gNB, nr_slot_tx, 0, gNB->frame_parms.symbols_per_slot);
|
gNB_I0_measurements(gNB, nr_slot_tx, 0, gNB->frame_parms.symbols_per_slot, rb_mask_ul);
|
||||||
|
|
||||||
if (n_trials==1) printf("noise rxlev %d (%d dB), rxlev pucch %d dB sigma2 %f dB, SNR %f, TX %f, I0 (pucch) %d, I0 (avg) %d\n",rxlev,dB_fixed(rxlev),dB_fixed(rxlev_pucch),sigma2_dB,SNR,10*log10((double)txlev*UE->frame_parms.ofdm_symbol_size/12),gNB->measurements.n0_subband_power_tot_dB[startingPRB],gNB->measurements.n0_subband_power_avg_dB);
|
if (n_trials==1) printf("noise rxlev %d (%d dB), rxlev pucch %d dB sigma2 %f dB, SNR %f, TX %f, I0 (pucch) %d, I0 (avg) %d\n",rxlev,dB_fixed(rxlev),dB_fixed(rxlev_pucch),sigma2_dB,SNR,10*log10((double)txlev*UE->frame_parms.ofdm_symbol_size/12),gNB->measurements.n0_subband_power_tot_dB[startingPRB],gNB->measurements.n0_subband_power_avg_dB);
|
||||||
if(format==0){
|
if(format==0){
|
||||||
|
|||||||
Reference in New Issue
Block a user