Merge remote-tracking branch 'origin/NR_gNB_PHY_cleanup' into integration_2022_wk48
This commit is contained in:
@@ -19,7 +19,6 @@
|
||||
# define NUMBER_OF_NR_SCH_STATS_MAX 16
|
||||
|
||||
# define NUMBER_OF_NR_PUCCH_MAX 16
|
||||
# define NUMBER_OF_NR_SR_MAX 16
|
||||
# define NUMBER_OF_NR_PDCCH_MAX 16
|
||||
|
||||
#define MAX_MANAGED_ENB_PER_MOBILE 2
|
||||
|
||||
@@ -1212,7 +1212,6 @@ int pnf_phy_dl_tti_req(gNB_L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7,
|
||||
else if (dl_tti_pdu_list[i].PDUType == NFAPI_NR_DL_TTI_SSB_PDU_TYPE) {
|
||||
//NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() PDU:%d BCH: pdu_index:%u pdu_length:%d sdu_length:%d BCH_SDU:%x,%x,%x\n", __FUNCTION__, i, pdu_index, bch_pdu->bch_pdu_rel8.length, tx_request_pdu[sfn][sf][pdu_index]->segments[0].segment_length, sdu[0], sdu[1], sdu[2]);
|
||||
handle_nr_nfapi_ssb_pdu(msgTx, sfn, slot, &dl_tti_pdu_list[i]);
|
||||
gNB->pbch_configured=1;
|
||||
}
|
||||
else if (dl_tti_pdu_list[i].PDUType == NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE) {
|
||||
nfapi_nr_dl_tti_pdsch_pdu *pdsch_pdu = &dl_tti_pdu_list[i].pdsch_pdu;
|
||||
|
||||
@@ -30,10 +30,6 @@
|
||||
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
|
||||
#include "PHY/NR_TRANSPORT/nr_transport_common_proto.h"
|
||||
#include "openair1/PHY/MODULATION/nr_modulation.h"
|
||||
/*#include "RadioResourceConfigCommonSIB.h"
|
||||
#include "RadioResourceConfigDedicated.h"
|
||||
#include "TDD-Config.h"
|
||||
#include "MBSFN-SubframeConfigList.h"*/
|
||||
#include "openair1/PHY/defs_RU.h"
|
||||
#include "openair1/PHY/CODING/nrLDPC_extern.h"
|
||||
#include "assertions.h"
|
||||
@@ -634,8 +630,6 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
|
||||
/// Transport init necessary for NR synchro
|
||||
init_nr_transport(gNB);
|
||||
|
||||
gNB->first_run_I0_measurements = 1;
|
||||
|
||||
common_vars->txdataF = (int32_t **)malloc16(Ptx*sizeof(int32_t*));
|
||||
common_vars->rxdataF = (int32_t **)malloc16(Prx*sizeof(int32_t*));
|
||||
/* Do NOT allocate per-antenna txdataF/rxdataF: the gNB gets a pointer to the
|
||||
@@ -905,7 +899,6 @@ void nr_phy_config_request_sim(PHY_VARS_gNB *gNB,
|
||||
gNB_config->tdd_table.tdd_period.value = 0;
|
||||
//gNB_config->subframe_config.dl_cyclic_prefix_type.value = (fp->Ncp == NORMAL) ? NFAPI_CP_NORMAL : NFAPI_CP_EXTENDED;
|
||||
|
||||
gNB->mac_enabled = 1;
|
||||
if (mu==0) {
|
||||
fp->dl_CarrierFreq = 2600000000;//from_nrarfcn(gNB_config->nfapi_config.rf_bands.rf_band[0],gNB_config->nfapi_config.nrarfcn.value);
|
||||
fp->ul_CarrierFreq = 2600000000;//fp->dl_CarrierFreq - (get_uldl_offset(gNB_config->nfapi_config.rf_bands.rf_band[0])*100000);
|
||||
@@ -944,7 +937,6 @@ void nr_phy_config_request(NR_PHY_Config_t *phy_config) {
|
||||
nfapi_nr_config_request_scf_t *gNB_config = &RC.gNB[Mod_id]->gNB_config;
|
||||
|
||||
memcpy((void*)gNB_config,phy_config->cfg,sizeof(*phy_config->cfg));
|
||||
RC.gNB[Mod_id]->mac_enabled = 1;
|
||||
|
||||
uint64_t dl_bw_khz = (12*gNB_config->carrier_config.dl_grid_size[gNB_config->ssb_config.scs_common.value].value)*(15<<gNB_config->ssb_config.scs_common.value);
|
||||
fp->dl_CarrierFreq = ((dl_bw_khz>>1) + gNB_config->carrier_config.dl_frequency.value)*1000 ;
|
||||
@@ -1000,7 +992,7 @@ void init_DLSCH_struct(PHY_VARS_gNB *gNB, processingData_L1tx_t *msg) {
|
||||
for (int i=0; i<gNB->number_of_nr_dlsch_max; i++) {
|
||||
LOG_I(PHY,"Allocating Transport Channel Buffers for DLSCH %d/%d\n",i,gNB->number_of_nr_dlsch_max);
|
||||
for (int j=0; j<num_cw; j++) {
|
||||
msg->dlsch[i][j] = new_gNB_dlsch(fp,1,16,NSOFT,0,grid_size);
|
||||
msg->dlsch[i][j] = new_gNB_dlsch(fp, grid_size);
|
||||
AssertFatal(msg->dlsch[i][j]!=NULL,"Can't initialize dlsch %d \n", i);
|
||||
}
|
||||
}
|
||||
@@ -1021,8 +1013,6 @@ void init_nr_transport(PHY_VARS_gNB *gNB) {
|
||||
NR_DL_FRAME_PARMS *fp = &gNB->frame_parms;
|
||||
LOG_I(PHY, "Initialise nr transport\n");
|
||||
|
||||
memset(gNB->num_pdsch_rnti, 0, sizeof(uint16_t)*80);
|
||||
|
||||
for (int i=0; i<NUMBER_OF_NR_PUCCH_MAX; i++) {
|
||||
LOG_I(PHY,"Allocating Transport Channel Buffers for PUCCH %d/%d\n",i,NUMBER_OF_NR_PUCCH_MAX);
|
||||
gNB->pucch[i] = new_gNB_pucch();
|
||||
|
||||
@@ -544,7 +544,6 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx,
|
||||
}// port loop
|
||||
|
||||
stop_meas(&gNB->dlsch_precoding_stats);
|
||||
dlsch->slot_tx[slot]=0;
|
||||
|
||||
// TODO: handle precoding
|
||||
// this maps the layers onto antenna ports
|
||||
|
||||
@@ -80,10 +80,6 @@ void free_gNB_dlsch(NR_gNB_DLSCH_t **dlschptr,
|
||||
free(harq->c);
|
||||
free(harq->pdu);
|
||||
|
||||
for (int aa = 0; aa < 64; aa++)
|
||||
free(dlsch->calib_dl_ch_estimates[aa]);
|
||||
free(dlsch->calib_dl_ch_estimates);
|
||||
|
||||
int nb_codewords = NR_MAX_NB_LAYERS > 4 ? 2 : 1;
|
||||
for (int q=0; q<nb_codewords; q++)
|
||||
free(dlsch->mod_symbs[q]);
|
||||
@@ -103,10 +99,6 @@ void free_gNB_dlsch(NR_gNB_DLSCH_t **dlschptr,
|
||||
}
|
||||
|
||||
NR_gNB_DLSCH_t *new_gNB_dlsch(NR_DL_FRAME_PARMS *frame_parms,
|
||||
unsigned char Kmimo,
|
||||
unsigned char Mdlharq,
|
||||
uint32_t Nsoft,
|
||||
uint8_t abstraction_flag,
|
||||
uint16_t N_RB) {
|
||||
|
||||
int max_layers = (frame_parms->nb_antennas_tx<NR_MAX_NB_LAYERS) ? frame_parms->nb_antennas_tx : NR_MAX_NB_LAYERS;
|
||||
@@ -122,9 +114,6 @@ NR_gNB_DLSCH_t *new_gNB_dlsch(NR_DL_FRAME_PARMS *frame_parms,
|
||||
NR_gNB_DLSCH_t *dlsch = malloc16(sizeof(NR_gNB_DLSCH_t));
|
||||
AssertFatal(dlsch, "cannot allocate dlsch\n");
|
||||
bzero(dlsch,sizeof(NR_gNB_DLSCH_t));
|
||||
dlsch->Kmimo = Kmimo;
|
||||
dlsch->Mdlharq = Mdlharq;
|
||||
dlsch->Nsoft = Nsoft;
|
||||
|
||||
int txdataf_size = frame_parms->N_RB_DL*NR_SYMBOLS_PER_SLOT*NR_NB_SC_PER_RB*8; // max pdsch encoded length for each layer
|
||||
|
||||
@@ -149,17 +138,6 @@ NR_gNB_DLSCH_t *new_gNB_dlsch(NR_DL_FRAME_PARMS *frame_parms,
|
||||
for (int q=0; q<nb_codewords; q++)
|
||||
dlsch->mod_symbs[q] = (int32_t *)malloc16(txdataf_size*max_layers*sizeof(int32_t));
|
||||
|
||||
dlsch->calib_dl_ch_estimates = (int32_t **)malloc16(64*sizeof(int32_t *));
|
||||
|
||||
for (int aa=0; aa<64; aa++) {
|
||||
dlsch->calib_dl_ch_estimates[aa] = (int32_t *)malloc16(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t));
|
||||
}
|
||||
|
||||
for (int i=0; i<20; i++) {
|
||||
dlsch->harq_ids[0][i] = 0;
|
||||
dlsch->harq_ids[1][i] = 0;
|
||||
}
|
||||
|
||||
NR_DL_gNB_HARQ_t *harq = &dlsch->harq_process;
|
||||
bzero(harq, sizeof(NR_DL_gNB_HARQ_t));
|
||||
harq->b = malloc16(dlsch_bytes);
|
||||
@@ -190,13 +168,8 @@ NR_gNB_DLSCH_t *new_gNB_dlsch(NR_DL_FRAME_PARMS *frame_parms,
|
||||
|
||||
void clean_gNB_dlsch(NR_gNB_DLSCH_t *dlsch) {
|
||||
AssertFatal(dlsch!=NULL,"dlsch is null\n");
|
||||
unsigned char Mdlharq = dlsch->Mdlharq;
|
||||
dlsch->rnti = 0;
|
||||
dlsch->active = 0;
|
||||
for (int i=0; i<10; i++) {
|
||||
dlsch->harq_ids[0][i] = Mdlharq;
|
||||
dlsch->harq_ids[1][i] = Mdlharq;
|
||||
}
|
||||
}
|
||||
|
||||
void ldpc8blocks( void *p) {
|
||||
|
||||
@@ -108,10 +108,6 @@ int nr_generate_pbch(nfapi_nr_dl_tti_ssb_pdu *ssb_pdu,
|
||||
void nr_init_pbch_interleaver(uint8_t *interleaver);
|
||||
|
||||
NR_gNB_DLSCH_t *new_gNB_dlsch(NR_DL_FRAME_PARMS *frame_parms,
|
||||
unsigned char Kmimo,
|
||||
unsigned char Mdlharq,
|
||||
uint32_t Nsoft,
|
||||
uint8_t abstraction_flag,
|
||||
uint16_t N_RB);
|
||||
|
||||
void free_gNB_dlsch(NR_gNB_DLSCH_t **dlschptr, uint16_t N_RB, const NR_DL_FRAME_PARMS* frame_parms);
|
||||
|
||||
@@ -119,42 +119,24 @@ NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL)
|
||||
|
||||
void clean_gNB_ulsch(NR_gNB_ULSCH_t *ulsch)
|
||||
{
|
||||
unsigned char i, j;
|
||||
|
||||
|
||||
if (ulsch) {
|
||||
ulsch->harq_mask = 0;
|
||||
ulsch->bundling = 0;
|
||||
ulsch->beta_offset_cqi_times8 = 0;
|
||||
ulsch->beta_offset_ri_times8 = 0;
|
||||
ulsch->beta_offset_harqack_times8 = 0;
|
||||
ulsch->Msg3_active = 0;
|
||||
ulsch->Msg3_flag = 0;
|
||||
ulsch->Msg3_subframe = 0;
|
||||
ulsch->Msg3_frame = 0;
|
||||
ulsch->rnti = 0;
|
||||
ulsch->rnti_type = 0;
|
||||
ulsch->cyclicShift = 0;
|
||||
ulsch->cooperation_flag = 0;
|
||||
ulsch->max_ldpc_iterations = 0;
|
||||
ulsch->last_iteration_cnt = 0;
|
||||
|
||||
for (i=0; i<NR_MAX_ULSCH_HARQ_PROCESSES; i++) {
|
||||
for (int i=0; i<NR_MAX_ULSCH_HARQ_PROCESSES; i++) {
|
||||
if (ulsch->harq_processes[i]){
|
||||
/// Nfapi ULSCH PDU
|
||||
//nfapi_nr_ul_config_ulsch_pdu ulsch_pdu;
|
||||
ulsch->harq_processes[i]->frame=0;
|
||||
ulsch->harq_processes[i]->slot=0;
|
||||
ulsch->harq_processes[i]->round=0;
|
||||
ulsch->harq_processes[i]->TPC=0;
|
||||
ulsch->harq_processes[i]->mimo_mode=0;
|
||||
ulsch->harq_processes[i]->dci_alloc=0;
|
||||
ulsch->harq_processes[i]->rar_alloc=0;
|
||||
ulsch->harq_processes[i]->status=NR_SCH_IDLE;
|
||||
ulsch->harq_processes[i]->subframe_scheduling_flag=0;
|
||||
ulsch->harq_processes[i]->previous_first_rb=0;
|
||||
ulsch->harq_processes[i]->handled=0;
|
||||
ulsch->harq_processes[i]->delta_TF=0;
|
||||
|
||||
ulsch->harq_processes[i]->TBS=0;
|
||||
/// Pointer to the payload (38.212 V15.4.0 section 5.1)
|
||||
//uint8_t *b;
|
||||
@@ -170,37 +152,6 @@ void clean_gNB_ulsch(NR_gNB_ULSCH_t *ulsch)
|
||||
/// code blocks after bit selection in rate matching for LDPC code (38.212 V15.4.0 section 5.4.2.1)
|
||||
//int16_t e[MAX_NUM_NR_ULSCH_SEGMENTS][3*8448];
|
||||
ulsch->harq_processes[i]->E=0;
|
||||
|
||||
|
||||
ulsch->harq_processes[i]->n_DMRS=0;
|
||||
ulsch->harq_processes[i]->n_DMRS2=0;
|
||||
ulsch->harq_processes[i]->previous_n_DMRS=0;
|
||||
|
||||
|
||||
ulsch->harq_processes[i]->cqi_crc_status=0;
|
||||
for (j=0;j<MAX_CQI_BYTES;j++) ulsch->harq_processes[i]->o[j]=0;
|
||||
ulsch->harq_processes[i]->uci_format=0;
|
||||
ulsch->harq_processes[i]->Or1=0;
|
||||
ulsch->harq_processes[i]->Or2=0;
|
||||
ulsch->harq_processes[i]->o_RI[0]=0; ulsch->harq_processes[i]->o_RI[1]=0;
|
||||
ulsch->harq_processes[i]->O_RI=0;
|
||||
ulsch->harq_processes[i]->o_ACK[0]=0; ulsch->harq_processes[i]->o_ACK[1]=0;
|
||||
ulsch->harq_processes[i]->o_ACK[2]=0; ulsch->harq_processes[i]->o_ACK[3]=0;
|
||||
ulsch->harq_processes[i]->O_ACK=0;
|
||||
ulsch->harq_processes[i]->V_UL_DAI=0;
|
||||
/// "q" sequences for CQI/PMI (for definition see 36-212 V8.6 2009-03, p.27)
|
||||
//int8_t q[MAX_CQI_PAYLOAD];
|
||||
ulsch->harq_processes[i]->o_RCC=0;
|
||||
/// coded and interleaved CQI bits
|
||||
//int8_t o_w[(MAX_CQI_BITS+8)*3];
|
||||
/// coded CQI bits
|
||||
//int8_t o_d[96+((MAX_CQI_BITS+8)*3)];
|
||||
for (j=0;j<MAX_ACK_PAYLOAD;j++) ulsch->harq_processes[i]->q_ACK[j]=0;
|
||||
for (j=0;j<MAX_RI_PAYLOAD;j++) ulsch->harq_processes[i]->q_RI[j]=0;
|
||||
/// Temporary h sequence to flag PUSCH_x/PUSCH_y symbols which are not scrambled
|
||||
//uint8_t h[MAX_NUM_CHANNEL_BITS];
|
||||
/// soft bits for each received segment ("w"-sequence)(for definition see 36-212 V8.6 2009-03, p.15)
|
||||
//int16_t w[MAX_NUM_NR_ULSCH_SEGMENTS][3*(6144+64)];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -415,7 +415,7 @@ void nr_ulsch_scale_channel(int **ul_ch_estimates_ext,
|
||||
|
||||
// Determine scaling amplitude based the symbol
|
||||
|
||||
ch_amp = 1024*8; //((pilots) ? (ulsch_gNB->sqrt_rho_b) : (ulsch_gNB->sqrt_rho_a));
|
||||
ch_amp = 1024*8;
|
||||
|
||||
LOG_D(PHY,"Scaling PUSCH Chest in OFDM symbol %d by %d, pilots %d nb_rb %d NCP %d symbol %d\n", symbol, ch_amp, is_dmrs_symbol, nb_rb, frame_parms->Ncp, symbol);
|
||||
// printf("Scaling PUSCH Chest in OFDM symbol %d by %d\n",symbol_mod,ch_amp);
|
||||
|
||||
@@ -75,13 +75,15 @@ int nr_find_pucch(uint16_t rnti,
|
||||
AssertFatal(gNB!=NULL,"gNB is null\n");
|
||||
int index = -1;
|
||||
|
||||
for (int i=0; i<NUMBER_OF_NR_PUCCH_MAX; i++) {
|
||||
AssertFatal(gNB->pucch[i]!=NULL,"gNB->pucch[%d] is null\n",i);
|
||||
if ((gNB->pucch[i]->active >0) &&
|
||||
(gNB->pucch[i]->pucch_pdu.rnti==rnti) &&
|
||||
(gNB->pucch[i]->frame==frame) &&
|
||||
(gNB->pucch[i]->slot==slot)) return(i);
|
||||
else if ((gNB->pucch[i]->active == 0) && (index==-1)) index=i;
|
||||
for (int i = 0; i < NUMBER_OF_NR_PUCCH_MAX; i++) {
|
||||
AssertFatal(gNB->pucch[i] != NULL,"gNB->pucch[%d] is null\n",i);
|
||||
if ((gNB->pucch[i]->active > 0) &&
|
||||
(gNB->pucch[i]->pucch_pdu.rnti == rnti) &&
|
||||
(gNB->pucch[i]->frame == frame) &&
|
||||
(gNB->pucch[i]->slot == slot))
|
||||
return(i);
|
||||
else if ((gNB->pucch[i]->active == 0) && (index == -1))
|
||||
index=i;
|
||||
}
|
||||
|
||||
if (index==-1)
|
||||
@@ -97,15 +99,16 @@ void nr_fill_pucch(PHY_VARS_gNB *gNB,
|
||||
if (NFAPI_MODE == NFAPI_MODE_PNF)
|
||||
gNB->pucch[0]->active = 0; //check if ture in monolithic mode
|
||||
int id = nr_find_pucch(pucch_pdu->rnti,frame,slot,gNB);
|
||||
AssertFatal( (id>=0) && (id<NUMBER_OF_NR_PUCCH_MAX),
|
||||
AssertFatal((id >= 0) && (id < NUMBER_OF_NR_PUCCH_MAX),
|
||||
"invalid id found for pucch !!! rnti %04x id %d\n",pucch_pdu->rnti,id);
|
||||
|
||||
NR_gNB_PUCCH_t *pucch = gNB->pucch[id];
|
||||
pucch->frame = frame;
|
||||
pucch->slot = slot;
|
||||
pucch->active = 1;
|
||||
if (pucch->pucch_pdu.format_type > 0) LOG_D(PHY,"Programming PUCCH[%d] for %d.%d, format %d, nb_harq %d, nb_sr %d, nb_csi %d\n",id,
|
||||
pucch->frame,pucch->slot,pucch->pucch_pdu.format_type,pucch->pucch_pdu.bit_len_harq,pucch->pucch_pdu.sr_flag,pucch->pucch_pdu.bit_len_csi_part1);
|
||||
if (pucch->pucch_pdu.format_type > 0)
|
||||
LOG_D(PHY,"Programming PUCCH[%d] for %d.%d, format %d, nb_harq %d, nb_sr %d, nb_csi %d\n",id,
|
||||
pucch->frame,pucch->slot,pucch->pucch_pdu.format_type,pucch->pucch_pdu.bit_len_harq,pucch->pucch_pdu.sr_flag,pucch->pucch_pdu.bit_len_csi_part1);
|
||||
memcpy((void*)&pucch->pucch_pdu, (void*)pucch_pdu, sizeof(nfapi_nr_pucch_pdu_t));
|
||||
}
|
||||
|
||||
|
||||
+2
-154
@@ -95,8 +95,6 @@ typedef struct {
|
||||
uint32_t frame;
|
||||
/// Subframe where current HARQ round was sent
|
||||
uint32_t subframe;
|
||||
/// MIMO mode for this DLSCH
|
||||
MIMO_mode_t mimo_mode;
|
||||
/// Interleaver outputs
|
||||
uint8_t *f;
|
||||
/// LDPC lifting size
|
||||
@@ -165,38 +163,14 @@ typedef struct {
|
||||
int32_t **mod_symbs;
|
||||
/// beamforming weights for UE-spec transmission (antenna ports 5 or 7..14), for each codeword, maximum 4 layers?
|
||||
int32_t ***ue_spec_bf_weights;
|
||||
/// dl channel estimates (estimated from ul channel estimates)
|
||||
int32_t **calib_dl_ch_estimates;
|
||||
/// Allocated RNTI (0 means DLSCH_t is not currently used)
|
||||
uint16_t rnti;
|
||||
/// Active flag for baseband transmitter processing
|
||||
uint8_t active;
|
||||
/// HARQ process mask, indicates which processes are currently active
|
||||
uint16_t harq_mask;
|
||||
/// Indicator of TX activation per subframe. Used during PUCCH detection for ACK/NAK.
|
||||
uint8_t slot_tx[80];
|
||||
/// First CCE of last PDSCH scheduling per subframe. Again used during PUCCH detection for ACK/NAK.
|
||||
uint8_t nCCE[10];
|
||||
/// Process ID's per subframe. Used to associate received ACKs on PUSCH/PUCCH to DLSCH harq process ids
|
||||
uint8_t harq_ids[2][80];
|
||||
/// Window size (in outgoing transport blocks) for fine-grain rate adaptation
|
||||
uint8_t ra_window_size;
|
||||
/// First-round error threshold for fine-grain rate adaptation
|
||||
uint8_t error_threshold;
|
||||
/// Number of soft channel bits
|
||||
uint32_t G;
|
||||
/// Codebook index for this dlsch (0,1,2,3)
|
||||
uint8_t codebook_index;
|
||||
/// Maximum number of HARQ processes
|
||||
uint8_t Mdlharq;
|
||||
/// MIMO transmission mode indicator for this sub-frame
|
||||
uint8_t Kmimo;
|
||||
/// Nsoft parameter related to UE Category
|
||||
uint32_t Nsoft;
|
||||
/// amplitude of PDSCH (compared to RS) in symbols without pilots
|
||||
int16_t sqrt_rho_a;
|
||||
/// amplitude of PDSCH (compared to RS) in symbols containing pilots
|
||||
int16_t sqrt_rho_b;
|
||||
} NR_gNB_DLSCH_t;
|
||||
|
||||
typedef struct {
|
||||
@@ -240,35 +214,11 @@ typedef struct {
|
||||
/// Index of current HARQ round for this DLSCH
|
||||
uint8_t round;
|
||||
bool new_rx;
|
||||
/// Last TPC command
|
||||
uint8_t TPC;
|
||||
/// MIMO mode for this DLSCH
|
||||
MIMO_mode_t mimo_mode;
|
||||
/// Flag indicating that this ULSCH has been allocated by a DCI (otherwise it is a retransmission based on PHICH NAK)
|
||||
uint8_t dci_alloc;
|
||||
/// Flag indicating that this ULSCH has been allocated by a RAR (otherwise it is a retransmission based on PHICH NAK or DCI)
|
||||
uint8_t rar_alloc;
|
||||
/// Status Flag indicating for this ULSCH (idle,active,disabled)
|
||||
NR_SCH_status_t status;
|
||||
/// Subframe scheduling indicator (i.e. Transmission opportunity indicator)
|
||||
uint8_t subframe_scheduling_flag;
|
||||
/// Subframe cba scheduling indicator (i.e. CBA Transmission opportunity indicator)
|
||||
uint8_t subframe_cba_scheduling_flag;
|
||||
/// PHICH active flag
|
||||
uint8_t phich_active;
|
||||
/// PHICH ACK
|
||||
uint8_t phich_ACK;
|
||||
/// First Allocated RB - previous scheduling. This is needed for PHICH generation which is done after a new scheduling
|
||||
uint16_t previous_first_rb;
|
||||
/// Flag to indicate that the UL configuration has been handled. Used to remove a stale ULSCH when frame wraps around
|
||||
uint8_t handled;
|
||||
/// Flag to indicate that this ULSCH is for calibration information sent from UE (i.e. no MAC SDU to pass up)
|
||||
// int calibration_flag;
|
||||
/// delta_TF for power control
|
||||
int32_t delta_TF;
|
||||
|
||||
|
||||
/////////////////////// ulsch decoding ///////////////////////
|
||||
/////////////////////// ulsch decoding ///////////////////////
|
||||
/// Transport block size (This is A from 38.212 V15.4.0 section 5.1)
|
||||
uint32_t TBS;
|
||||
/// Pointer to the payload (38.212 V15.4.0 section 5.1)
|
||||
@@ -291,56 +241,6 @@ typedef struct {
|
||||
uint32_t E;
|
||||
/// Number of segments processed so far
|
||||
uint32_t processedSegments;
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/////////////////////////// DMRS /////////////////////////////
|
||||
/// n_DMRS for cyclic shift of DMRS (36.213 Table 9.1.2-2)
|
||||
uint8_t n_DMRS;
|
||||
/// n_DMRS 2 for cyclic shift of DMRS (36.211 Table 5.5.1.1.-1)
|
||||
uint8_t n_DMRS2;
|
||||
/// n_DMRS for cyclic shift of DMRS (36.213 Table 9.1.2-2) - previous scheduling
|
||||
/// This is needed for PHICH generation which
|
||||
/// is done after a new scheduling
|
||||
uint8_t previous_n_DMRS;
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
///////////////////// UCI multiplexing ///////////////////////
|
||||
/// CQI CRC status
|
||||
uint8_t cqi_crc_status;
|
||||
/// Pointer to CQI data
|
||||
uint8_t o[MAX_CQI_BYTES];
|
||||
/// Format of CQI data
|
||||
UCI_format_t uci_format;
|
||||
/// Length of CQI data under RI=1 assumption(bits)
|
||||
uint8_t Or1;
|
||||
/// Length of CQI data under RI=2 assumption(bits)
|
||||
uint8_t Or2;
|
||||
/// Rank information
|
||||
uint8_t o_RI[2];
|
||||
/// Length of rank information (bits)
|
||||
uint8_t O_RI;
|
||||
/// Pointer to ACK
|
||||
uint8_t o_ACK[4];
|
||||
/// Length of ACK information (bits)
|
||||
uint8_t O_ACK;
|
||||
/// The value of DAI in DCI format 0
|
||||
uint8_t V_UL_DAI;
|
||||
/// "q" sequences for CQI/PMI (for definition see 36-212 V8.6 2009-03, p.27)
|
||||
int8_t q[MAX_CQI_PAYLOAD];
|
||||
/// number of coded CQI bits after interleaving
|
||||
uint8_t o_RCC;
|
||||
/// coded and interleaved CQI bits
|
||||
int8_t o_w[(MAX_CQI_BITS+8)*3];
|
||||
/// coded CQI bits
|
||||
int8_t o_d[96+((MAX_CQI_BITS+8)*3)];
|
||||
/// coded ACK bits
|
||||
int16_t q_ACK[MAX_ACK_PAYLOAD];
|
||||
/// coded RI bits
|
||||
int16_t q_RI[MAX_RI_PAYLOAD];
|
||||
/// Temporary h sequence to flag PUSCH_x/PUSCH_y symbols which are not scrambled
|
||||
uint8_t h[MAX_NUM_CHANNEL_BITS];
|
||||
/// Last index of LLR buffer that contains information.
|
||||
/// Used for computing LDPC decoder R
|
||||
int llrLen;
|
||||
@@ -353,30 +253,10 @@ typedef struct {
|
||||
NR_UL_gNB_HARQ_t *harq_processes[NR_MAX_ULSCH_HARQ_PROCESSES];
|
||||
/// HARQ process mask, indicates which processes are currently active
|
||||
uint16_t harq_mask;
|
||||
/// ACK/NAK Bundling flag
|
||||
uint8_t bundling;
|
||||
/// beta_offset_cqi times 8
|
||||
uint16_t beta_offset_cqi_times8;
|
||||
/// beta_offset_ri times 8
|
||||
uint16_t beta_offset_ri_times8;
|
||||
/// beta_offset_harqack times 8
|
||||
uint16_t beta_offset_harqack_times8;
|
||||
/// Flag to indicate that gNB awaits UE Msg3
|
||||
uint8_t Msg3_active;
|
||||
/// Flag to indicate that gNB should decode UE Msg3
|
||||
uint8_t Msg3_flag;
|
||||
/// Subframe for Msg3
|
||||
uint8_t Msg3_subframe;
|
||||
/// Frame for Msg3
|
||||
uint32_t Msg3_frame;
|
||||
/// Allocated RNTI for this ULSCH
|
||||
uint16_t rnti;
|
||||
/// RNTI type
|
||||
uint8_t rnti_type;
|
||||
/// cyclic shift for DM RS
|
||||
uint8_t cyclicShift;
|
||||
/// for cooperative communication
|
||||
uint8_t cooperation_flag;
|
||||
/// Maximum number of LDPC iterations
|
||||
uint8_t max_ldpc_iterations;
|
||||
/// number of iterations used in last LDPC decoding
|
||||
@@ -734,13 +614,9 @@ typedef struct PHY_VARS_gNB_s {
|
||||
/// NFAPI PRACH information
|
||||
nfapi_nr_prach_indication_preamble_t preamble_list[MAX_NUM_NR_RX_PRACH_PREAMBLES];
|
||||
|
||||
//Sched_Rsp_t Sched_INFO;
|
||||
nfapi_nr_ul_tti_request_t UL_tti_req;
|
||||
nfapi_nr_uci_indication_t uci_indication;
|
||||
|
||||
// nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu;
|
||||
// nfapi_nr_ul_dci_request_pdus_t *ul_dci_pdu;
|
||||
uint16_t num_pdsch_rnti[80];
|
||||
NR_gNB_PBCH pbch;
|
||||
NR_gNB_COMMON common_vars;
|
||||
NR_gNB_PRACH prach_vars;
|
||||
@@ -752,8 +628,6 @@ typedef struct PHY_VARS_gNB_s {
|
||||
NR_gNB_UL_PDCCH_t ul_pdcch_pdu[NUMBER_OF_NR_PDCCH_MAX];
|
||||
NR_gNB_DLSCH_t *dlsch[NUMBER_OF_NR_DLSCH_MAX][2]; // Nusers times two spatial streams
|
||||
NR_gNB_ULSCH_t *ulsch[NUMBER_OF_NR_ULSCH_MAX]; // [Nusers times]
|
||||
NR_gNB_DLSCH_t *dlsch_SI,*dlsch_ra,*dlsch_p;
|
||||
NR_gNB_DLSCH_t *dlsch_PCH;
|
||||
/// statistics for DLSCH measurement collection
|
||||
NR_gNB_SCH_STATS_t dlsch_stats[NUMBER_OF_NR_SCH_STATS_MAX];
|
||||
/// statistics for ULSCH measurement collection
|
||||
@@ -767,9 +641,6 @@ typedef struct PHY_VARS_gNB_s {
|
||||
/// CSI variables
|
||||
nr_csi_info_t *nr_csi_info;
|
||||
|
||||
uint8_t pbch_configured;
|
||||
char gNB_generate_rar;
|
||||
|
||||
// PUCCH0 Look-up table for cyclic-shifts
|
||||
NR_gNB_PUCCH0_LUT_t pucch0_lut;
|
||||
|
||||
@@ -801,43 +672,20 @@ typedef struct PHY_VARS_gNB_s {
|
||||
/// PRS sequence
|
||||
uint32_t ****nr_gold_prs;
|
||||
|
||||
/// Indicator set to 0 after first SR
|
||||
uint8_t first_sr[NUMBER_OF_NR_SR_MAX];
|
||||
|
||||
/// PRACH root sequence
|
||||
uint32_t X_u[64][839];
|
||||
|
||||
uint32_t max_peak_val;
|
||||
|
||||
/// OFDM symbol offset divisor for UL
|
||||
uint32_t ofdm_offset_divisor;
|
||||
/// \brief sinr for all subcarriers of the current link (used only for abstraction).
|
||||
/// first index: ? [0..N_RB_DL*12[
|
||||
double *sinr_dB;
|
||||
|
||||
/// N0 (used for abstraction)
|
||||
double N0;
|
||||
|
||||
unsigned char first_run_I0_measurements;
|
||||
int ldpc_offload_flag;
|
||||
|
||||
unsigned char is_secondary_gNB; // primary by default
|
||||
unsigned char is_init_sync; /// Flag to tell if initial synchronization is performed. This affects how often the secondary eNB will listen to the PSS from the primary system.
|
||||
unsigned char has_valid_precoder; /// Flag to tell if secondary eNB has channel estimates to create NULL-beams from, and this B/F vector is created.
|
||||
unsigned char PgNB_id; /// id of Primary eNB
|
||||
|
||||
/// hold the precoder for NULL beam to the primary user
|
||||
int **dl_precoder_SgNB[3];
|
||||
char log2_maxp; /// holds the maximum channel/precoder coefficient
|
||||
|
||||
int max_ldpc_iterations;
|
||||
/// indicate the channel estimation technique in time domain
|
||||
int chest_time;
|
||||
/// indicate the channel estimation technique in freq domain
|
||||
int chest_freq;
|
||||
|
||||
/// if ==0 enables phy only test mode
|
||||
int mac_enabled;
|
||||
/// counter to average prach energh over first 100 prach opportunities
|
||||
int prach_energy_counter;
|
||||
|
||||
@@ -909,7 +757,7 @@ typedef struct PHY_VARS_gNB_s {
|
||||
int nbDecode;
|
||||
int number_of_nr_dlsch_max;
|
||||
int number_of_nr_ulsch_max;
|
||||
void * scopeData;
|
||||
void *scopeData;
|
||||
/// structure for analyzing high-level RT measurements
|
||||
rt_L1_profiling_t rt_L1_profiling;
|
||||
} PHY_VARS_gNB;
|
||||
|
||||
@@ -1003,7 +1003,6 @@ int main(int argc, char **argv)
|
||||
|
||||
// generate signal
|
||||
AssertFatal(input_fd==NULL,"Not ready for input signal file\n");
|
||||
gNB->pbch_configured = 1;
|
||||
|
||||
//Configure UE
|
||||
rrc.carrier.MIB = (uint8_t*) malloc(4);
|
||||
|
||||
@@ -137,7 +137,6 @@ void nr_phy_config_request_sim_pbchsim(PHY_VARS_gNB *gNB,
|
||||
gNB_config->tdd_table.tdd_period.value = 0;
|
||||
//gNB_config->subframe_config.dl_cyclic_prefix_type.value = (fp->Ncp == NORMAL) ? NFAPI_CP_NORMAL : NFAPI_CP_EXTENDED;
|
||||
|
||||
gNB->mac_enabled = 1;
|
||||
fp->dl_CarrierFreq = 3600000000;//from_nrarfcn(gNB_config->nfapi_config.rf_bands.rf_band[0],gNB_config->nfapi_config.nrarfcn.value);
|
||||
fp->ul_CarrierFreq = 3600000000;//fp->dl_CarrierFreq - (get_uldl_offset(gNB_config->nfapi_config.rf_bands.rf_band[0])*100000);
|
||||
if (mu>2) fp->nr_band = 257;
|
||||
|
||||
Reference in New Issue
Block a user