Add UL time channel estimation based on SRS

This commit is contained in:
rmagueta
2021-12-15 17:02:57 +00:00
parent ecd09b3068
commit 8aac96062a
8 changed files with 84 additions and 65 deletions
+6 -2
View File
@@ -93,8 +93,12 @@ ID = GNB_PHY_PUCCH_PUSCH_IQ
DESC = gNodeB input data in the frequency domain for a slot where some PUCCH or PUSCH detection was done
GROUP = ALL:PHY:GRAPHIC:HEAVY:GNB
FORMAT = int,frame : int,slot : buffer,rxdataF
ID = GNB_PHY_UL_CHANNEL_ESTIMATE
DESC = gNodeB channel estimation in the time/frequency domain
ID = GNB_PHY_UL_FREQ_CHANNEL_ESTIMATE
DESC = gNodeB channel estimation in the frequency domain
GROUP = ALL:PHY:GRAPHIC:HEAVY:GNB
FORMAT = int,gNB_ID : int,rnti : int,frame : int,subframe : int,antenna : buffer,chest_t
ID = GNB_PHY_UL_TIME_CHANNEL_ESTIMATE
DESC = gNodeB channel estimation in the time domain
GROUP = ALL:PHY:GRAPHIC:HEAVY:GNB
FORMAT = int,gNB_ID : int,rnti : int,frame : int,subframe : int,antenna : buffer,chest_t
ID = GNB_PHY_PRACH_INPUT_SIGNAL
+22 -5
View File
@@ -18,12 +18,14 @@ int next_ue_id;
typedef struct {
widget *pucch_pusch_iq_plot;
widget *ul_freq_estimate_ue_xy_plot;
widget *ul_time_estimate_ue_xy_plot;
widget *current_ue_label;
widget *current_ue_button;
widget *prev_ue_button;
widget *next_ue_button;
logger *pucch_pusch_iq_logger;
logger *ul_freq_estimate_ue_logger;
logger *ul_time_estimate_ue_logger;
} gnb_gui;
typedef struct {
@@ -93,6 +95,9 @@ static void set_current_ue(gui *g, gnb_data *e, int ue)
sprintf(s, "UL channel estimation in frequency domain [UE %d]", ue);
xy_plot_set_title(g, e->e->ul_freq_estimate_ue_xy_plot, s);
sprintf(s, "UL channel estimation in time domain [UE %d]", ue);
xy_plot_set_title(g, e->e->ul_time_estimate_ue_xy_plot, s);
}
void reset_ue_ids(void)
@@ -141,7 +146,7 @@ static void gnb_main_gui(gnb_gui *e, gui *g, event_handler *h, void *database, g
logger *l;
view *v;
main_window = new_toplevel_window(g, 1050, 230, "gNB tracer");
main_window = new_toplevel_window(g, 1500, 230, "gNB tracer");
top_container = new_container(g, VERTICAL);
widget_add_child(g, main_window, top_container, -1);
@@ -179,17 +184,28 @@ static void gnb_main_gui(gnb_gui *e, gui *g, event_handler *h, void *database, g
logger_add_view(l, v);
e->pucch_pusch_iq_logger = l;
/* UL estimated channel */
w = new_xy_plot(g, 600, 200, "", 50);
/* UL channel estimation in frequency domain */
w = new_xy_plot(g, 490, 200, "", 50);
e->ul_freq_estimate_ue_xy_plot = w;
widget_add_child(g, line, w, -1);
xy_plot_set_range(g, w, 0, 100*10, -10, 80);
l = new_framelog(h, database, "GNB_PHY_UL_CHANNEL_ESTIMATE", "subframe", "chest_t");
l = new_framelog(h, database, "GNB_PHY_UL_FREQ_CHANNEL_ESTIMATE", "subframe", "chest_t");
framelog_set_update_only_at_sf9(l, 0);
v = new_view_xy(100*10, 10, g, w, new_color(g, "#0c0c72"), XY_LOOP_MODE);
logger_add_view(l, v);
e->ul_freq_estimate_ue_logger = l;
/* UL channel estimation in time domain */
w = new_xy_plot(g, 490, 200, "", 50);
e->ul_time_estimate_ue_xy_plot = w;
widget_add_child(g, line, w, -1);
xy_plot_set_range(g, w, 0, 100*10, -10, 80);
l = new_framelog(h, database, "GNB_PHY_UL_TIME_CHANNEL_ESTIMATE", "subframe", "chest_t");
framelog_set_update_only_at_sf9(l, 0);
v = new_view_xy(100*10, 10, g, w, new_color(g, "#0c0c72"), XY_LOOP_MODE);
logger_add_view(l, v);
e->ul_time_estimate_ue_logger = l;
set_current_ue(g, ed, ed->ue);
register_notifier(g, "click", e->current_ue_button, click, ed);
register_notifier(g, "click", e->prev_ue_button, click, ed);
@@ -233,7 +249,8 @@ int main(int n, char **v)
h = new_handler(database);
on_off(database, "GNB_PHY_PUCCH_PUSCH_IQ", is_on, 1);
on_off(database, "GNB_PHY_UL_CHANNEL_ESTIMATE", is_on, 1);
on_off(database, "GNB_PHY_UL_FREQ_CHANNEL_ESTIMATE", is_on, 1);
on_off(database, "GNB_PHY_UL_TIME_CHANNEL_ESTIMATE", is_on, 1);
gnb_data.ue = 0;
gnb_data.e = ⪚