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
64e61036
Commit
64e61036
authored
Oct 31, 2021
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
merge from Laurent's TX-optimization-lts (cherry-picked dlsch_encoding component)
parent
a9d49ef0
Changes
17
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
291 additions
and
411 deletions
+291
-411
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+4
-4
executables/nr-gnb.c
executables/nr-gnb.c
+5
-5
openair1/PHY/CODING/nrLDPC_defs.h
openair1/PHY/CODING/nrLDPC_defs.h
+17
-2
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encode_parity_check.c
...air1/PHY/CODING/nrLDPC_encoder/ldpc_encode_parity_check.c
+11
-2
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim.c
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim.c
+1
-17
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8seg.c
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8seg.c
+1
-16
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8segmulti.c
...1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8segmulti.c
+40
-55
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
+6
-3
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
+1
-0
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
+165
-222
openair1/PHY/NR_TRANSPORT/pucch_rx.c
openair1/PHY/NR_TRANSPORT/pucch_rx.c
+1
-1
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+6
-6
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+0
-14
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+2
-40
openair1/SIMULATION/NR_PHY/dlschsim.c
openair1/SIMULATION/NR_PHY/dlschsim.c
+7
-3
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+23
-20
openair2/LAYER2/NR_MAC_gNB/main.c
openair2/LAYER2/NR_MAC_gNB/main.c
+1
-1
No files found.
cmake_targets/CMakeLists.txt
View file @
64e61036
...
...
@@ -314,9 +314,9 @@ add_definitions("-DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAV
set
(
commonOpts
"-pipe -Wno-packed-bitfield-compat -fPIC -Wall -fno-strict-aliasing -rdynamic"
)
set
(
CMAKE_C_FLAGS
"
${
CMAKE_C_FLAGS
}
${
C_FLAGS_PROCESSOR
}
${
commonOpts
}
-std=gnu99 -funroll-loops"
)
"
${
CMAKE_C_FLAGS
}
${
C_FLAGS_PROCESSOR
}
${
commonOpts
}
-std=gnu99 -funroll-loops
-march=native
"
)
set
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
${
C_FLAGS_PROCESSOR
}
${
commonOpts
}
-std=c++11"
)
"
${
CMAKE_CXX_FLAGS
}
${
C_FLAGS_PROCESSOR
}
${
commonOpts
}
-std=c++11
-march=native
"
)
# cuda compiler bug (limitation) on complex macro definition
if
(
CUDA_FOUND
)
...
...
@@ -332,11 +332,11 @@ endif ()
add_definitions
(
"-DASN_DISABLE_OER_SUPPORT"
)
#########################
set
(
CMAKE_EXE_LINKER_FLAGS
"
${
CMAKE_EXE_LINKER_FLAGS
}
-ggdb
3
-Wl,-rpath -Wl,
${
CMAKE_CURRENT_BINARY_DIR
}
"
)
set
(
CMAKE_EXE_LINKER_FLAGS
"
${
CMAKE_EXE_LINKER_FLAGS
}
-ggdb
2
-Wl,-rpath -Wl,
${
CMAKE_CURRENT_BINARY_DIR
}
"
)
#########################
# set a flag for changes in the source code
# these changes are related to hardcoded path to include .h files
set
(
debugOpt
"-ggdb
3
-DMALLOC_CHECK_=3 -fno-delete-null-pointer-checks"
)
set
(
debugOpt
"-ggdb
2
-DMALLOC_CHECK_=3 -fno-delete-null-pointer-checks"
)
set
(
CMAKE_C_FLAGS_DEBUG
"
${
debugOpt
}
-O0"
)
set
(
CMAKE_C_FLAGS_RELWITHDEBINFO
"
${
debugOpt
}
-O2"
)
set
(
CMAKE_C_FLAGS_RELEASE
"-O3"
)
...
...
executables/nr-gnb.c
View file @
64e61036
...
...
@@ -387,15 +387,15 @@ void init_gNB_Tpool(int inst) {
LOG_I
(
PHY
,
"Number of threads requested in config file: %d, Number of threads available on this machine: %d
\n
"
,
gNB
->
pusch_proc_threads
,
numCPU
);
int
threadCnt
=
min
(
numCPU
,
gNB
->
pusch_proc_threads
);
if
(
threadCnt
<
2
)
LOG_E
(
PHY
,
"Number of threads for gNB should be more than 1. Allocated only %d
\n
"
,
threadCnt
);
char
ul_
pool
[
80
];
sprintf
(
ul_
pool
,
"-1"
);
char
pool
[
80
];
sprintf
(
pool
,
"-1"
);
int
s_offset
=
0
;
for
(
int
icpu
=
1
;
icpu
<
threadCnt
;
icpu
++
)
{
sprintf
(
ul_
pool
+
2
+
s_offset
,
",-1"
);
sprintf
(
pool
+
2
+
s_offset
,
",-1"
);
s_offset
+=
3
;
}
if
(
getenv
(
"noThreads"
))
strcpy
(
ul_
pool
,
"n"
);
initTpool
(
ul_
pool
,
gNB
->
threadPool
,
false
);
if
(
getenv
(
"noThreads"
))
strcpy
(
pool
,
"n"
);
initTpool
(
pool
,
gNB
->
threadPool
,
false
);
// ULSCH decoder result FIFO
gNB
->
respDecode
=
(
notifiedFIFO_t
*
)
malloc
(
sizeof
(
notifiedFIFO_t
));
initNotifiedFIFO
(
gNB
->
respDecode
);
...
...
openair1/PHY/CODING/nrLDPC_defs.h
View file @
64e61036
...
...
@@ -22,6 +22,7 @@
// encoder interface
#ifndef __NRLDPC_DEFS__H__
#define __NRLDPC_DEFS__H__
#include <openair1/PHY/defs_nr_common.h>
#include "openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_types.h"
/**
\brief LDPC encoder
...
...
@@ -36,13 +37,27 @@
\param 9-12 time_stats_t *tinput,*tprep, *tparity,*toutput
*/
typedef
struct
{
int
n_segments
;
// optim8seg
unsigned
int
n_segments
;
// optim8seg
unsigned
int
macro_num
;
// optim8segmulti
unsigned
char
gen_code
;
//orig
time_stats_t
*
tinput
;
time_stats_t
*
tprep
;
time_stats_t
*
tparity
;
time_stats_t
*
toutput
;
int
Kr
;
uint32_t
Kb
;
uint32_t
*
Zc
;
void
*
harq
;
/// Encoder BG
uint8_t
BG
;
/// Interleaver outputs
unsigned
char
*
output
;
/// Number of bits in "small" code segments
uint32_t
K
;
/// Number of "Filler" bits
uint32_t
F
;
/// LDPC-code outputs
uint8_t
*
d
[
MAX_NUM_NR_DLSCH_SEGMENTS
];
}
encoder_implemparams_t
;
#define INIT0_LDPCIMPLEMPARAMS {0,0,0,NULL,NULL,NULL,NULL}
typedef
int
(
*
nrLDPC_encoderfunc_t
)(
unsigned
char
**
,
unsigned
char
**
,
int
,
int
,
short
,
short
,
encoder_implemparams_t
*
);
...
...
@@ -56,4 +71,4 @@ typedef int(*nrLDPC_encoderfunc_t)(unsigned char **,unsigned char **,int,int,sho
\param p_profiler LDPC profiler statistics
*/
typedef
int32_t
(
*
nrLDPC_decoderfunc_t
)(
t_nrLDPC_dec_params
*
,
int8_t
*
,
int8_t
*
,
t_nrLDPC_procBuf
*
,
t_nrLDPC_time_stats
*
);
#endif
\ No newline at end of file
#endif
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encode_parity_check.c
View file @
64e61036
...
...
@@ -73,9 +73,18 @@
static
inline
void
encode_parity_check_part_optim
(
uint8_t
*
c
,
uint8_t
*
d
,
short
BG
,
short
Zc
,
short
Kb
)
static
void
encode_parity_check_part_optim
(
uint8_t
*
cc
,
uint8_t
*
d
,
short
BG
,
short
Zc
,
short
Kb
,
int
simd_size
,
int
ncols
)
{
unsigned
char
c
[
2
*
22
*
Zc
*
simd_size
]
__attribute__
((
aligned
(
32
)));
//double size matrix of c
for
(
int
i1
=
0
;
i1
<
ncols
;
i1
++
)
{
memcpy
(
&
c
[
2
*
i1
*
Zc
],
&
cc
[
i1
*
Zc
],
Zc
*
sizeof
(
unsigned
char
));
memcpy
(
&
c
[(
2
*
i1
+
1
)
*
Zc
],
&
cc
[
i1
*
Zc
],
Zc
*
sizeof
(
unsigned
char
));
}
for
(
int
i1
=
1
;
i1
<
simd_size
;
i1
++
)
{
memcpy
(
&
c
[(
2
*
ncols
*
Zc
*
i1
)],
&
c
[
i1
],
(
2
*
ncols
*
Zc
*
sizeof
(
unsigned
char
))
-
i1
);
}
if
(
BG
==
1
)
{
switch
(
Zc
)
...
...
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim.c
View file @
64e61036
...
...
@@ -86,8 +86,6 @@ int nrLDPC_encod(unsigned char **test_input,unsigned char **channel_input,int Zc
unsigned
char
c
[
22
*
Zc
]
__attribute__
((
aligned
(
32
)));
//padded input, unpacked, max size
unsigned
char
d
[
46
*
Zc
]
__attribute__
((
aligned
(
32
)));
//coded parity part output, unpacked, max size
unsigned
char
c_extension
[
2
*
22
*
Zc
*
simd_size
]
__attribute__
((
aligned
(
32
)));
//double size matrix of c
// calculate number of punctured bits
no_punctured_columns
=
(
int
)((
nrows
-
2
)
*
Zc
+
block_length
-
block_length
*
rate
)
/
Zc
;
removed_bit
=
(
nrows
-
no_punctured_columns
-
2
)
*
Zc
+
block_length
-
(
int
)(
block_length
*
rate
);
...
...
@@ -108,24 +106,10 @@ int nrLDPC_encod(unsigned char **test_input,unsigned char **channel_input,int Zc
if
((
BG
==
1
&&
Zc
>
176
)
||
(
BG
==
2
&&
Zc
>
64
))
{
// extend matrix
if
(
impp
->
tprep
!=
NULL
)
start_meas
(
impp
->
tprep
);
for
(
i1
=
0
;
i1
<
ncols
;
i1
++
)
{
memcpy
(
&
c_extension
[
2
*
i1
*
Zc
],
&
c
[
i1
*
Zc
],
Zc
*
sizeof
(
unsigned
char
));
memcpy
(
&
c_extension
[(
2
*
i1
+
1
)
*
Zc
],
&
c
[
i1
*
Zc
],
Zc
*
sizeof
(
unsigned
char
));
}
for
(
i1
=
1
;
i1
<
simd_size
;
i1
++
)
{
memcpy
(
&
c_extension
[(
2
*
ncols
*
Zc
*
i1
)],
&
c_extension
[
i1
],
(
2
*
ncols
*
Zc
*
sizeof
(
unsigned
char
))
-
i1
);
// memset(&c_extension[(2*ncols*Zc*i1)],0,i1);
/*
printf("shift %d: ",i1);
for (int j=0;j<64;j++) printf("%d ",c_extension[(2*ncols*Zc*i1)+j]);
printf("\n");
*/
}
if
(
impp
->
tprep
!=
NULL
)
stop_meas
(
impp
->
tprep
);
//parity check part
if
(
impp
->
tparity
!=
NULL
)
start_meas
(
impp
->
tparity
);
encode_parity_check_part_optim
(
c
_extension
,
d
,
BG
,
Zc
,
Kb
);
encode_parity_check_part_optim
(
c
,
d
,
BG
,
Zc
,
Kb
,
simd_size
,
ncols
);
if
(
impp
->
tparity
!=
NULL
)
stop_meas
(
impp
->
tparity
);
}
else
{
...
...
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8seg.c
View file @
64e61036
...
...
@@ -102,7 +102,6 @@ int nrLDPC_encod(unsigned char **test_input,unsigned char **channel_input,int Zc
unsigned
char
c
[
22
*
Zc
]
__attribute__
((
aligned
(
32
)));
//padded input, unpacked, max size
unsigned
char
d
[
46
*
Zc
]
__attribute__
((
aligned
(
32
)));
//coded parity part output, unpacked, max size
unsigned
char
c_extension
[
2
*
22
*
Zc
*
simd_size
]
__attribute__
((
aligned
(
32
)));
//double size matrix of c
// calculate number of punctured bits
no_punctured_columns
=
(
int
)((
nrows
-
2
)
*
Zc
+
block_length
-
block_length
*
rate
)
/
Zc
;
...
...
@@ -151,24 +150,10 @@ int nrLDPC_encod(unsigned char **test_input,unsigned char **channel_input,int Zc
if
((
BG
==
1
&&
Zc
>
176
)
||
(
BG
==
2
&&
Zc
>
64
))
{
// extend matrix
if
(
impp
->
tprep
!=
NULL
)
start_meas
(
impp
->
tprep
);
for
(
i1
=
0
;
i1
<
ncols
;
i1
++
)
{
memcpy
(
&
c_extension
[
2
*
i1
*
Zc
],
&
c
[
i1
*
Zc
],
Zc
*
sizeof
(
unsigned
char
));
memcpy
(
&
c_extension
[(
2
*
i1
+
1
)
*
Zc
],
&
c
[
i1
*
Zc
],
Zc
*
sizeof
(
unsigned
char
));
}
for
(
i1
=
1
;
i1
<
simd_size
;
i1
++
)
{
memcpy
(
&
c_extension
[(
2
*
ncols
*
Zc
*
i1
)],
&
c_extension
[
i1
],
(
2
*
ncols
*
Zc
*
sizeof
(
unsigned
char
))
-
i1
);
// memset(&c_extension[(2*ncols*Zc*i1)],0,i1);
/*
printf("shift %d: ",i1);
for (int j=0;j<64;j++) printf("%d ",c_extension[(2*ncols*Zc*i1)+j]);
printf("\n");
*/
}
if
(
impp
->
tprep
!=
NULL
)
stop_meas
(
impp
->
tprep
);
//parity check part
if
(
impp
->
tparity
!=
NULL
)
start_meas
(
impp
->
tparity
);
encode_parity_check_part_optim
(
c
_extension
,
d
,
BG
,
Zc
,
Kb
);
encode_parity_check_part_optim
(
c
,
d
,
BG
,
Zc
,
Kb
,
simd_size
,
ncols
);
if
(
impp
->
tparity
!=
NULL
)
stop_meas
(
impp
->
tparity
);
}
else
{
...
...
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder_optim8segmulti.c
View file @
64e61036
...
...
@@ -38,18 +38,19 @@
#include "common/utils/LOG/log.h"
#include "PHY/TOOLS/time_meas.h"
#include "openair1/PHY/CODING/nrLDPC_defs.h"
//#define DEBUG_LDPC
#define DEBUG_LDPC
#include "ldpc_encode_parity_check.c"
#include "ldpc_generate_coefficient.c"
int
nrLDPC_encod
(
unsigned
char
**
test_input
,
unsigned
char
**
channel_in
put
,
int
Zc
,
int
Kb
,
short
block_length
,
short
BG
,
encoder_implemparams_t
*
impp
)
int
nrLDPC_encod
(
unsigned
char
**
input
,
unsigned
char
**
out
put
,
int
Zc
,
int
Kb
,
short
block_length
,
short
BG
,
encoder_implemparams_t
*
impp
)
{
//set_log(PHY, 4);
shor
t
nrows
=
0
,
ncols
=
0
;
int
i
,
i1
,
j
,
rate
=
3
;
in
t
nrows
=
0
,
ncols
=
0
;
int
rate
=
3
;
int
no_punctured_columns
,
removed_bit
;
//Table of possible lifting sizes
char
temp
;
...
...
@@ -95,8 +96,8 @@ int nrLDPC_encod(unsigned char **test_input,unsigned char **channel_input,int Zc
}
#ifdef DEBUG_LDPC
LOG_D
(
PHY
,
"ldpc_encoder_optim_8seg: BG %d, Zc %d, Kb %d, block_length %d, segments %d
\n
"
,
BG
,
Zc
,
Kb
,
block_length
,
n_segments
);
LOG_D
(
PHY
,
"ldpc_encoder_optim_8seg: PDU (seg 0) %x %x %x %x
\n
"
,
test_input
[
0
][
0
],
test_input
[
0
][
1
],
test_input
[
0
][
2
],
test_
input
[
0
][
3
]);
LOG_D
(
PHY
,
"ldpc_encoder_optim_8seg: BG %d, Zc %d, Kb %d, block_length %d, segments %d
\n
"
,
BG
,
Zc
,
Kb
,
block_length
,
impp
->
n_segments
);
LOG_D
(
PHY
,
"ldpc_encoder_optim_8seg: PDU (seg 0) %x %x %x %x
\n
"
,
input
[
0
][
0
],
input
[
0
][
1
],
input
[
0
][
2
],
input
[
0
][
3
]);
#endif
AssertFatal
(
Zc
>
0
,
"no valid Zc found for block length %d
\n
"
,
block_length
);
...
...
@@ -104,10 +105,8 @@ int nrLDPC_encod(unsigned char **test_input,unsigned char **channel_input,int Zc
if
((
Zc
&
31
)
>
0
)
simd_size
=
16
;
else
simd_size
=
32
;
unsigned
char
c
[
22
*
Zc
]
__attribute__
((
aligned
(
32
)));
//padded input, unpacked, max size
unsigned
char
d
[
46
*
Zc
]
__attribute__
((
aligned
(
32
)));
//coded parity part output, unpacked, max size
unsigned
char
c_extension
[
2
*
22
*
Zc
*
simd_size
]
__attribute__
((
aligned
(
32
)));
//double size matrix of c
unsigned
char
cc
[
22
*
Zc
]
__attribute__
((
aligned
(
32
)));
//padded input, unpacked, max size
unsigned
char
dd
[
46
*
Zc
]
__attribute__
((
aligned
(
32
)));
//coded parity part output, unpacked, max size
// calculate number of punctured bits
no_punctured_columns
=
(
int
)((
nrows
-
2
)
*
Zc
+
block_length
-
block_length
*
rate
)
/
Zc
;
...
...
@@ -115,8 +114,8 @@ int nrLDPC_encod(unsigned char **test_input,unsigned char **channel_input,int Zc
//printf("%d\n",no_punctured_columns);
//printf("%d\n",removed_bit);
// unpack input
memset
(
c
,
0
,
sizeof
(
unsigned
char
)
*
ncols
*
Zc
);
memset
(
d
,
0
,
sizeof
(
unsigned
char
)
*
nrows
*
Zc
);
memset
(
c
c
,
0
,
sizeof
(
unsigned
char
)
*
ncols
*
Zc
);
memset
(
d
d
,
0
,
sizeof
(
unsigned
char
)
*
nrows
*
Zc
);
if
(
impp
->
tinput
!=
NULL
)
start_meas
(
impp
->
tinput
);
#if 0
...
...
@@ -124,29 +123,29 @@ int nrLDPC_encod(unsigned char **test_input,unsigned char **channel_input,int Zc
//for (j=0; j<n_segments; j++) {
for (j=macro_segment; j < macro_segment_end; j++) {
temp = (
test_
input[j][i/8]&(1<<(i&7)))>>(i&7);
temp = (input[j][i/8]&(1<<(i&7)))>>(i&7);
//printf("c(%d,%d)=%d\n",j,i,temp);
c[i] |= (temp << (j-macro_segment));
}
}
#else
#ifdef __AVX2__
for
(
i
=
0
;
i
<
block_length
>>
5
;
i
++
)
{
c256
=
_mm256_and_si256
(
_mm256_cmpeq_epi8
(
_mm256_andnot_si256
(
_mm256_shuffle_epi8
(
_mm256_set1_epi32
(((
uint32_t
*
)
test_
input
[
macro_segment
])[
i
]),
shufmask
),
andmask
),
zero256
),
masks
[
0
]);
for
(
i
nt
i
=
0
;
i
<
block_length
>>
5
;
i
++
)
{
c256
=
_mm256_and_si256
(
_mm256_cmpeq_epi8
(
_mm256_andnot_si256
(
_mm256_shuffle_epi8
(
_mm256_set1_epi32
(((
uint32_t
*
)
input
[
macro_segment
])[
i
]),
shufmask
),
andmask
),
zero256
),
masks
[
0
]);
//for (j=1; j<n_segments; j++) {
for
(
j
=
macro_segment
+
1
;
j
<
macro_segment_end
;
j
++
)
{
c256
=
_mm256_or_si256
(
_mm256_and_si256
(
_mm256_cmpeq_epi8
(
_mm256_andnot_si256
(
_mm256_shuffle_epi8
(
_mm256_set1_epi32
(((
uint32_t
*
)
test_
input
[
j
])[
i
]),
shufmask
),
andmask
),
zero256
),
masks
[
j
-
macro_segment
]),
c256
);
for
(
int
j
=
macro_segment
+
1
;
j
<
macro_segment_end
;
j
++
)
{
c256
=
_mm256_or_si256
(
_mm256_and_si256
(
_mm256_cmpeq_epi8
(
_mm256_andnot_si256
(
_mm256_shuffle_epi8
(
_mm256_set1_epi32
(((
uint32_t
*
)
input
[
j
])[
i
]),
shufmask
),
andmask
),
zero256
),
masks
[
j
-
macro_segment
]),
c256
);
}
((
__m256i
*
)
c
)[
i
]
=
c256
;
((
__m256i
*
)
c
c
)[
i
]
=
c256
;
}
for
(
i
=
(
block_length
>>
5
)
<<
5
;
i
<
block_length
;
i
++
)
{
for
(
i
nt
i
=
(
block_length
>>
5
)
<<
5
;
i
<
block_length
;
i
++
)
{
//for (j=0; j<n_segments; j++) {
for
(
j
=
macro_segment
;
j
<
macro_segment_end
;
j
++
)
{
for
(
int
j
=
macro_segment
;
j
<
macro_segment_end
;
j
++
)
{
temp
=
(
test_
input
[
j
][
i
/
8
]
&
(
128
>>
(
i
&
7
)))
>>
(
7
-
(
i
&
7
));
temp
=
(
input
[
j
][
i
/
8
]
&
(
128
>>
(
i
&
7
)))
>>
(
7
-
(
i
&
7
));
//printf("c(%d,%d)=%d\n",j,i,temp);
c
[
i
]
|=
(
temp
<<
(
j
-
macro_segment
));
c
c
[
i
]
|=
(
temp
<<
(
j
-
macro_segment
));
}
}
#else
...
...
@@ -159,28 +158,14 @@ int nrLDPC_encod(unsigned char **test_input,unsigned char **channel_input,int Zc
if
((
BG
==
1
&&
Zc
>
176
)
||
(
BG
==
2
&&
Zc
>
64
))
{
// extend matrix
if
(
impp
->
tprep
!=
NULL
)
start_meas
(
impp
->
tprep
);
for
(
i1
=
0
;
i1
<
ncols
;
i1
++
)
{
memcpy
(
&
c_extension
[
2
*
i1
*
Zc
],
&
c
[
i1
*
Zc
],
Zc
*
sizeof
(
unsigned
char
));
memcpy
(
&
c_extension
[(
2
*
i1
+
1
)
*
Zc
],
&
c
[
i1
*
Zc
],
Zc
*
sizeof
(
unsigned
char
));
}
for
(
i1
=
1
;
i1
<
simd_size
;
i1
++
)
{
memcpy
(
&
c_extension
[(
2
*
ncols
*
Zc
*
i1
)],
&
c_extension
[
i1
],
(
2
*
ncols
*
Zc
*
sizeof
(
unsigned
char
))
-
i1
);
// memset(&c_extension[(2*ncols*Zc*i1)],0,i1);
/*
printf("shift %d: ",i1);
for (int j=0;j<64;j++) printf("%d ",c_extension[(2*ncols*Zc*i1)+j]);
printf("\n");
*/
}
if
(
impp
->
tprep
!=
NULL
)
stop_meas
(
impp
->
tprep
);
//parity check part
if
(
impp
->
tparity
!=
NULL
)
start_meas
(
impp
->
tparity
);
encode_parity_check_part_optim
(
c
_extension
,
d
,
BG
,
Zc
,
Kb
);
encode_parity_check_part_optim
(
c
c
,
dd
,
BG
,
Zc
,
Kb
,
simd_size
,
ncols
);
if
(
impp
->
tparity
!=
NULL
)
stop_meas
(
impp
->
tparity
);
}
else
{
if
(
encode_parity_check_part_orig
(
c
,
d
,
BG
,
Zc
,
Kb
,
block_length
)
!=
0
)
{
if
(
encode_parity_check_part_orig
(
c
c
,
d
d
,
BG
,
Zc
,
Kb
,
block_length
)
!=
0
)
{
printf
(
"Problem with encoder
\n
"
);
return
(
-
1
);
}
...
...
@@ -188,8 +173,8 @@ int nrLDPC_encod(unsigned char **test_input,unsigned char **channel_input,int Zc
if
(
impp
->
toutput
!=
NULL
)
start_meas
(
impp
->
toutput
);
// information part and puncture columns
/*
memcpy(&
channel_in
put[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
memcpy(&
channel_in
put[block_length-2*Zc], &d[0], ((nrows-no_punctured_columns) * Zc-removed_bit)*sizeof(unsigned char));
memcpy(&
out
put[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
memcpy(&
out
put[block_length-2*Zc], &d[0], ((nrows-no_punctured_columns) * Zc-removed_bit)*sizeof(unsigned char));
*/
#ifdef __AVX2__
if
((((
2
*
Zc
)
&
31
)
==
0
)
&&
(((
block_length
-
(
2
*
Zc
))
&
31
)
==
0
))
{
...
...
@@ -197,34 +182,34 @@ int nrLDPC_encod(unsigned char **test_input,unsigned char **channel_input,int Zc
//AssertFatal(((block_length-(2*Zc))&31) == 0,"block_length-(2*Zc) needs to be a multiple of 32 for now\n");
uint32_t
l1
=
(
block_length
-
(
2
*
Zc
))
>>
5
;
uint32_t
l2
=
((
nrows
-
no_punctured_columns
)
*
Zc
-
removed_bit
)
>>
5
;
__m256i
*
c256p
=
(
__m256i
*
)
&
c
[
2
*
Zc
];
__m256i
*
d256p
=
(
__m256i
*
)
&
d
[
0
];
__m256i
*
c256p
=
(
__m256i
*
)
&
c
c
[
2
*
Zc
];
__m256i
*
d256p
=
(
__m256i
*
)
&
d
d
[
0
];
// if (((block_length-(2*Zc))&31)>0) l1++;
for
(
i
=
0
;
i
<
l1
;
i
++
)
//for (j=0;j<n_segments;j++) ((__m256i *)
channel_in
put[j])[i] = _mm256_and_si256(_mm256_srai_epi16(c256p[i],j),masks[0]);
for
(
j
=
macro_segment
;
j
<
macro_segment_end
;
j
++
)
((
__m256i
*
)
channel_in
put
[
j
])[
i
]
=
_mm256_and_si256
(
_mm256_srai_epi16
(
c256p
[
i
],
j
-
macro_segment
),
masks
[
0
]);
for
(
i
nt
i
=
0
;
i
<
l1
;
i
++
)
//for (j=0;j<n_segments;j++) ((__m256i *)
out
put[j])[i] = _mm256_and_si256(_mm256_srai_epi16(c256p[i],j),masks[0]);
for
(
int
j
=
macro_segment
;
j
<
macro_segment_end
;
j
++
)
((
__m256i
*
)
out
put
[
j
])[
i
]
=
_mm256_and_si256
(
_mm256_srai_epi16
(
c256p
[
i
],
j
-
macro_segment
),
masks
[
0
]);
// if ((((nrows-no_punctured_columns) * Zc-removed_bit)&31)>0) l2++;
for
(
i
1
=
0
;
i1
<
l2
;
i1
++
,
i
++
)
//for (j=0;j<n_segments;j++) ((__m256i *)
channel_in
put[j])[i] = _mm256_and_si256(_mm256_srai_epi16(d256p[i1],j),masks[0]);
for
(
j
=
macro_segment
;
j
<
macro_segment_end
;
j
++
)
((
__m256i
*
)
channel_in
put
[
j
])[
i
]
=
_mm256_and_si256
(
_mm256_srai_epi16
(
d256p
[
i1
],
j
-
macro_segment
),
masks
[
0
]);
for
(
i
nt
i1
=
0
,
i
=
l1
;
i1
<
l2
;
i1
++
,
i
++
)
//for (j=0;j<n_segments;j++) ((__m256i *)
out
put[j])[i] = _mm256_and_si256(_mm256_srai_epi16(d256p[i1],j),masks[0]);
for
(
int
j
=
macro_segment
;
j
<
macro_segment_end
;
j
++
)
((
__m256i
*
)
out
put
[
j
])[
i
]
=
_mm256_and_si256
(
_mm256_srai_epi16
(
d256p
[
i1
],
j
-
macro_segment
),
masks
[
0
]);
}
else
{
#ifdef DEBUG_LDPC
LOG_W
(
PHY
,
"using non-optimized version
\n
"
);
#endif
// do non-SIMD version
for
(
i
=
0
;
i
<
(
block_length
-
2
*
Zc
);
i
++
)
for
(
i
nt
i
=
0
;
i
<
(
block_length
-
2
*
Zc
);
i
++
)
//for (j=0; j<n_segments; j++)
for
(
j
=
macro_segment
;
j
<
macro_segment_end
;
j
++
)
channel_input
[
j
][
i
]
=
(
c
[
2
*
Zc
+
i
]
>>
(
j
-
macro_segment
))
&
1
;
for
(
i
=
0
;
i
<
((
nrows
-
no_punctured_columns
)
*
Zc
-
removed_bit
);
i
++
)
for
(
int
j
=
macro_segment
;
j
<
macro_segment_end
;
j
++
)
output
[
j
][
i
]
=
(
c
c
[
2
*
Zc
+
i
]
>>
(
j
-
macro_segment
))
&
1
;
for
(
i
nt
i
=
0
;
i
<
((
nrows
-
no_punctured_columns
)
*
Zc
-
removed_bit
);
i
++
)
//for (j=0; j<n_segments; j++)
for
(
j
=
macro_segment
;
j
<
macro_segment_end
;
j
++
)
channel_input
[
j
][
block_length
-
2
*
Zc
+
i
]
=
(
d
[
i
]
>>
(
j
-
macro_segment
))
&
1
;
for
(
int
j
=
macro_segment
;
j
<
macro_segment_end
;
j
++
)
output
[
j
][
block_length
-
2
*
Zc
+
i
]
=
(
d
d
[
i
]
>>
(
j
-
macro_segment
))
&
1
;
}
#else
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
View file @
64e61036
...
...
@@ -180,9 +180,12 @@ uint8_t nr_generate_pdsch(processingData_L1tx_t *msgTx,
/// CRC, coding, interleaving and rate matching
AssertFatal
(
harq
->
pdu
!=
NULL
,
"harq->pdu is null
\n
"
);
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
);
start_meas
(
dlsch_encoding_stats
);
nr_dlsch_encoding
(
gNB
,
harq
->
pdu
,
frame
,
slot
,
dlsch
,
frame_parms
,
tinput
,
tprep
,
tparity
,
toutput
,
harq
->
pdu
,
frame
,
slot
,
dlsch
,
frame_parms
,
output
,
tinput
,
tprep
,
tparity
,
toutput
,
dlsch_rate_matching_stats
,
dlsch_interleaving_stats
,
dlsch_segmentation_stats
);
...
...
@@ -197,7 +200,7 @@ uint8_t nr_generate_pdsch(processingData_L1tx_t *msgTx,
printf
(
"
\n
Encoded payload:
\n
"
);
for
(
int
i
=
0
;
i
<
encoded_length
>>
3
;
i
++
)
{
for
(
int
j
=
0
;
j
<
8
;
j
++
)
printf
(
"%d"
,
harq
->
f
[(
i
<<
3
)
+
j
]);
printf
(
"%d"
,
output
[(
i
<<
3
)
+
j
]);
printf
(
"
\t
"
);
}
printf
(
"
\n
"
);
...
...
@@ -210,7 +213,7 @@ uint8_t nr_generate_pdsch(processingData_L1tx_t *msgTx,
for
(
int
q
=
0
;
q
<
rel15
->
NrOfCodewords
;
q
++
)
memset
((
void
*
)
scrambled_output
[
q
],
0
,
(
encoded_length
>>
5
)
*
sizeof
(
uint32_t
));
for
(
int
q
=
0
;
q
<
rel15
->
NrOfCodewords
;
q
++
)
nr_pdsch_codeword_scrambling_optim
(
harq
->
f
,
nr_pdsch_codeword_scrambling_optim
(
output
,
encoded_length
,
q
,
rel15
->
dataScramblingId
,
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
View file @
64e61036
...
...
@@ -85,6 +85,7 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
uint8_t
slot
,
NR_gNB_DLSCH_t
*
dlsch
,
NR_DL_FRAME_PARMS
*
frame_parms
,
unsigned
char
*
output
,
time_stats_t
*
tinput
,
time_stats_t
*
tprep
,
time_stats_t
*
tparity
,
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
View file @
64e61036
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_TRANSPORT/pucch_rx.c
View file @
64e61036
...
...
@@ -368,7 +368,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB,
xrtmag_next
=
temp
;
}
av_corr
/=
nr_sequences
/
l
;
//
av_corr/=nr_sequences/l;
int
xrtmag_dBtimes10
=
10
*
(
int
)
dB_fixed64
(
xrtmag
/
(
12
*
l
));
int
xrtmag_next_dBtimes10
=
10
*
(
int
)
dB_fixed64
(
xrtmag_next
/
(
12
*
l
));
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
View file @
64e61036
...
...
@@ -389,7 +389,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
printf
(
"[AbsSFN %u.%d] Slot%d Symbol %d type %d: Pilot/Data extraction %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
type
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_
I
(
PHY
,
"[AbsSFN %u.%d] Slot%d Symbol %d type %d: Pilot/Data extraction %5.2f
\n
"
,
LOG_
D
(
PHY
,
"[AbsSFN %u.%d] Slot%d Symbol %d type %d: Pilot/Data extraction %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
type
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
...
...
@@ -411,7 +411,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
#if DISABLE_LOG_X
printf
(
"[AbsSFN %u.%d] Slot%d Symbol %d: Channel Scale %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_
I
(
PHY
,
"[AbsSFN %u.%d] Slot%d Symbol %d: Channel Scale %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_
D
(
PHY
,
"[AbsSFN %u.%d] Slot%d Symbol %d: Channel Scale %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
start_meas
(
&
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
]);
if
(
first_symbol_flag
==
1
)
{
...
...
@@ -472,7 +472,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
#if DISABLE_LOG_X
printf
(
"[AbsSFN %u.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
first_symbol_flag
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_
I
(
PHY
,
"[AbsSFN %u.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
first_symbol_flag
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_
D
(
PHY
,
"[AbsSFN %u.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
first_symbol_flag
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
start_meas
(
&
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
]);
...
...
@@ -524,7 +524,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
#if DISABLE_LOG_X
printf
(
"[AbsSFN %u.%d] Slot%d Symbol %d log2_maxh %d channel_level %d: Channel Comp %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
pdsch_vars
[
gNB_id
]
->
log2_maxh
,
proc
->
channel_level
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_
I
(
PHY
,
"[AbsSFN %u.%d] Slot%d Symbol %d log2_maxh %d channel_level %d: Channel Comp %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
pdsch_vars
[
gNB_id
]
->
log2_maxh
,
proc
->
channel_level
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_
D
(
PHY
,
"[AbsSFN %u.%d] Slot%d Symbol %d log2_maxh %d channel_level %d: Channel Comp %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
pdsch_vars
[
gNB_id
]
->
log2_maxh
,
proc
->
channel_level
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
start_meas
(
&
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
]);
...
...
@@ -583,7 +583,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
#if DISABLE_LOG_X
printf
(
"[AbsSFN %u.%d] Slot%d Symbol %d: Channel Combine %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_
I
(
PHY
,
"[AbsSFN %u.%d] Slot%d Symbol %d: Channel Combine %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_
D
(
PHY
,
"[AbsSFN %u.%d] Slot%d Symbol %d: Channel Combine %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
start_meas
(
&
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
]);
/* Store the valid DL RE's */
...
...
@@ -666,7 +666,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
#if DISABLE_LOG_X
printf
(
"[AbsSFN %u.%d] Slot%d Symbol %d: LLR Computation %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_
I
(
PHY
,
"[AbsSFN %u.%d] Slot%d Symbol %d: LLR Computation %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_
D
(
PHY
,
"[AbsSFN %u.%d] Slot%d Symbol %d: LLR Computation %5.2f
\n
"
,
frame
,
nr_slot_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
// Please keep it: useful for debugging
...
...
openair1/PHY/defs_gNB.h
View file @
64e61036
...
...
@@ -96,20 +96,6 @@ typedef struct {
uint32_t
subframe
;
/// MIMO mode for this DLSCH
MIMO_mode_t
mimo_mode
;
/// Concatenated sequences
uint8_t
*
e
;
/// LDPC-code outputs
uint8_t
*
d
[
MAX_NUM_NR_DLSCH_SEGMENTS
];
/// Interleaver outputs
uint8_t
*
f
;
/// Number of code segments
uint32_t
C
;
/// Number of bits in "small" code segments
uint32_t
K
;
/// Number of "Filler" bits
uint32_t
F
;
/// Encoder BG
uint8_t
BG
;
/// LDPC lifting size
uint32_t
Z
;
}
NR_DL_gNB_HARQ_t
;
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
64e61036
...
...
@@ -843,11 +843,7 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int gNB_
}
else
AssertFatal
(
1
==
0
,
"Not RA_PDSCH, SI_PDSCH or PDSCH
\n
"
);
stop_meas
(
&
ue
->
dlsch_llr_stats_parallelization
[
proc
->
thread_id
][
slot
]);
#if PHYSIM
printf
(
"[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
m
,
ue
->
dlsch_llr_stats_parallelization
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_D
(
PHY
,
"[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
m
,
ue
->
dlsch_llr_stats_parallelization
[
proc
->
thread_id
][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
if
(
first_symbol_flag
)
{
proc
->
first_symbol_available
=
1
;
...
...
@@ -1041,17 +1037,10 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
stop_meas
(
&
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
]);
#if PHYSIM
printf
(
" --> Unscrambling for CW0 %5.3f
\n
"
,
(
ue
->
dlsch_unscrambling_stats
.
p_time
)
/
(
cpuf
*
1000
.
0
));
printf
(
"AbsSubframe %d.%d --> LDPC Decoding for CW0 %5.3f
\n
"
,
frame_rx
%
1024
,
nr_slot_rx
,(
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
].
p_time
)
/
(
cpuf
*
1000
.
0
));
#else
LOG_I
(
PHY
,
" --> Unscrambling for CW0 %5.3f
\n
"
,
LOG_D
(
PHY
,
" --> Unscrambling for CW0 %5.3f
\n
"
,
(
ue
->
dlsch_unscrambling_stats
.
p_time
)
/
(
cpuf
*
1000
.
0
));
LOG_
I
(
PHY
,
"AbsSubframe %d.%d --> LDPC Decoding for CW0 %5.3f
\n
"
,
LOG_
D
(
PHY
,
"AbsSubframe %d.%d --> LDPC Decoding for CW0 %5.3f
\n
"
,
frame_rx
%
1024
,
nr_slot_rx
,(
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
].
p_time
)
/
(
cpuf
*
1000
.
0
));
#endif
if
(
is_cw1_active
)
{
// start ldpc decode for CW 1
...
...
@@ -1117,17 +1106,10 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
stop_meas
(
&
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
]);
#if PHYSIM
printf
(
" --> Unscrambling for CW1 %5.3f
\n
"
,
(
ue
->
dlsch_unscrambling_stats
.
p_time
)
/
(
cpuf
*
1000
.
0
));
printf
(
"AbsSubframe %d.%d --> ldpc Decoding for CW1 %5.3f
\n
"
,
frame_rx
%
1024
,
nr_slot_rx
,(
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
].
p_time
)
/
(
cpuf
*
1000
.
0
));
#else
LOG_D
(
PHY
,
" --> Unscrambling for CW1 %5.3f
\n
"
,
(
ue
->
dlsch_unscrambling_stats
.
p_time
)
/
(
cpuf
*
1000
.
0
));
LOG_D
(
PHY
,
"AbsSubframe %d.%d --> ldpc Decoding for CW1 %5.3f
\n
"
,
frame_rx
%
1024
,
nr_slot_rx
,(
ue
->
dlsch_decoding_stats
[
proc
->
thread_id
].
p_time
)
/
(
cpuf
*
1000
.
0
));
#endif
LOG_D
(
PHY
,
"AbsSubframe %d.%d --> ldpc Decoding for CW1 %5.3f
\n
"
,
...
...
@@ -1438,11 +1420,7 @@ void *UE_thread_slot1_dl_processing(void *arg) {
stop_meas
(
&
ue
->
ue_front_end_per_slot_stat
[
proc
->
thread_id
][
1
]);
#if PHYSIM
printf
(
"[AbsSFN %d.%d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
ue
->
ue_front_end_per_slot_stat
[
proc
->
thread_id
][
1
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_D
(
PHY
,
"[AbsSFN %d.%d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
ue
->
ue_front_end_per_slot_stat
[
proc
->
thread_id
][
1
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
//wait until pdcch is decoded
...
...
@@ -1532,11 +1510,7 @@ void *UE_thread_slot1_dl_processing(void *arg) {
//printf("Set available LLR slot1 to 1 AbsSubframe %d.%d \n",frame_rx,nr_slot_rx);
stop_meas
(
&
ue
->
pdsch_procedures_per_slot_stat
[
proc
->
thread_id
][
1
]);
#if PHYSIM
printf
(
"[AbsSFN %d.%d] Slot1: LLR Computation %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
ue
->
pdsch_procedures_per_slot_stat
[
proc
->
thread_id
][
1
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_D
(
PHY
,
"[AbsSFN %d.%d] Slot1: LLR Computation %5.2f
\n
"
,
frame_rx
,
nr_slot_rx
,
ue
->
pdsch_procedures_per_slot_stat
[
proc
->
thread_id
][
1
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
if
(
pthread_mutex_lock
(
&
proc
->
mutex_slot1_dl_processing
)
!=
0
)
{
LOG_E
(
PHY
,
"[SCHED][UE] error locking mutex for UE RXTX
\n
"
);
...
...
@@ -1906,13 +1880,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
dlsch_parallel
);
stop_meas
(
&
ue
->
dlsch_procedures_stat
[
proc
->
thread_id
]);
#if PHYSIM
printf
(
"[SFN %d] Slot1: Pdsch Proc %5.2f
\n
"
,
nr_slot_rx
,
ue
->
pdsch_procedures_stat
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
printf
(
"[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f
\n
"
,
nr_slot_rx
,
ue
->
dlsch_procedures_stat
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_D
(
PHY
,
"[SFN %d] Slot1: Pdsch Proc %5.2f
\n
"
,
nr_slot_rx
,
ue
->
pdsch_procedures_stat
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_D
(
PHY
,
"[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f
\n
"
,
nr_slot_rx
,
ue
->
dlsch_procedures_stat
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
...
...
@@ -1989,9 +1958,6 @@ if (nr_slot_rx==9) {
}
stop_meas
(
&
ue
->
generic_stat
);
#if PHYSIM
printf
(
"after tubo until end of Rx %5.2f
\n
"
,
ue
->
generic_stat
.
p_time
/
(
cpuf
*
1000
.
0
));
#endif
#ifdef EMOS
phy_procedures_emos_UE_RX
(
ue
,
slot
,
gNB_id
);
...
...
@@ -2001,11 +1967,7 @@ phy_procedures_emos_UE_RX(ue,slot,gNB_id);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX
,
VCD_FUNCTION_OUT
);
stop_meas
(
&
ue
->
phy_proc_rx
[
proc
->
thread_id
]);
#if PHYSIM
printf
(
"------FULL RX PROC [SFN %d]: %5.2f ------
\n
"
,
nr_slot_rx
,
ue
->
phy_proc_rx
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_D
(
PHY
,
"------FULL RX PROC [SFN %d]: %5.2f ------
\n
"
,
nr_slot_rx
,
ue
->
phy_proc_rx
[
proc
->
thread_id
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
//#endif //pdsch
...
...
openair1/SIMULATION/NR_PHY/dlschsim.c
View file @
64e61036
...
...
@@ -503,8 +503,10 @@ int main(int argc, char **argv)
//printf("crc32: [0]->0x%08x\n",crc24c(test_input, 32));
// generate signal
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
,
test_input
,
frame
,
slot
,
dlsch
,
frame_parms
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
);
nr_dlsch_encoding
(
gNB
,
test_input
,
frame
,
slot
,
dlsch
,
frame_parms
,
output
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
);
}
for
(
SNR
=
snr0
;
SNR
<
snr1
;
SNR
+=
snr_step
)
{
...
...
@@ -521,11 +523,12 @@ int main(int argc, char **argv)
//if (i<16)
// printf("encoder output f[%d] = %d\n",i,dlsch->harq_processes[0]->f[i]);
/*
if (dlsch->harq_process.f[i] == 0)
modulated_input[i] = 1.0; ///sqrt(2); //QPSK
else
modulated_input[i] = -1.0; ///sqrt(2);
*/
//if (i<16) printf("modulated_input[%d] = %d\n",i,modulated_input[i]);
//SNR =10;
SNR_lin
=
pow
(
10
,
SNR
/
10
.
0
);
...
...
@@ -548,9 +551,10 @@ int main(int argc, char **argv)
channel_output_uncoded
[
i
]
=
1
;
//QPSK demod
else
channel_output_uncoded
[
i
]
=
0
;
/*
if (channel_output_uncoded[i] != dlsch->harq_process.f[i])
errors_bit_uncoded = errors_bit_uncoded + 1;
*/
}
//if (errors_bit_uncoded>10)
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
64e61036
...
...
@@ -369,6 +369,7 @@ int main(int argc, char **argv)
uint8_t
n_tx
=
1
,
n_rx
=
1
;
uint8_t
round
;
uint8_t
num_rounds
=
4
;
char
gNBthreads
[
128
]
=
"n"
;
channel_desc_t
*
gNB2UE
;
//uint32_t nsymb,tx_lev,tx_lev1 = 0,tx_lev2 = 0;
...
...
@@ -430,9 +431,7 @@ int main(int argc, char **argv)
FILE
*
scg_fd
=
NULL
;
while
((
c
=
getopt
(
argc
,
argv
,
"f:hA:pf:g:in:s:S:t:x:y:z:M:N:F:GR:dPIL:Ea:b:D:e:m:w:T:U:q"
))
!=
-
1
)
{
while
((
c
=
getopt
(
argc
,
argv
,
"f:hA:pf:g:in:s:S:t:x:y:z:M:N:F:GR:dPIL:Ea:b:d:e:m:w:T:U:qX:"
))
!=
-
1
)
{
switch
(
c
)
{
case
'f'
:
scg_fd
=
fopen
(
optarg
,
"r"
);
...
...
@@ -635,7 +634,12 @@ int main(int argc, char **argv)
dmrs_arg
[
i
]
=
atoi
(
argv
[
optind
++
]);
}
break
;
case
'X'
:
strncpy
(
gNBthreads
,
optarg
,
sizeof
(
gNBthreads
));
gNBthreads
[
sizeof
(
gNBthreads
)
-
1
]
=
0
;
break
;
default:
case
'h'
:
printf
(
"%s -h(elp) -p(extended_prefix) -N cell_id -f output_filename -F input_filename -g channel_model -n n_frames -t Delayspread -s snr0 -S snr1 -x transmission_mode -y TXant -z RXant -i Intefrence0 -j Interference1 -A interpolation_file -C(alibration offset dB) -N CellId
\n
"
,
...
...
@@ -671,7 +675,8 @@ int main(int argc, char **argv)
printf
(
"-U Change DMRS Config, arguments list DMRS TYPE{0=A,1=B} DMRS AddPos{0:2} DMRS ConfType{1:2}, e.g. -U 3 0 2 1
\n
"
);
printf
(
"-P Print DLSCH performances
\n
"
);
printf
(
"-w Write txdata to binary file (one frame)
\n
"
);
printf
(
"-D number of dlsch threads, 0: no dlsch parallelization
\n
"
);
printf
(
"-d number of dlsch threads, 0: no dlsch parallelization
\n
"
);
printf
(
"-X gNB thread pool configuration, n => no threads"
);
exit
(
-
1
);
break
;
}
...
...
@@ -823,17 +828,17 @@ int main(int argc, char **argv)
fs
=
122.88e6
;
bw
=
100e6
;
}
else
if
(
mu
==
1
&&
N_RB_DL
==
1
62
)
{
else
if
(
mu
==
1
&&
N_RB_DL
==
1
06
)
{
fs
=
61.44e6
;
bw
=
6
0e6
;
bw
=
4
0e6
;
}
else
if
(
mu
==
1
&&
N_RB_DL
==
133
)
{
else
if
(
mu
==
1
&&
N_RB_DL
==
133
)
{
fs
=
61.44e6
;
bw
=
50e6
;
}
else
if
(
mu
==
1
&&
N_RB_DL
==
1
06
)
{
}
else
if
(
mu
==
1
&&
N_RB_DL
==
1
62
)
{
fs
=
61.44e6
;
bw
=
4
0e6
;
bw
=
6
0e6
;
}
else
if
(
mu
==
3
&&
N_RB_DL
==
66
)
{
fs
=
122.88e6
;
...
...
@@ -974,8 +979,7 @@ int main(int argc, char **argv)
snrRun
=
0
;
gNB
->
threadPool
=
(
tpool_t
*
)
malloc
(
sizeof
(
tpool_t
));
char
tp_param
[]
=
"n"
;
initTpool
(
tp_param
,
gNB
->
threadPool
,
true
);
initTpool
(
gNBthreads
,
gNB
->
threadPool
,
true
);
gNB
->
resp_L1_tx
=
(
notifiedFIFO_t
*
)
malloc
(
sizeof
(
notifiedFIFO_t
));
initNotifiedFIFO
(
gNB
->
resp_L1_tx
);
// we create 2 threads for L1 tx processing
...
...
@@ -1229,8 +1233,8 @@ int main(int argc, char **argv)
UE
->
dlsch
[
UE_proc
.
thread_id
][
0
][
0
]
->
max_ldpc_iterations
+
1
)
n_errors
++
;
NR_UE_PDSCH
**
pdsch_vars
=
UE
->
pdsch_vars
[
UE_proc
.
thread_id
];
int16_t
*
UE_llr
=
pdsch_vars
[
0
]
->
llr
[
0
];
//
NR_UE_PDSCH **pdsch_vars = UE->pdsch_vars[UE_proc.thread_id];
//
int16_t *UE_llr = pdsch_vars[0]->llr[0];
TBS
=
UE_harq_process
->
TBS
;
//rel15->TBSize[0];
uint16_t
length_dmrs
=
get_num_dmrs
(
rel15
->
dlDmrsSymbPos
);
...
...
@@ -1245,6 +1249,7 @@ int main(int argc, char **argv)
printf
(
"[DLSIM][PTRS] Available bits are: %5u, removed PTRS bits are: %5u
\n
"
,
available_bits
,
(
ptrsSymbPerSlot
*
ptrsRePerSymb
*
rel15
->
nrOfLayers
*
2
)
);
}
/*
for (i = 0; i < available_bits; i++) {
if(((gNB_dlsch->harq_process.f[i] == 0) && (UE_llr[i] <= 0)) ||
...
...
@@ -1258,6 +1263,7 @@ int main(int argc, char **argv)
}
}
*/
for
(
i
=
0
;
i
<
TBS
;
i
++
)
{
estimated_output_bit
[
i
]
=
(
UE_harq_process
->
b
[
i
/
8
]
&
(
1
<<
(
i
&
7
)))
>>
(
i
&
7
);
...
...
@@ -1301,12 +1307,9 @@ int main(int argc, char **argv)
printf
(
"
\n
"
);
if
(
print_perf
==
1
)
{
printf
(
"
\n
gNB TX function statistics (per %d us slot, NPRB %d, mcs %d, TBS %d
, C %d, Kr %d (Zc %d)
)
\n
"
,
printf
(
"
\n
gNB TX function statistics (per %d us slot, NPRB %d, mcs %d, TBS %d)
\n
"
,
1000
>>*
scc
->
ssbSubcarrierSpacing
,
g_rbSize
,
g_mcsIndex
,
msgDataTx
->
dlsch
[
0
][
0
]
->
harq_process
.
pdsch_pdu
.
pdsch_pdu_rel15
.
TBSize
[
0
]
<<
3
,
msgDataTx
->
dlsch
[
0
][
0
]
->
harq_process
.
C
,
msgDataTx
->
dlsch
[
0
][
0
]
->
harq_process
.
K
,
msgDataTx
->
dlsch
[
0
][
0
]
->
harq_process
.
K
/
((
msgDataTx
->
dlsch
[
0
][
0
]
->
harq_process
.
pdsch_pdu
.
pdsch_pdu_rel15
.
TBSize
[
0
]
<<
3
)
>
3824
?
22
:
10
));
msgDataTx
->
dlsch
[
0
][
0
]
->
harq_process
.
pdsch_pdu
.
pdsch_pdu_rel15
.
TBSize
[
0
]
<<
3
);
printDistribution
(
gNB
->
phy_proc_tx_0
,
table_tx
,
"PHY proc tx"
);
printStatIndent2
(
&
gNB
->
dlsch_encoding_stats
,
"DLSCH encoding time"
);
printStatIndent3
(
&
gNB
->
dlsch_segmentation_stats
,
"DLSCH segmentation time"
);
...
...
openair2/LAYER2/NR_MAC_gNB/main.c
View file @
64e61036
...
...
@@ -64,7 +64,7 @@ void *nrmac_stats_thread(void *arg) {
fseek
(
fd
,
0
,
SEEK_SET
);
}
fclose
(
fd
);
return
(
void
*
)
0
;
return
NULL
;
}
void
clear_mac_stats
(
gNB_MAC_INST
*
gNB
)
{
...
...
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