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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG
OpenXG-RAN
Commits
c57a112a
Commit
c57a112a
authored
Feb 20, 2026
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cleanup of PHY_NR_MEASUREMENTS structure to remove unused fields and dependence from NB_ANTENNAS_RX
parent
dea42f7e
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
24 additions
and
92 deletions
+24
-92
openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c
openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c
+12
-27
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+5
-22
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+7
-43
No files found.
openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c
View file @
c57a112a
...
...
@@ -81,32 +81,21 @@ void nr_ue_measurements(PHY_VARS_NR_UE *ue,
false
);
// signal measurements
for
(
gNB_id
=
0
;
gNB_id
<
ue
->
n_connected_gNB
;
gNB_id
++
){
for
(
gNB_id
=
0
;
gNB_id
<
ue
->
n_connected_gNB
;
gNB_id
++
)
{
ue
->
measurements
.
rx_power_tot
[
gNB_id
]
=
0
;
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
){
ue
->
measurements
.
rx_power
[
gNB_id
][
aarx
]
=
0
;
for
(
aatx
=
0
;
aatx
<
frame_parms
->
nb_antenna_ports_gNB
;
aatx
++
){
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
int
rx_power
=
0
;
for
(
aatx
=
0
;
aatx
<
frame_parms
->
nb_antenna_ports_gNB
;
aatx
++
)
{
const
int
z
=
signal_energy_nodc
((
c16_t
*
)
&
dl_ch_estimates
[
gNB_id
][
ch_offset
],
number_rbs
*
NR_NB_SC_PER_RB
);
rx_spatial_power
[
gNB_id
][
aatx
][
aarx
]
=
z
;
if
(
rx_spatial_power
[
gNB_id
][
aatx
][
aarx
]
<
0
)
rx_spatial_power
[
gNB_id
][
aatx
][
aarx
]
=
0
;
rx_spatial_power_dB
[
gNB_id
][
aatx
][
aarx
]
=
(
unsigned
short
)
dB_fixed
(
rx_spatial_power
[
gNB_id
][
aatx
][
aarx
]);
ue
->
measurements
.
rx_power
[
gNB_id
][
aarx
]
+=
rx_spatial_power
[
gNB_id
][
aatx
][
aarx
];
rx_power
+=
rx_spatial_power
[
gNB_id
][
aatx
][
aarx
];
}
ue
->
measurements
.
rx_power_dB
[
gNB_id
][
aarx
]
=
(
unsigned
short
)
dB_fixed
(
ue
->
measurements
.
rx_power
[
gNB_id
][
aarx
]);
ue
->
measurements
.
rx_power_tot
[
gNB_id
]
+=
ue
->
measurements
.
rx_power
[
gNB_id
][
aarx
];
ue
->
measurements
.
rx_power_tot
[
gNB_id
]
+=
rx_power
;
}
ue
->
measurements
.
rx_power_tot_dB
[
gNB_id
]
=
(
unsigned
short
)
dB_fixed
(
ue
->
measurements
.
rx_power_tot
[
gNB_id
]);
}
// filter to remove jitter
...
...
@@ -533,9 +522,9 @@ void nr_ue_rrc_measurements(PHY_VARS_NR_UE *ue,
LOG_D
(
PHY
,
"In %s doing measurements for ssb_offset %d l_sss %d
\n
"
,
__FUNCTION__
,
ssb_offset
,
l_sss
);
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
u
e
->
measurements
.
n0_power
[
aarx
]
=
0
;
u
int32_t
n0_power
=
0
;
rxF_sss
=
(
int16_t
*
)
&
rxdataF
[
aarx
][
l_sss
*
ue
->
frame_parms
.
ofdm_symbol_size
];
//-ve spectrum from SSS
...
...
@@ -547,8 +536,7 @@ void nr_ue_rrc_measurements(PHY_VARS_NR_UE *ue,
LOG_I
(
PHY
,
"In %s -rxF_sss %d %d
\n
"
,
__FUNCTION__
,
rxF_sss
[
re
*
2
],
rxF_sss
[
re
*
2
+
1
]);
#endif
ue
->
measurements
.
n0_power
[
aarx
]
+=
(((
int32_t
)
rxF_sss
[
re
*
2
]
*
rxF_sss
[
re
*
2
])
+
((
int32_t
)
rxF_sss
[
re
*
2
+
1
]
*
rxF_sss
[
re
*
2
+
1
]));
n0_power
+=
(((
int32_t
)
rxF_sss
[
re
*
2
]
*
rxF_sss
[
re
*
2
])
+
((
int32_t
)
rxF_sss
[
re
*
2
+
1
]
*
rxF_sss
[
re
*
2
+
1
]));
}
//+ve spectrum from SSS
...
...
@@ -560,14 +548,11 @@ void nr_ue_rrc_measurements(PHY_VARS_NR_UE *ue,
LOG_I
(
PHY
,
"In %s +rxF_sss %d %d
\n
"
,
__FUNCTION__
,
rxF_sss
[
re
*
2
],
rxF_sss
[
re
*
2
+
1
]);
#endif
ue
->
measurements
.
n0_power
[
aarx
]
+=
(((
int32_t
)
rxF_sss
[
re
*
2
]
*
rxF_sss
[
re
*
2
])
+
((
int32_t
)
rxF_sss
[
re
*
2
+
1
]
*
rxF_sss
[
re
*
2
+
1
]));
n0_power
+=
(((
int32_t
)
rxF_sss
[
re
*
2
]
*
rxF_sss
[
re
*
2
])
+
((
int32_t
)
rxF_sss
[
re
*
2
+
1
]
*
rxF_sss
[
re
*
2
+
1
]));
}
ue
->
measurements
.
n0_power
[
aarx
]
/=
2
*
k_length
;
ue
->
measurements
.
n0_power_dB
[
aarx
]
=
(
unsigned
short
)
dB_fixed
(
ue
->
measurements
.
n0_power
[
aarx
]);
ue
->
measurements
.
n0_power_tot
+=
ue
->
measurements
.
n0_power
[
aarx
];
n0_power
/=
2
*
k_length
;
ue
->
measurements
.
n0_power_tot
+=
n0_power
;
}
ue
->
measurements
.
n0_power_tot_dB
=
(
unsigned
short
)
dB_fixed
(
ue
->
measurements
.
n0_power_tot
);
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
View file @
c57a112a
...
...
@@ -141,7 +141,6 @@ static void nr_dlsch_channel_level_median(uint32_t rx_size_symbol,
@param rho Cross-correlation between two spatial channels on each RX antenna
@param frame_parms Pointer to frame descriptor
@param symbol Symbol on which to operate
@param first_symbol_flag set to 1 on first DLSCH symbol
@param mod_order Modulation order of allocation
@param nb_rb Number of RBs in allocation
@param output_shift Rescaling for compensated output (should be energy-normalizing)
...
...
@@ -161,7 +160,6 @@ static void nr_dlsch_channel_compensation(uint32_t rx_size_symbol,
uint8_t
n_layers
,
unsigned
char
symbol
,
int
length
,
bool
first_symbol_flag
,
unsigned
char
mod_order
,
unsigned
short
nb_rb
,
unsigned
char
output_shift
,
...
...
@@ -555,7 +553,6 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
nl
,
symbol
,
nb_re_pdsch
,
first_symbol_flag
,
dlsch_config
->
qamModOrder
,
nb_rb_pdsch
,
*
log2_maxh
,
...
...
@@ -769,7 +766,6 @@ static void nr_dlsch_channel_compensation(uint32_t rx_size_symbol,
uint8_t
n_layers
,
unsigned
char
symbol
,
int
length
,
bool
first_symbol_flag
,
unsigned
char
mod_order
,
unsigned
short
nb_rb
,
unsigned
char
output_shift
,
...
...
@@ -868,24 +864,11 @@ static void nr_dlsch_channel_compensation(uint32_t rx_size_symbol,
for
(
int
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
for
(
int
l
=
0
;
l
<
n_layers
;
l
++
)
{
for
(
int
atx
=
0
;
atx
<
n_layers
;
atx
++
)
{
rho128
=
(
simde__m128i
*
)
&
rho
[
aarx
][
l
*
n_layers
+
atx
][
symbol
*
nb_rb
*
12
];
dl_ch128
=
(
simde__m128i
*
)
dl_ch_estimates_ext
[
l
*
frame_parms
->
nb_antennas_rx
+
aarx
];
dl_ch128_2
=
(
simde__m128i
*
)
dl_ch_estimates_ext
[
atx
*
frame_parms
->
nb_antennas_rx
+
aarx
];
// multiply by conjugated channel
mult_cpx_conj_vector
((
c16_t
*
)
dl_ch128
,
(
c16_t
*
)
dl_ch128_2
,
(
c16_t
*
)
rho128
,
12
*
nb_rb_0
,
output_shift
);
if
(
first_symbol_flag
)
{
// rho_nm = H_arx_n.conj(H_arx_m)
// rho_rx_corr[arx][nm] = |H_arx_n|^2.|H_arx_m|^2 &rho[aarx][l*n_layers+atx][symbol*nb_rb*12]
measurements
->
rx_correlation
[
0
][
aarx
][
l
*
n_layers
+
atx
]
=
signal_energy
(
&
rho
[
aarx
][
l
*
n_layers
+
atx
][
symbol
*
nb_rb
*
12
],
length
);
// avg_rho_re[aarx][l*n_layers+atx] = 16*avg_rho_re[aarx][l*n_layers+atx]/length;
// avg_rho_im[aarx][l*n_layers+atx] = 16*avg_rho_im[aarx][l*n_layers+atx]/length;
// printf("rho[rx]%d tx%d tx%d = Re: %d Im: %d\n",aarx, l,atx, avg_rho_re[aarx][l*n_layers+atx],
// avg_rho_im[aarx][l*n_layers+atx]); printf("rho_corr[rx]%d tx%d tx%d = %d ...\n",aarx, l,atx,
// measurements->rx_correlation[0][aarx][l*n_layers+atx]);
}
rho128
=
(
simde__m128i
*
)
&
rho
[
aarx
][
l
*
n_layers
+
atx
][
symbol
*
nb_rb
*
12
];
dl_ch128
=
(
simde__m128i
*
)
dl_ch_estimates_ext
[
l
*
frame_parms
->
nb_antennas_rx
+
aarx
];
dl_ch128_2
=
(
simde__m128i
*
)
dl_ch_estimates_ext
[
atx
*
frame_parms
->
nb_antennas_rx
+
aarx
];
// multiply by conjugated channel
mult_cpx_conj_vector
((
c16_t
*
)
dl_ch128
,
(
c16_t
*
)
dl_ch128_2
,
(
c16_t
*
)
rho128
,
12
*
nb_rb_0
,
output_shift
);
}
}
}
...
...
openair1/PHY/defs_nr_UE.h
View file @
c57a112a
...
...
@@ -144,10 +144,6 @@ typedef struct {
int
ssb_rsrp_dBm
[
64
];
float
ssb_sinr_dB
[
64
];
// common measurements
//! estimated noise power (linear)
unsigned
int
n0_power
[
NB_ANTENNAS_RX
];
//! estimated noise power (dB)
unsigned
short
n0_power_dB
[
NB_ANTENNAS_RX
];
//! total estimated noise power (linear)
unsigned
int
n0_power_tot
;
//! total estimated noise power (dB)
...
...
@@ -165,59 +161,27 @@ typedef struct {
//! estimated received spatial signal power (dB)
fourDimArray_t
*
rx_spatial_power_dB
;
/// estimated received signal power (sum over all TX antennas)
int
rx_power
[
NUMBER_OF_CONNECTED_gNB_MAX
][
NB_ANTENNAS_RX
];
/// estimated received signal power (sum over all TX antennas)
unsigned
short
rx_power_dB
[
NUMBER_OF_CONNECTED_gNB_MAX
][
NB_ANTENNAS_RX
];
/// estimated received signal power (sum over all TX/RX antennas)
int
rx_power_tot
[
NUMBER_OF_CONNECTED_gNB_MAX
];
//NEW
int
rx_power_tot
[
NUMBER_OF_CONNECTED_gNB_MAX
];
//NEW
/// estimated received signal power (sum over all TX/RX antennas)
unsigned
short
rx_power_tot_dB
[
NUMBER_OF_CONNECTED_gNB_MAX
];
//NEW
//! estimated received signal power (sum of all TX/RX antennas, time average)
int
rx_power_avg
[
NUMBER_OF_CONNECTED_gNB_MAX
];
int
rx_power_avg
[
NUMBER_OF_CONNECTED_gNB_MAX
];
//! estimated received signal power (sum of all TX/RX antennas, time average, in dB)
unsigned
short
rx_power_avg_dB
[
NUMBER_OF_CONNECTED_gNB_MAX
];
/// SINR (sum of all TX/RX antennas, in dB)
int
wideband_cqi_tot
[
NUMBER_OF_CONNECTED_gNB_MAX
];
int
wideband_cqi_tot
[
NUMBER_OF_CONNECTED_gNB_MAX
];
/// SINR (sum of all TX/RX antennas, time average, in dB)
int
wideband_cqi_avg
[
NUMBER_OF_CONNECTED_gNB_MAX
];
int
wideband_cqi_avg
[
NUMBER_OF_CONNECTED_gNB_MAX
];
//! estimated rssi (dBm)
short
rx_rssi_dBm
[
NUMBER_OF_CONNECTED_gNB_MAX
];
//! estimated correlation (wideband linear) between spatial channels (computed in dlsch_demodulation)
int
rx_correlation
[
NUMBER_OF_CONNECTED_gNB_MAX
][
NB_ANTENNAS_RX
][
NR_MAX_NB_LAYERS
*
NR_MAX_NB_LAYERS
];
//
//! estimated correlation (wideband dB) between spatial channels (computed in dlsch_demodulation)
int
rx_correlation_dB
[
NUMBER_OF_CONNECTED_gNB_MAX
][
2
];
/// Wideband CQI (sum of all RX antennas, in dB, for precoded transmission modes (3,4,5,6), up to 4 spatial streams)
int
precoded_cqi_dB
[
NUMBER_OF_CONNECTED_gNB_MAX
+
1
][
4
];
/// Subband CQI per RX antenna (= SINR)
int
subband_cqi
[
NUMBER_OF_CONNECTED_gNB_MAX
][
NB_ANTENNAS_RX
][
NUMBER_OF_SUBBANDS_MAX
];
/// Total Subband CQI (= SINR)
int
subband_cqi_tot
[
NUMBER_OF_CONNECTED_gNB_MAX
][
NUMBER_OF_SUBBANDS_MAX
];
/// Subband CQI in dB (= SINR dB)
int
subband_cqi_dB
[
NUMBER_OF_CONNECTED_gNB_MAX
][
NB_ANTENNAS_RX
][
NUMBER_OF_SUBBANDS_MAX
];
/// Total Subband CQI
int
subband_cqi_tot_dB
[
NUMBER_OF_CONNECTED_gNB_MAX
][
NUMBER_OF_SUBBANDS_MAX
];
/// Wideband PMI for each RX antenna
int
wideband_pmi_re
[
NUMBER_OF_CONNECTED_gNB_MAX
][
NB_ANTENNAS_RX
];
/// Wideband PMI for each RX antenna
int
wideband_pmi_im
[
NUMBER_OF_CONNECTED_gNB_MAX
][
NB_ANTENNAS_RX
];
///Subband PMI for each RX antenna
int
subband_pmi_re
[
NUMBER_OF_CONNECTED_gNB_MAX
][
NUMBER_OF_SUBBANDS_MAX
][
NB_ANTENNAS_RX
];
///Subband PMI for each RX antenna
int
subband_pmi_im
[
NUMBER_OF_CONNECTED_gNB_MAX
][
NUMBER_OF_SUBBANDS_MAX
][
NB_ANTENNAS_RX
];
/// chosen RX antennas (1=Rx antenna 1, 2=Rx antenna 2, 3=both Rx antennas)
unsigned
char
selected_rx_antennas
[
NUMBER_OF_CONNECTED_gNB_MAX
][
NUMBER_OF_SUBBANDS_MAX
];
/// Wideband Rank indication
unsigned
char
rank
[
NUMBER_OF_CONNECTED_gNB_MAX
];
short
rx_rssi_dBm
[
NUMBER_OF_CONNECTED_gNB_MAX
];
/// Number of RX Antennas
unsigned
char
nb_antennas_rx
;
/// DLSCH error counter
// short dlsch_errors;
/// Info about neighboring cells to perform the measurements
neighboring_cell_info_t
neighboring_cell_info
[
NUMBER_OF_NEIGHBORING_CELLS_MAX
];
bool
meas_request_pending
;
...
...
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