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
lizhongxiao
OpenXG-RAN
Commits
a9d49ef0
Commit
a9d49ef0
authored
Oct 31, 2021
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
further minor optimizations
parent
eecd718b
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
56 additions
and
35 deletions
+56
-35
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
+53
-33
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
+1
-1
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+2
-1
No files found.
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
View file @
a9d49ef0
...
...
@@ -415,51 +415,71 @@ uint8_t nr_generate_pdsch(processingData_L1tx_t *msgTx,
}
else
{
// no PTRS or DMRS in this symbol
// Loop Over SCs:
__m64
*
txF
=
(
__m64
*
)
&
txdataF_precoding
[
ap
][((
l
*
frame_parms
->
ofdm_symbol_size
+
start_sc
+
txdataF_offset
)
<<
1
)];
int
upper_limit
=
rel15
->
rbSize
*
NR_NB_SC_PER_RB
;
int
remaining_re
=
0
;
if
(
start_sc
+
upper_limit
>
frame_parms
->
ofdm_symbol_size
)
{
remaining_re
=
upper_limit
+
start_sc
-
frame_parms
->
ofdm_symbol_size
;
upper_limit
=
frame_parms
->
ofdm_symbol_size
-
start_sc
;
}
__m64
*
txl
=
(
__m64
*
)
&
tx_layers
[
ap
][
m
<<
1
];
__m64
amp64
=
_mm_set1_pi16
(
amp
);
for
(
int
i
=
0
;
i
<
(
upper_limit
>>
1
);
i
++
)
{
if
(
frame_parms
->
N_RB_DL
&
1
==
0
)
{
__m128i
*
txF
=
(
__m128i
*
)
&
txdataF_precoding
[
ap
][((
l
*
frame_parms
->
ofdm_symbol_size
+
start_sc
+
txdataF_offset
)
<<
1
)];
__m128i
*
txl
=
(
__m128i
*
)
&
tx_layers
[
ap
][
m
<<
1
];
__m128i
amp128
=
_mm_set1_epi16
(
amp
);
for
(
int
i
=
0
;
i
<
(
upper_limit
>>
2
);
i
++
)
{
txF
[
i
]
=
_mm_mulhrs_epi16
(
amp128
,
txl
[
i
]);
}
//RE loop, first part
m
+=
upper_limit
;
if
(
remaining_re
>
0
)
{
txF
=
(
__m128i
*
)
&
txdataF_precoding
[
ap
][((
l
*
frame_parms
->
ofdm_symbol_size
+
txdataF_offset
)
<<
1
)];
txl
=
(
__m128i
*
)
&
tx_layers
[
ap
][
m
<<
1
];
for
(
int
i
=
0
;
i
<
(
remaining_re
>>
2
);
i
++
)
{
txF
[
i
]
=
_mm_mulhrs_epi16
(
amp128
,
txl
[
i
]);
}
}
}
else
{
__m64
*
txF
=
(
__m64
*
)
&
txdataF_precoding
[
ap
][((
l
*
frame_parms
->
ofdm_symbol_size
+
start_sc
+
txdataF_offset
)
<<
1
)];
__m64
*
txl
=
(
__m64
*
)
&
tx_layers
[
ap
][
m
<<
1
];
__m64
amp64
=
_mm_set1_pi16
(
amp
);
for
(
int
i
=
0
;
i
<
(
upper_limit
>>
1
);
i
++
)
{
txF
[
i
]
=
_mm_mulhrs_pi16
(
amp64
,
txl
[
i
]);
txF
[
i
]
=
_mm_mulhrs_pi16
(
amp64
,
txl
[
i
]);
#ifdef DEBUG_DLSCH_MAPPING
if
((
i
&
1
)
>
0
)
printf
(
"m %d
\t
l %d
\t
k %d
\t
txdataF: %d %d
\n
"
,
if
((
i
&
1
)
>
0
)
printf
(
"m %d
\t
l %d
\t
k %d
\t
txdataF: %d %d
\n
"
,
m
,
l
,
start_sc
+
(
i
>>
1
),
txdataF_precoding
[
ap
][((
l
*
frame_parms
->
ofdm_symbol_size
+
start_sc
+
(
i
>>
1
))
<<
1
)
+
(
2
*
txdataF_offset
)],
txdataF_precoding
[
ap
][((
l
*
frame_parms
->
ofdm_symbol_size
+
start_sc
+
(
i
>>
1
))
<<
1
)
+
1
+
(
2
*
txdataF_offset
)]);
txdataF_precoding
[
ap
][((
l
*
frame_parms
->
ofdm_symbol_size
+
start_sc
+
(
i
>>
1
))
<<
1
)
+
1
+
(
2
*
txdataF_offset
)]);
#endif
/* handle this, mute RE */
/*else {
txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + (2*txdataF_offset)] = 0;
txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)] = 0;
}*/
}
//RE loop, first part
m
+=
upper_limit
;
if
(
remaining_re
>
0
)
{
txF
=
(
__m64
*
)
&
txdataF_precoding
[
ap
][((
l
*
frame_parms
->
ofdm_symbol_size
+
txdataF_offset
)
<<
1
)];
txl
=
(
__m64
*
)
&
tx_layers
[
ap
][
m
<<
1
];
for
(
int
i
=
0
;
i
<
(
remaining_re
>>
1
);
i
++
)
{
txF
[
i
]
=
_mm_mulhrs_pi16
(
amp64
,
txl
[
i
]);
/* handle this, mute RE */
/*else {
txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + (2*txdataF_offset)] = 0;
txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)] = 0;
}*/
}
//RE loop, first part
m
+=
upper_limit
;
if
(
remaining_re
>
0
)
{
txF
=
(
__m64
*
)
&
txdataF_precoding
[
ap
][((
l
*
frame_parms
->
ofdm_symbol_size
+
txdataF_offset
)
<<
1
)];
txl
=
(
__m64
*
)
&
tx_layers
[
ap
][
m
<<
1
];
for
(
int
i
=
0
;
i
<
(
remaining_re
>>
1
);
i
++
)
{
txF
[
i
]
=
_mm_mulhrs_pi16
(
amp64
,
txl
[
i
]);
#ifdef DEBUG_DLSCH_MAPPING
if
((
i
&
1
)
>
0
)
printf
(
"m %d
\t
l %d
\t
k %d
\t
txdataF: %d %d
\n
"
,
m
,
l
,
i
>>
1
,
txdataF_precoding
[
ap
][((
l
*
frame_parms
->
ofdm_symbol_size
+
(
i
>>
1
))
<<
1
)
+
(
2
*
txdataF_offset
)],
txdataF_precoding
[
ap
][((
l
*
frame_parms
->
ofdm_symbol_size
+
(
i
>>
1
))
<<
1
)
+
1
+
(
2
*
txdataF_offset
)]);
if
((
i
&
1
)
>
0
)
printf
(
"m %d
\t
l %d
\t
k %d
\t
txdataF: %d %d
\n
"
,
m
,
l
,
i
>>
1
,
txdataF_precoding
[
ap
][((
l
*
frame_parms
->
ofdm_symbol_size
+
(
i
>>
1
))
<<
1
)
+
(
2
*
txdataF_offset
)],
txdataF_precoding
[
ap
][((
l
*
frame_parms
->
ofdm_symbol_size
+
(
i
>>
1
))
<<
1
)
+
1
+
(
2
*
txdataF_offset
)]);
#endif
/* handle this, mute RE */
/*else {
txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + (2*txdataF_offset)] = 0;
txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)] = 0;
}*/
}
//RE loop, second part
}
m
+=
remaining_re
;
}
/* handle this, mute RE */
/*else {
txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + (2*txdataF_offset)] = 0;
txdataF_precoding[ap][((l*frame_parms->ofdm_symbol_size + k)<<1) + 1 + (2*txdataF_offset)] = 0;
}*/
}
//RE loop, second part
}
//
m
+=
remaining_re
;
}
// N_RB_DL even
}
// no DMRS/PTRS in symbol
}
// symbol loop
}
// layer loop
stop_meas
(
&
gNB
->
dlsch_resource_mapping_stats
);
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
View file @
a9d49ef0
...
...
@@ -380,7 +380,7 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB,
impp
.
tparity
=
tparity
;
impp
.
toutput
=
toutput
;
for
(
int
j
=
0
;
j
<
(
harq
->
C
/
8
+
1
);
j
++
)
{
for
(
int
j
=
0
;
j
<
(
harq
->
C
/
8
+
((
harq
->
C
&
7
)
==
0
?
0
:
1
)
);
j
++
)
{
impp
.
macro_num
=
j
;
nrLDPC_encoder
(
harq
->
c
,
harq
->
d
,
*
Zc
,
Kb
,
Kr
,
harq
->
BG
,
&
impp
);
}
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
a9d49ef0
...
...
@@ -1301,9 +1301,10 @@ 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, Kr %d (Zc %d))
\n
"
,
printf
(
"
\n
gNB TX function statistics (per %d us slot, NPRB %d, mcs %d, TBS %d,
C %d,
Kr %d (Zc %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
));
printDistribution
(
gNB
->
phy_proc_tx_0
,
table_tx
,
"PHY proc tx"
);
...
...
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