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
wangjie
OpenXG-RAN
Commits
c2b06701
Commit
c2b06701
authored
Dec 11, 2020
by
Hongzhi Wang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
nr ue beam selection
parent
a597412e
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
125 additions
and
25 deletions
+125
-25
executables/nr-ue.c
executables/nr-ue.c
+4
-0
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
+1
-1
openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c
openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c
+17
-15
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
+2
-2
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+8
-2
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+65
-4
openair1/SCHED_NR_UE/pucch_uci_ue_nr.c
openair1/SCHED_NR_UE/pucch_uci_ue_nr.c
+18
-1
openair2/LAYER2/NR_MAC_UE/mac_defs.h
openair2/LAYER2/NR_MAC_UE/mac_defs.h
+2
-0
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+8
-0
No files found.
executables/nr-ue.c
View file @
c2b06701
...
@@ -144,6 +144,10 @@ void init_nr_ue_vars(PHY_VARS_NR_UE *ue,
...
@@ -144,6 +144,10 @@ void init_nr_ue_vars(PHY_VARS_NR_UE *ue,
ue
->
Mod_id
=
UE_id
;
ue
->
Mod_id
=
UE_id
;
ue
->
mac_enabled
=
1
;
ue
->
mac_enabled
=
1
;
ue
->
if_inst
=
nr_ue_if_module_init
(
0
);
ue
->
if_inst
=
nr_ue_if_module_init
(
0
);
ue
->
measurements
.
gnb_beam_cnt
=
-
1
;
ue
->
measurements
.
ue_beam_cnt
=
0
;
ue
->
measurements
.
first_beam_meas
=
1
;
ue
->
measurements
.
frame_last_beam
=
0
;
// Setting UE mode to NOT_SYNCHED by default
// Setting UE mode to NOT_SYNCHED by default
for
(
gNB_id
=
0
;
gNB_id
<
nb_connected_gNB
;
gNB_id
++
){
for
(
gNB_id
=
0
;
gNB_id
<
nb_connected_gNB
;
gNB_id
++
){
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
View file @
c2b06701
...
@@ -116,6 +116,6 @@ void nr_pdsch_ptrs_processing(PHY_VARS_NR_UE *ue,
...
@@ -116,6 +116,6 @@ void nr_pdsch_ptrs_processing(PHY_VARS_NR_UE *ue,
uint16_t
rnti
,
uint16_t
rnti
,
RX_type_t
rx_type
);
RX_type_t
rx_type
);
float_t
get_nr_RSRP
(
module_id_t
Mod_id
,
uint8_t
CC_id
,
uint8_t
gNB_index
);
float_t
get_nr_RSRP
(
module_id_t
Mod_id
,
uint8_t
CC_id
,
uint8_t
gNB_index
,
int
i
,
int
j
);
#endif
#endif
openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c
View file @
c2b06701
...
@@ -72,7 +72,7 @@ int16_t get_nr_PL(uint8_t Mod_id, uint8_t CC_id, uint8_t gNB_index){
...
@@ -72,7 +72,7 @@ int16_t get_nr_PL(uint8_t Mod_id, uint8_t CC_id, uint8_t gNB_index){
10*log10((double)ue->measurements.rsrp[eNB_index]),
10*log10((double)ue->measurements.rsrp[eNB_index]),
ue->frame_parms.pdsch_config_common.referenceSignalPower);*/
ue->frame_parms.pdsch_config_common.referenceSignalPower);*/
return
((
int16_t
)(((
10
*
ue
->
rx_total_gain_dB
)
-
dB_fixed_times10
(
ue
->
measurements
.
rsrp
[
gNB_index
]))
/
10
));
return
((
int16_t
)(((
10
*
ue
->
rx_total_gain_dB
)
-
dB_fixed_times10
(
ue
->
measurements
.
rsrp
[
gNB_index
]
[
0
][
0
]
))
/
10
));
// dB_fixed_times10(RSoffset*12*ue_g[Mod_id][CC_id]->frame_parms.N_RB_DL) +
// dB_fixed_times10(RSoffset*12*ue_g[Mod_id][CC_id]->frame_parms.N_RB_DL) +
//(ue->frame_parms.pdsch_config_common.referenceSignalPower*10))/10));
//(ue->frame_parms.pdsch_config_common.referenceSignalPower*10))/10));
}
}
...
@@ -89,7 +89,7 @@ uint32_t get_nr_rx_total_gain_dB (module_id_t Mod_id,uint8_t CC_id)
...
@@ -89,7 +89,7 @@ uint32_t get_nr_rx_total_gain_dB (module_id_t Mod_id,uint8_t CC_id)
}
}
float_t
get_nr_RSRP
(
module_id_t
Mod_id
,
uint8_t
CC_id
,
uint8_t
gNB_index
)
float_t
get_nr_RSRP
(
module_id_t
Mod_id
,
uint8_t
CC_id
,
uint8_t
gNB_index
,
int
i
,
int
j
)
{
{
AssertFatal
(
PHY_vars_UE_g
!=
NULL
,
"PHY_vars_UE_g is null
\n
"
);
AssertFatal
(
PHY_vars_UE_g
!=
NULL
,
"PHY_vars_UE_g is null
\n
"
);
...
@@ -99,7 +99,7 @@ float_t get_nr_RSRP(module_id_t Mod_id,uint8_t CC_id,uint8_t gNB_index)
...
@@ -99,7 +99,7 @@ float_t get_nr_RSRP(module_id_t Mod_id,uint8_t CC_id,uint8_t gNB_index)
PHY_VARS_NR_UE
*
ue
=
PHY_vars_UE_g
[
Mod_id
][
CC_id
];
PHY_VARS_NR_UE
*
ue
=
PHY_vars_UE_g
[
Mod_id
][
CC_id
];
if
(
ue
)
if
(
ue
)
return
(
10
*
log10
(
ue
->
measurements
.
rsrp
[
gNB_index
])
-
return
(
10
*
log10
(
ue
->
measurements
.
rsrp
[
gNB_index
]
[
i
][
j
]
)
-
get_nr_rx_total_gain_dB
(
Mod_id
,
0
)
-
get_nr_rx_total_gain_dB
(
Mod_id
,
0
)
-
10
*
log10
(
20
*
12
));
10
*
log10
(
20
*
12
));
return
-
140
.
0
;
return
-
140
.
0
;
...
@@ -231,9 +231,11 @@ void nr_ue_rsrp_measurements(PHY_VARS_NR_UE *ue,
...
@@ -231,9 +231,11 @@ void nr_ue_rsrp_measurements(PHY_VARS_NR_UE *ue,
{
{
int
aarx
,
rb
,
symbol_offset
;
int
aarx
,
rb
,
symbol_offset
;
int16_t
*
rxF
;
int16_t
*
rxF
;
int
beam_idx_gnb
=
ue
->
measurements
.
gnb_beam_cnt
;
int
beam_idx_ue
=
ue
->
measurements
.
ue_beam_cnt
;
uint16_t
Nid_cell
=
ue
->
frame_parms
.
Nid_cell
;
uint16_t
Nid_cell
=
ue
->
frame_parms
.
Nid_cell
;
uint8_t
e
NB_offset
=
0
,
l
,
nushift
;
uint8_t
g
NB_offset
=
0
,
l
,
nushift
;
uint16_t
off
,
nb_rb
;
uint16_t
off
,
nb_rb
;
// NR_UE_MAC_INST_t *mac = get_mac_inst(0);
// NR_UE_MAC_INST_t *mac = get_mac_inst(0);
int
**
rxdataF
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[
proc
->
thread_id
].
rxdataF
;
int
**
rxdataF
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[
proc
->
thread_id
].
rxdataF
;
...
@@ -245,7 +247,7 @@ void nr_ue_rsrp_measurements(PHY_VARS_NR_UE *ue,
...
@@ -245,7 +247,7 @@ void nr_ue_rsrp_measurements(PHY_VARS_NR_UE *ue,
symbol_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
*
((
ue
->
symbol_offset
+
1
)
%
(
ue
->
frame_parms
.
symbols_per_slot
));
symbol_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
*
((
ue
->
symbol_offset
+
1
)
%
(
ue
->
frame_parms
.
symbols_per_slot
));
ue
->
measurements
.
rsrp
[
eNB_offset
]
=
0
;
ue
->
measurements
.
rsrp
[
gNB_offset
][
beam_idx_ue
][
beam_idx_gnb
]
=
0
;
//if (mac->csirc->reportQuantity.choice.ssb_Index_RSRP){
//if (mac->csirc->reportQuantity.choice.ssb_Index_RSRP){
nb_rb
=
20
;
nb_rb
=
20
;
...
@@ -257,8 +259,8 @@ void nr_ue_rsrp_measurements(PHY_VARS_NR_UE *ue,
...
@@ -257,8 +259,8 @@ void nr_ue_rsrp_measurements(PHY_VARS_NR_UE *ue,
for
(
l
=
0
;
l
<
1
;
l
++
)
{
for
(
l
=
0
;
l
<
1
;
l
++
)
{
LOG_D
(
PHY
,
"[UE %d] slot %d Doing ue_rrc_measurements rsrp/rssi (Nid_cell %d, nushift %d,
e
NB_offset %d, l %d)
\n
"
,
ue
->
Mod_id
,
slot
,
Nid_cell
,
nushift
,
LOG_D
(
PHY
,
"[UE %d] slot %d Doing ue_rrc_measurements rsrp/rssi (Nid_cell %d, nushift %d,
g
NB_offset %d, l %d)
\n
"
,
ue
->
Mod_id
,
slot
,
Nid_cell
,
nushift
,
e
NB_offset
,
l
);
g
NB_offset
,
l
);
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
ssb_offset
+
nushift
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
ssb_offset
+
nushift
)];
...
@@ -267,7 +269,7 @@ void nr_ue_rsrp_measurements(PHY_VARS_NR_UE *ue,
...
@@ -267,7 +269,7 @@ void nr_ue_rsrp_measurements(PHY_VARS_NR_UE *ue,
if
(
l
==
0
)
{
if
(
l
==
0
)
{
for
(
rb
=
0
;
rb
<
nb_rb
;
rb
++
)
{
for
(
rb
=
0
;
rb
<
nb_rb
;
rb
++
)
{
ue
->
measurements
.
rsrp
[
eNB_offset
]
+=
(((
int32_t
)(
rxF
[
off
])
*
rxF
[
off
])
+
((
int32_t
)(
rxF
[
off
+
1
])
*
rxF
[
off
+
1
]));
ue
->
measurements
.
rsrp
[
gNB_offset
][
beam_idx_ue
][
beam_idx_gnb
]
+=
(((
int32_t
)(
rxF
[
off
])
*
rxF
[
off
])
+
((
int32_t
)(
rxF
[
off
+
1
])
*
rxF
[
off
+
1
]));
//printf("rb %d, off %d : %d\n",rb,off,((((int32_t)rxF[off])*rxF[off])+((int32_t)(rxF[off+1])*rxF[off+1])));
//printf("rb %d, off %d : %d\n",rb,off,((((int32_t)rxF[off])*rxF[off])+((int32_t)(rxF[off+1])*rxF[off+1])));
off
=
(
off
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
off
=
(
off
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
...
@@ -276,21 +278,21 @@ void nr_ue_rsrp_measurements(PHY_VARS_NR_UE *ue,
...
@@ -276,21 +278,21 @@ void nr_ue_rsrp_measurements(PHY_VARS_NR_UE *ue,
}
}
}
}
ue
->
measurements
.
rsrp
[
eNB_offset
]
/=
nb_rb
;
ue
->
measurements
.
rsrp
[
gNB_offset
][
beam_idx_ue
][
beam_idx_gnb
]
/=
nb_rb
;
}
else
{
}
else
{
ue
->
measurements
.
rsrp
[
eNB_offset
]
=
-
93
;
ue
->
measurements
.
rsrp
[
gNB_offset
][
beam_idx_ue
][
beam_idx_gnb
]
=
-
93
;
}
}
if
(
e
NB_offset
==
0
)
if
(
g
NB_offset
==
0
)
LOG_I
(
PHY
,
"[UE %d] slot %d RRC Measurements (idx %d, Cell id %d) => rsrp: %3.1f dBm/RE (%d)
\n
"
,
LOG_I
(
PHY
,
"[UE %d] slot %d RRC Measurements (idx %d, Cell id %d) => rsrp: %3.1f dBm/RE (%d)
\n
"
,
ue
->
Mod_id
,
ue
->
Mod_id
,
slot
,
e
NB_offset
,
slot
,
g
NB_offset
,
(
eNB_offset
>
0
)
?
ue
->
measurements
.
adj_cell_id
[
e
NB_offset
-
1
]
:
ue
->
frame_parms
.
Nid_cell
,
(
gNB_offset
>
0
)
?
ue
->
measurements
.
adj_cell_id
[
g
NB_offset
-
1
]
:
ue
->
frame_parms
.
Nid_cell
,
10
*
log10
(
ue
->
measurements
.
rsrp
[
eNB_offset
])
-
ue
->
rx_total_gain_dB
,
10
*
log10
(
ue
->
measurements
.
rsrp
[
gNB_offset
][
beam_idx_ue
][
beam_idx_gnb
])
-
ue
->
rx_total_gain_dB
,
ue
->
measurements
.
rsrp
[
eNB_offset
]);
ue
->
measurements
.
rsrp
[
gNB_offset
][
beam_idx_ue
][
beam_idx_gnb
]);
}
}
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
View file @
c2b06701
...
@@ -395,8 +395,8 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *ue, runmode_t mode,
...
@@ -395,8 +395,8 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *ue, runmode_t mode,
10
*
log10
(
ue
->
measurements
.
rssi
),
10
*
log10
(
ue
->
measurements
.
rssi
),
ue
->
rx_total_gain_dB
,
ue
->
rx_total_gain_dB
,
ue
->
measurements
.
n0_power_tot_dBm
,
ue
->
measurements
.
n0_power_tot_dBm
,
10
*
log10
(
ue
->
measurements
.
rsrp
[
0
])
-
ue
->
rx_total_gain_dB
,
10
*
log10
(
ue
->
measurements
.
rsrp
[
0
]
[
0
][
0
]
)
-
ue
->
rx_total_gain_dB
,
(
10
*
log10
(
ue
->
measurements
.
rsrq
[
0
])));
(
10
*
log10
(
ue
->
measurements
.
rsrq
[
0
]
[
0
][
0
]
)));
/* LOG_I(PHY, "[UE %d] Frame %d MIB Information => %s, %s, NidCell %d, N_RB_DL %d, PHICH DURATION %d, PHICH RESOURCE %s, TX_ANT %d\n",
/* LOG_I(PHY, "[UE %d] Frame %d MIB Information => %s, %s, NidCell %d, N_RB_DL %d, PHICH DURATION %d, PHICH RESOURCE %s, TX_ANT %d\n",
ue->Mod_id,
ue->Mod_id,
...
...
openair1/PHY/defs_nr_UE.h
View file @
c2b06701
...
@@ -185,10 +185,16 @@ typedef struct {
...
@@ -185,10 +185,16 @@ typedef struct {
uint32_t
rssi
;
uint32_t
rssi
;
int
n_adj_cells
;
int
n_adj_cells
;
unsigned
int
adj_cell_id
[
6
];
unsigned
int
adj_cell_id
[
6
];
uint32_t
rsrq
[
7
];
uint32_t
rsrq
[
7
]
[
8
][
64
]
;
uint32_t
rsrp
[
7
];
uint32_t
rsrp
[
7
]
[
8
][
64
]
;
float
rsrp_filtered
[
7
];
// after layer 3 filtering
float
rsrp_filtered
[
7
];
// after layer 3 filtering
float
rsrq_filtered
[
7
];
float
rsrq_filtered
[
7
];
int
gnb_beam_cnt
;
int
ue_beam_cnt
;
int
first_beam_meas
;
int
frame_last_beam
;
int
best_beam_ue
;
int
best_beam_gnb
;
// common measurements
// common measurements
//! estimated noise power (linear)
//! estimated noise power (linear)
unsigned
int
n0_power
[
NB_ANTENNAS_RX
];
unsigned
int
n0_power
[
NB_ANTENNAS_RX
];
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
c2b06701
...
@@ -261,7 +261,7 @@ void nr_ue_measurement_procedures(uint16_t l, // symbol index of each slot [0
...
@@ -261,7 +261,7 @@ void nr_ue_measurement_procedures(uint16_t l, // symbol index of each slot [0
#if T_TRACER
#if T_TRACER
if
(
slot
==
0
)
if
(
slot
==
0
)
T
(
T_UE_PHY_MEAS
,
T_INT
(
eNB_id
),
T_INT
(
ue
->
Mod_id
),
T_INT
(
frame_rx
%
1024
),
T_INT
(
nr_slot_rx
),
T
(
T_UE_PHY_MEAS
,
T_INT
(
eNB_id
),
T_INT
(
ue
->
Mod_id
),
T_INT
(
frame_rx
%
1024
),
T_INT
(
nr_slot_rx
),
T_INT
((
int
)(
10
*
log10
(
ue
->
measurements
.
rsrp
[
0
])
-
ue
->
rx_total_gain_dB
)),
T_INT
((
int
)(
10
*
log10
(
ue
->
measurements
.
rsrp
[
0
]
[
0
][
0
]
)
-
ue
->
rx_total_gain_dB
)),
T_INT
((
int
)
ue
->
measurements
.
rx_rssi_dBm
[
0
]),
T_INT
((
int
)
ue
->
measurements
.
rx_rssi_dBm
[
0
]),
T_INT
((
int
)(
ue
->
measurements
.
rx_power_avg_dB
[
0
]
-
ue
->
measurements
.
n0_power_avg_dB
)),
T_INT
((
int
)(
ue
->
measurements
.
rx_power_avg_dB
[
0
]
-
ue
->
measurements
.
n0_power_avg_dB
)),
T_INT
((
int
)
ue
->
measurements
.
rx_power_avg_dB
[
0
]),
T_INT
((
int
)
ue
->
measurements
.
rx_power_avg_dB
[
0
]),
...
@@ -1701,6 +1701,55 @@ int is_pbch_in_slot(fapi_nr_config_request_t *config, int frame, int slot, NR_DL
...
@@ -1701,6 +1701,55 @@ int is_pbch_in_slot(fapi_nr_config_request_t *config, int frame, int slot, NR_DL
}
}
void
nr_get_beam_cnt
(
PHY_VARS_NR_UE
*
ue
,
int
frame_rx
,
uint16_t
nb_ssbri_cri
)
{
printf
(
"before frame temp %d frame rx %d first_beam_meas %d
\n
"
,
ue
->
measurements
.
frame_last_beam
,
frame_rx
,
ue
->
measurements
.
first_beam_meas
);
if
(
ue
->
measurements
.
first_beam_meas
)
{
ue
->
measurements
.
frame_last_beam
=
frame_rx
;
ue
->
measurements
.
first_beam_meas
=
0
;
}
printf
(
"frame temp %d frame rx %d gnb beam %d ue beam %d
\n
"
,
ue
->
measurements
.
frame_last_beam
,
frame_rx
,
ue
->
measurements
.
gnb_beam_cnt
,
ue
->
measurements
.
ue_beam_cnt
);
if
(
ue
->
measurements
.
frame_last_beam
==
frame_rx
){
ue
->
measurements
.
gnb_beam_cnt
++
;
}
else
{
ue
->
measurements
.
ue_beam_cnt
++
;
ue
->
measurements
.
frame_last_beam
=
frame_rx
;
ue
->
measurements
.
gnb_beam_cnt
=
0
;
}
printf
(
"ue procedure gnb beam cnt %d frame_temp %d ue beam %d
\n
"
,
ue
->
measurements
.
gnb_beam_cnt
,
ue
->
measurements
.
frame_last_beam
,
ue
->
measurements
.
ue_beam_cnt
);
}
void
nr_get_best_beam
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
gNB_id
,
uint16_t
nb_ssbri_cri
)
{
uint32_t
rsrp_temp
=
0
;
int
ue_beam_temp
=
0
;
int
gnb_beam_temp
=
0
;
if
((
ue
->
measurements
.
ue_beam_cnt
==
3
)
&&
((
nb_ssbri_cri
-
1
)
==
ue
->
measurements
.
gnb_beam_cnt
)){
for
(
int
i
=
0
;
i
<
4
;
i
++
){
for
(
int
j
=
0
;
j
<
nb_ssbri_cri
;
j
++
){
if
(
ue
->
measurements
.
rsrp
[
gNB_id
][
i
][
j
]
>
rsrp_temp
){
rsrp_temp
=
ue
->
measurements
.
rsrp
[
gNB_id
][
i
][
j
];
ue_beam_temp
=
i
;
gnb_beam_temp
=
j
;
//beam_pair[cnt_gnb_beam]= cnt_ue_beam;
printf
(
"loop temp %d beam ue %d gnb %d rsrp %d
\n
"
,
ue_beam_temp
,
i
,
j
,
rsrp_temp
);
}
}
}
ue
->
measurements
.
best_beam_ue
=
ue_beam_temp
;
ue
->
measurements
.
best_beam_gnb
=
gnb_beam_temp
;
ue
->
measurements
.
ue_beam_cnt
=
-
1
;
printf
(
"best ue beam %d
\n
"
,
ue_beam_temp
);
}
}
int
phy_procedures_nrUE_RX
(
PHY_VARS_NR_UE
*
ue
,
int
phy_procedures_nrUE_RX
(
PHY_VARS_NR_UE
*
ue
,
UE_nr_rxtx_proc_t
*
proc
,
UE_nr_rxtx_proc_t
*
proc
,
uint8_t
gNB_id
,
uint8_t
gNB_id
,
...
@@ -1717,7 +1766,14 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
...
@@ -1717,7 +1766,14 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
uint8_t
dci_cnt
=
0
;
uint8_t
dci_cnt
=
0
;
NR_DL_FRAME_PARMS
*
fp
=
&
ue
->
frame_parms
;
NR_DL_FRAME_PARMS
*
fp
=
&
ue
->
frame_parms
;
//NR_UE_MAC_INST_t *mac = get_mac_inst(0);
uint16_t
nb_ssbri_cri
=
0
;
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
0
);
NR_CSI_MeasConfig_t
*
csi_MeasConfig
=
mac
->
scg
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
;
nb_ssbri_cri
=
*
(
csi_MeasConfig
->
csi_ReportConfigToAddModList
->
list
.
array
[
0
]
->
groupBasedBeamReporting
.
choice
.
disabled
->
nrofReportedRS
)
+
1
;
//printf("nb ssbri cri %d\n", nb_ssbri_cri);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX
,
VCD_FUNCTION_IN
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX
,
VCD_FUNCTION_IN
);
...
@@ -1739,7 +1795,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
...
@@ -1739,7 +1795,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
// looking for pbch only in slot where it is supposed to be
// looking for pbch only in slot where it is supposed to be
if
(
slot_ssb
)
{
if
(
slot_ssb
)
{
LOG_
D
(
PHY
,
" ------ PBCH ChannelComp/LLR: frame.slot %d.%d ------
\n
"
,
frame_rx
%
1024
,
nr_slot_rx
);
LOG_
I
(
PHY
,
" ------ PBCH ChannelComp/LLR: frame.slot %d.%d ------
\n
"
,
frame_rx
%
1024
,
nr_slot_rx
);
for
(
int
i
=
1
;
i
<
4
;
i
++
)
{
for
(
int
i
=
1
;
i
<
4
;
i
++
)
{
nr_slot_fep
(
ue
,
nr_slot_fep
(
ue
,
...
@@ -1757,11 +1813,16 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
...
@@ -1757,11 +1813,16 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
stop_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
stop_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
#endif
}
}
nr_get_beam_cnt
(
ue
,
frame_rx
,
nb_ssbri_cri
);
//if (mac->csirc->reportQuantity.choice.ssb_Index_RSRP){
//if (mac->csirc->reportQuantity.choice.ssb_Index_RSRP){
nr_ue_rsrp_measurements
(
ue
,
proc
,
nr_slot_rx
,
0
);
if
(
ue
->
measurements
.
gnb_beam_cnt
<
nb_ssbri_cri
)
nr_ue_rsrp_measurements
(
ue
,
proc
,
nr_slot_rx
,
0
);
//}
//}
nr_get_best_beam
(
ue
,
gNB_id
,
nb_ssbri_cri
);
if
((
ue
->
decode_MIB
==
1
)
&&
slot_pbch
)
{
if
((
ue
->
decode_MIB
==
1
)
&&
slot_pbch
)
{
LOG_D
(
PHY
,
" ------ Decode MIB: frame.slot %d.%d ------
\n
"
,
frame_rx
%
1024
,
nr_slot_rx
);
LOG_D
(
PHY
,
" ------ Decode MIB: frame.slot %d.%d ------
\n
"
,
frame_rx
%
1024
,
nr_slot_rx
);
...
...
openair1/SCHED_NR_UE/pucch_uci_ue_nr.c
View file @
c2b06701
...
@@ -95,6 +95,8 @@ binary_search_float_nr(
...
@@ -95,6 +95,8 @@ binary_search_float_nr(
return
first
;
return
first
;
}
}
float
diff_rsrp_meas
[
16
]
=
{
0
,
-
2
,
-
4
,
-
6
,
-
8
,
-
10
,
-
12
,
-
14
,
-
16
,
-
18
,
-
20
,
-
22
,
-
24
,
-
26
,
-
28
,
-
30
};
/*
/*
void nr_generate_pucch0(int32_t **txdataF,
void nr_generate_pucch0(int32_t **txdataF,
NR_DL_FRAME_PARMS *frame_parms,
NR_DL_FRAME_PARMS *frame_parms,
...
@@ -1361,9 +1363,18 @@ int get_csi_nr(NR_UE_MAC_INST_t *mac, PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint32
...
@@ -1361,9 +1363,18 @@ int get_csi_nr(NR_UE_MAC_INST_t *mac, PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint32
int
nElem
=
98
;
int
nElem
=
98
;
int
rsrp_offset
=
17
;
int
rsrp_offset
=
17
;
int
csi_status
=
0
;
int
csi_status
=
0
;
uint16_t
nb_ssbri_cri
=
0
;
int
best_beam_ue
=
ue
->
measurements
.
best_beam_ue
;
int
best_beam_gnb
=
ue
->
measurements
.
best_beam_gnb
;
NR_CSI_MeasConfig_t
*
csi_MeasConfig
=
mac
->
scg
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
;
if
(
NULL
!=
csi_MeasConfig
->
csi_ReportConfigToAddModList
->
list
.
array
[
0
]
->
groupBasedBeamReporting
.
choice
.
disabled
->
nrofReportedRS
)
nb_ssbri_cri
=
*
(
csi_MeasConfig
->
csi_ReportConfigToAddModList
->
list
.
array
[
0
]
->
groupBasedBeamReporting
.
choice
.
disabled
->
nrofReportedRS
)
+
1
;
else
nb_ssbri_cri
=
1
;
csi_status
=
get_nr_csi_bitlen
(
mac
);
csi_status
=
get_nr_csi_bitlen
(
mac
);
rsrp_db
[
0
]
=
get_nr_RSRP
(
0
,
0
,
0
);
rsrp_db
[
0
]
=
get_nr_RSRP
(
0
,
0
,
0
,
best_beam_ue
,
best_beam_gnb
);
if
(
csi_status
==
0
)
{
if
(
csi_status
==
0
)
{
...
@@ -1371,6 +1382,12 @@ int get_csi_nr(NR_UE_MAC_INST_t *mac, PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint32
...
@@ -1371,6 +1382,12 @@ int get_csi_nr(NR_UE_MAC_INST_t *mac, PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint32
}
}
else
{
else
{
*
csi_payload
=
binary_search_float_nr
(
RSRP_meas_mapping_nr
,
nElem
,
rsrp_db
[
0
])
+
rsrp_offset
;
*
csi_payload
=
binary_search_float_nr
(
RSRP_meas_mapping_nr
,
nElem
,
rsrp_db
[
0
])
+
rsrp_offset
;
for
(
int
i
=
1
;
i
<
nb_ssbri_cri
;
i
++
){
if
(
i
==
best_beam_gnb
)
i
++
;
rsrp_db
[
i
]
=
get_nr_RSRP
(
0
,
0
,
0
,
best_beam_ue
,
i
);
*
csi_payload
=
*
csi_payload
|
binary_search_float_nr
(
diff_rsrp_meas
,
16
,(
rsrp_db
[
i
]
-
rsrp_db
[
0
]));
}
}
}
return
(
csi_status
);
return
(
csi_status
);
...
...
openair2/LAYER2/NR_MAC_UE/mac_defs.h
View file @
c2b06701
...
@@ -252,6 +252,8 @@ typedef struct {
...
@@ -252,6 +252,8 @@ typedef struct {
uint8_t
generate_nr_prach
;
uint8_t
generate_nr_prach
;
/// SSB index from MIB decoding
/// SSB index from MIB decoding
uint8_t
mib_ssb
;
uint8_t
mib_ssb
;
/// TCI ssb index
uint8_t
tci_ssb_id
;
//// FAPI-like interface message
//// FAPI-like interface message
fapi_nr_ul_config_request_t
*
ul_config_request
;
fapi_nr_ul_config_request_t
*
ul_config_request
;
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
View file @
c2b06701
...
@@ -4715,6 +4715,11 @@ void nr_ue_process_mac_pdu(module_id_t module_idP,
...
@@ -4715,6 +4715,11 @@ void nr_ue_process_mac_pdu(module_id_t module_idP,
uint16_t
mac_ce_len
,
mac_subheader_len
,
mac_sdu_len
;
uint16_t
mac_ce_len
,
mac_subheader_len
,
mac_sdu_len
;
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_idP
);
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_idP
);
NR_ServingCellConfig_t
*
scd
=
mac
->
scg
->
spCellConfig
->
spCellConfigDedicated
;
NR_BWP_DownlinkDedicated_t
*
dl_bwp_Dedicated
=
scd
->
downlinkBWP_ToAddModList
->
list
.
array
[
0
]
->
bwp_Dedicated
;
NR_SetupRelease_PDSCH_Config_t
*
pdsch_Config
=
dl_bwp_Dedicated
->
pdsch_Config
;
//NR_UE_MAC_INST_t *UE_mac_inst = get_mac_inst(module_idP);
//NR_UE_MAC_INST_t *UE_mac_inst = get_mac_inst(module_idP);
//uint8_t scs = UE_mac_inst->mib->subCarrierSpacingCommon;
//uint8_t scs = UE_mac_inst->mib->subCarrierSpacingCommon;
//uint16_t bwp_ul_NB_RB = UE_mac_inst->initial_bwp_ul.N_RB;
//uint16_t bwp_ul_NB_RB = UE_mac_inst->initial_bwp_ul.N_RB;
...
@@ -4829,6 +4834,9 @@ void nr_ue_process_mac_pdu(module_id_t module_idP,
...
@@ -4829,6 +4834,9 @@ void nr_ue_process_mac_pdu(module_id_t module_idP,
case
DL_SCH_LCID_TCI_STATE_IND_UE_SPEC_PDCCH
:
case
DL_SCH_LCID_TCI_STATE_IND_UE_SPEC_PDCCH
:
// 38.321 Ch6.1.3.15
// 38.321 Ch6.1.3.15
mac_ce_len
=
2
;
mac_ce_len
=
2
;
uint8_t
tci_stateid
=
((
NR_TCI_PDCCH
*
)
pdu_ptr
)[
1
].
TciStateId
;
uint8_t
ssb_id
=
pdsch_Config
->
choice
.
setup
->
tci_StatesToAddModList
->
list
.
array
[
tci_stateid
]
->
qcl_Type1
.
referenceSignal
.
choice
.
ssb
;
mac
->
tci_ssb_id
=
ssb_id
;
break
;
break
;
case
DL_SCH_LCID_DUPLICATION_ACT
:
case
DL_SCH_LCID_DUPLICATION_ACT
:
// 38.321 Ch6.1.3.11
// 38.321 Ch6.1.3.11
...
...
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