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
07b9daa7
Commit
07b9daa7
authored
Oct 31, 2024
by
Laurent THOMAS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix blocking bugs in command nr_dlsim -n100 -e27 -s35 -b 273 -R273 -x4 -y4 -z4
use a better complex vector multiplication function
parent
89b7ce5e
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
56 additions
and
35 deletions
+56
-35
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+15
-14
openair1/PHY/nr_phy_common/src/nr_phy_common.c
openair1/PHY/nr_phy_common/src/nr_phy_common.c
+3
-4
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+12
-4
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+26
-13
No files found.
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
View file @
07b9daa7
...
...
@@ -589,20 +589,21 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
symbol
,
nb_re_pdsch
);
if
(
nl
>=
2
)
// Apply MMSE for 2, 3, and 4 Tx layers
nr_dlsch_mmse
(
rx_size_symbol
,
n_rx
,
nl
,
rxdataF_comp
,
dl_ch_mag
,
dl_ch_magb
,
dl_ch_magr
,
dl_ch_estimates_ext
,
nb_rb_pdsch
,
dlsch_config
->
qamModOrder
,
*
log2_maxh
,
symbol
,
nb_re_pdsch
,
nvar
);
if
(
nb_re_pdsch
)
nr_dlsch_mmse
(
rx_size_symbol
,
n_rx
,
nl
,
rxdataF_comp
,
dl_ch_mag
,
dl_ch_magb
,
dl_ch_magr
,
dl_ch_estimates_ext
,
nb_rb_pdsch
,
dlsch_config
->
qamModOrder
,
*
log2_maxh
,
symbol
,
nb_re_pdsch
,
nvar
);
}
stop_meas_nr_ue_phy
(
ue
,
DLSCH_MRC_MMSE_STATS
);
...
...
openair1/PHY/nr_phy_common/src/nr_phy_common.c
View file @
07b9daa7
...
...
@@ -141,14 +141,13 @@ void nr_64qam_llr(int32_t *rxdataF_comp, int32_t *ch_mag, int32_t *ch_mag2, int1
int32_t
*
llr_32
=
(
int32_t
*
)
llr
;
#ifndef USE_128BIT
simde__m256i
xmm0
,
xmm1
,
xmm2
;
for
(
int
i
=
0
;
i
<
(
nb_re
>>
3
);
i
++
)
{
xmm0
=
*
rxF
;
simde__m256i
xmm0
=
simde_mm256_loadu_si256
(
rxF
)
;
// registers of even index in xmm0-> |y_R|, registers of odd index in xmm0-> |y_I|
xmm1
=
simde_mm256_abs_epi16
(
xmm0
);
simde__m256i
xmm1
=
simde_mm256_abs_epi16
(
xmm0
);
// registers of even index in xmm0-> |y_R|-|h|^2, registers of odd index in xmm0-> |y_I|-|h|^2
xmm1
=
simde_mm256_subs_epi16
(
*
ch_maga
,
xmm1
);
xmm2
=
simde_mm256_abs_epi16
(
xmm1
);
simde__m256i
xmm2
=
simde_mm256_abs_epi16
(
xmm1
);
xmm2
=
simde_mm256_subs_epi16
(
*
ch_magb
,
xmm2
);
// xmm0 |1st 4th 7th 10th 13th 16th 19th 22ed|
// xmm1 |2ed 5th 8th 11th 14th 17th 20th 23rd|
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
07b9daa7
...
...
@@ -505,8 +505,8 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue,
dlsch0
->
Nl
);
const
uint32_t
pdsch_est_size
=
((
ue
->
frame_parms
.
symbols_per_slot
*
ue
->
frame_parms
.
ofdm_symbol_size
+
15
)
/
16
)
*
16
;
__attribute__
((
aligned
(
32
)))
int32_t
pdsch_dl_ch_estimates
[
ue
->
frame_parms
.
nb_antennas_rx
*
dlsch0
->
Nl
][
pdsch_est_size
]
;
memset
(
pdsch_dl_ch_estimates
,
0
,
sizeof
(
int32_t
)
*
ue
->
frame_parms
.
nb_antennas_rx
*
dlsch0
->
Nl
*
pdsch_est_siz
e
);
fourDimArray_t
*
toFree
=
NULL
;
allocCast2D
(
pdsch_dl_ch_estimates
,
int32_t
,
toFree
,
ue
->
frame_parms
.
nb_antennas_rx
*
dlsch0
->
Nl
,
pdsch_est_size
,
fals
e
);
c16_t
ptrs_phase_per_slot
[
ue
->
frame_parms
.
nb_antennas_rx
][
NR_SYMBOLS_PER_SLOT
];
memset
(
ptrs_phase_per_slot
,
0
,
sizeof
(
ptrs_phase_per_slot
));
...
...
@@ -515,8 +515,14 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue,
memset
(
ptrs_re_per_slot
,
0
,
sizeof
(
ptrs_re_per_slot
));
const
uint32_t
rx_size_symbol
=
(
dlsch
[
0
].
dlsch_config
.
number_rbs
*
NR_NB_SC_PER_RB
+
15
)
&
~
15
;
__attribute__
((
aligned
(
32
)))
int32_t
rxdataF_comp
[
dlsch
[
0
].
Nl
][
ue
->
frame_parms
.
nb_antennas_rx
][
rx_size_symbol
*
NR_SYMBOLS_PER_SLOT
];
memset
(
rxdataF_comp
,
0
,
sizeof
(
rxdataF_comp
));
fourDimArray_t
*
toFree2
=
NULL
;
allocCast3D
(
rxdataF_comp
,
int32_t
,
toFree2
,
dlsch
[
0
].
Nl
,
ue
->
frame_parms
.
nb_antennas_rx
,
rx_size_symbol
*
NR_SYMBOLS_PER_SLOT
,
false
);
uint32_t
nvar
=
0
;
...
...
@@ -620,6 +626,8 @@ static int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue,
return
-
1
;
}
// CRNTI active
stop_meas_nr_ue_phy
(
ue
,
RX_PDSCH_STATS
);
free
(
toFree
);
free
(
toFree2
);
}
return
0
;
}
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
07b9daa7
...
...
@@ -858,15 +858,12 @@ int main(int argc, char **argv)
UE_mac
->
if_module
=
nr_ue_if_module_init
(
0
);
unsigned
int
available_bits
=
0
;
unsigned
char
*
estimated_output_bit
;
unsigned
char
*
test_input_bit
;
unsigned
char
*
estimated_output_bit
=
NULL
;
unsigned
char
*
test_input_bit
=
NULL
;
unsigned
int
errors_bit
=
0
;
initFloatingCoresTpool
(
dlsch_threads
,
&
nrUE_params
.
Tpool
,
false
,
"UE-tpool"
);
test_input_bit
=
(
unsigned
char
*
)
malloc16
(
sizeof
(
unsigned
char
)
*
16
*
68
*
384
);
estimated_output_bit
=
(
unsigned
char
*
)
malloc16
(
sizeof
(
unsigned
char
)
*
16
*
68
*
384
);
// generate signal
AssertFatal
(
input_fd
==
NULL
,
"Not ready for input signal file
\n
"
);
...
...
@@ -905,13 +902,14 @@ int main(int argc, char **argv)
gNB
->
msgDataTx
=
msgDataTx
;
// Buffers to store internal memory of slot process
int
rx_size
=
(((
14
*
frame_parms
->
N_RB_DL
*
12
*
sizeof
(
int32_t
))
+
15
)
>>
4
)
<<
4
;
UE
->
phy_sim_rxdataF
=
calloc
(
sizeof
(
int32_t
*
)
*
frame_parms
->
nb_antennas_rx
*
g_nrOfLayers
,
frame_parms
->
samples_per_slot_wCP
*
sizeof
(
int32_t
));
int
rx_size
=
(((
14
*
UE
->
frame_parms
.
N_RB_DL
*
12
*
sizeof
(
int32_t
))
+
15
)
>>
4
)
<<
4
;
UE
->
phy_sim_rxdataF
=
calloc
(
sizeof
(
int32_t
*
)
*
UE
->
frame_parms
.
nb_antennas_rx
*
g_nrOfLayers
,
UE
->
frame_parms
.
samples_per_slot_wCP
*
sizeof
(
int32_t
));
UE
->
phy_sim_pdsch_llr
=
calloc
(
1
,
(
8
*
(
3
*
8
*
8448
))
*
sizeof
(
int16_t
));
// Max length
UE
->
phy_sim_pdsch_rxdataF_ext
=
calloc
(
sizeof
(
int32_t
*
)
*
frame_parms
->
nb_antennas_rx
*
g_nrOfLayers
,
rx_size
);
UE
->
phy_sim_pdsch_rxdataF_comp
=
calloc
(
sizeof
(
int32_t
*
)
*
frame_parms
->
nb_antennas_rx
*
g_nrOfLayers
,
rx_size
);
UE
->
phy_sim_pdsch_dl_ch_estimates
=
calloc
(
sizeof
(
int32_t
*
)
*
frame_parms
->
nb_antennas_rx
*
g_nrOfLayers
,
rx_size
);
UE
->
phy_sim_pdsch_dl_ch_estimates_ext
=
calloc
(
sizeof
(
int32_t
*
)
*
frame_parms
->
nb_antennas_rx
*
g_nrOfLayers
,
rx_size
);
UE
->
phy_sim_pdsch_rxdataF_ext
=
calloc
(
sizeof
(
int32_t
*
)
*
UE
->
frame_parms
.
nb_antennas_rx
*
g_nrOfLayers
,
rx_size
);
UE
->
phy_sim_pdsch_rxdataF_comp
=
calloc
(
sizeof
(
int32_t
*
)
*
UE
->
frame_parms
.
nb_antennas_rx
*
g_nrOfLayers
,
rx_size
);
UE
->
phy_sim_pdsch_dl_ch_estimates
=
calloc
(
sizeof
(
int32_t
*
)
*
UE
->
frame_parms
.
nb_antennas_rx
*
g_nrOfLayers
,
rx_size
);
UE
->
phy_sim_pdsch_dl_ch_estimates_ext
=
calloc
(
sizeof
(
int32_t
*
)
*
UE
->
frame_parms
.
nb_antennas_rx
*
g_nrOfLayers
,
rx_size
);
int
a_segments
=
MAX_NUM_NR_DLSCH_SEGMENTS_PER_LAYER
*
NR_MAX_NB_LAYERS
;
//number of segments to be allocated
if
(
g_rbSize
!=
273
)
{
a_segments
=
a_segments
*
g_rbSize
;
...
...
@@ -1118,7 +1116,17 @@ int main(int argc, char **argv)
// Apply MIMO Channel
multipath_channel
(
gNB2UE
,
s_re
,
s_im
,
r_re
,
r_im
,
slot_length
,
0
,
(
n_trials
==
1
)
?
1
:
0
);
add_noise
(
UE
->
common_vars
.
rxdata
,
(
const
double
**
)
r_re
,
(
const
double
**
)
r_im
,
sigma2
,
slot_length
,
slot_offset
,
ts
,
delay
,
pdu_bit_map
,
0x1
,
frame_parms
->
nb_antennas_rx
);
add_noise
(
UE
->
common_vars
.
rxdata
,
(
const
double
**
)
r_re
,
(
const
double
**
)
r_im
,
sigma2
,
slot_length
,
slot_offset
,
ts
,
delay
,
pdu_bit_map
,
0x1
,
UE
->
frame_parms
.
nb_antennas_rx
);
dl_config
.
sfn
=
frame
;
dl_config
.
slot
=
slot
;
ue_dci_configuration
(
UE_mac
,
&
dl_config
,
frame
,
slot
);
...
...
@@ -1168,6 +1176,10 @@ int main(int argc, char **argv)
round
++
;
}
// round
if
(
test_input_bit
==
NULL
)
{
test_input_bit
=
(
unsigned
char
*
)
malloc16
(
sizeof
(
unsigned
char
)
*
TBS
);
estimated_output_bit
=
(
unsigned
char
*
)
malloc16
(
sizeof
(
unsigned
char
)
*
TBS
);
}
for
(
i
=
0
;
i
<
TBS
;
i
++
)
{
estimated_output_bit
[
i
]
=
(
UE
->
phy_sim_dlsch_b
[
i
/
8
]
&
(
1
<<
(
i
&
7
)))
>>
(
i
&
7
);
...
...
@@ -1226,10 +1238,11 @@ int main(int argc, char **argv)
fprintf
(
csv_file
,
"%.2f,%.4f,%.2f,%u
\n
"
,
roundStats
,
effRate
,
effRate
/
TBS
*
100
,
TBS
);
}
if
(
print_perf
==
1
)
{
printf
(
"
\n
gNB TX function statistics (per %d us slot, NPRB %d, mcs %d, block %d)
\n
"
,
printf
(
"
\n
gNB TX function statistics (per %d us slot, NPRB %d, mcs %d,
C %d,
block %d)
\n
"
,
1000
>>
*
scc
->
ssbSubcarrierSpacing
,
g_rbSize
,
g_mcsIndex
,
UE
->
dl_harq_processes
[
0
][
slot
].
C
,
msgDataTx
->
dlsch
[
0
][
0
].
harq_process
.
pdsch_pdu
.
pdsch_pdu_rel15
.
TBSize
[
0
]
<<
3
);
printDistribution
(
&
gNB
->
phy_proc_tx
,
table_tx
,
"PHY proc tx"
);
printStatIndent2
(
&
gNB
->
dlsch_encoding_stats
,
"DLSCH encoding time"
);
...
...
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