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
spbro
OpenXG-RAN
Commits
b824e55c
Commit
b824e55c
authored
Oct 04, 2024
by
Jaroslava Fiedlerova
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/imscope-td-plot' into integration_2024_w40b
parents
7be2a165
b2c49fbc
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
57 additions
and
8 deletions
+57
-8
CMakeLists.txt
CMakeLists.txt
+1
-1
executables/nr-ru.c
executables/nr-ru.c
+1
-0
executables/nr-ue.c
executables/nr-ue.c
+6
-2
openair1/PHY/TOOLS/imscope/imscope.cpp
openair1/PHY/TOOLS/imscope/imscope.cpp
+42
-2
openair1/PHY/TOOLS/phy_scope_interface.h
openair1/PHY/TOOLS/phy_scope_interface.h
+5
-2
openair1/PHY/defs_RU.h
openair1/PHY/defs_RU.h
+2
-1
No files found.
CMakeLists.txt
View file @
b824e55c
...
...
@@ -293,7 +293,7 @@ set_property(CACHE KPM_VERSION PROPERTY STRINGS "KPM_V2_03" "KPM_V3_00")
message
(
STATUS
"Selected KPM Version:
${
KPM_VERSION
}
"
)
add_boolean_option
(
ENABLE_IMSCOPE OFF
"Enable phy scope based on imgui"
O
N
)
add_boolean_option
(
ENABLE_IMSCOPE OFF
"Enable phy scope based on imgui"
O
FF
)
##################################################
# ASN.1 grammar C code generation & dependencies #
...
...
executables/nr-ru.c
View file @
b824e55c
...
...
@@ -622,6 +622,7 @@ static void rx_rf(RU_t *ru, int *frame, int *slot)
rxp
,
samples_per_slot
,
ru
->
nb_rx
);
gNBscopeCopy
(
ru
,
gNbTimeDomainSamples
,
rxp
[
0
],
sizeof
(
c16_t
),
1
,
samples_per_slot
,
0
);
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ
,
0
);
...
...
executables/nr-ue.c
View file @
b824e55c
...
...
@@ -37,6 +37,7 @@
#include "LAYER2/nr_pdcp/nr_pdcp_oai_api.h"
#include "LAYER2/nr_rlc/nr_rlc_oai_api.h"
#include "RRC/NR/MESSAGES/asn1_msg.h"
#include "openair1/PHY/TOOLS/phy_scope_interface.h"
/*
* NR SLOT PROCESSING SEQUENCE
...
...
@@ -706,8 +707,10 @@ void readFrame(PHY_VARS_NR_UE *UE, openair0_timestamp *timestamp, bool toTrash)
+
4
*
((
x
*
fp
->
samples_per_subframe
)
+
fp
->
get_samples_slot_timestamp
(
slot
,
fp
,
0
));
}
int
tmp
=
UE
->
rfdevice
.
trx_read_func
(
&
UE
->
rfdevice
,
timestamp
,
rxp
,
fp
->
get_samples_per_slot
(
slot
,
fp
),
fp
->
nb_antennas_rx
);
AssertFatal
(
fp
->
get_samples_per_slot
(
slot
,
fp
)
==
tmp
,
""
);
int
read_block_size
=
fp
->
get_samples_per_slot
(
slot
,
fp
);
int
tmp
=
UE
->
rfdevice
.
trx_read_func
(
&
UE
->
rfdevice
,
timestamp
,
rxp
,
read_block_size
,
fp
->
nb_antennas_rx
);
UEscopeCopy
(
UE
,
ueTimeDomainSamplesBeforeSync
,
rxp
[
0
],
sizeof
(
c16_t
),
1
,
read_block_size
,
0
);
AssertFatal
(
read_block_size
==
tmp
,
""
);
if
(
IS_SOFTMODEM_RFSIM
)
dummyWrite
(
UE
,
*
timestamp
,
fp
->
get_samples_per_slot
(
slot
,
fp
));
...
...
@@ -962,6 +965,7 @@ void *UE_thread(void *arg)
const
int
readBlockSize
=
get_readBlockSize
(
slot_nr
,
fp
)
-
iq_shift_to_apply
;
openair0_timestamp
rx_timestamp
;
int
tmp
=
UE
->
rfdevice
.
trx_read_func
(
&
UE
->
rfdevice
,
&
rx_timestamp
,
rxp
,
readBlockSize
,
fp
->
nb_antennas_rx
);
UEscopeCopy
(
UE
,
ueTimeDomainSamples
,
rxp
[
0
],
sizeof
(
c16_t
),
1
,
readBlockSize
,
0
);
AssertFatal
(
readBlockSize
==
tmp
,
""
);
if
(
slot_nr
==
(
nb_slot_frame
-
1
))
{
...
...
openair1/PHY/TOOLS/imscope/imscope.cpp
View file @
b824e55c
...
...
@@ -279,8 +279,17 @@ class IQHist {
}
}
else
if
(
plot_type
==
1
)
{
if
(
ImPlot
::
BeginPlot
(
label
.
c_str
(),
{(
float
)
ImGui
::
GetWindowWidth
()
*
0.3
f
,
(
float
)
ImGui
::
GetWindowWidth
()
*
0.3
f
}))
{
// Limit the amount of data plotted with scatterplot (issue with vertices/draw call)
ImPlot
::
PlotScatter
(
label
.
c_str
(),
iq_data
->
real
.
data
(),
iq_data
->
imag
.
data
(),
std
::
min
(
16000
,
iq_data
->
len
));
int
points_drawn
=
0
;
while
(
points_drawn
<
iq_data
->
len
)
{
// Limit the amount of data plotted with PlotScatter call (issue with vertices/draw call)
int
points_to_draw
=
std
::
min
(
iq_data
->
len
-
points_drawn
,
16000
);
ImPlot
::
SetNextMarkerStyle
(
ImPlotMarker_Circle
,
1
,
IMPLOT_AUTO_COL
,
1
);
ImPlot
::
PlotScatter
(
label
.
c_str
(),
iq_data
->
real
.
data
()
+
points_drawn
,
iq_data
->
imag
.
data
()
+
points_drawn
,
points_to_draw
);
points_drawn
+=
points_to_draw
;
}
ImPlot
::
EndPlot
();
}
}
else
if
(
plot_type
==
2
)
{
...
...
@@ -480,6 +489,26 @@ void ShowUeScope(PHY_VARS_NR_UE *ue, float t)
pdsch_iq_hist
->
Draw
(
iq_data
,
t
,
new_data
);
ImGui
::
TreePop
();
}
if
(
ImGui
::
TreeNode
(
"Time domain samples"
))
{
static
auto
iq_data
=
new
IQData
();
static
auto
time_domain_iq
=
new
IQHist
(
"Time domain samples"
);
bool
new_data
=
false
;
if
(
time_domain_iq
->
ShouldReadData
())
{
new_data
=
iq_data
->
TryCollect
(
&
scope_array
[
ueTimeDomainSamples
],
t
,
time_domain_iq
->
GetEpsilon
());
}
time_domain_iq
->
Draw
(
iq_data
,
t
,
new_data
);
ImGui
::
TreePop
();
}
if
(
ImGui
::
TreeNode
(
"Time domain samples - before sync"
))
{
static
auto
iq_data
=
new
IQData
();
static
auto
time_domain_iq
=
new
IQHist
(
"Time domain samples - before sync"
);
bool
new_data
=
false
;
if
(
time_domain_iq
->
ShouldReadData
())
{
new_data
=
iq_data
->
TryCollect
(
&
scope_array
[
ueTimeDomainSamplesBeforeSync
],
t
,
time_domain_iq
->
GetEpsilon
());
}
time_domain_iq
->
Draw
(
iq_data
,
t
,
new_data
);
ImGui
::
TreePop
();
}
if
(
ImGui
::
TreeNode
(
"Broadcast channel"
))
{
ImGui
::
Text
(
"RSRP %d"
,
ue
->
measurements
.
ssb_rsrp_dBm
[
ue
->
frame_parms
.
ssb_index
]);
if
(
ImGui
::
TreeNode
(
"IQ"
))
{
...
...
@@ -552,6 +581,16 @@ void ShowGnbScope(PHY_VARS_gNB *gNB, float t)
pusch_llr_plot
->
Draw
(
t
,
gNBPuschLlr
,
"PUSCH LLR"
);
ImGui
::
TreePop
();
}
if
(
ImGui
::
TreeNode
(
"Time domain samples"
))
{
static
auto
iq_data
=
new
IQData
();
static
auto
time_domain_iq
=
new
IQHist
(
"Time domain samples"
);
bool
new_data
=
false
;
if
(
time_domain_iq
->
ShouldReadData
())
{
new_data
=
iq_data
->
TryCollect
(
&
scope_array
[
gNbTimeDomainSamples
],
t
,
time_domain_iq
->
GetEpsilon
());
}
time_domain_iq
->
Draw
(
iq_data
,
t
,
new_data
);
ImGui
::
TreePop
();
}
}
void
*
imscope_thread
(
void
*
data_void_ptr
)
...
...
@@ -722,6 +761,7 @@ extern "C" void imscope_autoinit(void *dataptr)
scope
->
copyDataUnsafeWithOffset
=
copyDataUnsafeWithOffset
;
scope
->
unlockScopeData
=
unlockScopeData
;
scope_params
->
gNB
->
scopeData
=
scope
;
scope_params
->
ru
->
scopeData
=
scope
;
}
else
{
PHY_VARS_NR_UE
*
ue
=
(
PHY_VARS_NR_UE
*
)
dataptr
;
scopeData_t
*
scope
=
(
scopeData_t
*
)
calloc
(
1
,
sizeof
(
scopeData_t
));
...
...
openair1/PHY/TOOLS/phy_scope_interface.h
View file @
b824e55c
...
...
@@ -73,6 +73,9 @@ enum scopeDataType {
MAX_SCOPE_TYPES
,
gNBPuschRxIq
=
MAX_SCOPE_TYPES
,
gNBPuschLlr
,
ueTimeDomainSamples
,
ueTimeDomainSamplesBeforeSync
,
gNbTimeDomainSamples
,
EXTRA_SCOPE_TYPES
};
...
...
@@ -127,12 +130,12 @@ void copyData(void *, enum scopeDataType type, void *dataIn, int elementSz, int
}
#define gNBscopeCopyWithMetadata(gnb, type, ...) \
if (gnb->scopeData) { \
((scopeData_t *)gnb->scopeData)->copyData((scopeData_t *)g
NB
->scopeData, type, ##__VA_ARGS__); \
((scopeData_t *)gnb->scopeData)->copyData((scopeData_t *)g
nb
->scopeData, type, ##__VA_ARGS__); \
}
#define gNBscopeCopy(gnb, type, ...) \
if (gnb->scopeData) { \
metadata mt = {.slot = -1, .frame = -1}; \
((scopeData_t *)gnb->scopeData)->copyData((scopeData_t *)g
NB
->scopeData, type, ##__VA_ARGS__, &mt); \
((scopeData_t *)gnb->scopeData)->copyData((scopeData_t *)g
nb
->scopeData, type, ##__VA_ARGS__, &mt); \
}
#define GnbScopeUpdate(gnb, type, numElt) \
if (gnb->scopeData) \
...
...
openair1/PHY/defs_RU.h
View file @
b824e55c
...
...
@@ -661,7 +661,8 @@ typedef struct RU_t_s {
/// number of cores for RU ThreadPool
int
num_tpcores
;
/// structure for analyzing high-level RT measurements
rt_ru_profiling_t
rt_ru_profiling
;
rt_ru_profiling_t
rt_ru_profiling
;
void
*
scopeData
;
}
RU_t
;
...
...
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