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
lizhongxiao
OpenXG-RAN
Commits
b7f958a8
Commit
b7f958a8
authored
Aug 31, 2022
by
Marwan Hammouda
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Scopes for DL BLER and MCS at the gNB side added
parent
ff206dba
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
276 additions
and
5 deletions
+276
-5
openair1/PHY/TOOLS/nr_phy_qt_scope.cpp
openair1/PHY/TOOLS/nr_phy_qt_scope.cpp
+192
-3
openair1/PHY/TOOLS/nr_phy_qt_scope.h
openair1/PHY/TOOLS/nr_phy_qt_scope.h
+12
-1
openair1/PHY/TOOLS/phy_scope_interface.h
openair1/PHY/TOOLS/phy_scope_interface.h
+22
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+32
-0
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
+3
-0
openair2/LAYER2/NR_MAC_gNB/main.c
openair2/LAYER2/NR_MAC_gNB/main.c
+15
-1
No files found.
openair1/PHY/TOOLS/nr_phy_qt_scope.cpp
View file @
b7f958a8
...
...
@@ -46,9 +46,9 @@ KPIListSelectgNB::KPIListSelectgNB(QWidget *parent) : QComboBox(parent)
this
->
addItem
(
"I/Q PUSCH"
,
0
);
this
->
addItem
(
"LLR PUSCH"
,
1
);
this
->
addItem
(
"Channel Response"
,
2
);
this
->
addItem
(
"
KPI4
"
,
3
);
this
->
addItem
(
"
KPI5
"
,
4
);
this
->
addItem
(
"
KPI6
"
,
5
);
this
->
addItem
(
"
UL BLER
"
,
3
);
this
->
addItem
(
"
DL BLER
"
,
4
);
this
->
addItem
(
"
DL MCS
"
,
5
);
}
KPIListSelectgNB
::~
KPIListSelectgNB
()
{
...
...
@@ -67,6 +67,29 @@ PainterWidgetgNB::PainterWidgetgNB(QComboBox *parent, scopeData_t *p)
this
->
indexToPlot
=
this
->
parentWindow
->
currentIndex
();
//
this
->
extendKPIgNB
.
UP_BLER
=
-
1.0
;
this
->
idx_ULBLER
=
0
;
this
->
seriesULBLER
=
new
QLineSeries
();
QColor
MarkerColor
(
255
,
0
,
0
);
this
->
seriesULBLER
->
setColor
(
MarkerColor
);
//
// DL BLER
this
->
extendKPIgNB_1
.
DL_BLER
=
0.0
;
this
->
extendKPIgNB_1
.
idx_DLBLER
=
0
;
this
->
seriesDLBLER
=
new
QLineSeries
();
this
->
seriesDLBLER
->
setColor
(
QColor
(
0
,
255
,
0
));
// DL MCS
this
->
extendKPIgNB_1
.
idx_DLMCS
=
0
;
this
->
extendKPIgNB_1
.
DL_MCS
=
0.0
;
this
->
seriesDLMCS
=
new
QLineSeries
();
this
->
seriesDLMCS
->
setColor
(
QColor
(
0
,
0
,
255
));
makeConnections
();
}
...
...
@@ -85,6 +108,7 @@ void PainterWidgetgNB::paintEvent(QPaintEvent *)
void
PainterWidgetgNB
::
makeConnections
()
{
getKPIgNB
(
&
this
->
extendKPIgNB_1
);
disconnect
(
timer
,
nullptr
,
nullptr
,
nullptr
);
...
...
@@ -100,11 +124,174 @@ void PainterWidgetgNB::makeConnections()
{
connect
(
timer
,
&
QTimer
::
timeout
,
this
,
&
PainterWidgetgNB
::
KPI_ChannelResponse
);
}
else
if
(
this
->
indexToPlot
==
3
)
{
this
->
extendKPIgNB
.
UP_BLER
=
returnULBLER
();
this
->
idx_ULBLER
++
;
if
(
this
->
idx_ULBLER
>
this
->
chartWidth
)
{
this
->
seriesULBLER
=
new
QLineSeries
();
this
->
seriesULBLER
->
setColor
(
QColor
(
255
,
0
,
0
));
this
->
idx_ULBLER
=
0
;
}
connect
(
timer
,
&
QTimer
::
timeout
,
this
,
&
PainterWidgetgNB
::
KPI_UL_BLER
);
}
else
if
(
this
->
indexToPlot
==
4
)
{
this
->
extendKPIgNB_1
.
idx_DLBLER
++
;
if
(
this
->
extendKPIgNB_1
.
idx_DLBLER
>
this
->
chartWidth
)
{
this
->
extendKPIgNB_1
.
idx_DLBLER
=
0
;
this
->
seriesDLBLER
=
new
QLineSeries
();
this
->
seriesDLBLER
->
setColor
(
QColor
(
0
,
255
,
0
));
}
connect
(
timer
,
&
QTimer
::
timeout
,
this
,
&
PainterWidgetgNB
::
KPI_DL_BLER
);
}
else
if
(
this
->
indexToPlot
==
5
)
{
this
->
extendKPIgNB_1
.
idx_DLMCS
++
;
if
(
this
->
extendKPIgNB_1
.
idx_DLMCS
>
this
->
chartWidth
)
{
this
->
extendKPIgNB_1
.
idx_DLMCS
=
0
;
this
->
seriesDLMCS
=
new
QLineSeries
();
this
->
seriesDLMCS
->
setColor
(
QColor
(
0
,
0
,
0
));
}
connect
(
timer
,
&
QTimer
::
timeout
,
this
,
&
PainterWidgetgNB
::
KPI_DL_MCS
);
}
timer
->
start
(
100
);
// paintPixmap_xx every 100ms
}
void
PainterWidgetgNB
::
KPI_DL_MCS
()
{
// erase the previous paint
this
->
pix
->
fill
(
QColor
(
240
,
240
,
240
));
float
Xpaint
,
Ypaint
;
Xpaint
=
this
->
extendKPIgNB_1
.
idx_DLMCS
;
Ypaint
=
this
->
extendKPIgNB_1
.
DL_MCS
;
this
->
seriesDLMCS
->
append
(
Xpaint
,
Ypaint
);
QChart
*
chart
=
new
QChart
();
chart
->
legend
()
->
hide
();
int
nofTicks
=
6
;
QValueAxis
*
axisX
=
new
QValueAxis
;
axisX
->
setTickCount
(
nofTicks
);
axisX
->
setRange
(
0
,
this
->
chartWidth
);
axisX
->
setTitleText
(
"Time Index (calc window: 100 ms)"
);
chart
->
addAxis
(
axisX
,
Qt
::
AlignBottom
);
QValueAxis
*
axisY
=
new
QValueAxis
;
axisY
->
setTickCount
(
nofTicks
);
axisY
->
setRange
(
-
1
,
1.5
);
axisY
->
setTitleText
(
"DL MCS"
);
chart
->
addAxis
(
axisY
,
Qt
::
AlignLeft
);
chart
->
addSeries
(
this
->
seriesDLMCS
);
this
->
seriesDLMCS
->
attachAxis
(
axisX
);
this
->
seriesDLMCS
->
attachAxis
(
axisY
);
QChartView
*
chartView
=
new
QChartView
(
chart
);
chartView
->
resize
(
this
->
chartWidth
,
this
->
chartHight
);
QPixmap
p
=
chartView
->
grab
();
*
this
->
pix
=
p
;
update
();
}
void
PainterWidgetgNB
::
KPI_DL_BLER
()
{
// erase the previous paint
this
->
pix
->
fill
(
QColor
(
240
,
240
,
240
));
float
Xpaint
,
Ypaint
;
Xpaint
=
this
->
extendKPIgNB_1
.
idx_DLBLER
;
Ypaint
=
this
->
extendKPIgNB_1
.
DL_BLER
;
this
->
seriesDLBLER
->
append
(
Xpaint
,
Ypaint
);
QChart
*
chart
=
new
QChart
();
chart
->
legend
()
->
hide
();
int
nofTicks
=
6
;
QValueAxis
*
axisX
=
new
QValueAxis
;
axisX
->
setTickCount
(
nofTicks
);
axisX
->
setRange
(
0
,
this
->
chartWidth
);
axisX
->
setTitleText
(
"Time Index (calc window: 100 ms)"
);
chart
->
addAxis
(
axisX
,
Qt
::
AlignBottom
);
QValueAxis
*
axisY
=
new
QValueAxis
;
axisY
->
setTickCount
(
nofTicks
);
axisY
->
setRange
(
-
1
,
1.5
);
axisY
->
setTitleText
(
"DL BLER"
);
chart
->
addAxis
(
axisY
,
Qt
::
AlignLeft
);
chart
->
addSeries
(
this
->
seriesDLBLER
);
this
->
seriesDLBLER
->
attachAxis
(
axisX
);
this
->
seriesDLBLER
->
attachAxis
(
axisY
);
QChartView
*
chartView
=
new
QChartView
(
chart
);
chartView
->
resize
(
this
->
chartWidth
,
this
->
chartHight
);
QPixmap
p
=
chartView
->
grab
();
*
this
->
pix
=
p
;
update
();
}
void
PainterWidgetgNB
::
KPI_UL_BLER
()
{
// erase the previous paint
this
->
pix
->
fill
(
QColor
(
240
,
240
,
240
));
std
::
cout
<<
"UL BLER: "
<<
this
->
extendKPIgNB
.
UP_BLER
<<
std
::
endl
;
float
Xpaint
,
Ypaint
;
Xpaint
=
this
->
idx_ULBLER
;
std
::
cout
<<
"*** FromWidget: "
<<
this
->
extendKPIgNB
.
UP_BLER
<<
std
::
endl
;
Ypaint
=
this
->
extendKPIgNB
.
UP_BLER
;
this
->
seriesULBLER
->
append
(
Xpaint
,
Ypaint
);
QChart
*
chart
=
new
QChart
();
chart
->
legend
()
->
hide
();
int
nofTicks
=
6
;
QValueAxis
*
axisX
=
new
QValueAxis
;
axisX
->
setTickCount
(
nofTicks
);
axisX
->
setRange
(
0
,
this
->
chartWidth
);
axisX
->
setTitleText
(
"Time Index (calc window: 100 ms)"
);
chart
->
addAxis
(
axisX
,
Qt
::
AlignBottom
);
QValueAxis
*
axisY
=
new
QValueAxis
;
axisY
->
setTickCount
(
nofTicks
);
axisY
->
setRange
(
-
1
,
1.5
);
axisY
->
setTitleText
(
"UL BLER"
);
chart
->
addAxis
(
axisY
,
Qt
::
AlignLeft
);
chart
->
addSeries
(
this
->
seriesULBLER
);
this
->
seriesULBLER
->
attachAxis
(
axisX
);
this
->
seriesULBLER
->
attachAxis
(
axisY
);
QChartView
*
chartView
=
new
QChartView
(
chart
);
chartView
->
resize
(
this
->
chartWidth
,
this
->
chartHight
);
QPixmap
p
=
chartView
->
grab
();
*
this
->
pix
=
p
;
update
();
}
void
PainterWidgetgNB
::
KPI_PuschIQ
()
{
// erase the previous paint
...
...
@@ -269,6 +456,8 @@ void PainterWidgetgNB::KPI_ChannelResponse()
update
();
}
void
PainterWidgetgNB
::
createPixMap
(
float
*
xData
,
float
*
yData
,
int
len
,
QColor
MarkerColor
,
const
QString
xLabel
,
const
QString
yLabel
,
bool
scaleX
)
{
...
...
openair1/PHY/TOOLS/nr_phy_qt_scope.h
View file @
b7f958a8
...
...
@@ -38,6 +38,7 @@ extern "C" {
#include "PHY/defs_RU.h"
#include "executables/softmodem-common.h"
#include "phy_scope_interface.h"
#include "openair2/LAYER2/NR_MAC_gNB/mac_proto.h"
}
// drop-down list UE
...
...
@@ -142,7 +143,6 @@ public:
void
makeConnections
();
void
createPixMap
(
float
*
xData
,
float
*
yData
,
int
len
,
QColor
MarkerColor
,
const
QString
xLabel
,
const
QString
yLabel
,
bool
scaleX
);
QPixmap
*
pix
;
QTimer
*
timer
;
int
chartHight
,
chartWidth
;
...
...
@@ -150,6 +150,14 @@ public:
QComboBox
*
parentWindow
;
extended_kpi
extendKPIgNB
;
extended_kpi_gNB
extendKPIgNB_1
;
int
idx_ULBLER
;
QLineSeries
*
seriesULBLER
;
QLineSeries
*
seriesDLBLER
;
QLineSeries
*
seriesDLMCS
;
protected:
void
paintEvent
(
QPaintEvent
*
event
);
...
...
@@ -157,6 +165,9 @@ public slots:
void
KPI_PuschIQ
();
void
KPI_PuschLLR
();
void
KPI_ChannelResponse
();
void
KPI_UL_BLER
();
void
KPI_DL_BLER
();
void
KPI_DL_MCS
();
private:
scopeData_t
*
p
;
...
...
openair1/PHY/TOOLS/phy_scope_interface.h
View file @
b7f958a8
...
...
@@ -34,6 +34,25 @@
#include <openair1/PHY/defs_gNB.h>
#include <openair1/PHY/defs_nr_UE.h>
typedef
struct
{
float
UP_BLER
;
// Uplink BLock Error Rate
float
UP_MCS
;
// Uplink MCS
float
DL_BLER
;
// Downlink BLock Error Rate
float
DL_MCS
;
// Downlink MCS
}
extended_kpi
;
typedef
struct
{
float
UL_BLER
;
// Uplink BLock Error Rate
float
UL_MCS
;
// Uplink MCS
float
DL_BLER
;
// Downlink BLock Error Rate
float
DL_MCS
;
// Downlink MCS
int
idx_DLBLER
;
int
idx_DLMCS
;
}
extended_kpi_gNB
;
typedef
struct
{
int
*
argc
;
char
**
argv
;
...
...
@@ -68,4 +87,7 @@ int end_forms(void) ;
#define UEscopeCopy(ue, type, ...) if(ue->scopeData) ((scopeData_t*)ue->scopeData)->copyData(ue, type, ##__VA_ARGS__);
#define gNBscopeCopy(gNB, type, data, elementSZ, colSz, lineSz) if(gNB->scopeData) ((scopeData_t*)gNB->scopeData)->copyDatagNB(gNB, type, data, elementSZ, colSz, lineSz);
void
getKPIgNB
(
extended_kpi_gNB
*
kpiStructure
);
#endif
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
b7f958a8
...
...
@@ -38,6 +38,17 @@
#include "LAYER2/NR_MAC_COMMON/nr_mac_extern.h"
//#define SRS_IND_DEBUG
static
int
nofBlocks
=
0
;
static
int
nofErrors
=
0
;
int
get_dci_format
(
NR_UE_sched_ctrl_t
*
sched_ctrl
)
{
int
dci_format
=
sched_ctrl
->
search_space
&&
sched_ctrl
->
search_space
->
searchSpaceType
&&
sched_ctrl
->
search_space
->
searchSpaceType
->
present
==
NR_SearchSpace__searchSpaceType_PR_ue_Specific
?
NR_UL_DCI_FORMAT_0_1
:
NR_UL_DCI_FORMAT_0_0
;
return
(
dci_format
);
}
const
int
get_ul_tda
(
const
gNB_MAC_INST
*
nrmac
,
const
NR_ServingCellConfigCommon_t
*
scc
,
int
slot
)
{
...
...
@@ -425,6 +436,8 @@ int nr_process_mac_pdu(instance_t module_idP,
void
abort_nr_ul_harq
(
NR_UE_info_t
*
UE
,
int8_t
harq_pid
)
{
nofErrors
++
;
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE
->
UE_sched_ctrl
;
NR_UE_ul_harq_t
*
harq
=
&
sched_ctrl
->
ul_harq_processes
[
harq_pid
];
...
...
@@ -440,6 +453,16 @@ void abort_nr_ul_harq(NR_UE_info_t *UE, int8_t harq_pid)
sched_ctrl
->
sched_ul_bytes
=
0
;
}
float
returnULBLER
(
void
)
{
float
BLER
=
(
float
)
nofErrors
/
(
float
)
nofBlocks
;
nofErrors
=
0
;
nofBlocks
=
0
;
return
BLER
;
}
void
handle_nr_ul_harq
(
const
int
CC_idP
,
module_id_t
mod_id
,
frame_t
frame
,
...
...
@@ -481,12 +504,15 @@ void handle_nr_ul_harq(const int CC_idP,
}
harq_pid
=
sched_ctrl
->
feedback_ul_harq
.
head
;
}
remove_front_nr_list
(
&
sched_ctrl
->
feedback_ul_harq
);
NR_UE_ul_harq_t
*
harq
=
&
sched_ctrl
->
ul_harq_processes
[
harq_pid
];
DevAssert
(
harq
->
is_waiting
);
harq
->
feedback_slot
=
-
1
;
harq
->
is_waiting
=
false
;
if
(
!
crc_pdu
->
tb_crc_status
)
{
nofBlocks
++
;
harq
->
ndi
^=
1
;
harq
->
round
=
0
;
LOG_D
(
NR_MAC
,
...
...
@@ -494,7 +520,11 @@ void handle_nr_ul_harq(const int CC_idP,
harq_pid
,
crc_pdu
->
rnti
);
add_tail_nr_list
(
&
sched_ctrl
->
available_ul_harq
,
harq_pid
);
}
else
if
(
harq
->
round
>=
RC
.
nrmac
[
mod_id
]
->
ul_bler
.
harq_round_max
-
1
)
{
}
else
if
(
harq
->
round
>=
RC
.
nrmac
[
mod_id
]
->
harq_round_max
-
1
)
{
nofBlocks
++
;
abort_nr_ul_harq
(
UE
,
harq_pid
);
LOG_D
(
NR_MAC
,
"RNTI %04x: Ulharq id %d crc failed in all rounds
\n
"
,
...
...
@@ -508,6 +538,8 @@ void handle_nr_ul_harq(const int CC_idP,
crc_pdu
->
rnti
);
add_tail_nr_list
(
&
sched_ctrl
->
retrans_ul_harq
,
harq_pid
);
}
printf
(
"nofBlocks: %i, nofErrors: %i, rnti: %u
\n
"
,
nofBlocks
,
nofErrors
,
crc_pdu
->
rnti
);
}
/*
...
...
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
View file @
b7f958a8
...
...
@@ -438,6 +438,7 @@ void handle_nr_ul_harq(const int CC_idP,
sub_frame_t
slot
,
const
nfapi_nr_crc_t
*
crc_pdu
);
void
handle_nr_srs_measurements
(
const
module_id_t
module_id
,
const
frame_t
frame
,
const
sub_frame_t
slot
,
...
...
@@ -448,6 +449,8 @@ void handle_nr_srs_measurements(const module_id_t module_id,
const
uint8_t
num_reported_symbols
,
nfapi_nr_srs_indication_reported_symbol_t
*
reported_symbol_list
);
float
returnULBLER
(
void
);
int16_t
ssb_index_from_prach
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
slotP
,
...
...
openair2/LAYER2/NR_MAC_gNB/main.c
View file @
b7f958a8
...
...
@@ -42,7 +42,11 @@
#include "common/ran_context.h"
#include "executables/softmodem-common.h"
#include "openair1/PHY/TOOLS/phy_scope_interface.h"
extern
RAN_CONTEXT_t
RC
;
static
float
DL_BLER
=
0
.
0
;
static
float
DL_MCS
=
0
.
0
;
#define MACSTATSSTRLEN 16000
...
...
@@ -73,6 +77,12 @@ void *nrmac_stats_thread(void *arg) {
return
NULL
;
}
void
getKPIgNB
(
extended_kpi_gNB
*
kpiStructure
)
{
kpiStructure
->
DL_BLER
=
DL_BLER
;
kpiStructure
->
DL_MCS
=
DL_MCS
;
}
void
clear_mac_stats
(
gNB_MAC_INST
*
gNB
)
{
UE_iterator
(
gNB
->
UE_info
.
list
,
UE
)
{
memset
(
&
UE
->
mac_stats
,
0
,
sizeof
(
UE
->
mac_stats
));
...
...
@@ -123,7 +133,11 @@ size_t dump_mac_stats(gNB_MAC_INST *gNB, char *output, size_t strlen, bool reset
stats
->
dl
.
errors
,
stats
->
pucch0_DTX
,
sched_ctrl
->
dl_bler_stats
.
bler
,
sched_ctrl
->
dl_bler_stats
.
mcs
);
sched_ctrl
->
dl_bler_stats
.
mcs
);
DL_BLER
=
sched_ctrl
->
dl_bler_stats
.
bler
;
DL_MCS
=
sched_ctrl
->
dl_bler_stats
.
mcs
;
if
(
reset_rsrp
)
{
stats
->
num_rsrp_meas
=
0
;
stats
->
cumul_rsrp
=
0
;
...
...
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