Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG-RAN
Commits
7d7dd295
Commit
7d7dd295
authored
Oct 08, 2021
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
blacklisting of PRBs in configuration file
parent
35491683
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
78 additions
and
38 deletions
+78
-38
executables/nr-ru.c
executables/nr-ru.c
+0
-1
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
+4
-2
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+2
-0
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+9
-2
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+54
-1
openair2/GNB_APP/gnb_paramdef.h
openair2/GNB_APP/gnb_paramdef.h
+4
-2
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+2
-0
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+3
-30
No files found.
executables/nr-ru.c
View file @
7d7dd295
...
...
@@ -1390,7 +1390,6 @@ void *ru_thread( void *param ) {
if
(
ru
->
feprx
)
{
ru
->
feprx
(
ru
,
proc
->
tti_rx
);
//LOG_M("rxdata.m","rxs",ru->common.rxdata[0],1228800,1,1);
if
(
initial_wait
==
0
&&
proc
->
frame_rx
==
127
)
{
LOG_M
(
"rxdata.m"
,
"rxs"
,
ru
->
common
.
rxdata
[
0
],
fp
->
samples_per_frame
,
1
,
1
);
LOG_M
(
"rxdataF.m"
,
"rxsF"
,
RC
.
gNB
[
0
]
->
common_vars
.
rxdataF
[
0
],
fp
->
symbols_per_slot
*
fp
->
ofdm_symbol_size
,
1
,
1
);
exit
(
-
1
);}
LOG_D
(
PHY
,
"RU proc: frame_rx = %d, tti_rx = %d
\n
"
,
proc
->
frame_rx
,
proc
->
tti_rx
);
/*
LOG_D(PHY,"Copying rxdataF from RU to gNB\n");
...
...
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
View file @
7d7dd295
...
...
@@ -73,8 +73,9 @@ void dump_nr_I0_stats(FILE *fd,PHY_VARS_gNB *gNB) {
int
min_I0
=
1000
,
max_I0
=
0
;
int
amin
=
0
,
amax
=
0
;
fprintf
(
fd
,
"Blacklisted PRBs %d/%d
\n
"
,
gNB
->
num_ulprbbl
,
gNB
->
frame_parms
.
N_RB_UL
);
for
(
int
i
=
0
;
i
<
gNB
->
frame_parms
.
N_RB_UL
;
i
++
)
{
if
(
i
==
(
gNB
->
frame_parms
.
N_RB_UL
>>
1
)
-
1
)
i
+=
2
;
if
(
gNB
->
ulprbbl
[
i
]
>
0
)
continue
;
if
(
gNB
->
measurements
.
n0_subband_power_tot_dB
[
i
]
<
min_I0
)
{
min_I0
=
gNB
->
measurements
.
n0_subband_power_tot_dB
[
i
];
amin
=
i
;}
...
...
@@ -82,7 +83,8 @@ void dump_nr_I0_stats(FILE *fd,PHY_VARS_gNB *gNB) {
}
for
(
int
i
=
0
;
i
<
gNB
->
frame_parms
.
N_RB_UL
;
i
++
)
{
fprintf
(
fd
,
"%2d."
,
gNB
->
measurements
.
n0_subband_power_tot_dB
[
i
]
-
gNB
->
measurements
.
n0_subband_power_avg_dB
);
if
(
gNB
->
ulprbbl
[
i
]
==
0
)
fprintf
(
fd
,
"%2d."
,
gNB
->
measurements
.
n0_subband_power_tot_dB
[
i
]
-
gNB
->
measurements
.
n0_subband_power_avg_dB
);
else
fprintf
(
fd
,
"X ."
);
if
(
i
%
25
==
24
)
fprintf
(
fd
,
"
\n
"
);
}
fprintf
(
fd
,
"
\n
"
);
...
...
openair1/PHY/defs_gNB.h
View file @
7d7dd295
...
...
@@ -855,6 +855,8 @@ typedef struct PHY_VARS_gNB_s {
int
pusch_thres
;
int
prach_thres
;
uint64_t
bad_pucch
;
int
num_ulprbbl
;
int
ulprbbl
[
275
];
/*
time_stats_t phy_proc;
*/
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
7d7dd295
...
...
@@ -539,11 +539,18 @@ void nr_fill_indication(PHY_VARS_gNB *gNB, int frame, int slot_rx, int ULSCH_id,
void
fill_ul_rb_mask
(
PHY_VARS_gNB
*
gNB
,
int
frame_rx
,
int
slot_rx
)
{
int
rb2
,
rb
,
nb_rb
;
int
prbpos
=
0
;
if
(
1
/*(gNB->gNB_config.tdd_table.max_tdd_periodicity_list[slot_rx].max_num_of_symbol_per_slot_list[symbol].slot_config.value==1*/
){
nb_rb
=
0
;
for
(
int
symbol
=
0
;
symbol
<
14
;
symbol
++
)
for
(
int
m
=
0
;
m
<
9
;
m
++
)
gNB
->
rb_mask_ul
[
symbol
][
m
]
=
0
;
for
(
int
m
=
0
;
m
<
9
;
m
++
)
{
gNB
->
rb_mask_ul
[
symbol
][
m
]
=
0
;
for
(
int
i
=
0
;
i
<
32
;
i
++
)
{
prbpos
=
(
m
*
32
)
+
i
;
if
(
prbpos
>
gNB
->
frame_parms
.
N_RB_UL
)
break
;
gNB
->
rb_mask_ul
[
symbol
][
m
]
|=
(
gNB
->
ulprbbl
[
prbpos
]
>
0
?
1
:
0
)
<<
i
;
}
}
for
(
int
i
=
0
;
i
<
NUMBER_OF_NR_PUCCH_MAX
;
i
++
){
NR_gNB_PUCCH_t
*
pucch
=
gNB
->
pucch
[
i
];
if
(
pucch
)
{
...
...
openair2/GNB_APP/gnb_config.c
View file @
7d7dd295
...
...
@@ -549,6 +549,31 @@ void RCconfig_nr_flexran()
void
RCconfig_NR_L1
(
void
)
{
int
j
;
paramdef_t
GNBSParams
[]
=
GNBSPARAMS_DESC
;
////////// Identification parameters
paramdef_t
GNBParams
[]
=
GNBPARAMS_DESC
;
paramlist_def_t
GNBParamList
=
{
GNB_CONFIG_STRING_GNB_LIST
,
NULL
,
0
};
config_get
(
GNBSParams
,
sizeof
(
GNBSParams
)
/
sizeof
(
paramdef_t
),
NULL
);
int
num_gnbs
=
GNBSParams
[
GNB_ACTIVE_GNBS_IDX
].
numelt
;
AssertFatal
(
num_gnbs
>
0
,
"Failed to parse config file no gnbs %s
\n
"
,
GNB_CONFIG_STRING_ACTIVE_GNBS
);
config_getlist
(
&
GNBParamList
,
GNBParams
,
sizeof
(
GNBParams
)
/
sizeof
(
paramdef_t
),
NULL
);
char
*
ulprbbl
=
*
GNBParamList
.
paramarray
[
0
][
GNB_ULPRBBLACKLIST_IDX
].
strptr
;
if
(
ulprbbl
)
LOG_I
(
NR_PHY
,
"PRB blacklist %s
\n
"
,
ulprbbl
);
char
*
pt
=
strtok
(
ulprbbl
,
","
);
int
prbbl
[
275
];
int
num_prbbl
=
0
;
memset
(
prbbl
,
0
,
275
*
sizeof
(
int
));
while
(
pt
)
{
prbbl
[
atoi
(
pt
)]
=
1
;
LOG_I
(
NR_PHY
,
"Blacklisting prb %d
\n
"
,
atoi
(
pt
));
pt
=
strtok
(
NULL
,
","
);
num_prbbl
++
;
}
paramdef_t
L1_Params
[]
=
L1PARAMS_DESC
;
paramlist_def_t
L1_ParamList
=
{
CONFIG_STRING_L1_LIST
,
NULL
,
0
};
...
...
@@ -577,6 +602,9 @@ void RCconfig_NR_L1(void) {
RC
.
gNB
[
j
]
->
pucch0_thres
=
*
(
L1_ParamList
.
paramarray
[
j
][
L1_PUCCH0_DTX_THRESHOLD
].
uptr
);
RC
.
gNB
[
j
]
->
prach_thres
=
*
(
L1_ParamList
.
paramarray
[
j
][
L1_PRACH_DTX_THRESHOLD
].
uptr
);
RC
.
gNB
[
j
]
->
pusch_thres
=
*
(
L1_ParamList
.
paramarray
[
j
][
L1_PUSCH_DTX_THRESHOLD
].
uptr
);
RC
.
gNB
[
j
]
->
num_ulprbbl
=
num_prbbl
;
LOG_I
(
NR_PHY
,
"Copying %d blacklisted PRB to L1 context
\n
"
,
num_prbbl
);
memcpy
(
RC
.
gNB
[
j
]
->
ulprbbl
,
prbbl
,
275
*
sizeof
(
int
));
if
(
strcmp
(
*
(
L1_ParamList
.
paramarray
[
j
][
L1_TRANSPORT_N_PREFERENCE_IDX
].
strptr
),
"local_mac"
)
==
0
)
{
//sf_ahead = 2; // Need 4 subframe gap between RX and TX
}
else
if
(
strcmp
(
*
(
L1_ParamList
.
paramarray
[
j
][
L1_TRANSPORT_N_PREFERENCE_IDX
].
strptr
),
"nfapi"
)
==
0
)
{
...
...
@@ -633,9 +661,32 @@ void RCconfig_NR_L1(void) {
void
RCconfig_nr_macrlc
()
{
int
j
;
paramdef_t
GNBSParams
[]
=
GNBSPARAMS_DESC
;
////////// Identification parameters
paramdef_t
GNBParams
[]
=
GNBPARAMS_DESC
;
paramlist_def_t
GNBParamList
=
{
GNB_CONFIG_STRING_GNB_LIST
,
NULL
,
0
};
config_get
(
GNBSParams
,
sizeof
(
GNBSParams
)
/
sizeof
(
paramdef_t
),
NULL
);
int
num_gnbs
=
GNBSParams
[
GNB_ACTIVE_GNBS_IDX
].
numelt
;
AssertFatal
(
num_gnbs
>
0
,
"Failed to parse config file no gnbs %s
\n
"
,
GNB_CONFIG_STRING_ACTIVE_GNBS
);
config_getlist
(
&
GNBParamList
,
GNBParams
,
sizeof
(
GNBParams
)
/
sizeof
(
paramdef_t
),
NULL
);
char
*
ulprbbl
=
*
GNBParamList
.
paramarray
[
0
][
GNB_ULPRBBLACKLIST_IDX
].
strptr
;
char
*
pt
=
strtok
(
ulprbbl
,
","
);
int
prbbl
[
275
];
int
num_prbbl
=
0
;
int
prb
;
memset
(
prbbl
,
0
,
275
*
sizeof
(
int
));
while
(
pt
)
{
prb
=
atoi
(
pt
);
prbbl
[
prb
]
=
1
;
pt
=
strtok
(
NULL
,
","
);
num_prbbl
++
;
}
paramdef_t
MacRLC_Params
[]
=
MACRLCPARAMS_DESC
;
paramlist_def_t
MacRLC_ParamList
=
{
CONFIG_STRING_MACRLC_LIST
,
NULL
,
0
};
config_getlist
(
&
MacRLC_ParamList
,
MacRLC_Params
,
sizeof
(
MacRLC_Params
)
/
sizeof
(
paramdef_t
),
NULL
);
if
(
MacRLC_ParamList
.
numelt
>
0
)
{
...
...
@@ -702,6 +753,8 @@ void RCconfig_nr_macrlc() {
AssertFatal
(
1
==
0
,
"MACRLC %d: %s unknown southbound midhaul
\n
"
,
j
,
*
(
MacRLC_ParamList
.
paramarray
[
j
][
MACRLC_TRANSPORT_S_PREFERENCE_IDX
].
strptr
));
}
RC
.
nrmac
[
j
]
->
ulsch_max_slots_inactivity
=
*
(
MacRLC_ParamList
.
paramarray
[
j
][
MACRLC_ULSCH_MAX_SLOTS_INACTIVITY
].
uptr
);
RC
.
nrmac
[
j
]
->
num_ulprbbl
=
num_prbbl
;
memcpy
(
RC
.
nrmac
[
j
]
->
ulprbbl
,
prbbl
,
num_prbbl
*
sizeof
(
prbbl
[
0
]));
}
// for (j=0;j<RC.nb_nr_macrlc_inst;j++)
}
else
{
// MacRLC_ParamList.numelt > 0
LOG_E
(
PHY
,
"No %s configuration found
\n
"
,
CONFIG_STRING_MACRLC_LIST
);
...
...
openair2/GNB_APP/gnb_paramdef.h
View file @
7d7dd295
...
...
@@ -120,7 +120,7 @@ typedef enum {
#define GNB_CONFIG_STRING_DOCSIRS "do_CSIRS"
#define GNB_CONFIG_STRING_NRCELLID "nr_cellid"
#define GNB_CONFIG_STRING_MINRXTXTIMEPDSCH "min_rxtxtime_pdsch"
#define GNB_CONFIG_STRING_ULPRBBLACKLIST "ul_prbblacklist"
/*-----------------------------------------------------------------------------------------------------------------------------------------*/
/* cell configuration parameters */
/* optname helpstr paramflags XXXptr defXXXval type numelt */
...
...
@@ -146,7 +146,8 @@ typedef enum {
{GNB_CONFIG_STRING_SIB1TDA, NULL, 0, iptr:NULL, defintval:0, TYPE_INT, 0}, \
{GNB_CONFIG_STRING_DOCSIRS, NULL, 0, iptr:NULL, defintval:0, TYPE_INT, 0}, \
{GNB_CONFIG_STRING_NRCELLID, NULL, 0, u64ptr:NULL, defint64val:1, TYPE_UINT64, 0}, \
{GNB_CONFIG_STRING_MINRXTXTIMEPDSCH, NULL, 0, iptr:NULL, defintval:2, TYPE_INT, 0} \
{GNB_CONFIG_STRING_MINRXTXTIMEPDSCH, NULL, 0, iptr:NULL, defintval:2, TYPE_INT, 0}, \
{GNB_CONFIG_STRING_ULPRBBLACKLIST, NULL, 0, strptr:NULL, defstrval:"", TYPE_STRING, 0} \
}
#define GNB_GNB_ID_IDX 0
...
...
@@ -170,6 +171,7 @@ typedef enum {
#define GNB_DO_CSIRS_IDX 18
#define GNB_NRCELLID_IDX 19
#define GNB_MINRXTXTIMEPDSCH_IDX 20
#define GNB_ULPRBBLACKLIST_IDX 21
#define TRACKING_AREA_CODE_OKRANGE {0x0001,0xFFFD}
#define GNBPARAMS_CHECK { \
...
...
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
View file @
7d7dd295
...
...
@@ -683,6 +683,8 @@ typedef struct gNB_MAC_INST_s {
/// current PDU index (BCH,DLSCH)
uint16_t
pdu_index
[
NFAPI_CC_MAX
];
int
num_ulprbbl
;
int
ulprbbl
[
275
];
/// NFAPI Config Request Structure
nfapi_nr_config_request_scf_t
config
[
NFAPI_CC_MAX
];
/// NFAPI DL Config Request Structure
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
7d7dd295
...
...
@@ -679,44 +679,17 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp
#if defined(__x86_64__) || defined(__i386__)
#ifdef __AVX2__
__m256i
mean
=
_mm256_setzero_si256
();
int16_t
mean16
[
2
];
for
(
int
j
=
0
;
j
<
nsamps2
<<
1
;
j
++
)
{
mean
=
_mm256_add_epi32
(
mean
,
_mm256_cvtepi16_epi32
(((
__m128i
*
)
buff_tmp
[
i
])[
j
]));
}
mean16
[
0
]
=
(
int16_t
)((
_mm256_extract_epi32
(
mean
,
0
)
+
_mm256_extract_epi32
(
mean
,
2
)
+
_mm256_extract_epi32
(
mean
,
4
)
+
_mm256_extract_epi32
(
mean
,
6
))
/
nsamps
);
mean16
[
1
]
=
(
int16_t
)((
_mm256_extract_epi32
(
mean
,
1
)
+
_mm256_extract_epi32
(
mean
,
3
)
+
_mm256_extract_epi32
(
mean
,
5
)
+
_mm256_extract_epi32
(
mean
,
7
))
/
nsamps
);
/*
LOG_I(PHY,"mean16[0] %d mean16[1] %d (%d,%d,%d,%d,%d,%d,%d,%d)\n",mean16[0],mean16[1],
_mm256_extract_epi32(mean,0),
_mm256_extract_epi32(mean,1),
_mm256_extract_epi32(mean,2),
_mm256_extract_epi32(mean,3),
_mm256_extract_epi32(mean,4),
_mm256_extract_epi32(mean,5),
_mm256_extract_epi32(mean,6),
_mm256_extract_epi32(mean,7)); */
if
((((
uintptr_t
)
buff
[
i
])
&
0x1F
)
==
0
)
{
mean
=
_mm256_set1_epi32
(
*
(
uint32_t
*
)
mean16
);
// FK: in some cases the buffer might not be 32 byte aligned, so we cannot use avx2
for
(
int
j
=
0
;
j
<
nsamps2
;
j
++
)
((
__m256i
*
)
buff
[
i
])[
j
]
=
_mm256_srai_epi16
(
_mm256_subs_epi16
(
buff_tmp
[
i
][
j
],
mean
)
,
rxshift
);
((
__m256i
*
)
buff
[
i
])[
j
]
=
_mm256_srai_epi16
(
buff_tmp
[
i
][
j
]
,
rxshift
);
}
else
{
__m128i
mean128
=
_mm_set1_epi32
(
*
(
uint32_t
*
)
mean16
);
for
(
int
j
=
0
;
j
<
(
nsamps2
<<
1
);
j
++
)
((
__m128i
*
)
buff
[
i
])[
j
]
=
_mm_srai_epi16
(
_mm_subs_epi16
(((
__m128i
*
)
buff_tmp
[
i
])[
j
],
mean128
)
,
rxshift
);
((
__m128i
*
)
buff
[
i
])[
j
]
=
_mm_srai_epi16
(
((
__m128i
*
)
buff_tmp
[
i
])[
j
]
,
rxshift
);
}
#else
__m128i
mean
=
mm_setzero_si128
();
for
(
int
j
=
0
;
j
<
nsamps2
<<
1
;
j
++
)
{
mean
=
_mm_adds_epi32
(
mean
,
_mm_cvtepi16_epi32
(((
__m64
*
)
buff_tmp
[
i
])[
j
]));
}
mean16
[
0
]
=
(
int16_t
)((
_mm_extract_epi32
(
mean
,
0
)
+
_mm_extract_epi32
(
mean
,
2
))
/
nsamps
);
mean16
[
1
]
=
(
int16_t
)((
_mm_extract_epi32
(
mean
,
1
)
+
_mm_extract_epi32
(
mean
,
3
))
/
nsamps
);
mean
=
_mm_set1_epi32
(
*
(
uint32_t
*
)
mean16
);
for
(
int
j
=
0
;
j
<
nsamps2
;
j
++
)
((
__m128i
*
)
buff
[
i
])[
j
]
=
_mm_srai_epi16
(
_mm_subs_epi16
(
buff_tmp
[
i
][
j
],
mean
)
,
rxshift
);
((
__m128i
*
)
buff
[
i
])[
j
]
=
_mm_srai_epi16
(
buff_tmp
[
i
][
j
]
,
rxshift
);
#endif
#elif defined(__arm__)
for
(
int
j
=
0
;
j
<
nsamps2
;
j
++
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment