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
zzha zzha
OpenXG-RAN
Commits
f3126586
Commit
f3126586
authored
Feb 07, 2023
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
removing constant max number of xlsch
parent
48d19391
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
92 additions
and
81 deletions
+92
-81
common/openairinterface5g_limits.h
common/openairinterface5g_limits.h
+0
-3
executables/nr-gnb.c
executables/nr-gnb.c
+1
-1
nfapi/oai_integration/nfapi_pnf.c
nfapi/oai_integration/nfapi_pnf.c
+2
-2
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+28
-16
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
+20
-22
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
+2
-2
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
+1
-1
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+33
-28
openair1/SCHED_NR/fapi_nr_l1.c
openair1/SCHED_NR/fapi_nr_l1.c
+3
-4
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+2
-2
No files found.
common/openairinterface5g_limits.h
View file @
f3126586
...
...
@@ -10,10 +10,7 @@
# define NUMBER_OF_ULSCH_MAX 8
# define NUMBER_OF_DLSCH_MAX 8
# define NUMBER_OF_SRS_MAX 16
# define NUMBER_OF_NR_ULSCH_MAX MAX_MOBILES_PER_GNB
# define NUMBER_OF_NR_DLSCH_MAX MAX_MOBILES_PER_GNB
# define NUMBER_OF_SCH_STATS_MAX 16
# define NUMBER_OF_NR_SCH_STATS_MAX MAX_MOBILES_PER_GNB
# define NUMBER_FRAMES_PHY_UE_INACTIVE 10
...
...
executables/nr-gnb.c
View file @
f3126586
...
...
@@ -182,7 +182,7 @@ void rx_func(void *param)
stats
->
active
=
false
;
}
// disactivate ULSCH structure if it is inactive for a given number of frames
for
(
int
i
=
0
;
i
<
NUMBER_OF_NR_ULSCH_MAX
;
i
++
)
{
for
(
int
i
=
0
;
i
<
gNB
->
max_nb_pusch
;
i
++
)
{
NR_gNB_ULSCH_t
*
ulsch
=
gNB
->
ulsch
[
i
];
if
(
ulsch
->
active
&&
(((
frame_rx
-
ulsch
->
harq_process
->
frame
+
1024
)
%
1024
)
>
NUMBER_FRAMES_PHY_UE_INACTIVE
))
ulsch
->
active
=
false
;
...
...
nfapi/oai_integration/nfapi_pnf.c
View file @
f3126586
...
...
@@ -1220,8 +1220,8 @@ int pnf_phy_dl_tti_req(gNB_L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7,
if
(
tx_data
!=
NULL
)
{
uint8_t
*
dlsch_sdu
=
(
uint8_t
*
)
tx_data
->
TLVs
[
0
].
value
.
direct
;
//NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() DLSCH:pdu_index:%d handle_nfapi_dlsch_pdu(eNB, proc_rxtx, dlsch_pdu, transport_blocks:%d sdu:%p) eNB->pdcch_vars[proc->subframe_tx & 1].num_pdcch_symbols:%d\n", __FUNCTION__, rel8_pdu->pdu_index, rel8_pdu->transport_blocks, dlsch_sdu, eNB->pdcch_vars[proc->subframe_tx & 1].num_pdcch_symbols);
AssertFatal
(
msgTx
->
num_pdsch_slot
<
NUMBER_OF_NR_DLSCH_MAX
,
"Number of PDSCH PDUs %d exceeded the limit %d
\n
"
,
msgTx
->
num_pdsch_slot
,
NUMBER_OF_NR_DLSCH_MAX
);
AssertFatal
(
msgTx
->
num_pdsch_slot
<
gNB
->
max_nb_pdsch
,
"Number of PDSCH PDUs %d exceeded the limit %d
\n
"
,
msgTx
->
num_pdsch_slot
,
gNB
->
max_nb_pdsch
);
handle_nr_nfapi_pdsch_pdu
(
msgTx
,
pdsch_pdu
,
dlsch_sdu
);
}
else
{
...
...
openair1/PHY/INIT/nr_init.c
View file @
f3126586
...
...
@@ -508,7 +508,6 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB)
nfapi_nr_config_request_scf_t
*
cfg
=
&
gNB
->
gNB_config
;
NR_gNB_COMMON
*
const
common_vars
=
&
gNB
->
common_vars
;
NR_gNB_PRACH
*
const
prach_vars
=
&
gNB
->
prach_vars
;
NR_gNB_PUSCH
**
const
pusch_vars
=
gNB
->
pusch_vars
;
int
i
;
int
Ptx
=
cfg
->
carrier_config
.
num_tx_ant
.
value
;
...
...
@@ -532,6 +531,8 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB)
if
(
gNB
->
ldpc_offload_flag
)
load_nrLDPClib_offload
();
gNB
->
max_nb_pdsch
=
MAX_MOBILES_PER_GNB
;
init_codebook_gNB
(
gNB
);
init_ul_delay_table
(
fp
);
...
...
@@ -684,7 +685,8 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB)
int
nb_re_pusch
=
N_RB_UL
*
NR_NB_SC_PER_RB
;
int
nb_re_pusch2
=
nb_re_pusch
+
(
nb_re_pusch
&
7
);
for
(
int
ULSCH_id
=
0
;
ULSCH_id
<
NUMBER_OF_NR_ULSCH_MAX
;
ULSCH_id
++
)
{
NR_gNB_PUSCH
**
pusch_vars
=
(
NR_gNB_PUSCH
**
)
malloc16_clear
(
gNB
->
max_nb_pusch
*
sizeof
(
NR_gNB_PUSCH
*
));
for
(
int
ULSCH_id
=
0
;
ULSCH_id
<
gNB
->
max_nb_pusch
;
ULSCH_id
++
)
{
pusch_vars
[
ULSCH_id
]
=
(
NR_gNB_PUSCH
*
)
malloc16_clear
(
sizeof
(
NR_gNB_PUSCH
)
);
pusch_vars
[
ULSCH_id
]
->
rxdataF_ext
=
(
int32_t
**
)
malloc16
(
Prx
*
sizeof
(
int32_t
*
)
);
pusch_vars
[
ULSCH_id
]
->
ul_ch_estimates
=
(
int32_t
**
)
malloc16
(
n_buf
*
sizeof
(
int32_t
*
)
);
...
...
@@ -836,7 +838,7 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
free_and_zero
(
prach_vars
->
prach_ifft
);
NR_gNB_PUSCH
**
pusch_vars
=
gNB
->
pusch_vars
;
for
(
int
ULSCH_id
=
0
;
ULSCH_id
<
NUMBER_OF_NR_ULSCH_MAX
;
ULSCH_id
++
)
{
for
(
int
ULSCH_id
=
0
;
ULSCH_id
<
gNB
->
max_nb_pusch
;
ULSCH_id
++
)
{
for
(
int
i
=
0
;
i
<
max_ul_mimo_layers
;
i
++
)
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
llr_layers
[
i
]);
for
(
int
i
=
0
;
i
<
Prx
;
i
++
)
{
...
...
@@ -955,7 +957,8 @@ void nr_phy_config_request_sim(PHY_VARS_gNB *gNB,
}
void
nr_phy_config_request
(
NR_PHY_Config_t
*
phy_config
)
{
void
nr_phy_config_request
(
NR_PHY_Config_t
*
phy_config
)
{
uint8_t
Mod_id
=
phy_config
->
Mod_id
;
uint8_t
short_sequence
,
num_sequences
,
rootSequenceIndex
,
fd_occasion
;
NR_DL_FRAME_PARMS
*
fp
=
&
RC
.
gNB
[
Mod_id
]
->
frame_parms
;
...
...
@@ -1007,16 +1010,19 @@ void nr_phy_config_request(NR_PHY_Config_t *phy_config) {
LOG_I
(
PHY
,
"gNB %d configured
\n
"
,
Mod_id
);
}
void
init_DLSCH_struct
(
PHY_VARS_gNB
*
gNB
,
processingData_L1tx_t
*
msg
)
{
void
init_DLSCH_struct
(
PHY_VARS_gNB
*
gNB
,
processingData_L1tx_t
*
msg
)
{
NR_DL_FRAME_PARMS
*
fp
=
&
gNB
->
frame_parms
;
nfapi_nr_config_request_scf_t
*
cfg
=
&
gNB
->
gNB_config
;
uint16_t
grid_size
=
cfg
->
carrier_config
.
dl_grid_size
[
fp
->
numerology_index
].
value
;
msg
->
num_pdsch_slot
=
0
;
msg
->
dlsch
=
(
NR_gNB_DLSCH_t
***
)
malloc16
(
gNB
->
max_nb_pdsch
*
sizeof
(
NR_gNB_DLSCH_t
**
));
int
num_cw
=
NR_MAX_NB_LAYERS
>
4
?
2
:
1
;
for
(
int
i
=
0
;
i
<
NUMBER_OF_NR_DLSCH_MAX
;
i
++
)
{
LOG_D
(
PHY
,
"Allocating Transport Channel Buffers for DLSCH %d/%d
\n
"
,
i
,
NUMBER_OF_NR_DLSCH_MAX
);
for
(
int
j
=
0
;
j
<
num_cw
;
j
++
)
{
for
(
int
i
=
0
;
i
<
gNB
->
max_nb_pdsch
;
i
++
)
{
LOG_I
(
PHY
,
"Allocating Transport Channel Buffers for DLSCH %d/%d
\n
"
,
i
,
gNB
->
max_nb_pdsch
);
msg
->
dlsch
[
i
]
=
(
NR_gNB_DLSCH_t
**
)
malloc16
(
num_cw
*
sizeof
(
NR_gNB_DLSCH_t
*
));
for
(
int
j
=
0
;
j
<
num_cw
;
j
++
)
{
msg
->
dlsch
[
i
][
j
]
=
new_gNB_dlsch
(
fp
,
grid_size
);
AssertFatal
(
msg
->
dlsch
[
i
][
j
]
!=
NULL
,
"Can't initialize dlsch %d
\n
"
,
i
);
}
...
...
@@ -1029,9 +1035,13 @@ void reset_DLSCH_struct(const PHY_VARS_gNB *gNB, processingData_L1tx_t *msg)
const
nfapi_nr_config_request_scf_t
*
cfg
=
&
gNB
->
gNB_config
;
const
uint16_t
grid_size
=
cfg
->
carrier_config
.
dl_grid_size
[
fp
->
numerology_index
].
value
;
int
num_cw
=
NR_MAX_NB_LAYERS
>
4
?
2
:
1
;
for
(
int
i
=
0
;
i
<
NUMBER_OF_NR_DLSCH_MAX
;
i
++
)
for
(
int
j
=
0
;
j
<
num_cw
;
j
++
)
for
(
int
i
=
0
;
i
<
gNB
->
max_nb_pdsch
;
i
++
)
{
for
(
int
j
=
0
;
j
<
num_cw
;
j
++
)
{
free_gNB_dlsch
(
&
msg
->
dlsch
[
i
][
j
],
grid_size
,
fp
);
free
(
msg
->
dlsch
[
i
][
j
]);
}
free
(
msg
->
dlsch
[
i
]);
}
}
void
init_nr_transport
(
PHY_VARS_gNB
*
gNB
)
...
...
@@ -1066,8 +1076,11 @@ void init_nr_transport(PHY_VARS_gNB *gNB)
buffer_ul_slots
=
(
nb_ul_slots_period
<
slot_ahead
)
?
nb_ul_slots_period
:
slot_ahead
;
gNB
->
max_nb_pucch
=
MAX_MOBILES_PER_GNB
*
buffer_ul_slots
;
gNB
->
max_nb_pusch
=
MAX_MOBILES_PER_GNB
*
buffer_ul_slots
;
gNB
->
max_nb_srs
=
buffer_ul_slots
<<
1
;
// assuming at most 2 SRS per slot
gNB
->
measurements
.
ulsch_measurements
=
(
ULSCH_MEASUREMENTS_gNB
*
)
malloc16
(
gNB
->
max_nb_pusch
*
sizeof
(
ULSCH_MEASUREMENTS_gNB
));
gNB
->
pucch
=
(
NR_gNB_PUCCH_t
**
)
malloc16
(
gNB
->
max_nb_pucch
*
sizeof
(
NR_gNB_PUCCH_t
*
));
for
(
int
i
=
0
;
i
<
gNB
->
max_nb_pucch
;
i
++
)
{
LOG_D
(
PHY
,
"Allocating Transport Channel Buffers for PUCCH %d/%d
\n
"
,
i
,
gNB
->
max_nb_pucch
);
...
...
@@ -1082,12 +1095,10 @@ void init_nr_transport(PHY_VARS_gNB *gNB)
AssertFatal
(
gNB
->
srs
[
i
]
!=
NULL
,
"Can't initialize srs %d
\n
"
,
i
);
}
for
(
int
i
=
0
;
i
<
NUMBER_OF_NR_ULSCH_MAX
;
i
++
)
{
LOG_D
(
PHY
,
"Allocating Transport Channel Buffers for ULSCH %d/%d
\n
"
,
i
,
NUMBER_OF_NR_ULSCH_MAX
);
gNB
->
ulsch
=
(
NR_gNB_ULSCH_t
**
)
malloc16
(
gNB
->
max_nb_pusch
*
sizeof
(
NR_gNB_ULSCH_t
*
));
for
(
int
i
=
0
;
i
<
gNB
->
max_nb_pusch
;
i
++
)
{
LOG_I
(
PHY
,
"Allocating Transport Channel Buffers for ULSCH %d/%d
\n
"
,
i
,
gNB
->
max_nb_pusch
);
gNB
->
ulsch
[
i
]
=
new_gNB_ulsch
(
gNB
->
max_ldpc_iterations
,
fp
->
N_RB_UL
);
if
(
!
gNB
->
ulsch
[
i
])
{
LOG_E
(
PHY
,
"Can't get gNB ulsch structures
\n
"
);
exit
(
-
1
);
...
...
@@ -1111,6 +1122,7 @@ void reset_nr_transport(PHY_VARS_gNB *gNB)
free_gNB_srs
(
gNB
->
srs
[
i
]);
free
(
gNB
->
srs
);
for
(
int
i
=
0
;
i
<
NUMBER_OF_NR_ULSCH_MAX
;
i
++
)
for
(
int
i
=
0
;
i
<
gNB
->
max_nb_pusch
;
i
++
)
free_gNB_ulsch
(
&
gNB
->
ulsch
[
i
],
fp
->
N_RB_UL
);
free
(
gNB
->
ulsch
);
}
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
View file @
f3126586
...
...
@@ -211,10 +211,10 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB,int slot, int first_symb,int num_symb
void
nr_gnb_measurements
(
PHY_VARS_gNB
*
gNB
,
uint8_t
ulsch_id
,
unsigned
char
harq_pid
,
unsigned
char
symbol
,
uint8_t
nrOfLayers
)
{
int
rx_power_tot
[
NUMBER_OF_NR_ULSCH_MAX
]
;
int
rx_power
[
N
UMBER_OF_NR_ULSCH_MAX
][
N
B_ANTENNAS_RX
];
unsigned
short
rx_power_avg_dB
[
NUMBER_OF_NR_ULSCH_MAX
]
;
unsigned
short
rx_power_tot_dB
[
NUMBER_OF_NR_ULSCH_MAX
]
;
int
rx_power_tot
=
0
;
int
rx_power
[
NB_ANTENNAS_RX
];
unsigned
short
rx_power_avg_dB
;
unsigned
short
rx_power_tot_dB
;
double
rx_gain
=
openair0_cfg
[
0
].
rx_gain
[
0
];
double
rx_gain_offset
=
openair0_cfg
[
0
].
rx_gain_offset
[
0
];
...
...
@@ -223,43 +223,41 @@ void nr_gnb_measurements(PHY_VARS_gNB *gNB, uint8_t ulsch_id, unsigned char harq
int
ch_offset
=
fp
->
ofdm_symbol_size
*
symbol
;
int
N_RB_UL
=
gNB
->
ulsch
[
ulsch_id
]
->
harq_process
->
ulsch_pdu
.
rb_size
;
rx_power_tot
[
ulsch_id
]
=
0
;
for
(
int
aarx
=
0
;
aarx
<
fp
->
nb_antennas_rx
;
aarx
++
){
rx_power
[
ulsch_id
][
aarx
]
=
0
;
rx_power
[
aarx
]
=
0
;
for
(
int
aatx
=
0
;
aatx
<
nrOfLayers
;
aatx
++
){
meas
->
rx_spatial_power
[
ulsch_id
]
[
aatx
][
aarx
]
=
(
signal_energy_nodc
(
&
gNB
->
pusch_vars
[
ulsch_id
]
->
ul_ch_estimates
[
aatx
*
fp
->
nb_antennas_rx
+
aarx
][
ch_offset
],
N_RB_UL
*
NR_NB_SC_PER_RB
));
meas
->
ulsch_measurements
[
ulsch_id
].
rx_spatial_power
[
aatx
][
aarx
]
=
(
signal_energy_nodc
(
&
gNB
->
pusch_vars
[
ulsch_id
]
->
ul_ch_estimates
[
aatx
*
fp
->
nb_antennas_rx
+
aarx
][
ch_offset
],
N_RB_UL
*
NR_NB_SC_PER_RB
));
if
(
meas
->
rx_spatial_power
[
ulsch_id
]
[
aatx
][
aarx
]
<
0
)
{
meas
->
rx_spatial_power
[
ulsch_id
]
[
aatx
][
aarx
]
=
0
;
if
(
meas
->
ulsch_measurements
[
ulsch_id
].
rx_spatial_power
[
aatx
][
aarx
]
<
0
)
{
meas
->
ulsch_measurements
[
ulsch_id
].
rx_spatial_power
[
aatx
][
aarx
]
=
0
;
}
meas
->
rx_spatial_power_dB
[
ulsch_id
][
aatx
][
aarx
]
=
(
unsigned
short
)
dB_fixed
(
meas
->
rx_spatial_power
[
ulsch_id
]
[
aatx
][
aarx
]);
rx_power
[
ulsch_id
][
aarx
]
+=
meas
->
rx_spatial_power
[
ulsch_id
]
[
aatx
][
aarx
];
meas
->
ulsch_measurements
[
ulsch_id
].
rx_spatial_power_dB
[
aatx
][
aarx
]
=
(
unsigned
short
)
dB_fixed
(
meas
->
ulsch_measurements
[
ulsch_id
].
rx_spatial_power
[
aatx
][
aarx
]);
rx_power
[
aarx
]
+=
meas
->
ulsch_measurements
[
ulsch_id
].
rx_spatial_power
[
aatx
][
aarx
];
}
LOG_D
(
PHY
,
"[ULSCH ID %d] RX power in antenna %d = %d
\n
"
,
ulsch_id
,
aarx
,
rx_power
[
ulsch_id
][
aarx
]);
LOG_D
(
PHY
,
"[ULSCH ID %d] RX power in antenna %d = %d
\n
"
,
ulsch_id
,
aarx
,
rx_power
[
aarx
]);
rx_power_tot
[
ulsch_id
]
+=
rx_power
[
ulsch_id
]
[
aarx
];
rx_power_tot
+=
rx_power
[
aarx
];
}
rx_power_tot_dB
[
ulsch_id
]
=
(
unsigned
short
)
dB_fixed
(
rx_power_tot
[
ulsch_id
]
);
rx_power_avg_dB
[
ulsch_id
]
=
rx_power_tot_dB
[
ulsch_id
]
;
rx_power_tot_dB
=
(
unsigned
short
)
dB_fixed
(
rx_power_tot
);
rx_power_avg_dB
=
rx_power_tot_dB
;
meas
->
wideband_cqi_tot
[
ulsch_id
]
=
dB_fixed2
(
rx_power_tot
[
ulsch_id
]
,
meas
->
n0_power_tot
);
meas
->
rx_rssi_dBm
[
ulsch_id
]
=
rx_power_avg_dB
[
ulsch_id
]
+
30
-
10
*
log10
(
pow
(
2
,
30
))
-
(
rx_gain
-
rx_gain_offset
)
-
dB_fixed
(
fp
->
ofdm_symbol_size
);
meas
->
ulsch_measurements
[
ulsch_id
].
wideband_cqi_tot
=
dB_fixed2
(
rx_power_tot
,
meas
->
n0_power_tot
);
meas
->
ulsch_measurements
[
ulsch_id
].
rx_rssi_dBm
=
rx_power_avg_dB
+
30
-
10
*
log10
(
pow
(
2
,
30
))
-
(
rx_gain
-
rx_gain_offset
)
-
dB_fixed
(
fp
->
ofdm_symbol_size
);
LOG_D
(
PHY
,
"[ULSCH %d] RSSI %d dBm/RE, RSSI (digital) %d dB (N_RB_UL %d), WBand CQI tot %d dB, N0 Power tot %d, RX Power tot %d
\n
"
,
ulsch_id
,
meas
->
rx_rssi_dBm
[
ulsch_id
]
,
rx_power_avg_dB
[
ulsch_id
]
,
meas
->
ulsch_measurements
[
ulsch_id
].
rx_rssi_dBm
,
rx_power_avg_dB
,
N_RB_UL
,
meas
->
wideband_cqi_tot
[
ulsch_id
]
,
meas
->
ulsch_measurements
[
ulsch_id
].
wideband_cqi_tot
,
meas
->
n0_power_tot
,
rx_power_tot
[
ulsch_id
]
);
rx_power_tot
);
}
openair1/PHY/NR_TRANSPORT/nr_ulsch.c
View file @
f3126586
...
...
@@ -40,7 +40,7 @@ int16_t find_nr_ulsch(PHY_VARS_gNB *gNB, uint16_t rnti, int pid, int frame)
int16_t
first_free_index
=
-
1
;
AssertFatal
(
gNB
!=
NULL
,
"gNB is null
\n
"
);
for
(
int
i
=
0
;
i
<
NUMBER_OF_NR_ULSCH_MAX
;
i
++
)
{
for
(
int
i
=
0
;
i
<
gNB
->
max_nb_pusch
;
i
++
)
{
NR_gNB_ULSCH_t
*
ulsch
=
gNB
->
ulsch
[
i
];
AssertFatal
(
ulsch
!=
NULL
,
"gNB->ulsch[%d] is null
\n
"
,
i
);
if
(
!
ulsch
->
active
)
{
...
...
@@ -64,7 +64,7 @@ void nr_fill_ulsch(PHY_VARS_gNB *gNB,
int
harq_pid
=
ulsch_pdu
->
pusch_data
.
harq_process_id
;
int
ulsch_id
=
find_nr_ulsch
(
gNB
,
ulsch_pdu
->
rnti
,
harq_pid
,
frame
);
AssertFatal
((
ulsch_id
>=
0
)
&&
(
ulsch_id
<
NUMBER_OF_NR_ULSCH_MAX
),
AssertFatal
((
ulsch_id
>=
0
)
&&
(
ulsch_id
<
gNB
->
max_nb_pusch
),
"illegal or no ulsch_id found!!! rnti %04x ulsch_id %d
\n
"
,
ulsch_pdu
->
rnti
,
ulsch_id
);
NR_gNB_ULSCH_t
*
ulsch
=
gNB
->
ulsch
[
ulsch_id
];
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
View file @
f3126586
...
...
@@ -1885,7 +1885,7 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
&
max_ch
);
}
nr_gnb_measurements
(
gNB
,
ulsch_id
,
harq_pid
,
symbol
,
rel15_ul
->
nrOfLayers
);
nr_gnb_measurements
(
gNB
,
ulsch_id
,
harq_pid
,
symbol
,
rel15_ul
->
nrOfLayers
);
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
if
(
symbol
==
rel15_ul
->
start_symbol_index
)
{
...
...
openair1/PHY/defs_gNB.h
View file @
f3126586
...
...
@@ -503,7 +503,32 @@ typedef struct gNB_L1_proc_t_s {
gNB_L1_rxtx_proc_t
L1_proc
,
L1_proc_tx
;
}
gNB_L1_proc_t
;
typedef
struct
{
//! estimated received spatial signal power (linear)
unsigned
int
rx_spatial_power
[
NB_ANTENNAS_TX
][
NB_ANTENNAS_RX
];
//! estimated received spatial signal power (dB)
unsigned
int
rx_spatial_power_dB
[
NB_ANTENNAS_TX
][
NB_ANTENNAS_RX
];
//! estimated rssi (dBm)
int
rx_rssi_dBm
;
//! estimated correlation (wideband linear) between spatial channels (computed in dlsch_demodulation)
int
rx_correlation
[
2
];
//! estimated correlation (wideband dB) between spatial channels (computed in dlsch_demodulation)
int
rx_correlation_dB
[
2
];
/// Wideband CQI (= SINR)
int
wideband_cqi
[
MAX_NUM_RU_PER_gNB
];
/// Wideband CQI in dB (= SINR dB)
int
wideband_cqi_dB
[
MAX_NUM_RU_PER_gNB
];
/// Wideband CQI (sum of all RX antennas, in dB)
char
wideband_cqi_tot
;
/// Subband CQI per RX antenna and RB (= SINR)
int
subband_cqi
[
MAX_NUM_RU_PER_gNB
][
275
];
/// Total Subband CQI and RB (= SINR)
int
subband_cqi_tot
[
275
];
/// Subband CQI in dB and RB (= SINR dB)
int
subband_cqi_dB
[
MAX_NUM_RU_PER_gNB
][
275
];
/// Total Subband CQI and RB
int
subband_cqi_tot_dB
[
275
];
}
ULSCH_MEASUREMENTS_gNB
;
typedef
struct
{
// common measurements
...
...
@@ -529,31 +554,8 @@ typedef struct {
int
n0_subband_power_tot_dBm
[
275
];
// gNB measurements (per user)
//! estimated received spatial signal power (linear)
unsigned
int
rx_spatial_power
[
NUMBER_OF_NR_ULSCH_MAX
][
NB_ANTENNAS_TX
][
NB_ANTENNAS_RX
];
//! estimated received spatial signal power (dB)
unsigned
int
rx_spatial_power_dB
[
NUMBER_OF_NR_ULSCH_MAX
][
NB_ANTENNAS_TX
][
NB_ANTENNAS_RX
];
//! estimated rssi (dBm)
int
rx_rssi_dBm
[
NUMBER_OF_NR_ULSCH_MAX
];
//! estimated correlation (wideband linear) between spatial channels (computed in dlsch_demodulation)
int
rx_correlation
[
NUMBER_OF_NR_ULSCH_MAX
][
2
];
//! estimated correlation (wideband dB) between spatial channels (computed in dlsch_demodulation)
int
rx_correlation_dB
[
NUMBER_OF_NR_ULSCH_MAX
][
2
];
ULSCH_MEASUREMENTS_gNB
*
ulsch_measurements
;
/// Wideband CQI (= SINR)
int
wideband_cqi
[
NUMBER_OF_NR_ULSCH_MAX
][
MAX_NUM_RU_PER_gNB
];
/// Wideband CQI in dB (= SINR dB)
int
wideband_cqi_dB
[
NUMBER_OF_NR_ULSCH_MAX
][
MAX_NUM_RU_PER_gNB
];
/// Wideband CQI (sum of all RX antennas, in dB)
char
wideband_cqi_tot
[
NUMBER_OF_NR_ULSCH_MAX
];
/// Subband CQI per RX antenna and RB (= SINR)
int
subband_cqi
[
NUMBER_OF_NR_ULSCH_MAX
][
MAX_NUM_RU_PER_gNB
][
275
];
/// Total Subband CQI and RB (= SINR)
int
subband_cqi_tot
[
NUMBER_OF_NR_ULSCH_MAX
][
275
];
/// Subband CQI in dB and RB (= SINR dB)
int
subband_cqi_dB
[
NUMBER_OF_NR_ULSCH_MAX
][
MAX_NUM_RU_PER_gNB
][
275
];
/// Total Subband CQI and RB
int
subband_cqi_tot_dB
[
NUMBER_OF_NR_ULSCH_MAX
][
275
];
/// PRACH background noise level
int
prach_I0
;
...
...
@@ -609,14 +611,17 @@ typedef struct PHY_VARS_gNB_s {
int
max_nb_pucch
;
int
max_nb_srs
;
int
max_nb_pdsch
;
int
max_nb_pusch
;
NR_gNB_PBCH
pbch
;
NR_gNB_COMMON
common_vars
;
NR_gNB_PRACH
prach_vars
;
NR_gNB_PRS
prs_vars
;
NR_gNB_PUSCH
*
pusch_vars
[
NUMBER_OF_NR_ULSCH_MAX
]
;
NR_gNB_PUSCH
*
*
pusch_vars
;
NR_gNB_PUCCH_t
**
pucch
;
NR_gNB_SRS_t
**
srs
;
NR_gNB_ULSCH_t
*
ulsch
[
NUMBER_OF_NR_ULSCH_MAX
];
// [Nusers times]
NR_gNB_ULSCH_t
*
*
ulsch
;
NR_gNB_PHY_STATS_t
phy_stats
[
MAX_MOBILES_PER_GNB
];
t_nrPolar_params
**
polarParams
;
...
...
@@ -811,7 +816,7 @@ typedef struct processingData_L1tx {
nfapi_nr_dl_tti_pdcch_pdu
pdcch_pdu
[
NFAPI_NR_MAX_NB_CORESETS
];
nfapi_nr_ul_dci_request_pdus_t
ul_pdcch_pdu
[
NFAPI_NR_MAX_NB_CORESETS
];
NR_gNB_CSIRS_t
csirs_pdu
[
NR_SYMBOLS_PER_SLOT
];
NR_gNB_DLSCH_t
*
dlsch
[
NUMBER_OF_NR_DLSCH_MAX
][
2
]
;
NR_gNB_DLSCH_t
*
**
dlsch
;
NR_gNB_SSB_t
ssb
[
64
];
uint16_t
num_pdsch_slot
;
int
num_dl_pdcch
;
...
...
openair1/SCHED_NR/fapi_nr_l1.c
View file @
f3126586
...
...
@@ -135,7 +135,6 @@ void handle_nr_nfapi_pdsch_pdu(processingData_L1tx_t *msgTx,
void
nr_schedule_response
(
NR_Sched_Rsp_t
*
Sched_INFO
)
{
PHY_VARS_gNB
*
gNB
;
// copy data from L2 interface into L1 structures
module_id_t
Mod_id
=
Sched_INFO
->
module_id
;
nfapi_nr_dl_tti_request_t
*
DL_req
=
Sched_INFO
->
DL_req
;
...
...
@@ -148,7 +147,7 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO)
AssertFatal
(
RC
.
gNB
!=
NULL
,
"RC.gNB is null
\n
"
);
AssertFatal
(
RC
.
gNB
[
Mod_id
]
!=
NULL
,
"RC.gNB[%d] is null
\n
"
,
Mod_id
);
gNB
=
RC
.
gNB
[
Mod_id
];
PHY_VARS_gNB
*
gNB
=
RC
.
gNB
[
Mod_id
];
start_meas
(
&
gNB
->
schedule_response_stats
);
nfapi_nr_config_request_scf_t
*
cfg
=
&
gNB
->
gNB_config
;
...
...
@@ -204,8 +203,8 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO)
AssertFatal
(
TX_req
->
pdu_list
[
pduIndex
].
num_TLV
==
1
,
"TX_req->pdu_list[%d].num_TLV %d != 1
\n
"
,
pduIndex
,
TX_req
->
pdu_list
[
pduIndex
].
num_TLV
);
uint8_t
*
sdu
=
(
uint8_t
*
)
TX_req
->
pdu_list
[
pduIndex
].
TLVs
[
0
].
value
.
direct
;
AssertFatal
(
msgTx
->
num_pdsch_slot
<
NUMBER_OF_NR_DLSCH_MAX
,
"Number of PDSCH PDUs %d exceeded the limit %d
\n
"
,
msgTx
->
num_pdsch_slot
,
NUMBER_OF_NR_DLSCH_MAX
);
AssertFatal
(
msgTx
->
num_pdsch_slot
<
gNB
->
max_nb_pdsch
,
"Number of PDSCH PDUs %d exceeded the limit %d
\n
"
,
msgTx
->
num_pdsch_slot
,
gNB
->
max_nb_pdsch
);
handle_nr_nfapi_pdsch_pdu
(
msgTx
,
&
dl_tti_pdu
->
pdsch_pdu
,
sdu
);
}
}
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
f3126586
...
...
@@ -552,7 +552,7 @@ void fill_ul_rb_mask(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
}
}
for
(
int
ULSCH_id
=
0
;
ULSCH_id
<
NUMBER_OF_NR_ULSCH_MAX
;
ULSCH_id
++
)
{
for
(
int
ULSCH_id
=
0
;
ULSCH_id
<
gNB
->
max_nb_pusch
;
ULSCH_id
++
)
{
NR_gNB_ULSCH_t
*
ulsch
=
gNB
->
ulsch
[
ULSCH_id
];
int
harq_pid
;
NR_UL_gNB_HARQ_t
*
ulsch_harq
=
ulsch_harq
=
ulsch
->
harq_process
;
...
...
@@ -772,7 +772,7 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
}
}
for
(
int
ULSCH_id
=
0
;
ULSCH_id
<
NUMBER_OF_NR_ULSCH_MAX
;
ULSCH_id
++
)
{
for
(
int
ULSCH_id
=
0
;
ULSCH_id
<
gNB
->
max_nb_pusch
;
ULSCH_id
++
)
{
NR_gNB_ULSCH_t
*
ulsch
=
gNB
->
ulsch
[
ULSCH_id
];
NR_UL_gNB_HARQ_t
*
ulsch_harq
=
ulsch
->
harq_process
;
...
...
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