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
98a8e5dc
Commit
98a8e5dc
authored
Aug 16, 2024
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
use common LLR functions at UE for DLSCH
parent
aeb56275
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
29 additions
and
447 deletions
+29
-447
CMakeLists.txt
CMakeLists.txt
+0
-1
doc/Doxyfile
doc/Doxyfile
+0
-1
openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c
+6
-6
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+15
-16
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
+0
-329
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+0
-74
openair1/PHY/nr_phy_common/inc/nr_phy_common.h
openair1/PHY/nr_phy_common/inc/nr_phy_common.h
+4
-10
openair1/PHY/nr_phy_common/src/nr_phy_common.c
openair1/PHY/nr_phy_common/src/nr_phy_common.c
+4
-10
No files found.
CMakeLists.txt
View file @
98a8e5dc
...
...
@@ -1066,7 +1066,6 @@ set(PHY_SRC_UE
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_tbs_tools.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_prach_common.c
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/nr_sch_dmrs.c
...
...
doc/Doxyfile
View file @
98a8e5dc
...
...
@@ -2256,7 +2256,6 @@ INPUT = \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/pucch_nr.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/sss_nr.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/dci_nr.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_prach.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair1/PHY/NR_UE_TRANSPORT/nr_ue_rf_helpers.c \
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c
View file @
98a8e5dc
...
...
@@ -47,21 +47,21 @@ void nr_ulsch_compute_llr(int32_t *rxdataF_comp,
uint8_t
symbol
,
uint8_t
mod_order
)
{
switch
(
mod_order
){
switch
(
mod_order
)
{
case
2
:
nr_qpsk_llr
(
rxdataF_comp
,
ulsch_llr
,
nb_re
,
symbol
);
nr_qpsk_llr
(
rxdataF_comp
,
ulsch_llr
,
nb_re
);
break
;
case
4
:
nr_16qam_llr
(
rxdataF_comp
,
ul_ch_mag
,
ulsch_llr
,
nb_re
,
symbol
);
nr_16qam_llr
(
rxdataF_comp
,
ul_ch_mag
,
ulsch_llr
,
nb_re
);
break
;
case
6
:
nr_64qam_llr
(
rxdataF_comp
,
ul_ch_mag
,
ul_ch_magb
,
ulsch_llr
,
nb_re
,
symbol
);
nr_64qam_llr
(
rxdataF_comp
,
ul_ch_mag
,
ul_ch_magb
,
ulsch_llr
,
nb_re
);
break
;
case
8
:
nr_256qam_llr
(
rxdataF_comp
,
ul_ch_mag
,
ul_ch_magb
,
ul_ch_magc
,
ulsch_llr
,
nb_re
,
symbol
);
nr_256qam_llr
(
rxdataF_comp
,
ul_ch_mag
,
ul_ch_magb
,
ul_ch_magc
,
ulsch_llr
,
nb_re
);
break
;
default:
AssertFatal
(
1
==
0
,
"nr_ulsch_compute_llr: invalid Qm value, symbol = %d, Qm = %d
\n
"
,
symbol
,
mod_order
);
AssertFatal
(
false
,
"nr_ulsch_compute_llr: invalid Qm value, symbol = %d, Qm = %d
\n
"
,
symbol
,
mod_order
);
break
;
}
}
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
View file @
98a8e5dc
...
...
@@ -28,6 +28,7 @@
* \note
* \warning
*/
#include "nr_phy_common.h"
#include "PHY/defs_nr_UE.h"
#include "PHY/phy_extern.h"
#include "nr_transport_proto_ue.h"
...
...
@@ -1898,33 +1899,31 @@ static int nr_dlsch_llr(uint32_t rx_size_symbol,
NR_UE_DLSCH_t
dlsch
[
2
],
uint32_t
llr_offset
[
14
])
{
uint32_t
llr_offset_symbol
;
if
(
first_symbol_flag
==
1
)
llr_offset
[
symbol
-
1
]
=
0
;
llr_offset_symbol
=
llr_offset
[
symbol
-
1
];
if
(
first_symbol_flag
==
1
)
llr_offset
[
symbol
-
1
]
=
0
;
uint32_t
llr_offset_symbol
=
llr_offset
[
symbol
-
1
];
llr_offset
[
symbol
]
=
len
*
dlsch
[
0
].
dlsch_config
.
qamModOrder
+
llr_offset_symbol
;
llr_offset
[
symbol
]
=
len
*
dlsch
[
0
].
dlsch_config
.
qamModOrder
+
llr_offset_symbol
;
switch
(
dlsch
[
0
].
dlsch_config
.
qamModOrder
)
{
case
2
:
for
(
int
l
=
0
;
l
<
dlsch
[
0
].
Nl
;
l
++
)
nr_
dlsch_qpsk_llr
(
frame_parms
,
rxdataF_comp
[
l
][
0
],
layer_llr
[
l
]
+
llr_offset_symbol
,
symbol
,
len
,
first_symbol_flag
,
nb_rb
);
for
(
int
l
=
0
;
l
<
dlsch
[
0
].
Nl
;
l
++
)
nr_
qpsk_llr
(
&
rxdataF_comp
[
l
][
0
][
symbol
*
nb_rb
*
12
],
layer_llr
[
l
]
+
llr_offset_symbol
,
len
);
break
;
case
4
:
for
(
int
l
=
0
;
l
<
dlsch
[
0
].
Nl
;
l
++
)
nr_
dlsch_16qam_llr
(
frame_parms
,
rxdataF_comp
[
l
][
0
],
layer_llr
[
l
]
+
llr_offset_symbol
,
dl_ch_mag
,
symbol
,
len
,
first_symbol_flag
,
nb_rb
);
for
(
int
l
=
0
;
l
<
dlsch
[
0
].
Nl
;
l
++
)
nr_
16qam_llr
(
&
rxdataF_comp
[
l
][
0
][
symbol
*
nb_rb
*
12
],
dl_ch_mag
,
layer_llr
[
l
]
+
llr_offset_symbol
,
len
);
break
;
case
6
:
for
(
int
l
=
0
;
l
<
dlsch
[
0
].
Nl
;
l
++
)
nr_
dlsch_64qam_llr
(
frame_parms
,
rxdataF_comp
[
l
][
0
],
layer_llr
[
l
]
+
llr_offset_symbol
,
dl_ch_mag
,
dl_ch_magb
,
symbol
,
len
,
first_symbol_flag
,
nb_rb
);
nr_
64qam_llr
(
&
rxdataF_comp
[
l
][
0
][
symbol
*
nb_rb
*
12
],
dl_ch_mag
,
dl_ch_magb
,
layer_llr
[
l
]
+
llr_offset_symbol
,
len
);
break
;
case
8
:
for
(
int
l
=
0
;
l
<
dlsch
[
0
].
Nl
;
l
++
)
nr_
dlsch_256qam_llr
(
frame_parms
,
rxdataF_comp
[
l
][
0
],
layer_llr
[
l
]
+
llr_offset_symbol
,
dl_ch_mag
,
dl_ch_magb
,
dl_ch_magr
,
symbol
,
len
,
first_symbol_flag
,
nb_rb
);
nr_
256qam_llr
(
&
rxdataF_comp
[
l
][
0
][
symbol
*
nb_rb
*
12
],
dl_ch_mag
,
dl_ch_magb
,
dl_ch_magr
,
layer_llr
[
l
]
+
llr_offset_symbol
,
len
);
break
;
default:
...
...
@@ -1937,19 +1936,19 @@ static int nr_dlsch_llr(uint32_t rx_size_symbol,
if
(
dlsch1_harq
)
{
switch
(
dlsch
[
1
].
dlsch_config
.
qamModOrder
)
{
case
2
:
nr_
dlsch_qpsk_llr
(
frame_parms
,
rxdataF_comp
[
0
][
0
],
layer_llr
[
0
]
+
llr_offset_symbol
,
symbol
,
len
,
first_symbol_flag
,
nb_rb
);
nr_
qpsk_llr
(
&
rxdataF_comp
[
0
][
0
][
symbol
*
nb_rb
*
12
],
layer_llr
[
0
]
+
llr_offset_symbol
,
len
);
break
;
case
4
:
nr_
dlsch_16qam_llr
(
frame_parms
,
rxdataF_comp
[
0
][
0
],
layer_llr
[
0
]
+
llr_offset_symbol
,
dl_ch_mag
,
symbol
,
len
,
first_symbol_flag
,
nb_rb
);
nr_
16qam_llr
(
&
rxdataF_comp
[
0
][
0
][
symbol
*
nb_rb
*
12
],
dl_ch_mag
,
layer_llr
[
0
]
+
llr_offset_symbol
,
len
);
break
;
case
6
:
nr_
dlsch_64qam_llr
(
frame_parms
,
rxdataF_comp
[
0
][
0
],
layer_llr
[
0
]
+
llr_offset_symbol
,
dl_ch_mag
,
dl_ch_magb
,
symbol
,
len
,
first_symbol_flag
,
nb_rb
);
nr_
64qam_llr
(
&
rxdataF_comp
[
0
][
0
][
symbol
*
nb_rb
*
12
],
dl_ch_mag
,
dl_ch_magb
,
layer_llr
[
0
]
+
llr_offset_symbol
,
len
);
break
;
case
8
:
nr_
dlsch_256qam_llr
(
frame_parms
,
rxdataF_comp
[
0
][
0
],
layer_llr
[
0
]
+
llr_offset_symbol
,
dl_ch_mag
,
dl_ch_magb
,
dl_ch_magr
,
symbol
,
len
,
first_symbol_flag
,
nb_rb
);
nr_
256qam_llr
(
&
rxdataF_comp
[
0
][
0
][
symbol
*
nb_rb
*
12
],
dl_ch_mag
,
dl_ch_magb
,
dl_ch_magr
,
layer_llr
[
0
]
+
llr_offset_symbol
,
len
);
break
;
default:
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
deleted
100644 → 0
View file @
aeb56275
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
* \brief Top-level routines for LLR computation of the PDSCH physical channel
* \author H. WANG
* \date 2018
* \version 0.1
* \company Eurecom
* \email:
* \note
* \warning
*/
#include "PHY/defs_nr_UE.h"
#include "PHY/phy_extern_nr_ue.h"
#include "nr_transport_proto_ue.h"
#include "PHY/TOOLS/tools_defs.h"
#include "PHY/sse_intrin.h"
#ifdef __aarch64__
#define USE_128BIT
#endif
//#define DEBUG_LLR_SIC
//==============================================================================================
// SINGLE-STREAM
//==============================================================================================
//----------------------------------------------------------------------------------------------
// QPSK
//----------------------------------------------------------------------------------------------
int
nr_dlsch_qpsk_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
uint8_t
symbol
,
uint32_t
len
,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
)
{
c16_t
*
rxF
=
(
c16_t
*
)
&
rxdataF_comp
[((
int32_t
)
symbol
*
nb_rb
*
12
)];
c16_t
*
llr32
=
(
c16_t
*
)
dlsch_llr
;
int
i
;
if
(
!
llr32
)
{
LOG_E
(
PHY
,
"nr_dlsch_qpsk_llr: llr is null, symbol %d, llr32=%p
\n
"
,
symbol
,
llr32
);
return
(
-
1
);
}
/*
LOG_I(PHY,"dlsch_qpsk_llr: [symb %d / Length %d]: @LLR Buff %x, @LLR Buff(symb) %x \n",
symbol,
len,
dlsch_llr,
llr32);
*/
for
(
i
=
0
;
i
<
len
;
i
++
)
{
//*llr32 = *rxF;
llr32
->
r
=
rxF
->
r
>>
3
;
llr32
->
i
=
rxF
->
i
>>
3
;
LOG_D
(
PHY
,
"dlsch_qpsk_llr %d : (%d,%d)
\n
"
,
i
,
llr32
->
r
,
llr32
->
i
);
rxF
++
;
llr32
++
;
}
return
(
0
);
}
//----------------------------------------------------------------------------------------------
// 16-QAM
//----------------------------------------------------------------------------------------------
void
nr_dlsch_16qam_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
int32_t
*
dl_ch_mag
,
uint8_t
symbol
,
uint32_t
len
,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
)
{
simde__m128i
*
rxF
=
(
simde__m128i
*
)
&
rxdataF_comp
[(
symbol
*
nb_rb
*
12
)];
simde__m128i
*
ch_mag
;
simde__m128i
llr128
[
2
];
uint32_t
*
llr32
;
int
i
;
unsigned
char
len_mod4
=
0
;
llr32
=
(
uint32_t
*
)
dlsch_llr
;
ch_mag
=
(
simde__m128i
*
)
dl_ch_mag
;
// printf("len=%d\n", len);
len_mod4
=
len
&
3
;
// printf("len_mod4=%d\n", len_mod4);
len
>>=
2
;
// length in quad words (4 REs)
// printf("len>>=2=%d\n", len);
len
+=
(
len_mod4
==
0
?
0
:
1
);
// printf("len+=%d\n", len);
for
(
i
=
0
;
i
<
len
;
i
++
)
{
simde__m128i
xmm0
=
simde_mm_abs_epi16
(
rxF
[
i
]);
xmm0
=
simde_mm_subs_epi16
(
ch_mag
[
i
],
xmm0
);
// lambda_1=y_R, lambda_2=|y_R|-|h|^2, lamda_3=y_I, lambda_4=|y_I|-|h|^2
llr128
[
0
]
=
simde_mm_unpacklo_epi32
(
rxF
[
i
],
xmm0
);
llr128
[
1
]
=
simde_mm_unpackhi_epi32
(
rxF
[
i
],
xmm0
);
llr32
[
0
]
=
simde_mm_extract_epi32
(
llr128
[
0
],
0
);
//((uint32_t *)&llr128[0])[0];
llr32
[
1
]
=
simde_mm_extract_epi32
(
llr128
[
0
],
1
);
//((uint32_t *)&llr128[0])[1];
llr32
[
2
]
=
simde_mm_extract_epi32
(
llr128
[
0
],
2
);
//((uint32_t *)&llr128[0])[2];
llr32
[
3
]
=
simde_mm_extract_epi32
(
llr128
[
0
],
3
);
//((uint32_t *)&llr128[0])[3];
llr32
[
4
]
=
simde_mm_extract_epi32
(
llr128
[
1
],
0
);
//((uint32_t *)&llr128[1])[0];
llr32
[
5
]
=
simde_mm_extract_epi32
(
llr128
[
1
],
1
);
//((uint32_t *)&llr128[1])[1];
llr32
[
6
]
=
simde_mm_extract_epi32
(
llr128
[
1
],
2
);
//((uint32_t *)&llr128[1])[2];
llr32
[
7
]
=
simde_mm_extract_epi32
(
llr128
[
1
],
3
);
//((uint32_t *)&llr128[1])[3];
llr32
+=
8
;
}
simde_mm_empty
();
simde_m_empty
();
}
//----------------------------------------------------------------------------------------------
// 64-QAM
//----------------------------------------------------------------------------------------------
void
nr_dlsch_64qam_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
int32_t
*
dl_ch_mag
,
int32_t
*
dl_ch_magb
,
uint8_t
symbol
,
uint32_t
len
,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
)
{
simde__m128i
*
rxF
=
(
simde__m128i
*
)
&
rxdataF_comp
[(
symbol
*
nb_rb
*
12
)];
simde__m128i
*
ch_mag
,
*
ch_magb
;
int
i
,
len2
;
unsigned
char
len_mod4
;
int16_t
*
llr2
;
llr2
=
dlsch_llr
;
ch_mag
=
(
simde__m128i
*
)
dl_ch_mag
;
ch_magb
=
(
simde__m128i
*
)
dl_ch_magb
;
// printf("nr_dlsch_64qam_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust);
/* LOG_I(PHY,"nr_dlsch_64qam_llr [symb %d / FirstSym %d / Length %d]: @LLR Buff %x \n",
symbol,
first_symbol_flag,
len,
dlsch_llr,
pllr_symbol);*/
len_mod4
=
len
&
3
;
len2
=
len
>>
2
;
// length in quad words (4 REs)
len2
+=
((
len_mod4
==
0
)
?
0
:
1
);
for
(
i
=
0
;
i
<
len2
;
i
++
)
{
simde__m128i
xmm1
,
xmm2
;
xmm1
=
simde_mm_abs_epi16
(
rxF
[
i
]);
xmm1
=
simde_mm_subs_epi16
(
ch_mag
[
i
],
xmm1
);
xmm2
=
simde_mm_abs_epi16
(
xmm1
);
xmm2
=
simde_mm_subs_epi16
(
ch_magb
[
i
],
xmm2
);
// loop over all LLRs in quad word (24 coded bits)
/*
for (j=0;j<8;j+=2) {
llr2[0] = ((short *)&rxF[i])[j];
llr2[1] = ((short *)&rxF[i])[j+1];
llr2[2] = ((short *)&xmm1)[j];
llr2[3] = ((short *)&xmm1)[j+1];
llr2[4] = ((short *)&xmm2)[j];
llr2[5] = ((short *)&xmm2)[j+1];
llr2+=6;
}
*/
llr2
[
0
]
=
((
short
*
)
&
rxF
[
i
])[
0
];
llr2
[
1
]
=
((
short
*
)
&
rxF
[
i
])[
1
];
llr2
[
2
]
=
simde_mm_extract_epi16
(
xmm1
,
0
);
llr2
[
3
]
=
simde_mm_extract_epi16
(
xmm1
,
1
);
//((short *)&xmm1)[j+1];
llr2
[
4
]
=
simde_mm_extract_epi16
(
xmm2
,
0
);
//((short *)&xmm2)[j];
llr2
[
5
]
=
simde_mm_extract_epi16
(
xmm2
,
1
);
//((short *)&xmm2)[j+1];
llr2
+=
6
;
llr2
[
0
]
=
((
short
*
)
&
rxF
[
i
])[
2
];
llr2
[
1
]
=
((
short
*
)
&
rxF
[
i
])[
3
];
llr2
[
2
]
=
simde_mm_extract_epi16
(
xmm1
,
2
);
llr2
[
3
]
=
simde_mm_extract_epi16
(
xmm1
,
3
);
//((short *)&xmm1)[j+1];
llr2
[
4
]
=
simde_mm_extract_epi16
(
xmm2
,
2
);
//((short *)&xmm2)[j];
llr2
[
5
]
=
simde_mm_extract_epi16
(
xmm2
,
3
);
//((short *)&xmm2)[j+1];
llr2
+=
6
;
llr2
[
0
]
=
((
short
*
)
&
rxF
[
i
])[
4
];
llr2
[
1
]
=
((
short
*
)
&
rxF
[
i
])[
5
];
llr2
[
2
]
=
simde_mm_extract_epi16
(
xmm1
,
4
);
llr2
[
3
]
=
simde_mm_extract_epi16
(
xmm1
,
5
);
//((short *)&xmm1)[j+1];
llr2
[
4
]
=
simde_mm_extract_epi16
(
xmm2
,
4
);
//((short *)&xmm2)[j];
llr2
[
5
]
=
simde_mm_extract_epi16
(
xmm2
,
5
);
//((short *)&xmm2)[j+1];
llr2
+=
6
;
llr2
[
0
]
=
((
short
*
)
&
rxF
[
i
])[
6
];
llr2
[
1
]
=
((
short
*
)
&
rxF
[
i
])[
7
];
llr2
[
2
]
=
simde_mm_extract_epi16
(
xmm1
,
6
);
llr2
[
3
]
=
simde_mm_extract_epi16
(
xmm1
,
7
);
//((short *)&xmm1)[j+1];
llr2
[
4
]
=
simde_mm_extract_epi16
(
xmm2
,
6
);
//((short *)&xmm2)[j];
llr2
[
5
]
=
simde_mm_extract_epi16
(
xmm2
,
7
);
//((short *)&xmm2)[j+1];
llr2
+=
6
;
}
simde_mm_empty
();
simde_m_empty
();
}
//----------------------------------------------------------------------------------------------
// 256-QAM
//----------------------------------------------------------------------------------------------
void
nr_dlsch_256qam_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
int32_t
*
dl_ch_mag
,
int32_t
*
dl_ch_magb
,
int32_t
*
dl_ch_magr
,
uint8_t
symbol
,
uint32_t
len
,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
)
{
simde__m128i
*
rxF
=
(
simde__m128i
*
)
&
rxdataF_comp
[(
symbol
*
nb_rb
*
12
)];
simde__m128i
*
ch_mag
,
*
ch_magb
,
*
ch_magr
;
int
i
,
len2
;
unsigned
char
len_mod4
;
int16_t
*
llr2
;
llr2
=
dlsch_llr
;
ch_mag
=
(
simde__m128i
*
)
dl_ch_mag
;
ch_magb
=
(
simde__m128i
*
)
dl_ch_magb
;
ch_magr
=
(
simde__m128i
*
)
dl_ch_magr
;
len_mod4
=
len
&
3
;
len2
=
len
>>
2
;
// length in quad words (4 REs)
len2
+=
((
len_mod4
==
0
)
?
0
:
1
);
for
(
i
=
0
;
i
<
len2
;
i
++
)
{
simde__m128i
xmm1
=
simde_mm_abs_epi16
(
rxF
[
i
]);
xmm1
=
simde_mm_subs_epi16
(
ch_mag
[
i
],
xmm1
);
simde__m128i
xmm2
=
simde_mm_abs_epi16
(
xmm1
);
xmm2
=
simde_mm_subs_epi16
(
ch_magb
[
i
],
xmm2
);
simde__m128i
xmm3
=
simde_mm_abs_epi16
(
xmm2
);
xmm3
=
simde_mm_subs_epi16
(
ch_magr
[
i
],
xmm3
);
llr2
[
0
]
=
((
short
*
)
&
rxF
[
i
])[
0
];
llr2
[
1
]
=
((
short
*
)
&
rxF
[
i
])[
1
];
llr2
[
2
]
=
simde_mm_extract_epi16
(
xmm1
,
0
);
llr2
[
3
]
=
simde_mm_extract_epi16
(
xmm1
,
1
);
//((short *)&xmm1)[j+1];
llr2
[
4
]
=
simde_mm_extract_epi16
(
xmm2
,
0
);
//((short *)&xmm2)[j];
llr2
[
5
]
=
simde_mm_extract_epi16
(
xmm2
,
1
);
//((short *)&xmm2)[j+1];
llr2
[
6
]
=
simde_mm_extract_epi16
(
xmm3
,
0
);
llr2
[
7
]
=
simde_mm_extract_epi16
(
xmm3
,
1
);
llr2
+=
8
;
llr2
[
0
]
=
((
short
*
)
&
rxF
[
i
])[
2
];
llr2
[
1
]
=
((
short
*
)
&
rxF
[
i
])[
3
];
llr2
[
2
]
=
simde_mm_extract_epi16
(
xmm1
,
2
);
llr2
[
3
]
=
simde_mm_extract_epi16
(
xmm1
,
3
);
//((short *)&xmm1)[j+1];
llr2
[
4
]
=
simde_mm_extract_epi16
(
xmm2
,
2
);
//((short *)&xmm2)[j];
llr2
[
5
]
=
simde_mm_extract_epi16
(
xmm2
,
3
);
//((short *)&xmm2)[j+1];
llr2
[
6
]
=
simde_mm_extract_epi16
(
xmm3
,
2
);
llr2
[
7
]
=
simde_mm_extract_epi16
(
xmm3
,
3
);
llr2
+=
8
;
llr2
[
0
]
=
((
short
*
)
&
rxF
[
i
])[
4
];
llr2
[
1
]
=
((
short
*
)
&
rxF
[
i
])[
5
];
llr2
[
2
]
=
simde_mm_extract_epi16
(
xmm1
,
4
);
llr2
[
3
]
=
simde_mm_extract_epi16
(
xmm1
,
5
);
//((short *)&xmm1)[j+1];
llr2
[
4
]
=
simde_mm_extract_epi16
(
xmm2
,
4
);
//((short *)&xmm2)[j];
llr2
[
5
]
=
simde_mm_extract_epi16
(
xmm2
,
5
);
//((short *)&xmm2)[j+1];
llr2
[
6
]
=
simde_mm_extract_epi16
(
xmm3
,
4
);
llr2
[
7
]
=
simde_mm_extract_epi16
(
xmm3
,
5
);
llr2
+=
8
;
llr2
[
0
]
=
((
short
*
)
&
rxF
[
i
])[
6
];
llr2
[
1
]
=
((
short
*
)
&
rxF
[
i
])[
7
];
llr2
[
2
]
=
simde_mm_extract_epi16
(
xmm1
,
6
);
llr2
[
3
]
=
simde_mm_extract_epi16
(
xmm1
,
7
);
//((short *)&xmm1)[j+1];
llr2
[
4
]
=
simde_mm_extract_epi16
(
xmm2
,
6
);
//((short *)&xmm2)[j];
llr2
[
5
]
=
simde_mm_extract_epi16
(
xmm2
,
7
);
//((short *)&xmm2)[j+1];
llr2
[
6
]
=
simde_mm_extract_epi16
(
xmm3
,
6
);
llr2
[
7
]
=
simde_mm_extract_epi16
(
xmm3
,
7
);
llr2
+=
8
;
}
simde_mm_empty
();
simde_m_empty
();
}
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
View file @
98a8e5dc
...
...
@@ -52,80 +52,6 @@
*/
void
nr_ue_dlsch_init
(
NR_UE_DLSCH_t
*
dlsch_list
,
int
num_dlsch
,
uint8_t
max_ldpc_iterations
);
/** \brief This function generates log-likelihood ratios (decoder input) for single-stream QPSK received waveforms
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param dlsch_llr llr output
@param symbol OFDM symbol index in sub-frame
@param len
@param first_symbol_flag
@param nb_rb number of RBs for this allocation
*/
int32_t
nr_dlsch_qpsk_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
uint8_t
symbol
,
uint32_t
len
,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
);
/**
\brief This function generates log-likelihood ratios (decoder input) for single-stream 16QAM received waveforms
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param dlsch_llr llr output
@param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation and weighted for
mid-point in 16QAM constellation
@param len
@param symbol OFDM symbol index in sub-frame
@param first_symbol_flag
@param nb_rb number of RBs for this allocation
*/
void
nr_dlsch_16qam_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
int32_t
*
dl_ch_mag
,
uint8_t
symbol
,
uint32_t
len
,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
);
/**
\brief This function generates log-likelihood ratios (decoder input) for single-stream 16QAM received waveforms
@param frame_parms Frame descriptor structure
@param rxdataF_comp Compensated channel output
@param dlsch_llr llr output
@param dl_ch_mag Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by first
mid-point of 64-QAM constellation
@param dl_ch_magb Squared-magnitude of channel in each resource element position corresponding to allocation, weighted by second
mid-point of 64-QAM constellation
@param symbol OFDM symbol index in sub-frame
@param len
@param first_symbol_flag
@param nb_rb number of RBs for this allocation
*/
void
nr_dlsch_64qam_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
int32_t
*
dl_ch_mag
,
int32_t
*
dl_ch_magb
,
uint8_t
symbol
,
uint32_t
len
,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
);
void
nr_dlsch_256qam_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
int32_t
*
dl_ch_mag
,
int32_t
*
dl_ch_magb
,
int32_t
*
dl_ch_magr
,
uint8_t
symbol
,
uint32_t
len
,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
);
void
nr_dlsch_deinterleaving
(
uint8_t
symbol
,
uint8_t
start_symbol
,
uint16_t
L
,
...
...
openair1/PHY/nr_phy_common/inc/nr_phy_common.h
View file @
98a8e5dc
...
...
@@ -24,16 +24,10 @@
#include "PHY/impl_defs_top.h"
#include "PHY/TOOLS/tools_defs.h"
void
nr_qpsk_llr
(
int32_t
*
rxdataF_comp
,
int16_t
*
llr
,
uint32_t
nb_re
,
uint8_t
symbol
);
void
nr_16qam_llr
(
int32_t
*
rxdataF_comp
,
int32_t
*
ch_mag_in
,
int16_t
*
llr
,
uint32_t
nb_re
,
uint8_t
symbol
);
void
nr_64qam_llr
(
int32_t
*
rxdataF_comp
,
int32_t
*
ch_mag
,
int32_t
*
ch_mag2
,
int16_t
*
llr
,
uint32_t
nb_re
,
uint8_t
symbol
);
void
nr_256qam_llr
(
int32_t
*
rxdataF_comp
,
int32_t
*
ch_mag
,
int32_t
*
ch_mag2
,
int32_t
*
ch_mag3
,
int16_t
*
llr
,
uint32_t
nb_re
,
uint8_t
symbol
);
void
nr_qpsk_llr
(
int32_t
*
rxdataF_comp
,
int16_t
*
llr
,
uint32_t
nb_re
);
void
nr_16qam_llr
(
int32_t
*
rxdataF_comp
,
int32_t
*
ch_mag_in
,
int16_t
*
llr
,
uint32_t
nb_re
);
void
nr_64qam_llr
(
int32_t
*
rxdataF_comp
,
int32_t
*
ch_mag
,
int32_t
*
ch_mag2
,
int16_t
*
llr
,
uint32_t
nb_re
);
void
nr_256qam_llr
(
int32_t
*
rxdataF_comp
,
int32_t
*
ch_mag
,
int32_t
*
ch_mag2
,
int32_t
*
ch_mag3
,
int16_t
*
llr
,
uint32_t
nb_re
);
void
freq2time
(
uint16_t
ofdm_symbol_size
,
int16_t
*
freq_signal
,
int16_t
*
time_signal
);
void
nr_est_delay
(
int
ofdm_symbol_size
,
const
c16_t
*
ls_est
,
c16_t
*
ch_estimates_time
,
delay_t
*
delay
);
unsigned
int
nr_get_tx_amp
(
int
power_dBm
,
int
power_max_dBm
,
int
total_nb_rb
,
int
nb_rb
);
...
...
openair1/PHY/nr_phy_common/src/nr_phy_common.c
View file @
98a8e5dc
...
...
@@ -41,7 +41,7 @@ int16_t saturating_sub(int16_t a, int16_t b)
//----------------------------------------------------------------------------------------------
// QPSK
//----------------------------------------------------------------------------------------------
void
nr_qpsk_llr
(
int32_t
*
rxdataF_comp
,
int16_t
*
llr
,
uint32_t
nb_re
,
uint8_t
symbol
)
void
nr_qpsk_llr
(
int32_t
*
rxdataF_comp
,
int16_t
*
llr
,
uint32_t
nb_re
)
{
c16_t
*
rxF
=
(
c16_t
*
)
rxdataF_comp
;
c16_t
*
llr32
=
(
c16_t
*
)
llr
;
...
...
@@ -55,7 +55,7 @@ void nr_qpsk_llr(int32_t *rxdataF_comp, int16_t *llr, uint32_t nb_re, uint8_t sy
// 16-QAM
//----------------------------------------------------------------------------------------------
void
nr_16qam_llr
(
int32_t
*
rxdataF_comp
,
int32_t
*
ch_mag_in
,
int16_t
*
llr
,
uint32_t
nb_re
,
uint8_t
symbol
)
void
nr_16qam_llr
(
int32_t
*
rxdataF_comp
,
int32_t
*
ch_mag_in
,
int16_t
*
llr
,
uint32_t
nb_re
)
{
simde__m256i
*
rxF_256
=
(
simde__m256i
*
)
rxdataF_comp
;
simde__m256i
*
ch_mag
=
(
simde__m256i
*
)
ch_mag_in
;
...
...
@@ -131,7 +131,7 @@ void nr_16qam_llr(int32_t *rxdataF_comp, int32_t *ch_mag_in, int16_t *llr, uint3
// 64-QAM
//----------------------------------------------------------------------------------------------
void
nr_64qam_llr
(
int32_t
*
rxdataF_comp
,
int32_t
*
ch_mag
,
int32_t
*
ch_mag2
,
int16_t
*
llr
,
uint32_t
nb_re
,
uint8_t
symbol
)
void
nr_64qam_llr
(
int32_t
*
rxdataF_comp
,
int32_t
*
ch_mag
,
int32_t
*
ch_mag2
,
int16_t
*
llr
,
uint32_t
nb_re
)
{
simde__m256i
*
rxF
=
(
simde__m256i
*
)
rxdataF_comp
;
...
...
@@ -242,13 +242,7 @@ void nr_64qam_llr(int32_t *rxdataF_comp, int32_t *ch_mag, int32_t *ch_mag2, int1
simde_mm_empty
();
}
void
nr_256qam_llr
(
int32_t
*
rxdataF_comp
,
int32_t
*
ch_mag
,
int32_t
*
ch_mag2
,
int32_t
*
ch_mag3
,
int16_t
*
llr
,
uint32_t
nb_re
,
uint8_t
symbol
)
void
nr_256qam_llr
(
int32_t
*
rxdataF_comp
,
int32_t
*
ch_mag
,
int32_t
*
ch_mag2
,
int32_t
*
ch_mag3
,
int16_t
*
llr
,
uint32_t
nb_re
)
{
simde__m256i
*
rxF_256
=
(
simde__m256i
*
)
rxdataF_comp
;
simde__m256i
*
llr256
=
(
simde__m256i
*
)
llr
;
...
...
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