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
6ac3a017
Commit
6ac3a017
authored
Jun 13, 2023
by
Tsung-Yu Chan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat / 2 layer MIMO with ML receiver
parent
f15fe822
Changes
8
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
4714 additions
and
761 deletions
+4714
-761
CMakeLists.txt
CMakeLists.txt
+4
-0
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
+19
-0
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
+1246
-752
openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c
+3374
-0
openair1/PHY/TOOLS/simde_operations.c
openair1/PHY/TOOLS/simde_operations.c
+60
-0
openair1/PHY/TOOLS/tools_defs.h
openair1/PHY/TOOLS/tools_defs.h
+2
-0
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+1
-1
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+8
-8
No files found.
CMakeLists.txt
View file @
6ac3a017
...
...
@@ -1054,6 +1054,7 @@ set(PHY_SRC_COMMON
${
OPENAIR1_DIR
}
/PHY/TOOLS/dB_routines.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/sqrt.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/lut.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/simde_operations.c
)
set
(
PHY_SRC
...
...
@@ -1190,6 +1191,7 @@ set(PHY_SRC_UE
${
OPENAIR1_DIR
}
/PHY/TOOLS/dB_routines.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/sqrt.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/lut.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/simde_operations.c
${
PHY_POLARSRC
}
${
PHY_SMALLBLOCKSRC
}
${
PHY_NR_CODINGIF
}
...
...
@@ -1243,6 +1245,7 @@ set(PHY_SRC_UE
${
OPENAIR1_DIR
}
/PHY/TOOLS/dB_routines.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/sqrt.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/lut.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/simde_operations.c
${
OPENAIR1_DIR
}
/PHY/INIT/nr_init_ue.c
# ${OPENAIR1_DIR}/SIMULATION/NR_UE_PHY/unit_tests/src/pucch_uci_test.c
${
PHY_POLARSRC
}
...
...
@@ -1293,6 +1296,7 @@ set(PHY_MEX_UE
${
OPENAIR1_DIR
}
/PHY/TOOLS/cmult_vv.c
${
OPENAIR1_DIR
}
/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation_avx2.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/signal_energy.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/simde_operations.c
${
OPENAIR1_DIR
}
/PHY/LTE_ESTIMATION/lte_ue_measurements.c
${
OPENAIR_DIR
}
/common/utils/LOG/log.c
${
OPENAIR_DIR
}
/common/utils/T/T.c
...
...
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
View file @
6ac3a017
...
...
@@ -214,6 +214,25 @@ void nr_ulsch_channel_compensation(int **rxdataF_ext,
*/
void
nr_idft
(
int32_t
*
z
,
uint32_t
Msc_PUSCH
);
void
nr_ulsch_qpsk_qpsk
(
c16_t
*
stream0_in
,
c16_t
*
stream1_in
,
c16_t
*
stream0_out
,
c16_t
*
rho01
,
uint32_t
length
);
void
nr_ulsch_qam16_qam16
(
c16_t
*
stream0_in
,
c16_t
*
stream1_in
,
c16_t
*
ch_mag
,
c16_t
*
ch_mag_i
,
c16_t
*
stream0_out
,
c16_t
*
rho01
,
uint32_t
length
);
void
nr_ulsch_qam64_qam64
(
c16_t
*
stream0_in
,
c16_t
*
stream1_in
,
c16_t
*
ch_mag
,
c16_t
*
ch_mag_i
,
c16_t
*
stream0_out
,
c16_t
*
rho01
,
uint32_t
length
);
/** \brief This function generates log-likelihood ratios (decoder input) for single-stream QPSK received waveforms.
@param rxdataF_comp Compensated channel output
@param ulsch_llr llr output
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
View file @
6ac3a017
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c
View file @
6ac3a017
This diff is collapsed.
Click to expand it.
openair1/PHY/TOOLS/simde_operations.c
0 → 100644
View file @
6ac3a017
/*
* 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
*/
#include <simde/x86/avx2.h>
void
simde_mm128_separate_real_imag_parts
(
simde__m128i
*
out_re
,
simde__m128i
*
out_im
,
simde__m128i
in0
,
simde__m128i
in1
)
{
// Put in0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
in0
=
simde_mm_shufflelo_epi16
(
in0
,
0xd8
);
//_MM_SHUFFLE(0,2,1,3));
in0
=
simde_mm_shufflehi_epi16
(
in0
,
0xd8
);
//_MM_SHUFFLE(0,2,1,3));
in0
=
simde_mm_shuffle_epi32
(
in0
,
0xd8
);
//_MM_SHUFFLE(0,2,1,3));
// Put xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
in1
=
simde_mm_shufflelo_epi16
(
in1
,
0xd8
);
//_MM_SHUFFLE(0,2,1,3));
in1
=
simde_mm_shufflehi_epi16
(
in1
,
0xd8
);
//_MM_SHUFFLE(0,2,1,3));
in1
=
simde_mm_shuffle_epi32
(
in1
,
0xd8
);
//_MM_SHUFFLE(0,2,1,3));
*
out_re
=
simde_mm_unpacklo_epi64
(
in0
,
in1
);
*
out_im
=
simde_mm_unpackhi_epi64
(
in0
,
in1
);
}
void
simde_mm256_separate_real_imag_parts
(
simde__m256i
*
out_re
,
simde__m256i
*
out_im
,
simde__m256i
in0
,
simde__m256i
in1
)
{
// Put in0 = [Re(0,1,2,3) Im(0,1,2,3) Re(4,5,6,7) Im(4,5,6,7)]
in0
=
simde_mm256_shufflelo_epi16
(
in0
,
0xd8
);
//_MM_SHUFFLE(0,2,1,3));
in0
=
simde_mm256_shufflehi_epi16
(
in0
,
0xd8
);
//_MM_SHUFFLE(0,2,1,3));
in0
=
simde_mm256_shuffle_epi32
(
in0
,
0xd8
);
//_MM_SHUFFLE(0,2,1,3));
// Put in1 = [Re(8,9,10,11) Im(8,9,10,11) Re(12,13,14,15) Im(12,13,14,15)]
in1
=
simde_mm256_shufflelo_epi16
(
in1
,
0xd8
);
//_MM_SHUFFLE(0,2,1,3));
in1
=
simde_mm256_shufflehi_epi16
(
in1
,
0xd8
);
//_MM_SHUFFLE(0,2,1,3));
in1
=
simde_mm256_shuffle_epi32
(
in1
,
0xd8
);
//_MM_SHUFFLE(0,2,1,3));
// Put tmp0 =[Re(0,1,2,3) Re(8,9,10,11) Re(4,5,6,7) Re(12,13,14,15)]
simde__m256i
tmp0
=
simde_mm256_unpacklo_epi64
(
in0
,
in1
);
// Put tmp1 = [Im(0,1,2,3) Im(8,9,10,11) Im(4,5,6,7) Im(12,13,14,15)]
simde__m256i
tmp1
=
simde_mm256_unpackhi_epi64
(
in0
,
in1
);
*
out_re
=
simde_mm256_permute4x64_epi64
(
tmp0
,
0xd8
);
*
out_im
=
simde_mm256_permute4x64_epi64
(
tmp1
,
0xd8
);
}
openair1/PHY/TOOLS/tools_defs.h
View file @
6ac3a017
...
...
@@ -723,6 +723,8 @@ c32_t dot_product(const c16_t *x,
double
interp
(
double
x
,
double
*
xs
,
double
*
ys
,
int
count
);
void
simde_mm128_separate_real_imag_parts
(
simde__m128i
*
out_re
,
simde__m128i
*
out_im
,
simde__m128i
in0
,
simde__m128i
in1
);
void
simde_mm256_separate_real_imag_parts
(
simde__m256i
*
out_re
,
simde__m256i
*
out_im
,
simde__m256i
in0
,
simde__m256i
in1
);
#ifdef __cplusplus
}
...
...
openair1/PHY/defs_gNB.h
View file @
6ac3a017
...
...
@@ -793,7 +793,7 @@ typedef struct puschSymbolProc_s {
int
slot
;
int
startSymbol
;
int
numSymbols
;
int16_t
*
llr
;
int16_t
*
*
llr
;
int16_t
*
s
;
}
puschSymbolProc_t
;
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
6ac3a017
...
...
@@ -441,7 +441,7 @@ void nr_ulsch_procedures(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, int ULSCH
pusch_pdu
->
nrOfLayers
,
G
);
if
(
gNB
->
use_pusch_tp
==
0
)
{
//
if (gNB->use_pusch_tp == 0) {
nr_ulsch_layer_demapping
(
gNB
->
pusch_vars
[
ULSCH_id
].
llr
,
pusch_pdu
->
nrOfLayers
,
pusch_pdu
->
qam_mod_order
,
...
...
@@ -454,7 +454,7 @@ void nr_ulsch_procedures(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, int ULSCH
start_meas
(
&
gNB
->
ulsch_unscrambling_stats
);
nr_ulsch_unscrambling
(
gNB
->
pusch_vars
[
ULSCH_id
].
llr
,
G
,
pusch_pdu
->
data_scrambling_id
,
pusch_pdu
->
rnti
);
stop_meas
(
&
gNB
->
ulsch_unscrambling_stats
);
}
//
}
//----------------------------------------------------------
//--------------------- ULSCH decoding ---------------------
//----------------------------------------------------------
...
...
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