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:
Raymond Knopp
2018-06-10 15:14:09 -07:00
507 changed files with 38418 additions and 42864 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
-503
View File
@@ -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
-216
View File
@@ -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;
}
-31
View File
@@ -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
-65
View File
@@ -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();
*/
-3
View File
@@ -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 -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
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
3 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
-3
View File
@@ -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
-3
View File
@@ -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 -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
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
3 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
-3
View File
@@ -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
-3
View File
@@ -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 -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
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
3 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
-3
View File
@@ -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
-278
View File
@@ -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);
// }
// }
}
*/
-52
View File
@@ -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);
-91
View File
@@ -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
-85
View File
@@ -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);
/* @}*/
-70
View File
@@ -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_ */
-57
View File
@@ -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
-680
View File
@@ -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);
}
-346
View File
@@ -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);
}
-101
View File
@@ -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_ */
-2
View File
@@ -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