Skip to content
Snippets Groups Projects
Commit 9e083707 authored by Cedric Roux's avatar Cedric Roux
Browse files

add pucch energy plot

parent 26a5da6c
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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);
......
......@@ -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++)
......
......@@ -84,9 +84,21 @@ static void *plot_thread(void *_p)
if (pthread_mutex_lock(&p->lock)) abort();
XFillRectangle(p->d, p->px, p->bg, 0, 0, p->width, p->height);
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) {
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();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment