diff --git a/CMakeLists.txt b/CMakeLists.txt index faa3d9dc35..95232c3915 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 diff --git a/doc/Doxyfile b/doc/Doxyfile index 5f377964cf..0d53026705 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -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 \ diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c index 450408e794..6c5c37385b 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c @@ -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; } } diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c index 6537e4b840..3482d2a80a 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c @@ -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: diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c deleted file mode 100644 index 3a67306905..0000000000 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c +++ /dev/null @@ -1,329 +0,0 @@ -/* - * 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; ir = 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>2; // length in quad words (4 REs) - len2+=((len_mod4==0)?0:1); - - for (i=0; i>2; // length in quad words (4 REs) - len2+=((len_mod4==0)?0:1); - - for (i=0; i