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
e4d8dd1e
Commit
e4d8dd1e
authored
Feb 05, 2020
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ulsim working again. added error count and adapted test_case_list
parent
16d8248c
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
65 additions
and
73 deletions
+65
-73
cmake_targets/autotests/test_case_list.xml
cmake_targets/autotests/test_case_list.xml
+5
-5
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+19
-20
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+2
-2
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+39
-46
No files found.
cmake_targets/autotests/test_case_list.xml
View file @
e4d8dd1e
...
...
@@ -1253,11 +1253,11 @@
<pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
</pre_exec>
<pre_exec_args></pre_exec_args>
<main_exec>
$OPENAIR_DIR/targets/bin/nr_ulsim.Rel15
</main_exec>
<main_exec_args>
-
f100 -m9 -r106 -s10
-
f100 -m16 -s20
-
f100 -m28 -s30
-
f100 -m9 -R217 -r217 -s10
-
f100 -m9 -R273 -r273 -s10
</main_exec_args>
<main_exec_args>
-
n100 -m9 -r106 -s0 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
-
n100 -m16 -s10 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
-
n100 -m28 -s20 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
-
n100 -m9 -R217 -r217 -s0 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
-
n100 -m9 -R273 -r273 -s0 -f $OPENAIR_DIR/ci-scripts/rrc-files/reconfig.raw
</main_exec_args>
<tags>
nr_ulsim.test1 nr_ulsim.test2 nr_ulsim.test3 nr_ulsim.test4 nr_ulsim.test5
</tags>
<search_expr_true>
PUSCH test OK
</search_expr_true>
<search_expr_false>
segmentation fault|assertion|exiting|fatal
</search_expr_false>
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
View file @
e4d8dd1e
...
...
@@ -684,7 +684,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
}
harq_process
->
handled
=
1
;
ret
urn
(
ulsch
->
max_ldpc_iterations
+
1
)
;
ret
=
ulsch
->
max_ldpc_iterations
+
1
;
}
else
{
...
...
@@ -705,29 +705,28 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
{
LOG_D
(
PHY
,
"[gNB %d] ULSCH: Setting ACK for nr_tti_rx %d (pid %d, round %d, TBS %d)
\n
"
,
phy_vars_gNB
->
Mod_id
,
nr_tti_rx
,
harq_pid
,
harq_process
->
round
,
harq_process
->
TBS
);
}
}
// Reassembly of Transport block here
offset
=
0
;
Kr
=
harq_process
->
K
;
Kr_bytes
=
Kr
>>
3
;
for
(
r
=
0
;
r
<
harq_process
->
C
;
r
++
)
{
memcpy
(
harq_process
->
b
+
offset
,
harq_process
->
c
[
r
],
Kr_bytes
-
-
(
harq_process
->
F
>>
3
)
-
((
harq_process
->
C
>
1
)
?
3
:
0
));
offset
+=
(
Kr_bytes
-
(
harq_process
->
F
>>
3
)
-
((
harq_process
->
C
>
1
)
?
3
:
0
));
// Reassembly of Transport block here
offset
=
0
;
Kr
=
harq_process
->
K
;
Kr_bytes
=
Kr
>>
3
;
for
(
r
=
0
;
r
<
harq_process
->
C
;
r
++
)
{
memcpy
(
harq_process
->
b
+
offset
,
harq_process
->
c
[
r
],
Kr_bytes
-
-
(
harq_process
->
F
>>
3
)
-
((
harq_process
->
C
>
1
)
?
3
:
0
));
offset
+=
(
Kr_bytes
-
(
harq_process
->
F
>>
3
)
-
((
harq_process
->
C
>
1
)
?
3
:
0
));
#ifdef DEBUG_ULSCH_DECODING
printf
(
"Segment %u : Kr = %u bytes
\n
"
,
r
,
Kr_bytes
);
printf
(
"copied %d bytes to b sequence (harq_pid %d)
\n
"
,
(
Kr_bytes
-
(
harq_process
->
F
>>
3
)
-
((
harq_process
->
C
>
1
)
?
3
:
0
)),
harq_pid
);
printf
(
"b[0] = %x, c[%d] = %x
\n
"
,
harq_process
->
b
[
offset
],
harq_process
->
F
>>
3
,
harq_process
->
c
[
r
]);
printf
(
"Segment %u : Kr = %u bytes
\n
"
,
r
,
Kr_bytes
);
printf
(
"copied %d bytes to b sequence (harq_pid %d)
\n
"
,
(
Kr_bytes
-
(
harq_process
->
F
>>
3
)
-
((
harq_process
->
C
>
1
)
?
3
:
0
)),
harq_pid
);
printf
(
"b[0] = %x, c[%d] = %x
\n
"
,
harq_process
->
b
[
offset
],
harq_process
->
F
>>
3
,
harq_process
->
c
[
r
]);
#endif
}
}
ulsch
->
last_iteration_cnt
=
ret
;
return
(
ret
);
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
e4d8dd1e
...
...
@@ -279,9 +279,9 @@ void nr_ulsch_procedures(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, int ULSCH
0
);
if
(
ret
>
gNB
->
ulsch
[
ULSCH_id
][
0
]
->
max_ldpc_iterations
)
LOG_I
(
PHY
,
"ULSCH
in error
\n
"
);
LOG_I
(
PHY
,
"ULSCH
%d in error
\n
"
,
ULSCH_id
);
else
LOG_I
(
PHY
,
"ULSCH
received ok
\n
"
);
LOG_I
(
PHY
,
"ULSCH
%d received ok
\n
"
,
ULSCH_id
);
}
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
e4d8dd1e
...
...
@@ -131,9 +131,9 @@ int main(int argc, char **argv)
int
i
,
sf
;
double
SNR
,
snr0
=
-
2
.
0
,
snr1
=
2
.
0
;
double
sigma
,
sigma_dB
;
double
snr_step
=
0
.
1
;
double
snr_step
=
1
;
uint8_t
snr1set
=
0
;
int
slot
=
0
;
int
slot
=
0
,
frame
=
0
;
FILE
*
output_fd
=
NULL
;
//uint8_t write_output_file = 0;
int
trial
,
n_trials
=
1
,
n_errors
=
0
,
n_false_positive
=
0
,
delay
=
0
;
...
...
@@ -147,13 +147,12 @@ int main(int argc, char **argv)
SCM_t
channel_model
=
AWGN
;
//Rayleigh1_anticorr;
uint16_t
N_RB_DL
=
106
,
N_RB_UL
=
106
,
mu
=
1
;
//unsigned char frame_type = 0;
int
number_of_frames
=
1
;
int
frame_length_complex_samples
,
frame_length_complex_samples_no_prefix
;
NR_DL_FRAME_PARMS
*
frame_parms
;
int
loglvl
=
OAILOG_WARNING
;
uint64_t
SSB_positions
=
0x01
;
uint16_t
nb_symb_sch
=
12
;
int
start_symbol
=
2
;
int
start_symbol
=
0
;
uint16_t
nb_rb
=
50
;
uint8_t
Imcs
=
9
;
uint8_t
precod_nbr_layers
=
1
;
...
...
@@ -164,7 +163,8 @@ int main(int argc, char **argv)
int32_t
txlev
;
int
start_rb
=
0
;
int
UE_id
=
0
;
// [hna] only works for UE_id = 0 because NUMBER_OF_NR_UE_MAX is set to 1 (phy_init_nr_gNB causes segmentation fault)
float
target_error_rate
=
0
.
01
;
cpuf
=
get_cpu_freq_GHz
();
...
...
@@ -179,7 +179,7 @@ int main(int argc, char **argv)
//logInit();
randominit
(
0
);
while
((
c
=
getopt
(
argc
,
argv
,
"d:f:g:h:i:j:l:m:n:p:r:s:y:z:F:
G:
M:N:P:R:S:L:"
))
!=
-
1
)
{
while
((
c
=
getopt
(
argc
,
argv
,
"d:f:g:h:i:j:l:m:n:p:r:s:y:z:F:M:N:P:R:S:L:"
))
!=
-
1
)
{
switch
(
c
)
{
/*case 'd':
...
...
@@ -191,10 +191,6 @@ int main(int argc, char **argv)
break
;
case
'f'
:
number_of_frames
=
atoi
(
optarg
);
break
;
case
'G'
:
scg_fd
=
fopen
(
optarg
,
"r"
);
if
(
scg_fd
==
NULL
)
{
...
...
@@ -505,7 +501,6 @@ int main(int argc, char **argv)
printf("Can't get ue ulsch structures\n");
exit(-1);
}
}
}
*/
...
...
@@ -543,7 +538,6 @@ int main(int argc, char **argv)
unsigned
char
*
test_input_bit
;
uint32_t
errors_decoding
=
0
;
uint32_t
errors_scrambling
=
0
;
uint32_t
is_frame_in_error
=
0
;
test_input_bit
=
(
unsigned
char
*
)
malloc16
(
sizeof
(
unsigned
char
)
*
16
*
68
*
384
);
estimated_output_bit
=
(
unsigned
char
*
)
malloc16
(
sizeof
(
unsigned
char
)
*
16
*
68
*
384
);
...
...
@@ -581,13 +575,6 @@ int main(int argc, char **argv)
for
(
SNR
=
snr0
;
SNR
<
snr1
;
SNR
+=
snr_step
)
{
printf
(
"-------------------
\n
"
);
printf
(
"SNR %f
\n
"
,
SNR
);
printf
(
"-------------------
\n
"
);
is_frame_in_error
=
0
;
for
(
int
frame
=
0
;
frame
<
number_of_frames
;
frame
++
)
{
UE_proc
.
nr_tti_tx
=
slot
;
UE_proc
.
frame_tx
=
frame
;
...
...
@@ -677,7 +664,7 @@ int main(int argc, char **argv)
phy_procedures_nrUE_TX
(
UE
,
&
UE_proc
,
gNB_id
,
0
);
if
(
n
umber_of_frame
s
==
1
)
if
(
n
_trial
s
==
1
)
LOG_M
(
"txsig0.m"
,
"txs0"
,
UE
->
common_vars
.
txdata
[
0
],
frame_length_complex_samples
,
1
,
1
);
///////////
...
...
@@ -717,12 +704,16 @@ int main(int argc, char **argv)
//----------------------------------------------------------
phy_procedures_gNB_common_RX
(
gNB
,
frame
,
slot
);
if
(
n
umber_of_frame
s
==
1
)
if
(
n
_trial
s
==
1
)
LOG_M
(
"rxsigF0.m"
,
"rxsF0"
,
gNB
->
common_vars
.
rxdataF
[
0
],
frame_length_complex_samples_no_prefix
,
1
,
1
);
phy_procedures_gNB_uespec_RX
(
gNB
,
frame
,
slot
);
////////////////////////////////////////////////////////////
if
(
gNB
->
ulsch
[
0
][
0
]
->
last_iteration_cnt
>=
gNB
->
ulsch
[
0
][
0
]
->
max_ldpc_iterations
+
1
)
n_errors
++
;
//----------------------------------------------------------
//----------------- count and print errors -----------------
//----------------------------------------------------------
...
...
@@ -732,14 +723,15 @@ 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
)
printf
(
"
\x1B
[34m"
"[frame %d][trial %d]
\t
1st bit in error in unscrambling = %d
\n
"
"
\x1B
[0m"
,
frame
,
trial
,
i
);
/*
if(errors_scrambling == 0)
printf("\x1B[34m" "[frame %d][trial %d]\t1st bit in error in unscrambling = %d\n" "\x1B[0m", frame, trial, i);
*/
errors_scrambling
++
;
}
}
if
(
errors_scrambling
>
0
)
{
printf
(
"
\x1B
[31m""[frame %d][trial %d]
\t
number of errors in unscrambling = %d
\n
"
"
\x1B
[0m"
,
frame
,
trial
,
errors_scrambling
);
if
(
n_trials
==
1
)
printf
(
"
\x1B
[31m""[frame %d][trial %d]
\t
number of errors in unscrambling = %d
\n
"
"
\x1B
[0m"
,
frame
,
trial
,
errors_scrambling
);
}
for
(
i
=
0
;
i
<
TBS
;
i
++
)
{
...
...
@@ -748,38 +740,39 @@ int main(int argc, char **argv)
test_input_bit
[
i
]
=
(
ulsch_ue
[
0
]
->
harq_processes
[
harq_pid
]
->
b
[
i
/
8
]
&
(
1
<<
(
i
&
7
)))
>>
(
i
&
7
);
if
(
estimated_output_bit
[
i
]
!=
test_input_bit
[
i
])
{
if
(
errors_decoding
==
0
)
printf
(
"
\x1B
[34m""[frame %d][trial %d]
\t
1st bit in error in decoding = %d
\n
"
"
\x1B
[0m"
,
frame
,
trial
,
i
);
/*
if(errors_decoding == 0)
printf("\x1B[34m""[frame %d][trial %d]\t1st bit in error in decoding = %d\n" "\x1B[0m", frame, trial, i);
*/
errors_decoding
++
;
}
}
if
(
errors_decoding
>
0
)
{
is_frame_in_error
=
1
;
n_false_positive
++
;
printf
(
"
\x1B
[31m""[frame %d][trial %d]
\t
number of errors in decoding = %d
\n
"
"
\x1B
[0m"
,
frame
,
trial
,
errors_decoding
);
}
else
{
is_frame_in_error
=
0
;
break
;
}
////////////////////////////////////////////////////////////
}
// trial loop
if
(
n_trials
==
1
)
printf
(
"
\x1B
[31m""[frame %d][trial %d]
\t
number of errors in decoding = %d
\n
"
"
\x1B
[0m"
,
frame
,
trial
,
errors_decoding
);
}
if
(
is_frame_in_error
==
1
)
break
;
}
// frame loop
}
// trial loop
if
(
is_frame_in_error
==
1
)
break
;
printf
(
"*****************************************
\n
"
);
printf
(
"SNR %f: n_errors (negative CRC) = %d/%d, false_positive %d/%d, errors_scrambling %d/%d
\n
"
,
SNR
,
n_errors
,
n_trials
,
n_false_positive
,
n_trials
,
errors_scrambling
,
n_trials
);
printf
(
"
\n
"
);
printf
(
"SNR %f: Channel BLER %e, Channel BER %e
\n
"
,
SNR
,(
double
)
n_errors
/
n_trials
,(
double
)
errors_scrambling
/
available_bits
/
n_trials
);
printf
(
"*****************************************
\n
"
);
printf
(
"
\n
"
);
if
(
n_trials
==
1
)
break
;
if
((
float
)
n_errors
/
(
float
)
n_trials
<=
target_error_rate
)
{
printf
(
"*************
\n
"
);
printf
(
"PUSCH test OK
\n
"
);
printf
(
"*************
\n
"
);
break
;
}
}
// SNR loop
if
(
is_frame_in_error
==
0
)
{
printf
(
"
\n
"
);
printf
(
"*************
\n
"
);
printf
(
"PUSCH test OK
\n
"
);
printf
(
"*************
\n
"
);
}
printf
(
"
\n
"
);
free
(
test_input_bit
);
...
...
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