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
9e083707
Commit
9e083707
authored
Mar 18, 2016
by
Cedric Roux
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add pucch energy plot
parent
26a5da6c
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
77 additions
and
14 deletions
+77
-14
T_messages.txt
T_messages.txt
+4
-0
tracer/defs.h
tracer/defs.h
+3
-1
tracer/main.c
tracer/main.c
+40
-10
tracer/plot.c
tracer/plot.c
+30
-3
No files found.
T_messages.txt
View file @
9e083707
...
...
@@ -15,6 +15,10 @@ ID = PUCCH_1AB_IQ
DESC = eNodeB PUCCH received IQ data
GROUP = PHY:GRAPHIC:HEAVY
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,I : int,Q
ID = PUCCH_1_ENERGY
DESC = eNodeB PUCCH 1 energy and threshold
GROUP = PHY:GRAPHIC:HEAVY
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,energy : int,threshold
#legacy logs
ID = LEGACY_MAC_INFO
...
...
tracer/defs.h
View file @
9e083707
...
...
@@ -4,13 +4,15 @@
/* types of plots */
#define PLOT_VS_TIME 0
#define PLOT_IQ_POINTS 1
#define PLOT_MINMAX 2
/* ... is { int count; int type; char *color; } for 'nplots' plots */
void
*
make_plot
(
int
width
,
int
height
,
char
*
title
,
int
nplots
,
...);
void
plot_set
(
void
*
plot
,
float
*
data
,
int
len
,
int
pos
,
int
pp
);
void
iq_plot_set
(
void
*
plot
,
short
*
data
,
int
len
,
int
pos
,
int
pp
);
void
iq_plot_set_sized
(
void
*
_plot
,
short
*
data
,
int
len
,
int
pp
);
void
iq_plot_add_point_loop
(
void
*
_plot
,
short
i
,
short
q
,
int
pp
);
void
iq_plot_add_iq_point_loop
(
void
*
_plot
,
short
i
,
short
q
,
int
pp
);
void
iq_plot_add_energy_point_loop
(
void
*
_plot
,
int
e
,
int
pp
);
/* returns an opaque pointer - truly a 'database *', see t_data.c */
void
*
parse_database
(
char
*
filename
);
...
...
tracer/main.c
View file @
9e083707
...
...
@@ -7,6 +7,7 @@
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <math.h>
#include "defs.h"
...
...
@@ -14,10 +15,14 @@
#include "../T_IDs.h"
#include "../T_defs.h"
#define BLUE "#0c0c72"
#define RED "#d72828"
void
*
ul_plot
;
void
*
chest_plot
;
void
*
pusch_iq_plot
;
void
*
pucch_iq_plot
;
void
*
pucch_plot
;
#ifdef T_USE_SHARED_MEMORY
...
...
@@ -213,8 +218,12 @@ void get_message(int s)
GET
(
s
,
&
size
,
sizeof
(
int
));
GET
(
s
,
buf
,
size
);
#if 0
printf("got T_ENB_INPUT_SIGNAL eNB %d frame %d subframe %d antenna %d size %d %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x\n",
eNB, frame, subframe, antenna, size, buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9],buf[10],buf[11],buf[12],buf[13],buf[14],buf[15]);
printf("got T_ENB_INPUT_SIGNAL eNB %d frame %d subframe %d antenna "
"%d size %d %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x "
"%2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x\n",
eNB, frame, subframe, antenna, size, buf[0],buf[1],buf[2],
buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9],buf[10],
buf[11],buf[12],buf[13],buf[14],buf[15]);
#endif
if
(
size
!=
4
*
7680
)
{
printf
(
"bad T_ENB_INPUT_SIGNAL, only 7680 samples allowed
\n
"
);
abort
();}
...
...
@@ -272,8 +281,22 @@ void get_message(int s)
GET
(
s
,
&
subframe
,
sizeof
(
int
));
GET
(
s
,
&
I
,
sizeof
(
int
));
GET
(
s
,
&
Q
,
sizeof
(
int
));
printf
(
"receiving %d %d
\n
"
,
I
,
Q
);
if
(
pucch_iq_plot
)
iq_plot_add_point_loop
(
pucch_iq_plot
,
I
*
10
,
Q
*
10
,
0
);
if
(
pucch_iq_plot
)
iq_plot_add_iq_point_loop
(
pucch_iq_plot
,
I
*
10
,
Q
*
10
,
0
);
break
;
}
case
T_PUCCH_1_ENERGY
:
{
int
eNB
,
UE
,
frame
,
subframe
,
e
,
t
;
GET
(
s
,
&
eNB
,
sizeof
(
int
));
GET
(
s
,
&
UE
,
sizeof
(
int
));
GET
(
s
,
&
frame
,
sizeof
(
int
));
GET
(
s
,
&
subframe
,
sizeof
(
int
));
GET
(
s
,
&
e
,
sizeof
(
int
));
GET
(
s
,
&
t
,
sizeof
(
int
));
//printf("t %d e %d\n", t, (int)(10*log10(e)));
if
(
pucch_plot
)
{
iq_plot_add_energy_point_loop
(
pucch_plot
,
t
,
0
);
iq_plot_add_energy_point_loop
(
pucch_plot
,
10
*
log10
(
e
),
1
);
}
break
;
}
case
T_buf_test
:
{
...
...
@@ -281,8 +304,10 @@ printf("receiving %d %d\n", I, Q);
int
size
;
GET
(
s
,
&
size
,
sizeof
(
int
));
GET
(
s
,
buf
,
size
);
printf
(
"got buffer size %d %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x
\n
"
,
size
,
buf
[
0
],
buf
[
1
],
buf
[
2
],
buf
[
3
],
buf
[
4
],
buf
[
5
],
buf
[
6
],
buf
[
7
],
buf
[
8
],
buf
[
9
],
buf
[
10
],
buf
[
11
],
buf
[
12
],
buf
[
13
],
buf
[
14
],
buf
[
15
]);
printf
(
"got buffer size %d %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x"
" %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x
\n
"
,
size
,
buf
[
0
],
buf
[
1
],
buf
[
2
],
buf
[
3
],
buf
[
4
],
buf
[
5
],
buf
[
6
],
buf
[
7
],
buf
[
8
],
buf
[
9
],
buf
[
10
],
buf
[
11
],
buf
[
12
],
buf
[
13
],
buf
[
14
],
buf
[
15
]);
break
;
}
default:
printf
(
"unkown message type %d
\n
"
,
m
);
abort
();
...
...
@@ -386,13 +411,18 @@ int main(int n, char **v)
if
(
do_xforms
)
{
ul_plot
=
make_plot
(
512
,
100
,
"UL Input Signal"
,
1
,
7680
*
10
,
PLOT_VS_TIME
,
"blue"
);
7680
*
10
,
PLOT_VS_TIME
,
BLUE
);
chest_plot
=
make_plot
(
512
,
100
,
"UL Channel Estimate UE 0"
,
1
,
512
,
PLOT_VS_TIME
,
"blue"
);
512
,
PLOT_VS_TIME
,
BLUE
);
pusch_iq_plot
=
make_plot
(
100
,
100
,
"PUSCH IQ"
,
1
,
12
*
25
*
14
,
PLOT_IQ_POINTS
,
"blue"
);
12
*
25
*
14
,
PLOT_IQ_POINTS
,
BLUE
);
pucch_iq_plot
=
make_plot
(
100
,
100
,
"PUCCH IQ"
,
1
,
1000
,
PLOT_IQ_POINTS
,
"blue"
);
1000
,
PLOT_IQ_POINTS
,
BLUE
);
pucch_plot
=
make_plot
(
512
,
100
,
"PUCCH 1 energy (SR)"
,
2
,
/* threshold */
10240
,
PLOT_MINMAX
,
RED
,
/* pucch 1 */
10240
,
PLOT_MINMAX
,
BLUE
);
}
for
(
i
=
0
;
i
<
on_off_n
;
i
++
)
...
...
tracer/plot.c
View file @
9e083707
...
...
@@ -84,9 +84,21 @@ static void *plot_thread(void *_p)
if
(
pthread_mutex_lock
(
&
p
->
lock
))
abort
();
for
(
pp
=
0
;
pp
<
p
->
nplots
;
pp
++
)
{
XFillRectangle
(
p
->
d
,
p
->
px
,
p
->
bg
,
0
,
0
,
p
->
width
,
p
->
height
);
if
(
p
->
p
[
pp
].
type
==
PLOT_VS_TIME
)
{
for
(
pp
=
0
;
pp
<
p
->
nplots
;
pp
++
)
{
if
(
p
->
p
[
pp
].
type
==
PLOT_MINMAX
)
{
s
=
p
->
p
[
pp
].
buf
;
for
(
i
=
0
;
i
<
512
;
i
++
)
{
int
min
=
*
s
;
int
max
=
*
s
;
for
(
j
=
0
;
j
<
p
->
p
[
pp
].
count
/
512
;
j
++
,
s
++
)
{
if
(
*
s
<
min
)
min
=
*
s
;
if
(
*
s
>
max
)
max
=
*
s
;
}
XDrawLine
(
p
->
d
,
p
->
px
,
p
->
p
[
pp
].
g
,
i
,
100
-
min
,
i
,
100
-
max
);
}
}
else
if
(
p
->
p
[
pp
].
type
==
PLOT_VS_TIME
)
{
for
(
i
=
0
;
i
<
p
->
p
[
pp
].
count
;
i
++
)
p
->
p
[
pp
].
buf
[
i
]
=
10
*
log10
(
1
.
0
+
(
float
)(
p
->
p
[
pp
].
iqbuf
[
2
*
i
]
*
p
->
p
[
pp
].
iqbuf
[
2
*
i
]
+
...
...
@@ -215,6 +227,10 @@ void *make_plot(int width, int height, char *title, int nplots, ...)
if
(
p
->
p
[
i
].
buf
==
NULL
)
abort
();
p
->
p
[
i
].
iqbuf
=
malloc
(
sizeof
(
short
)
*
count
*
2
);
if
(
p
->
p
[
i
].
iqbuf
==
NULL
)
abort
();
}
else
if
(
type
==
PLOT_MINMAX
)
{
p
->
p
[
i
].
buf
=
malloc
(
sizeof
(
float
)
*
count
);
if
(
p
->
p
[
i
].
buf
==
NULL
)
abort
();
p
->
p
[
i
].
iqbuf
=
NULL
;
}
else
{
p
->
p
[
i
].
buf
=
NULL
;
p
->
p
[
i
].
iqbuf
=
malloc
(
sizeof
(
short
)
*
count
*
2
);
...
...
@@ -269,7 +285,7 @@ void iq_plot_set_sized(void *_plot, short *data, int count, int pp)
if
(
pthread_mutex_unlock
(
&
p
->
lock
))
abort
();
}
void
iq_plot_add_point_loop
(
void
*
_plot
,
short
i
,
short
q
,
int
pp
)
void
iq_plot_add_
iq_
point_loop
(
void
*
_plot
,
short
i
,
short
q
,
int
pp
)
{
plot
*
p
=
_plot
;
if
(
pthread_mutex_lock
(
&
p
->
lock
))
abort
();
...
...
@@ -280,3 +296,14 @@ void iq_plot_add_point_loop(void *_plot, short i, short q, int pp)
if
(
p
->
p
[
pp
].
iq_insert_pos
==
p
->
p
[
pp
].
count
)
p
->
p
[
pp
].
iq_insert_pos
=
0
;
if
(
pthread_mutex_unlock
(
&
p
->
lock
))
abort
();
}
void
iq_plot_add_energy_point_loop
(
void
*
_plot
,
int
e
,
int
pp
)
{
plot
*
p
=
_plot
;
if
(
pthread_mutex_lock
(
&
p
->
lock
))
abort
();
p
->
p
[
pp
].
buf
[
p
->
p
[
pp
].
iq_insert_pos
]
=
e
;
if
(
p
->
p
[
pp
].
iq_count
!=
p
->
p
[
pp
].
count
)
p
->
p
[
pp
].
iq_count
++
;
p
->
p
[
pp
].
iq_insert_pos
++
;
if
(
p
->
p
[
pp
].
iq_insert_pos
==
p
->
p
[
pp
].
count
)
p
->
p
[
pp
].
iq_insert_pos
=
0
;
if
(
pthread_mutex_unlock
(
&
p
->
lock
))
abort
();
}
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