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
7efe5880
Commit
7efe5880
authored
Aug 03, 2023
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'NR_SL_PSBCH_2' into sl-eurecom2
parents
9ecd473a
b9caf3ec
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
88 additions
and
27 deletions
+88
-27
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+7
-2
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync_sl.c
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync_sl.c
+1
-1
openair1/PHY/NR_UE_TRANSPORT/nr_psbch_rx.c
openair1/PHY/NR_UE_TRANSPORT/nr_psbch_rx.c
+3
-4
openair1/PHY/TOOLS/nr_phy_qt_scope.cpp
openair1/PHY/TOOLS/nr_phy_qt_scope.cpp
+48
-8
openair1/PHY/TOOLS/nr_phy_qt_scope.h
openair1/PHY/TOOLS/nr_phy_qt_scope.h
+4
-1
openair1/PHY/TOOLS/nr_phy_scope.c
openair1/PHY/TOOLS/nr_phy_scope.c
+20
-11
openair1/PHY/TOOLS/phy_scope_interface.h
openair1/PHY/TOOLS/phy_scope_interface.h
+3
-0
openair1/SCHED_NR_UE/phy_procedures_nr_ue_sl.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue_sl.c
+2
-0
No files found.
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
7efe5880
...
...
@@ -1018,14 +1018,19 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
}
}
if
(
!
sidelink
&&
dmrss
==
lastsymbol
)
if
(
dmrss
==
lastsymbol
)
{
enum
scopeDataType
typ
=
(
sidelink
)
?
psbchDlChEstimateTime
:
pbchDlChEstimateTime
;
UEscopeCopy
(
ue
,
pbchDlChEstimateTime
,
typ
,
(
void
*
)
dl_ch_estimates_time
,
sizeof
(
c16_t
),
fp
->
nb_antennas_rx
,
fp
->
ofdm_symbol_size
,
0
);
}
return
(
0
);
}
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync_sl.c
View file @
7efe5880
...
...
@@ -154,7 +154,7 @@ static int sl_nr_pss_correlation(PHY_VARS_NR_UE *UE, int frame_index)
// computing absolute value of frequency offset
sync_params
->
freq_offset
=
ffo_est
*
sl_fp
->
subcarrier_spacing
;
UE
->
common_vars
.
freq_offset
=
sync_params
->
freq_offset
;
for
(
int
pss_index
=
0
;
pss_index
<
SL_NR_NUM_IDs_IN_PSS
;
pss_index
++
)
avg
[
pss_index
]
/=
(
length
/
4
);
sync_params
->
N_sl_id2
=
pss_source
;
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_psbch_rx.c
View file @
7efe5880
...
...
@@ -23,6 +23,7 @@
#include "PHY/CODING/nrPolar_tools/nr_polar_psbch_defs.h"
#include "PHY/CODING/nrPolar_tools/nr_polar_defs.h"
#include "common/utils/LOG/log.h"
#include "PHY/TOOLS/phy_scope_interface.h"
//#define DEBUG_PSBCH
...
...
@@ -213,10 +214,8 @@ int nr_rx_psbch(PHY_VARS_NR_UE *ue,
#if 0 //ENABLE SCOPE LATER
UEscopeCopy(ue, psbchRxdataF_comp, psbch_unClipped, sizeof(struct complex16), frame_parms->nb_antennas_rx, psbch_e_rx_idx/2);
UEscopeCopy(ue, psbchLlr, psbch_e_rx, sizeof(int16_t), frame_parms->nb_antennas_rx, psbch_e_rx_idx);
#endif
UEscopeCopy
(
ue
,
psbchRxdataF_comp
,
psbch_unClipped
,
sizeof
(
struct
complex16
),
frame_parms
->
nb_antennas_rx
,
psbch_e_rx_idx
/
2
,
0
);
UEscopeCopy
(
ue
,
psbchLlr
,
psbch_e_rx
,
sizeof
(
int16_t
),
frame_parms
->
nb_antennas_rx
,
psbch_e_rx_idx
,
0
);
#ifdef DEBUG_PSBCH
write_output
(
"psbch_rxdataFcomp.m"
,
"psbch_rxFcomp"
,
psbch_unClipped
,
SL_NR_NUM_PSBCH_DATA_RE_IN_ALL_SYMBOLS
,
1
,
1
);
...
...
openair1/PHY/TOOLS/nr_phy_qt_scope.cpp
View file @
7efe5880
...
...
@@ -64,10 +64,11 @@ float Limits_KPI_gNB[4][2] = {
@UE: These are the (default) lower and upper threshold values for BLER and Throughput at the UE side.
These threshold values can be further updated in run-time through the option 'Configs' in the drop-down list
*/
float
Limits_KPI_ue
[
2
][
2
]
=
{
float
Limits_KPI_ue
[
3
][
2
]
=
{
// {lower Limit, Upper Limit}
{
0.0
,
0.8
},
// DL BLER
{
0.2
,
10
}
// Throughput in Mbs
{
0.2
,
10
},
// Throughput in Mbs
{
0
,
60
}
//psbch RSRP db/RE
};
/* This class creates the window when choosing the option 'Configs' to configure the threshold values. */
...
...
@@ -176,6 +177,9 @@ KPIListSelectUE::KPIListSelectUE(QWidget *parent) : QComboBox(parent)
this
->
addItem
(
"Time Adv."
,
static_cast
<
int
>
(
PlotTypeUE
::
timingAdvance
));
this
->
addItem
(
"Configs"
,
static_cast
<
int
>
(
PlotTypeUE
::
config
));
this
->
addItem
(
"LLR PSBCH"
,
static_cast
<
int
>
(
PlotTypeUE
::
psbchLLR
));
this
->
addItem
(
"I/Q PSBCH"
,
static_cast
<
int
>
(
PlotTypeUE
::
psbchIQ
));
this
->
addItem
(
"PSBCH RSRP dB/RE"
,
static_cast
<
int
>
(
PlotTypeUE
::
psbchRSRP
));
}
WaterFall
::
WaterFall
(
complex16
*
values
,
NR_DL_FRAME_PARMS
*
frame_parms
,
QWidget
*
parent
)
:
QWidget
(
parent
),
values
(
values
),
frame_parms
(
frame_parms
)
...
...
@@ -891,6 +895,8 @@ float PainterWidgetUE::getValue()
case
PlotTypeUE
:
:
timingAdvance
:
return
(
float
)
this
->
ue
->
timing_advance
;
case
PlotTypeUE
:
:
psbchRSRP
:
return
(
float
)
this
->
ue
->
SL_UE_PHY_PARAMS
.
psbch
.
rsrp_dB_per_RE
;
default:
return
0
;
...
...
@@ -901,15 +907,22 @@ scopeGraphData_t *PainterWidgetUE::getPlotValue()
{
scopeData_t
*
scope
=
(
scopeData_t
*
)
this
->
ue
->
scopeData
;
scopeGraphData_t
**
data
=
(
scopeGraphData_t
**
)
scope
->
liveData
;
bool
is_sl
=
this
->
ue
->
sl_mode
;
switch
(
this
->
plotType
)
{
case
PlotTypeUE
:
:
CIR
:
return
data
[
pbchDlChEstimateTime
]
;
return
(
is_sl
?
data
[
psbchDlChEstimateTime
]
:
data
[
pbchDlChEstimateTime
])
;
case
PlotTypeUE
:
:
pbchLLR
:
return
data
[
pbchLlr
];
case
PlotTypeUE
:
:
pbchIQ
:
return
data
[
pbchRxdataF_comp
];
case
PlotTypeUE
:
:
psbchLLR
:
return
data
[
psbchLlr
];
case
PlotTypeUE
:
:
psbchIQ
:
return
data
[
psbchRxdataF_comp
];
case
PlotTypeUE
:
:
pdcchLLR
:
return
data
[
pdcchLlr
];
...
...
@@ -980,13 +993,14 @@ void PainterWidgetUE::makeConnections(int type)
break
;
}
case
PlotTypeUE
:
:
CIR
:
{
if
(
!
data
[
pbchDlChEstimateTime
])
{
enum
scopeDataType
typ
=
(
this
->
ue
->
sl_mode
)
?
psbchDlChEstimateTime
:
pbchDlChEstimateTime
;
if
(
!
data
[
typ
])
{
newChart
=
new
QChart
();
this
->
plotType
=
PlotTypeUE
::
empty
;
this
->
comboBox
->
setCurrentIndex
(
static_cast
<
int
>
(
PlotTypeUE
::
empty
));
break
;
}
newChart
=
new
CIRPlot
((
complex16
*
)(
data
[
pbchDlChEstimateTime
]
+
1
),
data
[
pbchDlChEstimateTime
]
->
lineSz
);
newChart
=
new
CIRPlot
((
complex16
*
)(
data
[
typ
]
+
1
),
data
[
typ
]
->
lineSz
);
break
;
}
...
...
@@ -1010,6 +1024,26 @@ void PainterWidgetUE::makeConnections(int type)
newChart
=
new
IQPlotUE
((
complex16
*
)(
data
[
pbchRxdataF_comp
]
+
1
),
data
[
pbchRxdataF_comp
]
->
lineSz
,
this
);
break
;
}
case
PlotTypeUE
:
:
psbchLLR
:
{
if
(
!
data
[
psbchLlr
])
{
newChart
=
new
QChart
();
this
->
plotType
=
PlotTypeUE
::
empty
;
this
->
comboBox
->
setCurrentIndex
(
static_cast
<
int
>
(
PlotTypeUE
::
empty
));
break
;
}
newChart
=
new
LLRPlotUE
((
int16_t
*
)(
data
[
psbchLlr
]
+
1
),
data
[
psbchLlr
]
->
lineSz
,
this
);
break
;
}
case
PlotTypeUE
:
:
psbchIQ
:
{
if
(
!
data
[
psbchRxdataF_comp
])
{
newChart
=
new
QChart
();
this
->
plotType
=
PlotTypeUE
::
empty
;
this
->
comboBox
->
setCurrentIndex
(
static_cast
<
int
>
(
PlotTypeUE
::
empty
));
break
;
}
newChart
=
new
IQPlotUE
((
complex16
*
)(
data
[
psbchRxdataF_comp
]
+
1
),
data
[
psbchRxdataF_comp
]
->
lineSz
,
this
);
break
;
}
case
PlotTypeUE
:
:
pdcchLLR
:
{
if
(
!
data
[
pdcchLlr
])
{
newChart
=
new
QChart
();
...
...
@@ -1079,7 +1113,10 @@ void PainterWidgetUE::makeConnections(int type)
newChart
=
new
KPIPlot
(
this
);
break
;
}
case
PlotTypeUE
:
:
psbchRSRP
:
{
newChart
=
new
KPIPlot
(
this
,
Limits_KPI_ue
[
2
]);
break
;
}
default:
break
;
}
...
...
@@ -1164,6 +1201,7 @@ void *nrgNBQtscopeThread(void *arg)
void
*
nrUEQtscopeThread
(
void
*
arg
)
{
PHY_VARS_NR_UE
*
ue
=
(
PHY_VARS_NR_UE
*
)
arg
;
bool
is_sl
=
ue
->
sl_mode
;
sleep
(
1
);
...
...
@@ -1197,14 +1235,16 @@ void *nrUEQtscopeThread(void *arg)
mainLayout
.
addWidget
(
&
pwidgetueCombo2
,
1
,
1
);
KPIListSelectUE
combo3
;
combo3
.
setCurrentIndex
(
static_cast
<
int
>
(
PlotTypeUE
::
pbchLLR
));
if
(
is_sl
)
combo3
.
setCurrentIndex
(
static_cast
<
int
>
(
PlotTypeUE
::
psbchLLR
));
else
combo3
.
setCurrentIndex
(
static_cast
<
int
>
(
PlotTypeUE
::
psbchLLR
));
PainterWidgetUE
pwidgetueCombo3
(
&
config
,
&
combo3
,
ue
);
mainLayout
.
addWidget
(
&
combo3
,
2
,
0
);
mainLayout
.
addWidget
(
&
pwidgetueCombo3
,
3
,
0
);
KPIListSelectUE
combo4
;
combo4
.
setCurrentIndex
(
static_cast
<
int
>
(
PlotTypeUE
::
pbchIQ
));
if
(
is_sl
)
combo4
.
setCurrentIndex
(
static_cast
<
int
>
(
PlotTypeUE
::
psbchIQ
));
else
combo4
.
setCurrentIndex
(
static_cast
<
int
>
(
PlotTypeUE
::
psbchIQ
));
PainterWidgetUE
pwidgetueCombo4
(
&
config
,
&
combo4
,
ue
);
mainLayout
.
addWidget
(
&
combo4
,
2
,
1
);
...
...
openair1/PHY/TOOLS/nr_phy_qt_scope.h
View file @
7efe5880
...
...
@@ -81,7 +81,10 @@ enum class PlotTypeUE {
pdschRBs
,
frequencyOffset
,
timingAdvance
,
config
config
,
psbchLLR
,
psbchIQ
,
psbchRSRP
,
};
/// This abstract class defines an interface how the KPIPlot class can access values for the different KPI plot types
...
...
openair1/PHY/TOOLS/nr_phy_scope.c
View file @
7efe5880
...
...
@@ -771,14 +771,17 @@ static void ueTimeResponse (OAIgraph_t *graph, PHY_VARS_NR_UE *phy_vars_ue, int
*/
static
void
ueChannelResponse
(
scopeGraphData_t
**
data
,
OAIgraph_t
*
graph
,
PHY_VARS_NR_UE
*
phy_vars_ue
,
int
eNB_id
,
int
UE_id
)
{
enum
scopeDataType
typ
=
(
phy_vars_ue
->
sl_mode
)
?
psbchDlChEstimateTime
:
pbchDlChEstimateTime
;
// Channel Impulse Response
if
(
!
data
[
pbchDlChEstimateTime
])
if
(
!
data
[
typ
])
return
;
const
scopeSample_t
*
tmp
=
(
scopeSample_t
*
)(
data
[
pbchDlChEstimateTime
]
+
1
);
genericPowerPerAntena
(
graph
,
data
[
pbchDlChEstimateTime
]
->
colSz
,
const
scopeSample_t
*
tmp
=
(
scopeSample_t
*
)(
data
[
typ
]
+
1
);
genericPowerPerAntena
(
graph
,
data
[
typ
]
->
colSz
,
&
tmp
,
data
[
pbchDlChEstimateTime
]
->
lineSz
);
data
[
typ
]
->
lineSz
);
}
static
void
ueFreqWaterFall
(
scopeGraphData_t
**
data
,
OAIgraph_t
*
graph
,
PHY_VARS_NR_UE
*
phy_vars_ue
,
int
eNB_id
,
int
UE_id
)
{
...
...
@@ -832,14 +835,17 @@ static void uePbchFrequencyResp (OAIgraph_t *graph, PHY_VARS_NR_UE *phy_vars_ue
}
*/
static
void
uePbchLLR
(
scopeGraphData_t
**
data
,
OAIgraph_t
*
graph
,
PHY_VARS_NR_UE
*
phy_vars_ue
,
int
eNB_id
,
int
UE_id
)
{
enum
scopeDataType
typ
=
(
phy_vars_ue
->
sl_mode
)
?
psbchLlr
:
pbchLlr
;
// PBCH LLRs
if
(
!
data
[
pbchLlr
])
if
(
!
data
[
typ
])
return
;
const
int
sz
=
data
[
pbchLlr
]
->
lineSz
;
//const int antennas=data[
pbchLlr
]->colSz;
const
int
sz
=
data
[
typ
]
->
lineSz
;
//const int antennas=data[
typ
]->colSz;
// We take the first antenna only for now
int16_t
*
llrs
=
(
int16_t
*
)
(
data
[
pbchLlr
]
+
1
);
int16_t
*
llrs
=
(
int16_t
*
)
(
data
[
typ
]
+
1
);
float
*
llr_pbch
=
NULL
,
*
bit_pbch
=
NULL
;
int
nx
=
sz
;
#ifdef WEBSRVSCOPE
...
...
@@ -855,12 +861,15 @@ static void uePbchLLR (scopeGraphData_t **data, OAIgraph_t *graph, PHY_VARS_NR_
}
static
void
uePbchIQ
(
scopeGraphData_t
**
data
,
OAIgraph_t
*
graph
,
PHY_VARS_NR_UE
*
phy_vars_ue
,
int
eNB_id
,
int
UE_id
)
{
enum
scopeDataType
typ
=
(
phy_vars_ue
->
sl_mode
)
?
psbchRxdataF_comp
:
pbchRxdataF_comp
;
// PBCH I/Q of MF Output
if
(
!
data
[
pbchRxdataF_com
p
])
if
(
!
data
[
ty
p
])
return
;
scopeSample_t
*
pbch_comp
=
(
scopeSample_t
*
)
(
data
[
pbchRxdataF_com
p
]
+
1
);
const
int
sz
=
data
[
pbchRxdataF_com
p
]
->
lineSz
;
scopeSample_t
*
pbch_comp
=
(
scopeSample_t
*
)
(
data
[
ty
p
]
+
1
);
const
int
sz
=
data
[
ty
p
]
->
lineSz
;
int
newsz
=
sz
;
float
*
I
=
NULL
,
*
Q
=
NULL
;
#ifdef WEBSRVSCOPE
...
...
openair1/PHY/TOOLS/phy_scope_interface.h
View file @
7efe5880
...
...
@@ -67,6 +67,9 @@ enum scopeDataType {
pdschRxdataF_comp
,
commonRxdataF
,
gNBRxdataF
,
psbchDlChEstimateTime
,
psbchLlr
,
psbchRxdataF_comp
,
MAX_SCOPE_TYPES
};
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue_sl.c
View file @
7efe5880
...
...
@@ -260,6 +260,8 @@ void psbch_pscch_processing(PHY_VARS_NR_UE *ue,
LOG_I
(
NR_PHY
,
"============================================
\n
"
);
}
}
UEscopeCopy
(
ue
,
commonRxdataF
,
rxdataF
,
sizeof
(
int32_t
),
fp
->
nb_antennas_rx
,
rxdataF_sz
,
0
);
}
int
phy_procedures_nrUE_SL_TX
(
PHY_VARS_NR_UE
*
ue
,
...
...
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