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
Michael Black
OpenXG-RAN
Commits
054156c1
Commit
054156c1
authored
Aug 09, 2019
by
Wang Tsu-Han
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'nr-timing-measurement' into ru_parallel
Conflicts: executables/nr-ru.c
parents
4fbf754d
9249cd1c
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
117 additions
and
54 deletions
+117
-54
executables/nr-gnb.c
executables/nr-gnb.c
+22
-0
executables/nr-ru.c
executables/nr-ru.c
+29
-17
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
+1
-1
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c
+24
-24
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
+10
-2
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
+5
-1
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
+0
-6
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+2
-0
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+5
-1
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+3
-2
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+16
-0
No files found.
executables/nr-gnb.c
View file @
054156c1
...
...
@@ -684,6 +684,27 @@ static void* gNB_thread_prach( void* param ) {
extern
void
init_td_thread
(
PHY_VARS_gNB
*
);
extern
void
init_te_thread
(
PHY_VARS_gNB
*
);
static
void
*
process_stats_thread
(
void
*
param
)
{
PHY_VARS_gNB
*
gNB
=
(
PHY_VARS_gNB
*
)
param
;
reset_meas
(
&
gNB
->
dlsch_encoding_stats
);
reset_meas
(
&
gNB
->
dlsch_scrambling_stats
);
reset_meas
(
&
gNB
->
dlsch_modulation_stats
);
wait_sync
(
"process_stats_thread"
);
while
(
!
oai_exit
)
{
sleep
(
1
);
print_meas
(
&
gNB
->
dlsch_encoding_stats
,
"pdsch_encoding"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
dlsch_scrambling_stats
,
"pdsch_scrambling"
,
NULL
,
NULL
);
print_meas
(
&
gNB
->
dlsch_modulation_stats
,
"pdsch_modulation"
,
NULL
,
NULL
);
}
return
(
NULL
);
}
void
init_gNB_proc
(
int
inst
)
{
int
i
=
0
;
int
CC_id
;
...
...
@@ -731,6 +752,7 @@ void init_gNB_proc(int inst) {
threadCreate
(
&
L1_proc_tx
->
pthread
,
gNB_L1_thread_tx
,
gNB
,
"L1_proc_tx"
,
-
1
,
OAI_PRIORITY_RT
);
}
if
(
opp_enabled
==
1
)
threadCreate
(
&
proc
->
L1_stats_thread
,
process_stats_thread
,(
void
*
)
gNB
,
"time_meas"
,
-
1
,
OAI_PRIORITY_RT_LOW
);
//pthread_create( &proc->pthread_prach, attr_prach, gNB_thread_prach, gNB );
char
name
[
16
];
...
...
executables/nr-ru.c
View file @
054156c1
...
...
@@ -1063,30 +1063,42 @@ void fill_rf_config(RU_t *ru, char *rf_config_file) {
cfg
->
rx_bw
=
1.5e6
;
}
else
AssertFatal
(
1
==
0
,
"Unknown N_RB %d
\n
"
,
N_RB
);
}
else
if
(
mu
==
NR_MU_1
)
{
if
(
N_RB
==
217
)
{
if
(
N_RB
==
273
)
{
if
(
fp
->
threequarter_fs
)
{
cfg
->
sample_rate
=
115.2e6
;
cfg
->
samples_per_frame
=
1152000
;
cfg
->
tx_bw
=
100e6
;
cfg
->
rx_bw
=
100e6
;
}
else
{
cfg
->
sample_rate
=
153.6e6
;
cfg
->
samples_per_frame
=
1536000
;
cfg
->
tx_bw
=
100e6
;
cfg
->
rx_bw
=
100e6
;
}
}
else
if
(
N_RB
==
217
)
{
if
(
fp
->
threequarter_fs
)
{
cfg
->
sample_rate
=
92.16e6
;
cfg
->
samples_per_frame
=
921600
;
cfg
->
tx_bw
=
4
0e6
;
cfg
->
rx_bw
=
4
0e6
;
cfg
->
tx_bw
=
8
0e6
;
cfg
->
rx_bw
=
8
0e6
;
}
else
{
cfg
->
sample_rate
=
122.88e6
;
cfg
->
samples_per_frame
=
1228800
;
cfg
->
tx_bw
=
4
0e6
;
cfg
->
rx_bw
=
4
0e6
;
cfg
->
tx_bw
=
8
0e6
;
cfg
->
rx_bw
=
8
0e6
;
}
}
else
if
(
N_RB
==
106
)
{
if
(
fp
->
threequarter_fs
)
{
cfg
->
sample_rate
=
46.08e6
;
cfg
->
samples_per_frame
=
460800
;
cfg
->
tx_bw
=
2
0e6
;
cfg
->
rx_bw
=
2
0e6
;
cfg
->
tx_bw
=
4
0e6
;
cfg
->
rx_bw
=
4
0e6
;
}
else
{
cfg
->
sample_rate
=
61.44e6
;
cfg
->
samples_per_frame
=
614400
;
cfg
->
tx_bw
=
2
0e6
;
cfg
->
rx_bw
=
2
0e6
;
cfg
->
tx_bw
=
4
0e6
;
cfg
->
rx_bw
=
4
0e6
;
}
}
else
{
AssertFatal
(
0
==
1
,
"N_RB %d not yet supported for numerology %d
\n
"
,
N_RB
,
mu
);
...
...
@@ -1609,7 +1621,7 @@ extern void nr_feptx_ofdm(RU_t *ru,int frame_tx,int tti_tx);
extern
void
nr_feptx_ofdm_2thread
(
RU_t
*
ru
,
int
frame_tx
,
int
tti_tx
);
extern
void
nr_feptx_prec
(
RU_t
*
ru
,
int
frame_tx
,
int
tti_tx
);
extern
void
init_fep_thread
(
RU_t
*
ru
);
extern
void
init_nr
_feptx_thread
(
RU_t
*
ru
);
extern
void
nr_init
_feptx_thread
(
RU_t
*
ru
);
void
init_RU_proc
(
RU_t
*
ru
)
{
int
i
=
0
;
...
...
@@ -1674,7 +1686,7 @@ void init_RU_proc(RU_t *ru) {
threadCreate
(
&
proc
->
pthread_prach
,
ru_thread_prach
,
(
void
*
)
ru
,
"RACH"
,
-
1
,
OAI_PRIORITY_RT
);
}
if
(
get_
nprocs
()
>=
2
)
{
if
(
get_
thread_worker_conf
()
==
WORKER_ENABLE
)
{
if
(
ru
->
feprx
)
init_fep_thread
(
ru
);
if
(
ru
->
feptx_ofdm
)
nr_init_feptx_thread
(
ru
);
...
...
@@ -1966,8 +1978,8 @@ void set_function_spec_param(RU_t *ru) {
ru
->
fh_north_out
=
fh_if4p5_north_out
;
// send_IF4p5 on reception
ru
->
fh_south_out
=
tx_rf
;
// send output to RF
ru
->
fh_north_asynch_in
=
fh_if4p5_north_asynch_in
;
// TX packets come asynchronously
ru
->
feprx
=
(
get_
nprocs
()
<=
2
)
?
fep_full
:
ru_fep_full_2thread
;
// RX DFTs
ru
->
feptx_ofdm
=
(
get_
nprocs
()
<=
2
)
?
nr_feptx_ofdm
:
nr_feptx_ofdm_2thread
;
// this is fep with idft only (no precoding in RRU)
ru
->
feprx
=
(
get_
thread_worker_conf
()
==
WORKER_ENABLE
)
?
ru_fep_full_2thread
:
fep_full
;
// RX DFTs
ru
->
feptx_ofdm
=
(
get_
thread_worker_conf
()
==
WORKER_ENABLE
)
?
nr_feptx_ofdm_2thread
:
nr_feptx_ofdm
;
// this is fep with idft only (no precoding in RRU)
ru
->
feptx_prec
=
NULL
;
ru
->
start_if
=
start_if
;
// need to start the if interface for if4p5
ru
->
ifdevice
.
host_type
=
RRU_HOST
;
...
...
@@ -1988,8 +2000,8 @@ void set_function_spec_param(RU_t *ru) {
malloc_IF4p5_buffer
(
ru
);
}
else
if
(
ru
->
function
==
gNodeB_3GPP
)
{
ru
->
do_prach
=
0
;
// no prach processing in RU
ru
->
feprx
=
(
get_
nprocs
()
<=
2
)
?
fep_full
:
ru_fep_full_2thread
;
// RX DFTs
ru
->
feptx_ofdm
=
(
get_
nprocs
()
<=
2
)
?
nr_feptx_ofdm
:
nr_feptx_ofdm_2thread
;
// this is fep with idft and precoding
ru
->
feprx
=
(
get_
thread_worker_conf
()
==
WORKER_ENABLE
)
?
ru_fep_full_2thread
:
fep_full
;
// RX DFTs
ru
->
feptx_ofdm
=
(
get_
thread_worker_conf
()
==
WORKER_ENABLE
)
?
nr_feptx_ofdm_2thread
:
nr_feptx_ofdm
;
// this is fep with idft and precoding
ru
->
feptx_prec
=
nr_feptx_prec
;
// this is fep with idft and precoding
ru
->
fh_north_in
=
NULL
;
// no incoming fronthaul from north
ru
->
fh_north_out
=
NULL
;
// no outgoing fronthaul to north
...
...
@@ -2018,9 +2030,9 @@ void set_function_spec_param(RU_t *ru) {
case
REMOTE_IF5
:
// the remote unit is IF5 RRU
ru
->
do_prach
=
0
;
ru
->
feprx
=
(
get_nprocs
()
<=
2
)
?
fep_full
:
fep_full
;
// this is frequency-shift + DFTs
ru
->
feprx
=
fep_full
;
// this is frequency-shift + DFTs
ru
->
feptx_prec
=
nr_feptx_prec
;
// need to do transmit Precoding + IDFTs
ru
->
feptx_ofdm
=
(
get_
nprocs
()
<=
2
)
?
nr_feptx_ofdm
:
nr_feptx_ofdm_2thread
;
// need to do transmit Precoding + IDFTs
ru
->
feptx_ofdm
=
(
get_
thread_worker_conf
()
==
WORKER_ENABLE
)
?
nr_feptx_ofdm_2thread
:
nr_feptx_ofdm
;
// need to do transmit Precoding + IDFTs
ru
->
fh_south_in
=
fh_if5_south_in
;
// synchronous IF5 reception
ru
->
fh_south_out
=
fh_if5_south_out
;
// synchronous IF5 transmission
ru
->
fh_south_asynch_in
=
NULL
;
// no asynchronous UL
...
...
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
View file @
054156c1
...
...
@@ -582,7 +582,7 @@ typedef struct {
uint8_t
time_allocation_type
;
uint8_t
freq_allocation_type
;
uint8_t
start_prb
;
uint
8_t
n_prb
;
uint
16_t
n_prb
;
////it was uint8_t
uint8_t
start_symbol
;
uint8_t
nb_symbols
;
uint8_t
mcs_idx
;
...
...
openair1/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c
View file @
054156c1
...
...
@@ -271,17 +271,17 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh
memset
(
c
,
0
,
sizeof
(
unsigned
char
)
*
ncols
*
Zc
);
memset
(
d
,
0
,
sizeof
(
unsigned
char
)
*
nrows
*
Zc
);
start_meas
(
tinput
);
if
(
tinput
!=
NULL
)
start_meas
(
tinput
);
for
(
i
=
0
;
i
<
block_length
;
i
++
)
{
c
[
i
]
=
(
test_input
[
i
/
8
]
&
(
1
<<
(
i
&
7
)))
>>
(
i
&
7
);
//printf("c(%d,%d)=%d\n",j,i,temp);
}
stop_meas
(
tinput
);
if
(
tinput
!=
NULL
)
stop_meas
(
tinput
);
if
((
BG
==
1
&&
Zc
>
176
)
||
(
BG
==
2
&&
Zc
>
64
))
{
// extend matrix
start_meas
(
tprep
);
if
(
tprep
!=
NULL
)
start_meas
(
tprep
);
for
(
i1
=
0
;
i1
<
ncols
;
i1
++
)
{
memcpy
(
&
c_extension
[
2
*
i1
*
Zc
],
&
c
[
i1
*
Zc
],
Zc
*
sizeof
(
unsigned
char
));
...
...
@@ -296,11 +296,11 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh
printf("\n");
*/
}
stop_meas
(
tprep
);
if
(
tprep
!=
NULL
)
stop_meas
(
tprep
);
//parity check part
start_meas
(
tparity
);
if
(
tparity
!=
NULL
)
start_meas
(
tparity
);
encode_parity_check_part_optim
(
c_extension
,
d
,
BG
,
Zc
,
Kb
);
stop_meas
(
tparity
);
if
(
tparity
!=
NULL
)
stop_meas
(
tparity
);
}
else
{
if
(
encode_parity_check_part_orig
(
c
,
d
,
BG
,
Zc
,
Kb
,
block_length
)
!=
0
)
{
...
...
@@ -308,12 +308,12 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh
return
(
-
1
);
}
}
start_meas
(
toutput
);
if
(
toutput
!=
NULL
)
start_meas
(
toutput
);
// information part and puncture columns
memcpy
(
&
channel_input
[
0
],
&
c
[
2
*
Zc
],
(
block_length
-
2
*
Zc
)
*
sizeof
(
unsigned
char
));
memcpy
(
&
channel_input
[
block_length
-
2
*
Zc
],
&
d
[
0
],
((
nrows
-
no_punctured_columns
)
*
Zc
-
removed_bit
)
*
sizeof
(
unsigned
char
));
stop_meas
(
toutput
);
if
(
toutput
!=
NULL
)
stop_meas
(
toutput
);
return
0
;
}
...
...
@@ -408,7 +408,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
memset
(
c
,
0
,
sizeof
(
unsigned
char
)
*
ncols
*
Zc
);
memset
(
d
,
0
,
sizeof
(
unsigned
char
)
*
nrows
*
Zc
);
start_meas
(
tinput
);
if
(
tinput
!=
NULL
)
start_meas
(
tinput
);
#if 0
for (i=0; i<block_length; i++) {
for (j=0; j<n_segments; j++) {
...
...
@@ -441,11 +441,11 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
#endif
#endif
stop_meas
(
tinput
);
if
(
tinput
!=
NULL
)
stop_meas
(
tinput
);
if
((
BG
==
1
&&
Zc
>
176
)
||
(
BG
==
2
&&
Zc
>
64
))
{
// extend matrix
start_meas
(
tprep
);
if
(
tprep
!=
NULL
)
start_meas
(
tprep
);
for
(
i1
=
0
;
i1
<
ncols
;
i1
++
)
{
memcpy
(
&
c_extension
[
2
*
i1
*
Zc
],
&
c
[
i1
*
Zc
],
Zc
*
sizeof
(
unsigned
char
));
...
...
@@ -460,11 +460,11 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
printf("\n");
*/
}
stop_meas
(
tprep
);
if
(
tprep
!=
NULL
)
stop_meas
(
tprep
);
//parity check part
start_meas
(
tparity
);
if
(
tparity
!=
NULL
)
start_meas
(
tparity
);
encode_parity_check_part_optim
(
c_extension
,
d
,
BG
,
Zc
,
Kb
);
stop_meas
(
tparity
);
if
(
tparity
!=
NULL
)
stop_meas
(
tparity
);
}
else
{
if
(
encode_parity_check_part_orig
(
c
,
d
,
BG
,
Zc
,
Kb
,
block_length
)
!=
0
)
{
...
...
@@ -472,7 +472,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
return
(
-
1
);
}
}
start_meas
(
toutput
);
if
(
toutput
!=
NULL
)
start_meas
(
toutput
);
// information part and puncture columns
/*
memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
...
...
@@ -513,7 +513,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
AssertFatal
(
1
==
0
,
"Need AVX2 for now
\n
"
);
#endif
stop_meas
(
toutput
);
if
(
toutput
!=
NULL
)
stop_meas
(
toutput
);
return
0
;
}
...
...
@@ -613,7 +613,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
memset
(
c
,
0
,
sizeof
(
unsigned
char
)
*
ncols
*
Zc
);
memset
(
d
,
0
,
sizeof
(
unsigned
char
)
*
nrows
*
Zc
);
start_meas
(
tinput
);
if
(
tinput
!=
NULL
)
start_meas
(
tinput
);
#if 0
for (i=0; i<block_length; i++) {
//for (j=0; j<n_segments; j++) {
...
...
@@ -649,11 +649,11 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
#endif
#endif
stop_meas
(
tinput
);
if
(
tinput
!=
NULL
)
stop_meas
(
tinput
);
if
((
BG
==
1
&&
Zc
>
176
)
||
(
BG
==
2
&&
Zc
>
64
))
{
// extend matrix
start_meas
(
tprep
);
if
(
tprep
!=
NULL
)
start_meas
(
tprep
);
for
(
i1
=
0
;
i1
<
ncols
;
i1
++
)
{
memcpy
(
&
c_extension
[
2
*
i1
*
Zc
],
&
c
[
i1
*
Zc
],
Zc
*
sizeof
(
unsigned
char
));
...
...
@@ -668,11 +668,11 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
printf("\n");
*/
}
stop_meas
(
tprep
);
if
(
tprep
!=
NULL
)
stop_meas
(
tprep
);
//parity check part
start_meas
(
tparity
);
if
(
tparity
!=
NULL
)
start_meas
(
tparity
);
encode_parity_check_part_optim
(
c_extension
,
d
,
BG
,
Zc
,
Kb
);
stop_meas
(
tparity
);
if
(
tparity
!=
NULL
)
stop_meas
(
tparity
);
}
else
{
if
(
encode_parity_check_part_orig
(
c
,
d
,
BG
,
Zc
,
Kb
,
block_length
)
!=
0
)
{
...
...
@@ -680,7 +680,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
return
(
-
1
);
}
}
start_meas
(
toutput
);
if
(
toutput
!=
NULL
)
start_meas
(
toutput
);
// information part and puncture columns
/*
memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
...
...
@@ -726,7 +726,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
AssertFatal
(
1
==
0
,
"Need AVX2 for now
\n
"
);
#endif
stop_meas
(
toutput
);
if
(
toutput
!=
NULL
)
stop_meas
(
toutput
);
return
0
;
}
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
View file @
054156c1
...
...
@@ -74,7 +74,10 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch,
int
frame
,
uint8_t
slot
,
NR_DL_FRAME_PARMS
*
frame_parms
,
nfapi_nr_config_request_t
*
config
)
{
nfapi_nr_config_request_t
*
config
,
time_stats_t
*
dlsch_encoding_stats
,
time_stats_t
*
dlsch_scrambling_stats
,
time_stats_t
*
dlsch_modulation_stats
)
{
NR_DL_gNB_HARQ_t
*
harq
=
dlsch
->
harq_processes
[
dci_alloc
->
harq_pid
];
nfapi_nr_dl_config_dlsch_pdu_rel15_t
*
rel15
=
&
harq
->
dlsch_pdu
.
dlsch_pdu_rel15
;
...
...
@@ -89,7 +92,9 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch,
/// CRC, coding, interleaving and rate matching
AssertFatal
(
harq
->
pdu
!=
NULL
,
"harq->pdu is null
\n
"
);
start_meas
(
dlsch_encoding_stats
);
nr_dlsch_encoding
(
harq
->
pdu
,
frame
,
slot
,
dlsch
,
frame_parms
);
stop_meas
(
dlsch_encoding_stats
);
#ifdef DEBUG_DLSCH
printf
(
"PDSCH encoding:
\n
Payload:
\n
"
);
for
(
int
i
=
0
;
i
<
harq
->
B
>>
7
;
i
++
)
{
...
...
@@ -107,6 +112,7 @@ printf("\n");
#endif
/// scrambling
start_meas
(
dlsch_scrambling_stats
);
for
(
int
q
=
0
;
q
<
rel15
->
nb_codewords
;
q
++
)
memset
((
void
*
)
scrambled_output
[
q
],
0
,
(
encoded_length
>>
5
)
*
sizeof
(
uint32_t
));
uint16_t
n_RNTI
=
(
pdcch_params
.
search_space_type
==
NFAPI_NR_SEARCH_SPACE_TYPE_UE_SPECIFIC
)
?
\
...
...
@@ -120,6 +126,7 @@ printf("\n");
Nid
,
n_RNTI
,
scrambled_output
[
q
]);
stop_meas
(
dlsch_scrambling_stats
);
#ifdef DEBUG_DLSCH
printf
(
"PDSCH scrambling:
\n
"
);
for
(
int
i
=
0
;
i
<
encoded_length
>>
8
;
i
++
)
{
...
...
@@ -130,12 +137,13 @@ for (int i=0; i<encoded_length>>8; i++) {
#endif
/// Modulation
start_meas
(
dlsch_modulation_stats
);
for
(
int
q
=
0
;
q
<
rel15
->
nb_codewords
;
q
++
)
nr_modulation
(
scrambled_output
[
q
],
encoded_length
,
Qm
,
mod_symbs
[
q
]);
stop_meas
(
dlsch_modulation_stats
);
#ifdef DEBUG_DLSCH
printf
(
"PDSCH Modulation: Qm %d(%d)
\n
"
,
Qm
,
nb_symbols
);
for
(
int
i
=
0
;
i
<
nb_symbols
>>
3
;
i
++
)
{
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
View file @
054156c1
...
...
@@ -74,7 +74,11 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch,
int
frame
,
uint8_t
slot
,
NR_DL_FRAME_PARMS
*
frame_parms
,
nfapi_nr_config_request_t
*
config
);
nfapi_nr_config_request_t
*
config
,
time_stats_t
*
dlsch_encoding_stats
,
time_stats_t
*
dlsch_scrambling_stats
,
time_stats_t
*
dlsch_modulation_stats
);
void
free_gNB_dlsch
(
NR_gNB_DLSCH_t
*
dlsch
);
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
View file @
054156c1
...
...
@@ -366,7 +366,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
//printf("segment Z %d k %d Kr %d BG %d\n", *pz,dlsch->harq_processes[harq_pid]->K,Kr,BG);
//start_meas(te_stats);
for
(
r
=
0
;
r
<
dlsch
->
harq_processes
[
harq_pid
]
->
C
;
r
++
)
{
//d_tmp[r] = &dlsch->harq_processes[harq_pid]->d[r][0];
//channel_input[r] = &dlsch->harq_processes[harq_pid]->d[r][0];
...
...
@@ -398,7 +397,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
//ldpc_encoder_optim_8seg(dlsch->harq_processes[harq_pid]->c,d_tmp,Kr,BG,dlsch->harq_processes[harq_pid]->C,NULL,NULL,NULL,NULL);
ldpc_encoder_optim_8seg
(
dlsch
->
harq_processes
[
harq_pid
]
->
c
,
dlsch
->
harq_processes
[
harq_pid
]
->
d
,
Kr
,
BG
,
dlsch
->
harq_processes
[
harq_pid
]
->
C
,
NULL
,
NULL
,
NULL
,
NULL
);
//stop_meas(te_stats);
//printf("end ldpc encoder -- output\n");
#ifdef DEBUG_DLSCH_CODING
...
...
@@ -425,7 +423,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
mod_order
,
nb_rb
);
#endif
//start_meas(rm_stats);
#ifdef DEBUG_DLSCH_CODING
printf
(
"rvidx in encoding = %d
\n
"
,
rel15
.
redundancy_version
);
#endif
...
...
@@ -447,14 +444,11 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
for
(
int
i
=
0
;
i
<
16
;
i
++
)
printf
(
"output ratematching e[%d]= %d r_offset %d
\n
"
,
i
,
dlsch
->
harq_processes
[
harq_pid
]
->
e
[
i
+
r_offset
],
r_offset
);
#endif
//stop_meas(rm_stats);
//start_meas(i_stats);
nr_interleaving_ldpc
(
E
,
mod_order
,
dlsch
->
harq_processes
[
harq_pid
]
->
e
+
r_offset
,
dlsch
->
harq_processes
[
harq_pid
]
->
f
+
r_offset
);
//stop_meas(i_stats);
#ifdef DEBUG_DLSCH_CODING
...
...
openair1/PHY/defs_gNB.h
View file @
054156c1
...
...
@@ -465,6 +465,8 @@ typedef struct gNB_L1_proc_t_s {
pthread_t
pthread_single
;
/// pthread structure for asychronous RX/TX processing thread
pthread_t
pthread_asynch_rxtx
;
/// pthread structure for printing time meas
pthread_t
L1_stats_thread
;
/// flag to indicate first RX acquisition
int
first_rx
;
/// flag to indicate first TX transmission
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
054156c1
...
...
@@ -197,7 +197,11 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
&
gNB
->
pdcch_vars
.
dci_alloc
[
0
],
gNB
->
nr_gold_pdsch_dmrs
[
slot
],
gNB
->
common_vars
.
txdataF
,
AMP
,
frame
,
slot
,
fp
,
cfg
);
AMP
,
frame
,
slot
,
fp
,
cfg
,
&
gNB
->
dlsch_encoding_stats
,
&
gNB
->
dlsch_scrambling_stats
,
&
gNB
->
dlsch_modulation_stats
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH
,
0
);
}
}
...
...
openair2/GNB_APP/gnb_config.c
View file @
054156c1
...
...
@@ -802,8 +802,9 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
NRRRC_CONFIGURATION_REQ
(
msg_p
).
N_RB_DL
[
j
]
=
N_RB_DL
;
if
(
N_RB_DL
==
217
)
sf_ahead
=
2
;
else
if
(
N_RB_DL
==
106
)
sf_ahead
=
4
;
else
AssertFatal
(
0
,
"Failed to parse gNB configuration file %s, gnb %d unknown value
\"
%d
\"
for N_RB_DL choice: 106, 217 !
\n
"
,
RC
.
config_file_name
,
i
,
N_RB_DL
);
else
sf_ahead
=
4
;
/*else AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for N_RB_DL choice: 106, 217 !\n",
RC.config_file_name, i, N_RB_DL);*/
/*
if ((N_RB_DL!=6) && (N_RB_DL!=15) && (N_RB_DL!=25) && (N_RB_DL!=50) && (N_RB_DL!=75) && (N_RB_DL!=100)) {
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
054156c1
...
...
@@ -1153,6 +1153,22 @@ extern "C" {
LOG_I
(
PHY
,
"%s() sample_rate:%u
\n
"
,
__FUNCTION__
,
(
int
)
openair0_cfg
[
0
].
sample_rate
);
switch
((
int
)
openair0_cfg
[
0
].
sample_rate
)
{
case
153600000
:
// from usrp_time_offset
//openair0_cfg[0].samples_per_packet = 2048;
openair0_cfg
[
0
].
tx_sample_advance
=
15
;
//to be checked
openair0_cfg
[
0
].
tx_bw
=
100e6
;
openair0_cfg
[
0
].
rx_bw
=
100e6
;
break
;
case
115200000
:
// from usrp_time_offset
//openair0_cfg[0].samples_per_packet = 2048;
openair0_cfg
[
0
].
tx_sample_advance
=
15
;
//to be checked
openair0_cfg
[
0
].
tx_bw
=
100e6
;
openair0_cfg
[
0
].
rx_bw
=
100e6
;
break
;
case
122880000
:
// from usrp_time_offset
//openair0_cfg[0].samples_per_packet = 2048;
...
...
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