Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
OpenXG
OpenXG UE
Commits
f091e67f
Commit
f091e67f
authored
Nov 10, 2021
by
hardy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/NR_MCS_BLER' into integration_2021_wk45_c
parents
5203ad32
b3b860bb
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
124 additions
and
17 deletions
+124
-17
ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml
ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml
+2
-2
ci-scripts/xml_files/fr1_nsa_quectel.xml
ci-scripts/xml_files/fr1_nsa_quectel.xml
+2
-2
doc/FEATURE_SET.md
doc/FEATURE_SET.md
+5
-4
openair2/GNB_APP/MACRLC_nr_paramdef.h
openair2/GNB_APP/MACRLC_nr_paramdef.h
+14
-0
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+4
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+69
-1
openair2/LAYER2/NR_MAC_gNB/main.c
openair2/LAYER2/NR_MAC_gNB/main.c
+14
-8
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+14
-0
No files found.
ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml
View file @
f091e67f
...
@@ -113,8 +113,8 @@
...
@@ -113,8 +113,8 @@
<testCase
id=
"070000"
>
<testCase
id=
"070000"
>
<class>
Iperf
</class>
<class>
Iperf
</class>
<desc>
iperf (DL/
2
0Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<desc>
iperf (DL/
6
0Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b
2
0M -t 60
</iperf_args>
<iperf_args>
-u -b
6
0M -t 60
</iperf_args>
<direction>
DL
</direction>
<direction>
DL
</direction>
<id>
nrmodule2_quectel
</id>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
...
...
ci-scripts/xml_files/fr1_nsa_quectel.xml
View file @
f091e67f
...
@@ -110,8 +110,8 @@
...
@@ -110,8 +110,8 @@
<testCase
id=
"070000"
>
<testCase
id=
"070000"
>
<class>
Iperf
</class>
<class>
Iperf
</class>
<desc>
iperf (DL/
2
0Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<desc>
iperf (DL/
6
0Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b
2
0M -t 60
</iperf_args>
<iperf_args>
-u -b
6
0M -t 60
</iperf_args>
<direction>
DL
</direction>
<direction>
DL
</direction>
<id>
idefix
</id>
<id>
idefix
</id>
<iperf_packetloss_threshold>
3
</iperf_packetloss_threshold>
<iperf_packetloss_threshold>
3
</iperf_packetloss_threshold>
...
...
doc/FEATURE_SET.md
View file @
f091e67f
...
@@ -104,7 +104,7 @@ The MAC layer implements a subset of the **3GPP 36.321** release v8.6 in support
...
@@ -104,7 +104,7 @@ The MAC layer implements a subset of the **3GPP 36.321** release v8.6 in support
-
RLC interface (AM, UM)
-
RLC interface (AM, UM)
-
UL power control
-
UL power control
-
Link adaptation
-
Link adaptation
-
Connected DRX (CDRX) support for FDD LTE UE. Compatible with R13 from 3GPP. Support for Cat-M1 UE comming soon.
-
Connected DRX (CDRX) support for FDD LTE UE. Compatible with R13 from 3GPP. Support for Cat-M1 UE comming soon.
## eNB RLC Layer ##
## eNB RLC Layer ##
...
@@ -206,7 +206,7 @@ The Physical layer implements **3GPP 36.211**, **36.212**, **36.213** and provid
...
@@ -206,7 +206,7 @@ The Physical layer implements **3GPP 36.211**, **36.212**, **36.213** and provid
-
PRACH preamble format 0
-
PRACH preamble format 0
-
All downlink (DL) channels are supported: PSS, SSS, PBCH, PCFICH, PHICH, PDCCH, PDSCH, PMCH
-
All downlink (DL) channels are supported: PSS, SSS, PBCH, PCFICH, PHICH, PDCCH, PDSCH, PMCH
-
All uplink (UL) channels are supported: PRACH, PUSCH, PUCCH (format 1/1a/1b), SRS, DRS
-
All uplink (UL) channels are supported: PRACH, PUSCH, PUCCH (format 1/1a/1b), SRS, DRS
-
LTE MBMS-dedicated cell (feMBMS) procedures subset for LTE release 14 (experimental)
-
LTE MBMS-dedicated cell (feMBMS) procedures subset for LTE release 14 (experimental)
-
LTE non-MBSFN subframe (feMBMS) Carrier Adquistion Subframe-CAS procedures (PSS/SSS/PBCH/PDSH) (experimental)
-
LTE non-MBSFN subframe (feMBMS) Carrier Adquistion Subframe-CAS procedures (PSS/SSS/PBCH/PDSH) (experimental)
-
LTE MBSFN MBSFN subframe channel (feMBMS): PMCH (CS@1.25KHz) (channel estimation for 25MHz bandwidth) (experimental)
-
LTE MBSFN MBSFN subframe channel (feMBMS): PMCH (CS@1.25KHz) (channel estimation for 25MHz bandwidth) (experimental)
...
@@ -313,6 +313,7 @@ The following features are valid for the gNB and the 5G-NR UE.
...
@@ -313,6 +313,7 @@ The following features are valid for the gNB and the 5G-NR UE.
-
MAC downlink scheduler
-
MAC downlink scheduler
-
phy-test scheduler (fixed allocation and usable also without UE)
-
phy-test scheduler (fixed allocation and usable also without UE)
-
regular scheduler with dynamic allocation
-
regular scheduler with dynamic allocation
-
MCS adaptation from HARQ BLER
-
MAC header generation (including timing advance)
-
MAC header generation (including timing advance)
-
ACK / NACK handling and HARQ procedures for downlink
-
ACK / NACK handling and HARQ procedures for downlink
-
MAC uplink scheduler
-
MAC uplink scheduler
...
@@ -398,7 +399,7 @@ The following features are valid for the gNB and the 5G-NR UE.
...
@@ -398,7 +399,7 @@ The following features are valid for the gNB and the 5G-NR UE.
-
Creates TUN interface to PDCP to inject and receive user-place traffic
-
Creates TUN interface to PDCP to inject and receive user-place traffic
-
No connection to the core network
-
No connection to the core network
*
Supporting Standalone (SA) mode:
*
Supporting Standalone (SA) mode:
-
UE can register with the 5G Core Network, establish a PDU Session and exchange user-plane traffic
-
UE can register with the 5G Core Network, establish a PDU Session and exchange user-plane traffic
## NR UE PHY Layer ##
## NR UE PHY Layer ##
...
@@ -484,7 +485,7 @@ The following features are valid for the gNB and the 5G-NR UE.
...
@@ -484,7 +485,7 @@ The following features are valid for the gNB and the 5G-NR UE.
-
Interfaces with PDCP, MAC
-
Interfaces with PDCP, MAC
**UE PDCP**
**UE PDCP**
*
Tx/Rx operations according to 38.323 Rel.16
*
Tx/Rx operations according to 38.323 Rel.16
-
Integrity protection and ciphering procedures
-
Integrity protection and ciphering procedures
-
Sequence number management, SDU dicard and in-order delivery
-
Sequence number management, SDU dicard and in-order delivery
-
Radio bearer establishment/handling and association with PDCP entities
-
Radio bearer establishment/handling and association with PDCP entities
...
...
openair2/GNB_APP/MACRLC_nr_paramdef.h
View file @
f091e67f
...
@@ -60,6 +60,11 @@
...
@@ -60,6 +60,11 @@
#define CONFIG_STRING_MACRLC_PUCCHTARGETSNRX10 "pucch_TargetSNRx10"
#define CONFIG_STRING_MACRLC_PUCCHTARGETSNRX10 "pucch_TargetSNRx10"
#define CONFIG_STRING_MACRLC_PUCCHFAILURETHRES "pucch_FailureThres"
#define CONFIG_STRING_MACRLC_PUCCHFAILURETHRES "pucch_FailureThres"
#define CONFIG_STRING_MACRLC_PUSCHFAILURETHRES "pusch_FailureThres"
#define CONFIG_STRING_MACRLC_PUSCHFAILURETHRES "pusch_FailureThres"
#define CONFIG_STRING_MACRLC_DL_BLER_TARGET_UPPER "dl_bler_target_upper"
#define CONFIG_STRING_MACRLC_DL_BLER_TARGET_LOWER "dl_bler_target_lower"
#define CONFIG_STRING_MACRLC_DL_RD2_BLER_THRESHOLD "dl_rd2_bler_threshold"
#define CONFIG_STRING_MACRLC_DL_MAX_MCS "dl_max_mcs"
/*-------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------------------------------------------------------------*/
/* MacRLC configuration parameters */
/* MacRLC configuration parameters */
...
@@ -88,6 +93,10 @@
...
@@ -88,6 +93,10 @@
{CONFIG_STRING_MACRLC_PUCCHTARGETSNRX10, NULL, 0, iptr:NULL, defintval:150, TYPE_INT, 0}, \
{CONFIG_STRING_MACRLC_PUCCHTARGETSNRX10, NULL, 0, iptr:NULL, defintval:150, TYPE_INT, 0}, \
{CONFIG_STRING_MACRLC_PUCCHFAILURETHRES, NULL, 0, iptr:NULL, defintval:10, TYPE_INT, 0}, \
{CONFIG_STRING_MACRLC_PUCCHFAILURETHRES, NULL, 0, iptr:NULL, defintval:10, TYPE_INT, 0}, \
{CONFIG_STRING_MACRLC_PUSCHFAILURETHRES, NULL, 0, iptr:NULL, defintval:10, TYPE_INT, 0}, \
{CONFIG_STRING_MACRLC_PUSCHFAILURETHRES, NULL, 0, iptr:NULL, defintval:10, TYPE_INT, 0}, \
{CONFIG_STRING_MACRLC_DL_BLER_TARGET_UPPER, "Upper threshold of BLER to decrease DL MCS", 0, dblptr:NULL, defdblval:0.15, TYPE_DOUBLE, 0}, \
{CONFIG_STRING_MACRLC_DL_BLER_TARGET_LOWER, "Lower threshold of BLER to increase DL MCS", 0, dblptr:NULL, defdblval:0.05, TYPE_DOUBLE, 0}, \
{CONFIG_STRING_MACRLC_DL_RD2_BLER_THRESHOLD, "Threshold of RD2/RETX2 BLER to decrease DL MCS", 0, dblptr:NULL, defdblval:0.01, TYPE_DOUBLE, 0}, \
{CONFIG_STRING_MACRLC_DL_MAX_MCS, "Maximum DL MCS that should be used", 0, u8ptr:NULL, defintval:28, TYPE_UINT8, 0}, \
}
}
#define MACRLC_CC_IDX 0
#define MACRLC_CC_IDX 0
#define MACRLC_TRANSPORT_N_PREFERENCE_IDX 1
#define MACRLC_TRANSPORT_N_PREFERENCE_IDX 1
...
@@ -111,5 +120,10 @@
...
@@ -111,5 +120,10 @@
#define MACRLC_PUCCHTARGETSNRX10_IDX 19
#define MACRLC_PUCCHTARGETSNRX10_IDX 19
#define MACRLC_PUCCHFAILURETHRES_IDX 20
#define MACRLC_PUCCHFAILURETHRES_IDX 20
#define MACRLC_PUSCHFAILURETHRES_IDX 21
#define MACRLC_PUSCHFAILURETHRES_IDX 21
#define MACRLC_DL_BLER_TARGET_UPPER_IDX 22
#define MACRLC_DL_BLER_TARGET_LOWER_IDX 23
#define MACRLC_DL_RD2_BLER_THRESHOLD_IDX 24
#define MACRLC_DL_MAX_MCS_IDX 25
/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/
#endif
#endif
openair2/GNB_APP/gnb_config.c
View file @
f091e67f
...
@@ -755,6 +755,10 @@ void RCconfig_nr_macrlc() {
...
@@ -755,6 +755,10 @@ 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
));
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_frame_inactivity
=
*
(
MacRLC_ParamList
.
paramarray
[
j
][
MACRLC_ULSCH_MAX_FRAME_INACTIVITY
].
uptr
);
RC
.
nrmac
[
j
]
->
ulsch_max_frame_inactivity
=
*
(
MacRLC_ParamList
.
paramarray
[
j
][
MACRLC_ULSCH_MAX_FRAME_INACTIVITY
].
uptr
);
RC
.
nrmac
[
j
]
->
dl_bler_target_upper
=
*
(
MacRLC_ParamList
.
paramarray
[
j
][
MACRLC_DL_BLER_TARGET_UPPER_IDX
].
dblptr
);
RC
.
nrmac
[
j
]
->
dl_bler_target_lower
=
*
(
MacRLC_ParamList
.
paramarray
[
j
][
MACRLC_DL_BLER_TARGET_LOWER_IDX
].
dblptr
);
RC
.
nrmac
[
j
]
->
dl_rd2_bler_threshold
=
*
(
MacRLC_ParamList
.
paramarray
[
j
][
MACRLC_DL_RD2_BLER_THRESHOLD_IDX
].
dblptr
);
RC
.
nrmac
[
j
]
->
dl_max_mcs
=
*
(
MacRLC_ParamList
.
paramarray
[
j
][
MACRLC_DL_MAX_MCS_IDX
].
u8ptr
);
RC
.
nrmac
[
j
]
->
num_ulprbbl
=
num_prbbl
;
RC
.
nrmac
[
j
]
->
num_ulprbbl
=
num_prbbl
;
LOG_I
(
NR_MAC
,
"Blacklisted PRBS %d
\n
"
,
num_prbbl
);
LOG_I
(
NR_MAC
,
"Blacklisted PRBS %d
\n
"
,
num_prbbl
);
memcpy
(
RC
.
nrmac
[
j
]
->
ulprbbl
,
prbbl
,
275
*
sizeof
(
prbbl
[
0
]));
memcpy
(
RC
.
nrmac
[
j
]
->
ulprbbl
,
prbbl
,
275
*
sizeof
(
prbbl
[
0
]));
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
f091e67f
...
@@ -382,6 +382,74 @@ int nr_write_ce_dlsch_pdu(module_id_t module_idP,
...
@@ -382,6 +382,74 @@ int nr_write_ce_dlsch_pdu(module_id_t module_idP,
return
offset
;
return
offset
;
}
}
#define BLER_UPDATE_FRAME 10
#define BLER_FILTER 0.9f
int
get_mcs_from_bler
(
module_id_t
mod_id
,
int
CC_id
,
frame_t
frame
,
sub_frame_t
slot
,
int
UE_id
)
{
gNB_MAC_INST
*
nrmac
=
RC
.
nrmac
[
mod_id
];
const
NR_ServingCellConfigCommon_t
*
scc
=
nrmac
->
common_channels
[
CC_id
].
ServingCellConfigCommon
;
const
int
n
=
nr_slots_per_frame
[
*
scc
->
ssbSubcarrierSpacing
];
NR_DL_bler_stats_t
*
bler_stats
=
&
nrmac
->
UE_info
.
UE_sched_ctrl
[
UE_id
].
dl_bler_stats
;
/* first call: everything is zero. Initialize to sensible default */
if
(
bler_stats
->
last_frame_slot
==
0
&&
bler_stats
->
mcs
==
0
)
{
bler_stats
->
last_frame_slot
=
frame
*
n
+
slot
;
bler_stats
->
mcs
=
9
;
bler_stats
->
bler
=
(
nrmac
->
dl_bler_target_lower
+
nrmac
->
dl_bler_target_upper
)
/
2
;
bler_stats
->
rd2_bler
=
nrmac
->
dl_rd2_bler_threshold
;
}
const
int
now
=
frame
*
n
+
slot
;
int
diff
=
now
-
bler_stats
->
last_frame_slot
;
if
(
diff
<
0
)
// wrap around
diff
+=
1024
*
n
;
const
uint8_t
old_mcs
=
bler_stats
->
mcs
;
const
NR_mac_stats_t
*
stats
=
&
nrmac
->
UE_info
.
mac_stats
[
UE_id
];
// TODO put back this condition when relevant
/*const int dret3x = stats->dlsch_rounds[3] - bler_stats->dlsch_rounds[3];
if (dret3x > 0) {
if there is a third retransmission, decrease MCS for stabilization and
restart averaging window to stabilize transmission
bler_stats->last_frame_slot = now;
bler_stats->mcs = max(9, bler_stats->mcs - 1);
memcpy(bler_stats->dlsch_rounds, stats->dlsch_rounds, sizeof(stats->dlsch_rounds));
LOG_D(MAC, "%4d.%2d: %d retx in 3rd round, setting MCS to %d and restarting window\n", frame, slot, dret3x, bler_stats->mcs);
return bler_stats->mcs;
}*/
if
(
diff
<
BLER_UPDATE_FRAME
*
n
)
return
old_mcs
;
// no update
// last update is longer than x frames ago
const
int
dtx
=
stats
->
dlsch_rounds
[
0
]
-
bler_stats
->
dlsch_rounds
[
0
];
const
int
dretx
=
stats
->
dlsch_rounds
[
1
]
-
bler_stats
->
dlsch_rounds
[
1
];
const
int
dretx2
=
stats
->
dlsch_rounds
[
2
]
-
bler_stats
->
dlsch_rounds
[
2
];
const
float
bler_window
=
dtx
>
0
?
(
float
)
dretx
/
dtx
:
bler_stats
->
bler
;
const
float
rd2_bler_wnd
=
dtx
>
0
?
(
float
)
dretx2
/
dtx
:
bler_stats
->
rd2_bler
;
bler_stats
->
bler
=
BLER_FILTER
*
bler_stats
->
bler
+
(
1
-
BLER_FILTER
)
*
bler_window
;
bler_stats
->
rd2_bler
=
BLER_FILTER
/
4
*
bler_stats
->
rd2_bler
+
(
1
-
BLER_FILTER
/
4
)
*
rd2_bler_wnd
;
int
new_mcs
=
old_mcs
;
// TODO put back this condition when relevant
/* first ensure that number of 2nd retx is below threshold. If this is the
* case, use 1st retx to adjust faster
if (bler_stats->rd2_bler > nrmac->dl_rd2_bler_threshold && old_mcs > 6) {
new_mcs -= 2;
} else if (bler_stats->rd2_bler < nrmac->dl_rd2_bler_threshold) {*/
if
(
bler_stats
->
bler
<
nrmac
->
dl_bler_target_lower
&&
old_mcs
<
nrmac
->
dl_max_mcs
&&
dtx
>
9
)
new_mcs
+=
1
;
else
if
(
bler_stats
->
bler
>
nrmac
->
dl_bler_target_upper
&&
old_mcs
>
6
)
new_mcs
-=
1
;
// else we are within threshold boundaries
bler_stats
->
last_frame_slot
=
now
;
bler_stats
->
mcs
=
new_mcs
;
memcpy
(
bler_stats
->
dlsch_rounds
,
stats
->
dlsch_rounds
,
sizeof
(
stats
->
dlsch_rounds
));
LOG_D
(
MAC
,
"%4d.%2d MCS %d -> %d (dtx %d, dretx %d, BLER wnd %.3f avg %.6f, dretx2 %d, RD2 BLER wnd %.3f avg %.6f)
\n
"
,
frame
,
slot
,
old_mcs
,
new_mcs
,
dtx
,
dretx
,
bler_window
,
bler_stats
->
bler
,
dretx2
,
rd2_bler_wnd
,
bler_stats
->
rd2_bler
);
return
new_mcs
;
}
void
nr_store_dlsch_buffer
(
module_id_t
module_id
,
void
nr_store_dlsch_buffer
(
module_id_t
module_id
,
frame_t
frame
,
frame_t
frame
,
sub_frame_t
slot
)
{
sub_frame_t
slot
)
{
...
@@ -630,8 +698,8 @@ void pf_dl(module_id_t module_id,
...
@@ -630,8 +698,8 @@ void pf_dl(module_id_t module_id,
continue
;
continue
;
/* Calculate coeff */
/* Calculate coeff */
sched_pdsch
->
mcs
=
9
;
ps
->
nrOfLayers
=
1
;
ps
->
nrOfLayers
=
1
;
sched_pdsch
->
mcs
=
get_mcs_from_bler
(
module_id
,
/* CC_id = */
0
,
frame
,
slot
,
UE_id
);
uint32_t
tbs
=
pf_tbs
[
ps
->
mcsTableIdx
][
sched_pdsch
->
mcs
];
uint32_t
tbs
=
pf_tbs
[
ps
->
mcsTableIdx
][
sched_pdsch
->
mcs
];
coeff_ue
[
UE_id
]
=
(
float
)
tbs
/
thr_ue
[
UE_id
];
coeff_ue
[
UE_id
]
=
(
float
)
tbs
/
thr_ue
[
UE_id
];
LOG_D
(
NR_MAC
,
"b %d, thr_ue[%d] %f, tbs %d, coeff_ue[%d] %f
\n
"
,
LOG_D
(
NR_MAC
,
"b %d, thr_ue[%d] %f, tbs %d, coeff_ue[%d] %f
\n
"
,
...
...
openair2/LAYER2/NR_MAC_gNB/main.c
View file @
f091e67f
...
@@ -81,22 +81,28 @@ void dump_mac_stats(gNB_MAC_INST *gNB, char *output, int strlen)
...
@@ -81,22 +81,28 @@ void dump_mac_stats(gNB_MAC_INST *gNB, char *output, int strlen)
for
(
int
UE_id
=
UE_info
->
list
.
head
;
UE_id
>=
0
;
UE_id
=
UE_info
->
list
.
next
[
UE_id
])
{
for
(
int
UE_id
=
UE_info
->
list
.
head
;
UE_id
>=
0
;
UE_id
=
UE_info
->
list
.
next
[
UE_id
])
{
stroff
+=
sprintf
(
output
+
stroff
,
"UE ID %d RNTI %04x (%d/%d) PH %d dB PCMAX %d dBm
\n
"
,
const
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE_info
->
UE_sched_ctrl
[
UE_id
];
NR_mac_stats_t
*
stats
=
&
UE_info
->
mac_stats
[
UE_id
];
const
int
avg_rsrp
=
stats
->
num_rsrp_meas
>
0
?
stats
->
cumul_rsrp
/
stats
->
num_rsrp_meas
:
0
;
stroff
+=
sprintf
(
output
+
stroff
,
"UE ID %d RNTI %04x (%d/%d) PH %d dB PCMAX %d dBm, average RSRP %d (%d meas)
\n
"
,
UE_id
,
UE_id
,
UE_info
->
rnti
[
UE_id
],
UE_info
->
rnti
[
UE_id
],
num
++
,
num
++
,
UE_info
->
num_UEs
,
UE_info
->
num_UEs
,
UE_info
->
UE_sched_ctrl
[
UE_id
].
ph
,
sched_ctrl
->
ph
,
UE_info
->
UE_sched_ctrl
[
UE_id
].
pcmax
);
sched_ctrl
->
pcmax
,
avg_rsrp
,
stats
->
num_rsrp_meas
);
NR_mac_stats_t
*
stats
=
&
UE_info
->
mac_stats
[
UE_id
];
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: dlsch_rounds %d/%d/%d/%d, dlsch_errors %d, pucch0_DTX %d, BLER %.5f MCS %d
\n
"
,
const
int
avg_rsrp
=
stats
->
num_rsrp_meas
>
0
?
stats
->
cumul_rsrp
/
stats
->
num_rsrp_meas
:
0
;
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: dlsch_rounds %d/%d/%d/%d, dlsch_errors %d, pucch0_DTX %d average RSRP %d (%d meas)
\n
"
,
UE_id
,
UE_id
,
stats
->
dlsch_rounds
[
0
],
stats
->
dlsch_rounds
[
1
],
stats
->
dlsch_rounds
[
0
],
stats
->
dlsch_rounds
[
1
],
stats
->
dlsch_rounds
[
2
],
stats
->
dlsch_rounds
[
3
],
stats
->
dlsch_errors
,
stats
->
dlsch_rounds
[
2
],
stats
->
dlsch_rounds
[
3
],
stats
->
dlsch_errors
,
stats
->
pucch0_DTX
,
stats
->
pucch0_DTX
,
avg_rsrp
,
stats
->
num_rsrp_meas
);
sched_ctrl
->
dl_bler_stats
.
bler
,
sched_ctrl
->
dl_bler_stats
.
mcs
);
stats
->
num_rsrp_meas
=
0
;
stats
->
num_rsrp_meas
=
0
;
stats
->
cumul_rsrp
=
0
;
stats
->
cumul_rsrp
=
0
;
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: dlsch_total_bytes %d
\n
"
,
UE_id
,
stats
->
dlsch_total_bytes
);
stroff
+=
sprintf
(
output
+
stroff
,
"UE %d: dlsch_total_bytes %d
\n
"
,
UE_id
,
stats
->
dlsch_total_bytes
);
...
...
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
View file @
f091e67f
...
@@ -422,6 +422,13 @@ typedef struct NR_UE_harq {
...
@@ -422,6 +422,13 @@ typedef struct NR_UE_harq {
//! fixme : need to enhace for the multiple TB CQI report
//! fixme : need to enhace for the multiple TB CQI report
typedef
struct
NR_DL_bler_stats
{
frame_t
last_frame_slot
;
float
bler
;
float
rd2_bler
;
uint8_t
mcs
;
int
dlsch_rounds
[
8
];
}
NR_DL_bler_stats_t
;
//
//
/*! As per spec 38.214 section 5.2.1.4.2
/*! As per spec 38.214 section 5.2.1.4.2
...
@@ -565,6 +572,9 @@ typedef struct {
...
@@ -565,6 +572,9 @@ typedef struct {
/// per-LC status data
/// per-LC status data
mac_rlc_status_resp_t
rlc_status
[
MAX_NUM_LCID
];
mac_rlc_status_resp_t
rlc_status
[
MAX_NUM_LCID
];
/// Estimation of HARQ from BLER
NR_DL_bler_stats_t
dl_bler_stats
;
int
lcid_mask
;
int
lcid_mask
;
int
lcid_to_schedule
;
int
lcid_to_schedule
;
uint16_t
ta_frame
;
uint16_t
ta_frame
;
...
@@ -763,6 +773,10 @@ typedef struct gNB_MAC_INST_s {
...
@@ -763,6 +773,10 @@ typedef struct gNB_MAC_INST_s {
NR_Type0_PDCCH_CSS_config_t
type0_PDCCH_CSS_config
[
64
];
NR_Type0_PDCCH_CSS_config_t
type0_PDCCH_CSS_config
[
64
];
bool
first_MIB
;
bool
first_MIB
;
double
dl_bler_target_upper
;
double
dl_bler_target_lower
;
double
dl_rd2_bler_threshold
;
uint8_t
dl_max_mcs
;
}
gNB_MAC_INST
;
}
gNB_MAC_INST
;
#endif
/*__LAYER2_NR_MAC_GNB_H__ */
#endif
/*__LAYER2_NR_MAC_GNB_H__ */
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