Changes in prs config parsing function, added help string
This commit is contained in:
+54
-56
@@ -34,7 +34,7 @@
|
||||
#include "LAYER2/nr_pdcp/nr_pdcp_entity.h"
|
||||
#include "SCHED_NR_UE/pucch_uci_ue_nr.h"
|
||||
#include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h"
|
||||
#include "openair2/GNB_APP/prs_nr_paramdef.h"
|
||||
#include "openair2/COMMON/prs_nr_paramdef.h"
|
||||
#include "PHY/NR_REFSIG/refsig_defs_ue.h"
|
||||
|
||||
/*
|
||||
@@ -156,7 +156,9 @@ void RCconfig_nrUE_prs(void *cfg)
|
||||
{
|
||||
int j = 0, k = 0, gNB_id = 0;
|
||||
char aprefix[MAX_OPTNAME_SIZE*2 + 8];
|
||||
PHY_VARS_NR_UE *ue = (PHY_VARS_NR_UE *)cfg;
|
||||
char str[7][100] = {'\0'}; int16_t n[7] = {0};
|
||||
PHY_VARS_NR_UE *ue = (PHY_VARS_NR_UE *)cfg;
|
||||
prs_config_t *prs_config = NULL;
|
||||
|
||||
paramlist_def_t gParamList = {CONFIG_STRING_PRS_LIST,NULL,0};
|
||||
paramdef_t gParams[] = PRS_GLOBAL_PARAMS_DESC;
|
||||
@@ -167,7 +169,7 @@ void RCconfig_nrUE_prs(void *cfg)
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_I(PHY,"%s configuration NOT found..!! Skipping configuring UE for the PRS reception\n", CONFIG_STRING_PRS_CONFIG);
|
||||
LOG_E(PHY,"%s configuration NOT found..!! Skipped configuring UE for the PRS reception\n", CONFIG_STRING_PRS_CONFIG);
|
||||
}
|
||||
|
||||
paramlist_def_t PRS_ParamList = {{0},NULL,0};
|
||||
@@ -184,77 +186,73 @@ void RCconfig_nrUE_prs(void *cfg)
|
||||
gNB_id = *(PRS_ParamList.paramarray[j][PRS_GNB_ID].uptr);
|
||||
if(gNB_id != i) gNB_id = i; // force gNB_id to avoid mismatch
|
||||
|
||||
memset(n,0,sizeof(n));
|
||||
ue->prs_vars[gNB_id]->NumPRSResources = *(PRS_ParamList.paramarray[j][NUM_PRS_RESOURCES].uptr);
|
||||
for (k = 0; k < ue->prs_vars[gNB_id]->NumPRSResources; k++)
|
||||
{
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceSetPeriod[0] = PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD_LIST].uptr[0];
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceSetPeriod[1] = PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD_LIST].uptr[1];
|
||||
prs_config = &ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg;
|
||||
prs_config->PRSResourceSetPeriod[0] = PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD_LIST].uptr[0];
|
||||
prs_config->PRSResourceSetPeriod[1] = PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD_LIST].uptr[1];
|
||||
// per PRS resources parameters
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.SymbolStart = PRS_ParamList.paramarray[j][PRS_SYMBOL_START_LIST].uptr[k];
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.NumPRSSymbols = PRS_ParamList.paramarray[j][PRS_NUM_SYMBOLS_LIST].uptr[k];
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.REOffset = PRS_ParamList.paramarray[j][PRS_RE_OFFSET_LIST].uptr[k];
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.NPRSID = PRS_ParamList.paramarray[j][PRS_ID_LIST].uptr[k];
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceOffset = PRS_ParamList.paramarray[j][PRS_RESOURCE_OFFSET_LIST].uptr[k];
|
||||
prs_config->SymbolStart = PRS_ParamList.paramarray[j][PRS_SYMBOL_START_LIST].uptr[k];
|
||||
prs_config->NumPRSSymbols = PRS_ParamList.paramarray[j][PRS_NUM_SYMBOLS_LIST].uptr[k];
|
||||
prs_config->REOffset = PRS_ParamList.paramarray[j][PRS_RE_OFFSET_LIST].uptr[k];
|
||||
prs_config->NPRSID = PRS_ParamList.paramarray[j][PRS_ID_LIST].uptr[k];
|
||||
prs_config->PRSResourceOffset = PRS_ParamList.paramarray[j][PRS_RESOURCE_OFFSET_LIST].uptr[k];
|
||||
// Common parameters to all PRS resources
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.NumRB = *(PRS_ParamList.paramarray[j][PRS_NUM_RB].uptr);
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.RBOffset = *(PRS_ParamList.paramarray[j][PRS_RB_OFFSET].uptr);
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.CombSize = *(PRS_ParamList.paramarray[j][PRS_COMB_SIZE].uptr);
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceRepetition = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_REPETITION].uptr);
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceTimeGap = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_TIME_GAP].uptr);
|
||||
prs_config->NumRB = *(PRS_ParamList.paramarray[j][PRS_NUM_RB].uptr);
|
||||
prs_config->RBOffset = *(PRS_ParamList.paramarray[j][PRS_RB_OFFSET].uptr);
|
||||
prs_config->CombSize = *(PRS_ParamList.paramarray[j][PRS_COMB_SIZE].uptr);
|
||||
prs_config->PRSResourceRepetition = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_REPETITION].uptr);
|
||||
prs_config->PRSResourceTimeGap = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_TIME_GAP].uptr);
|
||||
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.MutingBitRepetition = *(PRS_ParamList.paramarray[j][PRS_MUTING_BIT_REPETITION].uptr);
|
||||
prs_config->MutingBitRepetition = *(PRS_ParamList.paramarray[j][PRS_MUTING_BIT_REPETITION].uptr);
|
||||
for (int l = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].numelt; l++)
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.MutingPattern1[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].uptr[l];
|
||||
{
|
||||
prs_config->MutingPattern1[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].uptr[l];
|
||||
if (k == 0) // print only for 0th resource
|
||||
n[5] += snprintf(str[5]+n[5],sizeof(str[5]),"%d, ",prs_config->MutingPattern1[l]);
|
||||
}
|
||||
for (int l = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].numelt; l++)
|
||||
ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.MutingPattern2[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].uptr[l];
|
||||
{
|
||||
prs_config->MutingPattern2[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].uptr[l];
|
||||
if (k == 0) // print only for 0th resource
|
||||
n[6] += snprintf(str[6]+n[6],sizeof(str[6]),"%d, ",prs_config->MutingPattern2[l]);
|
||||
}
|
||||
|
||||
// print to buffer
|
||||
n[0] += snprintf(str[0]+n[0],sizeof(str[0]),"%d, ",prs_config->SymbolStart);
|
||||
n[1] += snprintf(str[1]+n[1],sizeof(str[1]),"%d, ",prs_config->NumPRSSymbols);
|
||||
n[2] += snprintf(str[2]+n[2],sizeof(str[2]),"%d, ",prs_config->REOffset);
|
||||
n[3] += snprintf(str[3]+n[3],sizeof(str[3]),"%d, ",prs_config->PRSResourceOffset);
|
||||
n[4] += snprintf(str[4]+n[4],sizeof(str[4]),"%d, ",prs_config->NPRSID);
|
||||
} // for k
|
||||
|
||||
k = 0;
|
||||
prs_config = &ue->prs_vars[gNB_id]->prs_resource[0].prs_cfg;
|
||||
LOG_I(PHY, "-----------------------------------------\n");
|
||||
LOG_I(PHY, "PRS Config for gNB_id %d @ %p\n", gNB_id, &ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg);
|
||||
LOG_I(PHY, "PRS Config for gNB_id %d @ %p\n", gNB_id, prs_config);
|
||||
LOG_I(PHY, "-----------------------------------------\n");
|
||||
LOG_I(PHY, "NumPRSResources \t%d\n", ue->prs_vars[gNB_id]->NumPRSResources);
|
||||
LOG_I(PHY, "PRSResourceSetPeriod \t[%d, %d]\n", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceSetPeriod[0], ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceSetPeriod[1]);
|
||||
LOG_I(PHY, "NumRB \t\t\t%d\n", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.NumRB);
|
||||
LOG_I(PHY, "RBOffset \t\t%d\n", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.RBOffset);
|
||||
LOG_I(PHY, "CombSize \t\t%d\n", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.CombSize);
|
||||
LOG_I(PHY, "PRSResourceRepetition \t%d\n", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceRepetition);
|
||||
LOG_I(PHY, "PRSResourceTimeGap \t%d\n", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceTimeGap);
|
||||
LOG_I(PHY, "MutingBitRepetition \t%d\n", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.MutingBitRepetition);
|
||||
LOG_I(PHY, "SymbolStart \t\t[");
|
||||
for (k = 0; k < ue->prs_vars[gNB_id]->NumPRSResources; k++)
|
||||
printf("%d, ", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.SymbolStart);
|
||||
printf("\b\b]\n");
|
||||
LOG_I(PHY, "NumPRSSymbols \t\t[");
|
||||
for (k = 0; k < ue->prs_vars[gNB_id]->NumPRSResources; k++)
|
||||
printf("%d, ", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.NumPRSSymbols);
|
||||
printf("\b\b]\n");
|
||||
LOG_I(PHY, "REOffset \t\t[");
|
||||
for (k = 0; k < ue->prs_vars[gNB_id]->NumPRSResources; k++)
|
||||
printf("%d, ", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.REOffset);
|
||||
printf("\b\b]\n");
|
||||
LOG_I(PHY, "PRSResourceOffset \t[");
|
||||
for (k = 0; k < ue->prs_vars[gNB_id]->NumPRSResources; k++)
|
||||
printf("%d, ", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.PRSResourceOffset);
|
||||
printf("\b\b]\n");
|
||||
LOG_I(PHY, "NPRS_ID \t\t[");
|
||||
for (k = 0; k < ue->prs_vars[gNB_id]->NumPRSResources; k++)
|
||||
printf("%d, ", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.NPRSID);
|
||||
printf("\b\b]\n");
|
||||
LOG_I(PHY, "MutingPattern1 \t\t[");
|
||||
for (int l = 0, k = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].numelt; l++)
|
||||
printf("%d, ", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.MutingPattern1[l]);
|
||||
printf("\b\b]\n");
|
||||
LOG_I(PHY, "MutingPattern2 \t\t[");
|
||||
for (int l = 0, k = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].numelt; l++)
|
||||
printf("%d, ", ue->prs_vars[gNB_id]->prs_resource[k].prs_cfg.MutingPattern2[l]);
|
||||
printf("\b\b]\n");
|
||||
LOG_I(PHY, "PRSResourceSetPeriod \t[%d, %d]\n", prs_config->PRSResourceSetPeriod[0], prs_config->PRSResourceSetPeriod[1]);
|
||||
LOG_I(PHY, "NumRB \t\t\t%d\n", prs_config->NumRB);
|
||||
LOG_I(PHY, "RBOffset \t\t%d\n", prs_config->RBOffset);
|
||||
LOG_I(PHY, "CombSize \t\t%d\n", prs_config->CombSize);
|
||||
LOG_I(PHY, "PRSResourceRepetition \t%d\n", prs_config->PRSResourceRepetition);
|
||||
LOG_I(PHY, "PRSResourceTimeGap \t%d\n", prs_config->PRSResourceTimeGap);
|
||||
LOG_I(PHY, "MutingBitRepetition \t%d\n", prs_config->MutingBitRepetition);
|
||||
LOG_I(PHY, "SymbolStart \t\t[%s\b\b]\n", str[0]);
|
||||
LOG_I(PHY, "NumPRSSymbols \t\t[%s\b\b]\n", str[1]);
|
||||
LOG_I(PHY, "REOffset \t\t[%s\b\b]\n", str[2]);
|
||||
LOG_I(PHY, "PRSResourceOffset \t[%s\b\b]\n", str[3]);
|
||||
LOG_I(PHY, "NPRS_ID \t\t[%s\b\b]\n", str[4]);
|
||||
LOG_I(PHY, "MutingPattern1 \t\t[%s\b\b]\n", str[5]);
|
||||
LOG_I(PHY, "MutingPattern2 \t\t[%s\b\b]\n", str[6]);
|
||||
LOG_I(PHY, "-----------------------------------------\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_I(PHY,"No %s configuration found\n", PRS_ParamList.listname);
|
||||
LOG_E(PHY,"No %s configuration found..!!\n", PRS_ParamList.listname);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -136,7 +136,7 @@ void nr_init_prs(PHY_VARS_gNB* gNB)
|
||||
|
||||
for (rsc_id = 0; rsc_id < gNB->prs_vars.NumPRSResources; rsc_id++) {
|
||||
Nid = gNB->prs_vars.prs_cfg[rsc_id].NPRSID; // seed value
|
||||
LOG_I(PHY, "Initiaized NR-PRS sequence with PRS_ID %d\n", Nid);
|
||||
LOG_I(PHY, "Initiaized NR-PRS sequence with PRS_ID %3d for resource %d\n", Nid, rsc_id);
|
||||
for (slotNum = 0; slotNum < fp->slots_per_frame; slotNum++) {
|
||||
for (symNum = 0; symNum < fp->symbols_per_slot ; symNum++) {
|
||||
reset = 1;
|
||||
|
||||
@@ -137,7 +137,7 @@ void init_nr_gold_prs(PHY_VARS_NR_UE* ue)
|
||||
for(gnb = 0; gnb < ue->prs_active_gNBs; gnb++) {
|
||||
for(rsc = 0; rsc < ue->prs_vars[gnb]->NumPRSResources; rsc++) {
|
||||
Nid = ue->prs_vars[gnb]->prs_resource[rsc].prs_cfg.NPRSID; // seed value
|
||||
LOG_I(PHY,"Initialised NR-PRS sequence with PRS_ID %d\n",Nid);
|
||||
LOG_I(PHY,"Initialised NR-PRS sequence with PRS_ID %3d for resource %d\n",Nid, rsc);
|
||||
for (slotNum = 0; slotNum < fp->slots_per_frame; slotNum++) {
|
||||
for (symNum = 0; symNum < fp->symbols_per_slot ; symNum++) {
|
||||
reset = 1;
|
||||
|
||||
@@ -12,7 +12,7 @@ extern short nr_qpsk_mod_table[8];
|
||||
int nr_generate_prs(uint32_t **nr_gold_prs,
|
||||
int32_t *txdataF,
|
||||
int16_t amp,
|
||||
prs_data_t *prs_data,
|
||||
prs_config_t *prs_cfg,
|
||||
nfapi_nr_config_request_scf_t *config,
|
||||
NR_DL_FRAME_PARMS *frame_parms)
|
||||
{
|
||||
@@ -23,26 +23,26 @@ int nr_generate_prs(uint32_t **nr_gold_prs,
|
||||
|
||||
// PRS resource mapping with combsize=k which means PRS symbols exist in every k-th subcarrier in frequency domain
|
||||
// According to ts138.211 sec.7.4.1.7.2
|
||||
for (int l = prs_data->SymbolStart; l < prs_data->SymbolStart + prs_data->NumPRSSymbols; l++) {
|
||||
for (int l = prs_cfg->SymbolStart; l < prs_cfg->SymbolStart + prs_cfg->NumPRSSymbols; l++) {
|
||||
|
||||
int symInd = l-prs_data->SymbolStart;
|
||||
if (prs_data->CombSize == 2) {
|
||||
int symInd = l-prs_cfg->SymbolStart;
|
||||
if (prs_cfg->CombSize == 2) {
|
||||
k_prime = k_prime_table[0][symInd];
|
||||
}
|
||||
else if (prs_data->CombSize == 4){
|
||||
else if (prs_cfg->CombSize == 4){
|
||||
k_prime = k_prime_table[1][symInd];
|
||||
}
|
||||
else if (prs_data->CombSize == 6){
|
||||
else if (prs_cfg->CombSize == 6){
|
||||
k_prime = k_prime_table[2][symInd];
|
||||
}
|
||||
else if (prs_data->CombSize == 12){
|
||||
else if (prs_cfg->CombSize == 12){
|
||||
k_prime = k_prime_table[3][symInd];
|
||||
}
|
||||
|
||||
k = (prs_data->REOffset+k_prime) % prs_data->CombSize + prs_data->RBOffset*12 + frame_parms->first_carrier_offset;
|
||||
k = (prs_cfg->REOffset+k_prime) % prs_cfg->CombSize + prs_cfg->RBOffset*12 + frame_parms->first_carrier_offset;
|
||||
|
||||
// QPSK modulation
|
||||
for (int m = 0; m < (12/prs_data->CombSize) * prs_data->NumRB; m++) {
|
||||
for (int m = 0; m < (12/prs_cfg->CombSize) * prs_cfg->NumRB; m++) {
|
||||
idx = (((nr_gold_prs[l][(m<<1)>>5])>>((m<<1)&0x1f))&3);
|
||||
mod_prs[m<<1] = nr_qpsk_mod_table[idx<<1];
|
||||
mod_prs[(m<<1)+1] = nr_qpsk_mod_table[(idx<<1) + 1];
|
||||
@@ -64,14 +64,14 @@ int nr_generate_prs(uint32_t **nr_gold_prs,
|
||||
((int16_t *)txdataF)[((l*frame_parms->ofdm_symbol_size + k)<<1)+1]);
|
||||
#endif
|
||||
|
||||
k = k + prs_data->CombSize;
|
||||
k = k + prs_cfg->CombSize;
|
||||
|
||||
if (k >= frame_parms->ofdm_symbol_size)
|
||||
k-=frame_parms->ofdm_symbol_size;
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG_PRS_MAP
|
||||
LOG_M("nr_prs.m", "prs",(int16_t *)&txdataF[prs_data->SymbolStart*frame_parms->ofdm_symbol_size],prs_data->NumPRSSymbols*frame_parms->ofdm_symbol_size, 1, 1);
|
||||
LOG_M("nr_prs.m", "prs",(int16_t *)&txdataF[prs_cfg->SymbolStart*frame_parms->ofdm_symbol_size],prs_cfg->NumPRSSymbols*frame_parms->ofdm_symbol_size, 1, 1);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
int nr_generate_prs(uint32_t **nr_gold_prs,
|
||||
int32_t *txdataF,
|
||||
int16_t amp,
|
||||
prs_data_t *prs_data,
|
||||
prs_config_t *prs_cfg,
|
||||
nfapi_nr_config_request_scf_t *config,
|
||||
NR_DL_FRAME_PARMS *frame_parms);
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
|
||||
NR_DL_FRAME_PARMS *frame_params)
|
||||
{
|
||||
int32_t **rxdataF = ue->common_vars.common_vars_rx_data_per_thread[proc->thread_id].rxdataF;
|
||||
prs_data_t *prs_cfg = &ue->prs_vars[gNB_id]->prs_resource[rsc_id].prs_cfg;
|
||||
prs_config_t *prs_cfg = &ue->prs_vars[gNB_id]->prs_resource[rsc_id].prs_cfg;
|
||||
prs_meas_t **prs_meas = ue->prs_vars[gNB_id]->prs_resource[rsc_id].prs_meas;
|
||||
int32_t **prs_chestF = ue->prs_vars[gNB_id]->prs_resource[rsc_id].prs_ch_estimates;
|
||||
int32_t **prs_chestT = ue->prs_vars[gNB_id]->prs_resource[rsc_id].prs_ch_estimates_time;
|
||||
|
||||
@@ -226,7 +226,7 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
uint8_t NumPRSResources;
|
||||
prs_data_t prs_cfg[NR_MAX_PRS_RESOURCES_PER_SET];
|
||||
prs_config_t prs_cfg[NR_MAX_PRS_RESOURCES_PER_SET];
|
||||
} NR_gNB_PRS;
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -348,7 +348,7 @@ typedef struct {
|
||||
|
||||
#define NR_PRS_IDFT_OVERSAMP_FACTOR 1 // IDFT oversampling factor for NR PRS channel estimates in time domain, ALLOWED value 16x, and 1x is default(ie. IDFT size is frame_params->ofdm_symbol_size)
|
||||
typedef struct {
|
||||
prs_data_t prs_cfg;
|
||||
prs_config_t prs_cfg;
|
||||
int32_t **prs_ch_estimates;
|
||||
int32_t **prs_ch_estimates_time;
|
||||
int32_t reserved;
|
||||
|
||||
@@ -389,23 +389,23 @@ struct NR_DL_FRAME_PARMS {
|
||||
uint32_t ofdm_offset_divisor;
|
||||
};
|
||||
|
||||
// PRS structures prototype
|
||||
// PRS config structures
|
||||
typedef struct {
|
||||
uint16_t PRSResourceSetPeriod[2]; // [slot period, slot offset]
|
||||
uint16_t PRSResourceOffset; // array if more than one resource sets.slot offset (0...511) (default 0)
|
||||
uint8_t PRSResourceRepetition; // slot offset (1 (default), 2, 4, 6, 8, 16, 32)
|
||||
uint8_t PRSResourceTimeGap; // slot offset (1 (default), 2, 4, 6, 8, 16, 32)
|
||||
uint16_t NumRB; // number of RBs in freq domain a scalar =< 275 RB
|
||||
uint8_t NumPRSSymbols; // number of PRS symbols in time domain
|
||||
uint8_t SymbolStart; // starting OFDM symbol of PRS resource in time domain
|
||||
uint16_t PRSResourceSetPeriod[2]; // [slot period, slot offset] of a PRS resource set
|
||||
uint16_t PRSResourceOffset; // Slot offset of each PRS resource defined relative to the slot offset of the PRS resource set (0...511)
|
||||
uint8_t PRSResourceRepetition; // Repetition factor for all PRS resources in resource set (1 /*default*/, 2, 4, 6, 8, 16, 32)
|
||||
uint8_t PRSResourceTimeGap; // Slot offset between two consecutive repetition indices of all PRS resources in a PRS resource set (1 /*default*/, 2, 4, 6, 8, 16, 32)
|
||||
uint16_t NumRB; // Number of PRBs allocated to all PRS resources in a PRS resource set (<= 272 and multiples of 4)
|
||||
uint8_t NumPRSSymbols; // Number of OFDM symbols in a slot allocated to each PRS resource in a PRS resource set
|
||||
uint8_t SymbolStart; // Starting OFDM symbol of each PRS resource in a PRS resource set
|
||||
uint16_t RBOffset; // Starting PRB index of all PRS resources in a PRS resource set
|
||||
uint8_t CombSize; // RE density of all PRS resources in a PRS resource set. i∈{2,4,6,12}
|
||||
uint8_t CombSize; // RE density of all PRS resources in a PRS resource set (2, 4, 6, 12)
|
||||
uint8_t REOffset; // Starting RE offset in the first OFDM symbol of each PRS resource in a PRS resource set
|
||||
uint32_t MutingPattern1[32]; // Muting bit pattern option-1, specified as [] or a binary-valued vector of length 2, 4, 6, 8, 16, or 32
|
||||
uint32_t MutingPattern2[32]; // Muting bit pattern option-2, specified as [] or a binary-valued vector of length 2, 4, 6, 8, 16, or 32
|
||||
uint8_t MutingBitRepetition; // Muting bit repetition factor, specified as 1, 2, 4, or 8
|
||||
uint16_t NPRSID; // Sequence identity of each PRS resource specified as a scalar or a vector of integers in the range [0, 4095]
|
||||
} prs_data_t;
|
||||
uint16_t NPRSID; // Sequence identity of each PRS resource in a PRS resource set, specified in the range [0, 4095]
|
||||
} prs_config_t;
|
||||
|
||||
typedef struct {
|
||||
int8_t gNB_id;
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
/*! \file openair2/COMMON/prs_nr_paramdef.f
|
||||
* \brief definition of configuration parameters for PRS
|
||||
* \author
|
||||
* \date 2022
|
||||
* \version 0.1
|
||||
* \company EURECOM
|
||||
* \email:
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifndef __PRS_NR_PARAMDEF__H__
|
||||
#define __PRS_NR_PARAMDEF__H__
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* PRS configuration section names */
|
||||
#define CONFIG_STRING_PRS_LIST "PRSs"
|
||||
#define CONFIG_STRING_PRS_CONFIG "prs_config"
|
||||
|
||||
|
||||
/* Global parameters */
|
||||
#define CONFIG_STRING_ACTIVE_GNBs "Active_gNBs"
|
||||
#define HELP_STRING_ACTIVE_GNBs "Number of active gNBs simultaneously transmitting PRS signal to a UE"
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* PRS configuration parameters */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define PRS_GLOBAL_PARAMS_DESC { \
|
||||
{CONFIG_STRING_ACTIVE_GNBs, HELP_STRING_ACTIVE_GNBs, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0} \
|
||||
}
|
||||
|
||||
#define PRS_ACTIVE_GNBS_IDX 0
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* PRS configuration parameters names */
|
||||
#define CONFIG_STRING_GNB_ID "gNB_id"
|
||||
#define CONFIG_STRING_NUM_PRS_RESOURCES "NumPRSResources"
|
||||
#define CONFIG_STRING_PRS_RESOURCE_SET_PERIOD_LIST "PRSResourceSetPeriod"
|
||||
#define CONFIG_STRING_PRS_SYMBOL_START_LIST "SymbolStart"
|
||||
#define CONFIG_STRING_PRS_NUM_SYMBOLS_LIST "NumPRSSymbols"
|
||||
#define CONFIG_STRING_PRS_NUM_RB "NumRB"
|
||||
#define CONFIG_STRING_PRS_RB_OFFSET "RBOffset"
|
||||
#define CONFIG_STRING_PRS_COMB_SIZE "CombSize"
|
||||
#define CONFIG_STRING_PRS_RE_OFFSET_LIST "REOffset"
|
||||
#define CONFIG_STRING_PRS_RESOURCE_OFFSET_LIST "PRSResourceOffset"
|
||||
#define CONFIG_STRING_PRS_RESOURCE_REPETITION "PRSResourceRepetition"
|
||||
#define CONFIG_STRING_PRS_RESOURCE_TIME_GAP "PRSResourceTimeGap"
|
||||
#define CONFIG_STRING_PRS_ID_LIST "NPRS_ID"
|
||||
#define CONFIG_STRING_PRS_MUTING_PATTERN1_LIST "MutingPattern1"
|
||||
#define CONFIG_STRING_PRS_MUTING_PATTERN2_LIST "MutingPattern2"
|
||||
#define CONFIG_STRING_PRS_MUTING_BIT_REPETITION "MutingBitRepetition"
|
||||
|
||||
/* Help string for PRS parameters */
|
||||
#define HELP_STRING_GNB_ID "gNB index for UE (<= CombSize)"
|
||||
#define HELP_STRING_NUM_PRS_RESOURCES "Number of PRS resources in a PRS resource set"
|
||||
#define HELP_STRING_PRS_RESOURCE_SET_PERIOD_LIST "[slot period, slot offset] of a PRS resource set"
|
||||
#define HELP_STRING_PRS_SYMBOL_START_LIST "Starting OFDM symbol of each PRS resource in a PRS resource set"
|
||||
#define HELP_STRING_PRS_NUM_SYMBOLS_LIST "Number of OFDM symbols in a slot for each PRS resource in a PRS resource set"
|
||||
#define HELP_STRING_PRS_NUM_RB "Number of PRBs allocated to all PRS resources in a PRS resource set (<= 272 and multiples of 4)"
|
||||
#define HELP_STRING_PRS_RB_OFFSET "Starting PRB index of all PRS resources in a PRS resource set"
|
||||
#define HELP_STRING_PRS_COMB_SIZE "RE density of all PRS resources in a PRS resource set (2, 4, 6, 12)"
|
||||
#define HELP_STRING_PRS_RE_OFFSET_LIST "Starting RE offset in the first OFDM symbol of each PRS resource in a PRS resource set"
|
||||
#define HELP_STRING_PRS_RESOURCE_OFFSET_LIST "Slot offset of each PRS resource defined relative to the slot offset of the PRS resource set (0...511)"
|
||||
#define HELP_STRING_PRS_RESOURCE_REPETITION "Repetition factor for all PRS resources in resource set (1 /*default*/, 2, 4, 6, 8, 16, 32)"
|
||||
#define HELP_STRING_PRS_RESOURCE_TIME_GAP "Slot offset between two consecutive repetition indices of all PRS resources in a PRS resource set (1 /*default*/, 2, 4, 6, 8, 16, 32)"
|
||||
#define HELP_STRING_PRS_ID_LIST "Sequence identity of each PRS resource in a PRS resource set, specified in the range [0, 4095]"
|
||||
#define HELP_STRING_PRS_MUTING_PATTERN1_LIST "Muting bit pattern option-1, specified as [] or a binary-valued vector of length 2, 4, 6, 8, 16, or 32"
|
||||
#define HELP_STRING_PRS_MUTING_PATTERN2_LIST "Muting bit pattern option-2, specified as [] or a binary-valued vector of length 2, 4, 6, 8, 16, or 32"
|
||||
#define HELP_STRING_PRS_MUTING_BIT_REPETITION "Muting bit repetition factor, specified as 1, 2, 4, or 8"
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* PRS configuration parameters */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define PRS_PARAMS_DESC { \
|
||||
{CONFIG_STRING_GNB_ID, HELP_STRING_GNB_ID, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_NUM_PRS_RESOURCES, HELP_STRING_NUM_PRS_RESOURCES, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_PRS_RESOURCE_SET_PERIOD_LIST, HELP_STRING_PRS_RESOURCE_SET_PERIOD_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_SYMBOL_START_LIST, HELP_STRING_PRS_SYMBOL_START_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_NUM_SYMBOLS_LIST, HELP_STRING_PRS_NUM_SYMBOLS_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_NUM_RB, HELP_STRING_PRS_NUM_RB, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_PRS_RB_OFFSET, HELP_STRING_PRS_RB_OFFSET, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_PRS_COMB_SIZE, HELP_STRING_PRS_COMB_SIZE, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_PRS_RE_OFFSET_LIST, HELP_STRING_PRS_RE_OFFSET_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_RESOURCE_OFFSET_LIST, HELP_STRING_PRS_RESOURCE_OFFSET_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_RESOURCE_REPETITION, HELP_STRING_PRS_RESOURCE_REPETITION, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_PRS_RESOURCE_TIME_GAP, HELP_STRING_PRS_RESOURCE_TIME_GAP, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_PRS_ID_LIST, HELP_STRING_PRS_ID_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_MUTING_PATTERN1_LIST, HELP_STRING_PRS_MUTING_PATTERN1_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_MUTING_PATTERN2_LIST, HELP_STRING_PRS_MUTING_PATTERN2_LIST, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_MUTING_BIT_REPETITION, HELP_STRING_PRS_MUTING_BIT_REPETITION, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0} \
|
||||
}
|
||||
|
||||
#define PRS_GNB_ID 0
|
||||
#define NUM_PRS_RESOURCES 1
|
||||
#define PRS_RESOURCE_SET_PERIOD_LIST 2
|
||||
#define PRS_SYMBOL_START_LIST 3
|
||||
#define PRS_NUM_SYMBOLS_LIST 4
|
||||
#define PRS_NUM_RB 5
|
||||
#define PRS_RB_OFFSET 6
|
||||
#define PRS_COMB_SIZE 7
|
||||
#define PRS_RE_OFFSET_LIST 8
|
||||
#define PRS_RESOURCE_OFFSET_LIST 9
|
||||
#define PRS_RESOURCE_REPETITION 10
|
||||
#define PRS_RESOURCE_TIME_GAP 11
|
||||
#define PRS_ID_LIST 12
|
||||
#define PRS_MUTING_PATTERN1_LIST 13
|
||||
#define PRS_MUTING_PATTERN2_LIST 14
|
||||
#define PRS_MUTING_BIT_REPETITION 15
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
#endif
|
||||
@@ -674,10 +674,11 @@ void RCconfig_nr_flexran()
|
||||
void RCconfig_nr_prs(void)
|
||||
{
|
||||
uint16_t j = 0, k = 0;
|
||||
prs_config_t *prs_config = NULL;
|
||||
char str[7][100] = {'\0'}; int16_t n[7] = {0};
|
||||
|
||||
paramdef_t PRS_Params[] = PRS_PARAMS_DESC;
|
||||
paramlist_def_t PRS_ParamList = {CONFIG_STRING_PRS_CONFIG,NULL,0};
|
||||
|
||||
if (RC.gNB == NULL) {
|
||||
RC.gNB = (PHY_VARS_gNB **)malloc((1+NUMBER_OF_gNB_MAX)*sizeof(PHY_VARS_gNB*));
|
||||
LOG_I(NR_PHY,"RC.gNB = %p\n",RC.gNB);
|
||||
@@ -696,77 +697,72 @@ void RCconfig_nr_prs(void)
|
||||
RC.gNB[j]->Mod_id = j;
|
||||
}
|
||||
|
||||
memset(n,0,sizeof(n));
|
||||
RC.gNB[j]->prs_vars.NumPRSResources = *(PRS_ParamList.paramarray[j][NUM_PRS_RESOURCES].uptr);
|
||||
for (k = 0; k < RC.gNB[j]->prs_vars.NumPRSResources; k++)
|
||||
{
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceSetPeriod[0] = PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD_LIST].uptr[0];
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceSetPeriod[1] = PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD_LIST].uptr[1];
|
||||
prs_config = &RC.gNB[j]->prs_vars.prs_cfg[k];
|
||||
prs_config->PRSResourceSetPeriod[0] = PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD_LIST].uptr[0];
|
||||
prs_config->PRSResourceSetPeriod[1] = PRS_ParamList.paramarray[j][PRS_RESOURCE_SET_PERIOD_LIST].uptr[1];
|
||||
// per PRS resources parameters
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].SymbolStart = PRS_ParamList.paramarray[j][PRS_SYMBOL_START_LIST].uptr[k];
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].NumPRSSymbols = PRS_ParamList.paramarray[j][PRS_NUM_SYMBOLS_LIST].uptr[k];
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].REOffset = PRS_ParamList.paramarray[j][PRS_RE_OFFSET_LIST].uptr[k];
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceOffset = PRS_ParamList.paramarray[j][PRS_RESOURCE_OFFSET_LIST].uptr[k];
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].NPRSID = PRS_ParamList.paramarray[j][PRS_ID_LIST].uptr[k];
|
||||
prs_config->SymbolStart = PRS_ParamList.paramarray[j][PRS_SYMBOL_START_LIST].uptr[k];
|
||||
prs_config->NumPRSSymbols = PRS_ParamList.paramarray[j][PRS_NUM_SYMBOLS_LIST].uptr[k];
|
||||
prs_config->REOffset = PRS_ParamList.paramarray[j][PRS_RE_OFFSET_LIST].uptr[k];
|
||||
prs_config->PRSResourceOffset = PRS_ParamList.paramarray[j][PRS_RESOURCE_OFFSET_LIST].uptr[k];
|
||||
prs_config->NPRSID = PRS_ParamList.paramarray[j][PRS_ID_LIST].uptr[k];
|
||||
// Common parameters to all PRS resources
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].NumRB = *(PRS_ParamList.paramarray[j][PRS_NUM_RB].uptr);
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].RBOffset = *(PRS_ParamList.paramarray[j][PRS_RB_OFFSET].uptr);
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].CombSize = *(PRS_ParamList.paramarray[j][PRS_COMB_SIZE].uptr);
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceRepetition = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_REPETITION].uptr);
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceTimeGap = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_TIME_GAP].uptr);
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].MutingBitRepetition = *(PRS_ParamList.paramarray[j][PRS_MUTING_BIT_REPETITION].uptr);
|
||||
prs_config->NumRB = *(PRS_ParamList.paramarray[j][PRS_NUM_RB].uptr);
|
||||
prs_config->RBOffset = *(PRS_ParamList.paramarray[j][PRS_RB_OFFSET].uptr);
|
||||
prs_config->CombSize = *(PRS_ParamList.paramarray[j][PRS_COMB_SIZE].uptr);
|
||||
prs_config->PRSResourceRepetition = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_REPETITION].uptr);
|
||||
prs_config->PRSResourceTimeGap = *(PRS_ParamList.paramarray[j][PRS_RESOURCE_TIME_GAP].uptr);
|
||||
prs_config->MutingBitRepetition = *(PRS_ParamList.paramarray[j][PRS_MUTING_BIT_REPETITION].uptr);
|
||||
for (int l = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].numelt; l++)
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].MutingPattern1[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].uptr[l];
|
||||
{
|
||||
prs_config->MutingPattern1[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].uptr[l];
|
||||
if (k == 0) // print only for 0th resource
|
||||
n[5] += snprintf(str[5]+n[5],sizeof(str[5]),"%d, ",prs_config->MutingPattern1[l]);
|
||||
}
|
||||
for (int l = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].numelt; l++)
|
||||
RC.gNB[j]->prs_vars.prs_cfg[k].MutingPattern2[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].uptr[l];
|
||||
{
|
||||
prs_config->MutingPattern2[l] = PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].uptr[l];
|
||||
if (k == 0) // print only for 0th resource
|
||||
n[6] += snprintf(str[6]+n[6],sizeof(str[6]),"%d, ",prs_config->MutingPattern2[l]);
|
||||
}
|
||||
|
||||
// print to buffer
|
||||
n[0] += snprintf(str[0]+n[0],sizeof(str[0]),"%d, ",prs_config->SymbolStart);
|
||||
n[1] += snprintf(str[1]+n[1],sizeof(str[1]),"%d, ",prs_config->NumPRSSymbols);
|
||||
n[2] += snprintf(str[2]+n[2],sizeof(str[2]),"%d, ",prs_config->REOffset);
|
||||
n[3] += snprintf(str[3]+n[3],sizeof(str[3]),"%d, ",prs_config->PRSResourceOffset);
|
||||
n[4] += snprintf(str[4]+n[4],sizeof(str[4]),"%d, ",prs_config->NPRSID);
|
||||
} // for k
|
||||
|
||||
k = 0;
|
||||
prs_config = &RC.gNB[j]->prs_vars.prs_cfg[0];
|
||||
LOG_I(PHY, "-----------------------------------------\n");
|
||||
LOG_I(PHY, "PRS Config for gNB_id %d @ %p\n", j, &RC.gNB[j]->prs_vars.prs_cfg[k]);
|
||||
LOG_I(PHY, "PRS Config for gNB_id %d @ %p\n", j, prs_config);
|
||||
LOG_I(PHY, "-----------------------------------------\n");
|
||||
LOG_I(PHY, "NumPRSResources \t%d\n", RC.gNB[j]->prs_vars.NumPRSResources);
|
||||
LOG_I(PHY, "PRSResourceSetPeriod \t[%d, %d]\n", RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceSetPeriod[0], RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceSetPeriod[1]);
|
||||
LOG_I(PHY, "NumRB \t\t\t%d\n", RC.gNB[j]->prs_vars.prs_cfg[k].NumRB);
|
||||
LOG_I(PHY, "RBOffset \t\t%d\n", RC.gNB[j]->prs_vars.prs_cfg[k].RBOffset);
|
||||
LOG_I(PHY, "CombSize \t\t%d\n", RC.gNB[j]->prs_vars.prs_cfg[k].CombSize);
|
||||
LOG_I(PHY, "PRSResourceRepetition \t%d\n", RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceRepetition);
|
||||
LOG_I(PHY, "PRSResourceTimeGap \t%d\n", RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceTimeGap);
|
||||
LOG_I(PHY, "MutingBitRepetition \t%d\n", RC.gNB[j]->prs_vars.prs_cfg[k].MutingBitRepetition);
|
||||
LOG_I(PHY, "SymbolStart \t\t[");
|
||||
for (k = 0; k < RC.gNB[j]->prs_vars.NumPRSResources; k++)
|
||||
printf("%d, ", RC.gNB[j]->prs_vars.prs_cfg[k].SymbolStart);
|
||||
printf("\b\b]\n");
|
||||
LOG_I(PHY, "NumPRSSymbols \t\t[");
|
||||
for (k = 0; k < RC.gNB[j]->prs_vars.NumPRSResources; k++)
|
||||
printf("%d, ", RC.gNB[j]->prs_vars.prs_cfg[k].NumPRSSymbols);
|
||||
printf("\b\b]\n");
|
||||
LOG_I(PHY, "REOffset \t\t[");
|
||||
for (k = 0; k < RC.gNB[j]->prs_vars.NumPRSResources; k++)
|
||||
printf("%d, ", RC.gNB[j]->prs_vars.prs_cfg[k].REOffset);
|
||||
printf("\b\b]\n");
|
||||
LOG_I(PHY, "PRSResourceOffset \t[");
|
||||
for (k = 0; k < RC.gNB[j]->prs_vars.NumPRSResources; k++)
|
||||
printf("%d, ", RC.gNB[j]->prs_vars.prs_cfg[k].PRSResourceOffset);
|
||||
printf("\b\b]\n");
|
||||
LOG_I(PHY, "NPRS_ID \t\t[");
|
||||
for (k = 0; k < RC.gNB[j]->prs_vars.NumPRSResources; k++)
|
||||
printf("%d, ", RC.gNB[j]->prs_vars.prs_cfg[k].NPRSID);
|
||||
printf("\b\b]\n");
|
||||
LOG_I(PHY, "MutingPattern1 \t\t[");
|
||||
for (int l = 0, k = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN1_LIST].numelt; l++)
|
||||
printf("%d, ", RC.gNB[j]->prs_vars.prs_cfg[k].MutingPattern1[l]);
|
||||
printf("\b\b]\n");
|
||||
LOG_I(PHY, "MutingPattern2 \t\t[");
|
||||
for (int l = 0, k = 0; l < PRS_ParamList.paramarray[j][PRS_MUTING_PATTERN2_LIST].numelt; l++)
|
||||
printf("%d, ", RC.gNB[j]->prs_vars.prs_cfg[k].MutingPattern2[l]);
|
||||
printf("\b\b]\n");
|
||||
LOG_I(PHY, "PRSResourceSetPeriod \t[%d, %d]\n", prs_config->PRSResourceSetPeriod[0], prs_config->PRSResourceSetPeriod[1]);
|
||||
LOG_I(PHY, "NumRB \t\t\t%d\n", prs_config->NumRB);
|
||||
LOG_I(PHY, "RBOffset \t\t%d\n", prs_config->RBOffset);
|
||||
LOG_I(PHY, "CombSize \t\t%d\n", prs_config->CombSize);
|
||||
LOG_I(PHY, "PRSResourceRepetition \t%d\n", prs_config->PRSResourceRepetition);
|
||||
LOG_I(PHY, "PRSResourceTimeGap \t%d\n", prs_config->PRSResourceTimeGap);
|
||||
LOG_I(PHY, "MutingBitRepetition \t%d\n", prs_config->MutingBitRepetition);
|
||||
LOG_I(PHY, "SymbolStart \t\t[%s\b\b]\n", str[0]);
|
||||
LOG_I(PHY, "NumPRSSymbols \t\t[%s\b\b]\n", str[1]);
|
||||
LOG_I(PHY, "REOffset \t\t[%s\b\b]\n", str[2]);
|
||||
LOG_I(PHY, "PRSResourceOffset \t[%s\b\b]\n", str[3]);
|
||||
LOG_I(PHY, "NPRS_ID \t\t[%s\b\b]\n", str[4]);
|
||||
LOG_I(PHY, "MutingPattern1 \t\t[%s\b\b]\n", str[5]);
|
||||
LOG_I(PHY, "MutingPattern2 \t\t[%s\b\b]\n", str[6]);
|
||||
LOG_I(PHY, "-----------------------------------------\n");
|
||||
} // for j
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_I(NR_PHY,"No " CONFIG_STRING_PRS_CONFIG " configuration found\n");
|
||||
LOG_E(PHY,"No " CONFIG_STRING_PRS_CONFIG " configuration found..!!\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,117 +0,0 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
/*! \file openair2/GNB_APP/prs_nr_paramdef.f
|
||||
* \brief definition of configuration parameters for PRS
|
||||
* \author
|
||||
* \date 2022
|
||||
* \version 0.1
|
||||
* \company EURECOM
|
||||
* \email:
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifndef __GNB_APP_PRS_NR_PARAMDEF__H__
|
||||
#define __GNB_APP_PRS_NR_PARAMDEF__H__
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* PRS configuration section names */
|
||||
#define CONFIG_STRING_PRS_LIST "PRSs"
|
||||
#define CONFIG_STRING_PRS_CONFIG "prs_config"
|
||||
#define CONFIG_STRING_MQTT_CONFIG "mqtt_config"
|
||||
|
||||
|
||||
/* Global parameters */
|
||||
#define CONFIG_STRING_ACTIVE_GNBs "Active_gNBs"
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* PRS configuration parameters */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define PRS_GLOBAL_PARAMS_DESC { \
|
||||
{CONFIG_STRING_ACTIVE_GNBs, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0} \
|
||||
}
|
||||
|
||||
#define PRS_ACTIVE_GNBS_IDX 0
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* PRS configuration parameters names */
|
||||
#define CONFIG_STRING_GNB_ID "gNB_id"
|
||||
#define CONFIG_STRING_NUM_PRS_RESOURCES "NumPRSResources"
|
||||
#define CONFIG_STRING_PRS_RESOURCE_SET_PERIOD_LIST "PRSResourceSetPeriod"
|
||||
#define CONFIG_STRING_PRS_SYMBOL_START_LIST "SymbolStart"
|
||||
#define CONFIG_STRING_PRS_NUM_SYMBOLS_LIST "NumPRSSymbols"
|
||||
#define CONFIG_STRING_PRS_NUM_RB "NumRB"
|
||||
#define CONFIG_STRING_PRS_RB_OFFSET "RBOffset"
|
||||
#define CONFIG_STRING_PRS_COMB_SIZE "CombSize"
|
||||
#define CONFIG_STRING_PRS_RE_OFFSET_LIST "REOffset"
|
||||
#define CONFIG_STRING_PRS_RESOURCE_OFFSET_LIST "PRSResourceOffset"
|
||||
#define CONFIG_STRING_PRS_RESOURCE_REPETITION "PRSResourceRepetition"
|
||||
#define CONFIG_STRING_PRS_RESOURCE_TIME_GAP "PRSResourceTimeGap"
|
||||
#define CONFIG_STRING_PRS_ID_LIST "NPRS_ID"
|
||||
#define CONFIG_STRING_PRS_MUTING_PATTERN1_LIST "MutingPattern1"
|
||||
#define CONFIG_STRING_PRS_MUTING_PATTERN2_LIST "MutingPattern2"
|
||||
#define CONFIG_STRING_PRS_MUTING_BIT_REPETITION "MutingBitRepetition"
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* PRS configuration parameters */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define PRS_PARAMS_DESC { \
|
||||
{CONFIG_STRING_GNB_ID, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_NUM_PRS_RESOURCES, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_PRS_RESOURCE_SET_PERIOD_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_SYMBOL_START_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_NUM_SYMBOLS_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_NUM_RB, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_PRS_RB_OFFSET, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_PRS_COMB_SIZE, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_PRS_RE_OFFSET_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_RESOURCE_OFFSET_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_RESOURCE_REPETITION, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_PRS_RESOURCE_TIME_GAP, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0}, \
|
||||
{CONFIG_STRING_PRS_ID_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_MUTING_PATTERN1_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_MUTING_PATTERN2_LIST, NULL, 0, uptr:NULL, defintarrayval:0, TYPE_UINTARRAY, 0}, \
|
||||
{CONFIG_STRING_PRS_MUTING_BIT_REPETITION, NULL, 0, uptr:NULL, defuintval:0, TYPE_UINT, 0} \
|
||||
}
|
||||
|
||||
#define PRS_GNB_ID 0
|
||||
#define NUM_PRS_RESOURCES 1
|
||||
#define PRS_RESOURCE_SET_PERIOD_LIST 2
|
||||
#define PRS_SYMBOL_START_LIST 3
|
||||
#define PRS_NUM_SYMBOLS_LIST 4
|
||||
#define PRS_NUM_RB 5
|
||||
#define PRS_RB_OFFSET 6
|
||||
#define PRS_COMB_SIZE 7
|
||||
#define PRS_RE_OFFSET_LIST 8
|
||||
#define PRS_RESOURCE_OFFSET_LIST 9
|
||||
#define PRS_RESOURCE_REPETITION 10
|
||||
#define PRS_RESOURCE_TIME_GAP 11
|
||||
#define PRS_ID_LIST 12
|
||||
#define PRS_MUTING_PATTERN1_LIST 13
|
||||
#define PRS_MUTING_PATTERN2_LIST 14
|
||||
#define PRS_MUTING_BIT_REPETITION 15
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#endif
|
||||
@@ -1,317 +0,0 @@
|
||||
Active_gNBs = ( "gNB-OAI");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
gNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
gNB_name = "gNB-OAI";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
plmn_list = ({
|
||||
mcc = 208;
|
||||
mnc = 99;
|
||||
mnc_length = 2;
|
||||
snssaiList = (
|
||||
{
|
||||
sst = 1;
|
||||
sd = 0x1; // 0 false, else true
|
||||
},
|
||||
{
|
||||
sst = 1;
|
||||
sd = 0x112233; // 0 false, else true
|
||||
}
|
||||
);
|
||||
|
||||
});
|
||||
|
||||
nr_cellid = 12345678L;
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
sib1_tda = 0;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
{
|
||||
controlResourceSetZero = 12;
|
||||
searchSpaceZero = 0;
|
||||
}
|
||||
);
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
|
||||
physCellId = 0;
|
||||
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# this is pointA + 23 PRBs@120kHz SCS (same as initial BWP)
|
||||
absoluteFrequencySSB = 2078315;
|
||||
dl_frequencyBand = 257;
|
||||
# this is 27.900 GHz
|
||||
dl_absoluteFrequencyPointA = 2077499;
|
||||
#scs-SpecificCarrierList
|
||||
dl_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_subcarrierSpacing = 3;
|
||||
dl_carrierBandwidth = 66;
|
||||
#initialDownlinkBWP
|
||||
#genericParameters
|
||||
# this is RBstart=27,L=48 (275*(L-1))+RBstart
|
||||
initialDLBWPlocationAndBandwidth = 13475; # 6366 12925 12956 28875 12952
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 3;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 12;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
ul_frequencyBand = 257;
|
||||
#scs-SpecificCarrierList
|
||||
ul_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_subcarrierSpacing = 3;
|
||||
ul_carrierBandwidth = 66;
|
||||
pMax = 20;
|
||||
#initialUplinkBWP
|
||||
#genericParameters
|
||||
initialULBWPlocationAndBandwidth = 13475;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialULBWPsubcarrierSpacing = 3;
|
||||
#rach-ConfigCommon
|
||||
#rach-ConfigGeneric
|
||||
prach_ConfigurationIndex = 98;
|
||||
#prach_msg1_FDM
|
||||
#0 = one, 1=two, 2=four, 3=eight
|
||||
prach_msg1_FDM = 0;
|
||||
prach_msg1_FrequencyStart = 0;
|
||||
zeroCorrelationZoneConfig = 13;
|
||||
preambleReceivedTargetPower = -96;
|
||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||
preambleTransMax = 6;
|
||||
#powerRampingStep
|
||||
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||
powerRampingStep = 1;
|
||||
#ra_ReponseWindow
|
||||
#1,2,4,8,10,20,40,80
|
||||
ra_ResponseWindow = 4;
|
||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||
#ra_ContentionResolutionTimer
|
||||
#(0..7) 8,16,24,32,40,48,56,64
|
||||
ra_ContentionResolutionTimer = 7;
|
||||
rsrp_ThresholdSSB = 19;
|
||||
#prach-RootSequenceIndex_PR
|
||||
#1 = 839, 2 = 139
|
||||
prach_RootSequenceIndex_PR = 2;
|
||||
prach_RootSequenceIndex = 1;
|
||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||
#
|
||||
msg1_SubcarrierSpacing = 3,
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
|
||||
msg3_DeltaPreamble = 1;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
# pucch-ConfigCommon setup :
|
||||
# pucchGroupHopping
|
||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||
pucchGroupHopping = 0;
|
||||
hoppingId = 40;
|
||||
p0_nominal = -90;
|
||||
# ssb_PositionsInBurs_BitmapPR
|
||||
# 1=short, 2=medium, 3=long
|
||||
ssb_PositionsInBurst_PR = 3;
|
||||
ssb_PositionsInBurst_Bitmap = 0x0001000100010001L;
|
||||
|
||||
# ssb_periodicityServingCell
|
||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||
ssb_periodicityServingCell = 2;
|
||||
|
||||
# dmrs_TypeA_position
|
||||
# 0 = pos2, 1 = pos3
|
||||
dmrs_TypeA_Position = 0;
|
||||
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
subcarrierSpacing = 3;
|
||||
|
||||
|
||||
#tdd-UL-DL-ConfigurationCommon
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
referenceSubcarrierSpacing = 3;
|
||||
# pattern1
|
||||
# dl_UL_TransmissionPeriodicity
|
||||
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||
dl_UL_TransmissionPeriodicity = 3;
|
||||
nrofDownlinkSlots = 7;
|
||||
nrofDownlinkSymbols = 6;
|
||||
nrofUplinkSlots = 2;
|
||||
nrofUplinkSymbols = 4;
|
||||
|
||||
ssPBCH_BlockPower = -25;
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
# Number of streams to use in input/output
|
||||
SCTP_INSTREAMS = 2;
|
||||
SCTP_OUTSTREAMS = 2;
|
||||
};
|
||||
|
||||
|
||||
////////// AMF parameters:
|
||||
amf_ip_address = ( { ipv4 = "192.168.70.132";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
preference = "ipv4";
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
|
||||
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.129/24";
|
||||
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
|
||||
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.70.129/24";
|
||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 150;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 1;
|
||||
}
|
||||
);
|
||||
|
||||
prs_config = (
|
||||
{
|
||||
PRSResourceSetPeriod0 = 40;
|
||||
PRSResourceSetPeriod1 = 0;
|
||||
SymbolStart = 7;
|
||||
NumPRSSymbols = 4;
|
||||
NumRB = 56;
|
||||
RBOffset = 0;
|
||||
CombSize = 4;
|
||||
REOffset = 0;
|
||||
PRSResourceOffset = 0;
|
||||
PRSResourceRepetition = 1;
|
||||
PRSResourceTimeGap = 1;
|
||||
NPRS_ID = 0;
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
pusch_proc_threads = 8;
|
||||
prach_dtx_threshold = 120;
|
||||
pucch0_dtx_threshold = 150;
|
||||
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
bands = [257];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 114;
|
||||
sf_extension = 0;
|
||||
eNB_instances = [0];
|
||||
#beamforming 1x4 matrix:
|
||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||
clock_src = "internal";
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator :
|
||||
{
|
||||
serveraddr = "server";
|
||||
serverport = "4043";
|
||||
options = (); #("saviq"); or/and "chanmod"
|
||||
modelname = "AWGN";
|
||||
IQfile = "/tmp/rfsimulator.iqs";
|
||||
};
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
# valid values: nea0, nea1, nea2, nea3
|
||||
ciphering_algorithms = ( "nea0" );
|
||||
|
||||
# preferred integrity algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
# valid values: nia0, nia1, nia2, nia3
|
||||
integrity_algorithms = ( "nia2", "nia0" );
|
||||
|
||||
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
|
||||
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
|
||||
drb_ciphering = "yes";
|
||||
drb_integrity = "no";
|
||||
};
|
||||
|
||||
log_config :
|
||||
{
|
||||
global_log_level ="info";
|
||||
global_log_verbosity ="medium";
|
||||
hw_log_level ="info";
|
||||
hw_log_verbosity ="medium";
|
||||
phy_log_level ="info";
|
||||
phy_log_verbosity ="medium";
|
||||
mac_log_level ="info";
|
||||
mac_log_verbosity ="high";
|
||||
rlc_log_level ="info";
|
||||
rlc_log_verbosity ="medium";
|
||||
pdcp_log_level ="info";
|
||||
pdcp_log_verbosity ="medium";
|
||||
rrc_log_level ="info";
|
||||
rrc_log_verbosity ="medium";
|
||||
ngap_log_level ="debug";
|
||||
ngap_log_verbosity ="medium";
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user