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
spbro
OpenXG-RAN
Commits
d017afad
Commit
d017afad
authored
Sep 20, 2024
by
Jaroslava Fiedlerova
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/NR_UE_pusch_optimization' into integration_2024_w38b
parents
05bb40d7
321a20ea
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
477 additions
and
198 deletions
+477
-198
openair1/PHY/MODULATION/nr_modulation.c
openair1/PHY/MODULATION/nr_modulation.c
+3
-3
openair1/PHY/MODULATION/nr_modulation.h
openair1/PHY/MODULATION/nr_modulation.h
+1
-1
openair1/PHY/NR_REFSIG/ptrs_nr.c
openair1/PHY/NR_REFSIG/ptrs_nr.c
+7
-0
openair1/PHY/NR_REFSIG/ptrs_nr.h
openair1/PHY/NR_REFSIG/ptrs_nr.h
+2
-0
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
+5
-3
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
+431
-165
openair1/PHY/TOOLS/cmult_sv.c
openair1/PHY/TOOLS/cmult_sv.c
+15
-12
openair1/PHY/TOOLS/tools_defs.h
openair1/PHY/TOOLS/tools_defs.h
+3
-0
openair1/PHY/nr_phy_common/inc/nr_ue_phy_meas.h
openair1/PHY/nr_phy_common/inc/nr_ue_phy_meas.h
+3
-1
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+7
-2
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+0
-11
No files found.
openair1/PHY/MODULATION/nr_modulation.c
View file @
d017afad
...
...
@@ -318,10 +318,10 @@ void nr_layer_mapping(int nbCodes,
}
}
void
nr_ue_layer_mapping
(
const
c16_t
*
mod_symbs
,
const
int
n_layers
,
const
int
n_symbs
,
int
sz
,
c16_t
tx_layers
[][
sz
])
void
nr_ue_layer_mapping
(
const
c16_t
*
mod_symbs
,
const
int
n_layers
,
const
int
n_symbs
,
c16_t
tx_layers
[][
n_symbs
])
{
for
(
int
i
=
0
;
i
<
n_symbs
/
n_layers
;
i
++
)
{
for
(
int
l
=
0
;
l
<
n_layers
;
l
++
)
{
for
(
int
l
=
0
;
l
<
n_layers
;
l
++
)
{
for
(
int
i
=
0
;
i
<
n_symbs
;
i
++
)
{
tx_layers
[
l
][
i
]
=
c16mulRealShift
(
mod_symbs
[
n_layers
*
i
+
l
],
AMP
,
15
);
}
}
...
...
openair1/PHY/MODULATION/nr_modulation.h
View file @
d017afad
...
...
@@ -69,7 +69,7 @@ void nr_layer_mapping(int nbCodes,
@param[in] n_symbs, number of modulated symbols
@param[out] tx_layers, modulated symbols for each layer
*/
void
nr_ue_layer_mapping
(
const
c16_t
*
mod_symbs
,
const
int
n_layers
,
const
int
n_symbs
,
int
sz
,
c16_t
tx_layers
[][
sz
]);
void
nr_ue_layer_mapping
(
const
c16_t
*
mod_symbs
,
const
int
n_layers
,
const
int
n_symbs
,
c16_t
tx_layers
[][
n_symbs
]);
/*!
\brief This function implements the OFDM front end processor on reception (FEP)
\param frame_parms Pointer to frame parameters
...
...
openair1/PHY/NR_REFSIG/ptrs_nr.c
View file @
d017afad
...
...
@@ -85,6 +85,13 @@ void set_ptrs_symb_idx(uint16_t *ptrs_symbols,
}
}
unsigned
int
get_first_ptrs_re
(
const
rnti_t
rnti
,
const
uint8_t
K_ptrs
,
const
uint16_t
nRB
,
const
uint8_t
k_RE_ref
)
{
const
uint16_t
nRB_Kptrs
=
nRB
%
K_ptrs
;
const
uint16_t
k_RB_ref
=
nRB_Kptrs
?
(
rnti
%
nRB_Kptrs
)
:
(
rnti
%
K_ptrs
);
return
(
k_RE_ref
+
k_RB_ref
*
NR_NB_SC_PER_RB
);
}
/*******************************************************************
*
* NAME : is_ptrs_subcarrier
...
...
openair1/PHY/NR_REFSIG/ptrs_nr.h
View file @
d017afad
...
...
@@ -53,6 +53,8 @@ void set_ptrs_symb_idx(uint16_t *ptrs_symbols,
uint8_t
L_ptrs
,
uint16_t
dmrs_symb_pos
);
unsigned
int
get_first_ptrs_re
(
const
rnti_t
rnti
,
const
uint8_t
K_ptrs
,
const
uint16_t
nRB
,
const
uint8_t
k_RE_ref
);
uint8_t
is_ptrs_subcarrier
(
uint16_t
k
,
uint16_t
n_rnti
,
uint8_t
K_ptrs
,
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
View file @
d017afad
...
...
@@ -116,6 +116,7 @@ int nr_ulsch_encoding(PHY_VARS_NR_UE *ue,
&
harq_process
->
Z
,
&
harq_process
->
F
,
harq_process
->
BG
);
stop_meas_nr_ue_phy
(
ue
,
ULSCH_SEGMENTATION_STATS
);
impp
.
n_segments
=
harq_process
->
C
;
impp
.
K
=
harq_process
->
K
;
impp
.
Kr
=
impp
.
K
;
...
...
@@ -126,7 +127,6 @@ int nr_ulsch_encoding(PHY_VARS_NR_UE *ue,
LOG_E
(
PHY
,
"nr_segmentation.c: too many segments %d, B %d
\n
"
,
impp
.
n_segments
,
B
);
return
(
-
1
);
}
stop_meas_nr_ue_phy
(
ue
,
ULSCH_SEGMENTATION_STATS
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_NR_SEGMENTATION
,
VCD_FUNCTION_OUT
);
#ifdef DEBUG_ULSCH_CODING
...
...
@@ -149,19 +149,22 @@ int nr_ulsch_encoding(PHY_VARS_NR_UE *ue,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_LDPC_ENCODER_OPTIM
,
VCD_FUNCTION_IN
);
}
start_meas_nr_ue_phy
(
ue
,
ULSCH_LDPC_ENCODING_STATS
);
if
(
ldpc_interface_offload
.
LDPCencoder
)
{
for
(
int
j
=
0
;
j
<
impp
.
n_segments
;
j
++
)
{
impp
.
perCB
[
j
].
E_cb
=
nr_get_E
(
G
,
impp
.
n_segments
,
impp
.
Qm
,
ulsch
->
pusch_pdu
.
nrOfLayers
,
j
);
}
start_meas_nr_ue_phy
(
ue
,
ULSCH_LDPC_ENCODING_STATS
);
ldpc_interface_offload
.
LDPCencoder
(
harq_process
->
c
,
&
harq_process
->
f
,
&
impp
);
stop_meas_nr_ue_phy
(
ue
,
ULSCH_LDPC_ENCODING_STATS
);
}
else
{
if
(
ulsch
->
pusch_pdu
.
pusch_data
.
new_data_indicator
)
{
start_meas_nr_ue_phy
(
ue
,
ULSCH_LDPC_ENCODING_STATS
);
for
(
int
j
=
0
;
j
<
(
impp
.
n_segments
/
8
+
1
);
j
++
)
{
impp
.
macro_num
=
j
;
impp
.
Kr
=
impp
.
K
;
ldpc_interface
.
LDPCencoder
(
harq_process
->
c
,
harq_process
->
d
,
&
impp
);
}
stop_meas_nr_ue_phy
(
ue
,
ULSCH_LDPC_ENCODING_STATS
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_LDPC_ENCODER_OPTIM
,
VCD_FUNCTION_OUT
);
#ifdef DEBUG_ULSCH_CODING
...
...
@@ -169,7 +172,6 @@ int nr_ulsch_encoding(PHY_VARS_NR_UE *ue,
write_output
(
"ulsch_enc_output0.m"
,
"enc0"
,
&
harq_process
->
d
[
0
][
0
],
(
3
*
8
*
Kr_bytes
)
+
12
,
1
,
4
);
#endif
}
stop_meas_nr_ue_phy
(
ue
,
ULSCH_LDPC_ENCODING_STATS
);
///////////////////////////////////////////////////////////////////////////////
for
(
int
r
=
0
;
r
<
impp
.
n_segments
;
r
++
)
{
// looping over C segments
if
(
impp
.
F
>
0
)
{
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
View file @
d017afad
This diff is collapsed.
Click to expand it.
openair1/PHY/TOOLS/cmult_sv.c
View file @
d017afad
...
...
@@ -30,27 +30,30 @@ void multadd_complex_vector_real_scalar(int16_t *x,
uint8_t
zero_flag
,
uint32_t
N
)
{
simd_q15_t
alpha_128
,
*
x_128
=
(
simd_q15_t
*
)
x
,
*
y_128
=
(
simd_q15_t
*
)
y
;
int
n
;
alpha_128
=
set1_int16
(
alpha
);
const
uint32_t
num_simd_adds
=
N
/
4
;
const
uint32_t
num_adds
=
N
%
4
;
if
(
zero_flag
==
1
)
for
(
n
=
0
;
n
<
N
>>
2
;
n
++
)
{
// print_shorts("x_128[n]=", &x_128[n]);
// print_shorts("alpha_128", &alpha_128);
if
(
zero_flag
==
1
)
{
for
(
n
=
0
;
n
<
num_simd_adds
;
n
++
)
{
y_128
[
n
]
=
mulhi_int16
(
x_128
[
n
],
alpha_128
);
// print_shorts("y_128[n]=", &y_128[n]);
}
else
for
(
n
=
0
;
n
<
N
>>
2
;
n
++
)
{
for
(
n
=
0
;
n
<
num_adds
;
n
++
)
{
const
uint32_t
offset
=
num_simd_adds
*
4
;
y
[
offset
+
n
]
=
(
x
[
offset
+
n
]
*
alpha
)
>>
16
;
}
}
else
{
for
(
n
=
0
;
n
<
num_simd_adds
;
n
++
)
{
y_128
[
n
]
=
adds_int16
(
y_128
[
n
],
mulhi_int16
(
x_128
[
n
],
alpha_128
));
}
simde_mm_empty
();
simde_m_empty
();
for
(
n
=
0
;
n
<
num_adds
;
n
++
)
{
const
uint32_t
offset
=
num_simd_adds
*
4
;
y
[
offset
+
n
]
+=
(
x
[
offset
+
n
]
*
alpha
)
>>
16
;
}
}
}
void
multadd_real_vector_complex_scalar
(
const
int16_t
*
x
,
const
int16_t
*
alpha
,
int16_t
*
y
,
uint32_t
N
)
...
...
openair1/PHY/TOOLS/tools_defs.h
View file @
d017afad
...
...
@@ -52,6 +52,9 @@
extern
"C"
{
#endif
#define ALIGNARRAYSIZE(a, b) (((a + b - 1) / b) * b)
#define ALNARS_16_4(a) ALIGNARRAYSIZE(a, 4)
typedef
struct
complexd
{
double
r
;
double
i
;
...
...
openair1/PHY/nr_phy_common/inc/nr_ue_phy_meas.h
View file @
d017afad
...
...
@@ -45,11 +45,13 @@
FN(PHY_RX_PDCCH_STATS),\
FN(DLSCH_PROCEDURES_STATS),\
FN(PHY_PROC_TX),\
FN(PUSCH_PROC_STATS),\
FN(ULSCH_SEGMENTATION_STATS),\
FN(ULSCH_LDPC_ENCODING_STATS),\
FN(ULSCH_RATE_MATCHING_STATS),\
FN(ULSCH_INTERLEAVING_STATS),\
FN(ULSCH_ENCODING_STATS)
FN(ULSCH_ENCODING_STATS),\
FN(OFDM_MOD_STATS)
typedef
enum
{
FOREACH_NR_PHY_CPU_MEAS
(
NOOP
),
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
d017afad
...
...
@@ -287,21 +287,26 @@ void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, n
start_meas_nr_ue_phy
(
ue
,
PHY_PROC_TX
);
int
harq_pid
=
phy_data
->
ulsch
.
pusch_pdu
.
pusch_data
.
harq_process_id
;
if
(
ue
->
ul_harq_processes
[
harq_pid
].
ULstatus
==
ACTIVE
)
const
int
harq_pid
=
phy_data
->
ulsch
.
pusch_pdu
.
pusch_data
.
harq_process_id
;
if
(
ue
->
ul_harq_processes
[
harq_pid
].
ULstatus
==
ACTIVE
)
{
start_meas_nr_ue_phy
(
ue
,
PUSCH_PROC_STATS
);
nr_ue_ulsch_procedures
(
ue
,
harq_pid
,
frame_tx
,
slot_tx
,
gNB_id
,
phy_data
,
(
c16_t
**
)
&
txdataF
);
stop_meas_nr_ue_phy
(
ue
,
PUSCH_PROC_STATS
);
}
ue_srs_procedures_nr
(
ue
,
proc
,
(
c16_t
**
)
&
txdataF
);
pucch_procedures_ue_nr
(
ue
,
proc
,
phy_data
,
(
c16_t
**
)
&
txdataF
);
LOG_D
(
PHY
,
"Sending Uplink data
\n
"
);
start_meas_nr_ue_phy
(
ue
,
OFDM_MOD_STATS
);
nr_ue_pusch_common_procedures
(
ue
,
proc
->
nr_slot_tx
,
&
ue
->
frame_parms
,
ue
->
frame_parms
.
nb_antennas_tx
,
(
c16_t
**
)
txdataF
,
link_type_ul
);
stop_meas_nr_ue_phy
(
ue
,
OFDM_MOD_STATS
);
nr_ue_prach_procedures
(
ue
,
proc
);
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
d017afad
...
...
@@ -1421,17 +1421,6 @@ int main(int argc, char *argv[])
errors_decoding
++
;
}
}
if
(
n_trials
==
1
)
{
for
(
int
r
=
0
;
r
<
UE
->
ul_harq_processes
[
harq_pid
].
C
;
r
++
)
for
(
int
i
=
0
;
i
<
UE
->
ul_harq_processes
[
harq_pid
].
K
>>
3
;
i
++
)
{
if
((
UE
->
ul_harq_processes
[
harq_pid
].
c
[
r
][
i
]
^
ulsch_gNB
->
harq_process
->
c
[
r
][
i
])
!=
0
)
printf
(
"************"
);
/*printf("r %d: in[%d] %x, out[%d] %x (%x)\n",r,
i,UE->ul_harq_processes[harq_pid].c[r][i],
i,ulsch_gNB->harq_process->c[r][i],
UE->ul_harq_processes[harq_pid].c[r][i]^ulsch_gNB->harq_process->c[r][i]);*/
}
}
if
(
errors_decoding
>
0
&&
error_flag
==
0
)
{
n_false_positive
++
;
if
(
n_trials
==
1
)
...
...
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