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
Michael Black
OpenXG-RAN
Commits
1f818b41
Commit
1f818b41
authored
Jul 26, 2022
by
Roberto Louro Magueta
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
RSRP computation at UE based on CSI-RS
parent
6ba60eb1
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
33 additions
and
4 deletions
+33
-4
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+2
-0
openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
+31
-4
No files found.
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
View file @
1f818b41
...
@@ -48,6 +48,8 @@ typedef struct {
...
@@ -48,6 +48,8 @@ typedef struct {
}
fapi_nr_uci_pdu_rel15_t
;
}
fapi_nr_uci_pdu_rel15_t
;
typedef
struct
{
typedef
struct
{
uint32_t
rsrp
;
int
rsrp_dBm
;
uint8_t
rank_indicator
;
uint8_t
rank_indicator
;
uint8_t
i1
;
uint8_t
i1
;
uint8_t
i2
;
uint8_t
i2
;
...
...
openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
View file @
1f818b41
...
@@ -33,12 +33,15 @@
...
@@ -33,12 +33,15 @@
#include <stdlib.h>
#include <stdlib.h>
#include <string.h>
#include <string.h>
#include "executables/nr-softmodem-common.h"
#include "nr_transport_proto_ue.h"
#include "nr_transport_proto_ue.h"
#include "PHY/phy_extern_nr_ue.h"
#include "PHY/phy_extern_nr_ue.h"
#include "common/utils/nr/nr_common.h"
#include "common/utils/nr/nr_common.h"
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
#include "PHY/NR_UE_ESTIMATION/filt16a_32.h"
#include "PHY/NR_UE_ESTIMATION/filt16a_32.h"
// 10*log10(pow(2,30))
#define pow_2_30_dB 90
//#define NR_CSIRS_DEBUG
//#define NR_CSIRS_DEBUG
//#define NR_CSIIM_DEBUG
//#define NR_CSIIM_DEBUG
...
@@ -185,10 +188,14 @@ int nr_get_csi_rs_signal(const PHY_VARS_NR_UE *ue,
...
@@ -185,10 +188,14 @@ int nr_get_csi_rs_signal(const PHY_VARS_NR_UE *ue,
const
uint8_t
*
j_cdm
,
const
uint8_t
*
j_cdm
,
const
uint8_t
*
k_overline
,
const
uint8_t
*
k_overline
,
const
uint8_t
*
l_overline
,
const
uint8_t
*
l_overline
,
int32_t
csi_rs_received_signal
[][
ue
->
frame_parms
.
samples_per_slot_wCP
])
{
int32_t
csi_rs_received_signal
[][
ue
->
frame_parms
.
samples_per_slot_wCP
],
uint32_t
*
rsrp
,
int
*
rsrp_dBm
)
{
int32_t
**
rxdataF
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[
proc
->
thread_id
].
rxdataF
;
int32_t
**
rxdataF
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[
proc
->
thread_id
].
rxdataF
;
const
NR_DL_FRAME_PARMS
*
frame_parms
=
&
ue
->
frame_parms
;
const
NR_DL_FRAME_PARMS
*
frame_parms
=
&
ue
->
frame_parms
;
uint16_t
meas_count
=
0
;
uint32_t
rsrp_sum
=
0
;
for
(
int
ant_rx
=
0
;
ant_rx
<
frame_parms
->
nb_antennas_rx
;
ant_rx
++
)
{
for
(
int
ant_rx
=
0
;
ant_rx
<
frame_parms
->
nb_antennas_rx
;
ant_rx
++
)
{
...
@@ -216,6 +223,11 @@ int nr_get_csi_rs_signal(const PHY_VARS_NR_UE *ue,
...
@@ -216,6 +223,11 @@ int nr_get_csi_rs_signal(const PHY_VARS_NR_UE *ue,
rx_csi_rs_signal
[
k
].
r
=
rx_signal
[
k
].
r
;
rx_csi_rs_signal
[
k
].
r
=
rx_signal
[
k
].
r
;
rx_csi_rs_signal
[
k
].
i
=
rx_signal
[
k
].
i
;
rx_csi_rs_signal
[
k
].
i
=
rx_signal
[
k
].
i
;
rsrp_sum
+=
(((
int32_t
)(
rx_csi_rs_signal
[
k
].
r
)
*
rx_csi_rs_signal
[
k
].
r
)
+
((
int32_t
)(
rx_csi_rs_signal
[
k
].
i
)
*
rx_csi_rs_signal
[
k
].
i
));
meas_count
++
;
#ifdef NR_CSIRS_DEBUG
#ifdef NR_CSIRS_DEBUG
int
dataF_offset
=
proc
->
nr_slot_rx
*
ue
->
frame_parms
.
samples_per_slot_wCP
;
int
dataF_offset
=
proc
->
nr_slot_rx
*
ue
->
frame_parms
.
samples_per_slot_wCP
;
uint16_t
port_tx
=
s
+
j_cdm
[
cdm_id
]
*
CDM_group_size
;
uint16_t
port_tx
=
s
+
j_cdm
[
cdm_id
]
*
CDM_group_size
;
...
@@ -237,6 +249,15 @@ int nr_get_csi_rs_signal(const PHY_VARS_NR_UE *ue,
...
@@ -237,6 +249,15 @@ int nr_get_csi_rs_signal(const PHY_VARS_NR_UE *ue,
}
}
}
}
*
rsrp
=
rsrp_sum
/
meas_count
;
*
rsrp_dBm
=
dB_fixed
(
*
rsrp
)
+
30
-
pow_2_30_dB
-
((
int
)
openair0_cfg
[
0
].
rx_gain
[
0
]
-
(
int
)
openair0_cfg
[
0
].
rx_gain_offset
[
0
])
-
dB_fixed
(
ue
->
frame_parms
.
ofdm_symbol_size
);
#ifdef NR_CSIRS_DEBUG
LOG_I
(
NR_PHY
,
"RSRP = %i (%i dBm)
\n
"
,
*
rsrp
,
*
rsrp_dBm
);
#endif
return
0
;
return
0
;
}
}
...
@@ -839,6 +860,8 @@ int nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
...
@@ -839,6 +860,8 @@ int nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
uint8_t
l_overline
[
16
];
uint8_t
l_overline
[
16
];
int16_t
log2_re
=
0
;
int16_t
log2_re
=
0
;
int16_t
log2_maxh
=
0
;
int16_t
log2_maxh
=
0
;
uint32_t
rsrp
=
0
;
int
rsrp_dBm
=
0
;
uint32_t
noise_power
=
0
;
uint32_t
noise_power
=
0
;
uint8_t
rank_indicator
=
0
;
uint8_t
rank_indicator
=
0
;
uint32_t
precoded_sinr_dB
=
0
;
uint32_t
precoded_sinr_dB
=
0
;
...
@@ -875,7 +898,9 @@ int nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
...
@@ -875,7 +898,9 @@ int nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
j_cdm
,
j_cdm
,
k_overline
,
k_overline
,
l_overline
,
l_overline
,
csi_rs_received_signal
);
csi_rs_received_signal
,
&
rsrp
,
&
rsrp_dBm
);
nr_csi_rs_channel_estimation
(
ue
,
nr_csi_rs_channel_estimation
(
ue
,
proc
,
proc
,
...
@@ -919,11 +944,13 @@ int nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
...
@@ -919,11 +944,13 @@ int nr_ue_csi_rs_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t
nr_csi_rs_cqi_estimation
(
precoded_sinr_dB
,
&
cqi
);
nr_csi_rs_cqi_estimation
(
precoded_sinr_dB
,
&
cqi
);
LOG_I
(
NR_PHY
,
"RI = %i, i1 = %i.%i.%i, i2 = %i, SINR = %i dB, CQI = %i
\n
"
,
LOG_I
(
NR_PHY
,
"R
SRP = %i dBm, R
I = %i, i1 = %i.%i.%i, i2 = %i, SINR = %i dB, CQI = %i
\n
"
,
rank_indicator
+
1
,
i1
[
0
],
i1
[
1
],
i1
[
2
],
i2
[
0
],
precoded_sinr_dB
,
cqi
);
r
srp_dBm
,
r
ank_indicator
+
1
,
i1
[
0
],
i1
[
1
],
i1
[
2
],
i2
[
0
],
precoded_sinr_dB
,
cqi
);
// Send CSI measurements to MAC
// Send CSI measurements to MAC
fapi_nr_csirs_measurements_t
csirs_measurements
;
fapi_nr_csirs_measurements_t
csirs_measurements
;
csirs_measurements
.
rsrp
=
rsrp
;
csirs_measurements
.
rsrp_dBm
=
rsrp_dBm
;
csirs_measurements
.
rank_indicator
=
rank_indicator
;
csirs_measurements
.
rank_indicator
=
rank_indicator
;
csirs_measurements
.
i1
=
*
i1
;
csirs_measurements
.
i1
=
*
i1
;
csirs_measurements
.
i2
=
*
i2
;
csirs_measurements
.
i2
=
*
i2
;
...
...
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