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
7f1d3c66
Commit
7f1d3c66
authored
Oct 09, 2024
by
Romain Beurdouche
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(nrLDPC_coding_interface): Use reworked interface in PHY simulators
parent
80c40669
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
41 additions
and
73 deletions
+41
-73
openair1/SIMULATION/NR_PHY/dlschsim.c
openair1/SIMULATION/NR_PHY/dlschsim.c
+18
-13
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+4
-11
openair1/SIMULATION/NR_PHY/ulschsim.c
openair1/SIMULATION/NR_PHY/ulschsim.c
+12
-38
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+7
-11
No files found.
openair1/SIMULATION/NR_PHY/dlschsim.c
View file @
7f1d3c66
...
...
@@ -35,6 +35,7 @@
#include "PHY/defs_nr_common.h"
#include "PHY/defs_nr_UE.h"
#include "PHY/types.h"
#include "PHY/CODING/nrLDPC_coding/nrLDPC_coding_interface.h"
#include "PHY/INIT/nr_phy_init.h"
#include "PHY/MODULATION/modulation_eNB.h"
#include "PHY/MODULATION/modulation_UE.h"
...
...
@@ -380,7 +381,7 @@ int main(int argc, char **argv)
RC
.
gNB
[
0
]
=
calloc
(
1
,
sizeof
(
PHY_VARS_gNB
));
gNB
=
RC
.
gNB
[
0
];
initNamedTpool
(
gNBthreads
,
&
gNB
->
threadPool
,
true
,
"gNB-tpool"
);
initFloatingCoresTpool
(
dlsch_threads
,
&
nrUE_params
.
Tpool
,
false
,
"UE-tpool"
);
initFloatingCoresTpool
(
dlsch_threads
,
&
nrUE_params
.
Tpool
,
false
,
"UE-tpool"
);
//gNB_config = &gNB->gNB_config;
frame_parms
=
&
gNB
->
frame_parms
;
//to be initialized I suppose (maybe not necessary for PBCH)
frame_parms
->
nb_antennas_tx
=
n_tx
;
...
...
@@ -430,6 +431,8 @@ int main(int argc, char **argv)
//nr_init_frame_parms_ue(&UE->frame_parms);
//init_nr_ue_transport(UE, 0);
UE
->
nrLDPC_coding_interface
=
gNB
->
nrLDPC_coding_interface
;
NR_UE_DLSCH_t
dlsch_ue
[
NR_MAX_NB_LAYERS
>
4
?
2
:
1
]
=
{
0
};
int
num_codeword
=
NR_MAX_NB_LAYERS
>
4
?
2
:
1
;
nr_ue_dlsch_init
(
dlsch_ue
,
num_codeword
,
5
);
...
...
@@ -513,7 +516,8 @@ int main(int argc, char **argv)
unsigned
char
output
[
rel15
->
rbSize
*
NR_SYMBOLS_PER_SLOT
*
NR_NB_SC_PER_RB
*
8
*
NR_MAX_NB_LAYERS
]
__attribute__
((
aligned
(
32
)));
bzero
(
output
,
rel15
->
rbSize
*
NR_SYMBOLS_PER_SLOT
*
NR_NB_SC_PER_RB
*
8
*
NR_MAX_NB_LAYERS
);
if
(
input_fd
==
NULL
)
{
nr_dlsch_encoding
(
gNB
,
frame
,
slot
,
&
dlsch
->
harq_process
,
frame_parms
,
output
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
);
msgDataTx
.
num_pdsch_slot
=
1
;
nr_dlsch_encoding
(
gNB
,
&
msgDataTx
,
frame
,
slot
,
frame_parms
,
output
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
);
}
for
(
SNR
=
snr0
;
SNR
<
snr1
;
SNR
+=
snr_step
)
{
...
...
@@ -569,20 +573,18 @@ int main(int argc, char **argv)
}
uint32_t
dlsch_bytes
=
a_segments
*
1056
;
// allocated bytes per segment
__attribute__
((
aligned
(
32
)))
uint8_t
b
[
dlsch_bytes
];
uint8_t
DLSCH_ids
[
1
]
=
{
0
};
short
*
p_channel_output_fixed
=
channel_output_fixed
;
uint8_t
*
p_b
=
b
;
int
available_bits_array
[
1
]
=
{
available_bits
};
ret
=
nr_dlsch_decoding
(
UE
,
&
proc
,
0
,
channel_output_fixed
,
&
UE
->
frame_parms
,
dlsch0_ue
,
harq_process
,
frame
,
nb_symb_sch
,
slot
,
harq_pid
,
dlsch_bytes
,
b
,
available_bits
);
&
p_channel_output_fixed
,
&
p_b
,
available_bits_array
,
1
,
DLSCH_ids
);
vcd_signal_dumper_dump_function_by_name
(
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING0
,
VCD_FUNCTION_OUT
);
...
...
@@ -661,7 +663,10 @@ int main(int argc, char **argv)
free
(
gNB
->
gNB_config
.
tdd_table
.
max_tdd_periodicity_list
[
i
].
max_num_of_symbol_per_slot_list
);
free
(
gNB
->
gNB_config
.
tdd_table
.
max_tdd_periodicity_list
);
free_nrLDPC_coding_interface
(
&
gNB
->
nrLDPC_coding_interface
);
abortTpool
(
&
gNB
->
threadPool
);
phy_free_nr_gNB
(
gNB
);
free
(
RC
.
gNB
[
0
]);
free
(
RC
.
gNB
);
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
7f1d3c66
...
...
@@ -47,7 +47,7 @@
#include "NR_ServingCellConfig.h"
#include "NR_SetupRelease.h"
#include "NR_UE_PHY_INTERFACE/NR_IF_Module.h"
#include "PHY/CODING/nrLDPC_
extern
.h"
#include "PHY/CODING/nrLDPC_
coding/nrLDPC_coding_interface
.h"
#include "PHY/INIT/nr_phy_init.h"
#include "PHY/MODULATION/modulation_common.h"
#include "PHY/NR_REFSIG/ptrs_nr.h"
...
...
@@ -297,7 +297,6 @@ int main(int argc, char **argv)
uint8_t
n_tx
=
1
,
n_rx
=
1
;
uint8_t
round
;
uint8_t
num_rounds
=
4
;
int
ldpc_offload_flag
=
0
;
char
gNBthreads
[
128
]
=
"n"
;
channel_desc_t
*
gNB2UE
;
...
...
@@ -360,7 +359,7 @@ int main(int argc, char **argv)
FILE
*
scg_fd
=
NULL
;
while
((
c
=
getopt
(
argc
,
argv
,
"--:O:f:hA:p:f:g:i:n:s:S:t:v:x:y:z:o:M:N:F:GR:d:PI:L:a:b:e:m:w:T:U:q:X:Y:Z:
c
"
))
!=
-
1
)
{
while
((
c
=
getopt
(
argc
,
argv
,
"--:O:f:hA:p:f:g:i:n:s:S:t:v:x:y:z:o:M:N:F:GR:d:PI:L:a:b:e:m:w:T:U:q:X:Y:Z:"
))
!=
-
1
)
{
/* ignore long options starting with '--', option '-O' and their arguments that are handled by configmodule */
/* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */
...
...
@@ -412,10 +411,6 @@ int main(int argc, char **argv)
n_trials
=
atoi
(
optarg
);
break
;
case
'c'
:
ldpc_offload_flag
=
1
;
break
;
case
's'
:
snr0
=
atof
(
optarg
);
printf
(
"Setting SNR0 to %f
\n
"
,
snr0
);
...
...
@@ -580,7 +575,6 @@ int main(int argc, char **argv)
//printf("-j Relative strength of second intefering gNB (in dB) - cell_id mod 3 = 2\n");
printf
(
"-R N_RB_DL
\n
"
);
printf
(
"-O oversampling factor (1,2,4,8,16)
\n
"
);
printf
(
"-c ldpc offload flag
\n
"
);
printf
(
"-A Interpolation_filname Run with Abstraction to generate Scatter plot using interpolation polynomial in file
\n
"
);
//printf("-C Generate Calibration information for Abstraction (effective SNR adjustment to remove Pe bias w.r.t. AWGN)\n");
printf
(
"-f raw file containing RRC configuration (generated by gNB)
\n
"
);
...
...
@@ -640,7 +634,6 @@ int main(int argc, char **argv)
gNB
=
RC
.
gNB
[
0
];
gNB
->
ofdm_offset_divisor
=
UINT_MAX
;
gNB
->
ldpc_offload_flag
=
ldpc_offload_flag
;
gNB
->
phase_comp
=
true
;
// we need to perform phase compensation, otherwise everything will fail
frame_parms
=
&
gNB
->
frame_parms
;
//to be initialized I suppose (maybe not necessary for PBCH)
frame_parms
->
nb_antennas_tx
=
n_tx
;
...
...
@@ -849,6 +842,7 @@ int main(int argc, char **argv)
memcpy
(
&
UE
->
frame_parms
,
frame_parms
,
sizeof
(
NR_DL_FRAME_PARMS
));
UE
->
frame_parms
.
nb_antennas_rx
=
n_rx
;
UE
->
frame_parms
.
nb_antenna_ports_gNB
=
n_tx
;
UE
->
nrLDPC_coding_interface
=
gNB
->
nrLDPC_coding_interface
;
UE
->
max_ldpc_iterations
=
max_ldpc_iterations
;
init_nr_ue_phy_cpu_stats
(
&
UE
->
phy_cpu_stats
);
...
...
@@ -1337,8 +1331,7 @@ int main(int argc, char **argv)
free
(
UE
->
phy_sim_pdsch_dl_ch_estimates_ext
);
free
(
UE
->
phy_sim_dlsch_b
);
if
(
gNB
->
ldpc_offload_flag
)
free_LDPClib
(
&
ldpc_interface_offload
);
free_nrLDPC_coding_interface
(
&
gNB
->
nrLDPC_coding_interface
);
if
(
output_fd
)
fclose
(
output_fd
);
...
...
openair1/SIMULATION/NR_PHY/ulschsim.c
View file @
7f1d3c66
...
...
@@ -33,6 +33,7 @@
#include "PHY/defs_nr_common.h"
#include "PHY/defs_nr_UE.h"
#include "PHY/defs_gNB.h"
#include "PHY/CODING/nrLDPC_coding/nrLDPC_coding_interface.h"
#include "PHY/INIT/nr_phy_init.h"
#include "PHY/NR_REFSIG/refsig_defs_ue.h"
#include "PHY/MODULATION/modulation_eNB.h"
...
...
@@ -90,28 +91,6 @@ void deref_sched_response(int _)
exit
(
1
);
}
int
nr_postDecode_sim
(
PHY_VARS_gNB
*
gNB
,
ldpcDecode_t
*
rdata
,
int
*
nb_ok
)
{
NR_UL_gNB_HARQ_t
*
ulsch_harq
=
rdata
->
ulsch_harq
;
int
r
=
rdata
->
segment_r
;
bool
decodeSuccess
=
(
rdata
->
decodeIterations
<=
rdata
->
decoderParms
.
numMaxIter
);
ulsch_harq
->
processedSegments
++
;
if
(
decodeSuccess
)
{
memcpy
(
ulsch_harq
->
b
+
rdata
->
offset
,
ulsch_harq
->
c
[
r
],
rdata
->
Kr_bytes
-
(
ulsch_harq
->
F
>>
3
)
-
((
ulsch_harq
->
C
>
1
)
?
3
:
0
));
}
// if all segments are done
if
(
rdata
->
nbSegments
==
ulsch_harq
->
processedSegments
)
{
return
*
nb_ok
==
rdata
->
nbSegments
;
}
return
0
;
}
nrUE_params_t
nrUE_params
;
nrUE_params_t
*
get_nrUE_params
(
void
)
{
...
...
@@ -143,7 +122,6 @@ int main(int argc, char **argv)
NR_DL_FRAME_PARMS
*
frame_parms
;
double
sigma
;
unsigned
char
qbits
=
8
;
int
ret
=
0
;
int
loglvl
=
OAILOG_WARNING
;
uint64_t
SSB_positions
=
0x01
;
uint16_t
nb_symb_sch
=
12
;
...
...
@@ -439,6 +417,7 @@ int main(int argc, char **argv)
UE
->
frame_parms
.
nb_antennas_tx
=
n_tx
;
UE
->
frame_parms
.
nb_antennas_rx
=
1
;
UE
->
nrLDPC_coding_interface
=
gNB
->
nrLDPC_coding_interface
;
//phy_init_nr_top(frame_parms);
if
(
init_nr_ue_signal
(
UE
,
1
)
!=
0
)
{
...
...
@@ -448,6 +427,8 @@ int main(int argc, char **argv)
nr_init_ul_harq_processes
(
UE
->
ul_harq_processes
,
NR_MAX_ULSCH_HARQ_PROCESSES
,
UE
->
frame_parms
.
N_RB_UL
,
UE
->
frame_parms
.
nb_antennas_tx
);
initFloatingCoresTpool
(
1
,
&
nrUE_params
.
Tpool
,
false
,
"UE-tpool"
);
unsigned
char
harq_pid
=
0
;
unsigned
int
TBS
=
8424
;
unsigned
int
available_bits
;
...
...
@@ -530,7 +511,8 @@ int main(int argc, char **argv)
unsigned
int
G
=
available_bits
;
if
(
input_fd
==
NULL
)
{
nr_ulsch_encoding
(
UE
,
ulsch_ue
,
frame_parms
,
harq_pid
,
TBS
>>
3
,
G
);
uint8_t
ULSCH_ids
[]
=
{
0
};
nr_ulsch_encoding
(
UE
,
ulsch_ue
,
0
,
0
,
&
G
,
1
,
ULSCH_ids
);
}
printf
(
"
\n
"
);
...
...
@@ -594,21 +576,11 @@ int main(int argc, char **argv)
exit
(
-
1
);
#endif
ldpcDecode_t
arr
[
16
]
=
{
0
};
task_ans_t
ans
[
16
]
=
{
0
};
thread_info_tm_t
t_info
=
{.
buf
=
(
uint8_t
*
)
arr
,
.
cap
=
16
,
.
len
=
0
,
.
ans
=
ans
};
int
nbDecode
=
nr_ulsch_decoding
(
gNB
,
UE_id
,
channel_output_fixed
,
frame_parms
,
rel15_ul
,
frame
,
subframe
,
harq_pid
,
G
,
&
t_info
);
DevAssert
(
nbDecode
>
0
);
int
nb_ok
=
0
;
join_task_ans
(
t_info
.
ans
,
t_info
.
len
);
for
(
size_t
i
=
0
;
i
<
nbDecode
;
++
i
)
{
ret
=
nr_postDecode_sim
(
gNB
,
&
arr
[
i
],
&
nb_ok
);
}
nbDecode
=
0
;
if
(
ret
)
nr_ulsch_decoding
(
gNB
,
frame_parms
,
frame
,
subframe
,
&
G
,
&
UE_id
,
1
);
bool
crc_valid
=
check_crc
(
harq_process_gNB
->
b
,
lenWithCrc
(
1
,
(
harq_process_gNB
->
TBS
)
<<
3
),
crcType
(
1
,
(
harq_process_gNB
->
TBS
)
<<
3
));
if
(
!
crc_valid
)
{
n_errors
++
;
}
}
printf
(
"*****************************************
\n
"
);
...
...
@@ -633,6 +605,8 @@ int main(int argc, char **argv)
free
(
gNB
->
gNB_config
.
tdd_table
.
max_tdd_periodicity_list
[
i
].
max_num_of_symbol_per_slot_list
);
free
(
gNB
->
gNB_config
.
tdd_table
.
max_tdd_periodicity_list
);
free_nrLDPC_coding_interface
(
&
gNB
->
nrLDPC_coding_interface
);
term_nr_ue_signal
(
UE
,
1
);
free
(
UE
);
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
7f1d3c66
...
...
@@ -45,7 +45,7 @@
#include "NR_ReconfigurationWithSync.h"
#include "NR_ServingCellConfig.h"
#include "NR_UE-NR-Capability.h"
#include "PHY/CODING/nrLDPC_
extern
.h"
#include "PHY/CODING/nrLDPC_
coding/nrLDPC_coding_interface
.h"
#include "PHY/INIT/nr_phy_init.h"
#include "PHY/MODULATION/nr_modulation.h"
#include "PHY/NR_REFSIG/dmrs_nr.h"
...
...
@@ -212,7 +212,6 @@ int main(int argc, char *argv[])
double
effRate
;
double
effTP
;
float
eff_tp_check
=
100
;
int
ldpc_offload_flag
=
0
;
uint8_t
max_rounds
=
4
;
int
chest_type
[
2
]
=
{
0
};
int
enable_ptrs
=
0
;
...
...
@@ -251,7 +250,7 @@ int main(int argc, char *argv[])
InitSinLUT
();
int
c
;
while
((
c
=
getopt
(
argc
,
argv
,
"--:O:a:b:c:d:ef:g:h:i:k:m:n:
o
p:q:r:s:t:u:v:w:y:z:A:C:F:G:H:I:M:N:PR:S:T:U:L:ZW:E:X:"
))
!=
-
1
)
{
while
((
c
=
getopt
(
argc
,
argv
,
"--:O:a:b:c:d:ef:g:h:i:k:m:n:p:q:r:s:t:u:v:w:y:z:A:C:F:G:H:I:M:N:PR:S:T:U:L:ZW:E:X:"
))
!=
-
1
)
{
/* ignore long options starting with '--', option '-O' and their arguments that are handled by configmodule */
/* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */
...
...
@@ -364,10 +363,6 @@ int main(int argc, char *argv[])
n_trials
=
atoi
(
optarg
);
break
;
case
'o'
:
ldpc_offload_flag
=
1
;
break
;
case
'p'
:
extended_prefix_flag
=
1
;
break
;
...
...
@@ -531,7 +526,6 @@ int main(int argc, char *argv[])
printf
(
"-k 3/4 sampling
\n
"
);
printf
(
"-m MCS value
\n
"
);
printf
(
"-n Number of trials to simulate
\n
"
);
printf
(
"-o ldpc offload flag
\n
"
);
printf
(
"-p Use extended prefix mode
\n
"
);
printf
(
"-q MCS table
\n
"
);
printf
(
"-r Number of allocated resource blocks for PUSCH
\n
"
);
...
...
@@ -682,7 +676,6 @@ int main(int argc, char *argv[])
cfg
->
carrier_config
.
num_rx_ant
.
value
=
n_rx
;
// nr_phy_config_request_sim(gNB,N_RB_DL,N_RB_DL,mu,0,0x01);
gNB
->
ldpc_offload_flag
=
ldpc_offload_flag
;
gNB
->
chest_freq
=
chest_type
[
0
];
gNB
->
chest_time
=
chest_type
[
1
];
...
...
@@ -729,6 +722,7 @@ int main(int argc, char *argv[])
memcpy
(
&
UE
->
frame_parms
,
frame_parms
,
sizeof
(
NR_DL_FRAME_PARMS
));
UE
->
frame_parms
.
nb_antennas_tx
=
n_tx
;
UE
->
frame_parms
.
nb_antennas_rx
=
0
;
UE
->
nrLDPC_coding_interface
=
gNB
->
nrLDPC_coding_interface
;
if
(
init_nr_ue_signal
(
UE
,
1
)
!=
0
)
{
printf
(
"Error at UE NR initialisation
\n
"
);
...
...
@@ -751,6 +745,8 @@ int main(int argc, char *argv[])
UE_mac
->
if_module
=
nr_ue_if_module_init
(
0
);
initFloatingCoresTpool
(
threadCnt
,
&
nrUE_params
.
Tpool
,
false
,
"UE-tpool"
);
nr_ue_phy_config_request
(
&
UE_mac
->
phy_config
);
unsigned
char
harq_pid
=
0
;
...
...
@@ -1596,8 +1592,8 @@ int main(int argc, char *argv[])
num_dmrs_cdm_grps_no_data
);
free_MIB_NR
(
mib
);
if
(
gNB
->
ldpc_offload_flag
)
free_LDPClib
(
&
ldpc_interface_offload
);
free_nrLDPC_coding_interface
(
&
gNB
->
nrLDPC_coding_interface
);
if
(
output_fd
)
fclose
(
output_fd
);
...
...
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