Adapting PHY code to work with mex-functions:
1. Moving get_pmi into a separate file and making corresponding changes in CMakeLists.txt. 2. Creating PHY_MEX library with functions required for the receiver mex-functions. 3. Making necessary changes in defs_UE.h so that mex-functions do not complain about multiple LOG_ calls.
This commit is contained in:
@@ -515,12 +515,12 @@ set (CONFIG_SOURCES
|
|||||||
${CONFIG_ROOTDIR}/config_load_configmodule.c
|
${CONFIG_ROOTDIR}/config_load_configmodule.c
|
||||||
${CONFIG_ROOTDIR}/config_userapi.c
|
${CONFIG_ROOTDIR}/config_userapi.c
|
||||||
${CONFIG_ROOTDIR}/config_cmdline.c
|
${CONFIG_ROOTDIR}/config_cmdline.c
|
||||||
)
|
)
|
||||||
set (CONFIG_LIBCONFIG_SOURCES
|
set (CONFIG_LIBCONFIG_SOURCES
|
||||||
${CONFIG_ROOTDIR}/libconfig/config_libconfig.c
|
${CONFIG_ROOTDIR}/libconfig/config_libconfig.c
|
||||||
)
|
)
|
||||||
add_library(params_libconfig MODULE ${CONFIG_LIBCONFIG_SOURCES} )
|
add_library(params_libconfig MODULE ${CONFIG_LIBCONFIG_SOURCES} )
|
||||||
target_link_libraries(params_libconfig config)
|
target_link_libraries(params_libconfig config)
|
||||||
# shared library loader
|
# shared library loader
|
||||||
set (SHLIB_LOADER_SOURCES
|
set (SHLIB_LOADER_SOURCES
|
||||||
${OPENAIR_DIR}/common/utils/load_module_shlib.c
|
${OPENAIR_DIR}/common/utils/load_module_shlib.c
|
||||||
@@ -669,6 +669,7 @@ add_boolean_option(SMBV False "Rohde&Schwarz SMBV100A vector
|
|||||||
add_boolean_option(DEBUG_PHY False "Enable PHY layer debugging options")
|
add_boolean_option(DEBUG_PHY False "Enable PHY layer debugging options")
|
||||||
add_boolean_option(DEBUG_PHY_PROC False "Enable debugging of PHY layer procedures")
|
add_boolean_option(DEBUG_PHY_PROC False "Enable debugging of PHY layer procedures")
|
||||||
add_boolean_option(DEBUG_DLSCH False "Enable debugging of DLSCH physical layer channel")
|
add_boolean_option(DEBUG_DLSCH False "Enable debugging of DLSCH physical layer channel")
|
||||||
|
add_boolean_option(MEX False "Enabling compilation with mex")
|
||||||
|
|
||||||
##########################
|
##########################
|
||||||
# NAS LAYER OPTIONS
|
# NAS LAYER OPTIONS
|
||||||
@@ -989,7 +990,7 @@ set(SECU_CN_SRC
|
|||||||
)
|
)
|
||||||
add_library(SECU_CN ${SECU_CN_SRC})
|
add_library(SECU_CN ${SECU_CN_SRC})
|
||||||
|
|
||||||
# Physical Channel Procedures Scheduling
|
# Physical Channel Procedures Scheduling
|
||||||
################################"
|
################################"
|
||||||
set(SCHED_SRC
|
set(SCHED_SRC
|
||||||
${OPENAIR1_DIR}/SCHED/fapi_l1.c
|
${OPENAIR1_DIR}/SCHED/fapi_l1.c
|
||||||
@@ -1177,6 +1178,7 @@ set(PHY_SRC_UE
|
|||||||
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/sss_ue.c
|
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/sss_ue.c
|
||||||
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
|
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
|
||||||
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation.c
|
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation.c
|
||||||
|
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/get_pmi.c
|
||||||
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c
|
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c
|
||||||
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c
|
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_decoding.c
|
||||||
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c
|
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c
|
||||||
@@ -1225,6 +1227,27 @@ add_library(PHY ${PHY_SRC})
|
|||||||
add_library(PHY_UE ${PHY_SRC_UE})
|
add_library(PHY_UE ${PHY_SRC_UE})
|
||||||
add_library(PHY_RU ${PHY_SRC_RU})
|
add_library(PHY_RU ${PHY_SRC_RU})
|
||||||
|
|
||||||
|
#Library for mex functions
|
||||||
|
#########################3
|
||||||
|
set(PHY_MEX_UE
|
||||||
|
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c
|
||||||
|
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation.c
|
||||||
|
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
|
||||||
|
${OPENAIR1_DIR}/PHY/TOOLS/log2_approx.c
|
||||||
|
${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/lte_mcs.c
|
||||||
|
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/get_pmi.c
|
||||||
|
${OPENAIR1_DIR}/PHY/TOOLS/dB_routines.c
|
||||||
|
${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/pmch_common.c
|
||||||
|
${OPENAIR1_DIR}/PHY/TOOLS/cadd_vv.c
|
||||||
|
${OPENAIR1_DIR}/PHY/TOOLS/cmult_sv.c
|
||||||
|
${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/LTE_ESTIMATION/lte_ue_measurements.c
|
||||||
|
${OPENAIR2_DIR}/UTIL/LOG/log.c
|
||||||
|
)
|
||||||
|
add_library(PHY_MEX ${PHY_MEX_UE})
|
||||||
|
|
||||||
#Layer 2 library
|
#Layer 2 library
|
||||||
#####################
|
#####################
|
||||||
set(MAC_DIR ${OPENAIR2_DIR}/LAYER2/MAC)
|
set(MAC_DIR ${OPENAIR2_DIR}/LAYER2/MAC)
|
||||||
@@ -1821,7 +1844,7 @@ if(EXISTS "/usr/include/atlas/cblas.h" OR EXISTS "/usr/include/cblas.h")
|
|||||||
LINK_DIRECTORIES("/usr/lib/lapack")
|
LINK_DIRECTORIES("/usr/lib/lapack")
|
||||||
LINK_DIRECTORIES("/usr/lib64")
|
LINK_DIRECTORIES("/usr/lib64")
|
||||||
LINK_DIRECTORIES("/usr/lib64/atlas") #Added because atlas libraries in CentOS 7 are here!
|
LINK_DIRECTORIES("/usr/lib64/atlas") #Added because atlas libraries in CentOS 7 are here!
|
||||||
|
|
||||||
if(EXISTS "/usr/lib64/libblas.so" OR EXISTS "/usr/lib/libblas.so") #Case for CentOS7
|
if(EXISTS "/usr/lib64/libblas.so" OR EXISTS "/usr/lib/libblas.so") #Case for CentOS7
|
||||||
list(APPEND ATLAS_LIBRARIES blas)
|
list(APPEND ATLAS_LIBRARIES blas)
|
||||||
|
|
||||||
@@ -1934,7 +1957,7 @@ add_executable(lte-softmodem
|
|||||||
|
|
||||||
target_link_libraries (lte-softmodem
|
target_link_libraries (lte-softmodem
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2
|
RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2
|
||||||
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7
|
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
@@ -1972,7 +1995,7 @@ add_executable(lte-softmodem-nos1
|
|||||||
)
|
)
|
||||||
target_link_libraries (lte-softmodem-nos1
|
target_link_libraries (lte-softmodem-nos1
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB}
|
RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB}
|
||||||
${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7
|
${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
-Wl,--end-group z dl )
|
-Wl,--end-group z dl )
|
||||||
@@ -2010,7 +2033,7 @@ add_executable(lte-uesoftmodem
|
|||||||
|
|
||||||
target_link_libraries (lte-uesoftmodem
|
target_link_libraries (lte-uesoftmodem
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE
|
RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE
|
||||||
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7
|
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
@@ -2048,7 +2071,7 @@ add_executable(lte-uesoftmodem-nos1
|
|||||||
|
|
||||||
target_link_libraries (lte-uesoftmodem-nos1
|
target_link_libraries (lte-uesoftmodem-nos1
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB}
|
RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB}
|
||||||
${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7
|
${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
-Wl,--end-group z dl )
|
-Wl,--end-group z dl )
|
||||||
@@ -2166,7 +2189,7 @@ target_link_libraries (oaisim_nos1
|
|||||||
-Wl,--end-group z dl )
|
-Wl,--end-group z dl )
|
||||||
|
|
||||||
target_link_libraries (oaisim_nos1 ${LIBXML2_LIBRARIES} ${LAPACK_LIBRARIES})
|
target_link_libraries (oaisim_nos1 ${LIBXML2_LIBRARIES} ${LAPACK_LIBRARIES})
|
||||||
target_link_libraries (oaisim_nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES}
|
target_link_libraries (oaisim_nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES}
|
||||||
${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
|
${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
|
||||||
#Force link with forms, regardless XFORMS option
|
#Force link with forms, regardless XFORMS option
|
||||||
target_link_libraries (oaisim_nos1 forms)
|
target_link_libraries (oaisim_nos1 forms)
|
||||||
|
|||||||
@@ -165,49 +165,6 @@ int8_t delta_PUSCH_acc[4] = {-1,0,1,3};
|
|||||||
|
|
||||||
int8_t *delta_PUCCH_lut = delta_PUSCH_acc;
|
int8_t *delta_PUCCH_lut = delta_PUSCH_acc;
|
||||||
|
|
||||||
uint8_t get_pmi(uint8_t N_RB_DL, MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
MIMO_mode_t mode = dlsch_harq->mimo_mode;
|
|
||||||
uint32_t pmi_alloc = dlsch_harq->pmi_alloc;
|
|
||||||
*/
|
|
||||||
|
|
||||||
switch (N_RB_DL) {
|
|
||||||
case 6: // 1 PRB per subband
|
|
||||||
if (mode <= PUSCH_PRECODING1)
|
|
||||||
return((pmi_alloc>>(rb<<1))&3);
|
|
||||||
else
|
|
||||||
return((pmi_alloc>>rb)&1);
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
case 25: // 4 PRBs per subband
|
|
||||||
if (mode <= PUSCH_PRECODING1)
|
|
||||||
return((pmi_alloc>>((rb>>2)<<1))&3);
|
|
||||||
else
|
|
||||||
return((pmi_alloc>>(rb>>2))&1);
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 50: // 6 PRBs per subband
|
|
||||||
if (mode <= PUSCH_PRECODING1)
|
|
||||||
return((pmi_alloc>>((rb/6)<<1))&3);
|
|
||||||
else
|
|
||||||
return((pmi_alloc>>(rb/6))&1);
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 100: // 8 PRBs per subband
|
|
||||||
if (mode <= PUSCH_PRECODING1)
|
|
||||||
return((pmi_alloc>>((rb>>3)<<1))&3);
|
|
||||||
else
|
|
||||||
return((pmi_alloc>>(rb>>3))&1);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t check_phich_reg(LTE_DL_FRAME_PARMS *frame_parms,uint32_t kprime,uint8_t lprime,uint8_t mi)
|
uint32_t check_phich_reg(LTE_DL_FRAME_PARMS *frame_parms,uint32_t kprime,uint8_t lprime,uint8_t mi)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -330,7 +287,7 @@ void conv_eMTC_rballoc(uint16_t resource_block_coding,
|
|||||||
uint32_t N_RB_DL,
|
uint32_t N_RB_DL,
|
||||||
uint32_t *rb_alloc) {
|
uint32_t *rb_alloc) {
|
||||||
|
|
||||||
|
|
||||||
int narrowband = resource_block_coding>>5;
|
int narrowband = resource_block_coding>>5;
|
||||||
int RIV = resource_block_coding&31;
|
int RIV = resource_block_coding&31;
|
||||||
int N_NB_DL = N_RB_DL/6;
|
int N_NB_DL = N_RB_DL/6;
|
||||||
@@ -346,7 +303,7 @@ void conv_eMTC_rballoc(uint16_t resource_block_coding,
|
|||||||
rb_alloc[2] = 0;
|
rb_alloc[2] = 0;
|
||||||
rb_alloc[3] = 0;
|
rb_alloc[3] = 0;
|
||||||
rb_alloc[ind] = alloc<<ind_mod;
|
rb_alloc[ind] = alloc<<ind_mod;
|
||||||
if (ind_mod > 26) rb_alloc[ind+1] = alloc>>(6-(ind_mod-26));
|
if (ind_mod > 26) rb_alloc[ind+1] = alloc>>(6-(ind_mod-26));
|
||||||
}
|
}
|
||||||
|
|
||||||
void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t *rb_alloc2)
|
void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t *rb_alloc2)
|
||||||
@@ -410,7 +367,7 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t
|
|||||||
// bit mask across
|
// bit mask across
|
||||||
if ((rb_alloc2[0]>>31)==1)
|
if ((rb_alloc2[0]>>31)==1)
|
||||||
rb_alloc2[1] |= 1;
|
rb_alloc2[1] |= 1;
|
||||||
|
|
||||||
if ((rb_alloc&1) != 0)
|
if ((rb_alloc&1) != 0)
|
||||||
rb_alloc2[1] |= (3<<16);
|
rb_alloc2[1] |= (3<<16);
|
||||||
break;
|
break;
|
||||||
@@ -420,7 +377,7 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t
|
|||||||
for (i=0; i<25; i++) {
|
for (i=0; i<25; i++) {
|
||||||
if ((rb_alloc&(1<<(24-i))) != 0)
|
if ((rb_alloc&(1<<(24-i))) != 0)
|
||||||
rb_alloc2[(4*i)>>5] |= (0xf<<((4*i)%32));
|
rb_alloc2[(4*i)>>5] |= (0xf<<((4*i)%32));
|
||||||
|
|
||||||
// printf("rb_alloc2[%d] (type 0) %x (%d)\n",(4*i)>>5,rb_alloc2[(4*i)>>5],rb_alloc&(1<<i));
|
// printf("rb_alloc2[%d] (type 0) %x (%d)\n",(4*i)>>5,rb_alloc2[(4*i)>>5],rb_alloc&(1<<i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* 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 "PHY/LTE_UE_TRANSPORT/transport_proto_ue.h"
|
||||||
|
|
||||||
|
uint8_t get_pmi(uint8_t N_RB_DL, MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
MIMO_mode_t mode = dlsch_harq->mimo_mode;
|
||||||
|
uint32_t pmi_alloc = dlsch_harq->pmi_alloc;
|
||||||
|
*/
|
||||||
|
|
||||||
|
switch (N_RB_DL) {
|
||||||
|
case 6: // 1 PRB per subband
|
||||||
|
if (mode <= PUSCH_PRECODING1)
|
||||||
|
return((pmi_alloc>>(rb<<1))&3);
|
||||||
|
else
|
||||||
|
return((pmi_alloc>>rb)&1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
case 25: // 4 PRBs per subband
|
||||||
|
if (mode <= PUSCH_PRECODING1)
|
||||||
|
return((pmi_alloc>>((rb>>2)<<1))&3);
|
||||||
|
else
|
||||||
|
return((pmi_alloc>>(rb>>2))&1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 50: // 6 PRBs per subband
|
||||||
|
if (mode <= PUSCH_PRECODING1)
|
||||||
|
return((pmi_alloc>>((rb/6)<<1))&3);
|
||||||
|
else
|
||||||
|
return((pmi_alloc>>(rb/6))&1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 100: // 8 PRBs per subband
|
||||||
|
if (mode <= PUSCH_PRECODING1)
|
||||||
|
return((pmi_alloc>>((rb>>3)<<1))&3);
|
||||||
|
else
|
||||||
|
return((pmi_alloc>>(rb>>3))&1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
+35
-3
@@ -69,6 +69,38 @@
|
|||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include "assertions.h"
|
#include "assertions.h"
|
||||||
|
|
||||||
|
#ifdef MEX
|
||||||
|
#include "mex.h"
|
||||||
|
# define msg mexPrintf
|
||||||
|
# undef LOG_D
|
||||||
|
# undef LOG_E
|
||||||
|
# undef LOG_I
|
||||||
|
# undef LOG_N
|
||||||
|
# undef LOG_T
|
||||||
|
# undef LOG_W
|
||||||
|
# undef LOG_M
|
||||||
|
# define LOG_D(x, ...) mexPrintf(__VA_ARGS__)
|
||||||
|
# define LOG_E(x, ...) mexPrintf(__VA_ARGS__)
|
||||||
|
# define LOG_I(x, ...) mexPrintf(__VA_ARGS__)
|
||||||
|
# define LOG_N(x, ...) mexPrintf(__VA_ARGS__)
|
||||||
|
# define LOG_T(x, ...) mexPrintf(__VA_ARGS__)
|
||||||
|
# define LOG_W(x, ...) mexPrintf(__VA_ARGS__)
|
||||||
|
# define LOG_M(x, ...) mexPrintf(__VA_ARGS__)
|
||||||
|
#else
|
||||||
|
# ifdef OPENAIR2
|
||||||
|
# if ENABLE_RAL
|
||||||
|
# include "collection/hashtable/hashtable.h"
|
||||||
|
# include "COMMON/ral_messages_types.h"
|
||||||
|
# include "UTIL/queue.h"
|
||||||
|
# endif
|
||||||
|
# include "log.h"
|
||||||
|
# define msg(aRGS...) LOG_D(PHY, ##aRGS)
|
||||||
|
# else
|
||||||
|
# define msg printf
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Context data structure for RX/TX portion of subframe processing
|
/// Context data structure for RX/TX portion of subframe processing
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -273,13 +305,13 @@ typedef struct {
|
|||||||
/// - first index: rx antenna [0..nb_antennas_rx[
|
/// - first index: rx antenna [0..nb_antennas_rx[
|
||||||
/// - second index: symbol [0..28*ofdm_symbol_size[
|
/// - second index: symbol [0..28*ofdm_symbol_size[
|
||||||
int32_t **rxdataF;
|
int32_t **rxdataF;
|
||||||
|
|
||||||
/// \brief Hold the channel estimates in frequency domain.
|
/// \brief Hold the channel estimates in frequency domain.
|
||||||
/// - first index: eNB id [0..6] (hard coded)
|
/// - first index: eNB id [0..6] (hard coded)
|
||||||
/// - second index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
/// - second index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
||||||
/// - third index: samples? [0..symbols_per_tti*(ofdm_symbol_size+LTE_CE_FILTER_LENGTH)[
|
/// - third index: samples? [0..symbols_per_tti*(ofdm_symbol_size+LTE_CE_FILTER_LENGTH)[
|
||||||
int32_t **dl_ch_estimates[7];
|
int32_t **dl_ch_estimates[7];
|
||||||
|
|
||||||
/// \brief Hold the channel estimates in time domain (used for tracking).
|
/// \brief Hold the channel estimates in time domain (used for tracking).
|
||||||
/// - first index: eNB id [0..6] (hard coded)
|
/// - first index: eNB id [0..6] (hard coded)
|
||||||
/// - second index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
/// - second index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
||||||
@@ -848,7 +880,7 @@ typedef struct {
|
|||||||
|
|
||||||
/// RF and Interface devices per CC
|
/// RF and Interface devices per CC
|
||||||
|
|
||||||
openair0_device rfdevice;
|
openair0_device rfdevice;
|
||||||
} PHY_VARS_UE;
|
} PHY_VARS_UE;
|
||||||
|
|
||||||
/* this structure is used to pass both UE phy vars and
|
/* this structure is used to pass both UE phy vars and
|
||||||
|
|||||||
Reference in New Issue
Block a user