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
ZhouShuya
OpenXG-RAN
Commits
4677c0ab
Commit
4677c0ab
authored
May 08, 2019
by
Ahmed Hussein
Committed by
Thomas Schlichter
Jun 04, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixing ulschsim and applying minor change to ulsim
- Problem was related to UE_id and G
parent
b1c65387
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
54 additions
and
31 deletions
+54
-31
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
+2
-0
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+16
-11
openair1/PHY/defs_nr_common.h
openair1/PHY/defs_nr_common.h
+1
-1
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+9
-4
openair1/SIMULATION/NR_PHY/ulschsim.c
openair1/SIMULATION/NR_PHY/ulschsim.c
+18
-10
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+8
-5
No files found.
nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
View file @
4677c0ab
...
...
@@ -730,6 +730,8 @@ typedef struct {
uint8_t
frame_offset
;
uint16_t
number_symbols
;
uint16_t
start_symbol
;
uint8_t
nb_re_dmrs
;
uint8_t
length_dmrs
;
nr_pusch_freq_hopping_t
pusch_freq_hopping
;
uint8_t
mcs
;
uint8_t
Qm
;
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
View file @
4677c0ab
...
...
@@ -284,7 +284,6 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
uint32_t
A
,
E
;
uint32_t
G
;
uint32_t
ret
,
offset
;
uint32_t
nb_rb
;
int32_t
no_iteration_ldpc
,
length_dec
;
uint32_t
r
,
r_offset
=
0
,
Kr
=
8424
,
Kr_bytes
,
K_bytes_F
,
err_flag
=
0
;
uint8_t
crc_type
;
...
...
@@ -306,9 +305,17 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
uint8_t
kc
;
uint8_t
Ilbrm
=
0
;
uint32_t
Tbslbrm
=
950984
;
uint8_t
nb_re_dmrs
=
6
;
uint16_t
length_dmrs
=
1
;
double
Coderate
=
0
.
0
;
// ------------------------------------------------------------------
uint16_t
nb_rb
=
nfapi_ulsch_pdu_rel15
->
number_rbs
;
uint16_t
number_symbols
=
nfapi_ulsch_pdu_rel15
->
number_symbols
;
uint8_t
Qm
=
nfapi_ulsch_pdu_rel15
->
Qm
;
uint8_t
mcs
=
nfapi_ulsch_pdu_rel15
->
mcs
;
uint8_t
n_layers
=
nfapi_ulsch_pdu_rel15
->
n_layers
;
uint8_t
nb_re_dmrs
=
nfapi_ulsch_pdu_rel15
->
nb_re_dmrs
;
uint8_t
length_dmrs
=
nfapi_ulsch_pdu_rel15
->
length_dmrs
;
// ------------------------------------------------------------------
uint32_t
i
,
j
;
...
...
@@ -331,19 +338,18 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
return
(
ulsch
->
max_ldpc_iterations
);
}
nb_rb
=
nfapi_ulsch_pdu_rel15
->
number_rbs
;
// harq_process->trials[nfapi_ulsch_pdu_rel15->round]++;
harq_process
->
TBS
=
nr_compute_tbs
(
nfapi_ulsch_pdu_rel15
->
mcs
,
nb_rb
,
nb_symb_sch
,
nb_re_dmrs
,
length_dmrs
,
nfapi_ulsch_pdu_rel15
->
n_layers
);
harq_process
->
TBS
=
nr_compute_tbs
(
mcs
,
nb_rb
,
number_symbols
,
nb_re_dmrs
,
length_dmrs
,
n_layers
);
A
=
harq_process
->
TBS
;
ret
=
ulsch
->
max_ldpc_iterations
;
G
=
nr_get_G
(
nb_rb
,
number_symbols
,
nb_re_dmrs
,
length_dmrs
,
Qm
,
n_layers
);
// harq_process->G = nr_get_G(nb_rb, nb_symb_sch, nb_re_dmrs, length_dmrs, nfapi_ulsch_pdu_rel15->Qm,nfapi_ulsch_pdu_rel15->n_layers);
G
=
harq_process
->
G
;
// G = nr_get_G(nb_rb, nb_symb_sch, nb_re_dmrs, length_dmrs, nfapi_ulsch_pdu_rel15->Qm, nfapi_ulsch_pdu_rel15->n_layers);
LOG_I
(
PHY
,
"ULSCH Decoding, harq_pid %d TBS %d G %d mcs %d Nl %d nb_symb_sch %d nb_rb %d
\n
"
,
harq_pid
,
A
,
G
,
nfapi_ulsch_pdu_rel15
->
mcs
,
nfapi_ulsch_pdu_rel15
->
n_layers
,
nb_symb_sch
,
nb_rb
);
LOG_I
(
PHY
,
"ULSCH Decoding, harq_pid %d TBS %d G %d mcs %d Nl %d nb_symb_sch %d nb_rb %d
\n
"
,
harq_pid
,
A
,
G
,
mcs
,
n_layers
,
nb_symb_sch
,
nb_rb
);
if
(
harq_process
->
round
==
0
)
{
...
...
@@ -441,7 +447,6 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
Tbslbrm
=
nr_compute_tbs
(
28
,
nb_rb
,
frame_parms
->
symbols_per_slot
,
0
,
0
,
nfapi_ulsch_pdu_rel15
->
n_layers
);
for
(
r
=
0
;
r
<
harq_process
->
C
;
r
++
)
{
E
=
nr_get_E
(
G
,
harq_process
->
C
,
nfapi_ulsch_pdu_rel15
->
Qm
,
nfapi_ulsch_pdu_rel15
->
n_layers
,
r
);
#if gNB_TIMING_TRACE
...
...
openair1/PHY/defs_nr_common.h
View file @
4677c0ab
...
...
@@ -44,7 +44,7 @@
// [hna] This enables SC-FDMA transmission in Uplink. If disabled, then OFDMA is used in UPLINK.
#ifndef NR_SC_FDMA
#define NR_SC_FDMA
//
#define NR_SC_FDMA
#endif
#define MAX_NUM_SUBCARRIER_SPACING 5
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
4677c0ab
...
...
@@ -207,15 +207,20 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
void
nr_ulsch_procedures
(
PHY_VARS_gNB
*
gNB
,
gNB_L1_rxtx_proc_t
*
proc
,
int
UE_id
,
uint8_t
harq_pid
)
{
NR_DL_FRAME_PARMS
*
frame_parms
=
&
gNB
->
frame_parms
;
nfapi_nr_ul_config_ulsch_pdu
*
rel15_ul
=
&
gNB
->
ulsch
[
UE_id
+
1
][
0
]
->
harq_processes
[
harq_pid
]
->
ulsch_pdu
;
nfapi_nr_ul_config_ulsch_pdu
*
rel15_ul
=
&
gNB
->
ulsch
[
UE_id
+
1
][
0
]
->
harq_processes
[
harq_pid
]
->
ulsch_pdu
;
nfapi_nr_ul_config_ulsch_pdu_rel15_t
*
nfapi_ulsch_pdu_rel15
=
&
rel15_ul
->
ulsch_pdu_rel15
;
uint8_t
ret
;
int
Nid_cell
=
0
;
// shouldn't be a local variable
uint32_t
G
;
int
Nid_cell
=
0
;
// [hna] shouldn't be a local variable (should be signaled)
G
=
nr_get_G
(
nfapi_ulsch_pdu_rel15
->
number_rbs
,
nfapi_ulsch_pdu_rel15
->
number_symbols
,
nfapi_ulsch_pdu_rel15
->
nb_re_dmrs
,
nfapi_ulsch_pdu_rel15
->
length_dmrs
,
nfapi_ulsch_pdu_rel15
->
Qm
,
nfapi_ulsch_pdu_rel15
->
n_layers
);
//----------------------------------------------------------
//------------------- ULSCH unscrambling -------------------
//----------------------------------------------------------
nr_ulsch_unscrambling
(
gNB
->
pusch_vars
[
UE_id
]
->
llr
,
gNB
->
ulsch
[
UE_id
+
1
][
0
]
->
harq_processes
[
harq_pid
]
->
G
,
0
,
Nid_cell
,
rel15_ul
->
rnti
);
nr_ulsch_unscrambling
(
gNB
->
pusch_vars
[
UE_id
]
->
llr
,
G
,
0
,
Nid_cell
,
rel15_ul
->
rnti
);
//----------------------------------------------------------
...
...
@@ -223,7 +228,7 @@ void nr_ulsch_procedures(PHY_VARS_gNB *gNB, gNB_L1_rxtx_proc_t *proc, int UE_id,
//----------------------------------------------------------
ret
=
nr_ulsch_decoding
(
gNB
,
UE_id
,
gNB
->
pusch_vars
[
UE_id
]
->
llr
,
frame_parms
,
proc
->
frame_rx
,
rel15_ul
->
ulsch_pdu_rel15
.
number_symbols
,
proc
->
slot_rx
,
harq_pid
,
0
);
nfapi_ulsch_pdu_rel15
->
number_symbols
,
proc
->
slot_rx
,
harq_pid
,
0
);
// if (ret > ulsch_gNB->max_ldpc_iterations)
// n_errors++;
...
...
openair1/SIMULATION/NR_PHY/ulschsim.c
View file @
4677c0ab
...
...
@@ -143,7 +143,6 @@ int main(int argc, char **argv) {
unsigned
char
qbits
=
8
;
int
ret
;
int
loglvl
=
OAILOG_WARNING
;
float
target_error_rate
=
0
.
01
;
uint64_t
SSB_positions
=
0x01
;
uint16_t
nb_symb_sch
=
12
;
uint16_t
nb_rb
=
50
;
...
...
@@ -396,19 +395,19 @@ int main(int argc, char **argv) {
}
unsigned
char
harq_pid
=
0
;
uint8_t
is_crnti
=
0
,
llr8_flag
=
0
;
uint8_t
is_crnti
=
0
;
unsigned
int
TBS
=
8424
;
unsigned
int
available_bits
;
uint8_t
nb_re_dmrs
=
6
;
uint
16
_t
length_dmrs
=
1
;
uint
8
_t
length_dmrs
=
1
;
uint8_t
N_PRB_oh
;
uint16_t
N_RE_prime
;
unsigned
char
mod_order
;
uint8_t
Nl
=
1
;
uint8_t
rvidx
=
0
;
uint8_t
UE_id
=
1
;
uint8_t
UE_id
=
0
;
NR_gNB_ULSCH_t
*
ulsch_gNB
=
gNB
->
ulsch
[
UE_id
][
0
];
NR_gNB_ULSCH_t
*
ulsch_gNB
=
gNB
->
ulsch
[
UE_id
+
1
][
0
];
nfapi_nr_ul_config_ulsch_pdu_rel15_t
*
rel15_ul
=
&
ulsch_gNB
->
harq_processes
[
harq_pid
]
->
ulsch_pdu
.
ulsch_pdu_rel15
;
NR_UE_ULSCH_t
*
ulsch_ue
=
UE
->
ulsch
[
0
][
0
][
0
];
...
...
@@ -416,6 +415,7 @@ int main(int argc, char **argv) {
mod_order
=
nr_get_Qm
(
Imcs
,
1
);
available_bits
=
nr_get_G
(
nb_rb
,
nb_symb_sch
,
nb_re_dmrs
,
length_dmrs
,
mod_order
,
1
);
TBS
=
nr_compute_tbs
(
Imcs
,
nb_rb
,
nb_symb_sch
,
nb_re_dmrs
,
length_dmrs
,
Nl
);
printf
(
"
\n
"
);
printf
(
"available bits %d TBS %d mod_order %d
\n
"
,
available_bits
,
TBS
,
mod_order
);
/////////// setting rel15_ul parameters ///////////
...
...
@@ -425,6 +425,8 @@ int main(int argc, char **argv) {
rel15_ul
->
mcs
=
Imcs
;
rel15_ul
->
rv
=
rvidx
;
rel15_ul
->
n_layers
=
Nl
;
rel15_ul
->
nb_re_dmrs
=
nb_re_dmrs
;
rel15_ul
->
length_dmrs
=
length_dmrs
;
///////////////////////////////////////////////////
double
*
modulated_input
=
malloc16
(
sizeof
(
double
)
*
16
*
68
*
384
);
// [hna] 16 segments, 68*Zc
...
...
@@ -485,6 +487,8 @@ int main(int argc, char **argv) {
if
(
input_fd
==
NULL
)
{
nr_ulsch_encoding
(
ulsch_ue
,
frame_parms
,
harq_pid
);
}
printf
(
"
\n
"
);
///////////
////////////////////////////////////////////////////////////////////
...
...
@@ -518,7 +522,7 @@ int main(int argc, char **argv) {
SNR_lin
=
pow
(
10
,
SNR
/
10
.
0
);
sigma
=
1
.
0
/
sqrt
(
2
*
SNR_lin
);
#if
1
#if
0
channel_output_fixed[i] = (short) quantize(sigma / 4.0 / 4.0,
modulated_input[i] + sigma * gaussdouble(0.0, 1.0),
qbits);
...
...
@@ -539,7 +543,7 @@ int main(int argc, char **argv) {
}
printf
(
"errors bits uncoded %u
\n
"
,
errors_bit_uncoded
);
printf
(
"
\n
"
);
#ifdef DEBUG_CODER
printf
(
"
\n
"
);
exit
(
-
1
);
...
...
@@ -568,6 +572,7 @@ int main(int argc, char **argv) {
if
(
n_trials
==
1
)
printf
(
"errors_bit %d (trial %d)
\n
"
,
errors_bit
,
trial
);
}
printf
(
"
\n
"
);
}
printf
(
"*****************************************
\n
"
);
...
...
@@ -575,11 +580,14 @@ int main(int argc, char **argv) {
(
float
)
n_errors
/
(
float
)
n_trials
,
(
float
)
n_false_positive
/
(
float
)
n_trials
);
printf
(
"*****************************************
\n
"
);
printf
(
"
\n
"
);
if
(
(
float
)
n_errors
/
(
float
)
n_trials
<
target_error_rate
)
{
if
(
errors_bit
==
0
)
{
printf
(
"PUSCH test OK
\n
"
);
printf
(
"
\n
"
);
break
;
}
printf
(
"
\n
"
);
}
for
(
i
=
0
;
i
<
2
;
i
++
)
{
...
...
@@ -592,9 +600,9 @@ int main(int argc, char **argv) {
free_gNB_ulsch
(
gNB
->
ulsch
[
0
][
i
]);
printf
(
"gNB ulsch[%d][%d]
\n
"
,
UE_id
,
i
);
printf
(
"gNB ulsch[%d][%d]
\n
"
,
UE_id
+
1
,
i
);
free_gNB_ulsch
(
gNB
->
ulsch
[
UE_id
][
i
]);
free_gNB_ulsch
(
gNB
->
ulsch
[
UE_id
+
1
][
i
]);
for
(
sf
=
0
;
sf
<
2
;
sf
++
)
{
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
4677c0ab
...
...
@@ -447,7 +447,7 @@ int main(int argc, char **argv) {
unsigned
int
TBS
=
8424
;
unsigned
int
available_bits
;
uint8_t
nb_re_dmrs
=
UE
->
dmrs_UplinkConfig
.
pusch_maxLength
*
(
UE
->
dmrs_UplinkConfig
.
pusch_dmrs_type
==
pusch_dmrs_type1
)
?
6
:
4
;
uint
16
_t
length_dmrs
=
1
;
uint
8
_t
length_dmrs
=
1
;
unsigned
char
mod_order
;
mod_order
=
nr_get_Qm
(
Imcs
,
1
);
...
...
@@ -455,7 +455,6 @@ int main(int argc, char **argv) {
TBS
=
nr_compute_tbs
(
Imcs
,
nb_rb
,
nb_symb_sch
,
nb_re_dmrs
,
length_dmrs
,
ul_dci_pdu
->
precod_nbr_layers
);
NR_gNB_ULSCH_t
*
ulsch_gNB
=
gNB
->
ulsch
[
UE_id
+
1
][
0
];
ulsch_gNB
->
harq_processes
[
harq_pid
]
->
G
=
available_bits
;
// [hna] temp until length_dmrs and nb_re_dmrs are signaled
nfapi_nr_ul_config_ulsch_pdu
*
rel15_ul
=
&
ulsch_gNB
->
harq_processes
[
harq_pid
]
->
ulsch_pdu
;
NR_UE_ULSCH_t
**
ulsch_ue
=
UE
->
ulsch
[
0
][
0
];
...
...
@@ -466,6 +465,8 @@ int main(int argc, char **argv) {
rel15_ul
->
ulsch_pdu_rel15
.
number_rbs
=
nb_rb
;
rel15_ul
->
ulsch_pdu_rel15
.
start_symbol
=
start_symbol
;
rel15_ul
->
ulsch_pdu_rel15
.
number_symbols
=
nb_symb_sch
;
rel15_ul
->
ulsch_pdu_rel15
.
nb_re_dmrs
=
nb_re_dmrs
;
rel15_ul
->
ulsch_pdu_rel15
.
length_dmrs
=
length_dmrs
;
rel15_ul
->
ulsch_pdu_rel15
.
Qm
=
mod_order
;
rel15_ul
->
ulsch_pdu_rel15
.
mcs
=
Imcs
;
rel15_ul
->
ulsch_pdu_rel15
.
rv
=
0
;
...
...
@@ -535,8 +536,10 @@ int main(int argc, char **argv) {
if
(((
ulsch_ue
[
0
]
->
g
[
i
]
==
0
)
&&
(
gNB
->
pusch_vars
[
UE_id
]
->
llr
[
i
]
<=
0
))
||
((
ulsch_ue
[
0
]
->
g
[
i
]
==
1
)
&&
(
gNB
->
pusch_vars
[
UE_id
]
->
llr
[
i
]
>=
0
)))
{
if
(
errors_scrambling
==
0
)
if
(
errors_scrambling
==
0
)
{
printf
(
"
\n
"
);
printf
(
"First bit in error in unscrambling = %d
\n
"
,
i
);
}
errors_scrambling
++
;
}
...
...
@@ -559,13 +562,13 @@ int main(int argc, char **argv) {
if
(
errors_scrambling
>
0
)
{
if
(
n_trials
==
1
)
printf
(
"errors_scrambling %d (trial %d)
\n
"
,
errors_scrambling
,
trial
);
printf
(
"errors_scrambling
=
%d (trial %d)
\n
"
,
errors_scrambling
,
trial
);
}
if
(
errors_bit
>
0
)
{
n_false_positive
++
;
if
(
n_trials
==
1
)
printf
(
"errors_bit %d (trial %d)
\n
"
,
errors_bit
,
trial
);
printf
(
"errors_bit
=
%d (trial %d)
\n
"
,
errors_bit
,
trial
);
}
printf
(
"
\n
"
);
}
// [hna] for (trial = 0; trial < n_trials; trial++)
...
...
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