Merge branch 'enhancement-rfsim' into ru_rau_enhancement
Conflicts: cmake_targets/build_oai openair1/PHY/LTE_ESTIMATION/lte_sync_time.c openair1/PHY/LTE_TRANSPORT/dci_tools.c openair1/PHY/LTE_TRANSPORT/if4_tools.c openair1/PHY/LTE_TRANSPORT/prach.c openair1/PHY/defs_eNB.h openair1/PHY/impl_defs_lte.h openair2/ENB_APP/enb_config.c openair2/LAYER2/MAC/eNB_scheduler.c openair2/LAYER2/MAC/eNB_scheduler_ulsch.c targets/RT/USER/lte-enb.c targets/RT/USER/lte-ru.c targets/SIMU/USER/channel_sim.c targets/SIMU/USER/oaisim.c targets/SIMU/USER/oaisim_config.c targets/SIMU/USER/oaisim_functions.c
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,503 +0,0 @@
|
||||
# Include some shared directives
|
||||
include $(OPENAIR_TARGETS)/Makerules
|
||||
|
||||
default: oaisim
|
||||
|
||||
include $(OPENAIR_TARGETS)/Makefile.common
|
||||
|
||||
TOP_DIR = $(OPENAIR1_DIR)
|
||||
OPENAIR1_TOP = $(OPENAIR1_DIR)
|
||||
OPENAIR2_TOP = $(OPENAIR2_DIR)
|
||||
OPENAIR3_TOP = $(OPENAIR3_DIR)
|
||||
OPENAIR3 = $(OPENAIR3_DIR)
|
||||
|
||||
ifeq ($(DEBUG),1)
|
||||
CFLAGS += -g -ggdb -DDEBUG_PHY -DDEBUG_MEAS
|
||||
CFLAGS += -DRRC_MSG_PRINT
|
||||
CFLAGS += -DPDCP_MSG_PRINT
|
||||
CFLAGS += -DTRACE_RLC_UM_PDU
|
||||
CFLAGS += -DTRACE_RLC_AM_PDU
|
||||
else
|
||||
CFLAGS += -DTRACE_RLC_UM_PDU
|
||||
CFLAGS += -DTRACE_RLC_AM_PDU
|
||||
endif
|
||||
|
||||
ifeq ($(MSG_PRINT),1)
|
||||
CFLAGS += -DRRC_MSG_PRINT
|
||||
CFLAGS += -DPDCP_MSG_PRINT
|
||||
endif
|
||||
|
||||
|
||||
CFLAGS += -Wpointer-sign
|
||||
CFLAGS += -DNB_ANTENNAS_RX=2 -DNB_ANTENNAS_TX=2 $(CPUFLAGS) -I/usr/include/X11 #-Wno-packed-bitfield-compat
|
||||
|
||||
ASN1_MSG_INC = $(OPENAIR2_DIR)/RRC/LITE/MESSAGES
|
||||
|
||||
CFLAGS += -DOPENAIR_LTE #-DOFDMA_ULSCH -DIFFT_FPGA -DIFFT_FPGA_UE
|
||||
CFLAGS += -DMAC_CONTEXT=1 -DPHY_CONTEXT=1 #-DRLC_UM_TEST_TRAFFIC=1
|
||||
#CFLAGS += -DLLR8
|
||||
CFLAGS += -DPACKAGE_NAME='"oaisim"'
|
||||
|
||||
ifndef OPENAIR2
|
||||
OPENAIR2=1
|
||||
endif
|
||||
|
||||
ifdef DEBUG
|
||||
DISABLE_XER_PRINT=0
|
||||
MSG_PRINT=1
|
||||
endif
|
||||
|
||||
ifeq ($(LOCALIZATION), 1)
|
||||
CFLAGS += -DLOCALIZATION
|
||||
endif
|
||||
|
||||
ifeq ($(LINUX_LIST), 1)
|
||||
CFLAGS += -DLINUX_LIST
|
||||
endif
|
||||
|
||||
ifdef TRAFFIC_TM5
|
||||
CFLAGS += -DRLC_UM_TEST_TRAFFIC=1 #-DFULL_BUFFER=1
|
||||
endif
|
||||
|
||||
# activate OCG and libxml only under linux
|
||||
ifeq ($(linux),1)
|
||||
CFLAGS += $(LIBXML2_CFLAGS) -L/usr/local/lib -I/usr/include/atlas -L/usr/X11R6/lib
|
||||
OCG_FLAG =1
|
||||
CFLAGS += -DLINUX
|
||||
endif
|
||||
|
||||
ifdef SMBV
|
||||
CFLAGS += -DSMBV
|
||||
endif
|
||||
|
||||
ifeq ($(XFORMS), 1)
|
||||
CFLAGS += -DXFORMS
|
||||
endif
|
||||
|
||||
ifdef DB
|
||||
# Check if libmysqlclient is installed and use it if found to store simulation data for postprocessing
|
||||
ENABLE_DB = $(shell if [ `dpkg -l | grep libmysqlclient -c` = "0" ]; then echo "0" ; else echo "1" ; fi )
|
||||
ifeq ($(ENABLE_DB), 1)
|
||||
CFLAGS +=-I/usr/include/mysql -L/usr/lib/mysql -DENABLE_DB_STATS
|
||||
DB_LDFLAGS = -lmysqlclient
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef PRINT_STATS
|
||||
CFLAGS += -DPRINT_STATS
|
||||
endif
|
||||
|
||||
ifndef rrc_cellular
|
||||
rrc_cellular = 0
|
||||
rrc_cellular_eNB = 0
|
||||
rrc_cellular_UE = 0
|
||||
else
|
||||
ifeq ($(eNB_flag),1)
|
||||
rrc_cellular_eNB=1
|
||||
endif
|
||||
ifeq ($(UE_flag),1)
|
||||
rrc_cellular_UE=1
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef LS
|
||||
CFLAGS += -DLARGE_SCALE
|
||||
endif
|
||||
|
||||
# ln -sf EUTRA-RRC-Definitions-a20.asn EUTRA-RRC-Definitions.asn
|
||||
# make cleanasn1
|
||||
#make all Rel10=1
|
||||
|
||||
ifdef CBA
|
||||
CFLAGS += -DRel10
|
||||
CFLAGS += -DCBA
|
||||
$(info "Rel10=1 CBA=1")
|
||||
|
||||
else ifdef Rel10
|
||||
CFLAGS += -DRel10
|
||||
$(info "Rel10=1")
|
||||
else # default is rel 8
|
||||
$(info "Rel8=1")
|
||||
CFLAGS += -DRel8
|
||||
endif
|
||||
|
||||
#CFLAGS += -DMAX_NUM_CCs=1
|
||||
|
||||
ifeq ($(RLC_STOP_ON_LOST_PDU), 1)
|
||||
CFLAGS += -DRLC_STOP_ON_LOST_PDU
|
||||
endif
|
||||
ifeq ($(STOP_ON_IP_TRAFFIC_OVERLOAD), 1)
|
||||
CFLAGS += -DSTOP_ON_IP_TRAFFIC_OVERLOAD
|
||||
endif
|
||||
|
||||
|
||||
ifeq ($(USE_3GPP_ADDR_AS_LINK_ADDR), 1)
|
||||
CFLAGS += -DUSE_3GPP_ADDR_AS_LINK_ADDR
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
|
||||
ifeq ($(LINK_ENB_PDCP_TO_IP_DRIVER), 1)
|
||||
CFLAGS += -DPDCP_USE_NETLINK -DLINUX
|
||||
NAS_FLAG=1
|
||||
endif
|
||||
|
||||
ifeq ($(LINK_ENB_PDCP_TO_GTPV1U), 1)
|
||||
CFLAGS += -DLINK_ENB_PDCP_TO_GTPV1U
|
||||
endif
|
||||
|
||||
ifdef TEST_OMG
|
||||
CFLAGS += -DTEST_OMG
|
||||
#CFLAGS += -DDEBUG_OMG
|
||||
endif
|
||||
# after the execution, a profiling output "gmon.out" will be created,
|
||||
#then we need to run "gprof ./oaisim > gmon.txt" in the same directory as "gmon.out"
|
||||
# you could also use the script "grpof2dot.py gmon.txt" for visual diagrams
|
||||
ifdef GPROF
|
||||
CFLAGS += -pg
|
||||
endif
|
||||
|
||||
#require kernel patch for oai driver to enable address autoconfiguration (IPv6 only)
|
||||
ifdef ADDCONF
|
||||
CFLAGS+=-DADDRCONF
|
||||
endif
|
||||
|
||||
ifdef OAI_NW_DRIVER_TYPE_ETHERNET
|
||||
CFLAGS+=-DOAI_NW_DRIVER_TYPE_ETHERNET
|
||||
endif
|
||||
|
||||
CFLAGS += -DENABLE_USE_CPU_EXECUTION_TIME
|
||||
ifndef DISABLE_XER_PRINT
|
||||
CFLAGS += -DXER_PRINT
|
||||
endif
|
||||
|
||||
ifdef SECU
|
||||
ifeq ($(NETTLE_FOUND), 0)
|
||||
$(warning "Nettle library >= 2.5 is not installed on your system, nettle-dev lib needed, continuing with security disabled")
|
||||
SECU=0
|
||||
else
|
||||
ifeq ($(OPENSSL_FOUND), 0)
|
||||
$(warning "openssl library is not installed on your system, openssl lib needed, continuing with security disabled")
|
||||
SECU=0
|
||||
else
|
||||
CFLAGS += -DENABLE_SECURITY
|
||||
LIBS += $(OPENSSL_LIBS) $(NETTLE_LIBS)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
include $(OPENAIR1_DIR)/PHY/Makefile.inc
|
||||
include $(OPENAIR1_DIR)/SCHED/Makefile.inc
|
||||
include $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc
|
||||
include $(OPENAIR2_DIR)/LAYER2/Makefile.inc
|
||||
include $(OPENAIR1_DIR)/SIMULATION/ETH_TRANSPORT/Makefile.inc
|
||||
include $(OPENAIR2_DIR)/RRC/NAS/Makefile.inc
|
||||
include $(OPENAIR2_DIR)/UTIL/Makefile.inc
|
||||
include $(OPENAIR3_DIR)/RAL-LTE/Makefile.inc
|
||||
include $(OPENAIR2_DIR)/ENB_APP/Makefile.inc
|
||||
|
||||
|
||||
INCLUDES += -I$(TOP_DIR)
|
||||
INCLUDES += $(L2_incl)
|
||||
INCLUDES += $(ENB_APP_incl)
|
||||
INCLUDES += $(UTIL_incl)
|
||||
INCLUDES += $(UTILS_incl)
|
||||
INCLUDES += -I$(ASN1_MSG_INC)
|
||||
INCLUDES += -I$(COMMON_UTILS_DIR)/collection
|
||||
|
||||
SIMULATION_OBJS = $(TOP_DIR)/SIMULATION/TOOLS/gauss.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/random_channel.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/rangen_double.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/taus.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/multipath_channel.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/abstraction.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/rf.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/adc.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/dac.o
|
||||
|
||||
ASN1_RRC_MSG_OBJS1=$(addprefix $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/, $(ASN1_MSG_OBJS))
|
||||
|
||||
OAISIM_OBJS_COMMON = $(OPENAIR_TARGETS)/SIMU/USER/channel_sim.o
|
||||
OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/init_lte.o
|
||||
OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/oaisim_config.o
|
||||
OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/sinr_sim.o
|
||||
OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/cor_SF_sim.o
|
||||
OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/oaisim_functions.o
|
||||
OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/event_handler.o
|
||||
|
||||
OAISIM_OBJS = $(OPENAIR_TARGETS)/SIMU/USER/oaisim.o
|
||||
|
||||
ifeq ($(XFORMS), 1)
|
||||
TOOLS_OBJS += $(OPENAIR1_DIR)/PHY/TOOLS/lte_phy_scope.o
|
||||
endif
|
||||
|
||||
ifdef PAD
|
||||
CFLAGS += -DPAD
|
||||
endif
|
||||
|
||||
OAISIM_PAD_OBJS = $(OPENAIR_TARGETS)/SIMU/USER/discrete_event_generator.o
|
||||
OAISIM_PAD_OBJS += $(OPENAIR_TARGETS)/SIMU/USER/threadpool.o
|
||||
OAISIM_PAD_OBJS += $(OPENAIR_TARGETS)/SIMU/USER/oaisim_pad.o
|
||||
#deactivate the log offloading
|
||||
ifndef LOG_THREAD
|
||||
CFLAGS +=-DLOG_NO_THREAD
|
||||
endif
|
||||
|
||||
ifdef PROC
|
||||
INT_OBJS += $(OPENAIR_TARGETS)/SIMU/PROC/channel_sim_proc.o
|
||||
INT_OBJS += $(OPENAIR_TARGETS)/SIMU/PROC/Process.o
|
||||
CFLAGS += -DPROC
|
||||
endif
|
||||
|
||||
CFLAGS += -DENABLE_VCD_FIFO
|
||||
CFLAGS += -DENABLE_NEW_MULTICAST
|
||||
ifdef NAS
|
||||
CFLAGS += -DPDCP_USE_NETLINK_QUEUES
|
||||
endif
|
||||
# CFLAGS += -DENABLE_LOG_FIFO
|
||||
|
||||
# Check if libpgm is installed and use it if found instead of the unreliable
|
||||
# multicast
|
||||
ifeq ($(PGM_FOUND), 1)
|
||||
CFLAGS += $(PGM_CFLAGS)
|
||||
LIBS += $(PGM_LIBS)
|
||||
endif
|
||||
|
||||
OBJ += $(PHY_OBJS) $(SIMULATION_OBJS) $(ETHERNET_TRANSPORT_OBJS) $(TOOLS_OBJS) $(SCHED_OBJS) $(STATS_OBJS) $(NAS_OBJS)
|
||||
OBJ += $(INT_OBJS) $(UTIL_OBJ) $(UTILS_OBJS) $(OAISIM_OBJS_COMMON) $(ENB_APP_OBJS)
|
||||
ifeq ($(OPENAIR2),1)
|
||||
OBJ += $(L2_OBJS)
|
||||
endif
|
||||
|
||||
LFDS_OBJ_DIR = $(subst $(OPENAIR_DIR),$(OBJS_DIR),$(LFDS_DIR))
|
||||
LFDS_LIB = $(LFDS_OBJ_DIR)/bin/liblfds611.a
|
||||
LIBS += $(LFDS_LIB)
|
||||
SHARED_DEPENDENCIES += $(LFDS_LIB)
|
||||
|
||||
all: oaisim
|
||||
|
||||
pad: oaisim_pad
|
||||
|
||||
userclean: cleanall oaisim
|
||||
|
||||
objsdir:
|
||||
@if [ ! -d $(OBJS_DIR) ]; then mkdir -p $(OBJS_DIR); fi
|
||||
|
||||
printvars:
|
||||
@echo rrc_cellular variable is $(rrc_cellular)
|
||||
@echo EXTRA_CFLAGS = $(EXTRA_CFLAGS)
|
||||
@echo OAI Config generator is $(OCG_FLAG)
|
||||
@echo OAI NETLINK FLAG is $(NAS_FLAG)
|
||||
@echo SSE3 proc is $(SSE3PROC)
|
||||
@echo L2 objs are $(L2_OBJS)
|
||||
@echo eNB_flag is $(eNB_flag)
|
||||
@echo UE_flag is $(UE_flag)
|
||||
@echo S1AP objs: $(S1AP_BUILT_OBJS)
|
||||
@echo X2AP objs: $(X2AP_BUILT_OBJS)
|
||||
@echo CFLAGS: $(CFLAGS)
|
||||
@echo Enable PGM: $(PGM_FOUND)
|
||||
|
||||
##UTIL_YAC_C = $(OPENAIR2_TOP)/UTIL/enb_parser.o
|
||||
##$(UTIL_LEX_C) = $(subst $(OPENAIR_DIR), $(OBJS_DIR), $(OBJ) $(OAISIM_OBJS) $(ASN1_RRC_MSG_OBJS1))
|
||||
|
||||
|
||||
OAISIM_COMPILED_OBJECTS = $(subst $(OPENAIR_DIR), $(OBJS_DIR), $(OBJ) $(OAISIM_OBJS) $(ASN1_RRC_MSG_OBJS1))
|
||||
|
||||
-include $(ITTI_MESSAGES_XML:.xml=.d)
|
||||
-include $(OAISIM_PAD_OBJS:.o=.d)
|
||||
-include $(OAISIM_COMPILED_OBJECTS:.o=.d)
|
||||
|
||||
ifdef ENABLE_ITTI
|
||||
$(OAISIM_COMPILED_OBJECTS): $(ITTI_MESSAGES_H)
|
||||
|
||||
oaisim_pad.o: $(ITTI_MESSAGES_H)
|
||||
endif
|
||||
|
||||
$(OAISIM_COMPILED_OBJECTS): | objsdir
|
||||
|
||||
.SECONDEXPANSION:
|
||||
$(OAISIM_COMPILED_OBJECTS) $(OAISIM_PAD_OBJS): %.o : $$(subst $(OBJS_DIR), $(OPENAIR_DIR), $$*.c)
|
||||
@echo Compiling $<
|
||||
@if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi;
|
||||
@$(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) -DPHY_CONTEXT=1 $(INCLUDES) -o $@ $<
|
||||
@$(CC) -MM $(CFLAGS) $(EXTRA_CFLAGS) -DPHY_CONTEXT=1 $(INCLUDES) $< > $*.d
|
||||
@mv -f $*.d $*.d.tmp
|
||||
@sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d
|
||||
@sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \
|
||||
sed -e 's/^ *//' -e 's/$$/:/' >> $*.d
|
||||
@rm -f $*.d.tmp
|
||||
|
||||
$(LFDS_LIB):
|
||||
@if [ ! -d $(LFDS_OBJ_DIR)/bin ]; then mkdir -p $(LFDS_OBJ_DIR)/bin; fi;
|
||||
@if [ ! -d $(LFDS_OBJ_DIR)/obj ]; then mkdir -p $(LFDS_OBJ_DIR)/obj; fi;
|
||||
$(MAKE) -C $(LFDS_DIR) -f makefile.linux OUTDIR=$(LFDS_OBJ_DIR)
|
||||
|
||||
oaisim_pad: $(OBJ) $(OAISIM_PAD_OBJS) $(ASN1_RRC_MSG_OBJS1)
|
||||
@echo "Linking oaisim_pad ..."
|
||||
@$(MPICC) $(INCLUDES) $(S1AP_Incl) $(X2AP_Incl) -o oaisim_pad $(CFLAGS) $(EXTRA_CFLAGS) $(OBJ) $(OAISIM_PAD_OBJS) $(ASN1_RRC_MSG_OBJS1) \
|
||||
-lpthread -llapack_atlas -lforms -lrt -lconfig $(LIBS) $(DB_LDFLAGS)
|
||||
|
||||
oaisim: $(OAISIM_COMPILED_OBJECTS) $(SHARED_DEPENDENCIES)
|
||||
@echo "Linking oaisim ..."
|
||||
@$(CC) $(INCLUDES) $(S1AP_Incl) $(X2AP_Incl) -o oaisim $(CFLAGS) $(EXTRA_CFLAGS) $(OAISIM_COMPILED_OBJECTS) \
|
||||
-lpthread -llapack_atlas -lforms -lrt -lconfig $(LIBS) $(DB_LDFLAGS)
|
||||
|
||||
ifeq ($(rrc_cellular_eNB),1)
|
||||
mv oaisim oaisim_eNB
|
||||
endif
|
||||
ifeq ($(rrc_cellular_UE),1)
|
||||
mv oaisim oaisim_UE
|
||||
endif
|
||||
|
||||
oaisimCROWN: $(OBJ) $(ASN1_RRC_MSG_OBJS1) oaisimCROWN.c
|
||||
@echo "Compiling oaisimCROWN.c ..."
|
||||
@$(CC) oaisimCROWN.c $(INCLUDES) $(S1AP_Incl) $(X2AP_Incl) -o oaisimCROWN $(CFLAGS) $(EXTRA_CFLAGS) $(OBJ) $(ASN1_RRC_MSG_OBJS1) -lm -lblas -lpthread -llapack_atlas -lforms $(LIBXML2_LIBS) -lX11 -lXpm -lrt -lconfig
|
||||
|
||||
oai_nw_drv:
|
||||
(cd $(OPENAIR2_DIR) && $(MAKE) oai_nw_drv.ko)
|
||||
(cp $(OPENAIR2_DIR)/NAS/DRIVER/LITE/oai_nw_drv.ko . )
|
||||
oai_nw_drv_clean:
|
||||
(cd $(OPENAIR2_DIR)/NAS/DRIVER/LITE && $(MAKE) clean)
|
||||
nasmesh_fix:
|
||||
(cd $(OPENAIR2_DIR)/NETWORK_DRIVER/MESH/RB_TOOL && $(MAKE) clean && $(MAKE))
|
||||
(cd $(OPENAIR2_DIR) && $(MAKE) clean && $(MAKE) nasmesh_netlink_address_fix.ko)
|
||||
nasmesh_fix_uninstall:
|
||||
(sudo rmmod nasmesh.ko)
|
||||
nasmesh_fix_install:
|
||||
(sudo insmod $(OPENAIR2_DIR)/NETWORK_DRIVER/MESH/nasmesh.ko)
|
||||
nasmesh_fix_reinstall:
|
||||
(sudo rmmod nasmesh.ko)
|
||||
(sudo insmod $(OPENAIR2_DIR)/NETWORK_DRIVER/MESH/nasmesh.ko)
|
||||
nasmesh_nl:
|
||||
(cd $(OPENAIR2_DIR)/NETWORK_RIVER/MESH/RB_TOOL && $(MAKE))
|
||||
(cd $(OPENAIR2_DIR) && $(MAKE) nasmesh_netlink.ko)
|
||||
(sudo insmod $(OPENAIR2_DIR)/NETWORK_DRIVER/MESH/nasmesh.ko)
|
||||
rb_tool:
|
||||
(cd $(OPENAIR2_DIR)/NETWORK_DRIVER/MESH/RB_TOOL && $(MAKE))
|
||||
|
||||
nasmesh_install:
|
||||
(sudo rmmod nasmesh)
|
||||
(sudo insmod $(OPENAIR2_DIR)/NAS/DRIVER/MESH/nasmesh.ko)
|
||||
nasmesh_clean:
|
||||
(cd $(OPENAIR2_DIR) && $(MAKE) clean)
|
||||
nas_sim_mt_cellular:
|
||||
( cd $(OPENAIR2_DIR)/NAS/SIMU_CELLULAR && make nasmt_sim CELLULAR=1 NO_RRM=1)
|
||||
|
||||
nas_sim_rg_cellular:
|
||||
( cd $(OPENAIR2_DIR)/NAS/SIMU_CELLULAR && make nasrg_sim MASTER=1 CELLULAR=1 NO_RRM=1)
|
||||
|
||||
rrm_std_cellular:
|
||||
( cd $(OPENAIR2_DIR)/NAS/SIMU_CELLULAR && make cell_rrm CELL_RRM=1 CELLULAR=1 NO_RRM=1)
|
||||
|
||||
cleanall: common-cleanall clean cleanasn1
|
||||
|
||||
cleanalmostall: clean
|
||||
rm -f $(ASN1_RRC_MSG_OBJS1)
|
||||
|
||||
clean: common-clean
|
||||
@$(RM_F_V) oaisim
|
||||
@$(RM_F_V) oaisim_pad
|
||||
# @$(RM_F_V) $(ITTI_MESSAGES_H) $(ITTI_MESSAGES_XML) $(ITTI_MESSAGES_XML:.xml=.d)
|
||||
@$(RM_F_V) $(OAISIM_PAD_OBJS)
|
||||
@$(RM_F_V) $(OAISIM_PAD_OBJS:.o=.d)
|
||||
@$(RM_F_V) $(OAISIM_COMPILED_OBJECTS)
|
||||
@$(RM_F_V) $(OAISIM_COMPILED_OBJECTS:.o=.d)
|
||||
@$(RM_F_V) *.exe*
|
||||
@$(RM_F_V) $(ASN1_MSG_INC)/asn1_msg.o
|
||||
|
||||
cleanl1:
|
||||
@$(RM_F_V) LOG_THREAD oaisim
|
||||
@$(RM_F_V) $(PHY_OBJS) $(SCHED_OBJS)
|
||||
@$(RM_F_V) *.o
|
||||
@$(RM_F_V) *.exe
|
||||
|
||||
cleanl2:
|
||||
@$(RM_F_V) $(L2_OBJS)
|
||||
@$(RM_F_V) $(ASN1_MSG_INC)/asn1_msg.o
|
||||
|
||||
cleanasn1:
|
||||
@$(RM_F_V) $(ASN1_RRC_MSG_OBJS1)
|
||||
$(shell cd $(OPENAIR2_DIR)/RRC/LITE/MESSAGES ; rm -f $(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS) *.o *.d)
|
||||
@$(RM_F_V) $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.am.sample
|
||||
@$(RM_F_V) $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc.generated
|
||||
@$(RM_F_V) $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1c/ASN1_files/.lock-rel*
|
||||
|
||||
cleancell:
|
||||
@$(RM_F_V) $(OPENAIR2_DIR)/RRC/CELLULAR/*.o
|
||||
@$(RM_F_V) $(OPENAIR2_DIR)/RRC/CELLULAR/*.d
|
||||
@$(RM_F_V) $(OPENAIR2_DIR)/RRC/L2_INTERFACE/*.o
|
||||
@$(RM_F_V) $(OPENAIR2_DIR)/RRC/L2_INTERFACE/*.d
|
||||
@$(RM_F_V) $(OPENAIR2_DIR)/NAS/SIMU_CELLULAR/*.o
|
||||
@$(RM_F_V) $(OPENAIR2_DIR)/NAS/SIMU_CELLULAR/*.d
|
||||
|
||||
cleanlfds:
|
||||
$(MAKE) -C $(LFDS_DIR) -f makefile.linux clean
|
||||
|
||||
cppcheck:
|
||||
@echo "cppcheck oaisim ..."
|
||||
cppcheck $(INCLUDES) ${OBJ:.o=.c} ${OAISIM_OBJS,.o=.c} ${ASN1_RRC_MSG_OBJS1,.o=.c}
|
||||
print:
|
||||
@echo "OBJ " $(OBJ)
|
||||
@echo "OAISIM_OBJS " $(OAISIM_OBJS)
|
||||
@echo "OAISIM_PAD_OBJS " $(OAISIM_PAD_OBJS)
|
||||
@echo "OCG_FLAG are " $(OCG_FLAG)
|
||||
@echo "CFLAGS are " $(CFLAGS)
|
||||
@echo "EXTRA_CFLAGS are" $(EXTRA_CFLAGS)
|
||||
@echo "COMMON_CFLAGS are" $(COMMON_CFLAGS)
|
||||
@echo "L2 includes are" $(L2_incl)
|
||||
@echo "INCLUDES are" $(INCLUDES)
|
||||
@echo "S1AP Includes are" $(S1AP_Incl)
|
||||
@echo "X2AP Includes are" $(X2AP_Incl)
|
||||
@echo "TOP_DIR Include is" I$(TOP_DIR)
|
||||
@echo "UTIL includes are" $(UTIL_incl)
|
||||
@echo "UTILS includes are" $(UTILS_incl)
|
||||
@echo "IS_REL8 is " $(IS_REL8)
|
||||
@echo "IS_REL10 is " $(IS_REL10)
|
||||
@echo "ENABLE_DB is " $(ENABLE_DB)
|
||||
@echo "Libs are" $(LIBS)
|
||||
@echo "NAS" $(NAS)
|
||||
|
||||
showcflags:
|
||||
@echo oaisim cflags: $(CFLAGS)
|
||||
@echo oaisim includes: $(INCLUDES)
|
||||
@if [ -d $(S1AP_DIR) ]; then $(MAKE) -C $(S1AP_DIR) -f Makefile.eNB showcflags; fi
|
||||
@if [ -d $(X2AP_DIR) ]; then $(MAKE) -C $(X2AP_DIR) -f Makefile.inc showcflags; fi
|
||||
|
||||
otg_all: otg_latency otg_gp
|
||||
|
||||
# need to check if the file exists before calling otgplot
|
||||
otg_latency:
|
||||
export TITLE="Application OWD(ms)"
|
||||
cp /tmp/otg_latency.dat /tmp/onewaydelay.dat
|
||||
$(OPENAIR2_DIR)/UTIL/OTG/OTGplot "/tmp/otg_latency.dat" "[$(COL1):$(COL2)]"
|
||||
otg_latency_bg:
|
||||
export TITLE="Background OWD(ms)"
|
||||
$(OPENAIR2_DIR)/UTIL/OTG/OTGplot "/tmp/otg_latency_bg.dat" "[$(COL1):$(COL2)]"
|
||||
otg_gp:
|
||||
export TITLE="Application Goodput(Kb/s)"
|
||||
cp /tmp/otg_goodput.dat /tmp/goodput.dat
|
||||
$(OPENAIR2_DIR)/UTIL/OTG/OTGplot "/tmp/goodput.dat" "[$(COL1):$(COL2)]"
|
||||
otg_gp_bg:
|
||||
export TITLE="Background Goodput(Kb/s)"
|
||||
$(OPENAIR2_DIR)/UTIL/OTG/OTGplot "/tmp/otg_goodput_bg.dat" "[$(COL1):$(COL2)]"
|
||||
otg_jitter:
|
||||
export TITLE="Aplication Jitter(ms)"
|
||||
$(OPENAIR2_DIR)/UTIL/OTG/OTGplot "/tmp/otg_jitter.dat" "[$(COL1):$(COL2)]"
|
||||
|
||||
pexpect = $(shell if [ `dpkg -l | grep pexpect -c` = "0" ]; then echo "0" ; else echo "1" ; fi )
|
||||
|
||||
pre-ci:
|
||||
@echo "Pre-commit check"
|
||||
|
||||
ifeq ($(pexpect), 1)
|
||||
ifndef PW
|
||||
@echo "Usage: make pre-ci PW=mypassword"
|
||||
@echo "Password is used to access the local host through ssh."
|
||||
python $(OPENAIR_TARGETS)/TEST/OAI/test01.py
|
||||
else
|
||||
python $(OPENAIR_TARGETS)/TEST/OAI/test01.py -w $(PW)
|
||||
endif
|
||||
else
|
||||
@echo "Python pexpect package is missing, please install"
|
||||
endif
|
||||
@@ -1,216 +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
|
||||
*/
|
||||
|
||||
#include "cor_SF_sim.h"
|
||||
|
||||
double ** createMat (int nbRow, int nbCol)
|
||||
{
|
||||
double **matrice;
|
||||
int initcol, countr, countc;
|
||||
matrice = malloc (nbRow * sizeof (double*));
|
||||
|
||||
for (initcol = 0; initcol < nbRow; initcol++) {
|
||||
matrice[initcol] = malloc(nbCol * sizeof(double));
|
||||
}
|
||||
|
||||
for (countr = 0; countr < nbRow; countr++) {
|
||||
for (countc = 0; countc < nbCol; countc++) {
|
||||
matrice[countr][countc] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return matrice;
|
||||
}
|
||||
|
||||
void destroyMat(double **mat1,int row,int col)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < row; i++)
|
||||
free(mat1[i]);
|
||||
|
||||
free(mat1);
|
||||
}
|
||||
|
||||
double **init_SF (int map_length, int map_height, double decor_dist,
|
||||
double variance)
|
||||
{
|
||||
|
||||
double **SF = createMat (map_length, map_height);
|
||||
double **unc_SF = createMat (map_length, map_height);
|
||||
/*
|
||||
double **L1 = createMat (2, 2);
|
||||
double **L2 = createMat (3, 3);
|
||||
double **L3 = createMat (4, 4);
|
||||
double **L4 = createMat (5, 5);
|
||||
*/
|
||||
double L1[2][2] = {{0.0}}, L2[3][3] = {{0.0}}, L3[4][4] = {{0.0}}, L4[5][5] = {{0.0}};
|
||||
double temp[2] = { 0.0 }, temp1[2] = {0.0}, temp2[3] = {0.0}, temp21[2] = {0.0}, temp3[4] = {0.0}, temp31[3] = {0.0}, temp4[5] = {0.0}, temp41[4] = {0.0}, temp211[3] = {0.0}, temp311[4] = {0.0},
|
||||
temp411[5] = {0.0};
|
||||
int i, j, aa, b, c, d, k, l, m, dd, kk, ll, mm, ii, jj;
|
||||
|
||||
/*double L1[2][2] = {{1.0000,0.0},{0.9512,0.3085}};
|
||||
double L2[3][3] = {{1.0000,0.0,0.0},{0.9512,0.3085,0},{0.9512,0.0872,0.2959}};
|
||||
double L3[4][4] = {{1.0000,0.0,0.0,0.0},{0.9512,0.3085,0.0,0.0},{0.9512,0.0872,0.2959 ,0.0},{0.9317,0.2105,0.1574,0.2506}};
|
||||
double L4[5][5] = {{1.0000,0.0,0.0,0.0,0.0},{0.9512,0.3085,0.0,0.0,0.0},{ 0.9048,0.2934,0.3085,0.0,0.0},{0.9512,0.0872,0.0257,0.2948,0.0},{0.9317,0.2105,0.0872, 0.1504,0.2394}};
|
||||
*/
|
||||
|
||||
double r = exp (-1 / decor_dist); // decorrelation factor mostly equal to 20
|
||||
double r1 = pow (r, sqrt (2));
|
||||
double r2 = pow (r, 2);
|
||||
double r3 = pow (r, sqrt (5));
|
||||
|
||||
double L11[2][2] = { {1, r}, {r, 1} };
|
||||
double L21[3][3] = { {1, r, r}, {r, 1, r1}, {r, r1, 1} };
|
||||
double L31[4][4] = { {1, r, r, r1}, {r, 1, r1, r}, {r, r1, 1, r}, {r1, r, r, 1} };
|
||||
double L41[5][5] = { {1, r, r2, r, r1}, {r, 1, r, r1, r}, {r2, r, 1, r3, r1}, {r, r1,r3, 1, r},
|
||||
{r1, r, r1, r, 1}
|
||||
};
|
||||
|
||||
L1[0][0] = L11[0][0];
|
||||
L1[0][1] = L11[0][1];
|
||||
L1[1][0] = L11[1][0];
|
||||
L1[1][1] = L11[1][1];
|
||||
|
||||
/*for (bb = 0; bb < 2; bb++)
|
||||
{
|
||||
for (cc = 0; cc < 2; cc++)
|
||||
{
|
||||
//Lt1[bb*2+cc] = L11[bb][cc];
|
||||
L1[bb][cc]=L11[bb][cc];
|
||||
}
|
||||
}*/
|
||||
for (dd = 0; dd < 3; dd++) {
|
||||
for (kk = 0; kk < 3; kk++) {
|
||||
L2[dd][kk]=L21[dd][kk];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (ll = 0; ll < 4; ll++) {
|
||||
for (mm = 0; mm < 4; mm++) {
|
||||
L3[ll][mm]=L31[ll][mm];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (ii = 0; ii < 5; ii++) {
|
||||
for (jj = 0; jj < 5; jj++) {
|
||||
L4[ii][jj]=L41[ii][jj];
|
||||
}
|
||||
}
|
||||
|
||||
clapack_dpotrf(CblasRowMajor,CblasLower,2,&L1[0][0],2);
|
||||
clapack_dpotrf(CblasRowMajor,CblasLower,3,&L2[0][0],3);
|
||||
clapack_dpotrf(CblasRowMajor,CblasLower,4,&L3[0][0],4);
|
||||
clapack_dpotrf(CblasRowMajor,CblasLower,5,&L4[0][0],5);
|
||||
randominit (0);
|
||||
|
||||
for (i = 0; i < map_length; i++) {
|
||||
for (j = 0; j < map_height; j++)
|
||||
unc_SF[i][j] = gaussdouble (0.0, variance);
|
||||
}
|
||||
|
||||
SF[0][0] = unc_SF[0][0];
|
||||
|
||||
//printf ("%f", SF[0][0]);
|
||||
for (aa = 0; aa < 2; aa++) {
|
||||
temp[aa] = L1[1][aa];
|
||||
}
|
||||
|
||||
for (k = 1; k < map_height; k++) {
|
||||
temp1[0] = SF[0][k - 1];
|
||||
temp1[1] = unc_SF[0][k];
|
||||
SF[0][k] = cblas_ddot (2, temp, 1, temp1, 1);
|
||||
}
|
||||
|
||||
for (b = 0; b < 3; b++) {
|
||||
temp2[b] = L2[2][b];
|
||||
}
|
||||
|
||||
for (c = 0; c < 4; c++) {
|
||||
temp3[c] = L3[3][c];
|
||||
}
|
||||
|
||||
for (d = 0; d < 5; d++) {
|
||||
temp4[d] = L4[4][d];
|
||||
}
|
||||
|
||||
for (l = 1; l < map_length; l++) {
|
||||
for (m = 0; m < map_height; m++) {
|
||||
if (m == 0) {
|
||||
temp21[0] = SF[l - 1][m];
|
||||
temp21[1] = SF[l - 1][m + 1];
|
||||
cblas_dtrsv (CblasRowMajor, CblasLower, CblasNoTrans,
|
||||
CblasNonUnit, 2, &L1[0][0], 2, temp21, 1);
|
||||
|
||||
temp211[0] = temp21[0];
|
||||
temp211[1] = temp21[1];
|
||||
temp211[2] = unc_SF[l][m];
|
||||
|
||||
SF[l][m] = cblas_ddot (3, temp2, 1, temp211, 1);
|
||||
|
||||
} else if (m == map_height - 1) {
|
||||
temp31[0] = SF[l - 1][m - 1];
|
||||
temp31[1] = SF[l - 1][m];
|
||||
temp31[2] = SF[l][m - 1];
|
||||
|
||||
cblas_dtrsv (CblasRowMajor, CblasLower, CblasNoTrans,
|
||||
CblasNonUnit, 3, &L2[0][0], 3, temp31, 1);
|
||||
|
||||
temp311[0] = temp31[0];
|
||||
temp311[1] = temp31[1];
|
||||
temp311[2] = temp31[2];
|
||||
temp311[3] = unc_SF[l][m];
|
||||
|
||||
SF[l][m] = cblas_ddot (4, temp3, 1, temp311, 1);
|
||||
|
||||
} else {
|
||||
temp41[0] = SF[l - 1][m - 1];
|
||||
temp41[1] = SF[l - 1][m];
|
||||
temp41[2] = SF[l - 1][m + 1];
|
||||
temp41[3] = SF[l][m - 1];
|
||||
|
||||
cblas_dtrsv (CblasRowMajor, CblasLower, CblasNoTrans,
|
||||
CblasNonUnit, 4, &L3[0][0], 4, temp41, 1);
|
||||
|
||||
temp411[0] = temp41[0];
|
||||
temp411[1] = temp41[1];
|
||||
temp411[2] = temp41[2];
|
||||
temp411[3] = temp41[3];
|
||||
temp411[4] = unc_SF[l][m];
|
||||
|
||||
SF[l][m] = cblas_ddot (5, temp4, 1, temp411, 1);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
destroyMat(unc_SF,map_length, map_height);
|
||||
/*
|
||||
destroyMat(L1,2,2);
|
||||
destroyMat(L2,3,3);
|
||||
destroyMat(L3,4,4);
|
||||
destroyMat(L4,5,5);
|
||||
*/
|
||||
return SF;
|
||||
|
||||
}
|
||||
@@ -1,31 +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
|
||||
*/
|
||||
|
||||
#include<stdio.h>
|
||||
#include<math.h>
|
||||
#include<cblas.h>
|
||||
//#include<atlas_lapack.h>
|
||||
#include<clapack.h>
|
||||
#include<oaisim.h>
|
||||
|
||||
double **init_SF (int map_length, int map_height, double decor_dist, double variance); //,double decor,double var);
|
||||
double **createMat (int nbRow, int nbCol);
|
||||
void destroyMat(double **mat1,int row,int col);
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,65 +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 event_handler.h
|
||||
* \brief primitives to handle event acting on oai
|
||||
* \author Navid Nikaein and Mohamed Said MOSLI BOUKSIAA,
|
||||
* \date 2014
|
||||
* \version 0.5
|
||||
* @ingroup _oai
|
||||
*/
|
||||
|
||||
#include "oaisim.h"
|
||||
#include "UTIL/FIFO/pad_list.h"
|
||||
|
||||
|
||||
|
||||
void add_event(Event_t event);
|
||||
|
||||
void schedule(Operation_Type_t op, Event_Type_t type, int frame, char * key, void* value, int ue, int lcid);
|
||||
|
||||
void schedule_delayed(Operation_Type_t op, Event_Type_t type, char * key, void* value, char * time, int ue, int lcid);
|
||||
|
||||
void schedule_events(void);
|
||||
|
||||
void execute_events(frame_t frame);
|
||||
|
||||
|
||||
void update_oai_model(char * key, void * value);
|
||||
|
||||
void update_sys_model(Event_t event);
|
||||
|
||||
void update_topo_model(Event_t event);
|
||||
|
||||
void update_app_model(Event_t event);
|
||||
|
||||
void update_emu_model(Event_t event);
|
||||
|
||||
void update_mac(Event_t event);
|
||||
|
||||
int validate_mac(Event_t event);
|
||||
|
||||
|
||||
/*
|
||||
void schedule_end_of_simulation(End_Of_Sim_Event_Type type, int value);
|
||||
|
||||
int end_of_simulation();
|
||||
*/
|
||||
@@ -1,3 +0,0 @@
|
||||
-20,-19.8,-19.6,-19.4,-19.2,-19,-18.8,-18.6,-18.4,-18.2,-18,-17.8,-17.6,-17.4,-17.2,-17,-16.8,-16.6,-16.4,-16.2,-16,-15.8,-15.6,-15.4,-15.2,-15,-14.8,-14.6,-14.4,-14.2,-14,-13.8,-13.6,-13.4,-13.2,-13,-12.8,-12.6,-12.4,-12.2,-12,-11.8,-11.6,-11.4,-11.2,-11,-10.8,-10.6,-10.4,-10.2,-10,-9.8,-9.6,-9.4,-9.2,-9,-8.8,-8.6,-8.4,-8.2,-8,-7.8,-7.6,-7.4,-7.2,-7,-6.8,-6.6,-6.4,-6.2,-6,-5.8,-5.6,-5.4,-5.2,-5,-4.8,-4.6,-4.4,-4.2,-4,-3.8,-3.6,-3.4,-3.2,-3,-2.8,-2.6,-2.4,-2.2,-2,-1.8,-1.6,-1.4,-1.2,-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1,1.2,1.4,1.6,1.8,2,2.2,2.4,2.6,2.8,3,3.2,3.4,3.6,3.8,4,4.2,4.4,4.6,4.8,5,5.2,5.4,5.6,5.8,6,6.2,6.4,6.6,6.8,7,7.2,7.4,7.6,7.8,8,8.2,8.4,8.6,8.8,9,9.2,9.4,9.6,9.8,10,10.2,10.4,10.6,10.8,11,11.2,11.4,11.6,11.8,12,12.2,12.4,12.6,12.8,13,13.2,13.4,13.6,13.8,14,14.2,14.4,14.6,14.8,15,15.2,15.4,15.6,15.8,16,16.2,16.4,16.6,16.8,17,17.2,17.4,17.6,17.8,18,18.2,18.4,18.6,18.8,19,19.2
|
||||
0.014138,0.014992,0.015845,0.016699,0.017553,0.018407,0.01923,0.020054,0.020878,0.021701,0.022525,0.02368,0.024834,0.025989,0.027144,0.028299,0.029822,0.031346,0.03287,0.034393,0.035917,0.03769,0.039464,0.041237,0.043011,0.044784,0.047124,0.049465,0.051806,0.054146,0.056487,0.059209,0.061931,0.064654,0.067376,0.070098,0.073673,0.077247,0.080822,0.084396,0.087971,0.092295,0.09662,0.10094,0.10527,0.10959,0.11501,0.12043,0.12585,0.13127,0.13669,0.14362,0.15054,0.15747,0.1644,0.17133,0.17954,0.18776,0.19598,0.2042,0.21241,0.2223,0.23219,0.24208,0.25197,0.26186,0.27399,0.28613,0.29827,0.31041,0.32255,0.33706,0.35158,0.36609,0.38061,0.39513,0.41234,0.42955,0.44676,0.46397,0.48118,0.50187,0.52256,0.54325,0.56394,0.58463,0.60797,0.63131,0.65465,0.678,0.70134,0.72903,0.75673,0.78442,0.81212,0.83981,0.86994,0.90007,0.9302,0.96033,0.99047,1.0241,1.0577,1.0914,1.125,1.1587,1.1954,1.2321,1.2688,1.3054,1.3421,1.3818,1.4214,1.4611,1.5007,1.5404,1.5828,1.6253,1.6678,1.7102,1.7527,1.7968,1.8408,1.8849,1.929,1.9731,2.0189,2.0647,2.1105,2.1563,2.2022,2.2501,2.298,2.346,2.3939,2.4418,2.4901,2.5384,2.5867,2.6349,2.6832,2.7321,2.7811,2.83,2.8789,2.9279,2.9751,3.0224,3.0697,3.117,3.1643,3.2083,3.2524,3.2964,3.3404,3.3844,3.4235,3.4626,3.5017,3.5407,3.5798,3.6112,3.6426,3.674,3.7054,3.7368,3.7602,3.7835,3.8068,3.8302,3.8535,3.8685,3.8836,3.8986,3.9137,3.9288,3.9372,3.9456,3.954,3.9624,3.9708,3.9747,3.9786,3.9825,3.9864,3.9903,3.9918,3.9932,3.9947,3.9961,3.9975,3.9979,3.9983,3.9987,3.9991,3.9995,4
|
||||
0.0035344,0.0037479,0.0039613,0.0041748,0.0043882,0.0046017,0.0048076,0.0050135,0.0052194,0.0054254,0.0056313,0.0059199,0.0062086,0.0064973,0.006786,0.0070746,0.0074556,0.0078365,0.0082174,0.0085983,0.0089792,0.0094226,0.0098659,0.010309,0.010753,0.011196,0.011781,0.012366,0.012951,0.013537,0.014122,0.014802,0.015483,0.016163,0.016844,0.017525,0.018418,0.019312,0.020205,0.021099,0.021993,0.023074,0.024155,0.025236,0.026317,0.027398,0.028753,0.030108,0.031463,0.032818,0.034173,0.035904,0.037636,0.039368,0.0411,0.042831,0.044886,0.04694,0.048994,0.051049,0.053103,0.055575,0.058047,0.06052,0.062992,0.065464,0.068498,0.071533,0.074568,0.077602,0.080637,0.084266,0.087895,0.091524,0.095153,0.098782,0.10308,0.10739,0.11169,0.11599,0.12029,0.12547,0.13064,0.13581,0.14098,0.14616,0.15199,0.15783,0.16366,0.1695,0.17533,0.18226,0.18918,0.19611,0.20303,0.20995,0.21749,0.22502,0.23255,0.24008,0.24762,0.25603,0.26444,0.27285,0.28126,0.28967,0.29884,0.30801,0.31719,0.32636,0.33554,0.34545,0.35536,0.36527,0.37518,0.3851,0.39571,0.40632,0.41694,0.42755,0.43817,0.44919,0.46021,0.47123,0.48226,0.49328,0.50473,0.51618,0.52763,0.53909,0.55054,0.56252,0.57451,0.58649,0.59847,0.61046,0.62253,0.6346,0.64667,0.65874,0.67081,0.68304,0.69527,0.7075,0.71973,0.73196,0.74379,0.75561,0.76743,0.77925,0.79108,0.80208,0.81309,0.8241,0.8351,0.84611,0.85588,0.86565,0.87541,0.88518,0.89495,0.9028,0.91065,0.9185,0.92635,0.93421,0.94004,0.94587,0.95171,0.95754,0.96337,0.96714,0.9709,0.97466,0.97843,0.98219,0.98429,0.98639,0.9885,0.9906,0.9927,0.99368,0.99465,0.99563,0.99661,0.99758,0.99794,0.9983,0.99866,0.99902,0.99938,0.99948,0.99958,0.99968,0.99978,0.99988,1
|
||||
|
@@ -1,3 +0,0 @@
|
||||
-20;-19.8;-19.6;-19.4;-19.2;-19;-18.8;-18.6;-18.4;-18.2;-18;-17.8;-17.6;-17.4;-17.2;-17;-16.8;-16.6;-16.4;-16.2;-16;-15.8;-15.6;-15.4;-15.2;-15;-14.8;-14.6;-14.4;-14.2;-14;-13.8;-13.6;-13.4;-13.2;-13;-12.8;-12.6;-12.4;-12.2;-12;-11.8;-11.6;-11.4;-11.2;-11;-10.8;-10.6;-10.4;-10.2;-10;-9.8;-9.6;-9.4;-9.2;-9;-8.8;-8.6;-8.4;-8.2;-8;-7.8;-7.6;-7.4;-7.2;-7;-6.8;-6.6;-6.4;-6.2;-6;-5.8;-5.6;-5.4;-5.2;-5;-4.8;-4.6;-4.4;-4.2;-4;-3.8;-3.6;-3.4;-3.2;-3;-2.8;-2.6;-2.4;-2.2;-2;-1.8;-1.6;-1.4;-1.2;-1;-0.8;-0.6;-0.4;-0.2;0;0.2;0.4;0.6;0.8;1;1.2;1.4;1.6;1.8;2;2.2;2.4;2.6;2.8;3;3.2;3.4;3.6;3.8;4;4.2;4.4;4.6;4.8;5;5.2;5.4;5.6;5.8;6;6.2;6.4;6.6;6.8;7;7.2;7.4;7.6;7.8;8;8.2;8.4;8.6;8.8;9;9.2;9.4;9.6;9.8;10;10.2;10.4;10.6;10.8;11;11.2;11.4;11.6;11.8;12;12.2;12.4;12.6;12.8;13;13.2;13.4;13.6;13.8;14;14.2;14.4;14.6;14.8;15;15.2;15.4;15.6;15.8;16;16.2;16.4;16.6;16.8;17;17.2;17.4;17.6;17.8;18;18.2;18.4;18.6;18.8;19;19.2
|
||||
0.014138;0.014992;0.015845;0.016699;0.017553;0.018407;0.01923;0.020054;0.020878;0.021701;0.022525;0.02368;0.024834;0.025989;0.027144;0.028299;0.029822;0.031346;0.03287;0.034393;0.035917;0.03769;0.039464;0.041237;0.043011;0.044784;0.047124;0.049465;0.051806;0.054146;0.056487;0.059209;0.061931;0.064654;0.067376;0.070098;0.073673;0.077247;0.080822;0.084396;0.087971;0.092295;0.09662;0.10094;0.10527;0.10959;0.11501;0.12043;0.12585;0.13127;0.13669;0.14362;0.15054;0.15747;0.1644;0.17133;0.17954;0.18776;0.19598;0.2042;0.21241;0.2223;0.23219;0.24208;0.25197;0.26186;0.27399;0.28613;0.29827;0.31041;0.32255;0.33706;0.35158;0.36609;0.38061;0.39513;0.41234;0.42955;0.44676;0.46397;0.48118;0.50187;0.52256;0.54325;0.56394;0.58463;0.60797;0.63131;0.65465;0.678;0.70134;0.72903;0.75673;0.78442;0.81212;0.83981;0.86994;0.90007;0.9302;0.96033;0.99047;1.0241;1.0577;1.0914;1.125;1.1587;1.1954;1.2321;1.2688;1.3054;1.3421;1.3818;1.4214;1.4611;1.5007;1.5404;1.5828;1.6253;1.6678;1.7102;1.7527;1.7968;1.8408;1.8849;1.929;1.9731;2.0189;2.0647;2.1105;2.1563;2.2022;2.2501;2.298;2.346;2.3939;2.4418;2.4901;2.5384;2.5867;2.6349;2.6832;2.7321;2.7811;2.83;2.8789;2.9279;2.9751;3.0224;3.0697;3.117;3.1643;3.2083;3.2524;3.2964;3.3404;3.3844;3.4235;3.4626;3.5017;3.5407;3.5798;3.6112;3.6426;3.674;3.7054;3.7368;3.7602;3.7835;3.8068;3.8302;3.8535;3.8685;3.8836;3.8986;3.9137;3.9288;3.9372;3.9456;3.954;3.9624;3.9708;3.9747;3.9786;3.9825;3.9864;3.9903;3.9918;3.9932;3.9947;3.9961;3.9975;3.9979;3.9983;3.9987;3.9991;3.9995;4
|
||||
0.0035344;0.0037479;0.0039613;0.0041748;0.0043882;0.0046017;0.0048076;0.0050135;0.0052194;0.0054254;0.0056313;0.0059199;0.0062086;0.0064973;0.006786;0.0070746;0.0074556;0.0078365;0.0082174;0.0085983;0.0089792;0.0094226;0.0098659;0.010309;0.010753;0.011196;0.011781;0.012366;0.012951;0.013537;0.014122;0.014802;0.015483;0.016163;0.016844;0.017525;0.018418;0.019312;0.020205;0.021099;0.021993;0.023074;0.024155;0.025236;0.026317;0.027398;0.028753;0.030108;0.031463;0.032818;0.034173;0.035904;0.037636;0.039368;0.0411;0.042831;0.044886;0.04694;0.048994;0.051049;0.053103;0.055575;0.058047;0.06052;0.062992;0.065464;0.068498;0.071533;0.074568;0.077602;0.080637;0.084266;0.087895;0.091524;0.095153;0.098782;0.10308;0.10739;0.11169;0.11599;0.12029;0.12547;0.13064;0.13581;0.14098;0.14616;0.15199;0.15783;0.16366;0.1695;0.17533;0.18226;0.18918;0.19611;0.20303;0.20995;0.21749;0.22502;0.23255;0.24008;0.24762;0.25603;0.26444;0.27285;0.28126;0.28967;0.29884;0.30801;0.31719;0.32636;0.33554;0.34545;0.35536;0.36527;0.37518;0.3851;0.39571;0.40632;0.41694;0.42755;0.43817;0.44919;0.46021;0.47123;0.48226;0.49328;0.50473;0.51618;0.52763;0.53909;0.55054;0.56252;0.57451;0.58649;0.59847;0.61046;0.62253;0.6346;0.64667;0.65874;0.67081;0.68304;0.69527;0.7075;0.71973;0.73196;0.74379;0.75561;0.76743;0.77925;0.79108;0.80208;0.81309;0.8241;0.8351;0.84611;0.85588;0.86565;0.87541;0.88518;0.89495;0.9028;0.91065;0.9185;0.92635;0.93421;0.94004;0.94587;0.95171;0.95754;0.96337;0.96714;0.9709;0.97466;0.97843;0.98219;0.98429;0.98639;0.9885;0.9906;0.9927;0.99368;0.99465;0.99563;0.99661;0.99758;0.99794;0.9983;0.99866;0.99902;0.99938;0.99948;0.99958;0.99968;0.99978;0.99988;1
|
||||
@@ -1,3 +0,0 @@
|
||||
-20,-19.8,-19.6,-19.4,-19.2,-19,-18.8,-18.6,-18.4,-18.2,-18,-17.8,-17.6,-17.4,-17.2,-17,-16.8,-16.6,-16.4,-16.2,-16,-15.8,-15.6,-15.4,-15.2,-15,-14.8,-14.6,-14.4,-14.2,-14,-13.8,-13.6,-13.4,-13.2,-13,-12.8,-12.6,-12.4,-12.2,-12,-11.8,-11.6,-11.4,-11.2,-11,-10.8,-10.6,-10.4,-10.2,-10,-9.8,-9.6,-9.4,-9.2,-9,-8.8,-8.6,-8.4,-8.2,-8,-7.8,-7.6,-7.4,-7.2,-7,-6.8,-6.6,-6.4,-6.2,-6,-5.8,-5.6,-5.4,-5.2,-5,-4.8,-4.6,-4.4,-4.2,-4,-3.8,-3.6,-3.4,-3.2,-3,-2.8,-2.6,-2.4,-2.2,-2,-1.8,-1.6,-1.4,-1.2,-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1,1.2,1.4,1.6,1.8,2,2.2,2.4,2.6,2.8,3,3.2,3.4,3.6,3.8,4,4.2,4.4,4.6,4.8,5,5.2,5.4,5.6,5.8,6,6.2,6.4,6.6,6.8,7,7.2,7.4,7.6,7.8,8,8.2,8.4,8.6,8.8,9,9.2,9.4,9.6,9.8,10,10.2,10.4,10.6,10.8,11,11.2,11.4,11.6,11.8,12,12.2
|
||||
0.014938,0.015535,0.016131,0.016727,0.017324,0.01792,0.018791,0.019662,0.020533,0.021404,0.022276,0.023689,0.025102,0.026515,0.027928,0.029341,0.030588,0.031835,0.033082,0.034329,0.035575,0.03748,0.039384,0.041289,0.043193,0.045098,0.047475,0.049853,0.05223,0.054607,0.056985,0.059606,0.062228,0.06485,0.067472,0.070094,0.07367,0.077247,0.080824,0.0844,0.087977,0.092384,0.096792,0.1012,0.10561,0.11001,0.11567,0.12133,0.12699,0.13265,0.13831,0.14512,0.15193,0.15874,0.16555,0.17236,0.18045,0.18854,0.19663,0.20472,0.21282,0.22319,0.23357,0.24395,0.25433,0.26471,0.27602,0.28733,0.29863,0.30994,0.32125,0.33583,0.35041,0.36499,0.37957,0.39415,0.4114,0.42865,0.4459,0.46315,0.4804,0.50048,0.52055,0.54063,0.5607,0.58078,0.60421,0.62764,0.65107,0.6745,0.69793,0.72389,0.74984,0.7758,0.80176,0.82771,0.85656,0.88541,0.91425,0.9431,0.97194,1.0031,1.0343,1.0655,1.0967,1.1279,1.1592,1.1905,1.2218,1.2531,1.2845,1.3156,1.3467,1.3778,1.4089,1.44,1.4699,1.4999,1.5298,1.5598,1.5897,1.6156,1.6414,1.6672,1.6931,1.7189,1.7397,1.7606,1.7814,1.8022,1.823,1.839,1.8549,1.8708,1.8868,1.9027,1.9124,1.922,1.9317,1.9414,1.9511,1.9569,1.9628,1.9687,1.9745,1.9804,1.9831,1.9857,1.9884,1.991,1.9937,1.9947,1.9957,1.9967,1.9977,1.9986,1.9989,1.9991,1.9993,1.9996,1.9998,2
|
||||
0.0074691,0.0077673,0.0080654,0.0083636,0.0086618,0.00896,0.0093955,0.0098311,0.010267,0.010702,0.011138,0.011844,0.012551,0.013257,0.013964,0.014671,0.015294,0.015917,0.016541,0.017164,0.017788,0.01874,0.019692,0.020644,0.021597,0.022549,0.023738,0.024926,0.026115,0.027304,0.028492,0.029803,0.031114,0.032425,0.033736,0.035047,0.036835,0.038623,0.040412,0.0422,0.043988,0.046192,0.048396,0.050599,0.052803,0.055007,0.057836,0.060666,0.063496,0.066325,0.069155,0.07256,0.075965,0.07937,0.082775,0.08618,0.090225,0.094271,0.098317,0.10236,0.10641,0.1116,0.11679,0.12198,0.12717,0.13235,0.13801,0.14366,0.14932,0.15497,0.16063,0.16792,0.17521,0.1825,0.18979,0.19708,0.2057,0.21433,0.22295,0.23158,0.2402,0.25024,0.26028,0.27031,0.28035,0.29039,0.3021,0.31382,0.32553,0.33725,0.34897,0.36194,0.37492,0.3879,0.40088,0.41386,0.42828,0.4427,0.45713,0.47155,0.48597,0.50156,0.51715,0.53275,0.54834,0.56393,0.57959,0.59525,0.61091,0.62657,0.64223,0.65779,0.67334,0.68889,0.70445,0.72,0.73497,0.74994,0.76492,0.77989,0.79486,0.80778,0.8207,0.83362,0.84654,0.85946,0.86987,0.88029,0.8907,0.90111,0.91152,0.91948,0.92745,0.93542,0.94338,0.95135,0.95619,0.96102,0.96586,0.9707,0.97554,0.97847,0.9814,0.98433,0.98727,0.9902,0.99153,0.99286,0.99419,0.99552,0.99685,0.99735,0.99784,0.99834,0.99883,0.99932,0.99944,0.99956,0.99967,0.99979,0.9999,1
|
||||
|
@@ -1,3 +0,0 @@
|
||||
-20;-19.8;-19.6;-19.4;-19.2;-19;-18.8;-18.6;-18.4;-18.2;-18;-17.8;-17.6;-17.4;-17.2;-17;-16.8;-16.6;-16.4;-16.2;-16;-15.8;-15.6;-15.4;-15.2;-15;-14.8;-14.6;-14.4;-14.2;-14;-13.8;-13.6;-13.4;-13.2;-13;-12.8;-12.6;-12.4;-12.2;-12;-11.8;-11.6;-11.4;-11.2;-11;-10.8;-10.6;-10.4;-10.2;-10;-9.8;-9.6;-9.4;-9.2;-9;-8.8;-8.6;-8.4;-8.2;-8;-7.8;-7.6;-7.4;-7.2;-7;-6.8;-6.6;-6.4;-6.2;-6;-5.8;-5.6;-5.4;-5.2;-5;-4.8;-4.6;-4.4;-4.2;-4;-3.8;-3.6;-3.4;-3.2;-3;-2.8;-2.6;-2.4;-2.2;-2;-1.8;-1.6;-1.4;-1.2;-1;-0.8;-0.6;-0.4;-0.2;0;0.2;0.4;0.6;0.8;1;1.2;1.4;1.6;1.8;2;2.2;2.4;2.6;2.8;3;3.2;3.4;3.6;3.8;4;4.2;4.4;4.6;4.8;5;5.2;5.4;5.6;5.8;6;6.2;6.4;6.6;6.8;7;7.2;7.4;7.6;7.8;8;8.2;8.4;8.6;8.8;9;9.2;9.4;9.6;9.8;10;10.2;10.4;10.6;10.8;11;11.2;11.4;11.6;11.8;12;12.2
|
||||
0.014938;0.015535;0.016131;0.016727;0.017324;0.01792;0.018791;0.019662;0.020533;0.021404;0.022276;0.023689;0.025102;0.026515;0.027928;0.029341;0.030588;0.031835;0.033082;0.034329;0.035575;0.03748;0.039384;0.041289;0.043193;0.045098;0.047475;0.049853;0.05223;0.054607;0.056985;0.059606;0.062228;0.06485;0.067472;0.070094;0.07367;0.077247;0.080824;0.0844;0.087977;0.092384;0.096792;0.1012;0.10561;0.11001;0.11567;0.12133;0.12699;0.13265;0.13831;0.14512;0.15193;0.15874;0.16555;0.17236;0.18045;0.18854;0.19663;0.20472;0.21282;0.22319;0.23357;0.24395;0.25433;0.26471;0.27602;0.28733;0.29863;0.30994;0.32125;0.33583;0.35041;0.36499;0.37957;0.39415;0.4114;0.42865;0.4459;0.46315;0.4804;0.50048;0.52055;0.54063;0.5607;0.58078;0.60421;0.62764;0.65107;0.6745;0.69793;0.72389;0.74984;0.7758;0.80176;0.82771;0.85656;0.88541;0.91425;0.9431;0.97194;1.0031;1.0343;1.0655;1.0967;1.1279;1.1592;1.1905;1.2218;1.2531;1.2845;1.3156;1.3467;1.3778;1.4089;1.44;1.4699;1.4999;1.5298;1.5598;1.5897;1.6156;1.6414;1.6672;1.6931;1.7189;1.7397;1.7606;1.7814;1.8022;1.823;1.839;1.8549;1.8708;1.8868;1.9027;1.9124;1.922;1.9317;1.9414;1.9511;1.9569;1.9628;1.9687;1.9745;1.9804;1.9831;1.9857;1.9884;1.991;1.9937;1.9947;1.9957;1.9967;1.9977;1.9986;1.9989;1.9991;1.9993;1.9996;1.9998;2
|
||||
0.0074691;0.0077673;0.0080654;0.0083636;0.0086618;0.00896;0.0093955;0.0098311;0.010267;0.010702;0.011138;0.011844;0.012551;0.013257;0.013964;0.014671;0.015294;0.015917;0.016541;0.017164;0.017788;0.01874;0.019692;0.020644;0.021597;0.022549;0.023738;0.024926;0.026115;0.027304;0.028492;0.029803;0.031114;0.032425;0.033736;0.035047;0.036835;0.038623;0.040412;0.0422;0.043988;0.046192;0.048396;0.050599;0.052803;0.055007;0.057836;0.060666;0.063496;0.066325;0.069155;0.07256;0.075965;0.07937;0.082775;0.08618;0.090225;0.094271;0.098317;0.10236;0.10641;0.1116;0.11679;0.12198;0.12717;0.13235;0.13801;0.14366;0.14932;0.15497;0.16063;0.16792;0.17521;0.1825;0.18979;0.19708;0.2057;0.21433;0.22295;0.23158;0.2402;0.25024;0.26028;0.27031;0.28035;0.29039;0.3021;0.31382;0.32553;0.33725;0.34897;0.36194;0.37492;0.3879;0.40088;0.41386;0.42828;0.4427;0.45713;0.47155;0.48597;0.50156;0.51715;0.53275;0.54834;0.56393;0.57959;0.59525;0.61091;0.62657;0.64223;0.65779;0.67334;0.68889;0.70445;0.72;0.73497;0.74994;0.76492;0.77989;0.79486;0.80778;0.8207;0.83362;0.84654;0.85946;0.86987;0.88029;0.8907;0.90111;0.91152;0.91948;0.92745;0.93542;0.94338;0.95135;0.95619;0.96102;0.96586;0.9707;0.97554;0.97847;0.9814;0.98433;0.98727;0.9902;0.99153;0.99286;0.99419;0.99552;0.99685;0.99735;0.99784;0.99834;0.99883;0.99932;0.99944;0.99956;0.99967;0.99979;0.9999;1
|
||||
@@ -1,3 +0,0 @@
|
||||
-20,-19.8,-19.6,-19.4,-19.2,-19,-18.8,-18.6,-18.4,-18.2,-18,-17.8,-17.6,-17.4,-17.2,-17,-16.8,-16.6,-16.4,-16.2,-16,-15.8,-15.6,-15.4,-15.2,-15,-14.8,-14.6,-14.4,-14.2,-14,-13.8,-13.6,-13.4,-13.2,-13,-12.8,-12.6,-12.4,-12.2,-12,-11.8,-11.6,-11.4,-11.2,-11,-10.8,-10.6,-10.4,-10.2,-10,-9.8,-9.6,-9.4,-9.2,-9,-8.8,-8.6,-8.4,-8.2,-8,-7.8,-7.6,-7.4,-7.2,-7,-6.8,-6.6,-6.4,-6.2,-6,-5.8,-5.6,-5.4,-5.2,-5,-4.8,-4.6,-4.4,-4.2,-4,-3.8,-3.6,-3.4,-3.2,-3,-2.8,-2.6,-2.4,-2.2,-2,-1.8,-1.6,-1.4,-1.2,-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1,1.2,1.4,1.6,1.8,2,2.2,2.4,2.6,2.8,3,3.2,3.4,3.6,3.8,4,4.2,4.4,4.6,4.8,5,5.2,5.4,5.6,5.8,6,6.2,6.4,6.6,6.8,7,7.2,7.4,7.6,7.8,8,8.2,8.4,8.6,8.8,9,9.2,9.4,9.6,9.8,10,10.2,10.4,10.6,10.8,11,11.2,11.4,11.6,11.8,12,12.2,12.4,12.6,12.8,13,13.2,13.4,13.6,13.8,14,14.2,14.4,14.6,14.8,15,15.2,15.4,15.6,15.8,16,16.2,16.4,16.6,16.8,17,17.2,17.4,17.6,17.8,18,18.2,18.4,18.6,18.8,19,19.2,19.4,19.6,19.8,20,20.2,20.4,20.6,20.8,21,21.2,21.4,21.6,21.8,22,22.2,22.4,22.6,22.8,23,23.2,23.4,23.6,23.8,24,24.2,24.4,24.6,24.8,25,25.2
|
||||
0.014329,0.015063,0.015797,0.016531,0.017266,0.018,0.01893,0.01986,0.020791,0.021721,0.022651,0.023849,0.025047,0.026245,0.027443,0.028642,0.03008,0.031518,0.032957,0.034395,0.035834,0.037611,0.039388,0.041166,0.042943,0.04472,0.046979,0.049237,0.051496,0.053755,0.056013,0.058941,0.061869,0.064797,0.067725,0.070653,0.074193,0.077734,0.081274,0.084814,0.088355,0.092706,0.097057,0.10141,0.10576,0.11011,0.11555,0.121,0.12644,0.13188,0.13733,0.14408,0.15084,0.1576,0.16435,0.17111,0.17937,0.18763,0.19589,0.20415,0.21241,0.22245,0.23248,0.24252,0.25256,0.2626,0.27469,0.28678,0.29888,0.31097,0.32306,0.33766,0.35225,0.36685,0.38144,0.39604,0.41344,0.43084,0.44824,0.46564,0.48304,0.50338,0.52372,0.54407,0.56441,0.58475,0.60833,0.63192,0.6555,0.67908,0.70266,0.73007,0.75747,0.78488,0.81228,0.83969,0.86999,0.9003,0.9306,0.96091,0.99121,1.0254,1.0595,1.0937,1.1279,1.162,1.1993,1.2365,1.2737,1.3109,1.3482,1.3887,1.4293,1.4699,1.5104,1.551,1.5939,1.6368,1.6797,1.7226,1.7655,1.8112,1.8568,1.9025,1.9482,1.9938,2.041,2.0882,2.1353,2.1825,2.2296,2.2795,2.3293,2.3791,2.4289,2.4788,2.53,2.5813,2.6326,2.6839,2.7351,2.7877,2.8403,2.8929,2.9455,2.9981,3.0522,3.1063,3.1604,3.2145,3.2686,3.3237,3.3788,3.4339,3.489,3.5441,3.6003,3.6564,3.7125,3.7686,3.8247,3.8815,3.9384,3.9952,4.052,4.1089,4.1662,4.2235,4.2808,4.3381,4.3954,4.4527,4.5099,4.5671,4.6244,4.6816,4.7375,4.7934,4.8492,4.9051,4.961,5.0138,5.0666,5.1195,5.1723,5.2251,5.2722,5.3192,5.3662,5.4132,5.4603,5.4992,5.538,5.5769,5.6158,5.6547,5.684,5.7134,5.7427,5.772,5.8013,5.821,5.8408,5.8605,5.8803,5.9,5.9114,5.9229,5.9343,5.9458,5.9572,5.9628,5.9684,5.974,5.9796,5.9852,5.9874,5.9895,5.9917,5.9938,5.996,5.9967,5.9973,5.998,5.9986,5.9993,6
|
||||
0.0023882,0.0025106,0.0026329,0.0027552,0.0028776,0.0029999,0.003155,0.00331,0.0034651,0.0036202,0.0037752,0.0039749,0.0041746,0.0043742,0.0045739,0.0047736,0.0050133,0.0052531,0.0054928,0.0057325,0.0059723,0.0062685,0.0065647,0.0068609,0.0071571,0.0074534,0.0078298,0.0082062,0.0085827,0.0089591,0.0093356,0.0098236,0.010312,0.0108,0.011288,0.011776,0.012366,0.012956,0.013546,0.014136,0.014726,0.015451,0.016176,0.016901,0.017627,0.018352,0.019259,0.020166,0.021073,0.02198,0.022888,0.024014,0.02514,0.026266,0.027392,0.028519,0.029895,0.031272,0.032648,0.034025,0.035401,0.037074,0.038747,0.04042,0.042094,0.043767,0.045782,0.047797,0.049813,0.051828,0.053844,0.056276,0.058709,0.061141,0.063574,0.066006,0.068906,0.071806,0.074706,0.077606,0.080506,0.083897,0.087287,0.090678,0.094068,0.097458,0.10139,0.10532,0.10925,0.11318,0.11711,0.12168,0.12625,0.13081,0.13538,0.13995,0.145,0.15005,0.1551,0.16015,0.1652,0.1709,0.17659,0.18228,0.18798,0.19367,0.19988,0.20608,0.21229,0.21849,0.22469,0.23146,0.23822,0.24498,0.25174,0.2585,0.26565,0.2728,0.27995,0.2871,0.29425,0.30186,0.30947,0.31708,0.32469,0.3323,0.34016,0.34803,0.35589,0.36375,0.37161,0.37991,0.38822,0.39652,0.40482,0.41313,0.42167,0.43022,0.43876,0.44731,0.45586,0.46462,0.47338,0.48215,0.49091,0.49968,0.50869,0.51771,0.52673,0.53575,0.54476,0.55395,0.56313,0.57232,0.58151,0.59069,0.60004,0.6094,0.61875,0.6281,0.63745,0.64692,0.6564,0.66587,0.67534,0.68481,0.69437,0.70392,0.71347,0.72302,0.73257,0.74211,0.75165,0.76119,0.77073,0.78026,0.78958,0.79889,0.80821,0.81752,0.82683,0.83564,0.84444,0.85325,0.86205,0.87085,0.87869,0.88653,0.89437,0.90221,0.91004,0.91653,0.92301,0.92949,0.93597,0.94245,0.94734,0.95223,0.95711,0.962,0.96688,0.97017,0.97346,0.97675,0.98004,0.98333,0.98524,0.98715,0.98906,0.99096,0.99287,0.9938,0.99474,0.99567,0.9966,0.99754,0.9979,0.99826,0.99862,0.99897,0.99933,0.99944,0.99955,0.99966,0.99977,0.99988,1
|
||||
|
@@ -1,3 +0,0 @@
|
||||
-20;-19.8;-19.6;-19.4;-19.2;-19;-18.8;-18.6;-18.4;-18.2;-18;-17.8;-17.6;-17.4;-17.2;-17;-16.8;-16.6;-16.4;-16.2;-16;-15.8;-15.6;-15.4;-15.2;-15;-14.8;-14.6;-14.4;-14.2;-14;-13.8;-13.6;-13.4;-13.2;-13;-12.8;-12.6;-12.4;-12.2;-12;-11.8;-11.6;-11.4;-11.2;-11;-10.8;-10.6;-10.4;-10.2;-10;-9.8;-9.6;-9.4;-9.2;-9;-8.8;-8.6;-8.4;-8.2;-8;-7.8;-7.6;-7.4;-7.2;-7;-6.8;-6.6;-6.4;-6.2;-6;-5.8;-5.6;-5.4;-5.2;-5;-4.8;-4.6;-4.4;-4.2;-4;-3.8;-3.6;-3.4;-3.2;-3;-2.8;-2.6;-2.4;-2.2;-2;-1.8;-1.6;-1.4;-1.2;-1;-0.8;-0.6;-0.4;-0.2;0;0.2;0.4;0.6;0.8;1;1.2;1.4;1.6;1.8;2;2.2;2.4;2.6;2.8;3;3.2;3.4;3.6;3.8;4;4.2;4.4;4.6;4.8;5;5.2;5.4;5.6;5.8;6;6.2;6.4;6.6;6.8;7;7.2;7.4;7.6;7.8;8;8.2;8.4;8.6;8.8;9;9.2;9.4;9.6;9.8;10;10.2;10.4;10.6;10.8;11;11.2;11.4;11.6;11.8;12;12.2;12.4;12.6;12.8;13;13.2;13.4;13.6;13.8;14;14.2;14.4;14.6;14.8;15;15.2;15.4;15.6;15.8;16;16.2;16.4;16.6;16.8;17;17.2;17.4;17.6;17.8;18;18.2;18.4;18.6;18.8;19;19.2;19.4;19.6;19.8;20;20.2;20.4;20.6;20.8;21;21.2;21.4;21.6;21.8;22;22.2;22.4;22.6;22.8;23;23.2;23.4;23.6;23.8;24;24.2;24.4;24.6;24.8;25;25.2
|
||||
0.014329;0.015063;0.015797;0.016531;0.017266;0.018;0.01893;0.01986;0.020791;0.021721;0.022651;0.023849;0.025047;0.026245;0.027443;0.028642;0.03008;0.031518;0.032957;0.034395;0.035834;0.037611;0.039388;0.041166;0.042943;0.04472;0.046979;0.049237;0.051496;0.053755;0.056013;0.058941;0.061869;0.064797;0.067725;0.070653;0.074193;0.077734;0.081274;0.084814;0.088355;0.092706;0.097057;0.10141;0.10576;0.11011;0.11555;0.121;0.12644;0.13188;0.13733;0.14408;0.15084;0.1576;0.16435;0.17111;0.17937;0.18763;0.19589;0.20415;0.21241;0.22245;0.23248;0.24252;0.25256;0.2626;0.27469;0.28678;0.29888;0.31097;0.32306;0.33766;0.35225;0.36685;0.38144;0.39604;0.41344;0.43084;0.44824;0.46564;0.48304;0.50338;0.52372;0.54407;0.56441;0.58475;0.60833;0.63192;0.6555;0.67908;0.70266;0.73007;0.75747;0.78488;0.81228;0.83969;0.86999;0.9003;0.9306;0.96091;0.99121;1.0254;1.0595;1.0937;1.1279;1.162;1.1993;1.2365;1.2737;1.3109;1.3482;1.3887;1.4293;1.4699;1.5104;1.551;1.5939;1.6368;1.6797;1.7226;1.7655;1.8112;1.8568;1.9025;1.9482;1.9938;2.041;2.0882;2.1353;2.1825;2.2296;2.2795;2.3293;2.3791;2.4289;2.4788;2.53;2.5813;2.6326;2.6839;2.7351;2.7877;2.8403;2.8929;2.9455;2.9981;3.0522;3.1063;3.1604;3.2145;3.2686;3.3237;3.3788;3.4339;3.489;3.5441;3.6003;3.6564;3.7125;3.7686;3.8247;3.8815;3.9384;3.9952;4.052;4.1089;4.1662;4.2235;4.2808;4.3381;4.3954;4.4527;4.5099;4.5671;4.6244;4.6816;4.7375;4.7934;4.8492;4.9051;4.961;5.0138;5.0666;5.1195;5.1723;5.2251;5.2722;5.3192;5.3662;5.4132;5.4603;5.4992;5.538;5.5769;5.6158;5.6547;5.684;5.7134;5.7427;5.772;5.8013;5.821;5.8408;5.8605;5.8803;5.9;5.9114;5.9229;5.9343;5.9458;5.9572;5.9628;5.9684;5.974;5.9796;5.9852;5.9874;5.9895;5.9917;5.9938;5.996;5.9967;5.9973;5.998;5.9986;5.9993;6
|
||||
0.0023882;0.0025106;0.0026329;0.0027552;0.0028776;0.0029999;0.003155;0.00331;0.0034651;0.0036202;0.0037752;0.0039749;0.0041746;0.0043742;0.0045739;0.0047736;0.0050133;0.0052531;0.0054928;0.0057325;0.0059723;0.0062685;0.0065647;0.0068609;0.0071571;0.0074534;0.0078298;0.0082062;0.0085827;0.0089591;0.0093356;0.0098236;0.010312;0.0108;0.011288;0.011776;0.012366;0.012956;0.013546;0.014136;0.014726;0.015451;0.016176;0.016901;0.017627;0.018352;0.019259;0.020166;0.021073;0.02198;0.022888;0.024014;0.02514;0.026266;0.027392;0.028519;0.029895;0.031272;0.032648;0.034025;0.035401;0.037074;0.038747;0.04042;0.042094;0.043767;0.045782;0.047797;0.049813;0.051828;0.053844;0.056276;0.058709;0.061141;0.063574;0.066006;0.068906;0.071806;0.074706;0.077606;0.080506;0.083897;0.087287;0.090678;0.094068;0.097458;0.10139;0.10532;0.10925;0.11318;0.11711;0.12168;0.12625;0.13081;0.13538;0.13995;0.145;0.15005;0.1551;0.16015;0.1652;0.1709;0.17659;0.18228;0.18798;0.19367;0.19988;0.20608;0.21229;0.21849;0.22469;0.23146;0.23822;0.24498;0.25174;0.2585;0.26565;0.2728;0.27995;0.2871;0.29425;0.30186;0.30947;0.31708;0.32469;0.3323;0.34016;0.34803;0.35589;0.36375;0.37161;0.37991;0.38822;0.39652;0.40482;0.41313;0.42167;0.43022;0.43876;0.44731;0.45586;0.46462;0.47338;0.48215;0.49091;0.49968;0.50869;0.51771;0.52673;0.53575;0.54476;0.55395;0.56313;0.57232;0.58151;0.59069;0.60004;0.6094;0.61875;0.6281;0.63745;0.64692;0.6564;0.66587;0.67534;0.68481;0.69437;0.70392;0.71347;0.72302;0.73257;0.74211;0.75165;0.76119;0.77073;0.78026;0.78958;0.79889;0.80821;0.81752;0.82683;0.83564;0.84444;0.85325;0.86205;0.87085;0.87869;0.88653;0.89437;0.90221;0.91004;0.91653;0.92301;0.92949;0.93597;0.94245;0.94734;0.95223;0.95711;0.962;0.96688;0.97017;0.97346;0.97675;0.98004;0.98333;0.98524;0.98715;0.98906;0.99096;0.99287;0.9938;0.99474;0.99567;0.9966;0.99754;0.9979;0.99826;0.99862;0.99897;0.99933;0.99944;0.99955;0.99966;0.99977;0.99988;1
|
||||
@@ -1,278 +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
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <unistd.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "init_lte.h"
|
||||
|
||||
#include "PHY/extern.h"
|
||||
|
||||
#include "LAYER2/MAC/defs.h"
|
||||
#include "LAYER2/MAC/extern.h"
|
||||
#include "UTIL/LOG/log_if.h"
|
||||
#include "PHY_INTERFACE/extern.h"
|
||||
|
||||
|
||||
/*
|
||||
PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint8_t eNB_id,
|
||||
uint8_t Nid_cell,
|
||||
node_function_t node_function,
|
||||
uint8_t abstraction_flag)
|
||||
{
|
||||
|
||||
int i,j;
|
||||
PHY_VARS_eNB* PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB));
|
||||
memset(PHY_vars_eNB,0,sizeof(PHY_VARS_eNB));
|
||||
PHY_vars_eNB->Mod_id=eNB_id;
|
||||
memcpy(&(PHY_vars_eNB->frame_parms), frame_parms, sizeof(LTE_DL_FRAME_PARMS));
|
||||
PHY_vars_eNB->frame_parms.Nid_cell = ((Nid_cell/3)*3)+((eNB_id+Nid_cell)%3);
|
||||
PHY_vars_eNB->frame_parms.nushift = PHY_vars_eNB->frame_parms.Nid_cell%6;
|
||||
phy_init_lte_eNB(PHY_vars_eNB,0,abstraction_flag);
|
||||
|
||||
LOG_I(PHY,"init eNB: Node Function %d\n",node_function);
|
||||
LOG_I(PHY,"init eNB: Nid_cell %d\n", frame_parms->Nid_cell);
|
||||
LOG_I(PHY,"init eNB: frame_type %d,tdd_config %d\n", frame_parms->frame_type,frame_parms->tdd_config);
|
||||
LOG_I(PHY,"init eNB: number of ue max %d number of enb max %d number of harq pid max %d\n",
|
||||
NUMBER_OF_UE_MAX, NUMBER_OF_eNB_MAX, NUMBER_OF_HARQ_PID_MAX);
|
||||
LOG_I(PHY,"init eNB: N_RB_DL %d\n", frame_parms->N_RB_DL);
|
||||
LOG_I(PHY,"init eNB: prach_config_index %d\n", frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex);
|
||||
|
||||
if (node_function >= NGFI_RRU_IF5)
|
||||
// For RRU, don't allocate DLSCH/ULSCH Transport channel buffers
|
||||
return (PHY_vars_eNB);
|
||||
|
||||
|
||||
for (i=0; i<NUMBER_OF_UE_MAX; i++) {
|
||||
LOG_I(PHY,"Allocating Transport Channel Buffers for DLSCH, UE %d\n",i);
|
||||
for (j=0; j<2; j++) {
|
||||
PHY_vars_eNB->dlsch[i][j] = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL,abstraction_flag,frame_parms);
|
||||
if (!PHY_vars_eNB->dlsch[i][j]) {
|
||||
LOG_E(PHY,"Can't get eNB dlsch structures for UE %d \n", i);
|
||||
exit(-1);
|
||||
} else {
|
||||
LOG_D(PHY,"dlsch[%d][%d] => %p\n",i,j,PHY_vars_eNB->dlsch[i][j]);
|
||||
PHY_vars_eNB->dlsch[i][j]->rnti=0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
LOG_I(PHY,"Allocating Transport Channel Buffer for ULSCH, UE %d\n",i);
|
||||
PHY_vars_eNB->ulsch[1+i] = new_eNB_ulsch(MAX_TURBO_ITERATIONS,frame_parms->N_RB_UL, abstraction_flag);
|
||||
|
||||
if (!PHY_vars_eNB->ulsch[1+i]) {
|
||||
LOG_E(PHY,"Can't get eNB ulsch structures\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
// this is the transmission mode for the signalling channels
|
||||
// this will be overwritten with the real transmission mode by the RRC once the UE is connected
|
||||
PHY_vars_eNB->transmission_mode[i] = frame_parms->nb_antenna_ports_eNB==1 ? 1 : 2;
|
||||
#ifdef LOCALIZATION
|
||||
PHY_vars_eNB->ulsch[1+i]->aggregation_period_ms = 5000; // 5000 milliseconds // could be given as an argument (TBD))
|
||||
struct timeval ts;
|
||||
gettimeofday(&ts, NULL);
|
||||
PHY_vars_eNB->ulsch[1+i]->reference_timestamp_ms = ts.tv_sec * 1000 + ts.tv_usec / 1000;
|
||||
int j;
|
||||
|
||||
for (j=0; j<10; j++) {
|
||||
initialize(&PHY_vars_eNB->ulsch[1+i]->loc_rss_list[j]);
|
||||
initialize(&PHY_vars_eNB->ulsch[1+i]->loc_rssi_list[j]);
|
||||
initialize(&PHY_vars_eNB->ulsch[1+i]->loc_subcarrier_rss_list[j]);
|
||||
initialize(&PHY_vars_eNB->ulsch[1+i]->loc_timing_advance_list[j]);
|
||||
initialize(&PHY_vars_eNB->ulsch[1+i]->loc_timing_update_list[j]);
|
||||
}
|
||||
|
||||
initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_rss_list);
|
||||
initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_rssi_list);
|
||||
initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_subcarrier_rss_list);
|
||||
initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_timing_advance_list);
|
||||
initialize(&PHY_vars_eNB->ulsch[1+i]->tot_loc_timing_update_list);
|
||||
#endif
|
||||
}
|
||||
|
||||
// ULSCH for RA
|
||||
PHY_vars_eNB->ulsch[0] = new_eNB_ulsch(MAX_TURBO_ITERATIONS, frame_parms->N_RB_UL, abstraction_flag);
|
||||
|
||||
if (!PHY_vars_eNB->ulsch[0]) {
|
||||
LOG_E(PHY,"Can't get eNB ulsch structures\n");
|
||||
exit(-1);
|
||||
}
|
||||
PHY_vars_eNB->dlsch_SI = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL, abstraction_flag, frame_parms);
|
||||
LOG_D(PHY,"eNB %d : SI %p\n",eNB_id,PHY_vars_eNB->dlsch_SI);
|
||||
PHY_vars_eNB->dlsch_ra = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL, abstraction_flag, frame_parms);
|
||||
LOG_D(PHY,"eNB %d : RA %p\n",eNB_id,PHY_vars_eNB->dlsch_ra);
|
||||
PHY_vars_eNB->dlsch_MCH = new_eNB_dlsch(1,8,NSOFT,frame_parms->N_RB_DL, 0, frame_parms);
|
||||
LOG_D(PHY,"eNB %d : MCH %p\n",eNB_id,PHY_vars_eNB->dlsch_MCH);
|
||||
|
||||
|
||||
PHY_vars_eNB->rx_total_gain_dB=130;
|
||||
|
||||
for(i=0; i<NUMBER_OF_UE_MAX; i++)
|
||||
PHY_vars_eNB->mu_mimo_mode[i].dl_pow_off = 2;
|
||||
|
||||
PHY_vars_eNB->check_for_total_transmissions = 0;
|
||||
|
||||
PHY_vars_eNB->check_for_MUMIMO_transmissions = 0;
|
||||
|
||||
PHY_vars_eNB->FULL_MUMIMO_transmissions = 0;
|
||||
|
||||
PHY_vars_eNB->check_for_SUMIMO_transmissions = 0;
|
||||
|
||||
PHY_vars_eNB->frame_parms.pucch_config_common.deltaPUCCH_Shift = 1;
|
||||
|
||||
return (PHY_vars_eNB);
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
|
||||
PHY_VARS_RN* init_lte_RN(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint8_t RN_id,
|
||||
uint8_t eMBMS_active_state)
|
||||
{
|
||||
|
||||
int i;
|
||||
PHY_VARS_RN* PHY_vars_RN = malloc(sizeof(PHY_VARS_RN));
|
||||
memset(PHY_vars_RN,0,sizeof(PHY_VARS_RN));
|
||||
PHY_vars_RN->Mod_id=RN_id;
|
||||
|
||||
if (eMBMS_active_state == multicast_relay) {
|
||||
for (i=0; i < 10 ; i++) { // num SF in a frame
|
||||
PHY_vars_RN->dlsch_rn_MCH[i] = new_ue_dlsch(1,1,NSOFT,MAX_TURBO_ITERATIONS_MBSFN,frame_parms->N_RB_DL, 0);
|
||||
LOG_D(PHY,"eNB %d : MCH[%d] %p\n",RN_id,i,PHY_vars_RN->dlsch_rn_MCH[i]);
|
||||
}
|
||||
} else {
|
||||
PHY_vars_RN->dlsch_rn_MCH[0] = new_ue_dlsch(1,1,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, 0);
|
||||
LOG_D(PHY,"eNB %d : MCH[0] %p\n",RN_id,PHY_vars_RN->dlsch_rn_MCH[0]);
|
||||
}
|
||||
|
||||
return (PHY_vars_RN);
|
||||
}
|
||||
|
||||
void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs],
|
||||
uint8_t frame_type,
|
||||
uint8_t tdd_config,
|
||||
uint8_t tdd_config_S,
|
||||
uint8_t extended_prefix_flag,
|
||||
uint8_t N_RB_DL,
|
||||
uint16_t Nid_cell,
|
||||
uint8_t cooperation_flag,
|
||||
uint8_t nb_antenna_ports,
|
||||
uint8_t abstraction_flag,
|
||||
int nb_antennas_rx,
|
||||
int nb_antennas_tx,
|
||||
int nb_antennas_rx_ue,
|
||||
uint8_t eMBMS_active_state)
|
||||
{
|
||||
|
||||
uint8_t eNB_id,UE_id,CC_id;
|
||||
int i;
|
||||
|
||||
|
||||
mac_xface = malloc(sizeof(MAC_xface));
|
||||
|
||||
memset(mac_xface, 0, sizeof(MAC_xface));
|
||||
|
||||
LOG_I(PHY,"init lte parms: Nid_cell %d, Frame type %d, N_RB_DL %d\n",Nid_cell,frame_type,N_RB_DL);
|
||||
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
frame_parms[CC_id] = calloc(1, sizeof(LTE_DL_FRAME_PARMS));
|
||||
(frame_parms[CC_id])->frame_type = frame_type;
|
||||
(frame_parms[CC_id])->tdd_config = tdd_config;
|
||||
(frame_parms[CC_id])->tdd_config_S = tdd_config_S;
|
||||
(frame_parms[CC_id])->N_RB_DL = N_RB_DL;
|
||||
(frame_parms[CC_id])->N_RB_UL = (frame_parms[CC_id])->N_RB_DL;
|
||||
(frame_parms[CC_id])->phich_config_common.phich_resource = oneSixth;
|
||||
(frame_parms[CC_id])->phich_config_common.phich_duration = normal;
|
||||
(frame_parms[CC_id])->Ncp = extended_prefix_flag;
|
||||
(frame_parms[CC_id])->Ncp_UL = extended_prefix_flag;
|
||||
(frame_parms[CC_id])->Nid_cell = Nid_cell;
|
||||
(frame_parms[CC_id])->nushift = (Nid_cell%6);
|
||||
(frame_parms[CC_id])->nb_antennas_tx = nb_antennas_tx;
|
||||
(frame_parms[CC_id])->nb_antennas_rx = nb_antennas_rx;
|
||||
(frame_parms[CC_id])->nb_antenna_ports_eNB = nb_antenna_ports;
|
||||
(frame_parms[CC_id])->mode1_flag = (frame_parms[CC_id])->nb_antenna_ports_eNB==1 ? 1 : 0;
|
||||
|
||||
init_frame_parms(frame_parms[CC_id],1);
|
||||
|
||||
(frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0
|
||||
(frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 1;
|
||||
(frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 0;
|
||||
(frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = 0;
|
||||
init_ul_hopping(frame_parms[CC_id]);
|
||||
}
|
||||
|
||||
|
||||
// phy_init_top(frame_parms[0]);
|
||||
|
||||
phy_init_lte_top(frame_parms[0]);
|
||||
|
||||
RC.nb_inst = NB_eNB_INST;
|
||||
RC.nb_CC = (int *)malloc(MAX_NUM_CCs*sizeof(int));
|
||||
RC.nb_RU = NB_RU;
|
||||
for (i=0;i<NB_eNB_INST;i++) RC.nb_CC[i] = MAX_NUM_CCs;
|
||||
|
||||
RC.eNB = (PHY_VARS_eNB***)malloc(NB_eNB_INST*sizeof(PHY_VARS_eNB**));
|
||||
|
||||
for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) {
|
||||
|
||||
RC.eNB[eNB_id] = (PHY_VARS_eNB**) malloc(MAX_NUM_CCs*sizeof(PHY_VARS_eNB*));
|
||||
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
RC.eNB[eNB_id][CC_id] = init_lte_eNB(frame_parms[CC_id],eNB_id,Nid_cell,eNodeB_3GPP,abstraction_flag);
|
||||
RC.eNB[eNB_id][CC_id]->Mod_id=eNB_id;
|
||||
RC.eNB[eNB_id][CC_id]->CC_id=CC_id;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
PHY_vars_UE_g = (PHY_VARS_UE***)malloc(NB_UE_INST*sizeof(PHY_VARS_UE**));
|
||||
|
||||
for (UE_id=0; UE_id<NB_UE_INST; UE_id++) {
|
||||
PHY_vars_UE_g[UE_id] = (PHY_VARS_UE**) malloc(MAX_NUM_CCs*sizeof(PHY_VARS_UE*));
|
||||
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
(frame_parms[CC_id])->nb_antennas_tx = 1;
|
||||
(frame_parms[CC_id])->nb_antennas_rx = nb_antennas_rx_ue;
|
||||
PHY_vars_UE_g[UE_id][CC_id] = init_lte_UE(frame_parms[CC_id], UE_id,abstraction_flag);
|
||||
PHY_vars_UE_g[UE_id][CC_id]->Mod_id=UE_id;
|
||||
PHY_vars_UE_g[UE_id][CC_id]->CC_id=CC_id;
|
||||
}
|
||||
}
|
||||
|
||||
// if (NB_RN_INST > 0) {
|
||||
// PHY_vars_RN_g = malloc(NB_RN_INST*sizeof(PHY_VARS_RN*));
|
||||
|
||||
// for (RN_id=0; RN_id<NB_RN_INST; RN_id++) {
|
||||
// PHY_vars_RN_g[RN_id] = init_lte_RN(*frame_parms,RN_id,eMBMS_active_state);
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
*/
|
||||
@@ -1,52 +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
|
||||
*/
|
||||
|
||||
#include "PHY/types.h"
|
||||
#include "PHY/defs.h"
|
||||
|
||||
PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint8_t eNB_id,
|
||||
uint8_t Nid_cell,
|
||||
node_function_t node_function,
|
||||
uint8_t abstraction_flag);
|
||||
|
||||
PHY_VARS_UE* init_lte_UE(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint8_t UE_id,
|
||||
uint8_t abstraction_flag);
|
||||
|
||||
PHY_VARS_RN* init_lte_RN(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint8_t RN_id,
|
||||
uint8_t eMBMS_active_state);
|
||||
|
||||
void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs],
|
||||
uint8_t frame_type,
|
||||
uint8_t tdd_config,
|
||||
uint8_t tdd_config_S,
|
||||
uint8_t extended_prefix_flag,
|
||||
uint8_t N_RB_DL,
|
||||
uint16_t Nid_cell,
|
||||
uint8_t cooperation_flag,
|
||||
uint8_t nb_antenna_ports,
|
||||
uint8_t abstraction_flag,
|
||||
int nb_antennas_rx,
|
||||
int nb_antennas_tx,
|
||||
int nb_antennas_rx_ue,
|
||||
uint8_t eMBMS_active_state);
|
||||
@@ -1,91 +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
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <unistd.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "SIMULATION/TOOLS/defs.h"
|
||||
#include "SIMULATION/RF/defs.h"
|
||||
#include "PHY/types.h"
|
||||
#include "PHY/defs.h"
|
||||
#include "oaisim_config.h"
|
||||
#include "init_lte.h"
|
||||
|
||||
#ifdef OPENAIR2
|
||||
#include "LAYER2/MAC/defs.h"
|
||||
#include "UTIL/OMV/structures.h"
|
||||
#endif
|
||||
|
||||
eNB_MAC_INST* get_eNB_mac_inst(module_id_t module_idP);
|
||||
OAI_Emulation* get_OAI_emulation(void);
|
||||
void init_channel_vars(LTE_DL_FRAME_PARMS *frame_parms, double ***s_re,double ***s_im,double ***r_re,double ***r_im,double ***r_re0,double ***r_im0);
|
||||
|
||||
void do_UL_sig(channel_desc_t *UE2RU[NUMBER_OF_UE_MAX][NUMBER_OF_RU_MAX][MAX_NUM_CCs],
|
||||
node_desc_t *enb_data[NUMBER_OF_RU_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],
|
||||
uint16_t subframe,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint32_t frame,int eNB_id,uint8_t CC_id);
|
||||
|
||||
void do_DL_sig(channel_desc_t *RU2UE[NUMBER_OF_RU_MAX][NUMBER_OF_UE_MAX][MAX_NUM_CCs],
|
||||
node_desc_t *enb_data[NUMBER_OF_RU_MAX],
|
||||
node_desc_t *ue_data[NUMBER_OF_UE_MAX],
|
||||
uint16_t subframe,
|
||||
uint32_t offset,
|
||||
uint32_t length,
|
||||
uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,uint8_t UE_id,int CC_id);
|
||||
|
||||
void init_ue(node_desc_t *ue_data, UE_Antenna ue_ant);//Abstraction changes
|
||||
void init_enb(node_desc_t *enb_data, eNB_Antenna enb_ant);//Abstraction changes
|
||||
void extract_position(node_list* input_node_list, node_desc_t**, int nb_nodes);//Abstraction changes
|
||||
void get_beta_map(void);//Abstraction changes
|
||||
void get_MIESM_param(void);
|
||||
|
||||
void init_snr(channel_desc_t *, node_desc_t *, node_desc_t *, double*, double*, uint8_t, uint16_t, uint8_t, uint16_t);//Abstraction changes
|
||||
void init_snr_up(channel_desc_t *, node_desc_t *, node_desc_t *, double*, double*, uint16_t, uint16_t);//Abstraction changes
|
||||
void calculate_sinr(channel_desc_t *, node_desc_t *, node_desc_t *, double *sinr_dB, uint16_t);//Abstraction changes
|
||||
void get_beta_map(void);
|
||||
int dlsch_abstraction_EESM(double* sinr_dB, uint32_t rb_alloc[4], uint8_t mcs, uint8_t); //temporary testing for PHY abstraction
|
||||
int dlsch_abstraction_MIESM(double* sinr_dB,uint8_t TM, uint32_t rb_alloc[4], uint8_t mcs,uint8_t);
|
||||
int ulsch_abstraction_MIESM(double* sinr_dB,uint8_t TM, uint8_t mcs,uint16_t nb_rb, uint16_t first_rb);
|
||||
int ulsch_abstraction(double* sinr_dB,uint8_t TM, uint8_t mcs,uint16_t nb_rb, uint16_t first_rb);
|
||||
|
||||
void calc_path_loss(node_desc_t* node_tx, node_desc_t* node_rx, channel_desc_t *ch_desc, Environment_System_Config env_desc, double **SF);
|
||||
|
||||
void do_OFDM_mod(int32_t **txdataF, int32_t **txdata, frame_t frame, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms);
|
||||
|
||||
void reset_opp_meas(void);
|
||||
void print_opp_meas(void);
|
||||
|
||||
#ifdef OPENAIR2
|
||||
int omv_write (int pfd, node_list* enb_node_list, node_list* ue_node_list, Data_Flow_Unit omv_data);
|
||||
void omv_end (int pfd, Data_Flow_Unit omv_data);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,85 +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 oaisim_config.h
|
||||
* \brief configure an emulation
|
||||
* \author navid nikaein & Lusheng Wang
|
||||
* \date 2006-2010
|
||||
* \version 4.0
|
||||
* \company Eurecom
|
||||
* \email: openair_tech@eurecom.fr
|
||||
* \note this a note
|
||||
* \bug this is a bug
|
||||
* \warning this is a warning
|
||||
*/
|
||||
|
||||
//-----------------------------------begin group-----------------------------
|
||||
/** @defgroup _oaisim The sturcture of OAISIM
|
||||
|
||||
The current sturcture of oaisim is shown by the figure.
|
||||
|
||||
\image html new_OCG_structure.png "new_OCG_structure"
|
||||
|
||||
|
||||
* @{*/
|
||||
|
||||
/* @}*/
|
||||
|
||||
#include "UTIL/LOG/log_if.h"
|
||||
#include "UTIL/LOG/log_extern.h"
|
||||
#include "UTIL/OCG/OCG.h"
|
||||
#include "UTIL/OPT/opt.h" // to test OPT
|
||||
#include "UTIL/OMG/omg.h"
|
||||
#include "UTIL/CLI/cli_if.h"
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/extern.h"
|
||||
#include "SIMULATION/ETH_TRANSPORT/defs.h"
|
||||
#include "PHY/defs.h"
|
||||
|
||||
/** @defgroup _init_oai Initial oaisim
|
||||
* @ingroup _fn
|
||||
* @brief Initialize all the parameters before start an emulation
|
||||
* @{*/
|
||||
void init_oai_emulation(void);
|
||||
/* @}*/
|
||||
|
||||
/** @defgroup _config_oaisim All the configurations for an emulation
|
||||
* @ingroup _fn
|
||||
* @brief This is the function that calls all the other configuration functions
|
||||
* @{*/
|
||||
void oaisim_config(void);
|
||||
/* @}*/
|
||||
|
||||
|
||||
/** @defgroup _config_module Configuration functions for various modules
|
||||
* @ingroup _fn
|
||||
* @brief There are the functions to configure different various modules in the emulator
|
||||
* @{*/
|
||||
int olg_config(void);
|
||||
int ocg_config_env(void);
|
||||
int ocg_config_omg(void);
|
||||
int ocg_config_topo(void);
|
||||
int ocg_config_app(void);
|
||||
int ocg_config_emu(void);
|
||||
|
||||
int flow_start_time(int sid, int did, uint32_t n_frames, uint32_t start, uint32_t duration);
|
||||
/* @}*/
|
||||
|
||||
@@ -1,70 +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
|
||||
*/
|
||||
|
||||
#include "oaisim.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <getopt.h>
|
||||
|
||||
#include "UTIL/FIFO/pad_list.h"
|
||||
|
||||
#ifndef OAISIM_FUNCTIONS_H_
|
||||
#define OAISIM_FUNCTIONS_H_
|
||||
|
||||
void get_simulation_options(int argc, char *argv[]);
|
||||
|
||||
void check_and_adjust_params(void);
|
||||
|
||||
void init_omv(void);
|
||||
|
||||
void init_seed(uint8_t set_seed);
|
||||
|
||||
void init_openair1(void);
|
||||
|
||||
void init_openair2(void);
|
||||
|
||||
void init_ocm(void);
|
||||
|
||||
void init_otg_pdcp_buffer(void);
|
||||
|
||||
void update_omg(frame_t frameP);
|
||||
|
||||
void update_omg_ocm(void);
|
||||
|
||||
void update_ocm(void);
|
||||
|
||||
void update_otg_eNB(module_id_t module_idP, unsigned int ctime);
|
||||
|
||||
void update_otg_UE(module_id_t module_idP, unsigned int ctime);
|
||||
|
||||
void exit_fun(const char* s);
|
||||
|
||||
void init_time(void);
|
||||
|
||||
void init_pad(void);
|
||||
|
||||
void help(void);
|
||||
|
||||
int init_slot_isr(void);
|
||||
|
||||
void wait_for_slot_isr(void);
|
||||
|
||||
#endif /* OAISIM_FUNCTIONS_H_ */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,48 +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
|
||||
*/
|
||||
|
||||
/* Form definition file generated with fdesign. */
|
||||
|
||||
#include <forms.h>
|
||||
#include <stdlib.h>
|
||||
#include "phy_procedures_sim_form.h"
|
||||
|
||||
FD_phy_procedures_sim *create_form_phy_procedures_sim(void)
|
||||
{
|
||||
FL_OBJECT *obj;
|
||||
FD_phy_procedures_sim *fdui = (FD_phy_procedures_sim *) fl_calloc(1, sizeof(*fdui));
|
||||
|
||||
fdui->phy_procedures_sim = fl_bgn_form(FL_NO_BOX, 640, 320);
|
||||
obj = fl_add_box(FL_UP_BOX,0,0,640,320,"");
|
||||
fdui->pusch_constellation = obj = fl_add_xyplot(FL_POINTS_XYPLOT,50,30,220,190,"PUSCH constellation");
|
||||
fl_set_object_color(obj,FL_BLACK,FL_YELLOW);
|
||||
fdui->pdsch_constellation = obj = fl_add_xyplot(FL_POINTS_XYPLOT,370,30,220,190,"PDSCH constellation");
|
||||
fl_set_object_color(obj,FL_BLACK,FL_YELLOW);
|
||||
fdui->ch00 = obj = fl_add_xyplot(FL_IMPULSE_XYPLOT,370,240,210,60,"CH00");
|
||||
fl_set_object_color(obj,FL_BLACK,FL_YELLOW);
|
||||
fl_end_form();
|
||||
|
||||
fdui->phy_procedures_sim->fdui = fdui;
|
||||
|
||||
return fdui;
|
||||
}
|
||||
/*---------------------------------------*/
|
||||
|
||||
@@ -1,88 +0,0 @@
|
||||
Magic: 13000
|
||||
|
||||
Internal Form Definition File
|
||||
(do not change)
|
||||
|
||||
Number of forms: 1
|
||||
Unit of measure: FL_COORD_PIXEL
|
||||
|
||||
=============== FORM ===============
|
||||
Name: phy_procedures_sim
|
||||
Width: 640
|
||||
Height: 320
|
||||
Number of Objects: 4
|
||||
|
||||
--------------------
|
||||
class: FL_BOX
|
||||
type: UP_BOX
|
||||
box: 0 0 640 320
|
||||
boxtype: FL_UP_BOX
|
||||
colors: FL_COL1 FL_COL1
|
||||
alignment: FL_ALIGN_CENTER
|
||||
style: FL_NORMAL_STYLE
|
||||
size: FL_DEFAULT_SIZE
|
||||
lcol: FL_BLACK
|
||||
label:
|
||||
shortcut:
|
||||
resize: FL_RESIZE_ALL
|
||||
gravity: FL_NoGravity FL_NoGravity
|
||||
name:
|
||||
callback:
|
||||
argument:
|
||||
|
||||
--------------------
|
||||
class: FL_XYPLOT
|
||||
type: POINTS_XYPLOT
|
||||
box: 50 30 220 190
|
||||
boxtype: FL_FLAT_BOX
|
||||
colors: FL_BLACK FL_YELLOW
|
||||
alignment: FL_ALIGN_BOTTOM
|
||||
style: FL_NORMAL_STYLE
|
||||
size: FL_TINY_SIZE
|
||||
lcol: FL_BLACK
|
||||
label: PUSCH constellation
|
||||
shortcut:
|
||||
resize: FL_RESIZE_ALL
|
||||
gravity: FL_NoGravity FL_NoGravity
|
||||
name: pusch_constellation
|
||||
callback:
|
||||
argument:
|
||||
|
||||
--------------------
|
||||
class: FL_XYPLOT
|
||||
type: POINTS_XYPLOT
|
||||
box: 370 30 220 190
|
||||
boxtype: FL_FLAT_BOX
|
||||
colors: FL_BLACK FL_YELLOW
|
||||
alignment: FL_ALIGN_BOTTOM
|
||||
style: FL_NORMAL_STYLE
|
||||
size: FL_TINY_SIZE
|
||||
lcol: FL_BLACK
|
||||
label: PDSCH constellation
|
||||
shortcut:
|
||||
resize: FL_RESIZE_ALL
|
||||
gravity: FL_NoGravity FL_NoGravity
|
||||
name: pdsch_constellation
|
||||
callback:
|
||||
argument:
|
||||
|
||||
--------------------
|
||||
class: FL_XYPLOT
|
||||
type: IMPULSE_XYPLOT
|
||||
box: 370 240 210 60
|
||||
boxtype: FL_FLAT_BOX
|
||||
colors: FL_BLACK FL_YELLOW
|
||||
alignment: FL_ALIGN_BOTTOM
|
||||
style: FL_NORMAL_STYLE
|
||||
size: FL_TINY_SIZE
|
||||
lcol: FL_BLACK
|
||||
label: CH00
|
||||
shortcut:
|
||||
resize: FL_RESIZE_ALL
|
||||
gravity: FL_NoGravity FL_NoGravity
|
||||
name: ch00
|
||||
callback:
|
||||
argument:
|
||||
|
||||
==============================
|
||||
create_the_forms
|
||||
@@ -1,43 +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
|
||||
*/
|
||||
|
||||
/** Header file generated with fdesign on Tue Jul 27 16:31:42 2010.**/
|
||||
|
||||
#ifndef FD_phy_procedures_sim_h_
|
||||
#define FD_phy_procedures_sim_h_
|
||||
|
||||
/** Callbacks, globals and object handlers **/
|
||||
|
||||
|
||||
/**** Forms and Objects ****/
|
||||
typedef struct {
|
||||
FL_FORM *phy_procedures_sim;
|
||||
void *vdata;
|
||||
char *cdata;
|
||||
long ldata;
|
||||
FL_OBJECT *pusch_constellation;
|
||||
FL_OBJECT *pdsch_constellation;
|
||||
FL_OBJECT *ch00;
|
||||
} FD_phy_procedures_sim;
|
||||
|
||||
extern FD_phy_procedures_sim * create_form_phy_procedures_sim(void);
|
||||
|
||||
#endif /* FD_phy_procedures_sim_h_ */
|
||||
@@ -1,57 +0,0 @@
|
||||
function plot_results(tm)
|
||||
data_abs = dlmread(sprintf('UE_stats_abs_th0_tx%d.txt',tm));
|
||||
data = dlmread(sprintf('UE_stats_th0_tx%d.txt',tm));
|
||||
figure
|
||||
plot(data(:,1),data(:,2))
|
||||
hold on
|
||||
plot(data_abs(:,1),data_abs(:,2),'r')
|
||||
title(sprintf('Average Throughput of System for TM %d',tm))
|
||||
xlabel('Frames')
|
||||
ylabel('Throughput [kbps]')
|
||||
legend('Full PHY','PHY ABSTRACTION')
|
||||
hold off
|
||||
%figure
|
||||
%[f x]=ecdf(data(:,2));
|
||||
%plot(x,f);
|
||||
%hold on
|
||||
%[f x]=ecdf(data_abs(:,2));
|
||||
%plot(x,f);
|
||||
%hold off
|
||||
% figure
|
||||
% cdfplot(data(:,2));
|
||||
% hold on
|
||||
% cdfplot(data_abs(:,2));
|
||||
% hold off
|
||||
%data0 = dlmread(sprintf('UE_stats_th0_tx%d.txt',tm));
|
||||
%if(users>1)
|
||||
%data1 = dlmread(sprintf('UE_stats_th1_tx%d.txt',tm));
|
||||
%data1_abs = dlmread(sprintf('UE_stats_abs_th1_tx%d.txt',tm));
|
||||
%end
|
||||
%data0_abs = dlmread(sprintf('UE_stats_abs_th0_tx%d.txt',tm));
|
||||
%figure
|
||||
%plot(data0(:,1),data0(:,2))
|
||||
%hold on;
|
||||
%plot(data0_abs(:,1),data0_abs(:,2),'r')
|
||||
%title(sprintf('Instanteneous Throughput of UE 1 for TM %d',tm))
|
||||
%xlabel('Frames')
|
||||
%ylabel('Throughput [kbps]')
|
||||
%legend('Full PHY','PHY ABSTRACTION')
|
||||
%hold off
|
||||
% figure
|
||||
% [f x]=ecdf(data0(:,2));
|
||||
% plot(x,f);
|
||||
% hold on
|
||||
% [f x]=ecdf(data0_abs(:,2));
|
||||
% plot(x,f);
|
||||
% hold off
|
||||
%if(users>1)
|
||||
%figure
|
||||
%plot(data1(:,1),data1(:,2))
|
||||
%hold on;
|
||||
%plot(data1_abs(:,1),data1_abs(:,2),'r')
|
||||
%title(sprintf('Instanteneous Throughput of UE 2 for TM %d',tm))
|
||||
%xlabel('Frames')
|
||||
%ylabel('Throughput [kbps]')
|
||||
%legend('Full PHY','PHY ABSTRACTION')
|
||||
%hold off
|
||||
%end
|
||||
@@ -1,680 +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
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <unistd.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <cblas.h>
|
||||
|
||||
#include "SIMULATION/TOOLS/defs.h"
|
||||
#include "SIMULATION/RF/defs.h"
|
||||
#include "PHY/types.h"
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/extern.h"
|
||||
#include "oaisim_config.h"
|
||||
|
||||
#ifdef OPENAIR2
|
||||
#include "LAYER2/MAC/defs.h"
|
||||
#include "LAYER2/MAC/extern.h"
|
||||
#include "UTIL/LOG/log_if.h"
|
||||
#include "UTIL/LOG/log_extern.h"
|
||||
#include "RRC/LITE/extern.h"
|
||||
#include "PHY_INTERFACE/extern.h"
|
||||
#include "UTIL/OCG/OCG.h"
|
||||
#include "UTIL/OMG/omg.h"
|
||||
#include "UTIL/OPT/opt.h" // to test OPT
|
||||
#endif
|
||||
|
||||
#include "SCHED/defs.h"
|
||||
#include "SCHED/extern.h"
|
||||
|
||||
#include "oaisim.h"
|
||||
|
||||
#define PI 3.1416
|
||||
#define Am 20
|
||||
|
||||
#define MCL (-70) /*minimum coupling loss (MCL) in dB*/
|
||||
//double sinr[NUMBER_OF_eNB_MAX][2*25];
|
||||
/*
|
||||
extern double sinr_bler_map[MCS_COUNT][2][16];
|
||||
extern double sinr_bler_map_up[MCS_COUNT][2][16];
|
||||
double SINRpost_eff[301];
|
||||
extern double MI_map_4qam[3][162];
|
||||
extern double MI_map_16qam[3][197];
|
||||
extern double MI_map_64qam[3][227];
|
||||
*/
|
||||
// Extract the positions of UE and ENB from the mobility model
|
||||
|
||||
void extract_position (node_list* input_node_list, node_desc_t **node_data, int nb_nodes)
|
||||
{
|
||||
|
||||
int i;
|
||||
|
||||
for (i=0; i<nb_nodes; i++) {
|
||||
if ((input_node_list != NULL) && (node_data[i] != NULL)) {
|
||||
|
||||
node_data[i]->x = input_node_list->node->x_pos;
|
||||
|
||||
if (node_data[i]->x <0.0)
|
||||
node_data[i]->x = 0.0;
|
||||
|
||||
node_data[i]->y = input_node_list->node->y_pos;
|
||||
|
||||
if (node_data[i]->y <0.0)
|
||||
node_data[i]->y = 0.0;
|
||||
|
||||
LOG_D(OCM, "extract_position: added node_data %d with position X: %f and Y: %f \n", i,input_node_list->node->x_pos, input_node_list->node->y_pos );
|
||||
input_node_list = input_node_list->next;
|
||||
} else {
|
||||
LOG_E(OCM, "extract_position: Null pointer!!!\n");
|
||||
//exit(-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
void extract_position_fixed_enb (node_desc_t **node_data, int nb_nodes, frame_t frame)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0; i<nb_nodes; i++) {
|
||||
if (i==0) {
|
||||
node_data[i]->x = 0;
|
||||
node_data[i]->y = 500;
|
||||
} else if (i == 1 ) {
|
||||
node_data[i]->x = 866;//
|
||||
node_data[i]->y = 1000;
|
||||
} else if (i == 2 ) {
|
||||
node_data[i]->x = 866;
|
||||
node_data[i]->y = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void extract_position_fixed_ue (node_desc_t **node_data, int nb_nodes, frame_t frame)
|
||||
{
|
||||
int i;
|
||||
|
||||
if(frame<50)
|
||||
for (i=0; i<nb_nodes; i++) {
|
||||
if (i==0) {
|
||||
node_data[i]->x = 2050;
|
||||
node_data[i]->y = 1500;
|
||||
} else {
|
||||
node_data[i]->x = 2150;
|
||||
node_data[i]->y = 1500;
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (i=0; i<nb_nodes; i++) {
|
||||
if (i==0) {
|
||||
node_data[i]->x = 1856 - (frame - 49);
|
||||
// if(node_data[i]->x > 2106)
|
||||
// node_data[i]->x = 2106;
|
||||
node_data[i]->y = 1813 + (frame - 49);
|
||||
// if(node_data[i]->y < 1563)
|
||||
// node_data[i]->y = 1563;
|
||||
// if( node_data[i]->x == 2106)
|
||||
// node_data[i]->x = 2106 - (frame - 49);
|
||||
} else {
|
||||
node_data[i]->x = 2106 - (frame - 49);
|
||||
// if(node_data[i]->x < 1856)
|
||||
// node_data[i]->x = 1856;
|
||||
node_data[i]->y = 1563 + (frame - 49);
|
||||
// if(node_data[i]->y < 1813)
|
||||
// node_data[i]->y = 1813;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void init_ue(node_desc_t *ue_data, UE_Antenna ue_ant) //changed from node_struct
|
||||
{
|
||||
|
||||
ue_data->n_sectors = 1;
|
||||
ue_data->phi_rad = 2 * PI;
|
||||
ue_data->ant_gain_dBi = ue_ant.antenna_gain_dBi;
|
||||
ue_data->tx_power_dBm = ue_ant.tx_power_dBm;
|
||||
ue_data->rx_noise_level = ue_ant.rx_noise_level_dB; //value in db
|
||||
|
||||
}
|
||||
|
||||
void init_enb(node_desc_t *enb_data, eNB_Antenna enb_ant) //changed from node_struct
|
||||
{
|
||||
|
||||
int i;
|
||||
double sect_angle[3]= {0,2*PI/3,4*PI/3};
|
||||
|
||||
enb_data->n_sectors = enb_ant.number_of_sectors;
|
||||
|
||||
for (i=0; i<enb_data->n_sectors; i++)
|
||||
enb_data->alpha_rad[i] = sect_angle[i]; //enb_ant.alpha_rad[i];
|
||||
|
||||
enb_data->phi_rad = enb_ant.beam_width_dB;
|
||||
enb_data->ant_gain_dBi = enb_ant.antenna_gain_dBi;
|
||||
enb_data->tx_power_dBm = enb_ant.tx_power_dBm;
|
||||
enb_data->rx_noise_level = enb_ant.rx_noise_level_dB;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void calc_path_loss(node_desc_t* enb_data, node_desc_t* ue_data, channel_desc_t *ch_desc, Environment_System_Config env_desc, double **Shad_Fad)
|
||||
{
|
||||
|
||||
double dist;
|
||||
double path_loss;
|
||||
double gain_max;
|
||||
double gain_sec[3];
|
||||
double alpha, theta;
|
||||
|
||||
int count;
|
||||
|
||||
|
||||
dist = sqrt(pow((enb_data->x - ue_data->x), 2) + pow((enb_data->y - ue_data->y), 2));
|
||||
|
||||
path_loss = env_desc.fading.free_space_model_parameters.pathloss_0_dB -
|
||||
10*env_desc.fading.free_space_model_parameters.pathloss_exponent * log10(dist/1000);
|
||||
LOG_D(OCM,"dist %f, Path loss %f\n",dist,ch_desc->path_loss_dB);
|
||||
|
||||
/* Calculating the angle in the range -pi to pi from the slope */
|
||||
alpha = atan2((ue_data->y - enb_data->y),(ue_data->x - enb_data->x));
|
||||
|
||||
if (alpha < 0)
|
||||
alpha += 2*PI;
|
||||
|
||||
//printf("angle in radians is %lf\n", ue_data[UE_id]->alpha_rad[eNB_id]);
|
||||
ch_desc->aoa = alpha;
|
||||
ch_desc->random_aoa = 0;
|
||||
|
||||
if (enb_data->n_sectors==1) //assume omnidirectional antenna
|
||||
gain_max = 0;
|
||||
else {
|
||||
gain_max = -1000;
|
||||
|
||||
for(count = 0; count < enb_data->n_sectors; count++) {
|
||||
theta = enb_data->alpha_rad[count] - alpha;
|
||||
/* gain = -min(Am , 12 * (theta/theta_3dB)^2) */
|
||||
gain_sec[count] = -(Am < (12 * pow((theta/enb_data->phi_rad),2)) ? Am : (12 * pow((theta/enb_data->phi_rad),2)));
|
||||
|
||||
if (gain_sec[count]>gain_max) //take the sector that we are closest too (or where the gain is maximum)
|
||||
gain_max = gain_sec[count];
|
||||
}
|
||||
}
|
||||
|
||||
path_loss += enb_data->ant_gain_dBi + gain_max + ue_data->ant_gain_dBi;
|
||||
|
||||
if (Shad_Fad!=NULL)
|
||||
path_loss += Shad_Fad[(int)ue_data->x][(int)ue_data->y];
|
||||
|
||||
ch_desc->path_loss_dB = MCL < path_loss ? MCL : path_loss;
|
||||
//LOG_D(OCM,"x_coordinate\t%f\t,y_coordinate\t%f\t, path_loss %f\n",ue_data->x,ue_data->y,ch_desc->path_loss_dB);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void init_snr(channel_desc_t* eNB2UE, node_desc_t *enb_data, node_desc_t *ue_data, double* sinr_dB, double* N0, uint8_t transmission_mode, uint16_t q, uint8_t dl_power_off, uint16_t nb_rb)
|
||||
{
|
||||
|
||||
double thermal_noise,abs_channel,channelx, channely,channelx_i, channely_i ;
|
||||
int count;
|
||||
int aarx,aatx;
|
||||
uint8_t qq;
|
||||
|
||||
/* Thermal noise is calculated using 10log10(K*T*B) K = Boltzmann's constant T = room temperature B = bandwidth*/
|
||||
thermal_noise = -174 + 10*log10(15000); //per RE; value in dBm
|
||||
|
||||
//for (aarx=0; aarx<eNB2UE->nb_rx; aarx++)
|
||||
*N0 = thermal_noise + ue_data->rx_noise_level;
|
||||
|
||||
LOG_D(OCM,"Path loss %lf, noise (N0) %lf, signal %lf, snr %lf\n",
|
||||
eNB2UE->path_loss_dB,
|
||||
thermal_noise + ue_data->rx_noise_level,
|
||||
enb_data->tx_power_dBm + eNB2UE->path_loss_dB,
|
||||
enb_data->tx_power_dBm + eNB2UE->path_loss_dB - (thermal_noise + ue_data->rx_noise_level));
|
||||
|
||||
if(transmission_mode == 5 && dl_power_off==1)
|
||||
transmission_mode = 6;
|
||||
|
||||
switch(transmission_mode) {
|
||||
case 1:
|
||||
|
||||
//printf ("coupling factor is %lf\n", coupling);
|
||||
for (count = 0; count < (12 * nb_rb); count++) {
|
||||
sinr_dB[count] = enb_data->tx_power_dBm
|
||||
+ eNB2UE->path_loss_dB
|
||||
- (thermal_noise + ue_data->rx_noise_level)
|
||||
+ 10 * log10 (pow(eNB2UE->chF[0][count].x, 2)
|
||||
+ pow(eNB2UE->chF[0][count].y, 2));
|
||||
//printf("sinr_dB[%d]: %1f\n",count,sinr_dB[count]);
|
||||
//printf("Dl_link SNR for res. block %d is %lf\n", count, sinr[eNB_id][count]);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 2:
|
||||
|
||||
for (count = 0; count < (12 * nb_rb); count++) {
|
||||
abs_channel=0;
|
||||
|
||||
for (aarx=0; aarx<eNB2UE->nb_rx; aarx++) {
|
||||
for (aatx=0; aatx<eNB2UE->nb_tx; aatx++) {
|
||||
abs_channel += (pow(eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x, 2) + pow(eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y, 2));
|
||||
}
|
||||
}
|
||||
|
||||
sinr_dB[count] = enb_data->tx_power_dBm
|
||||
+ eNB2UE->path_loss_dB
|
||||
- (thermal_noise + ue_data->rx_noise_level)
|
||||
+ 10 * log10 (abs_channel/2);
|
||||
// printf("sinr_dB[%d]: %1f\n",count,sinr_dB[count]);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 5:
|
||||
for (count = 0; count < (12 * nb_rb); count++) {
|
||||
channelx=0;
|
||||
channely=0;
|
||||
channelx_i=0;
|
||||
channely_i=0;
|
||||
qq = (q>>(((count/12)>>2)<<1))&3;
|
||||
//printf("pmi_alloc %d: rb %d, pmi %d\n",q,count/12,qq);
|
||||
|
||||
|
||||
|
||||
// qq = q;
|
||||
for (aarx=0; aarx<eNB2UE->nb_rx; aarx++) {
|
||||
for (aatx=0; aatx<eNB2UE->nb_tx; aatx++) {
|
||||
switch(qq) {
|
||||
case 0:
|
||||
if (channelx==0 || channely==0) {
|
||||
channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
channelx_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
} else {
|
||||
channelx += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
channelx_i -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely_i -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (channelx==0 || channely==0) {
|
||||
channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
channelx_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
} else {
|
||||
channelx -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
channelx_i += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely_i += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (channelx==0 || channely==0) {
|
||||
channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
channelx_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
} else {
|
||||
channelx -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
channely += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channelx_i += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
channely_i -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (channelx==0 || channely==0) {
|
||||
channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
channelx_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely_i = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
} else {
|
||||
channelx += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
channely -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channelx_i -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
channely_i += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_E(EMU,"Problem in SINR Calculation for TM5 \n");
|
||||
break;
|
||||
|
||||
}//switch(q)
|
||||
|
||||
}//aatx
|
||||
}//aarx
|
||||
|
||||
/* sinr_dB[count] = enb_data->tx_power_dBm
|
||||
+ eNB2UE->path_loss_dB
|
||||
- (thermal_noise + ue_data->rx_noise_level)
|
||||
+ 10 * log10 ((pow(channelx,2) + pow(channely,2))/2) - 10 * log10 ((pow(channelx_i,2) + pow(channely_i,2))/2);
|
||||
*/
|
||||
sinr_dB[count] = enb_data->tx_power_dBm
|
||||
+ eNB2UE->path_loss_dB
|
||||
- (thermal_noise + ue_data->rx_noise_level)
|
||||
+ 10 * log10 ((pow(channelx,2) + pow(channely,2))) - 10 * log10 ((pow(channelx_i,2) + pow(channely_i,2))) - 3; // 3dB is subtracted as the tx_power_dBm is to be adjusted on per user basis
|
||||
// printf("sinr_dB[%d]: %1f\n",count,sinr_dB[count]);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 6:
|
||||
for (count = 0; count < (12 * nb_rb); count++) {
|
||||
channelx=0;
|
||||
channely=0;
|
||||
qq = (q>>(((count/12)>>2)<<1))&3;
|
||||
//printf("pmi_alloc %d: rb %d, pmi %d\n",q,count/12,qq);
|
||||
|
||||
|
||||
|
||||
// qq = q;
|
||||
for (aarx=0; aarx<eNB2UE->nb_rx; aarx++) {
|
||||
for (aatx=0; aatx<eNB2UE->nb_tx; aatx++) {
|
||||
switch(qq) {
|
||||
case 0:
|
||||
if (channelx==0 || channely==0) {
|
||||
channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
} else {
|
||||
channelx += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (channelx==0 || channely==0) {
|
||||
channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
} else {
|
||||
channelx -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (channelx==0 || channely==0) {
|
||||
channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
} else {
|
||||
channelx -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
channely += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (channelx==0 || channely==0) {
|
||||
channelx = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
channely = eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
} else {
|
||||
channelx += eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].y;
|
||||
channely -= eNB2UE->chF[aarx+(aatx*eNB2UE->nb_rx)][count].x;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_E(EMU,"Problem in SINR Calculation for TM6 \n");
|
||||
break;
|
||||
|
||||
}//switch(q)
|
||||
|
||||
}//aatx
|
||||
}//aarx
|
||||
|
||||
sinr_dB[count] = enb_data->tx_power_dBm
|
||||
+ eNB2UE->path_loss_dB
|
||||
- (thermal_noise + ue_data->rx_noise_level)
|
||||
+ 10 * log10 ((pow(channelx,2) + pow(channely,2))/2);
|
||||
|
||||
// printf("sinr_dB[%d]: %1f\n",count,sinr_dB[count]);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_E(EMU,"Problem in SINR Initialization in sinr_sim.c\n");
|
||||
break;
|
||||
}//switch
|
||||
}//function ends
|
||||
|
||||
void calculate_sinr(channel_desc_t* eNB2UE, node_desc_t *enb_data, node_desc_t *ue_data, double *sinr_dB, uint16_t nb_rb)
|
||||
{
|
||||
|
||||
double sir, thermal_noise;
|
||||
short count;
|
||||
|
||||
/* Thermal noise is calculated using 10log10(K*T*B) K = Boltzmann's constant T = room temperature B = bandwidth */
|
||||
thermal_noise = -174 + 10*log10(15000); //per RE, value in dBm
|
||||
|
||||
for (count = 0; count < 12 * nb_rb; count++) {
|
||||
sir = enb_data->tx_power_dBm
|
||||
+ eNB2UE->path_loss_dB
|
||||
- (thermal_noise + ue_data->rx_noise_level)
|
||||
+ 10 * log10 (pow(eNB2UE->chF[0][count].x, 2)
|
||||
+ pow(eNB2UE->chF[0][count].y, 2));
|
||||
|
||||
if (sir > 0)
|
||||
sinr_dB[count] -= sir;
|
||||
|
||||
//printf("*****sinr% lf \n",sinr_dB[count]);
|
||||
}
|
||||
}
|
||||
void get_beta_map()
|
||||
{
|
||||
char *file_path = NULL;
|
||||
//int table_len = 0;
|
||||
int t,u;
|
||||
int mcs = 0;
|
||||
char *sinr_bler;
|
||||
char buffer[1000];
|
||||
FILE *fp;
|
||||
double perf_array[13];
|
||||
|
||||
file_path = (char*) malloc(512);
|
||||
|
||||
for (mcs = 0; mcs < MCS_COUNT; mcs++) {
|
||||
snprintf( file_path, 512, "%s/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/bler_tx1_chan18_nrx1_mcs%d.csv", getenv("OPENAIR1_DIR"), mcs );
|
||||
fp = fopen(file_path,"r");
|
||||
|
||||
if (fp == NULL) {
|
||||
LOG_E(OCM,"ERROR: Unable to open the file %s! Exitng.\n", file_path);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
// else {
|
||||
if (fgets (buffer, 1000, fp) != NULL) {
|
||||
if (fgets (buffer, 1000, fp) != NULL) {
|
||||
table_length[mcs] = 0;
|
||||
|
||||
while (!feof (fp)) {
|
||||
u = 0;
|
||||
sinr_bler = strtok (buffer, ";");
|
||||
|
||||
while (sinr_bler != NULL) {
|
||||
perf_array[u] = atof (sinr_bler);
|
||||
u++;
|
||||
sinr_bler = strtok (NULL, ";");
|
||||
}
|
||||
|
||||
if ((perf_array[4] / perf_array[5]) < 1) {
|
||||
sinr_bler_map[mcs][0][table_length[mcs]] = perf_array[0];
|
||||
sinr_bler_map[mcs][1][table_length[mcs]] = (perf_array[4] / perf_array[5]);
|
||||
table_length[mcs]++;
|
||||
|
||||
if (table_length[mcs]>MCS_TABLE_LENGTH_MAX) {
|
||||
LOG_E(OCM,"Error reading MCS table. Increase MCS_TABLE_LENGTH_MAX (mcs %d)!\n",mcs);
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
if (fgets (buffer, 1000, fp) != NULL) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
// }
|
||||
LOG_D(OCM,"Print the table for mcs %d\n",mcs);
|
||||
|
||||
for (t = 0; t<table_length[mcs]; t++)
|
||||
LOG_D(OCM,"%lf %lf \n ",sinr_bler_map[mcs][0][t],sinr_bler_map[mcs][1][t]);
|
||||
}
|
||||
|
||||
free(file_path);
|
||||
}
|
||||
|
||||
//this function reads and stores the Mutual information tables for the MIESM abstraction.
|
||||
void get_MIESM_param()
|
||||
{
|
||||
char *file_path = NULL;
|
||||
char buffer[10000];
|
||||
FILE *fp;
|
||||
int qam[3] = {4,16,64};
|
||||
int q,cnt;
|
||||
char *result = NULL;
|
||||
int table_len=0;
|
||||
int t;
|
||||
file_path = (char*) malloc(512);
|
||||
|
||||
for (q=0; q<3; q++) {
|
||||
sprintf(file_path,"%s/SIMU/USER/files/MI_%dqam.csv",getenv("OPENAIR_TARGETS"),qam[q]);
|
||||
fp = fopen(file_path,"r");
|
||||
|
||||
if (fp == NULL) {
|
||||
printf("ERROR: Unable to open the file %s\n", file_path);
|
||||
exit(-1);
|
||||
} else {
|
||||
cnt=-1;
|
||||
|
||||
switch(qam[q]) {
|
||||
case 4:
|
||||
while (!feof(fp)) {
|
||||
table_len =0;
|
||||
cnt++;
|
||||
|
||||
if (fgets(buffer, 10000, fp) != NULL) {
|
||||
result = strtok (buffer, ",");
|
||||
|
||||
while (result != NULL) {
|
||||
MI_map_4qam[cnt][table_len] = atof (result);
|
||||
result = strtok (NULL, ",");
|
||||
table_len++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (t = 0; t < 162; t++) {
|
||||
// MI_map_4Qam[0][t] = pow(10,0.1*(MI_map_4Qam[0][t]));
|
||||
LOG_D(OCM, "MIESM 4QAM Table: %lf %lf %1f\n ",MI_map_4qam[0][t],MI_map_4qam[1][t], MI_map_4qam[2][t]);
|
||||
// printf("MIESM 4QAM Table: %lf %lf %1f\n ",MI_map_4qam[0][t],MI_map_4qam[1][t], MI_map_4qam[2][t]);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 16:
|
||||
while (!feof(fp)) {
|
||||
table_len =0;
|
||||
cnt++;
|
||||
|
||||
if (fgets (buffer, 10000, fp) != NULL) {
|
||||
result = strtok (buffer, ",");
|
||||
|
||||
while (result != NULL) {
|
||||
MI_map_16qam[cnt][table_len] = atof (result);
|
||||
result = strtok (NULL, ",");
|
||||
table_len++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (t = 0; t < 197; t++) {
|
||||
// MI_map_16Qam[0][t] = pow(10,0.1*(MI_map_16Qam[0][t]));
|
||||
LOG_D(OCM, "MIESM 16 QAM Table: %lf %lf %1f\n ",MI_map_16qam[0][t],MI_map_16qam[1][t], MI_map_16qam[2][t]);
|
||||
// printf("MIESM 16 QAM Table: %lf %lf %1f\n ",MI_map_16qam[0][t],MI_map_16qam[1][t], MI_map_16qam[2][t]);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 64:
|
||||
while (!feof(fp)) {
|
||||
table_len=0;
|
||||
cnt++;
|
||||
|
||||
if(cnt==3)
|
||||
break;
|
||||
|
||||
if (fgets (buffer, 10000, fp) != NULL) {
|
||||
result = strtok(buffer, ",");
|
||||
|
||||
while (result != NULL) {
|
||||
MI_map_64qam[cnt][table_len]= atof(result);
|
||||
result = strtok(NULL, ",");
|
||||
table_len++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (t = 0; t < 227; t++) {
|
||||
//MI_map_64Qam[0][t] = pow(10,0.1*(MI_map_64Qam[0][t]));
|
||||
LOG_D(OCM, "MIESM 64QAM Table: %lf %lf %1f\n ",MI_map_64qam[0][t],MI_map_64qam[1][t], MI_map_64qam[2][t]);
|
||||
// printf("MIESM 64QAM Table: %lf %lf %1f\n ",MI_map_64qam[0][t],MI_map_64qam[1][t], MI_map_64qam[2][t]);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_E(EMU,"Error, bad input, quitting\n");
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
free(file_path);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,346 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2011, Mathias Brossard <mathias@brossard.org>.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file threadpool.c
|
||||
* @brief Threadpool implementation file
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <pthread.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
#include "oaisim.h"
|
||||
#include "UTIL/OCG/OCG_extern.h"
|
||||
#include "UTIL/FIFO/pad_list.h"
|
||||
#include "threadpool.h"
|
||||
|
||||
extern uint8_t abstraction_flag;
|
||||
extern Signal_buffers *signal_buffers_g;
|
||||
|
||||
extern channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX];
|
||||
extern channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX];
|
||||
|
||||
extern node_desc_t *enb_data[NUMBER_OF_eNB_MAX];
|
||||
extern node_desc_t *ue_data[NUMBER_OF_UE_MAX];
|
||||
|
||||
extern LTE_DL_FRAME_PARMS *frame_parms;
|
||||
|
||||
/**
|
||||
* @function void *threadpool_thread(void *threadpool)
|
||||
* @brief the worker thread
|
||||
* @param threadpool the pool which own the thread
|
||||
*/
|
||||
void *threadpool_thread(void *threadpool);
|
||||
|
||||
int threadpool_free(threadpool_t *pool);
|
||||
|
||||
threadpool_t *threadpool_create(int thread_count)
|
||||
{
|
||||
threadpool_t *pool;
|
||||
int i;
|
||||
|
||||
/* TODO: Check for negative or otherwise very big input parameters */
|
||||
|
||||
if((pool = (threadpool_t *)malloc(sizeof(threadpool_t))) == NULL) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
// memset
|
||||
/* Initialize */
|
||||
pool->thread_count = thread_count;
|
||||
job_list_init(&(pool->job_queue));
|
||||
pool->shutdown = pool->started = pool->active = 0;
|
||||
|
||||
/* Allocate thread and task queue */
|
||||
pool->threads = (pthread_t *)malloc(sizeof (pthread_t) * thread_count);
|
||||
|
||||
// memset
|
||||
/* Initialize mutex and conditional variable first */
|
||||
if((pthread_mutex_init(&(pool->lock), NULL) != 0) ||
|
||||
(pthread_mutex_init(&(pool->sync_lock), NULL) != 0) ||
|
||||
(pthread_cond_init(&(pool->notify), NULL) != 0) ||
|
||||
(pthread_cond_init(&(pool->sync_notify), NULL) != 0) ||
|
||||
(pool->threads == NULL)) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Start worker threads */
|
||||
for(i = 0; i < thread_count; i++) {
|
||||
if(pthread_create(&(pool->threads[i]), NULL,
|
||||
threadpool_thread, (void*)pool) != 0) {
|
||||
threadpool_destroy(pool);
|
||||
return NULL;
|
||||
} else {
|
||||
pool->started++;
|
||||
}
|
||||
}
|
||||
|
||||
return pool;
|
||||
|
||||
err:
|
||||
|
||||
if(pool) {
|
||||
threadpool_free(pool);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int threadpool_add(threadpool_t *pool, Job_elt *job)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
if(pool == NULL || job == NULL) {
|
||||
return threadpool_invalid;
|
||||
}
|
||||
|
||||
if(pthread_mutex_lock(&(pool->lock)) != 0) {
|
||||
return threadpool_lock_failure;
|
||||
}
|
||||
|
||||
do {
|
||||
|
||||
/* Are we shutting down ? */
|
||||
if(pool->shutdown) {
|
||||
err = threadpool_shutdown;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Add task to queue */
|
||||
job_list_add_tail_eurecom(job, &(pool->job_queue));
|
||||
|
||||
/* pthread_cond_broadcast */
|
||||
if(pthread_cond_signal(&(pool->notify)) != 0) {
|
||||
err = threadpool_lock_failure;
|
||||
break;
|
||||
}
|
||||
} while(0);
|
||||
|
||||
if(pthread_mutex_unlock(&pool->lock) != 0) {
|
||||
err = threadpool_lock_failure;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
int threadpool_destroy(threadpool_t *pool)
|
||||
{
|
||||
int i, err = 0;
|
||||
|
||||
if(pool == NULL) {
|
||||
return threadpool_invalid;
|
||||
}
|
||||
|
||||
if(pthread_mutex_lock(&(pool->lock)) != 0) {
|
||||
return threadpool_lock_failure;
|
||||
}
|
||||
|
||||
do {
|
||||
/* Already shutting down */
|
||||
if(pool->shutdown) {
|
||||
err = threadpool_shutdown;
|
||||
break;
|
||||
}
|
||||
|
||||
pool->shutdown = 1;
|
||||
|
||||
/* Wake up all worker threads */
|
||||
if((pthread_cond_broadcast(&(pool->notify)) != 0) ||
|
||||
(pthread_mutex_unlock(&(pool->lock)) != 0)) {
|
||||
err = threadpool_lock_failure;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Join all worker thread */
|
||||
for(i = 0; i < pool->thread_count; i++) {
|
||||
if(pthread_join(pool->threads[i], NULL) != 0) {
|
||||
err = threadpool_thread_failure;
|
||||
}
|
||||
}
|
||||
} while(0);
|
||||
|
||||
if(pthread_mutex_unlock(&pool->lock) != 0) {
|
||||
err = threadpool_lock_failure;
|
||||
}
|
||||
|
||||
/* Only if everything went well do we deallocate the pool */
|
||||
if(!err) {
|
||||
threadpool_free(pool);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
int threadpool_free(threadpool_t *pool)
|
||||
{
|
||||
if(pool == NULL || pool->started > 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Did we manage to allocate ? */
|
||||
if(pool->threads) {
|
||||
free(pool->threads);
|
||||
job_list_free (&(pool->job_queue));
|
||||
|
||||
/* Because we allocate pool->threads after initializing the
|
||||
mutex and condition variable, we're sure they're
|
||||
initialized. Let's lock the mutex just in case. */
|
||||
pthread_mutex_lock(&(pool->lock));
|
||||
pthread_mutex_destroy(&(pool->lock));
|
||||
pthread_mutex_destroy(&(pool->sync_lock));
|
||||
pthread_cond_destroy(&(pool->notify));
|
||||
pthread_cond_destroy(&(pool->sync_notify));
|
||||
}
|
||||
|
||||
free(pool);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void *threadpool_thread(void *threadpool)
|
||||
{
|
||||
threadpool_t *pool = (threadpool_t *)threadpool;
|
||||
Job_elt * job_elt;
|
||||
int err;
|
||||
|
||||
|
||||
printf("The ID of this thread is: %u\n", (unsigned int)pthread_self());
|
||||
|
||||
for(;;) {
|
||||
/* Lock must be taken to wait on conditional variable */
|
||||
pthread_mutex_lock(&(pool->lock));
|
||||
|
||||
/* Wait on condition variable, check for spurious wakeups.
|
||||
When returning from pthread_cond_wait(), we own the lock. */
|
||||
|
||||
while(((pool->job_queue).nb_elements == 0) && (!pool->shutdown)) {
|
||||
pthread_cond_wait(&(pool->notify), &(pool->lock));
|
||||
}
|
||||
|
||||
if(pool->shutdown) {
|
||||
break;
|
||||
}
|
||||
|
||||
/* Grab our task */
|
||||
job_elt = job_list_remove_head(&(pool->job_queue));
|
||||
|
||||
|
||||
if((err = pthread_mutex_lock(&(pool->sync_lock))) != 0) {
|
||||
printf("Mutex Error \n");
|
||||
return err;
|
||||
}
|
||||
|
||||
pool->active++;
|
||||
|
||||
if((err = pthread_mutex_unlock(&pool->sync_lock)) != 0) {
|
||||
printf("Mutex Error \n");
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
/* Unlock */
|
||||
pthread_mutex_unlock(&(pool->lock));
|
||||
|
||||
/* Get to work */
|
||||
switch((job_elt->job).type) {
|
||||
case JT_OTG:
|
||||
if ((job_elt->job).eNB_flag)
|
||||
update_otg_eNB((job_elt->job).nid, (unsigned int) oai_emulation.info.time_ms);
|
||||
else
|
||||
update_otg_UE((job_elt->job).nid, (unsigned int) oai_emulation.info.time_ms);
|
||||
|
||||
break;
|
||||
|
||||
case JT_PDCP://do not forget adding flag enb
|
||||
if ((job_elt->job).eNB_flag)
|
||||
pdcp_run(frame, 1, 0, (job_elt->job).nid);
|
||||
else
|
||||
pdcp_run(frame, 0, (job_elt->job).nid, 0);
|
||||
|
||||
break;
|
||||
|
||||
case JT_PHY_MAC:
|
||||
if ((job_elt->job).eNB_flag)
|
||||
phy_procedures_eNB_lte ((job_elt->job).last_slot, (job_elt->job).next_slot, PHY_vars_eNB_g[(job_elt->job).nid], abstraction_flag);
|
||||
else
|
||||
phy_procedures_UE_lte ((job_elt->job).last_slot, (job_elt->job).next_slot, PHY_vars_UE_g[(job_elt->job).nid], 0, abstraction_flag, normal_txrx);
|
||||
|
||||
ue_data[(job_elt->job).nid]->tx_power_dBm = PHY_vars_UE_g[(job_elt->job).nid]->tx_power_dBm;
|
||||
break;
|
||||
|
||||
case JT_INIT_SYNC:
|
||||
initial_sync(PHY_vars_UE_g[(job_elt->job).nid],normal_txrx);
|
||||
break;
|
||||
|
||||
case JT_DL:
|
||||
do_DL_sig(signal_buffers_g[(job_elt->job).nid].r_re0,signal_buffers_g[(job_elt->job).nid].r_im0,signal_buffers_g[(job_elt->job).nid].r_re,signal_buffers_g[(job_elt->job).nid].r_im,
|
||||
signal_buffers_g[(job_elt->job).nid].s_re,signal_buffers_g[(job_elt->job).nid].s_im,eNB2UE,enb_data,ue_data,(job_elt->job).next_slot,abstraction_flag,
|
||||
frame_parms,(job_elt->job).nid);
|
||||
break;
|
||||
|
||||
case JT_UL:
|
||||
do_UL_sig(signal_buffers_g[(job_elt->job).nid].r_re0,signal_buffers_g[(job_elt->job).nid].r_im0,signal_buffers_g[(job_elt->job).nid].r_re,signal_buffers_g[(job_elt->job).nid].r_im,
|
||||
signal_buffers_g[(job_elt->job).nid].s_re,signal_buffers_g[(job_elt->job).nid].s_im,UE2eNB,enb_data,ue_data,(job_elt->job).next_slot,abstraction_flag,
|
||||
frame_parms,frame);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if((err = pthread_mutex_lock(&(pool->sync_lock))) != 0) {
|
||||
printf("Mutex Error \n");
|
||||
return err;
|
||||
}
|
||||
|
||||
pool->active--;
|
||||
|
||||
if ((pool->active <= 0) && ((pool->job_queue).nb_elements == 0)) {
|
||||
pool->active=0;
|
||||
|
||||
if(pthread_cond_signal(&(pool->sync_notify)) != 0) {
|
||||
printf("Condition Error \n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if((err = pthread_mutex_unlock(&pool->sync_lock)) != 0) {
|
||||
printf("Mutex Error \n");
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
pool->started--;
|
||||
|
||||
pthread_mutex_unlock(&(pool->lock));
|
||||
pthread_exit(NULL);
|
||||
return(NULL);
|
||||
}
|
||||
@@ -1,101 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2011, Mathias Brossard <mathias@brossard.org>.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _THREADPOOL_H_
|
||||
#define _THREADPOOL_H_
|
||||
|
||||
/**
|
||||
* @file threadpool.h
|
||||
* @brief Threadpool Header file
|
||||
*/
|
||||
|
||||
/**
|
||||
* @struct threadpool
|
||||
* @brief The threadpool struct
|
||||
*
|
||||
* @var notify Condition variable to notify worker threads.
|
||||
* @var threads Array containing worker threads ID.
|
||||
* @var thread_count Number of threads
|
||||
* @var job_queue Array containing the task queue.
|
||||
* @var shutdown Flag indicating if the pool is shutting down
|
||||
*/
|
||||
struct threadpool_t {
|
||||
pthread_mutex_t lock; // used to get / put a job in the queue, protect job_queue
|
||||
pthread_mutex_t sync_lock; // used when there is a dependancy between two consecutive jobs, protect active
|
||||
pthread_cond_t notify; // wakup threads
|
||||
pthread_cond_t sync_notify; // last worker sends this
|
||||
pthread_t *threads;
|
||||
Job_List job_queue;
|
||||
int thread_count;
|
||||
int count; // ????
|
||||
int shutdown; // end of sim/emu
|
||||
int started; // total number of thread started , after init: started == count
|
||||
int active; // num active threads
|
||||
};
|
||||
|
||||
typedef struct threadpool_t threadpool_t;
|
||||
|
||||
typedef enum {
|
||||
threadpool_invalid = -1,
|
||||
threadpool_lock_failure = -2,
|
||||
threadpool_queue_full = -3,
|
||||
threadpool_shutdown = -4,
|
||||
threadpool_thread_failure = -5
|
||||
} threadpool_error_t;
|
||||
|
||||
/**
|
||||
* @function threadpool_create
|
||||
* @brief Creates a threadpool_t object.
|
||||
* @param thread_count Number of worker threads.
|
||||
* @param queue_size Size of the queue.
|
||||
* @param flags Unused parameter.
|
||||
* @return a newly created thread pool or NULL
|
||||
*/
|
||||
threadpool_t *threadpool_create(int thread_count);
|
||||
|
||||
/**
|
||||
* @function threadpool_add
|
||||
* @brief add a new task in the queue of a thread pool
|
||||
* @param pool Thread pool to which add the task.
|
||||
* @param function Pointer to the function that will perform the task.
|
||||
* @param argument Argument to be passed to the function.
|
||||
* @param flags Unused parameter.
|
||||
* @return 0 if all goes well, negative values in case of error (@see
|
||||
* threadpool_error_t for codes).
|
||||
*/
|
||||
int threadpool_add(threadpool_t *pool, Job_elt *job);
|
||||
|
||||
/**
|
||||
* @function threadpool_destroy
|
||||
* @brief Stops and destroys a thread pool.
|
||||
* @param pool Thread pool to destroy.
|
||||
* @param flags Unused parameter.
|
||||
*/
|
||||
int threadpool_destroy(threadpool_t *pool);
|
||||
|
||||
#endif /* _THREADPOOL_H_ */
|
||||
@@ -1,2 +0,0 @@
|
||||
#!/bin/sh
|
||||
valgrind --tool=memcheck --leak-check=full --show-reachable=yes --num-callers=20 --track-origins=yes --track-fds=yes ./oaisim -b1 -u1 -F -n100 2>leakage
|
||||
Reference in New Issue
Block a user