Merge branch 'develop' into feature-59-tm4
This commit is contained in:
@@ -62,8 +62,7 @@
|
|||||||
<compile_prog_args>--oaisim -r Rel10 --noS1 -c </compile_prog_args>
|
<compile_prog_args>--oaisim -r Rel10 --noS1 -c </compile_prog_args>
|
||||||
<compile_prog_out>$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
|
<compile_prog_out>$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1
|
||||||
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/rb_tool
|
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/rb_tool
|
||||||
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko
|
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko</compile_prog_out>
|
||||||
$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/CMakeFiles/oai_nw_drv/oai_nw_drv.ko</compile_prog_out>
|
|
||||||
<pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</pre_exec>
|
<pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</pre_exec>
|
||||||
<pre_exec_args></pre_exec_args>
|
<pre_exec_args></pre_exec_args>
|
||||||
<main_exec></main_exec>
|
<main_exec></main_exec>
|
||||||
@@ -10523,7 +10522,7 @@ c
|
|||||||
<UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog>
|
<UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog>
|
||||||
<UE_branch>develop1B</UE_branch>
|
<UE_branch>develop1B</UE_branch>
|
||||||
<UE_compile_prog_args></UE_compile_prog_args>
|
<UE_compile_prog_args></UE_compile_prog_args>
|
||||||
<UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip; sudo rmmod oai_nw_drv</UE_pre_exec>
|
<UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip</UE_pre_exec>
|
||||||
<UE_pre_exec_args></UE_pre_exec_args>
|
<UE_pre_exec_args></UE_pre_exec_args>
|
||||||
<UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec>
|
<UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec>
|
||||||
<UE_main_exec_args></UE_main_exec_args>
|
<UE_main_exec_args></UE_main_exec_args>
|
||||||
@@ -10623,7 +10622,7 @@ c
|
|||||||
<UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog>
|
<UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog>
|
||||||
<UE_branch>develop1B</UE_branch>
|
<UE_branch>develop1B</UE_branch>
|
||||||
<UE_compile_prog_args></UE_compile_prog_args>
|
<UE_compile_prog_args></UE_compile_prog_args>
|
||||||
<UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip; sudo rmmod oai_nw_drv</UE_pre_exec>
|
<UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip</UE_pre_exec>
|
||||||
<UE_pre_exec_args></UE_pre_exec_args>
|
<UE_pre_exec_args></UE_pre_exec_args>
|
||||||
<UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec>
|
<UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec>
|
||||||
<UE_main_exec_args></UE_main_exec_args>
|
<UE_main_exec_args></UE_main_exec_args>
|
||||||
@@ -10723,7 +10722,7 @@ c
|
|||||||
<UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog>
|
<UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog>
|
||||||
<UE_branch>develop1B</UE_branch>
|
<UE_branch>develop1B</UE_branch>
|
||||||
<UE_compile_prog_args></UE_compile_prog_args>
|
<UE_compile_prog_args></UE_compile_prog_args>
|
||||||
<UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip; sudo rmmod oai_nw_drv</UE_pre_exec>
|
<UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip</UE_pre_exec>
|
||||||
<UE_pre_exec_args></UE_pre_exec_args>
|
<UE_pre_exec_args></UE_pre_exec_args>
|
||||||
<UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r100 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec>
|
<UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r100 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec>
|
||||||
<UE_main_exec_args></UE_main_exec_args>
|
<UE_main_exec_args></UE_main_exec_args>
|
||||||
@@ -10824,7 +10823,7 @@ c
|
|||||||
<UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog>
|
<UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog>
|
||||||
<UE_branch>develop1B</UE_branch>
|
<UE_branch>develop1B</UE_branch>
|
||||||
<UE_compile_prog_args></UE_compile_prog_args>
|
<UE_compile_prog_args></UE_compile_prog_args>
|
||||||
<UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip; sudo rmmod oai_nw_drv</UE_pre_exec>
|
<UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip</UE_pre_exec>
|
||||||
<UE_pre_exec_args></UE_pre_exec_args>
|
<UE_pre_exec_args></UE_pre_exec_args>
|
||||||
<UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec>
|
<UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec>
|
||||||
<UE_main_exec_args></UE_main_exec_args>
|
<UE_main_exec_args></UE_main_exec_args>
|
||||||
@@ -10924,7 +10923,7 @@ c
|
|||||||
<UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog>
|
<UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog>
|
||||||
<UE_branch>develop1B</UE_branch>
|
<UE_branch>develop1B</UE_branch>
|
||||||
<UE_compile_prog_args></UE_compile_prog_args>
|
<UE_compile_prog_args></UE_compile_prog_args>
|
||||||
<UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip; sudo rmmod oai_nw_drv</UE_pre_exec>
|
<UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip</UE_pre_exec>
|
||||||
<UE_pre_exec_args></UE_pre_exec_args>
|
<UE_pre_exec_args></UE_pre_exec_args>
|
||||||
<UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec>
|
<UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec>
|
||||||
<UE_main_exec_args></UE_main_exec_args>
|
<UE_main_exec_args></UE_main_exec_args>
|
||||||
@@ -11026,7 +11025,7 @@ c
|
|||||||
<UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog>
|
<UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog>
|
||||||
<UE_branch>develop1B</UE_branch>
|
<UE_branch>develop1B</UE_branch>
|
||||||
<UE_compile_prog_args></UE_compile_prog_args>
|
<UE_compile_prog_args></UE_compile_prog_args>
|
||||||
<UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip; sudo rmmod oai_nw_drv</UE_pre_exec>
|
<UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip</UE_pre_exec>
|
||||||
<UE_pre_exec_args></UE_pre_exec_args>
|
<UE_pre_exec_args></UE_pre_exec_args>
|
||||||
<UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r100 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec>
|
<UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r100 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec>
|
||||||
<UE_main_exec_args></UE_main_exec_args>
|
<UE_main_exec_args></UE_main_exec_args>
|
||||||
|
|||||||
@@ -1,2 +1,4 @@
|
|||||||
|
cd /tmp/oai_test_setup/oai
|
||||||
|
source oaienv
|
||||||
echo $EXEC $EXEC_ARGS
|
echo $EXEC $EXEC_ARGS
|
||||||
$EXEC $EXEC_ARGS
|
$EXEC $EXEC_ARGS
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ class ExecutionThread(threading.Thread):
|
|||||||
for arg in args.splitlines():
|
for arg in args.splitlines():
|
||||||
i = i+1
|
i = i+1
|
||||||
runenv2 = list(runenv)
|
runenv2 = list(runenv)
|
||||||
runenv2.append('OPENAIR_TARGET=/tmp/oai_test_setup/oai/targets')
|
runenv2.append('OPENAIR_TARGETS=/tmp/oai_test_setup/oai/targets')
|
||||||
runenv2.append('EXEC="'
|
runenv2.append('EXEC="'
|
||||||
+ test.findtext('main_exec')
|
+ test.findtext('main_exec')
|
||||||
+ '"')
|
+ '"')
|
||||||
|
|||||||
@@ -465,6 +465,11 @@ function main() {
|
|||||||
echo "set (CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >>$cmake_file
|
echo "set (CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >>$cmake_file
|
||||||
echo "set ( T_TRACER $T_TRACER )" >> $cmake_file
|
echo "set ( T_TRACER $T_TRACER )" >> $cmake_file
|
||||||
echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)" >> $cmake_file
|
echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)" >> $cmake_file
|
||||||
|
if [ "$UE" = 1 -a "$NOS1" = "0" ] ; then
|
||||||
|
echo_info "Compiling UE S1 build : enabling Linux and NETLINK"
|
||||||
|
echo "set (LINUX True )" >> $cmake_file
|
||||||
|
echo "set (PDCP_USE_NETLINK True )" >> $cmake_file
|
||||||
|
fi
|
||||||
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
|
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
|
||||||
cd $DIR/$lte_build_dir/build
|
cd $DIR/$lte_build_dir/build
|
||||||
cmake ..
|
cmake ..
|
||||||
@@ -661,9 +666,9 @@ function main() {
|
|||||||
CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
|
CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
|
||||||
|
|
||||||
#oai_nw_drv
|
#oai_nw_drv
|
||||||
compilations \
|
#compilations \
|
||||||
$oaisim_build_dir oai_nw_drv \
|
# $oaisim_build_dir oai_nw_drv \
|
||||||
CMakeFiles/oai_nw_drv/oai_nw_drv.ko $dbin/oai_nw_drv.ko
|
# CMakeFiles/oai_nw_drv/oai_nw_drv.ko $dbin/oai_nw_drv.ko
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cmake_file=$DIR/oaisim_mme_build_oai/CMakeLists.txt
|
cmake_file=$DIR/oaisim_mme_build_oai/CMakeLists.txt
|
||||||
|
|||||||
+132
-88
@@ -93,7 +93,7 @@ ID = ENB_MAC_UE_UL_PDU
|
|||||||
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,sdu_length : int,num_ce : int,num_sdu
|
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,sdu_length : int,num_ce : int,num_sdu
|
||||||
ID = ENB_MAC_UE_UL_PDU_WITH_DATA
|
ID = ENB_MAC_UE_UL_PDU_WITH_DATA
|
||||||
DESC = MAC uplink UE received PDU
|
DESC = MAC uplink UE received PDU
|
||||||
GROUP = ALL:MAC:ENB:HEAVY
|
GROUP = ALL:MAC:ENB
|
||||||
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,sdu_length : int,num_ce : int,num_sdu : buffer,data
|
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,sdu_length : int,num_ce : int,num_sdu : buffer,data
|
||||||
ID = ENB_MAC_UE_UL_SDU
|
ID = ENB_MAC_UE_UL_SDU
|
||||||
DESC = MAC uplink UE received SDU
|
DESC = MAC uplink UE received SDU
|
||||||
@@ -805,6 +805,85 @@ ID = LEGACY_CLI_TRACE
|
|||||||
GROUP = ALL:LEGACY_CLI:LEGACY_GROUP_TRACE:LEGACY
|
GROUP = ALL:LEGACY_CLI:LEGACY_GROUP_TRACE:LEGACY
|
||||||
FORMAT = string,log
|
FORMAT = string,log
|
||||||
|
|
||||||
|
#################
|
||||||
|
#### UE LOGS ####
|
||||||
|
#################
|
||||||
|
#general logs
|
||||||
|
ID = UE_MASTER_TICK
|
||||||
|
DESC = UE master tick - one tick per ms, to be used as "reference clock", mostly for ticktime view
|
||||||
|
GROUP = ALL:GENERAL:UE
|
||||||
|
FORMAT = int,eNB_ID : int,frame : int,subframe
|
||||||
|
|
||||||
|
#PHY logs
|
||||||
|
ID = UE_PHY_UL_TICK
|
||||||
|
DESC = UE uplink tick - one tick per ms at start of uplink processing
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:UE
|
||||||
|
FORMAT = int,eNB_ID : int,frame : int,subframe
|
||||||
|
ID = UE_PHY_DL_TICK
|
||||||
|
DESC = UE downlink tick - one tick per ms at start of downlink processing
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:UE
|
||||||
|
FORMAT = int,eNB_ID : int,frame : int,subframe
|
||||||
|
ID = UE_PHY_DLSCH_UE_DCI
|
||||||
|
DESC = UE downlink UE specific DCI as sent by the PHY layer
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:UE
|
||||||
|
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,dci_format : int,harq_pid : int,mcs : int,TBS
|
||||||
|
ID = UE_PHY_DLSCH_UE_ACK
|
||||||
|
DESC = UE downlink UE ACK as seen by the PHY layer in process_HARQ_feedback
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:UE
|
||||||
|
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
|
||||||
|
ID = UE_PHY_DLSCH_UE_NACK
|
||||||
|
DESC = UE downlink UE NACK as seen by the PHY layer in process_HARQ_feedback
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:UE
|
||||||
|
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
|
||||||
|
ID = UE_PHY_ULSCH_UE_DCI
|
||||||
|
DESC = UE uplink UE specific DCI as sent by the PHY layer
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:UE
|
||||||
|
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid : int,mcs : int,round : int,first_rb : int,nb_rb : int,TBS
|
||||||
|
ID = UE_PHY_ULSCH_UE_ACK
|
||||||
|
DESC = UE uplink UE ACK as seen by the PHY layer
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:UE
|
||||||
|
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
|
||||||
|
ID = UE_PHY_ULSCH_UE_NACK
|
||||||
|
DESC = UE uplink UE NACK as seen by the PHY layer
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:UE
|
||||||
|
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
|
||||||
|
ID = UE_PHY_INPUT_SIGNAL
|
||||||
|
DESC = UE received signal in the time domain for a duration of 1ms
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
||||||
|
FORMAT = int,eNB_ID : int,frame : int,subframe : int,antenna : buffer,rxdata
|
||||||
|
ID = UE_PHY_DL_CHANNEL_ESTIMATE
|
||||||
|
DESC = UE channel estimation in the time domain
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
||||||
|
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,antenna : buffer,chest_t
|
||||||
|
ID = UE_PHY_PDCCH_IQ
|
||||||
|
DESC = UE PDCCH received IQ data
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
||||||
|
FORMAT = int,nb_rb : int,NB_RB_DL : int,symbols_per_tti : buffer,rxdataF_comp
|
||||||
|
ID = UE_PHY_PDCCH_ENERGY
|
||||||
|
DESC = UE PDSCH 1 energy and threshold
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
||||||
|
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,pdcch_ch_level00 : int,pdcch_ch_level01 : int,pdcch_ch_level10: int,pdcch_ch_level11
|
||||||
|
ID = UE_PHY_PDSCH_IQ
|
||||||
|
DESC = UE PDSCH received IQ data
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
||||||
|
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,nb_rb : int,N_RB_UL : int,symbols_per_tti : buffer,pusch_comp
|
||||||
|
ID = UE_PHY_PDSCH_ENERGY
|
||||||
|
DESC = UE PDSCH 1 energy and threshold
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
||||||
|
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,pdsch_ch_level00 : int,pdsch_ch_level01 : int,pdsch_ch_level10: int,pdsch_ch_level11
|
||||||
|
ID = UE_PHY_PUSCH_TX_POWER
|
||||||
|
DESC = UE PUSCH tx power
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
||||||
|
FORMAT = int,eNB_ID : int,UE_id : int,frame : int,subframe : int,p0_pusch : int,ampl: int,g_pusch: int,pl: int,nb_rb
|
||||||
|
ID = UE_PHY_PUCCH_TX_POWER
|
||||||
|
DESC = UE PDSCH 1 energy and threshold
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
||||||
|
FORMAT = int,eNB_ID : int,UE_id : int,frame : int,subframe : int,p0_pucch : int,ampl: int,g_pucch: int,pl
|
||||||
|
ID = UE_PHY_MEAS
|
||||||
|
DESC = UE PHY measurements
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
||||||
|
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,rsrp : int,rssi : int,snr: int,rx_power: int,noise_power: int,w_cqi: int,freq_offset
|
||||||
|
|
||||||
#for debug/test - not used
|
#for debug/test - not used
|
||||||
ID = first
|
ID = first
|
||||||
ID = buf_test
|
ID = buf_test
|
||||||
@@ -963,6 +1042,10 @@ ID = VCD_VARIABLE_TRX_TST
|
|||||||
DESC = VCD variable TRX_TST
|
DESC = VCD variable TRX_TST
|
||||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
FORMAT = ulong,value
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_TRX_WRITE_FLAGS
|
||||||
|
DESC = VCD variable TRX_WRITE_FLAGS
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
ID = VCD_VARIABLE_TX_TS
|
ID = VCD_VARIABLE_TX_TS
|
||||||
DESC = VCD variable TX_TS
|
DESC = VCD variable TX_TS
|
||||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
@@ -1267,13 +1350,29 @@ ID = VCD_VARIABLE_UE0_SFN7
|
|||||||
DESC = VCD variable UE0_SFN7
|
DESC = VCD variable UE0_SFN7
|
||||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
||||||
FORMAT = ulong,value
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_UE_PDCP_FLUSH_SIZE
|
||||||
|
DESC = VCD variable UE_PDCP_FLUSH_SIZE
|
||||||
|
GROUP = ALL:VCD:ENB:UE:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_UE_PDCP_FLUSH_ERR
|
||||||
|
DESC = VCD variable UE_PDCP_FLUSH_ERR
|
||||||
|
GROUP = ALL:VCD:ENB:UE:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
ID = VCD_VARIABLE_UE0_TRX_READ_NS
|
ID = VCD_VARIABLE_UE0_TRX_READ_NS
|
||||||
DESC = VCD variable UE0_TRX_READ_NS
|
DESC = VCD variable UE0_TRX_READ_NS
|
||||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
GROUP = ALL:VCD:UE:VCD_VARIABLE
|
||||||
FORMAT = ulong,value
|
FORMAT = ulong,value
|
||||||
ID = VCD_VARIABLE_UE0_TRX_WRITE_NS
|
ID = VCD_VARIABLE_UE0_TRX_WRITE_NS
|
||||||
DESC = VCD variable UE0_TRX_WRITE_NS
|
DESC = VCD variable UE0_TRX_WRITE_NS
|
||||||
GROUP = ALL:VCD:ENB:VCD_VARIABLE
|
GROUP = ALL:VCD:UE:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_UE0_TRX_READ_NS_MISSING
|
||||||
|
DESC = VCD variable UE0_TRX_READ_NS_MISSING
|
||||||
|
GROUP = ALL:VCD:UE:VCD_VARIABLE
|
||||||
|
FORMAT = ulong,value
|
||||||
|
ID = VCD_VARIABLE_UE0_TRX_WRITE_NS_MISSING
|
||||||
|
DESC = VCD variable UE0_TRX_WRITE_NS_MISSING
|
||||||
|
GROUP = ALL:VCD:UE:VCD_VARIABLE
|
||||||
FORMAT = ulong,value
|
FORMAT = ulong,value
|
||||||
|
|
||||||
#functions
|
#functions
|
||||||
@@ -1326,8 +1425,12 @@ ID = VCD_FUNCTION_TRX_WRITE_SF9
|
|||||||
DESC = VCD function TRX_WRITE_SF9
|
DESC = VCD function TRX_WRITE_SF9
|
||||||
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
FORMAT = int,value
|
||||||
ID = VCD_FUNCTION_UE_SIGNAL_COND_RXTX
|
ID = VCD_FUNCTION_UE_SIGNAL_COND_RXTX0
|
||||||
DESC = VCD function UE_SIGNAL_COND_RXTX
|
DESC = VCD function UE_SIGNAL_COND_RXTX0
|
||||||
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
ID = VCD_FUNCTION_UE_SIGNAL_COND_RXTX1
|
||||||
|
DESC = VCD function UE_SIGNAL_COND_RXTX1
|
||||||
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
FORMAT = int,value
|
||||||
ID = VCD_FUNCTION_UE_WAIT_COND_RXTX0
|
ID = VCD_FUNCTION_UE_WAIT_COND_RXTX0
|
||||||
@@ -1674,6 +1777,10 @@ ID = VCD_FUNCTION_UE_ULSCH_ENCODING
|
|||||||
DESC = VCD function UE_ULSCH_ENCODING
|
DESC = VCD function UE_ULSCH_ENCODING
|
||||||
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
FORMAT = int,value
|
||||||
|
ID = VCD_FUNCTION_UE_ULSCH_ENCODING_FILL_CQI
|
||||||
|
DESC = VCD function UE_ULSCH_ENCODING_FILL_CQI
|
||||||
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
ID = VCD_FUNCTION_UE_ULSCH_SCRAMBLING
|
ID = VCD_FUNCTION_UE_ULSCH_SCRAMBLING
|
||||||
DESC = VCD function UE_ULSCH_SCRAMBLING
|
DESC = VCD function UE_ULSCH_SCRAMBLING
|
||||||
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
GROUP = ALL:VCD:UE:VCD_FUNCTION
|
||||||
@@ -1814,10 +1921,10 @@ ID = VCD_FUNCTION_RLC_DATA_REQ
|
|||||||
DESC = VCD function RLC_DATA_REQ
|
DESC = VCD function RLC_DATA_REQ
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
FORMAT = int,value
|
||||||
ID = VCD_FUNCTION_RLC_DATA_IND
|
#ID = VCD_FUNCTION_RLC_DATA_IND
|
||||||
DESC = VCD function RLC_DATA_IND
|
# DESC = VCD function RLC_DATA_IND
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
# GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
# FORMAT = int,value
|
||||||
ID = VCD_FUNCTION_MAC_RLC_STATUS_IND
|
ID = VCD_FUNCTION_MAC_RLC_STATUS_IND
|
||||||
DESC = VCD function MAC_RLC_STATUS_IND
|
DESC = VCD function MAC_RLC_STATUS_IND
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
@@ -1862,6 +1969,22 @@ ID = VCD_FUNCTION_PDCP_VALIDATE_SECURITY
|
|||||||
DESC = VCD function PDCP_VALIDATE_SECURITY
|
DESC = VCD function PDCP_VALIDATE_SECURITY
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
FORMAT = int,value
|
||||||
|
ID = VCD_FUNCTION_PDCP_FIFO_READ
|
||||||
|
DESC = VCD function PDCP_FIFO_READ
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
ID = VCD_FUNCTION_PDCP_FIFO_READ_BUFFER
|
||||||
|
DESC = VCD function PDCP_FIFO_READ_BUFFER
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
ID = VCD_FUNCTION_PDCP_FIFO_FLUSH
|
||||||
|
DESC = VCD function PDCP_FIFO_FLUSH
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
ID = VCD_FUNCTION_PDCP_FIFO_FLUSH_BUFFER
|
||||||
|
DESC = VCD function PDCP_FIFO_FLUSH_BUFFER
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
ID = VCD_FUNCTION_RRC_RX_TX
|
ID = VCD_FUNCTION_RRC_RX_TX
|
||||||
DESC = VCD function RRC_RX_TX
|
DESC = VCD function RRC_RX_TX
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
@@ -1938,82 +2061,3 @@ ID = VCD_FUNCTION_RECV_IF5
|
|||||||
DESC = VCD function RECV_IF5
|
DESC = VCD function RECV_IF5
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
FORMAT = int,value
|
||||||
|
|
||||||
#################
|
|
||||||
#### UE LOGS ####
|
|
||||||
#################
|
|
||||||
#general logs
|
|
||||||
ID = UE_MASTER_TICK
|
|
||||||
DESC = UE master tick - one tick per ms, to be used as "reference clock", mostly for ticktime view
|
|
||||||
GROUP = ALL:GENERAL:UE
|
|
||||||
FORMAT = int,eNB_ID : int,frame : int,subframe
|
|
||||||
|
|
||||||
#PHY logs
|
|
||||||
ID = UE_PHY_UL_TICK
|
|
||||||
DESC = UE uplink tick - one tick per ms at start of uplink processing
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:UE
|
|
||||||
FORMAT = int,eNB_ID : int,frame : int,subframe
|
|
||||||
ID = UE_PHY_DL_TICK
|
|
||||||
DESC = UE downlink tick - one tick per ms at start of downlink processing
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:UE
|
|
||||||
FORMAT = int,eNB_ID : int,frame : int,subframe
|
|
||||||
ID = UE_PHY_DLSCH_UE_DCI
|
|
||||||
DESC = UE downlink UE specific DCI as sent by the PHY layer
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:UE
|
|
||||||
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,dci_format : int,harq_pid : int,mcs : int,TBS
|
|
||||||
ID = UE_PHY_DLSCH_UE_ACK
|
|
||||||
DESC = UE downlink UE ACK as seen by the PHY layer in process_HARQ_feedback
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:UE
|
|
||||||
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
|
|
||||||
ID = UE_PHY_DLSCH_UE_NACK
|
|
||||||
DESC = UE downlink UE NACK as seen by the PHY layer in process_HARQ_feedback
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:UE
|
|
||||||
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
|
|
||||||
ID = UE_PHY_ULSCH_UE_DCI
|
|
||||||
DESC = UE uplink UE specific DCI as sent by the PHY layer
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:UE
|
|
||||||
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid : int,mcs : int,round : int,first_rb : int,nb_rb : int,TBS
|
|
||||||
ID = UE_PHY_ULSCH_UE_ACK
|
|
||||||
DESC = UE uplink UE ACK as seen by the PHY layer
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:UE
|
|
||||||
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
|
|
||||||
ID = UE_PHY_ULSCH_UE_NACK
|
|
||||||
DESC = UE uplink UE NACK as seen by the PHY layer
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:UE
|
|
||||||
FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid
|
|
||||||
ID = UE_PHY_INPUT_SIGNAL
|
|
||||||
DESC = UE received signal in the time domain for a duration of 1ms
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
|
||||||
FORMAT = int,eNB_ID : int,frame : int,subframe : int,antenna : buffer,rxdata
|
|
||||||
ID = UE_PHY_DL_CHANNEL_ESTIMATE
|
|
||||||
DESC = UE channel estimation in the time domain
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
|
||||||
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,antenna : buffer,chest_t
|
|
||||||
ID = UE_PHY_PDCCH_IQ
|
|
||||||
DESC = UE PDCCH received IQ data
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
|
||||||
FORMAT = int,nb_rb : int,NB_RB_DL : int,symbols_per_tti : buffer,rxdataF_comp
|
|
||||||
ID = UE_PHY_PDCCH_ENERGY
|
|
||||||
DESC = UE PDSCH 1 energy and threshold
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
|
||||||
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,pdcch_ch_level00 : int,pdcch_ch_level01 : int,pdcch_ch_level10: int,pdcch_ch_level11
|
|
||||||
ID = UE_PHY_PDSCH_IQ
|
|
||||||
DESC = UE PDSCH received IQ data
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
|
||||||
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,nb_rb : int,N_RB_UL : int,symbols_per_tti : buffer,pusch_comp
|
|
||||||
ID = UE_PHY_PDSCH_ENERGY
|
|
||||||
DESC = UE PDSCH 1 energy and threshold
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
|
||||||
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,pdsch_ch_level00 : int,pdsch_ch_level01 : int,pdsch_ch_level10: int,pdsch_ch_level11
|
|
||||||
ID = UE_PHY_PUSCH_TX_POWER
|
|
||||||
DESC = UE PUSCH tx power
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
|
||||||
FORMAT = int,eNB_ID : int,UE_id : int,frame : int,subframe : int,p0_pusch : int,ampl: int,g_pusch: int,pl: int,nb_rb
|
|
||||||
ID = UE_PHY_PUCCH_TX_POWER
|
|
||||||
DESC = UE PDSCH 1 energy and threshold
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
|
||||||
FORMAT = int,eNB_ID : int,UE_id : int,frame : int,subframe : int,p0_pucch : int,ampl: int,g_pucch: int,pl
|
|
||||||
ID = UE_PHY_MEAS
|
|
||||||
DESC = UE PHY measurements
|
|
||||||
GROUP = ALL:PHY:GRAPHIC:HEAVY:UE
|
|
||||||
FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,rsrp : int,rssi : int,snr: int,rx_power: int,noise_power: int,w_cqi: int,freq_offset
|
|
||||||
|
|||||||
@@ -1064,7 +1064,8 @@ int phy_init_lte_ue(PHY_VARS_UE *ue,
|
|||||||
// create shortcuts
|
// create shortcuts
|
||||||
LTE_DL_FRAME_PARMS* const fp = &ue->frame_parms;
|
LTE_DL_FRAME_PARMS* const fp = &ue->frame_parms;
|
||||||
LTE_UE_COMMON* const common_vars = &ue->common_vars;
|
LTE_UE_COMMON* const common_vars = &ue->common_vars;
|
||||||
LTE_UE_PDSCH** const pdsch_vars = ue->pdsch_vars;
|
LTE_UE_PDSCH** const pdsch_vars_th0 = ue->pdsch_vars[0];
|
||||||
|
LTE_UE_PDSCH** const pdsch_vars_th1 = ue->pdsch_vars[1];
|
||||||
LTE_UE_PDSCH** const pdsch_vars_SI = ue->pdsch_vars_SI;
|
LTE_UE_PDSCH** const pdsch_vars_SI = ue->pdsch_vars_SI;
|
||||||
LTE_UE_PDSCH** const pdsch_vars_ra = ue->pdsch_vars_ra;
|
LTE_UE_PDSCH** const pdsch_vars_ra = ue->pdsch_vars_ra;
|
||||||
LTE_UE_PDSCH** const pdsch_vars_mch = ue->pdsch_vars_MCH;
|
LTE_UE_PDSCH** const pdsch_vars_mch = ue->pdsch_vars_MCH;
|
||||||
@@ -1117,32 +1118,37 @@ int phy_init_lte_ue(PHY_VARS_UE *ue,
|
|||||||
// init RX buffers
|
// init RX buffers
|
||||||
|
|
||||||
common_vars->rxdata = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*) );
|
common_vars->rxdata = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*) );
|
||||||
common_vars->rxdataF = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*) );
|
common_vars->common_vars_rx_data_per_thread[0].rxdataF = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*) );
|
||||||
common_vars->rxdataF2 = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*) );
|
common_vars->common_vars_rx_data_per_thread[1].rxdataF = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*) );
|
||||||
|
|
||||||
for (i=0; i<fp->nb_antennas_rx; i++) {
|
for (i=0; i<fp->nb_antennas_rx; i++) {
|
||||||
common_vars->rxdata[i] = (int32_t*) malloc16_clear( (fp->samples_per_tti*10+2048)*sizeof(int32_t) );
|
common_vars->rxdata[i] = (int32_t*) malloc16_clear( (fp->samples_per_tti*10+2048)*sizeof(int32_t) );
|
||||||
common_vars->rxdataF[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(fp->ofdm_symbol_size*14) );
|
common_vars->common_vars_rx_data_per_thread[0].rxdataF[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(fp->ofdm_symbol_size*14) );
|
||||||
common_vars->rxdataF2[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(fp->ofdm_symbol_size*fp->symbols_per_tti*10) );
|
common_vars->common_vars_rx_data_per_thread[1].rxdataF[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(fp->ofdm_symbol_size*14) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Channel estimates
|
// Channel estimates
|
||||||
for (eNB_id=0; eNB_id<7; eNB_id++) {
|
for (eNB_id=0; eNB_id<7; eNB_id++) {
|
||||||
common_vars->dl_ch_estimates[eNB_id] = (int32_t**)malloc16_clear(8*sizeof(int32_t*));
|
common_vars->common_vars_rx_data_per_thread[0].dl_ch_estimates[eNB_id] = (int32_t**)malloc16_clear(8*sizeof(int32_t*));
|
||||||
common_vars->dl_ch_estimates_time[eNB_id] = (int32_t**)malloc16_clear(8*sizeof(int32_t*));
|
common_vars->common_vars_rx_data_per_thread[1].dl_ch_estimates[eNB_id] = (int32_t**)malloc16_clear(8*sizeof(int32_t*));
|
||||||
|
common_vars->common_vars_rx_data_per_thread[0].dl_ch_estimates_time[eNB_id] = (int32_t**)malloc16_clear(8*sizeof(int32_t*));
|
||||||
|
common_vars->common_vars_rx_data_per_thread[1].dl_ch_estimates_time[eNB_id] = (int32_t**)malloc16_clear(8*sizeof(int32_t*));
|
||||||
|
|
||||||
for (i=0; i<fp->nb_antennas_rx; i++)
|
for (i=0; i<fp->nb_antennas_rx; i++)
|
||||||
for (j=0; j<4; j++) {
|
for (j=0; j<4; j++) {
|
||||||
int idx = (j<<1) + i;
|
int idx = (j<<1) + i;
|
||||||
common_vars->dl_ch_estimates[eNB_id][idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*fp->symbols_per_tti*(fp->ofdm_symbol_size+LTE_CE_FILTER_LENGTH) );
|
common_vars->common_vars_rx_data_per_thread[0].dl_ch_estimates[eNB_id][idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*fp->symbols_per_tti*(fp->ofdm_symbol_size+LTE_CE_FILTER_LENGTH) );
|
||||||
common_vars->dl_ch_estimates_time[eNB_id][idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*fp->ofdm_symbol_size*2 );
|
common_vars->common_vars_rx_data_per_thread[1].dl_ch_estimates[eNB_id][idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*fp->symbols_per_tti*(fp->ofdm_symbol_size+LTE_CE_FILTER_LENGTH) );
|
||||||
|
common_vars->common_vars_rx_data_per_thread[0].dl_ch_estimates_time[eNB_id][idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*fp->ofdm_symbol_size*2 );
|
||||||
|
common_vars->common_vars_rx_data_per_thread[1].dl_ch_estimates_time[eNB_id][idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*fp->ofdm_symbol_size*2 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// DLSCH
|
// DLSCH
|
||||||
for (eNB_id=0; eNB_id<ue->n_connected_eNB; eNB_id++) {
|
for (eNB_id=0; eNB_id<ue->n_connected_eNB; eNB_id++) {
|
||||||
pdsch_vars[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
|
pdsch_vars_th0[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
|
||||||
|
pdsch_vars_th1[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
|
||||||
pdsch_vars_SI[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
|
pdsch_vars_SI[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
|
||||||
pdsch_vars_ra[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
|
pdsch_vars_ra[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
|
||||||
pdsch_vars_mch[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
|
pdsch_vars_mch[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
|
||||||
@@ -1151,50 +1157,72 @@ int phy_init_lte_ue(PHY_VARS_UE *ue,
|
|||||||
pbch_vars[eNB_id] = (LTE_UE_PBCH *)malloc16_clear(sizeof(LTE_UE_PBCH));
|
pbch_vars[eNB_id] = (LTE_UE_PBCH *)malloc16_clear(sizeof(LTE_UE_PBCH));
|
||||||
|
|
||||||
if (abstraction_flag == 0) {
|
if (abstraction_flag == 0) {
|
||||||
// init basic (common) variables
|
phy_init_lte_ue__PDSCH( pdsch_vars_th0[eNB_id], fp );
|
||||||
phy_init_lte_ue__PDSCH( pdsch_vars[eNB_id], fp );
|
phy_init_lte_ue__PDSCH( pdsch_vars_th1[eNB_id], fp );
|
||||||
|
|
||||||
// init variables only needed for standard PDSCH
|
// thread 0
|
||||||
pdsch_vars[eNB_id]->llr_shifts = (uint8_t*)malloc16_clear(7*2*fp->N_RB_DL*12);
|
pdsch_vars_th0[eNB_id]->llr_shifts = (uint8_t*)malloc16_clear(7*2*fp->N_RB_DL*12);
|
||||||
pdsch_vars[eNB_id]->llr_shifts_p = pdsch_vars[eNB_id]->llr_shifts;
|
pdsch_vars_th0[eNB_id]->llr_shifts_p = pdsch_vars_th0[eNB_id]->llr_shifts;
|
||||||
pdsch_vars[eNB_id]->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
|
pdsch_vars_th0[eNB_id]->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
|
||||||
pdsch_vars[eNB_id]->llr128_2ndstream = (int16_t**)malloc16_clear( sizeof(int16_t*) );
|
pdsch_vars_th0[eNB_id]->llr128_2ndstream = (int16_t**)malloc16_clear( sizeof(int16_t*) );
|
||||||
|
pdsch_vars_th0[eNB_id]->rho = (int32_t**)malloc16_clear( fp->nb_antennas_rx*sizeof(int32_t*) );
|
||||||
|
|
||||||
|
// thread 0
|
||||||
|
pdsch_vars_th1[eNB_id]->llr_shifts = (uint8_t*)malloc16_clear(7*2*fp->N_RB_DL*12);
|
||||||
|
pdsch_vars_th1[eNB_id]->llr_shifts_p = pdsch_vars_th0[eNB_id]->llr_shifts;
|
||||||
|
pdsch_vars_th1[eNB_id]->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
|
||||||
|
pdsch_vars_th1[eNB_id]->llr128_2ndstream = (int16_t**)malloc16_clear( sizeof(int16_t*) );
|
||||||
|
pdsch_vars_th1[eNB_id]->rho = (int32_t**)malloc16_clear( fp->nb_antennas_rx*sizeof(int32_t*) );
|
||||||
|
|
||||||
|
|
||||||
pdsch_vars[eNB_id]->rho = (int32_t**)malloc16_clear( fp->nb_antennas_rx*sizeof(int32_t*) );
|
|
||||||
for (int i=0; i<fp->nb_antennas_rx; i++)
|
|
||||||
pdsch_vars[eNB_id]->rho[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(fp->N_RB_DL*12*7*2) );
|
|
||||||
|
|
||||||
|
|
||||||
pdsch_vars[eNB_id]->dl_ch_rho2_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
for (int i=0; i<fp->nb_antennas_rx; i++){
|
||||||
|
pdsch_vars_th0[eNB_id]->rho[i] = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(fp->N_RB_DL*12) );
|
||||||
|
pdsch_vars_th1[eNB_id]->rho[i] = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(fp->N_RB_DL*12) );
|
||||||
|
}
|
||||||
|
|
||||||
|
pdsch_vars_th0[eNB_id]->dl_ch_rho2_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||||
|
pdsch_vars_th1[eNB_id]->dl_ch_rho2_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||||
|
|
||||||
for (i=0; i<fp->nb_antennas_rx; i++)
|
for (i=0; i<fp->nb_antennas_rx; i++)
|
||||||
for (j=0; j<4; j++) {
|
for (j=0; j<4; j++) {
|
||||||
const int idx = (j<<1)+i;
|
const int idx = (j<<1)+i;
|
||||||
|
|
||||||
const size_t num = 7*2*fp->N_RB_DL*12+4;
|
const size_t num = 7*2*fp->N_RB_DL*12+4;
|
||||||
pdsch_vars[eNB_id]->dl_ch_rho2_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
pdsch_vars_th0[eNB_id]->dl_ch_rho2_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||||
|
pdsch_vars_th1[eNB_id]->dl_ch_rho2_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const size_t num = 7*2*fp->N_RB_DL*12+4;
|
const size_t num = 7*2*fp->N_RB_DL*12+4;
|
||||||
for (k=0;k<8;k++) { //harq_pid
|
for (k=0;k<8;k++) { //harq_pid
|
||||||
|
|
||||||
for (l=0;l<8;l++) { //round
|
for (l=0;l<8;l++) { //round
|
||||||
pdsch_vars[eNB_id]->rxdataF_comp1[k][l] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
pdsch_vars_th0[eNB_id]->rxdataF_comp1[k][l] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||||
pdsch_vars[eNB_id]->dl_ch_rho_ext[k][l] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
pdsch_vars_th0[eNB_id]->dl_ch_rho_ext[k][l] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||||
pdsch_vars[eNB_id]->dl_ch_mag1[k][l] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
pdsch_vars_th0[eNB_id]->dl_ch_mag1[k][l] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||||
pdsch_vars[eNB_id]->dl_ch_magb1[k][l] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
pdsch_vars_th0[eNB_id]->dl_ch_magb1[k][l] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||||
|
|
||||||
|
pdsch_vars_th1[eNB_id]->rxdataF_comp1[k][l] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||||
|
pdsch_vars_th1[eNB_id]->dl_ch_rho_ext[k][l] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||||
|
pdsch_vars_th1[eNB_id]->dl_ch_mag1[k][l] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||||
|
pdsch_vars_th1[eNB_id]->dl_ch_magb1[k][l] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||||
|
|
||||||
|
|
||||||
for (int i=0; i<fp->nb_antennas_rx; i++)
|
for (int i=0; i<fp->nb_antennas_rx; i++)
|
||||||
for (int j=0; j<4; j++) { //frame_parms->nb_antennas_tx; j++)
|
for (int j=0; j<4; j++) { //frame_parms->nb_antennas_tx; j++)
|
||||||
const int idx = (j<<1)+i;
|
const int idx = (j<<1)+i;
|
||||||
pdsch_vars[eNB_id]->dl_ch_rho_ext[k][l][idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
pdsch_vars_th0[eNB_id]->dl_ch_rho_ext[k][l][idx] = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(fp->N_RB_DL*12) );
|
||||||
pdsch_vars[eNB_id]->rxdataF_comp1[k][l][idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
pdsch_vars_th0[eNB_id]->rxdataF_comp1[k][l][idx] = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(fp->N_RB_DL*12) );
|
||||||
pdsch_vars[eNB_id]->dl_ch_mag1[k][l][idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
pdsch_vars_th0[eNB_id]->dl_ch_mag1[k][l][idx] = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(fp->N_RB_DL*12) );
|
||||||
pdsch_vars[eNB_id]->dl_ch_magb1[k][l][idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
pdsch_vars_th0[eNB_id]->dl_ch_magb1[k][l][idx] = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(fp->N_RB_DL*12) );
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
pdsch_vars_th1[eNB_id]->dl_ch_rho_ext[k][l][idx] = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(fp->N_RB_DL*12) );
|
||||||
|
pdsch_vars_th1[eNB_id]->rxdataF_comp1[k][l][idx] = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(fp->N_RB_DL*12) );
|
||||||
|
pdsch_vars_th1[eNB_id]->dl_ch_mag1[k][l][idx] = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(fp->N_RB_DL*12) );
|
||||||
|
pdsch_vars_th1[eNB_id]->dl_ch_magb1[k][l][idx] = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(fp->N_RB_DL*12) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
phy_init_lte_ue__PDSCH( pdsch_vars_SI[eNB_id], fp );
|
phy_init_lte_ue__PDSCH( pdsch_vars_SI[eNB_id], fp );
|
||||||
phy_init_lte_ue__PDSCH( pdsch_vars_ra[eNB_id], fp );
|
phy_init_lte_ue__PDSCH( pdsch_vars_ra[eNB_id], fp );
|
||||||
phy_init_lte_ue__PDSCH( pdsch_vars_mch[eNB_id], fp );
|
phy_init_lte_ue__PDSCH( pdsch_vars_mch[eNB_id], fp );
|
||||||
@@ -1250,14 +1278,17 @@ int phy_init_lte_ue(PHY_VARS_UE *ue,
|
|||||||
|
|
||||||
// initialization for the last instance of pdsch_vars (used for MU-MIMO)
|
// initialization for the last instance of pdsch_vars (used for MU-MIMO)
|
||||||
|
|
||||||
pdsch_vars[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear( sizeof(LTE_UE_PDSCH) );
|
pdsch_vars_th0[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear( sizeof(LTE_UE_PDSCH) );
|
||||||
|
pdsch_vars_th1[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear( sizeof(LTE_UE_PDSCH) );
|
||||||
pdsch_vars_SI[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear( sizeof(LTE_UE_PDSCH) );
|
pdsch_vars_SI[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear( sizeof(LTE_UE_PDSCH) );
|
||||||
pdsch_vars_ra[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear( sizeof(LTE_UE_PDSCH) );
|
pdsch_vars_ra[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear( sizeof(LTE_UE_PDSCH) );
|
||||||
|
|
||||||
if (abstraction_flag == 0) {
|
if (abstraction_flag == 0) {
|
||||||
phy_init_lte_ue__PDSCH( pdsch_vars[eNB_id], fp );
|
phy_init_lte_ue__PDSCH( pdsch_vars_th0[eNB_id], fp );
|
||||||
pdsch_vars[eNB_id]->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
|
pdsch_vars_th0[eNB_id]->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
|
||||||
|
|
||||||
|
phy_init_lte_ue__PDSCH( pdsch_vars_th1[eNB_id], fp );
|
||||||
|
pdsch_vars_th1[eNB_id]->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
|
||||||
} else { //abstraction == 1
|
} else { //abstraction == 1
|
||||||
ue->sinr_dB = (double*) malloc16_clear( fp->N_RB_DL*12*sizeof(double) );
|
ue->sinr_dB = (double*) malloc16_clear( fp->N_RB_DL*12*sizeof(double) );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*!\brief Timing drift hysterisis in samples*/
|
/*!\brief Timing drift hysterisis in samples*/
|
||||||
#define SYNCH_HYST 1
|
#define SYNCH_HYST 2
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief This function is used for time-frequency scanning prior to complete cell search. It scans
|
\brief This function is used for time-frequency scanning prior to complete cell search. It scans
|
||||||
@@ -180,6 +180,7 @@ This function computes the time domain channel response, finds the peak and adju
|
|||||||
void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
||||||
PHY_VARS_UE *phy_vars_ue,
|
PHY_VARS_UE *phy_vars_ue,
|
||||||
module_id_t eNb_id,
|
module_id_t eNb_id,
|
||||||
|
uint8_t subframe,
|
||||||
unsigned char clear,
|
unsigned char clear,
|
||||||
short coef);
|
short coef);
|
||||||
|
|
||||||
@@ -187,7 +188,8 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
|
void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
|
||||||
unsigned int subframe_offset,
|
unsigned int subframe_offset,
|
||||||
unsigned char N0_symbol,
|
unsigned char N0_symbol,
|
||||||
unsigned char abstraction_flag);
|
unsigned char abstraction_flag,
|
||||||
|
uint8_t subframe);
|
||||||
|
|
||||||
//! \brief This function performance RSRP/RSCP measurements
|
//! \brief This function performance RSRP/RSCP measurements
|
||||||
void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue,
|
void ue_rrc_measurements(PHY_VARS_UE *phy_vars_ue,
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
||||||
PHY_VARS_UE *ue,
|
PHY_VARS_UE *ue,
|
||||||
unsigned char eNB_id,
|
unsigned char eNB_id,
|
||||||
|
uint8_t subframe,
|
||||||
unsigned char clear,
|
unsigned char clear,
|
||||||
short coef)
|
short coef)
|
||||||
{
|
{
|
||||||
@@ -48,7 +49,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
ncoef = 32767 - coef;
|
ncoef = 32767 - coef;
|
||||||
|
|
||||||
#ifdef DEBUG_PHY
|
#ifdef DEBUG_PHY
|
||||||
LOG_D(PHY,"frame %d: rx_offset (before) = %d\n",ue->proc.proc_rxtx[0].frame_rx,ue->rx_offset);
|
LOG_D(PHY,"AbsSubframe %d.%d: rx_offset (before) = %d\n",ue->proc.proc_rxtx[0].frame_rx%1024,subframe,ue->rx_offset);
|
||||||
#endif //DEBUG_PHY
|
#endif //DEBUG_PHY
|
||||||
|
|
||||||
|
|
||||||
@@ -57,8 +58,8 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
temp = 0;
|
temp = 0;
|
||||||
|
|
||||||
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
||||||
Re = ((int16_t*)ue->common_vars.dl_ch_estimates_time[eNB_id][aa])[(i<<2)];
|
Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates_time[eNB_id][aa])[(i<<2)];
|
||||||
Im = ((int16_t*)ue->common_vars.dl_ch_estimates_time[eNB_id][aa])[1+(i<<2)];
|
Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates_time[eNB_id][aa])[1+(i<<2)];
|
||||||
temp += (Re*Re/2) + (Im*Im/2);
|
temp += (Re*Re/2) + (Im*Im/2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,13 +75,15 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
else
|
else
|
||||||
max_pos_fil = ((max_pos_fil * coef) + (max_pos * ncoef)) >> 15;
|
max_pos_fil = ((max_pos_fil * coef) + (max_pos * ncoef)) >> 15;
|
||||||
|
|
||||||
|
// do not filter to have proactive timing adjustment
|
||||||
|
max_pos_fil = max_pos;
|
||||||
|
|
||||||
diff = max_pos_fil - frame_parms->nb_prefix_samples/8;
|
diff = max_pos_fil - (frame_parms->nb_prefix_samples>>3);
|
||||||
|
|
||||||
if ( diff > SYNCH_HYST )
|
if ( abs(diff) < SYNCH_HYST )
|
||||||
ue->rx_offset++;
|
ue->rx_offset = 0;
|
||||||
else if (diff < -SYNCH_HYST)
|
else
|
||||||
ue->rx_offset--;
|
ue->rx_offset = diff;
|
||||||
|
|
||||||
if ( ue->rx_offset < 0 )
|
if ( ue->rx_offset < 0 )
|
||||||
ue->rx_offset += FRAME_LENGTH_COMPLEX_SAMPLES;
|
ue->rx_offset += FRAME_LENGTH_COMPLEX_SAMPLES;
|
||||||
@@ -91,8 +94,8 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG_PHY
|
#ifdef DEBUG_PHY
|
||||||
LOG_D(PHY,"frame %d: rx_offset (after) = %d : max_pos = %d,max_pos_fil = %d (peak %d)\n",
|
LOG_D(PHY,"AbsSubframe %d.%d: rx_offset (after) = %d : max_pos = %d,max_pos_fil = %d (peak %d) target_pos %d \n",
|
||||||
ue->proc.proc_rxtx[0].frame_rx,ue->rx_offset,max_pos,max_pos_fil,temp);
|
ue->proc.proc_rxtx[0].frame_rx,subframe,ue->rx_offset,max_pos,max_pos_fil,temp,(frame_parms->nb_prefix_samples>>3));
|
||||||
#endif //DEBUG_PHY
|
#endif //DEBUG_PHY
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ADJUST_SYNCH, VCD_FUNCTION_OUT);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ADJUST_SYNCH, VCD_FUNCTION_OUT);
|
||||||
|
|||||||
@@ -70,9 +70,9 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue,
|
|||||||
else
|
else
|
||||||
rballoc = dlsch0_harq->rb_alloc_even;
|
rballoc = dlsch0_harq->rb_alloc_even;
|
||||||
|
|
||||||
rxdataF = phy_vars_ue->common_vars.rxdataF;
|
rxdataF = phy_vars_ue->common_vars.common_vars_rx_data_per_thread[(Ns>>1)&0x1].rxdataF;
|
||||||
|
|
||||||
dl_bf_ch_estimates = phy_vars_ue->pdsch_vars[eNB_id]->dl_bf_ch_estimates;
|
dl_bf_ch_estimates = phy_vars_ue->pdsch_vars[(Ns>>1)&0x1][eNB_id]->dl_bf_ch_estimates;
|
||||||
beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]>6 ? phy_vars_ue->transmission_mode[eNB_id] : 0;
|
beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]>6 ? phy_vars_ue->transmission_mode[eNB_id] : 0;
|
||||||
|
|
||||||
if (phy_vars_ue->high_speed_flag == 0) // use second channel estimate position for temporary storage
|
if (phy_vars_ue->high_speed_flag == 0) // use second channel estimate position for temporary storage
|
||||||
|
|||||||
@@ -44,12 +44,14 @@ int lte_dl_channel_estimation(PHY_VARS_UE *ue,
|
|||||||
int ch_offset,symbol_offset;
|
int ch_offset,symbol_offset;
|
||||||
// unsigned int n;
|
// unsigned int n;
|
||||||
// int i;
|
// int i;
|
||||||
|
static int interpolateS11S12 = 1;
|
||||||
|
|
||||||
uint16_t Nid_cell = (eNB_offset == 0) ? ue->frame_parms.Nid_cell : ue->measurements.adj_cell_id[eNB_offset-1];
|
uint16_t Nid_cell = (eNB_offset == 0) ? ue->frame_parms.Nid_cell : ue->measurements.adj_cell_id[eNB_offset-1];
|
||||||
|
|
||||||
uint8_t nushift,pilot1,pilot2,pilot3;
|
uint8_t nushift,pilot1,pilot2,pilot3;
|
||||||
int **dl_ch_estimates=ue->common_vars.dl_ch_estimates[eNB_offset];
|
int **dl_ch_estimates =ue->common_vars.common_vars_rx_data_per_thread[(Ns>>1)&0x1].dl_ch_estimates[eNB_offset];
|
||||||
int **rxdataF=ue->common_vars.rxdataF;
|
int **dl_ch_estimates_previous=ue->common_vars.common_vars_rx_data_per_thread[((Ns>>1)+1)&0x1].dl_ch_estimates[eNB_offset];
|
||||||
|
int **rxdataF=ue->common_vars.common_vars_rx_data_per_thread[(Ns>>1)&0x1].rxdataF;
|
||||||
|
|
||||||
if (ue->frame_parms.Ncp == 0) { // normal prefix
|
if (ue->frame_parms.Ncp == 0) { // normal prefix
|
||||||
pilot1 = 4;
|
pilot1 = 4;
|
||||||
@@ -638,13 +640,19 @@ int lte_dl_channel_estimation(PHY_VARS_UE *ue,
|
|||||||
if (symbol == 0) {
|
if (symbol == 0) {
|
||||||
// printf("Interpolating %d->0\n",4-ue->frame_parms.Ncp);
|
// printf("Interpolating %d->0\n",4-ue->frame_parms.Ncp);
|
||||||
// dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][(4-ue->frame_parms.Ncp)*(ue->frame_parms.ofdm_symbol_size)];
|
// dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][(4-ue->frame_parms.Ncp)*(ue->frame_parms.ofdm_symbol_size)];
|
||||||
dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][pilot3*(ue->frame_parms.ofdm_symbol_size)];
|
if(((Ns>>1)!=0) || ( ((Ns>>1)==0) && interpolateS11S12))
|
||||||
|
{
|
||||||
|
//LOG_D(PHY,"Interpolate s11-->s0 to get s12 and s13 Ns %d \n", Ns);
|
||||||
|
dl_ch_prev = (int16_t *)&dl_ch_estimates_previous[(p<<1)+aarx][pilot3*(ue->frame_parms.ofdm_symbol_size)];
|
||||||
|
|
||||||
multadd_complex_vector_real_scalar(dl_ch_prev,21845,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),1,ue->frame_parms.ofdm_symbol_size);
|
multadd_complex_vector_real_scalar(dl_ch_prev,21845,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),1,ue->frame_parms.ofdm_symbol_size);
|
||||||
multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),0,ue->frame_parms.ofdm_symbol_size);
|
multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)),0,ue->frame_parms.ofdm_symbol_size);
|
||||||
|
|
||||||
multadd_complex_vector_real_scalar(dl_ch_prev,10923,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),1,ue->frame_parms.ofdm_symbol_size);
|
multadd_complex_vector_real_scalar(dl_ch_prev,10923,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),1,ue->frame_parms.ofdm_symbol_size);
|
||||||
multadd_complex_vector_real_scalar(dl_ch,21845,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),0,ue->frame_parms.ofdm_symbol_size);
|
multadd_complex_vector_real_scalar(dl_ch,21845,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),0,ue->frame_parms.ofdm_symbol_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
interpolateS11S12 = 1;
|
||||||
} // this is 1/3,2/3 combination for pilots spaced by 3 symbols
|
} // this is 1/3,2/3 combination for pilots spaced by 3 symbols
|
||||||
else if (symbol == pilot1) {
|
else if (symbol == pilot1) {
|
||||||
dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][0];
|
dl_ch_prev = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][0];
|
||||||
@@ -693,6 +701,38 @@ int lte_dl_channel_estimation(PHY_VARS_UE *ue,
|
|||||||
multadd_complex_vector_real_scalar(dl_ch_prev,21845,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)<<1),1,ue->frame_parms.ofdm_symbol_size);
|
multadd_complex_vector_real_scalar(dl_ch_prev,21845,dl_ch_prev+(2*(ue->frame_parms.ofdm_symbol_size)<<1),1,ue->frame_parms.ofdm_symbol_size);
|
||||||
multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),0,ue->frame_parms.ofdm_symbol_size);
|
multadd_complex_vector_real_scalar(dl_ch,10923,dl_ch_prev+(2*((ue->frame_parms.ofdm_symbol_size)<<1)),0,ue->frame_parms.ofdm_symbol_size);
|
||||||
} // pilot spacing 3 symbols (1/3,2/3 combination)
|
} // pilot spacing 3 symbols (1/3,2/3 combination)
|
||||||
|
|
||||||
|
if((ue->rx_offset_diff !=0) && ((Ns>>1) == 9))
|
||||||
|
{
|
||||||
|
//LOG_D(PHY,"Extrapolate s7-->s11 to get s12 and s13 Ns %d\n", Ns);
|
||||||
|
interpolateS11S12 = 0;
|
||||||
|
//LOG_E(PHY,"Interpolate s7--s11 s12 s13 pilot 3 Ns %d l %d symbol %d \n", Ns, l, symbol);
|
||||||
|
int16_t *dlChEst_ofdm11 = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][pilot3*(ue->frame_parms.ofdm_symbol_size)];
|
||||||
|
int16_t *dlChEst_ofdm7 = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][pilot2*(ue->frame_parms.ofdm_symbol_size)];
|
||||||
|
|
||||||
|
// interpolate ofdm s12: 5/4*ofdms11 + -1/4*ofdms7 5/4 q1.15 40960 -1/4 q1.15 8192
|
||||||
|
int16_t *dlChEst_ofdm12 = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][12*ue->frame_parms.ofdm_symbol_size];
|
||||||
|
for(int i=0; i<(2*ue->frame_parms.ofdm_symbol_size); i++)
|
||||||
|
{
|
||||||
|
int64_t tmp_mult = 0;
|
||||||
|
tmp_mult = ((int64_t)dlChEst_ofdm11[i] * 40960 - (int64_t)dlChEst_ofdm7[i] * 8192);
|
||||||
|
|
||||||
|
tmp_mult = tmp_mult >> 15;
|
||||||
|
dlChEst_ofdm12[i] = tmp_mult;
|
||||||
|
}
|
||||||
|
|
||||||
|
// interpolate ofdm s13: 3/2*ofdms11 + -1/2*ofdms7 3/2 q1.15 49152 1/2 q1.15 16384
|
||||||
|
int16_t *dlChEst_ofdm13 = (int16_t *)&dl_ch_estimates[(p<<1)+aarx][13*ue->frame_parms.ofdm_symbol_size];
|
||||||
|
for(int i=0; i<(2*ue->frame_parms.ofdm_symbol_size); i++)
|
||||||
|
{
|
||||||
|
int64_t tmp_mult = 0;
|
||||||
|
tmp_mult = ((int64_t)dlChEst_ofdm11[i] * 49152 - (int64_t)dlChEst_ofdm7[i] * 16384);
|
||||||
|
|
||||||
|
tmp_mult = tmp_mult >> 15;
|
||||||
|
dlChEst_ofdm13[i] = tmp_mult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -734,15 +774,15 @@ int lte_dl_channel_estimation(PHY_VARS_UE *ue,
|
|||||||
// do ifft of channel estimate
|
// do ifft of channel estimate
|
||||||
for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++)
|
for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++)
|
||||||
for (p=0; p<ue->frame_parms.nb_antenna_ports_eNB; p++) {
|
for (p=0; p<ue->frame_parms.nb_antenna_ports_eNB; p++) {
|
||||||
if (ue->common_vars.dl_ch_estimates[eNB_offset][(p<<1)+aarx])
|
if (ue->common_vars.common_vars_rx_data_per_thread[(Ns>>1)&0x1].dl_ch_estimates[eNB_offset][(p<<1)+aarx])
|
||||||
idft((int16_t*) &ue->common_vars.dl_ch_estimates[eNB_offset][(p<<1)+aarx][8],
|
idft((int16_t*) &ue->common_vars.common_vars_rx_data_per_thread[(Ns>>1)&0x1].dl_ch_estimates[eNB_offset][(p<<1)+aarx][8],
|
||||||
(int16_t*) ue->common_vars.dl_ch_estimates_time[eNB_offset][(p<<1)+aarx],1);
|
(int16_t*) ue->common_vars.common_vars_rx_data_per_thread[(Ns>>1)&0x1].dl_ch_estimates_time[eNB_offset][(p<<1)+aarx],1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if T_TRACER
|
#if T_TRACER
|
||||||
T(T_UE_PHY_DL_CHANNEL_ESTIMATE, T_INT(eNB_id), T_INT(ue->Mod_id),
|
T(T_UE_PHY_DL_CHANNEL_ESTIMATE, T_INT(eNB_id), T_INT(ue->Mod_id),
|
||||||
T_INT(ue->proc.proc_rxtx[(Ns>>1)&1].frame_rx%1024), T_INT(ue->proc.proc_rxtx[(Ns>>1)&1].subframe_rx),
|
T_INT(ue->proc.proc_rxtx[(Ns>>1)&1].frame_rx%1024), T_INT(ue->proc.proc_rxtx[(Ns>>1)&1].subframe_rx),
|
||||||
T_INT(0), T_BUFFER(&ue->common_vars.dl_ch_estimates_time[eNB_offset][0][0], 512 * 4));
|
T_INT(0), T_BUFFER(&ue->common_vars.common_vars_rx_data_per_thread[(Ns>>1)&0x1].dl_ch_estimates_time[eNB_offset][0][0], 512 * 4));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
|
|||||||
@@ -44,8 +44,8 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *ue,
|
|||||||
// unsigned int n;
|
// unsigned int n;
|
||||||
// int i;
|
// int i;
|
||||||
|
|
||||||
int **dl_ch_estimates=ue->common_vars.dl_ch_estimates[0];
|
int **dl_ch_estimates=ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0];
|
||||||
int **rxdataF=ue->common_vars.rxdataF;
|
int **rxdataF=ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF;
|
||||||
|
|
||||||
ch_offset = (l*(ue->frame_parms.ofdm_symbol_size));
|
ch_offset = (l*(ue->frame_parms.ofdm_symbol_size));
|
||||||
symbol_offset = ch_offset;//phy_vars_ue->lte_frame_parms.ofdm_symbol_size*l;
|
symbol_offset = ch_offset;//phy_vars_ue->lte_frame_parms.ofdm_symbol_size*l;
|
||||||
@@ -734,31 +734,31 @@ int lte_dl_mbsfn_channel_estimation(PHY_VARS_UE *ue,
|
|||||||
|
|
||||||
// do ifft of channel estimate
|
// do ifft of channel estimate
|
||||||
for (aa=0; aa<ue->frame_parms.nb_antennas_rx*ue->frame_parms.nb_antennas_tx; aa++) {
|
for (aa=0; aa<ue->frame_parms.nb_antennas_rx*ue->frame_parms.nb_antennas_tx; aa++) {
|
||||||
if (ue->common_vars.dl_ch_estimates[eNB_offset][aa]) {
|
if (ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_offset][aa]) {
|
||||||
switch (ue->frame_parms.N_RB_DL) {
|
switch (ue->frame_parms.N_RB_DL) {
|
||||||
case 6:
|
case 6:
|
||||||
idft128((int16_t*) &ue->common_vars.dl_ch_estimates[eNB_offset][aa][8],
|
idft128((int16_t*) &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_offset][aa][8],
|
||||||
(int16_t*) ue->common_vars.dl_ch_estimates_time[eNB_offset][aa],
|
(int16_t*) ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates_time[eNB_offset][aa],
|
||||||
1);
|
1);
|
||||||
break;
|
break;
|
||||||
case 25:
|
case 25:
|
||||||
idft512((int16_t*) &ue->common_vars.dl_ch_estimates[eNB_offset][aa][8],
|
idft512((int16_t*) &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_offset][aa][8],
|
||||||
(int16_t*) ue->common_vars.dl_ch_estimates_time[eNB_offset][aa],
|
(int16_t*) ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates_time[eNB_offset][aa],
|
||||||
1);
|
1);
|
||||||
break;
|
break;
|
||||||
case 50:
|
case 50:
|
||||||
idft1024((int16_t*) &ue->common_vars.dl_ch_estimates[eNB_offset][aa][8],
|
idft1024((int16_t*) &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_offset][aa][8],
|
||||||
(int16_t*) ue->common_vars.dl_ch_estimates_time[eNB_offset][aa],
|
(int16_t*) ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates_time[eNB_offset][aa],
|
||||||
1);
|
1);
|
||||||
break;
|
break;
|
||||||
case 75:
|
case 75:
|
||||||
idft1536((int16_t*) &ue->common_vars.dl_ch_estimates[eNB_offset][aa][8],
|
idft1536((int16_t*) &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_offset][aa][8],
|
||||||
(int16_t*) ue->common_vars.dl_ch_estimates_time[eNB_offset][aa],
|
(int16_t*) ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates_time[eNB_offset][aa],
|
||||||
1);
|
1);
|
||||||
break;
|
break;
|
||||||
case 100:
|
case 100:
|
||||||
idft2048((int16_t*) &ue->common_vars.dl_ch_estimates[eNB_offset][aa][8],
|
idft2048((int16_t*) &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_offset][aa][8],
|
||||||
(int16_t*) ue->common_vars.dl_ch_estimates_time[eNB_offset][aa],
|
(int16_t*) ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates_time[eNB_offset][aa],
|
||||||
1);
|
1);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -198,9 +198,8 @@ void ue_rrc_measurements(PHY_VARS_UE *ue,
|
|||||||
if (ue->frame_parms.Ncp==NORMAL) {
|
if (ue->frame_parms.Ncp==NORMAL) {
|
||||||
for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
|
||||||
|
|
||||||
rxF_sss = (int16_t *)&ue->common_vars.rxdataF[aarx][(5*ue->frame_parms.ofdm_symbol_size)];
|
rxF_sss = (int16_t *)&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aarx][(5*ue->frame_parms.ofdm_symbol_size)];
|
||||||
rxF_pss = (int16_t *)&ue->common_vars.rxdataF[aarx][(6*ue->frame_parms.ofdm_symbol_size)];
|
rxF_pss = (int16_t *)&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aarx][(6*ue->frame_parms.ofdm_symbol_size)];
|
||||||
|
|
||||||
|
|
||||||
//-ve spectrum from SSS
|
//-ve spectrum from SSS
|
||||||
// printf("slot %d: SSS DTX: %d,%d, non-DTX %d,%d\n",slot,rxF_pss[-72],rxF_pss[-71],rxF_pss[-36],rxF_pss[-35]);
|
// printf("slot %d: SSS DTX: %d,%d, non-DTX %d,%d\n",slot,rxF_pss[-72],rxF_pss[-71],rxF_pss[-36],rxF_pss[-35]);
|
||||||
@@ -224,7 +223,7 @@ void ue_rrc_measurements(PHY_VARS_UE *ue,
|
|||||||
ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+66]*rxF_pss[2+66])+((int32_t)rxF_pss[2+65]*rxF_pss[2+65]));
|
ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+66]*rxF_pss[2+66])+((int32_t)rxF_pss[2+65]*rxF_pss[2+65]));
|
||||||
// ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+64]*rxF_pss[2+64])+((int32_t)rxF_pss[2+63]*rxF_pss[2+63]));
|
// ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[2+64]*rxF_pss[2+64])+((int32_t)rxF_pss[2+63]*rxF_pss[2+63]));
|
||||||
// printf("pss32 %d\n",ue->measurements.n0_power[aarx]); //-ve spectrum from PSS
|
// printf("pss32 %d\n",ue->measurements.n0_power[aarx]); //-ve spectrum from PSS
|
||||||
rxF_pss = (int16_t *)&ue->common_vars.rxdataF[aarx][(7*ue->frame_parms.ofdm_symbol_size)];
|
rxF_pss = (int16_t *)&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aarx][(7*ue->frame_parms.ofdm_symbol_size)];
|
||||||
// ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71]));
|
// ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71]));
|
||||||
// printf("pssm36 %d\n",ue->measurements.n0_power[aarx]);
|
// printf("pssm36 %d\n",ue->measurements.n0_power[aarx]);
|
||||||
ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-70]*rxF_pss[-70])+((int32_t)rxF_pss[-69]*rxF_pss[-69]));
|
ue->measurements.n0_power[aarx] += (((int32_t)rxF_pss[-70]*rxF_pss[-70])+((int32_t)rxF_pss[-69]*rxF_pss[-69]));
|
||||||
@@ -296,10 +295,11 @@ void ue_rrc_measurements(PHY_VARS_UE *ue,
|
|||||||
if (ue->frame_parms.Ncp==NORMAL) {
|
if (ue->frame_parms.Ncp==NORMAL) {
|
||||||
for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
|
||||||
|
|
||||||
rxF_sss = (int16_t *)&ue->common_vars.rxdataF[aarx][(6*ue->frame_parms.ofdm_symbol_size)];
|
rxF_sss = (int16_t *)&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aarx][(6*ue->frame_parms.ofdm_symbol_size)];
|
||||||
// note this is a dummy pointer, the pss is not really there!
|
// note this is a dummy pointer, the pss is not really there!
|
||||||
// in FDD the pss is in the symbol after the sss, but not in TDD
|
// in FDD the pss is in the symbol after the sss, but not in TDD
|
||||||
rxF_pss = (int16_t *)&ue->common_vars.rxdataF[aarx][(7*ue->frame_parms.ofdm_symbol_size)];
|
|
||||||
|
rxF_pss = (int16_t *)&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aarx][(7*ue->frame_parms.ofdm_symbol_size)];
|
||||||
|
|
||||||
//-ve spectrum from SSS
|
//-ve spectrum from SSS
|
||||||
// ue->measurements.n0_power[aarx] = (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71]));
|
// ue->measurements.n0_power[aarx] = (((int32_t)rxF_pss[-72]*rxF_pss[-72])+((int32_t)rxF_pss[-71]*rxF_pss[-71]));
|
||||||
@@ -351,7 +351,7 @@ void ue_rrc_measurements(PHY_VARS_UE *ue,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<ue->frame_parms.nb_antennas_rx; aarx++) {
|
||||||
rxF = (int16_t *)&ue->common_vars.rxdataF[aarx][(l*ue->frame_parms.ofdm_symbol_size)];
|
rxF = (int16_t *)&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aarx][(l*ue->frame_parms.ofdm_symbol_size)];
|
||||||
off = (ue->frame_parms.first_carrier_offset+k)<<1;
|
off = (ue->frame_parms.first_carrier_offset+k)<<1;
|
||||||
|
|
||||||
if (l==(4-ue->frame_parms.Ncp)) {
|
if (l==(4-ue->frame_parms.Ncp)) {
|
||||||
@@ -457,7 +457,8 @@ void ue_rrc_measurements(PHY_VARS_UE *ue,
|
|||||||
void lte_ue_measurements(PHY_VARS_UE *ue,
|
void lte_ue_measurements(PHY_VARS_UE *ue,
|
||||||
unsigned int subframe_offset,
|
unsigned int subframe_offset,
|
||||||
unsigned char N0_symbol,
|
unsigned char N0_symbol,
|
||||||
unsigned char abstraction_flag)
|
unsigned char abstraction_flag,
|
||||||
|
uint8_t subframe)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
@@ -515,7 +516,7 @@ void lte_ue_measurements(PHY_VARS_UE *ue,
|
|||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||||
for (aatx=0; aatx<frame_parms->nb_antenna_ports_eNB; aatx++) {
|
for (aatx=0; aatx<frame_parms->nb_antenna_ports_eNB; aatx++) {
|
||||||
ue->measurements.rx_spatial_power[eNB_id][aatx][aarx] =
|
ue->measurements.rx_spatial_power[eNB_id][aatx][aarx] =
|
||||||
(signal_energy_nodc(&ue->common_vars.dl_ch_estimates[eNB_id][(aatx<<1) + aarx][0],
|
(signal_energy_nodc(&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][(aatx<<1) + aarx][0],
|
||||||
(N_RB_DL*12)));
|
(N_RB_DL*12)));
|
||||||
//- ue->measurements.n0_power[aarx];
|
//- ue->measurements.n0_power[aarx];
|
||||||
|
|
||||||
@@ -583,8 +584,8 @@ void lte_ue_measurements(PHY_VARS_UE *ue,
|
|||||||
// cqi/pmi information
|
// cqi/pmi information
|
||||||
|
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||||
dl_ch0 = &ue->common_vars.dl_ch_estimates[eNB_id][aarx][4];
|
dl_ch0 = &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][aarx][4];
|
||||||
dl_ch1 = &ue->common_vars.dl_ch_estimates[eNB_id][2+aarx][4];
|
dl_ch1 = &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2+aarx][4];
|
||||||
|
|
||||||
for (subband=0; subband<nb_subbands; subband++) {
|
for (subband=0; subband<nb_subbands; subband++) {
|
||||||
|
|
||||||
@@ -639,13 +640,13 @@ void lte_ue_measurements(PHY_VARS_UE *ue,
|
|||||||
#if defined(__x86_64__) || defined(__i386__)
|
#if defined(__x86_64__) || defined(__i386__)
|
||||||
__m128i pmi128_re,pmi128_im,mmtmpPMI0,mmtmpPMI1 /* ,mmtmpPMI2,mmtmpPMI3 */ ;
|
__m128i pmi128_re,pmi128_im,mmtmpPMI0,mmtmpPMI1 /* ,mmtmpPMI2,mmtmpPMI3 */ ;
|
||||||
|
|
||||||
dl_ch0_128 = (__m128i *)&ue->common_vars.dl_ch_estimates[eNB_id][aarx][4];
|
dl_ch0_128 = (__m128i *)&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][aarx][4];
|
||||||
dl_ch1_128 = (__m128i *)&ue->common_vars.dl_ch_estimates[eNB_id][2+aarx][4];
|
dl_ch1_128 = (__m128i *)&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2+aarx][4];
|
||||||
#elif defined(__arm__)
|
#elif defined(__arm__)
|
||||||
int32x4_t pmi128_re,pmi128_im,mmtmpPMI0,mmtmpPMI1,mmtmpPMI0b,mmtmpPMI1b;
|
int32x4_t pmi128_re,pmi128_im,mmtmpPMI0,mmtmpPMI1,mmtmpPMI0b,mmtmpPMI1b;
|
||||||
|
|
||||||
dl_ch0_128 = (int16x8_t *)&ue->common_vars.dl_ch_estimates[eNB_id][aarx][4];
|
dl_ch0_128 = (int16x8_t *)&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][aarx][4];
|
||||||
dl_ch1_128 = (int16x8_t *)&ue->common_vars.dl_ch_estimates[eNB_id][2+aarx][4];
|
dl_ch1_128 = (int16x8_t *)&ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2+aarx][4];
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
for (subband=0; subband<nb_subbands; subband++) {
|
for (subband=0; subband<nb_subbands; subband++) {
|
||||||
@@ -739,7 +740,7 @@ void lte_ue_measurements(PHY_VARS_UE *ue,
|
|||||||
else {
|
else {
|
||||||
// cqi information only for mode 1
|
// cqi information only for mode 1
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||||
dl_ch0 = &ue->common_vars.dl_ch_estimates[eNB_id][aarx][4];
|
dl_ch0 = &ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][aarx][4];
|
||||||
|
|
||||||
for (subband=0; subband<7; subband++) {
|
for (subband=0; subband<7; subband++) {
|
||||||
|
|
||||||
|
|||||||
@@ -1705,16 +1705,16 @@ int32_t rx_pdcch(LTE_UE_COMMON *common_vars,
|
|||||||
|
|
||||||
for (s=0; s<n_pdcch_symbols; s++) {
|
for (s=0; s<n_pdcch_symbols; s++) {
|
||||||
if (is_secondary_ue == 1) {
|
if (is_secondary_ue == 1) {
|
||||||
pdcch_extract_rbs_single(common_vars->rxdataF,
|
pdcch_extract_rbs_single(common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF,
|
||||||
common_vars->dl_ch_estimates[eNB_id+1], //add 1 to eNB_id to compensate for the shifted B/F'd pilots from the SeNB
|
common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id+1], //add 1 to eNB_id to compensate for the shifted B/F'd pilots from the SeNB
|
||||||
pdcch_vars[eNB_id]->rxdataF_ext,
|
pdcch_vars[eNB_id]->rxdataF_ext,
|
||||||
pdcch_vars[eNB_id]->dl_ch_estimates_ext,
|
pdcch_vars[eNB_id]->dl_ch_estimates_ext,
|
||||||
s,
|
s,
|
||||||
high_speed_flag,
|
high_speed_flag,
|
||||||
frame_parms);
|
frame_parms);
|
||||||
#ifdef MU_RECEIVER
|
#ifdef MU_RECEIVER
|
||||||
pdcch_extract_rbs_single(common_vars->rxdataF,
|
pdcch_extract_rbs_single(common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF,
|
||||||
common_vars->dl_ch_estimates[eNB_id_i - 1],//subtract 1 to eNB_id_i to compensate for the non-shifted pilots from the PeNB
|
common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id_i - 1],//subtract 1 to eNB_id_i to compensate for the non-shifted pilots from the PeNB
|
||||||
pdcch_vars[eNB_id_i]->rxdataF_ext,//shift by two to simulate transmission from a second antenna
|
pdcch_vars[eNB_id_i]->rxdataF_ext,//shift by two to simulate transmission from a second antenna
|
||||||
pdcch_vars[eNB_id_i]->dl_ch_estimates_ext,//shift by two to simulate transmission from a second antenna
|
pdcch_vars[eNB_id_i]->dl_ch_estimates_ext,//shift by two to simulate transmission from a second antenna
|
||||||
s,
|
s,
|
||||||
@@ -1722,16 +1722,16 @@ int32_t rx_pdcch(LTE_UE_COMMON *common_vars,
|
|||||||
frame_parms);
|
frame_parms);
|
||||||
#endif //MU_RECEIVER
|
#endif //MU_RECEIVER
|
||||||
} else if (frame_parms->nb_antenna_ports_eNB>1) {
|
} else if (frame_parms->nb_antenna_ports_eNB>1) {
|
||||||
pdcch_extract_rbs_dual(common_vars->rxdataF,
|
pdcch_extract_rbs_dual(common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF,
|
||||||
common_vars->dl_ch_estimates[eNB_id],
|
common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id],
|
||||||
pdcch_vars[eNB_id]->rxdataF_ext,
|
pdcch_vars[eNB_id]->rxdataF_ext,
|
||||||
pdcch_vars[eNB_id]->dl_ch_estimates_ext,
|
pdcch_vars[eNB_id]->dl_ch_estimates_ext,
|
||||||
s,
|
s,
|
||||||
high_speed_flag,
|
high_speed_flag,
|
||||||
frame_parms);
|
frame_parms);
|
||||||
} else {
|
} else {
|
||||||
pdcch_extract_rbs_single(common_vars->rxdataF,
|
pdcch_extract_rbs_single(common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF,
|
||||||
common_vars->dl_ch_estimates[eNB_id],
|
common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id],
|
||||||
pdcch_vars[eNB_id]->rxdataF_ext,
|
pdcch_vars[eNB_id]->rxdataF_ext,
|
||||||
pdcch_vars[eNB_id]->dl_ch_estimates_ext,
|
pdcch_vars[eNB_id]->dl_ch_estimates_ext,
|
||||||
s,
|
s,
|
||||||
|
|||||||
@@ -7729,7 +7729,8 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
|
|||||||
// ulsch->n_DMRS2 = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->cshift;
|
// ulsch->n_DMRS2 = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->cshift;
|
||||||
|
|
||||||
#ifdef DEBUG_DCI
|
#ifdef DEBUG_DCI
|
||||||
printf("Format 0 DCI : ulsch (ue): AbsSubframe %d.%d\n",proc->frame_rx,subframe);
|
|
||||||
|
printf("Format 0 DCI : ulsch (ue): AbsSubframe %d.%d\n",proc->frame_rx%1024,subframe);
|
||||||
printf("Format 0 DCI : ulsch (ue): NBRB %d\n",ulsch->harq_processes[harq_pid]->nb_rb);
|
printf("Format 0 DCI : ulsch (ue): NBRB %d\n",ulsch->harq_processes[harq_pid]->nb_rb);
|
||||||
printf("Format 0 DCI :ulsch (ue): first_rb %d\n",ulsch->harq_processes[harq_pid]->first_rb);
|
printf("Format 0 DCI :ulsch (ue): first_rb %d\n",ulsch->harq_processes[harq_pid]->first_rb);
|
||||||
printf("Format 0 DCI :ulsch (ue): rballoc %d\n",rballoc);
|
printf("Format 0 DCI :ulsch (ue): rballoc %d\n",rballoc);
|
||||||
@@ -7737,14 +7738,14 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
|
|||||||
printf("Format 0 DCI :ulsch (ue): first_tx %d\n",ulsch->harq_processes[harq_pid]->first_tx);
|
printf("Format 0 DCI :ulsch (ue): first_tx %d\n",ulsch->harq_processes[harq_pid]->first_tx);
|
||||||
printf("Format 0 DCI :ulsch (ue): DCINdi %d\n",ulsch->harq_processes[harq_pid]->DCINdi);
|
printf("Format 0 DCI :ulsch (ue): DCINdi %d\n",ulsch->harq_processes[harq_pid]->DCINdi);
|
||||||
printf("Format 0 DCI :ulsch (ue): round %d\n",ulsch->harq_processes[harq_pid]->round);
|
printf("Format 0 DCI :ulsch (ue): round %d\n",ulsch->harq_processes[harq_pid]->round);
|
||||||
printf("Format 0 DCI :ulsch (ue): TBS %d\n",ulsch->harq_processes[harq_pid]->TBS);
|
//printf("Format 0 DCI :ulsch (ue): TBS %d\n",ulsch->harq_processes[harq_pid]->TBS);
|
||||||
printf("Format 0 DCI :ulsch (ue): mcs %d\n",ulsch->harq_processes[harq_pid]->mcs);
|
printf("Format 0 DCI :ulsch (ue): mcs %d\n",ulsch->harq_processes[harq_pid]->mcs);
|
||||||
printf("Format 0 DCI :ulsch (ue): O %d\n",ulsch->O);
|
//printf("Format 0 DCI :ulsch (ue): O %d\n",ulsch->O);
|
||||||
printf("Format 0 DCI :ulsch (ue): cqiReq %d\n",cqi_req);
|
//printf("Format 0 DCI :ulsch (ue): cqiReq %d\n",cqi_req);
|
||||||
if (frame_parms->frame_type == TDD)
|
//if (frame_parms->frame_type == TDD)
|
||||||
printf("Format 0 DCI :ulsch (ue): O_ACK/DAI %d/%d\n",ulsch->harq_processes[harq_pid]->O_ACK,dai);
|
// printf("Format 0 DCI :ulsch (ue): O_ACK/DAI %d/%d\n",ulsch->harq_processes[harq_pid]->O_ACK,dai);
|
||||||
else
|
//else
|
||||||
printf("Format 0 DCI :ulsch (ue): O_ACK %d\n",ulsch->harq_processes[harq_pid]->O_ACK);
|
// printf("Format 0 DCI :ulsch (ue): O_ACK %d\n",ulsch->harq_processes[harq_pid]->O_ACK);
|
||||||
|
|
||||||
printf("Format 0 DCI :ulsch (ue): Nsymb_pusch %d\n",ulsch->Nsymb_pusch);
|
printf("Format 0 DCI :ulsch (ue): Nsymb_pusch %d\n",ulsch->Nsymb_pusch);
|
||||||
printf("Format 0 DCI :ulsch (ue): cshift %d\n",ulsch->harq_processes[harq_pid]->n_DMRS2);
|
printf("Format 0 DCI :ulsch (ue): cshift %d\n",ulsch->harq_processes[harq_pid]->n_DMRS2);
|
||||||
@@ -8397,12 +8398,12 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *eNB,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
double sinr_eff_cqi_calc(PHY_VARS_UE *ue, uint8_t eNB_id)
|
double sinr_eff_cqi_calc(PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe)
|
||||||
{
|
{
|
||||||
uint8_t transmission_mode = ue->transmission_mode[eNB_id];
|
uint8_t transmission_mode = ue->transmission_mode[eNB_id];
|
||||||
PHY_MEASUREMENTS *meas = &ue->measurements;
|
PHY_MEASUREMENTS *meas = &ue->measurements;
|
||||||
LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
|
LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
|
||||||
int32_t **dl_channel_est = ue->common_vars.dl_ch_estimates[eNB_id];
|
int32_t **dl_channel_est = ue->common_vars.common_vars_rx_data_per_thread[subframe &0x1].dl_ch_estimates[eNB_id];
|
||||||
double *s_dB;
|
double *s_dB;
|
||||||
s_dB = ue->sinr_CQI_dB;
|
s_dB = ue->sinr_CQI_dB;
|
||||||
// LTE_UE_ULSCH_t *ulsch = ue->ulsch[eNB_id];
|
// LTE_UE_ULSCH_t *ulsch = ue->ulsch[eNB_id];
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case PDSCH:
|
case PDSCH:
|
||||||
pdsch_vars = &ue->pdsch_vars[eNB_id];
|
pdsch_vars = &ue->pdsch_vars[subframe&0x1][eNB_id];
|
||||||
dlsch = ue->dlsch[eNB_id];
|
dlsch = ue->dlsch[eNB_id];
|
||||||
if ((dlsch[0]->harq_processes[harq_pid]->status == ACTIVE) &&
|
if ((dlsch[0]->harq_processes[harq_pid]->status == ACTIVE) &&
|
||||||
(dlsch[1]->harq_processes[harq_pid]->status == ACTIVE)){
|
(dlsch[1]->harq_processes[harq_pid]->status == ACTIVE)){
|
||||||
@@ -231,8 +231,8 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
|||||||
LOG_I(PHY,"dlsch: using pmi %x (%p), rb_alloc %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),dlsch[0],dlsch0_harq->rb_alloc_even[0]);
|
LOG_I(PHY,"dlsch: using pmi %x (%p), rb_alloc %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),dlsch[0],dlsch0_harq->rb_alloc_even[0]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
nb_rb = dlsch_extract_rbs_dual(common_vars->rxdataF,
|
nb_rb = dlsch_extract_rbs_dual(common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF,
|
||||||
common_vars->dl_ch_estimates[eNB_id],
|
common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id],
|
||||||
pdsch_vars[eNB_id]->rxdataF_ext,
|
pdsch_vars[eNB_id]->rxdataF_ext,
|
||||||
pdsch_vars[eNB_id]->dl_ch_estimates_ext,
|
pdsch_vars[eNB_id]->dl_ch_estimates_ext,
|
||||||
dlsch0_harq->pmi_alloc,
|
dlsch0_harq->pmi_alloc,
|
||||||
@@ -252,8 +252,8 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
|||||||
|
|
||||||
if (rx_type >= rx_IC_single_stream) {
|
if (rx_type >= rx_IC_single_stream) {
|
||||||
if (eNB_id_i<ue->n_connected_eNB) // we are in TM5
|
if (eNB_id_i<ue->n_connected_eNB) // we are in TM5
|
||||||
nb_rb = dlsch_extract_rbs_dual(common_vars->rxdataF,
|
nb_rb = dlsch_extract_rbs_dual(common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF,
|
||||||
common_vars->dl_ch_estimates[eNB_id_i],
|
common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id_i],
|
||||||
pdsch_vars[eNB_id_i]->rxdataF_ext,
|
pdsch_vars[eNB_id_i]->rxdataF_ext,
|
||||||
pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
|
pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
|
||||||
dlsch0_harq->pmi_alloc,
|
dlsch0_harq->pmi_alloc,
|
||||||
@@ -265,8 +265,8 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
|||||||
frame_parms,
|
frame_parms,
|
||||||
dlsch0_harq->mimo_mode);
|
dlsch0_harq->mimo_mode);
|
||||||
else
|
else
|
||||||
nb_rb = dlsch_extract_rbs_dual(common_vars->rxdataF,
|
nb_rb = dlsch_extract_rbs_dual(common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF,
|
||||||
common_vars->dl_ch_estimates[eNB_id],
|
common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id],
|
||||||
pdsch_vars[eNB_id_i]->rxdataF_ext,
|
pdsch_vars[eNB_id_i]->rxdataF_ext,
|
||||||
pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
|
pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
|
||||||
dlsch0_harq->pmi_alloc,
|
dlsch0_harq->pmi_alloc,
|
||||||
@@ -279,8 +279,8 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
|||||||
dlsch0_harq->mimo_mode);
|
dlsch0_harq->mimo_mode);
|
||||||
}
|
}
|
||||||
} else if (beamforming_mode==0) { //else if nb_antennas_ports_eNB==1 && beamforming_mode == 0
|
} else if (beamforming_mode==0) { //else if nb_antennas_ports_eNB==1 && beamforming_mode == 0
|
||||||
nb_rb = dlsch_extract_rbs_single(common_vars->rxdataF,
|
nb_rb = dlsch_extract_rbs_single(common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF,
|
||||||
common_vars->dl_ch_estimates[eNB_id],
|
common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id],
|
||||||
pdsch_vars[eNB_id]->rxdataF_ext,
|
pdsch_vars[eNB_id]->rxdataF_ext,
|
||||||
pdsch_vars[eNB_id]->dl_ch_estimates_ext,
|
pdsch_vars[eNB_id]->dl_ch_estimates_ext,
|
||||||
dlsch0_harq->pmi_alloc,
|
dlsch0_harq->pmi_alloc,
|
||||||
@@ -290,10 +290,11 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
|||||||
subframe,
|
subframe,
|
||||||
ue->high_speed_flag,
|
ue->high_speed_flag,
|
||||||
frame_parms);
|
frame_parms);
|
||||||
|
|
||||||
if (rx_type==rx_IC_single_stream) {
|
if (rx_type==rx_IC_single_stream) {
|
||||||
if (eNB_id_i<ue->n_connected_eNB)
|
if (eNB_id_i<ue->n_connected_eNB)
|
||||||
nb_rb = dlsch_extract_rbs_single(common_vars->rxdataF,
|
nb_rb = dlsch_extract_rbs_single(common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF,
|
||||||
common_vars->dl_ch_estimates[eNB_id_i],
|
common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id_i],
|
||||||
pdsch_vars[eNB_id_i]->rxdataF_ext,
|
pdsch_vars[eNB_id_i]->rxdataF_ext,
|
||||||
pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
|
pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
|
||||||
dlsch0_harq->pmi_alloc,
|
dlsch0_harq->pmi_alloc,
|
||||||
@@ -304,8 +305,8 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
|||||||
ue->high_speed_flag,
|
ue->high_speed_flag,
|
||||||
frame_parms);
|
frame_parms);
|
||||||
else
|
else
|
||||||
nb_rb = dlsch_extract_rbs_single(common_vars->rxdataF,
|
nb_rb = dlsch_extract_rbs_single(common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF,
|
||||||
common_vars->dl_ch_estimates[eNB_id],
|
common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id],
|
||||||
pdsch_vars[eNB_id_i]->rxdataF_ext,
|
pdsch_vars[eNB_id_i]->rxdataF_ext,
|
||||||
pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
|
pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
|
||||||
dlsch0_harq->pmi_alloc,
|
dlsch0_harq->pmi_alloc,
|
||||||
@@ -317,7 +318,7 @@ int rx_pdsch(PHY_VARS_UE *ue,
|
|||||||
frame_parms);
|
frame_parms);
|
||||||
}
|
}
|
||||||
} else if (beamforming_mode==7) { //else if beamforming_mode == 7
|
} else if (beamforming_mode==7) { //else if beamforming_mode == 7
|
||||||
nb_rb = dlsch_extract_rbs_TM7(common_vars->rxdataF,
|
nb_rb = dlsch_extract_rbs_TM7(common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF,
|
||||||
pdsch_vars[eNB_id]->dl_bf_ch_estimates,
|
pdsch_vars[eNB_id]->dl_bf_ch_estimates,
|
||||||
pdsch_vars[eNB_id]->rxdataF_ext,
|
pdsch_vars[eNB_id]->rxdataF_ext,
|
||||||
pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext,
|
pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext,
|
||||||
@@ -5793,59 +5794,59 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF,
|
|||||||
|
|
||||||
#ifdef USER_MODE
|
#ifdef USER_MODE
|
||||||
|
|
||||||
void dump_dlsch2(PHY_VARS_UE *ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword, int round, unsigned char harq_pid)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
void dump_dlsch2(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t subframe,uint16_t coded_bits_per_codeword,int round)
|
||||||
|
{
|
||||||
unsigned int nsymb = (ue->frame_parms.Ncp == 0) ? 14 : 12;
|
unsigned int nsymb = (ue->frame_parms.Ncp == 0) ? 14 : 12;
|
||||||
char fname[32],vname[32];
|
char fname[32],vname[32];
|
||||||
int N_RB_DL=ue->frame_parms.N_RB_DL;
|
int N_RB_DL=ue->frame_parms.N_RB_DL;
|
||||||
|
|
||||||
sprintf(fname,"dlsch%d_rxF_r%d_ext0.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_rxF_r%d_ext0.m",eNB_id,round);
|
||||||
sprintf(vname,"dl%d_rxF_r%d_ext0",eNB_id,round);
|
sprintf(vname,"dl%d_rxF_r%d_ext0",eNB_id,round);
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->rxdataF_ext[0],12*N_RB_DL*nsymb,1,1);
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_ext[0],12*N_RB_DL*nsymb,1,1);
|
||||||
|
|
||||||
if (ue->frame_parms.nb_antennas_rx >1) {
|
if (ue->frame_parms.nb_antennas_rx >1) {
|
||||||
sprintf(fname,"dlsch%d_rxF_r%d_ext1.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_rxF_r%d_ext1.m",eNB_id,round);
|
||||||
sprintf(vname,"dl%d_rxF_r%d_ext1",eNB_id,round);
|
sprintf(vname,"dl%d_rxF_r%d_ext1",eNB_id,round);
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->rxdataF_ext[1],12*N_RB_DL*nsymb,1,1);
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_ext[1],12*N_RB_DL*nsymb,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(fname,"dlsch%d_ch_r%d_ext00.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_ch_r%d_ext00.m",eNB_id,round);
|
||||||
sprintf(vname,"dl%d_ch_r%d_ext00",eNB_id,round);
|
sprintf(vname,"dl%d_ch_r%d_ext00",eNB_id,round);
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_estimates_ext[0],12*N_RB_DL*nsymb,1,1);
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_estimates_ext[0],12*N_RB_DL*nsymb,1,1);
|
||||||
|
|
||||||
if (ue->transmission_mode[eNB_id]==7){
|
if (ue->transmission_mode[eNB_id]==7){
|
||||||
sprintf(fname,"dlsch%d_bf_ch_r%d.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_bf_ch_r%d.m",eNB_id,round);
|
||||||
sprintf(vname,"dl%d_bf_ch_r%d",eNB_id,round);
|
sprintf(vname,"dl%d_bf_ch_r%d",eNB_id,round);
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_bf_ch_estimates[0],512*nsymb,1,1);
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->dl_bf_ch_estimates[0],512*nsymb,1,1);
|
||||||
//write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates[0],512,1,1);
|
//write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates[0],512,1,1);
|
||||||
|
|
||||||
sprintf(fname,"dlsch%d_bf_ch_r%d_ext00.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_bf_ch_r%d_ext00.m",eNB_id,round);
|
||||||
sprintf(vname,"dl%d_bf_ch_r%d_ext00",eNB_id,round);
|
sprintf(vname,"dl%d_bf_ch_r%d_ext00",eNB_id,round);
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext[0],12*N_RB_DL*nsymb,1,1);
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->dl_bf_ch_estimates_ext[0],12*N_RB_DL*nsymb,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ue->frame_parms.nb_antennas_rx == 2) {
|
if (ue->frame_parms.nb_antennas_rx == 2) {
|
||||||
sprintf(fname,"dlsch%d_ch_r%d_ext01.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_ch_r%d_ext01.m",eNB_id,round);
|
||||||
sprintf(vname,"dl%d_ch_r%d_ext01",eNB_id,round);
|
sprintf(vname,"dl%d_ch_r%d_ext01",eNB_id,round);
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1);
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ue->frame_parms.nb_antenna_ports_eNB == 2) {
|
if (ue->frame_parms.nb_antenna_ports_eNB == 2) {
|
||||||
sprintf(fname,"dlsch%d_ch_r%d_ext10.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_ch_r%d_ext10.m",eNB_id,round);
|
||||||
sprintf(vname,"dl%d_ch_r%d_ext10",eNB_id,round);
|
sprintf(vname,"dl%d_ch_r%d_ext10",eNB_id,round);
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb,1,1);
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb,1,1);
|
||||||
|
|
||||||
if (ue->frame_parms.nb_antennas_rx == 2) {
|
if (ue->frame_parms.nb_antennas_rx == 2) {
|
||||||
sprintf(fname,"dlsch%d_ch_r%d_ext11.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_ch_r%d_ext11.m",eNB_id,round);
|
||||||
sprintf(vname,"dl%d_ch_r%d_ext11",eNB_id,round);
|
sprintf(vname,"dl%d_ch_r%d_ext11",eNB_id,round);
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb,1,1);
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_estimates_ext[3],12*N_RB_DL*nsymb,1,1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(fname,"dlsch%d_rxF_r%d_uespec0.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_rxF_r%d_uespec0.m",eNB_id,round);
|
||||||
sprintf(vname,"dl%d_rxF_r%d_uespec0",eNB_id,round);
|
sprintf(vname,"dl%d_rxF_r%d_uespec0",eNB_id,round);
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->rxdataF_uespec_pilots[0],12*N_RB_DL,1,1);
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_uespec_pilots[0],12*N_RB_DL,1,1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
write_output("dlsch%d_ch_ext01.m","dl01_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1);
|
write_output("dlsch%d_ch_ext01.m","dl01_ch0_ext",pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1);
|
||||||
@@ -5854,36 +5855,32 @@ void dump_dlsch2(PHY_VARS_UE *ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword
|
|||||||
*/
|
*/
|
||||||
sprintf(fname,"dlsch%d_r%d_rho.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_r%d_rho.m",eNB_id,round);
|
||||||
sprintf(vname,"dl_rho_r%d_%d",eNB_id,round);
|
sprintf(vname,"dl_rho_r%d_%d",eNB_id,round);
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_rho_ext[harq_pid][round][0],12*N_RB_DL*nsymb,1,1);
|
|
||||||
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[round][0],12*N_RB_DL*nsymb,1,1);
|
||||||
|
|
||||||
sprintf(fname,"dlsch%d_r%d_rho2.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_r%d_rho2.m",eNB_id,round);
|
||||||
sprintf(vname,"dl_rho2_r%d_%d",eNB_id,round);
|
sprintf(vname,"dl_rho2_r%d_%d",eNB_id,round);
|
||||||
|
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_rho2_ext[0],12*N_RB_DL*nsymb,1,1);
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[0],12*N_RB_DL*nsymb,1,1);
|
||||||
|
|
||||||
// sprintf(fname,"dlsch%d_r%d_aver_chan_1.m",eNB_id,round);
|
|
||||||
// sprintf(vname,"dl_aver_ch1_r%d_%d",eNB_id,round);
|
|
||||||
// write_output(fname,vname,&avg_1[0],1,1,1);
|
|
||||||
|
|
||||||
sprintf(fname,"dlsch%d_rxF_r%d_comp0.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_rxF_r%d_comp0.m",eNB_id,round);
|
||||||
sprintf(vname,"dl%d_rxF_r%d_comp0",eNB_id,round);
|
sprintf(vname,"dl%d_rxF_r%d_comp0",eNB_id,round);
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->rxdataF_comp0[0],12*N_RB_DL*nsymb,1,1);
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp0[0],12*N_RB_DL*nsymb,1,1);
|
||||||
if (ue->frame_parms.nb_antenna_ports_eNB == 2) {
|
if (ue->frame_parms.nb_antenna_ports_eNB == 2) {
|
||||||
sprintf(fname,"dlsch%d_rxF_r%d_comp1.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_rxF_r%d_comp1.m",eNB_id,round);
|
||||||
sprintf(vname,"dl%d_rxF_r%d_comp1",eNB_id,round);
|
sprintf(vname,"dl%d_rxF_r%d_comp1",eNB_id,round);
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][0],12*N_RB_DL*nsymb,1,1);
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[0][round],12*N_RB_DL*nsymb,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(fname,"dlsch%d_rxF_r%d_llr.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_rxF_r%d_llr.m",eNB_id,round);
|
||||||
sprintf(vname,"dl%d_r%d_llr",eNB_id,round);
|
sprintf(vname,"dl%d_r%d_llr",eNB_id,round);
|
||||||
printf ("coded bits per cw %d \n",coded_bits_per_codeword);
|
write_output(fname,vname, ue->pdsch_vars[subframe&0x1][eNB_id]->llr[0],coded_bits_per_codeword,1,0);
|
||||||
write_output(fname,vname, ue->pdsch_vars[eNB_id]->llr[0],coded_bits_per_codeword,1,0);
|
|
||||||
sprintf(fname,"dlsch%d_r%d_mag1.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_r%d_mag1.m",eNB_id,round);
|
||||||
sprintf(vname,"dl%d_r%d_mag1",eNB_id,round);
|
sprintf(vname,"dl%d_r%d_mag1",eNB_id,round);
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_mag0[0],12*N_RB_DL*nsymb,1,1);
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_mag0[0],12*N_RB_DL*nsymb,1,1);
|
||||||
sprintf(fname,"dlsch%d_r%d_mag2.m",eNB_id,round);
|
sprintf(fname,"dlsch%d_r%d_mag2.m",eNB_id,round);
|
||||||
sprintf(vname,"dl%d_r%d_mag2",eNB_id,round);
|
sprintf(vname,"dl%d_r%d_mag2",eNB_id,round);
|
||||||
write_output(fname,vname,ue->pdsch_vars[eNB_id]->dl_ch_magb0[0],12*N_RB_DL*nsymb,1,1);
|
write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_magb0[0],12*N_RB_DL*nsymb,1,1);
|
||||||
|
|
||||||
// printf("log2_maxh = %d\n",ue->pdsch_vars[eNB_id]->log2_maxh);
|
// printf("log2_maxh = %d\n",ue->pdsch_vars[eNB_id]->log2_maxh);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode)
|
|||||||
lte_ue_measurements(ue,
|
lte_ue_measurements(ue,
|
||||||
ue->rx_offset,
|
ue->rx_offset,
|
||||||
0,
|
0,
|
||||||
0);
|
0,0);
|
||||||
|
|
||||||
|
|
||||||
if (ue->frame_parms.frame_type == TDD) {
|
if (ue->frame_parms.frame_type == TDD) {
|
||||||
|
|||||||
@@ -900,8 +900,8 @@ uint16_t rx_pbch(LTE_UE_COMMON *lte_ue_common_vars,
|
|||||||
#ifdef DEBUG_PBCH
|
#ifdef DEBUG_PBCH
|
||||||
msg("[PBCH] starting extract\n");
|
msg("[PBCH] starting extract\n");
|
||||||
#endif
|
#endif
|
||||||
pbch_extract(lte_ue_common_vars->rxdataF,
|
pbch_extract(lte_ue_common_vars->common_vars_rx_data_per_thread[0].rxdataF,
|
||||||
lte_ue_common_vars->dl_ch_estimates[eNB_id],
|
lte_ue_common_vars->common_vars_rx_data_per_thread[0].dl_ch_estimates[eNB_id],
|
||||||
lte_ue_pbch_vars->rxdataF_ext,
|
lte_ue_pbch_vars->rxdataF_ext,
|
||||||
lte_ue_pbch_vars->dl_ch_estimates_ext,
|
lte_ue_pbch_vars->dl_ch_estimates_ext,
|
||||||
symbol,
|
symbol,
|
||||||
|
|||||||
@@ -1395,11 +1395,11 @@ void rx_phich(PHY_VARS_UE *ue,
|
|||||||
//#ifdef DEBUG_PHICH
|
//#ifdef DEBUG_PHICH
|
||||||
LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d PHICH, received NAK (%d) nseq %d, ngroup %d (Mlimit %d)\n",
|
LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d PHICH, received NAK (%d) nseq %d, ngroup %d (Mlimit %d)\n",
|
||||||
ue->Mod_id,harq_pid,
|
ue->Mod_id,harq_pid,
|
||||||
proc->frame_rx,
|
proc->frame_rx%1024,
|
||||||
subframe,
|
subframe,
|
||||||
HI16,
|
HI16,
|
||||||
nseq_PHICH,
|
nseq_PHICH,
|
||||||
ngroup_PHICH,
|
ngroup_PHICH,ulsch->harq_processes[harq_pid]->round+1,
|
||||||
ulsch->Mlimit);
|
ulsch->Mlimit);
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
@@ -1450,7 +1450,7 @@ void rx_phich(PHY_VARS_UE *ue,
|
|||||||
//#ifdef PHICH_DEBUG
|
//#ifdef PHICH_DEBUG
|
||||||
LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d PHICH, received ACK (%d) nseq %d, ngroup %d\n\n",
|
LOG_D(PHY,"[UE %d][PUSCH %d] Frame %d subframe %d PHICH, received ACK (%d) nseq %d, ngroup %d\n\n",
|
||||||
ue->Mod_id,harq_pid,
|
ue->Mod_id,harq_pid,
|
||||||
proc->frame_rx,
|
proc->frame_rx%1024,
|
||||||
subframe, HI16,
|
subframe, HI16,
|
||||||
nseq_PHICH,ngroup_PHICH);
|
nseq_PHICH,ngroup_PHICH);
|
||||||
//#endif
|
//#endif
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ void dump_mch(PHY_VARS_UE *ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword,in
|
|||||||
write_output(fname,vname,ue->pdsch_vars_MCH[eNB_id]->dl_ch_magb0[0],12*N_RB_DL*nsymb_pmch,1,1);
|
write_output(fname,vname,ue->pdsch_vars_MCH[eNB_id]->dl_ch_magb0[0],12*N_RB_DL*nsymb_pmch,1,1);
|
||||||
|
|
||||||
write_output("mch00_ch0.m","pmch00_ch0",
|
write_output("mch00_ch0.m","pmch00_ch0",
|
||||||
&(ue->common_vars.dl_ch_estimates[eNB_id][0][0]),
|
&(ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][0][0]),
|
||||||
ue->frame_parms.ofdm_symbol_size*12,1,1);
|
ue->frame_parms.ofdm_symbol_size*12,1,1);
|
||||||
|
|
||||||
write_output("rxsig_mch.m","rxs_mch",
|
write_output("rxsig_mch.m","rxs_mch",
|
||||||
@@ -969,8 +969,8 @@ int rx_pmch(PHY_VARS_UE *ue,
|
|||||||
|
|
||||||
//printf("*********************mch: symbol %d\n",symbol);
|
//printf("*********************mch: symbol %d\n",symbol);
|
||||||
|
|
||||||
mch_extract_rbs(common_vars->rxdataF,
|
mch_extract_rbs(common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF,
|
||||||
common_vars->dl_ch_estimates[eNB_id],
|
common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id],
|
||||||
pdsch_vars[eNB_id]->rxdataF_ext,
|
pdsch_vars[eNB_id]->rxdataF_ext,
|
||||||
pdsch_vars[eNB_id]->dl_ch_estimates_ext,
|
pdsch_vars[eNB_id]->dl_ch_estimates_ext,
|
||||||
symbol,
|
symbol,
|
||||||
|
|||||||
@@ -1295,7 +1295,8 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
|
|||||||
*/
|
*/
|
||||||
int pss_sss_extract(PHY_VARS_UE *phy_vars_ue,
|
int pss_sss_extract(PHY_VARS_UE *phy_vars_ue,
|
||||||
int32_t pss_ext[4][72],
|
int32_t pss_ext[4][72],
|
||||||
int32_t sss_ext[4][72]);
|
int32_t sss_ext[4][72],
|
||||||
|
uint8_t subframe);
|
||||||
|
|
||||||
/*! \brief Extract only PSS resource elements
|
/*! \brief Extract only PSS resource elements
|
||||||
@param phy_vars_ue Pointer to UE variables
|
@param phy_vars_ue Pointer to UE variables
|
||||||
@@ -1658,7 +1659,8 @@ int32_t generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue,
|
|||||||
UE_rxtx_proc_t *proc,
|
UE_rxtx_proc_t *proc,
|
||||||
uint8_t eNB_id);
|
uint8_t eNB_id);
|
||||||
double sinr_eff_cqi_calc(PHY_VARS_UE *phy_vars_ue,
|
double sinr_eff_cqi_calc(PHY_VARS_UE *phy_vars_ue,
|
||||||
uint8_t eNB_id);
|
uint8_t eNB_id,
|
||||||
|
uint8_t subframe);
|
||||||
|
|
||||||
uint8_t sinr2cqi(double sinr,uint8_t trans_mode);
|
uint8_t sinr2cqi(double sinr,uint8_t trans_mode);
|
||||||
|
|
||||||
|
|||||||
@@ -149,7 +149,8 @@ int pss_ch_est(PHY_VARS_UE *ue,
|
|||||||
int _do_pss_sss_extract(PHY_VARS_UE *ue,
|
int _do_pss_sss_extract(PHY_VARS_UE *ue,
|
||||||
int32_t pss_ext[4][72],
|
int32_t pss_ext[4][72],
|
||||||
int32_t sss_ext[4][72],
|
int32_t sss_ext[4][72],
|
||||||
uint8_t doPss, uint8_t doSss) // add flag to indicate extracting only PSS, only SSS, or both
|
uint8_t doPss, uint8_t doSss,
|
||||||
|
uint8_t subframe) // add flag to indicate extracting only PSS, only SSS, or both
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
@@ -163,33 +164,53 @@ int _do_pss_sss_extract(PHY_VARS_UE *ue,
|
|||||||
int rx_offset = frame_parms->ofdm_symbol_size-3*12;
|
int rx_offset = frame_parms->ofdm_symbol_size-3*12;
|
||||||
uint8_t pss_symb,sss_symb;
|
uint8_t pss_symb,sss_symb;
|
||||||
|
|
||||||
int32_t **rxdataF = ue->common_vars.rxdataF;
|
int32_t **rxdataF;
|
||||||
|
|
||||||
|
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||||
|
|
||||||
if (frame_parms->frame_type == FDD) {
|
if (frame_parms->frame_type == FDD) {
|
||||||
pss_symb = 6-frame_parms->Ncp;
|
pss_symb = 6-frame_parms->Ncp;
|
||||||
sss_symb = pss_symb-1;
|
sss_symb = pss_symb-1;
|
||||||
|
|
||||||
|
rxdataF = ue->common_vars.common_vars_rx_data_per_thread[(subframe&0x1)].rxdataF;
|
||||||
|
pss_rxF = &rxdataF[aarx][(rx_offset + (pss_symb*(frame_parms->ofdm_symbol_size)))];
|
||||||
|
sss_rxF = &rxdataF[aarx][(rx_offset + (sss_symb*(frame_parms->ofdm_symbol_size)))];
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
pss_symb = 2;
|
pss_symb = 2;
|
||||||
sss_symb = frame_parms->symbols_per_tti-1;
|
sss_symb = frame_parms->symbols_per_tti-1;
|
||||||
|
|
||||||
|
rxdataF = ue->common_vars.common_vars_rx_data_per_thread[(subframe&0x1)].rxdataF;
|
||||||
|
sss_rxF = &rxdataF[aarx][(rx_offset + (sss_symb*(frame_parms->ofdm_symbol_size)))];
|
||||||
|
|
||||||
|
rxdataF = ue->common_vars.common_vars_rx_data_per_thread[((subframe+1)&0x1)].rxdataF;
|
||||||
|
pss_rxF = &rxdataF[aarx][(rx_offset + (pss_symb*(frame_parms->ofdm_symbol_size)))];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
|
||||||
|
|
||||||
//printf("extract_rbs: symbol_mod=%d, rx_offset=%d, ch_offset=%d\n",symbol_mod,
|
//printf("extract_rbs: symbol_mod=%d, rx_offset=%d, ch_offset=%d\n",symbol_mod,
|
||||||
// (rx_offset + (symbol*(frame_parms->ofdm_symbol_size)))*2,
|
// (rx_offset + (symbol*(frame_parms->ofdm_symbol_size)))*2,
|
||||||
// LTE_CE_OFFSET+ch_offset+(symbol_mod*(frame_parms->ofdm_symbol_size)));
|
// LTE_CE_OFFSET+ch_offset+(symbol_mod*(frame_parms->ofdm_symbol_size)));
|
||||||
|
|
||||||
pss_rxF = &rxdataF[aarx][(rx_offset + (pss_symb*(frame_parms->ofdm_symbol_size)))];
|
|
||||||
sss_rxF = &rxdataF[aarx][(rx_offset + (sss_symb*(frame_parms->ofdm_symbol_size)))];
|
|
||||||
pss_rxF_ext = &pss_ext[aarx][0];
|
pss_rxF_ext = &pss_ext[aarx][0];
|
||||||
sss_rxF_ext = &sss_ext[aarx][0];
|
sss_rxF_ext = &sss_ext[aarx][0];
|
||||||
|
|
||||||
for (rb=0; rb<nb_rb; rb++) {
|
for (rb=0; rb<nb_rb; rb++) {
|
||||||
// skip DC carrier
|
// skip DC carrier
|
||||||
if (rb==3) {
|
if (rb==3) {
|
||||||
|
if(frame_parms->frame_type == FDD)
|
||||||
|
{
|
||||||
sss_rxF = &rxdataF[aarx][(1 + (sss_symb*(frame_parms->ofdm_symbol_size)))];
|
sss_rxF = &rxdataF[aarx][(1 + (sss_symb*(frame_parms->ofdm_symbol_size)))];
|
||||||
pss_rxF = &rxdataF[aarx][(1 + (pss_symb*(frame_parms->ofdm_symbol_size)))];
|
pss_rxF = &rxdataF[aarx][(1 + (pss_symb*(frame_parms->ofdm_symbol_size)))];
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rxdataF = ue->common_vars.common_vars_rx_data_per_thread[(subframe&0x1)].rxdataF;
|
||||||
|
sss_rxF = &rxdataF[aarx][(1 + (sss_symb*(frame_parms->ofdm_symbol_size)))];
|
||||||
|
|
||||||
|
rxdataF = ue->common_vars.common_vars_rx_data_per_thread[((subframe+1)&0x1)].rxdataF;
|
||||||
|
pss_rxF = &rxdataF[aarx][(1 + (pss_symb*(frame_parms->ofdm_symbol_size)))];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (i=0; i<12; i++) {
|
for (i=0; i<12; i++) {
|
||||||
if (doPss) {pss_rxF_ext[i]=pss_rxF[i];}
|
if (doPss) {pss_rxF_ext[i]=pss_rxF[i];}
|
||||||
@@ -209,16 +230,17 @@ int _do_pss_sss_extract(PHY_VARS_UE *ue,
|
|||||||
|
|
||||||
int pss_sss_extract(PHY_VARS_UE *phy_vars_ue,
|
int pss_sss_extract(PHY_VARS_UE *phy_vars_ue,
|
||||||
int32_t pss_ext[4][72],
|
int32_t pss_ext[4][72],
|
||||||
int32_t sss_ext[4][72])
|
int32_t sss_ext[4][72],
|
||||||
|
uint8_t subframe)
|
||||||
{
|
{
|
||||||
return _do_pss_sss_extract(phy_vars_ue, pss_ext, sss_ext, 1 /* doPss */, 1 /* doSss */);
|
return _do_pss_sss_extract(phy_vars_ue, pss_ext, sss_ext, 1 /* doPss */, 1 /* doSss */, subframe);
|
||||||
}
|
}
|
||||||
|
|
||||||
int pss_only_extract(PHY_VARS_UE *phy_vars_ue,
|
int pss_only_extract(PHY_VARS_UE *phy_vars_ue,
|
||||||
int32_t pss_ext[4][72])
|
int32_t pss_ext[4][72])
|
||||||
{
|
{
|
||||||
static int32_t dummy[4][72];
|
static int32_t dummy[4][72];
|
||||||
return _do_pss_sss_extract(phy_vars_ue, pss_ext, dummy, 1 /* doPss */, 0 /* doSss */);
|
return _do_pss_sss_extract(phy_vars_ue, pss_ext, dummy, 1 /* doPss */, 0 /* doSss */, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -226,7 +248,7 @@ int sss_only_extract(PHY_VARS_UE *phy_vars_ue,
|
|||||||
int32_t sss_ext[4][72])
|
int32_t sss_ext[4][72])
|
||||||
{
|
{
|
||||||
static int32_t dummy[4][72];
|
static int32_t dummy[4][72];
|
||||||
return _do_pss_sss_extract(phy_vars_ue, dummy, sss_ext, 0 /* doPss */, 1 /* doSss */);
|
return _do_pss_sss_extract(phy_vars_ue, dummy, sss_ext, 0 /* doPss */, 1 /* doSss */, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -295,10 +317,10 @@ int rx_sss(PHY_VARS_UE *ue,int32_t *tot_metric,uint8_t *flip_max,uint8_t *phase_
|
|||||||
0,
|
0,
|
||||||
1);
|
1);
|
||||||
}
|
}
|
||||||
|
// pss sss extract for subframe 0
|
||||||
pss_sss_extract(ue,
|
pss_sss_extract(ue,
|
||||||
pss_ext,
|
pss_ext,
|
||||||
sss0_ext);
|
sss0_ext,0);
|
||||||
/*
|
/*
|
||||||
write_output("rxsig0.m","rxs0",&ue->common_vars.rxdata[0][0],ue->frame_parms.samples_per_tti,1,1);
|
write_output("rxsig0.m","rxs0",&ue->common_vars.rxdata[0][0],ue->frame_parms.samples_per_tti,1,1);
|
||||||
write_output("rxdataF0.m","rxF0",&ue->common_vars.rxdataF[0][0],2*14*ue->frame_parms.ofdm_symbol_size,2,1);
|
write_output("rxdataF0.m","rxF0",&ue->common_vars.rxdataF[0][0],2*14*ue->frame_parms.ofdm_symbol_size,2,1);
|
||||||
@@ -346,9 +368,10 @@ int rx_sss(PHY_VARS_UE *ue,int32_t *tot_metric,uint8_t *flip_max,uint8_t *phase_
|
|||||||
1);
|
1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pss sss extract for subframe 5
|
||||||
pss_sss_extract(ue,
|
pss_sss_extract(ue,
|
||||||
pss_ext,
|
pss_ext,
|
||||||
sss5_ext);
|
sss5_ext,5);
|
||||||
|
|
||||||
// write_output("sss5_ext0.m","sss5ext0",sss5_ext,72,1,1);
|
// write_output("sss5_ext0.m","sss5ext0",sss5_ext,72,1,1);
|
||||||
// get conjugated channel estimate from PSS (symbol 6), H* = R* \cdot PSS
|
// get conjugated channel estimate from PSS (symbol 6), H* = R* \cdot PSS
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
|
|||||||
#else
|
#else
|
||||||
// on AVX2 need 256-bit alignment
|
// on AVX2 need 256-bit alignment
|
||||||
idft((int16_t *)&input[i*fftsize],
|
idft((int16_t *)&input[i*fftsize],
|
||||||
(fftsize<=512) ? (int16_t *)temp : (int16_t *)&output[(i*fftsize) + ((1+i)*nb_prefix_samples)],
|
(int16_t *)temp,
|
||||||
1);
|
1);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -163,8 +163,6 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
|
|||||||
|
|
||||||
#ifndef __AVX2__
|
#ifndef __AVX2__
|
||||||
if (fftsize==128)
|
if (fftsize==128)
|
||||||
#else
|
|
||||||
if (fftsize<=512)
|
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
for (j=0; j<fftsize ; j++) {
|
for (j=0; j<fftsize ; j++) {
|
||||||
|
|||||||
@@ -109,18 +109,12 @@ int slot_fep(PHY_VARS_UE *ue,
|
|||||||
|
|
||||||
|
|
||||||
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
||||||
memset(&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],0,frame_parms->ofdm_symbol_size*sizeof(int));
|
memset(&common_vars->common_vars_rx_data_per_thread[(Ns>>1)&0x1].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],0,frame_parms->ofdm_symbol_size*sizeof(int));
|
||||||
|
|
||||||
rx_offset = sample_offset + slot_offset + nb_prefix_samples0 + subframe_offset - SOFFSET;
|
rx_offset = sample_offset + slot_offset + nb_prefix_samples0 + subframe_offset - SOFFSET;
|
||||||
// Align with 256 bit
|
// Align with 256 bit
|
||||||
// rx_offset = rx_offset&0xfffffff8;
|
// rx_offset = rx_offset&0xfffffff8;
|
||||||
|
|
||||||
#ifdef DEBUG_FEP
|
|
||||||
// if (ue->frame <100)
|
|
||||||
printf("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", ue->proc.proc_rxtx[(Ns>>1)&1].frame_rx,Ns, symbol,
|
|
||||||
nb_prefix_samples,nb_prefix_samples0,slot_offset,subframe_offset,sample_offset,rx_offset);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (l==0) {
|
if (l==0) {
|
||||||
|
|
||||||
if (rx_offset > (frame_length_samples - frame_parms->ofdm_symbol_size))
|
if (rx_offset > (frame_length_samples - frame_parms->ofdm_symbol_size))
|
||||||
@@ -133,12 +127,12 @@ int slot_fep(PHY_VARS_UE *ue,
|
|||||||
(void *)&common_vars->rxdata[aa][rx_offset % frame_length_samples],
|
(void *)&common_vars->rxdata[aa][rx_offset % frame_length_samples],
|
||||||
frame_parms->ofdm_symbol_size*sizeof(int));
|
frame_parms->ofdm_symbol_size*sizeof(int));
|
||||||
dft((int16_t *)tmp_dft_in,
|
dft((int16_t *)tmp_dft_in,
|
||||||
(int16_t *)&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
(int16_t *)&common_vars->common_vars_rx_data_per_thread[(Ns>>1)&0x1].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
||||||
} else { // use dft input from RX buffer directly
|
} else { // use dft input from RX buffer directly
|
||||||
start_meas(&ue->rx_dft_stats);
|
start_meas(&ue->rx_dft_stats);
|
||||||
|
|
||||||
dft((int16_t *)&common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
|
dft((int16_t *)&common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
|
||||||
(int16_t *)&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
(int16_t *)&common_vars->common_vars_rx_data_per_thread[(Ns>>1)&0x1].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
||||||
stop_meas(&ue->rx_dft_stats);
|
stop_meas(&ue->rx_dft_stats);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -148,8 +142,8 @@ int slot_fep(PHY_VARS_UE *ue,
|
|||||||
|
|
||||||
#ifdef DEBUG_FEP
|
#ifdef DEBUG_FEP
|
||||||
// if (ue->frame <100)
|
// if (ue->frame <100)
|
||||||
printf("slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d\n", ue->proc.proc_rxtx[(Ns>>1)&1].frame_rx,Ns, symbol,
|
LOG_I(PHY,"slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d, frame_length_samples %d\n", ue->proc.proc_rxtx[(Ns>>1)&1].frame_rx,Ns, symbol,
|
||||||
nb_prefix_samples,nb_prefix_samples0,slot_offset,subframe_offset,sample_offset,rx_offset);
|
nb_prefix_samples,nb_prefix_samples0,slot_offset,subframe_offset,sample_offset,rx_offset,frame_length_samples);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (rx_offset > (frame_length_samples - frame_parms->ofdm_symbol_size))
|
if (rx_offset > (frame_length_samples - frame_parms->ofdm_symbol_size))
|
||||||
@@ -164,11 +158,11 @@ int slot_fep(PHY_VARS_UE *ue,
|
|||||||
(void *)&common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
|
(void *)&common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
|
||||||
frame_parms->ofdm_symbol_size*sizeof(int));
|
frame_parms->ofdm_symbol_size*sizeof(int));
|
||||||
dft((int16_t *)tmp_dft_in,
|
dft((int16_t *)tmp_dft_in,
|
||||||
(int16_t *)&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
(int16_t *)&common_vars->common_vars_rx_data_per_thread[(Ns>>1)&0x1].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
||||||
} else { // use dft input from RX buffer directly
|
} else { // use dft input from RX buffer directly
|
||||||
|
|
||||||
dft((int16_t *)&common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
|
dft((int16_t *)&common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
|
||||||
(int16_t *)&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
(int16_t *)&common_vars->common_vars_rx_data_per_thread[(Ns>>1)&0x1].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
|
||||||
}
|
}
|
||||||
|
|
||||||
stop_meas(&ue->rx_dft_stats);
|
stop_meas(&ue->rx_dft_stats);
|
||||||
@@ -176,6 +170,10 @@ int slot_fep(PHY_VARS_UE *ue,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG_FEP
|
||||||
|
// if (ue->frame <100)
|
||||||
|
printf("slot_fep: frame %d: symbol %d rx_offset %d\n", ue->proc.proc_rxtx[(Ns>>1)&1].frame_rx, symbol,rx_offset);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ue->perfect_ce == 0) {
|
if (ue->perfect_ce == 0) {
|
||||||
@@ -211,7 +209,7 @@ int slot_fep(PHY_VARS_UE *ue,
|
|||||||
|
|
||||||
if (l==(4-frame_parms->Ncp)) {
|
if (l==(4-frame_parms->Ncp)) {
|
||||||
start_meas(&ue->dlsch_freq_offset_estimation_stats);
|
start_meas(&ue->dlsch_freq_offset_estimation_stats);
|
||||||
lte_est_freq_offset(common_vars->dl_ch_estimates[0],
|
lte_est_freq_offset(common_vars->common_vars_rx_data_per_thread[(Ns>>1)&0x1].dl_ch_estimates[0],
|
||||||
frame_parms,
|
frame_parms,
|
||||||
l,
|
l,
|
||||||
&common_vars->freq_offset,
|
&common_vars->freq_offset,
|
||||||
|
|||||||
@@ -109,14 +109,14 @@ int slot_fep_mbsfn(PHY_VARS_UE *ue,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
||||||
memset(&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*l],0,frame_parms->ofdm_symbol_size*sizeof(int));
|
memset(&common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aa][frame_parms->ofdm_symbol_size*l],0,frame_parms->ofdm_symbol_size*sizeof(int));
|
||||||
if (l==0) {
|
if (l==0) {
|
||||||
start_meas(&ue->rx_dft_stats);
|
start_meas(&ue->rx_dft_stats);
|
||||||
dft((int16_t *)&common_vars->rxdata[aa][(sample_offset +
|
dft((int16_t *)&common_vars->rxdata[aa][(sample_offset +
|
||||||
nb_prefix_samples0 +
|
nb_prefix_samples0 +
|
||||||
subframe_offset -
|
subframe_offset -
|
||||||
SOFFSET) % frame_length_samples],
|
SOFFSET) % frame_length_samples],
|
||||||
(int16_t *)&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*l],1);
|
(int16_t *)&common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aa][frame_parms->ofdm_symbol_size*l],1);
|
||||||
stop_meas(&ue->rx_dft_stats);
|
stop_meas(&ue->rx_dft_stats);
|
||||||
} else {
|
} else {
|
||||||
if ((sample_offset +
|
if ((sample_offset +
|
||||||
@@ -134,7 +134,7 @@ int slot_fep_mbsfn(PHY_VARS_UE *ue,
|
|||||||
(frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1) +
|
(frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1) +
|
||||||
subframe_offset-
|
subframe_offset-
|
||||||
SOFFSET) % frame_length_samples],
|
SOFFSET) % frame_length_samples],
|
||||||
(int16_t *)&common_vars->rxdataF[aa][frame_parms->ofdm_symbol_size*l],1);
|
(int16_t *)&common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF[aa][frame_parms->ofdm_symbol_size*l],1);
|
||||||
stop_meas(&ue->rx_dft_stats);
|
stop_meas(&ue->rx_dft_stats);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -559,15 +559,15 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
|
|||||||
bit_pdcch = (float*) calloc(12*frame_parms->N_RB_DL*num_pdcch_symbols*2,sizeof(float));
|
bit_pdcch = (float*) calloc(12*frame_parms->N_RB_DL*num_pdcch_symbols*2,sizeof(float));
|
||||||
|
|
||||||
rxsig_t = (int16_t**) phy_vars_ue->common_vars.rxdata;
|
rxsig_t = (int16_t**) phy_vars_ue->common_vars.rxdata;
|
||||||
chest_t = (int16_t**) phy_vars_ue->common_vars.dl_ch_estimates_time[eNB_id];
|
chest_t = (int16_t**) phy_vars_ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates_time[eNB_id];
|
||||||
chest_f = (int16_t**) phy_vars_ue->common_vars.dl_ch_estimates[eNB_id];
|
chest_f = (int16_t**) phy_vars_ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id];
|
||||||
pbch_llr = (int8_t*) phy_vars_ue->pbch_vars[eNB_id]->llr;
|
pbch_llr = (int8_t*) phy_vars_ue->pbch_vars[eNB_id]->llr;
|
||||||
pbch_comp = (int16_t*) phy_vars_ue->pbch_vars[eNB_id]->rxdataF_comp[0];
|
pbch_comp = (int16_t*) phy_vars_ue->pbch_vars[eNB_id]->rxdataF_comp[0];
|
||||||
pdcch_llr = (int8_t*) phy_vars_ue->pdcch_vars[eNB_id]->llr;
|
pdcch_llr = (int8_t*) phy_vars_ue->pdcch_vars[eNB_id]->llr;
|
||||||
pdcch_comp = (int16_t*) phy_vars_ue->pdcch_vars[eNB_id]->rxdataF_comp[0];
|
pdcch_comp = (int16_t*) phy_vars_ue->pdcch_vars[eNB_id]->rxdataF_comp[0];
|
||||||
pdsch_llr = (int16_t*) phy_vars_ue->pdsch_vars[eNB_id]->llr[0]; // stream 0
|
pdsch_llr = (int16_t*) phy_vars_ue->pdsch_vars[subframe&0x1][eNB_id]->llr[0]; // stream 0
|
||||||
// pdsch_llr = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars_SI[eNB_id]->llr[0]; // stream 0
|
// pdsch_llr = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars_SI[eNB_id]->llr[0]; // stream 0
|
||||||
pdsch_comp = (int16_t*) phy_vars_ue->pdsch_vars[eNB_id]->rxdataF_comp0[0];
|
pdsch_comp = (int16_t*) phy_vars_ue->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp0[0];
|
||||||
|
|
||||||
// Received signal in time domain of receive antenna 0
|
// Received signal in time domain of receive antenna 0
|
||||||
if (rxsig_t != NULL) {
|
if (rxsig_t != NULL) {
|
||||||
|
|||||||
@@ -515,23 +515,23 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
|
|||||||
llr_pdcch = (float*) calloc(12*frame_parms->N_RB_DL*num_pdcch_symbols*2,sizeof(float)); // init to zero
|
llr_pdcch = (float*) calloc(12*frame_parms->N_RB_DL*num_pdcch_symbols*2,sizeof(float)); // init to zero
|
||||||
bit_pdcch = (float*) calloc(12*frame_parms->N_RB_DL*num_pdcch_symbols*2,sizeof(float));
|
bit_pdcch = (float*) calloc(12*frame_parms->N_RB_DL*num_pdcch_symbols*2,sizeof(float));
|
||||||
rxsig_t = (int16_t**) phy_vars_ue->common_vars.rxdata;
|
rxsig_t = (int16_t**) phy_vars_ue->common_vars.rxdata;
|
||||||
chest_t = (int16_t**) phy_vars_ue->common_vars.dl_ch_estimates_time[eNB_id];
|
chest_t = (int16_t**) phy_vars_ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates_time[eNB_id];
|
||||||
chest_f = (int16_t**) phy_vars_ue->common_vars.dl_ch_estimates[eNB_id];
|
chest_f = (int16_t**) phy_vars_ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id];
|
||||||
pbch_llr = (int8_t*) phy_vars_ue->pbch_vars[eNB_id]->llr;
|
pbch_llr = (int8_t*) phy_vars_ue->pbch_vars[eNB_id]->llr;
|
||||||
pbch_comp = (int16_t*) phy_vars_ue->pbch_vars[eNB_id]->rxdataF_comp[0];
|
pbch_comp = (int16_t*) phy_vars_ue->pbch_vars[eNB_id]->rxdataF_comp[0];
|
||||||
pdcch_llr = (int8_t*) phy_vars_ue->pdcch_vars[eNB_id]->llr;
|
pdcch_llr = (int8_t*) phy_vars_ue->pdcch_vars[eNB_id]->llr;
|
||||||
pdcch_comp = (int16_t*) phy_vars_ue->pdcch_vars[eNB_id]->rxdataF_comp[0];
|
pdcch_comp = (int16_t*) phy_vars_ue->pdcch_vars[eNB_id]->rxdataF_comp[0];
|
||||||
pdsch_llr = (int16_t*) phy_vars_ue->pdsch_vars[eNB_id]->llr[0]; // stream 0
|
pdsch_llr = (int16_t*) phy_vars_ue->pdsch_vars[subframe&0x1][eNB_id]->llr[0]; // stream 0
|
||||||
pdsch_llr1 = (int16_t*) phy_vars_ue->pdsch_vars[eNB_id]->llr[1]; // stream 1
|
pdsch_llr1 = (int16_t*) phy_vars_ue->pdsch_vars[subframe&0x1][eNB_id]->llr[1]; // stream 1
|
||||||
pdsch_comp = (int16_t*) phy_vars_ue->pdsch_vars[eNB_id]->rxdataF_comp0[0];
|
pdsch_comp = (int16_t*) phy_vars_ue->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp0[0];
|
||||||
//pdsch_comp = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_ext[0];
|
//pdsch_comp = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[subframe&0x1][eNB_id]->rxdataF_ext[0];
|
||||||
//pdsch_comp1 = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_ext[1];
|
//pdsch_comp1 = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[subframe&0x1][eNB_id]->rxdataF_ext[1];
|
||||||
pdsch_comp1 = (int16_t*) (phy_vars_ue->pdsch_vars[eNB_id]->rxdataF_comp1[0][0])[0];
|
pdsch_comp1 = (int16_t*) (phy_vars_ue->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[0][0])[0];
|
||||||
//pdsch_comp1 = (int16_t*) (phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext[0][0])[0];
|
//pdsch_comp1 = (int16_t*) (phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext[0][0])[0];
|
||||||
pdsch_mag0 = (int16_t*) phy_vars_ue->pdsch_vars[eNB_id]->dl_ch_mag0[0];
|
pdsch_mag0 = (int16_t*) phy_vars_ue->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_mag0[0];
|
||||||
pdsch_mag1 = (int16_t*) (phy_vars_ue->pdsch_vars[eNB_id]->dl_ch_mag1[0][0])[0];
|
pdsch_mag1 = (int16_t*) (phy_vars_ue->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_mag1[0][0])[0];
|
||||||
pdsch_magb0 = (int16_t*) phy_vars_ue->pdsch_vars[eNB_id]->dl_ch_magb0[0];
|
pdsch_magb0 = (int16_t*) phy_vars_ue->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_magb0[0];
|
||||||
pdsch_magb1 = (int16_t*) (phy_vars_ue->pdsch_vars[eNB_id]->dl_ch_magb1[0][0])[0];
|
pdsch_magb1 = (int16_t*) (phy_vars_ue->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_magb1[0][0])[0];
|
||||||
fl_freeze_form(form->lte_phy_scope_ue);
|
fl_freeze_form(form->lte_phy_scope_ue);
|
||||||
// Received signal in time domain of receive antenna 0
|
// Received signal in time domain of receive antenna 0
|
||||||
if (rxsig_t != NULL) {
|
if (rxsig_t != NULL) {
|
||||||
|
|||||||
+2
-1
@@ -701,7 +701,7 @@ typedef struct {
|
|||||||
LTE_DL_FRAME_PARMS frame_parms_before_ho;
|
LTE_DL_FRAME_PARMS frame_parms_before_ho;
|
||||||
LTE_UE_COMMON common_vars;
|
LTE_UE_COMMON common_vars;
|
||||||
|
|
||||||
LTE_UE_PDSCH *pdsch_vars[NUMBER_OF_CONNECTED_eNB_MAX+1];
|
LTE_UE_PDSCH *pdsch_vars[2][NUMBER_OF_CONNECTED_eNB_MAX+1];
|
||||||
LTE_UE_PDSCH_FLP *pdsch_vars_flp[NUMBER_OF_CONNECTED_eNB_MAX+1];
|
LTE_UE_PDSCH_FLP *pdsch_vars_flp[NUMBER_OF_CONNECTED_eNB_MAX+1];
|
||||||
LTE_UE_PDSCH *pdsch_vars_SI[NUMBER_OF_CONNECTED_eNB_MAX+1];
|
LTE_UE_PDSCH *pdsch_vars_SI[NUMBER_OF_CONNECTED_eNB_MAX+1];
|
||||||
LTE_UE_PDSCH *pdsch_vars_ra[NUMBER_OF_CONNECTED_eNB_MAX+1];
|
LTE_UE_PDSCH *pdsch_vars_ra[NUMBER_OF_CONNECTED_eNB_MAX+1];
|
||||||
@@ -798,6 +798,7 @@ typedef struct {
|
|||||||
uint8_t prach_PreambleIndex;
|
uint8_t prach_PreambleIndex;
|
||||||
// uint8_t prach_timer;
|
// uint8_t prach_timer;
|
||||||
int rx_offset; /// Timing offset
|
int rx_offset; /// Timing offset
|
||||||
|
int rx_offset_diff; /// Timing adjustment for ofdm symbol0 on HW USRP
|
||||||
int timing_advance; ///timing advance signalled from eNB
|
int timing_advance; ///timing advance signalled from eNB
|
||||||
int hw_timing_advance;
|
int hw_timing_advance;
|
||||||
int N_TA_offset; ///timing offset used in TDD
|
int N_TA_offset; ///timing offset used in TDD
|
||||||
|
|||||||
@@ -784,6 +784,26 @@ typedef struct {
|
|||||||
#endif
|
#endif
|
||||||
} LTE_eNB_PUSCH;
|
} LTE_eNB_PUSCH;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
|
||||||
|
/// \brief Holds the received data in the frequency domain.
|
||||||
|
/// - first index: rx antenna [0..nb_antennas_rx[
|
||||||
|
/// - second index: symbol [0..28*ofdm_symbol_size[
|
||||||
|
int32_t **rxdataF;
|
||||||
|
|
||||||
|
/// \brief Hold the channel estimates in frequency domain.
|
||||||
|
/// - first index: eNB id [0..6] (hard coded)
|
||||||
|
/// - second index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
||||||
|
/// - third index: samples? [0..symbols_per_tti*(ofdm_symbol_size+LTE_CE_FILTER_LENGTH)[
|
||||||
|
int32_t **dl_ch_estimates[7];
|
||||||
|
|
||||||
|
/// \brief Hold the channel estimates in time domain (used for tracking).
|
||||||
|
/// - first index: eNB id [0..6] (hard coded)
|
||||||
|
/// - second index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
||||||
|
/// - third index: samples? [0..2*ofdm_symbol_size[
|
||||||
|
int32_t **dl_ch_estimates_time[7];
|
||||||
|
}LTE_UE_COMMON_PER_THREAD;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/// \brief Holds the transmit data in time domain.
|
/// \brief Holds the transmit data in time domain.
|
||||||
/// For IFFT_FPGA this points to the same memory as PHY_vars->tx_vars[a].TX_DMA_BUFFER.
|
/// For IFFT_FPGA this points to the same memory as PHY_vars->tx_vars[a].TX_DMA_BUFFER.
|
||||||
@@ -795,29 +815,15 @@ typedef struct {
|
|||||||
/// - first index: tx antenna [0..nb_antennas_tx[
|
/// - first index: tx antenna [0..nb_antennas_tx[
|
||||||
/// - second index: sample [0..FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX[
|
/// - second index: sample [0..FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX[
|
||||||
int32_t **txdataF;
|
int32_t **txdataF;
|
||||||
|
|
||||||
/// \brief Holds the received data in time domain.
|
/// \brief Holds the received data in time domain.
|
||||||
/// Should point to the same memory as PHY_vars->rx_vars[a].RX_DMA_BUFFER.
|
/// Should point to the same memory as PHY_vars->rx_vars[a].RX_DMA_BUFFER.
|
||||||
/// - first index: rx antenna [0..nb_antennas_rx[
|
/// - first index: rx antenna [0..nb_antennas_rx[
|
||||||
/// - second index: sample [0..FRAME_LENGTH_COMPLEX_SAMPLES+2048[
|
/// - second index: sample [0..FRAME_LENGTH_COMPLEX_SAMPLES+2048[
|
||||||
int32_t **rxdata;
|
int32_t **rxdata;
|
||||||
/// \brief Holds the received data in the frequency domain.
|
|
||||||
/// - first index: rx antenna [0..nb_antennas_rx[
|
LTE_UE_COMMON_PER_THREAD common_vars_rx_data_per_thread[2];
|
||||||
/// - second index: symbol [0..28*ofdm_symbol_size[
|
|
||||||
int32_t **rxdataF;
|
|
||||||
/// \brief ?.
|
|
||||||
/// - first index: rx antenna [0..nb_antennas_rx[
|
|
||||||
/// - second index: ? [0..20*ofdm_symbol_size*symbols_per_tti[
|
|
||||||
int32_t **rxdataF2;
|
|
||||||
/// \brief Hold the channel estimates in frequency domain.
|
|
||||||
/// - first index: eNB id [0..6] (hard coded)
|
|
||||||
/// - second index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
|
||||||
/// - third index: samples? [0..symbols_per_tti*(ofdm_symbol_size+LTE_CE_FILTER_LENGTH)[
|
|
||||||
int32_t **dl_ch_estimates[7];
|
|
||||||
/// \brief Hold the channel estimates in time domain (used for tracking).
|
|
||||||
/// - first index: eNB id [0..6] (hard coded)
|
|
||||||
/// - second index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
|
||||||
/// - third index: samples? [0..2*ofdm_symbol_size[
|
|
||||||
int32_t **dl_ch_estimates_time[7];
|
|
||||||
/// holds output of the sync correlator
|
/// holds output of the sync correlator
|
||||||
int32_t *sync_corr;
|
int32_t *sync_corr;
|
||||||
/// estimated frequency offset (in radians) for all subcarriers
|
/// estimated frequency offset (in radians) for all subcarriers
|
||||||
|
|||||||
@@ -509,7 +509,9 @@ int get_ue_active_harq_pid(uint8_t Mod_id,uint8_t CC_id,uint16_t rnti,int frame,
|
|||||||
void dump_dlsch(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe,uint8_t harq_pid);
|
void dump_dlsch(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe,uint8_t harq_pid);
|
||||||
void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe);
|
void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe);
|
||||||
void dump_dlsch_ra(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe);
|
void dump_dlsch_ra(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe);
|
||||||
void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword,int round, unsigned char harq_pid);
|
|
||||||
|
void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe, uint16_t coded_bits_per_codeword,int round);
|
||||||
|
|
||||||
|
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
|
|||||||
@@ -339,6 +339,9 @@ uint8_t get_reset_ack(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
|
|
||||||
o_ACK[0] = harq_ack[subframe_dl0].ack;
|
o_ACK[0] = harq_ack[subframe_dl0].ack;
|
||||||
status = harq_ack[subframe_dl0].send_harq_status;
|
status = harq_ack[subframe_dl0].send_harq_status;
|
||||||
|
|
||||||
|
if(do_reset)
|
||||||
|
harq_ack[subframe_dl0].send_harq_status = 0;
|
||||||
//printf("get_ack: Getting ACK/NAK for PDSCH (subframe %d) => %d\n",subframe_dl,o_ACK[0]);
|
//printf("get_ack: Getting ACK/NAK for PDSCH (subframe %d) => %d\n",subframe_dl,o_ACK[0]);
|
||||||
} else {
|
} else {
|
||||||
switch (frame_parms->tdd_config) {
|
switch (frame_parms->tdd_config) {
|
||||||
|
|||||||
@@ -99,20 +99,20 @@ void dump_dlsch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subf
|
|||||||
subframe,
|
subframe,
|
||||||
ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
|
ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
|
||||||
|
|
||||||
write_output("rxsigF0.m","rxsF0", ue->common_vars.rxdataF[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,2,1);
|
write_output("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,2,1);
|
||||||
write_output("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars[0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
|
write_output("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars[subframe&0x1][0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
|
||||||
write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars[0]->dl_ch_estimates_ext[0],300*nsymb,1,1);
|
write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars[subframe&0x1][0]->dl_ch_estimates_ext[0],300*nsymb,1,1);
|
||||||
/*
|
/*
|
||||||
write_output("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1);
|
write_output("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1);
|
||||||
write_output("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1);
|
write_output("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1);
|
||||||
write_output("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1);
|
write_output("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1);
|
||||||
write_output("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1);
|
write_output("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1);
|
||||||
*/
|
*/
|
||||||
write_output("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars[0]->rxdataF_comp0[0],300*12,1,1);
|
write_output("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars[subframe&0x1][0]->rxdataF_comp0[0],300*12,1,1);
|
||||||
write_output("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars[0]->llr[0],coded_bits_per_codeword,1,0);
|
write_output("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars[subframe&0x1][0]->llr[0],coded_bits_per_codeword,1,0);
|
||||||
|
|
||||||
write_output("dlsch_mag1.m","dlschmag1",ue->pdsch_vars[0]->dl_ch_mag0,300*12,1,1);
|
write_output("dlsch_mag1.m","dlschmag1",ue->pdsch_vars[subframe&0x1][0]->dl_ch_mag0,300*12,1,1);
|
||||||
write_output("dlsch_mag2.m","dlschmag2",ue->pdsch_vars[0]->dl_ch_magb0,300*12,1,1);
|
write_output("dlsch_mag2.m","dlschmag2",ue->pdsch_vars[subframe&0x1][0]->dl_ch_magb0,300*12,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dump_dlsch_SI(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe)
|
void dump_dlsch_SI(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe)
|
||||||
@@ -141,7 +141,7 @@ void dump_dlsch_SI(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t s
|
|||||||
|
|
||||||
write_output("rxsig0.m","rxs0", &ue->common_vars.rxdata[0][subframe*ue->frame_parms.samples_per_tti],ue->frame_parms.samples_per_tti,1,1);
|
write_output("rxsig0.m","rxs0", &ue->common_vars.rxdata[0][subframe*ue->frame_parms.samples_per_tti],ue->frame_parms.samples_per_tti,1,1);
|
||||||
|
|
||||||
write_output("rxsigF0.m","rxsF0", ue->common_vars.rxdataF[0],nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
|
write_output("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0],nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
|
||||||
write_output("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_SI[0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
|
write_output("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_SI[0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
|
||||||
write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_SI[0]->dl_ch_estimates_ext[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1);
|
write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_SI[0]->dl_ch_estimates_ext[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1);
|
||||||
/*
|
/*
|
||||||
@@ -242,7 +242,7 @@ void dump_dlsch_ra(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t s
|
|||||||
ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
|
ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
|
||||||
coded_bits_per_codeword);
|
coded_bits_per_codeword);
|
||||||
|
|
||||||
write_output("rxsigF0.m","rxsF0", ue->common_vars.rxdataF[0],2*12*ue->frame_parms.ofdm_symbol_size,2,1);
|
write_output("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0],2*12*ue->frame_parms.ofdm_symbol_size,2,1);
|
||||||
write_output("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_ra[0]->rxdataF_ext[0],2*12*ue->frame_parms.ofdm_symbol_size,1,1);
|
write_output("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_ra[0]->rxdataF_ext[0],2*12*ue->frame_parms.ofdm_symbol_size,1,1);
|
||||||
write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_ra[0]->dl_ch_estimates_ext[0],300*nsymb,1,1);
|
write_output("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_ra[0]->dl_ch_estimates_ext[0],300*nsymb,1,1);
|
||||||
/*
|
/*
|
||||||
@@ -1184,11 +1184,12 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|||||||
ue->prach_resources[eNB_id]->ra_PreambleIndex = 19;
|
ue->prach_resources[eNB_id]->ra_PreambleIndex = 19;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_I(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : Generating PRACH, preamble %d, P0_PRACH %d, TARGET_RECEIVED_POWER %d dBm, PRACH TDD Resource index %d, RA-RNTI %d\n",
|
LOG_I(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : Generating PRACH, preamble %d,PL %d, P0_PRACH %d, TARGET_RECEIVED_POWER %d dBm, PRACH TDD Resource index %d, RA-RNTI %d\n",
|
||||||
ue->Mod_id,
|
ue->Mod_id,
|
||||||
frame_tx,
|
frame_tx,
|
||||||
subframe_tx,
|
subframe_tx,
|
||||||
ue->prach_resources[eNB_id]->ra_PreambleIndex,
|
ue->prach_resources[eNB_id]->ra_PreambleIndex,
|
||||||
|
get_PL(ue->Mod_id,ue->CC_id,eNB_id),
|
||||||
ue->tx_power_dBm[subframe_tx],
|
ue->tx_power_dBm[subframe_tx],
|
||||||
ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER,
|
ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER,
|
||||||
ue->prach_resources[eNB_id]->ra_TDD_map_index,
|
ue->prach_resources[eNB_id]->ra_TDD_map_index,
|
||||||
@@ -1377,7 +1378,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
|||||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->round = 0;
|
ue->ulsch[eNB_id]->harq_processes[harq_pid]->round = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ack_status = get_ack(&ue->frame_parms,
|
ack_status = reset_ack(&ue->frame_parms,
|
||||||
ue->dlsch[eNB_id][0]->harq_ack,
|
ue->dlsch[eNB_id][0]->harq_ack,
|
||||||
subframe_tx,
|
subframe_tx,
|
||||||
ue->ulsch[eNB_id]->o_ACK);
|
ue->ulsch[eNB_id]->o_ACK);
|
||||||
@@ -1393,14 +1394,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
|
|||||||
|
|
||||||
// check if we received a PDSCH at subframe_tx - 4
|
// check if we received a PDSCH at subframe_tx - 4
|
||||||
// ==> send ACK/NACK on PUSCH
|
// ==> send ACK/NACK on PUSCH
|
||||||
if( (ue->dlsch[eNB_id][0]->harq_ack[proc->subframe_rx].send_harq_status) == 1)
|
ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK = ack_status;
|
||||||
{
|
|
||||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if T_TRACER
|
#if T_TRACER
|
||||||
if(ue->ulsch[eNB_id]->o_ACK[0])
|
if(ue->ulsch[eNB_id]->o_ACK[0])
|
||||||
@@ -1710,6 +1704,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|||||||
int tx_amp;
|
int tx_amp;
|
||||||
int16_t Po_PUCCH;
|
int16_t Po_PUCCH;
|
||||||
uint8_t ack_status=0;
|
uint8_t ack_status=0;
|
||||||
|
uint8_t ack_sr_generated = 0;
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH,VCD_FUNCTION_IN);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH,VCD_FUNCTION_IN);
|
||||||
|
|
||||||
@@ -1781,6 +1776,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|||||||
// we need to transmit ACK/NAK in this subframe
|
// we need to transmit ACK/NAK in this subframe
|
||||||
|
|
||||||
ue->generate_ul_signal[eNB_id] = 1;
|
ue->generate_ul_signal[eNB_id] = 1;
|
||||||
|
ack_sr_generated = 1;
|
||||||
|
|
||||||
if ((frame_parms->frame_type == TDD) && (SR_payload>0)) {
|
if ((frame_parms->frame_type == TDD) && (SR_payload>0)) {
|
||||||
format = pucch_format1b;
|
format = pucch_format1b;
|
||||||
@@ -1815,7 +1811,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|||||||
T_INT(tx_amp),T_INT(ue->dlsch[eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
|
T_INT(tx_amp),T_INT(ue->dlsch[eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
|
||||||
#endif
|
#endif
|
||||||
if (SR_payload>0) {
|
if (SR_payload>0) {
|
||||||
LOG_D(PHY,"[UE %d][SR %x] Frame %d subframe %d Generating PUCCH %s payload %d,%d (with SR for PUSCH), an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, Po_PUCCH %d, amp %d\n",
|
LOG_D(PHY,"[UE %d][SR %x] AbsSubFrame %d.%d Generating PUCCH %s payload %d,%d (with SR for PUSCH), an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, Po_PUCCH %d, amp %d\n",
|
||||||
Mod_id,
|
Mod_id,
|
||||||
ue->dlsch[eNB_id][0]->rnti,
|
ue->dlsch[eNB_id][0]->rnti,
|
||||||
frame_tx % 1024, subframe_tx,
|
frame_tx % 1024, subframe_tx,
|
||||||
@@ -1828,10 +1824,10 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|||||||
Po_PUCCH,
|
Po_PUCCH,
|
||||||
tx_amp);
|
tx_amp);
|
||||||
} else {
|
} else {
|
||||||
LOG_D(PHY,"[UE %d][PDSCH %x] Frame %d subframe %d Generating PUCCH %s, an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, b[0]=%d,b[1]=%d (SR_Payload %d), Po_PUCCH %d, amp %d\n",
|
LOG_D(PHY,"[UE %d][PDSCH %x] AbsSubFrame %d.%d rx_offset_diff: %d, Generating PUCCH %s, an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, b[0]=%d,b[1]=%d (SR_Payload %d), Po_PUCCH %d, amp %d\n",
|
||||||
Mod_id,
|
Mod_id,
|
||||||
ue->dlsch[eNB_id][0]->rnti,
|
ue->dlsch[eNB_id][0]->rnti,
|
||||||
frame_tx, subframe_tx,
|
frame_tx, subframe_tx,ue->rx_offset_diff,
|
||||||
(format == pucch_format1a? "1a": (
|
(format == pucch_format1a? "1a": (
|
||||||
format == pucch_format1b? "1b" : "??")),
|
format == pucch_format1b? "1b" : "??")),
|
||||||
frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission,
|
frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission,
|
||||||
@@ -1882,6 +1878,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|||||||
}
|
}
|
||||||
} else if (SR_payload==1) { // no ACK/NAK but SR is triggered by MAC
|
} else if (SR_payload==1) { // no ACK/NAK but SR is triggered by MAC
|
||||||
|
|
||||||
|
ack_sr_generated = 1;
|
||||||
if (ue->mac_enabled == 1) {
|
if (ue->mac_enabled == 1) {
|
||||||
Po_PUCCH = pucch_power_cntl(ue,proc,subframe_tx,eNB_id,pucch_format1);
|
Po_PUCCH = pucch_power_cntl(ue,proc,subframe_tx,eNB_id,pucch_format1);
|
||||||
}
|
}
|
||||||
@@ -1940,7 +1937,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|||||||
|
|
||||||
// PUCCH 2x
|
// PUCCH 2x
|
||||||
|
|
||||||
if (ue->generate_ul_signal[eNB_id] == 0) { // we have not generated ACK/NAK/SR in this subframe
|
if (ack_sr_generated == 0) { // we have not generated ACK/NAK/SR in this subframe
|
||||||
|
|
||||||
n2_pucch = ue->cqi_report_config[eNB_id].CQI_ReportPeriodic.cqi_PUCCH_ResourceIndex;
|
n2_pucch = ue->cqi_report_config[eNB_id].CQI_ReportPeriodic.cqi_PUCCH_ResourceIndex;
|
||||||
// only use format2 for now, i.e. now ACK/NAK - CQI multiplexing
|
// only use format2 for now, i.e. now ACK/NAK - CQI multiplexing
|
||||||
@@ -1971,14 +1968,6 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|||||||
T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id),T_INT(Mod_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]),
|
T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id),T_INT(Mod_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]),
|
||||||
T_INT(tx_amp),T_INT(ue->dlsch[eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
|
T_INT(tx_amp),T_INT(ue->dlsch[eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
|
||||||
#endif
|
#endif
|
||||||
LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2 (CQI), n2_pucch %d, Po_PUCCH %d, isShortenPucch %d, amp %d\n",
|
|
||||||
Mod_id,
|
|
||||||
ue->dlsch[eNB_id][0]->rnti,
|
|
||||||
frame_tx, subframe_tx,
|
|
||||||
n2_pucch,
|
|
||||||
Po_PUCCH,
|
|
||||||
isShortenPucch,
|
|
||||||
tx_amp);
|
|
||||||
|
|
||||||
int len;
|
int len;
|
||||||
// get the payload : < 12 bits, returned in len
|
// get the payload : < 12 bits, returned in len
|
||||||
@@ -1997,6 +1986,16 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|||||||
ue->pdcch_vars[eNB_id]->crnti);
|
ue->pdcch_vars[eNB_id]->crnti);
|
||||||
|
|
||||||
ue->generate_ul_signal[eNB_id] = 1;
|
ue->generate_ul_signal[eNB_id] = 1;
|
||||||
|
|
||||||
|
LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2 (CQI %d), n2_pucch %d, Po_PUCCH %d, isShortenPucch %d, amp %d\n",
|
||||||
|
Mod_id,
|
||||||
|
ue->dlsch[eNB_id][0]->rnti,
|
||||||
|
frame_tx, subframe_tx,CQI_payload,
|
||||||
|
n2_pucch,
|
||||||
|
Po_PUCCH,
|
||||||
|
isShortenPucch,
|
||||||
|
tx_amp);
|
||||||
|
|
||||||
}
|
}
|
||||||
// Periodic RI report
|
// Periodic RI report
|
||||||
else if ((ue->cqi_report_config[eNB_id].CQI_ReportPeriodic.ri_ConfigIndex>0) &&
|
else if ((ue->cqi_report_config[eNB_id].CQI_ReportPeriodic.ri_ConfigIndex>0) &&
|
||||||
@@ -2243,12 +2242,13 @@ void ue_measurement_procedures(
|
|||||||
lte_ue_measurements(ue,
|
lte_ue_measurements(ue,
|
||||||
(subframe_rx*frame_parms->samples_per_tti+ue->rx_offset)%(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME),
|
(subframe_rx*frame_parms->samples_per_tti+ue->rx_offset)%(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME),
|
||||||
(subframe_rx == 1) ? 1 : 0,
|
(subframe_rx == 1) ? 1 : 0,
|
||||||
0);
|
0,subframe_rx);
|
||||||
} else {
|
} else {
|
||||||
lte_ue_measurements(ue,
|
lte_ue_measurements(ue,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
1);
|
1,
|
||||||
|
subframe_rx);
|
||||||
}
|
}
|
||||||
#if T_TRACER
|
#if T_TRACER
|
||||||
if(slot == 0)
|
if(slot == 0)
|
||||||
@@ -2274,11 +2274,11 @@ void ue_measurement_procedures(
|
|||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_RRC_MEASUREMENTS, VCD_FUNCTION_OUT);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_RRC_MEASUREMENTS, VCD_FUNCTION_OUT);
|
||||||
|
|
||||||
if (abstraction_flag==1)
|
if (abstraction_flag==1)
|
||||||
ue->sinr_eff = sinr_eff_cqi_calc(ue, 0);
|
ue->sinr_eff = sinr_eff_cqi_calc(ue, 0, subframe_rx);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((subframe_rx==0) && (l==(4-frame_parms->Ncp))) {
|
if ((subframe_rx==0) && (slot == 0) && (l==(4-frame_parms->Ncp))) {
|
||||||
|
|
||||||
// AGC
|
// AGC
|
||||||
|
|
||||||
@@ -2301,6 +2301,7 @@ void ue_measurement_procedures(
|
|||||||
lte_adjust_synch(&ue->frame_parms,
|
lte_adjust_synch(&ue->frame_parms,
|
||||||
ue,
|
ue,
|
||||||
eNB_id,
|
eNB_id,
|
||||||
|
subframe_rx,
|
||||||
0,
|
0,
|
||||||
16384);
|
16384);
|
||||||
}
|
}
|
||||||
@@ -2752,9 +2753,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
LOG_D(PHY,"[UE %d] Frame %d, subframe %d, Mode %s: DCI found %i\n",ue->Mod_id,frame_rx,subframe_rx,mode_string[ue->UE_mode[eNB_id]],dci_cnt);
|
LOG_D(PHY,"[UE %d] AbsSubFrame %d.%d, Mode %s: DCI found %i\n",ue->Mod_id,frame_rx%1024,subframe_rx,mode_string[ue->UE_mode[eNB_id]],dci_cnt);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ue->pdcch_vars[eNB_id]->dci_received += dci_cnt;
|
ue->pdcch_vars[eNB_id]->dci_received += dci_cnt;
|
||||||
|
|
||||||
@@ -2808,12 +2807,6 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
|
|||||||
ue->dlsch[eNB_id][0]->g_pucch += ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->delta_PUCCH;
|
ue->dlsch[eNB_id][0]->g_pucch += ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->delta_PUCCH;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*T(T_UE_PHY_DLSCH_UE_DCI, T_INT(eNB_id), T_INT(frame_rx%1024), T_INT(subframe_rx), T_INT(ue->Mod_id),
|
|
||||||
T_INT(dci_alloc_rx[i].rnti), T_INT(dci_alloc_rx[i].format),
|
|
||||||
T_INT(ue->dlsch[eNB_id][0]->current_harq_pid),
|
|
||||||
T_INT(ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->mcs),
|
|
||||||
T_INT(ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->TBS));*/
|
|
||||||
|
|
||||||
ue->dlsch_received[eNB_id]++;
|
ue->dlsch_received[eNB_id]++;
|
||||||
|
|
||||||
#ifdef DEBUG_PHY_PROC
|
#ifdef DEBUG_PHY_PROC
|
||||||
@@ -3352,7 +3345,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
|
|||||||
pdsch_vars = ue->pdsch_vars_p[eNB_id];
|
pdsch_vars = ue->pdsch_vars_p[eNB_id];
|
||||||
break;
|
break;
|
||||||
case PDSCH:
|
case PDSCH:
|
||||||
pdsch_vars = ue->pdsch_vars[eNB_id];
|
pdsch_vars = ue->pdsch_vars[subframe_rx&0x1][eNB_id];
|
||||||
break;
|
break;
|
||||||
case PMCH:
|
case PMCH:
|
||||||
case PDSCH1:
|
case PDSCH1:
|
||||||
@@ -3616,7 +3609,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|||||||
slot_fep(ue,
|
slot_fep(ue,
|
||||||
l,
|
l,
|
||||||
(subframe_rx<<1),
|
(subframe_rx<<1),
|
||||||
ue->rx_offset,
|
0,
|
||||||
0,
|
0,
|
||||||
0);
|
0);
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
|
||||||
@@ -3647,7 +3640,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|||||||
slot_fep(ue,
|
slot_fep(ue,
|
||||||
0,
|
0,
|
||||||
1+(subframe_rx<<1),
|
1+(subframe_rx<<1),
|
||||||
ue->rx_offset,
|
0,
|
||||||
0,
|
0,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
@@ -3720,7 +3713,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|||||||
slot_fep(ue,
|
slot_fep(ue,
|
||||||
l,
|
l,
|
||||||
1+(subframe_rx<<1),
|
1+(subframe_rx<<1),
|
||||||
ue->rx_offset,
|
0,
|
||||||
0,
|
0,
|
||||||
0);
|
0);
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
|
||||||
@@ -3738,7 +3731,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
|||||||
slot_fep(ue,
|
slot_fep(ue,
|
||||||
0,
|
0,
|
||||||
(next_subframe_rx<<1),
|
(next_subframe_rx<<1),
|
||||||
ue->rx_offset,
|
0,
|
||||||
0,
|
0,
|
||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2514,35 +2514,37 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
//common vars
|
//common vars
|
||||||
write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
|
write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
|
||||||
write_output("rxsigF0.m","rxsF0", &UE->common_vars.rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
|
||||||
|
write_output("rxsigF0.m","rxsF0", &UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if (UE->frame_parms.nb_antennas_rx>1) {
|
if (UE->frame_parms.nb_antennas_rx>1) {
|
||||||
write_output("rxsig1.m","rxs1", UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
|
write_output("rxsig1.m","rxs1", UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
|
||||||
write_output("rxsigF1.m","rxsF1", UE->common_vars.rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
write_output("rxsigF1.m","rxsF1", UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
write_output("dlsch00_r0.m","dl00_r0",
|
write_output("dlsch00_r0.m","dl00_r0",
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][0][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][0][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if (UE->frame_parms.nb_antennas_rx>1)
|
if (UE->frame_parms.nb_antennas_rx>1)
|
||||||
write_output("dlsch01_r0.m","dl01_r0",
|
write_output("dlsch01_r0.m","dl01_r0",
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][1][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][1][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if (eNB->frame_parms.nb_antennas_tx>1)
|
if (eNB->frame_parms.nb_antennas_tx>1)
|
||||||
write_output("dlsch10_r0.m","dl10_r0",
|
write_output("dlsch10_r0.m","dl10_r0",
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][2][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if ((UE->frame_parms.nb_antennas_rx>1) && (eNB->frame_parms.nb_antennas_tx>1))
|
if ((UE->frame_parms.nb_antennas_rx>1) && (eNB->frame_parms.nb_antennas_tx>1))
|
||||||
write_output("dlsch11_r0.m","dl11_r0",
|
write_output("dlsch11_r0.m","dl11_r0",
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][3][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][3][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||||
|
|
||||||
//pdsch_vars
|
//pdsch_vars
|
||||||
dump_dlsch2(UE,eNB_id,coded_bits_per_codeword,round,UE->dlsch[0][0]->current_harq_pid);
|
|
||||||
//dump_dlsch2(UE,eNB_id_i,coded_bits_per_codeword);
|
dump_dlsch2(UE,eNB_id,subframe,coded_bits_per_codeword,round);
|
||||||
|
|
||||||
write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
|
write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
|
||||||
|
|
||||||
//pdcch_vars
|
//pdcch_vars
|
||||||
@@ -2599,7 +2601,8 @@ int main(int argc, char **argv)
|
|||||||
write_output(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
|
write_output(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
|
||||||
sprintf(fname,"rxsigF0_r%d.m",round);
|
sprintf(fname,"rxsigF0_r%d.m",round);
|
||||||
sprintf(vname,"rxs0F_r%d",round);
|
sprintf(vname,"rxs0F_r%d",round);
|
||||||
write_output(fname,vname, &UE->common_vars.rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
|
||||||
|
write_output(fname,vname, &UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if (UE->frame_parms.nb_antennas_rx>1) {
|
if (UE->frame_parms.nb_antennas_rx>1) {
|
||||||
sprintf(fname,"rxsig1_r%d.m",round);
|
sprintf(fname,"rxsig1_r%d.m",round);
|
||||||
@@ -2607,20 +2610,20 @@ int main(int argc, char **argv)
|
|||||||
write_output(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
|
write_output(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
|
||||||
sprintf(fname,"rxsigF1_r%d.m",round);
|
sprintf(fname,"rxsigF1_r%d.m",round);
|
||||||
sprintf(vname,"rxs1F_r%d.m",round);
|
sprintf(vname,"rxs1F_r%d.m",round);
|
||||||
write_output(fname,vname, UE->common_vars.rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
write_output(fname,vname, UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(fname,"dlsch00_r%d.m",round);
|
sprintf(fname,"dlsch00_r%d.m",round);
|
||||||
sprintf(vname,"dl00_r%d",round);
|
sprintf(vname,"dl00_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][0][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][0][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if (UE->frame_parms.nb_antennas_rx>1) {
|
if (UE->frame_parms.nb_antennas_rx>1) {
|
||||||
sprintf(fname,"dlsch01_r%d.m",round);
|
sprintf(fname,"dlsch01_r%d.m",round);
|
||||||
sprintf(vname,"dl01_r%d",round);
|
sprintf(vname,"dl01_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][1][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][1][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2628,7 +2631,7 @@ int main(int argc, char **argv)
|
|||||||
sprintf(fname,"dlsch10_r%d.m",round);
|
sprintf(fname,"dlsch10_r%d.m",round);
|
||||||
sprintf(vname,"dl10_r%d",round);
|
sprintf(vname,"dl10_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][2][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2636,12 +2639,13 @@ int main(int argc, char **argv)
|
|||||||
sprintf(fname,"dlsch11_r%d.m",round);
|
sprintf(fname,"dlsch11_r%d.m",round);
|
||||||
sprintf(vname,"dl11_r%d",round);
|
sprintf(vname,"dl11_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][3][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][3][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//pdsch_vars
|
//pdsch_vars
|
||||||
//dump_dlsch2(UE,eNB_id,coded_bits_per_codeword,round);
|
dump_dlsch2(UE,eNB_id,subframe,coded_bits_per_codeword,round);
|
||||||
|
|
||||||
|
|
||||||
//write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
|
//write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
|
||||||
//write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0);
|
//write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0);
|
||||||
|
|||||||
@@ -3407,9 +3407,9 @@ int main(int argc, char **argv)
|
|||||||
for(aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
for(aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||||
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[k][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=
|
||||||
(int16_t)(eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
(int16_t)(eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=
|
||||||
(int16_t)(eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
(int16_t)(eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3418,21 +3418,21 @@ int main(int argc, char **argv)
|
|||||||
}else {
|
}else {
|
||||||
if (transmission_mode==4) {
|
if (transmission_mode==4) {
|
||||||
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[0][0])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP);
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][0])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP);
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[0][0])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0;
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][0])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0;
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[0][1])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP);
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][1])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP);
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[0][1])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0;
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][1])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0;
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[0][2])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP);
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][2])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP);
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[0][2])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0;
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][2])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0;
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[0][3])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=-(short)(AMP);
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][3])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=-(short)(AMP);
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[0][3])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0;
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][3])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for(aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
for(aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||||
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP);
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP);
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2;
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3444,7 +3444,8 @@ int main(int argc, char **argv)
|
|||||||
lte_ue_measurements(UE,
|
lte_ue_measurements(UE,
|
||||||
subframe*UE->frame_parms.samples_per_tti,
|
subframe*UE->frame_parms.samples_per_tti,
|
||||||
1,
|
1,
|
||||||
0);
|
0,
|
||||||
|
subframe);
|
||||||
//printf ("Trial %d, Measurements are done \n", trials);
|
//printf ("Trial %d, Measurements are done \n", trials);
|
||||||
/*
|
/*
|
||||||
debug_msg("RX RSSI %d dBm, digital (%d, %d) dB, linear (%d, %d), avg rx power %d dB (%d lin), RX gain %d dB\n",
|
debug_msg("RX RSSI %d dBm, digital (%d, %d) dB, linear (%d, %d), avg rx power %d dB (%d lin), RX gain %d dB\n",
|
||||||
@@ -3767,7 +3768,7 @@ int main(int argc, char **argv)
|
|||||||
if (trials==0 && round==0 && transmission_mode>=4){
|
if (trials==0 && round==0 && transmission_mode>=4){
|
||||||
for (iii=0; iii<NB_RB; iii++){
|
for (iii=0; iii<NB_RB; iii++){
|
||||||
//fprintf(csv_fd, "%d, %d", (UE->pdsch_vars[eNB_id]->pmi_ext[iii]),(UE->pdsch_vars[eNB_id_i]->pmi_ext[iii]));
|
//fprintf(csv_fd, "%d, %d", (UE->pdsch_vars[eNB_id]->pmi_ext[iii]),(UE->pdsch_vars[eNB_id_i]->pmi_ext[iii]));
|
||||||
fprintf(csv_fd,"%x,",(UE->pdsch_vars[eNB_id]->pmi_ext[iii]));
|
fprintf(csv_fd,"%x,",(UE->pdsch_vars[subframe&0x1][eNB_id]->pmi_ext[iii]));
|
||||||
//printf("%x ",(UE->pdsch_vars[eNB_id]->pmi_ext[iii]));
|
//printf("%x ",(UE->pdsch_vars[eNB_id]->pmi_ext[iii]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3819,7 +3820,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
sprintf(fname,"dlsch%d_rxF_r%d_cw%d_llr.m",eNB_id,round, TB);
|
sprintf(fname,"dlsch%d_rxF_r%d_cw%d_llr.m",eNB_id,round, TB);
|
||||||
sprintf(vname,"dl%d_r%d_cw%d_llr",eNB_id,round, TB);
|
sprintf(vname,"dl%d_r%d_cw%d_llr",eNB_id,round, TB);
|
||||||
write_output(fname,vname, UE->pdsch_vars[0]->llr[UE->dlsch[0][TB]->harq_processes[UE->dlsch[0][TB]->current_harq_pid]->codeword],coded_bits_per_codeword[TB],1,0);
|
write_output(fname,vname, UE->pdsch_vars[subframe&0x1][0]->llr[UE->dlsch[0][TB]->harq_processes[UE->dlsch[0][TB]->current_harq_pid]->codeword],coded_bits_per_codeword[TB],1,0);
|
||||||
sprintf(fname,"dlsch_cw%d_e.m", TB);
|
sprintf(fname,"dlsch_cw%d_e.m", TB);
|
||||||
sprintf(vname,"dlschcw%d_e", TB);
|
sprintf(vname,"dlschcw%d_e", TB);
|
||||||
write_output(fname, vname,eNB->dlsch[0][TB]->harq_processes[0]->e,coded_bits_per_codeword[TB],1,4);
|
write_output(fname, vname,eNB->dlsch[0][TB]->harq_processes[0]->e,coded_bits_per_codeword[TB],1,4);
|
||||||
@@ -3827,7 +3828,7 @@ int main(int argc, char **argv)
|
|||||||
printf("trials=%d\n", trials);
|
printf("trials=%d\n", trials);
|
||||||
|
|
||||||
for (i=0;i<coded_bits_per_codeword[TB];i++)
|
for (i=0;i<coded_bits_per_codeword[TB];i++)
|
||||||
if (eNB->dlsch[0][TB]->harq_processes[0]->e[i] != (UE->pdsch_vars[0]->llr[UE->dlsch[0][TB]->harq_processes[UE->dlsch[0][TB]->current_harq_pid]->codeword][i]<0)) {
|
if (eNB->dlsch[0][TB]->harq_processes[0]->e[i] != (UE->pdsch_vars[subframe&0x1][0]->llr[UE->dlsch[0][TB]->harq_processes[UE->dlsch[0][TB]->current_harq_pid]->codeword][i]<0)) {
|
||||||
uncoded_ber_bit[i] = 1;
|
uncoded_ber_bit[i] = 1;
|
||||||
uncoded_ber++;
|
uncoded_ber++;
|
||||||
}
|
}
|
||||||
@@ -3851,14 +3852,14 @@ int main(int argc, char **argv)
|
|||||||
0,
|
0,
|
||||||
UE->dlsch[0][TB],
|
UE->dlsch[0][TB],
|
||||||
coded_bits_per_codeword[TB],
|
coded_bits_per_codeword[TB],
|
||||||
UE->pdsch_vars[eNB_id]->llr[UE->dlsch[0][TB]->harq_processes[UE->dlsch[0][TB]->current_harq_pid]->codeword],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[0][TB]->harq_processes[UE->dlsch[0][TB]->current_harq_pid]->codeword],
|
||||||
TB,
|
TB,
|
||||||
subframe<<1);
|
subframe<<1);
|
||||||
stop_meas(&UE->dlsch_unscrambling_stats);
|
stop_meas(&UE->dlsch_unscrambling_stats);
|
||||||
|
|
||||||
start_meas(&UE->dlsch_decoding_stats);
|
start_meas(&UE->dlsch_decoding_stats);
|
||||||
ret[TB] = dlsch_decoding(UE,
|
ret[TB] = dlsch_decoding(UE,
|
||||||
UE->pdsch_vars[eNB_id]->llr[UE->dlsch[0][TB]->harq_processes[UE->dlsch[0][TB]->current_harq_pid]->codeword],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[0][TB]->harq_processes[UE->dlsch[0][TB]->current_harq_pid]->codeword],
|
||||||
&UE->frame_parms,
|
&UE->frame_parms,
|
||||||
UE->dlsch[0][TB],
|
UE->dlsch[0][TB],
|
||||||
UE->dlsch[0][TB]->harq_processes[UE->dlsch[0][TB]->current_harq_pid],
|
UE->dlsch[0][TB]->harq_processes[UE->dlsch[0][TB]->current_harq_pid],
|
||||||
@@ -4106,10 +4107,10 @@ int main(int argc, char **argv)
|
|||||||
case 2:
|
case 2:
|
||||||
|
|
||||||
dlsch_qpsk_llr_SIC(&UE->frame_parms,
|
dlsch_qpsk_llr_SIC(&UE->frame_parms,
|
||||||
UE->pdsch_vars[eNB_id]->rxdataF_comp1[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
||||||
sic_buffer,
|
sic_buffer,
|
||||||
UE->pdsch_vars[eNB_id]->dl_ch_rho_ext[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
||||||
UE->pdsch_vars[eNB_id]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword],
|
||||||
num_pdcch_symbols,
|
num_pdcch_symbols,
|
||||||
dlsch0_eNB_harq->nb_rb,
|
dlsch0_eNB_harq->nb_rb,
|
||||||
subframe,
|
subframe,
|
||||||
@@ -4121,12 +4122,12 @@ int main(int argc, char **argv)
|
|||||||
case 4:
|
case 4:
|
||||||
|
|
||||||
dlsch_16qam_llr_SIC(&UE->frame_parms,
|
dlsch_16qam_llr_SIC(&UE->frame_parms,
|
||||||
UE->pdsch_vars[eNB_id]->rxdataF_comp1[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
||||||
sic_buffer,
|
sic_buffer,
|
||||||
UE->pdsch_vars[eNB_id]->dl_ch_rho_ext[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
||||||
UE->pdsch_vars[eNB_id]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword],
|
||||||
num_pdcch_symbols,
|
num_pdcch_symbols,
|
||||||
UE->pdsch_vars[eNB_id]->dl_ch_mag1[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_mag1[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
||||||
dlsch0_eNB_harq->nb_rb,
|
dlsch0_eNB_harq->nb_rb,
|
||||||
subframe,
|
subframe,
|
||||||
dlsch0_eNB_harq->rb_alloc[0],
|
dlsch0_eNB_harq->rb_alloc[0],
|
||||||
@@ -4135,13 +4136,13 @@ int main(int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
dlsch_64qam_llr_SIC(&UE->frame_parms,
|
dlsch_64qam_llr_SIC(&UE->frame_parms,
|
||||||
UE->pdsch_vars[eNB_id]->rxdataF_comp1[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
||||||
sic_buffer,
|
sic_buffer,
|
||||||
UE->pdsch_vars[eNB_id]->dl_ch_rho_ext[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
||||||
UE->pdsch_vars[eNB_id]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword],
|
||||||
num_pdcch_symbols,
|
num_pdcch_symbols,
|
||||||
UE->pdsch_vars[eNB_id]->dl_ch_mag1[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_mag1[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
||||||
UE->pdsch_vars[eNB_id]->dl_ch_magb1[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_magb1[UE->dlsch[0][0]->current_harq_pid][round_sic],
|
||||||
dlsch0_eNB_harq->nb_rb,
|
dlsch0_eNB_harq->nb_rb,
|
||||||
subframe,
|
subframe,
|
||||||
dlsch0_eNB_harq->rb_alloc[0],
|
dlsch0_eNB_harq->rb_alloc[0],
|
||||||
@@ -4180,14 +4181,14 @@ int main(int argc, char **argv)
|
|||||||
AssertFatal(uncoded_ber_bit, "uncoded_ber_bit==NULL");
|
AssertFatal(uncoded_ber_bit, "uncoded_ber_bit==NULL");
|
||||||
sprintf(fname,"dlsch%d_rxF_r%d_cw%d_llr.m",eNB_id,round,1);
|
sprintf(fname,"dlsch%d_rxF_r%d_cw%d_llr.m",eNB_id,round,1);
|
||||||
sprintf(vname,"dl%d_r%d_cw%d_llr",eNB_id,round, 1);
|
sprintf(vname,"dl%d_r%d_cw%d_llr",eNB_id,round, 1);
|
||||||
write_output(fname,vname, UE->pdsch_vars[0]->llr[1],coded_bits_per_codeword[1],1,0);
|
write_output(fname,vname, UE->pdsch_vars[subframe&0x1][0]->llr[1],coded_bits_per_codeword[1],1,0);
|
||||||
sprintf(fname,"dlsch_cw%d_e.m", 1);
|
sprintf(fname,"dlsch_cw%d_e.m", 1);
|
||||||
sprintf(vname,"dlschcw%d_e", 1);
|
sprintf(vname,"dlschcw%d_e", 1);
|
||||||
write_output(fname, vname,eNB->dlsch[0][1]->harq_processes[0]->e,coded_bits_per_codeword[1],1,4);
|
write_output(fname, vname,eNB->dlsch[0][1]->harq_processes[0]->e,coded_bits_per_codeword[1],1,4);
|
||||||
uncoded_ber=0;
|
uncoded_ber=0;
|
||||||
printf("trials=%d\n", trials);
|
printf("trials=%d\n", trials);
|
||||||
for (i=0;i<coded_bits_per_codeword[1];i++)
|
for (i=0;i<coded_bits_per_codeword[1];i++)
|
||||||
if (eNB->dlsch[0][1]->harq_processes[0]->e[i] != (UE->pdsch_vars[0]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword][i]<0)) {
|
if (eNB->dlsch[0][1]->harq_processes[0]->e[i] != (UE->pdsch_vars[subframe&0x1][0]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword][i]<0)) {
|
||||||
uncoded_ber_bit[i] = 1;
|
uncoded_ber_bit[i] = 1;
|
||||||
uncoded_ber++;
|
uncoded_ber++;
|
||||||
}
|
}
|
||||||
@@ -4209,7 +4210,7 @@ int main(int argc, char **argv)
|
|||||||
0,
|
0,
|
||||||
UE->dlsch[0][1],
|
UE->dlsch[0][1],
|
||||||
coded_bits_per_codeword[1],
|
coded_bits_per_codeword[1],
|
||||||
UE->pdsch_vars[eNB_id]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword],
|
||||||
1,
|
1,
|
||||||
subframe<<1);
|
subframe<<1);
|
||||||
stop_meas(&UE->dlsch_unscrambling_stats);
|
stop_meas(&UE->dlsch_unscrambling_stats);
|
||||||
@@ -4217,7 +4218,7 @@ int main(int argc, char **argv)
|
|||||||
start_meas(&UE->dlsch_decoding_stats);
|
start_meas(&UE->dlsch_decoding_stats);
|
||||||
|
|
||||||
ret[1] = dlsch_decoding(UE,
|
ret[1] = dlsch_decoding(UE,
|
||||||
UE->pdsch_vars[eNB_id]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword],
|
||||||
&UE->frame_parms,
|
&UE->frame_parms,
|
||||||
UE->dlsch[0][1],
|
UE->dlsch[0][1],
|
||||||
UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid],
|
UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid],
|
||||||
@@ -4363,14 +4364,14 @@ int main(int argc, char **argv)
|
|||||||
write_output(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
|
write_output(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
|
||||||
sprintf(fname,"rxsigF0_r%d.m",round);
|
sprintf(fname,"rxsigF0_r%d.m",round);
|
||||||
sprintf(vname,"rxs0F_r%d",round);
|
sprintf(vname,"rxs0F_r%d",round);
|
||||||
write_output(fname,vname, &UE->common_vars.rxdataF[0][0],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1);
|
write_output(fname,vname, &UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0][0],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1);
|
||||||
if (UE->frame_parms.nb_antennas_rx>1) {
|
if (UE->frame_parms.nb_antennas_rx>1) {
|
||||||
sprintf(fname,"rxsig1_r%d.m",round);
|
sprintf(fname,"rxsig1_r%d.m",round);
|
||||||
sprintf(vname,"rxs1_r%d",round);
|
sprintf(vname,"rxs1_r%d",round);
|
||||||
write_output(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
|
write_output(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
|
||||||
sprintf(fname,"rxsig1F_r%d.m",round);
|
sprintf(fname,"rxsig1F_r%d.m",round);
|
||||||
sprintf(vname,"rxs1F_r%d",round);
|
sprintf(vname,"rxs1F_r%d",round);
|
||||||
write_output(fname,vname, UE->common_vars.rxdataF[1],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1);
|
write_output(fname,vname, UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[1],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//channel
|
//channel
|
||||||
@@ -4392,27 +4393,27 @@ int main(int argc, char **argv)
|
|||||||
sprintf(fname,"dlsch00_r%d.m",round);
|
sprintf(fname,"dlsch00_r%d.m",round);
|
||||||
sprintf(vname,"dl00_r%d",round);
|
sprintf(vname,"dl00_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][0][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][0][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
if (UE->frame_parms.nb_antennas_rx>1) {
|
if (UE->frame_parms.nb_antennas_rx>1) {
|
||||||
sprintf(fname,"dlsch01_r%d.m",round);
|
sprintf(fname,"dlsch01_r%d.m",round);
|
||||||
sprintf(vname,"dl01_r%d",round);
|
sprintf(vname,"dl01_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][1][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][1][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
}
|
}
|
||||||
if (eNB->frame_parms.nb_antennas_tx>1) {
|
if (eNB->frame_parms.nb_antennas_tx>1) {
|
||||||
sprintf(fname,"dlsch10_r%d.m",round);
|
sprintf(fname,"dlsch10_r%d.m",round);
|
||||||
sprintf(vname,"dl10_r%d",round);
|
sprintf(vname,"dl10_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][2][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
}
|
}
|
||||||
if ((UE->frame_parms.nb_antennas_rx>1) && (eNB->frame_parms.nb_antennas_tx>1)) {
|
if ((UE->frame_parms.nb_antennas_rx>1) && (eNB->frame_parms.nb_antennas_tx>1)) {
|
||||||
sprintf(fname,"dlsch11_r%d.m",round);
|
sprintf(fname,"dlsch11_r%d.m",round);
|
||||||
sprintf(vname,"dl11_r%d",round);
|
sprintf(vname,"dl11_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][3][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][3][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
}
|
}
|
||||||
//pdsch_vars
|
//pdsch_vars
|
||||||
|
|||||||
@@ -3104,24 +3104,24 @@ PMI_FEEDBACK:
|
|||||||
for(aa=0; aa<frame_parms->nb_antenna_ports_eNB; aa++) {
|
for(aa=0; aa<frame_parms->nb_antenna_ports_eNB; aa++) {
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||||
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[k][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(
|
||||||
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
||||||
//printf("x=%d,AMP=%d\n",eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x,AMP);
|
//printf("x=%d,AMP=%d\n",eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x,AMP);
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(
|
||||||
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
||||||
|
|
||||||
if (transmission_mode == 7){
|
if (transmission_mode == 7){
|
||||||
//this should include the BF weights! Will not work for a random channel
|
//this should include the BF weights! Will not work for a random channel
|
||||||
if (UE->high_speed_flag==0) {
|
if (UE->high_speed_flag==0) {
|
||||||
((int16_t *)UE->pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i]=(int16_t)(
|
((int16_t *)UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i]=(int16_t)(
|
||||||
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
||||||
((int16_t *)UE->pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1]=(int16_t)(
|
((int16_t *)UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1]=(int16_t)(
|
||||||
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
||||||
//printf("**,x=%d,AMP=%d\n",eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x,AMP);
|
//printf("**,x=%d,AMP=%d\n",eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x,AMP);
|
||||||
} else {
|
} else {
|
||||||
((int16_t *)UE->pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(int16_t)(
|
((int16_t *)UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(int16_t)(
|
||||||
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
||||||
((int16_t *)UE->pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(int16_t)(
|
((int16_t *)UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(int16_t)(
|
||||||
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3134,15 +3134,15 @@ PMI_FEEDBACK:
|
|||||||
for(aa=0; aa<frame_parms->nb_antenna_ports_eNB; aa++) {
|
for(aa=0; aa<frame_parms->nb_antenna_ports_eNB; aa++) {
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||||
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP);
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP);
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2;
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2;
|
||||||
if (transmission_mode == 7) {
|
if (transmission_mode == 7) {
|
||||||
if (UE->high_speed_flag==0){
|
if (UE->high_speed_flag==0){
|
||||||
((int16_t *) UE->pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i]=(short)(AMP);
|
((int16_t *) UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i]=(short)(AMP);
|
||||||
((int16_t *) UE->pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1]=0/2;
|
((int16_t *) UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1]=0/2;
|
||||||
} else {
|
} else {
|
||||||
((int16_t *) UE->pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(short)(AMP);
|
((int16_t *) UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(short)(AMP);
|
||||||
((int16_t *) UE->pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=0/2;
|
((int16_t *) UE->pdsch_vars[subframe&0x1][0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=0/2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3485,34 +3485,34 @@ PMI_FEEDBACK:
|
|||||||
//write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
|
//write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
|
||||||
write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][subframe*UE->frame_parms.samples_per_tti],UE->frame_parms.samples_per_tti,1,1);
|
write_output("rxsig0.m","rxs0", &UE->common_vars.rxdata[0][subframe*UE->frame_parms.samples_per_tti],UE->frame_parms.samples_per_tti,1,1);
|
||||||
//write_output("rxsigF0.m","rxsF0", &UE->common_vars.rxdataF[0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
//write_output("rxsigF0.m","rxsF0", &UE->common_vars.rxdataF[0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
write_output("rxsigF0.m","rxsF0", &UE->common_vars.rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
write_output("rxsigF0.m","rxsF0", &UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0][0],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if (UE->frame_parms.nb_antennas_rx>1) {
|
if (UE->frame_parms.nb_antennas_rx>1) {
|
||||||
write_output("rxsig1.m","rxs1", UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
|
write_output("rxsig1.m","rxs1", UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
|
||||||
write_output("rxsigF1.m","rxsF1", UE->common_vars.rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
write_output("rxsigF1.m","rxsF1", UE->common_vars..common_vars_rx_data_per_thread[subframe&0x1]rxdataF[1],UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
write_output("dlsch00_r0.m","dl00_r0",
|
write_output("dlsch00_r0.m","dl00_r0",
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][0][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][0][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if (UE->frame_parms.nb_antennas_rx>1)
|
if (UE->frame_parms.nb_antennas_rx>1)
|
||||||
write_output("dlsch01_r0.m","dl01_r0",
|
write_output("dlsch01_r0.m","dl01_r0",
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][1][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][1][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if (eNB->frame_parms.nb_antennas_tx>1)
|
if (eNB->frame_parms.nb_antennas_tx>1)
|
||||||
write_output("dlsch10_r0.m","dl10_r0",
|
write_output("dlsch10_r0.m","dl10_r0",
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][2][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if ((UE->frame_parms.nb_antennas_rx>1) && (eNB->frame_parms.nb_antennas_tx>1))
|
if ((UE->frame_parms.nb_antennas_rx>1) && (eNB->frame_parms.nb_antennas_tx>1))
|
||||||
write_output("dlsch11_r0.m","dl11_r0",
|
write_output("dlsch11_r0.m","dl11_r0",
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][3][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][3][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||||
|
|
||||||
//pdsch_vars
|
//pdsch_vars
|
||||||
dump_dlsch2(UE,eNB_id,coded_bits_per_codeword,round);
|
dump_dlsch2(UE,eNB_id,subframe,coded_bits_per_codeword,round);
|
||||||
//dump_dlsch2(UE,eNB_id_i,coded_bits_per_codeword);
|
//dump_dlsch2(UE,eNB_id_i,coded_bits_per_codeword);
|
||||||
write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
|
write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
|
||||||
|
|
||||||
@@ -3535,8 +3535,8 @@ PMI_FEEDBACK:
|
|||||||
if (trials==0 && round==0 && transmission_mode>=5 && transmission_mode<7) {
|
if (trials==0 && round==0 && transmission_mode>=5 && transmission_mode<7) {
|
||||||
for (iii=0; iii<NB_RB; iii++) {
|
for (iii=0; iii<NB_RB; iii++) {
|
||||||
//fprintf(csv_fd, "%d, %d", (UE->pdsch_vars[eNB_id]->pmi_ext[iii]),(UE->pdsch_vars[eNB_id_i]->pmi_ext[iii]));
|
//fprintf(csv_fd, "%d, %d", (UE->pdsch_vars[eNB_id]->pmi_ext[iii]),(UE->pdsch_vars[eNB_id_i]->pmi_ext[iii]));
|
||||||
fprintf(csv_fd,"%x,%x,",(UE->pdsch_vars[eNB_id]->pmi_ext[iii]),(UE->pdsch_vars[eNB_id]->pmi_ext[iii]));
|
fprintf(csv_fd,"%x,%x,",(UE->pdsch_vars[subframe&0x1][eNB_id]->pmi_ext[iii]),(UE->pdsch_vars[eNB_id]->pmi_ext[iii]));
|
||||||
printf("%x ",(UE->pdsch_vars[eNB_id]->pmi_ext[iii]));
|
printf("%x ",(UE->pdsch_vars[subframe&0x1][eNB_id]->pmi_ext[iii]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3560,7 +3560,7 @@ PMI_FEEDBACK:
|
|||||||
// calculate uncoded BLER
|
// calculate uncoded BLER
|
||||||
uncoded_ber=0;
|
uncoded_ber=0;
|
||||||
for (i=0;i<coded_bits_per_codeword;i++)
|
for (i=0;i<coded_bits_per_codeword;i++)
|
||||||
if (eNB->dlsch[0][0]->harq_processes[0]->e[i] != (UE->pdsch_vars[0]->llr[0][i]<0)) {
|
if (eNB->dlsch[0][0]->harq_processes[0]->e[i] != (UE->pdsch_vars[subframe&0x1][0]->llr[0][i]<0)) {
|
||||||
uncoded_ber_bit[i] = 1;
|
uncoded_ber_bit[i] = 1;
|
||||||
uncoded_ber++;
|
uncoded_ber++;
|
||||||
}
|
}
|
||||||
@@ -3579,14 +3579,14 @@ PMI_FEEDBACK:
|
|||||||
0,
|
0,
|
||||||
UE->dlsch[0][cw],
|
UE->dlsch[0][cw],
|
||||||
coded_bits_per_codeword,
|
coded_bits_per_codeword,
|
||||||
UE->pdsch_vars[eNB_id]->llr[cw],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[cw],
|
||||||
0,
|
0,
|
||||||
subframe<<1);
|
subframe<<1);
|
||||||
stop_meas(&UE->dlsch_unscrambling_stats);
|
stop_meas(&UE->dlsch_unscrambling_stats);
|
||||||
|
|
||||||
start_meas(&UE->dlsch_decoding_stats);
|
start_meas(&UE->dlsch_decoding_stats);
|
||||||
ret = dlsch_decoding(UE,
|
ret = dlsch_decoding(UE,
|
||||||
UE->pdsch_vars[eNB_id]->llr[cw],
|
UE->pdsch_vars[subframe&0x1][eNB_id]->llr[cw],
|
||||||
&UE->frame_parms,
|
&UE->frame_parms,
|
||||||
UE->dlsch[0][cw],
|
UE->dlsch[0][cw],
|
||||||
UE->dlsch[0][cw]->harq_processes[UE->dlsch[0][cw]->current_harq_pid],
|
UE->dlsch[0][cw]->harq_processes[UE->dlsch[0][cw]->current_harq_pid],
|
||||||
@@ -3687,7 +3687,7 @@ PMI_FEEDBACK:
|
|||||||
write_output(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
|
write_output(fname,vname, &UE->common_vars.rxdata[0][0],10*UE->frame_parms.samples_per_tti,1,1);
|
||||||
sprintf(fname,"rxsigF0_r%d.m",round);
|
sprintf(fname,"rxsigF0_r%d.m",round);
|
||||||
sprintf(vname,"rxs0F_r%d",round);
|
sprintf(vname,"rxs0F_r%d",round);
|
||||||
write_output(fname,vname, &UE->common_vars.rxdataF[0][0],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1);
|
write_output(fname,vname, &UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0][0],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1);
|
||||||
|
|
||||||
if (UE->frame_parms.nb_antennas_rx>1) {
|
if (UE->frame_parms.nb_antennas_rx>1) {
|
||||||
sprintf(fname,"rxsig1_r%d.m",round);
|
sprintf(fname,"rxsig1_r%d.m",round);
|
||||||
@@ -3695,20 +3695,20 @@ PMI_FEEDBACK:
|
|||||||
write_output(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
|
write_output(fname,vname, UE->common_vars.rxdata[1],UE->frame_parms.samples_per_tti,1,1);
|
||||||
sprintf(fname,"rxsig1F_r%d.m",round);
|
sprintf(fname,"rxsig1F_r%d.m",round);
|
||||||
sprintf(vname,"rxs1F_r%d.m",round);
|
sprintf(vname,"rxs1F_r%d.m",round);
|
||||||
write_output(fname,vname, UE->common_vars.rxdataF[1],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1);
|
write_output(fname,vname, UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[1],2*UE->frame_parms.ofdm_symbol_size*nsymb,2,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(fname,"dlsch00_r%d.m",round);
|
sprintf(fname,"dlsch00_r%d.m",round);
|
||||||
sprintf(vname,"dl00_r%d",round);
|
sprintf(vname,"dl00_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][0][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][0][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||||
|
|
||||||
if (UE->frame_parms.nb_antennas_rx>1) {
|
if (UE->frame_parms.nb_antennas_rx>1) {
|
||||||
sprintf(fname,"dlsch01_r%d.m",round);
|
sprintf(fname,"dlsch01_r%d.m",round);
|
||||||
sprintf(vname,"dl01_r%d",round);
|
sprintf(vname,"dl01_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][1][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][1][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3716,7 +3716,7 @@ PMI_FEEDBACK:
|
|||||||
sprintf(fname,"dlsch10_r%d.m",round);
|
sprintf(fname,"dlsch10_r%d.m",round);
|
||||||
sprintf(vname,"dl10_r%d",round);
|
sprintf(vname,"dl10_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][2][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3724,12 +3724,12 @@ PMI_FEEDBACK:
|
|||||||
sprintf(fname,"dlsch11_r%d.m",round);
|
sprintf(fname,"dlsch11_r%d.m",round);
|
||||||
sprintf(vname,"dl11_r%d",round);
|
sprintf(vname,"dl11_r%d",round);
|
||||||
write_output(fname,vname,
|
write_output(fname,vname,
|
||||||
&(UE->common_vars.dl_ch_estimates[eNB_id][3][0]),
|
&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][3][0]),
|
||||||
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//pdsch_vars
|
//pdsch_vars
|
||||||
dump_dlsch2(UE,eNB_id,coded_bits_per_codeword,round);
|
dump_dlsch2(UE,eNB_id,subframe,coded_bits_per_codeword,round);
|
||||||
/*
|
/*
|
||||||
write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
|
write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
|
||||||
write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0);
|
write_output("dlsch_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0);
|
||||||
|
|||||||
@@ -447,8 +447,8 @@ int main(int argc, char **argv)
|
|||||||
for(aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
for(aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||||
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(eNB2UE->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[k][(aa<<1)+aarx])[2*i+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(eNB2UE->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(eNB2UE->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(eNB2UE->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -932,6 +932,7 @@ int main(int argc, char **argv)
|
|||||||
lte_ue_measurements(UE,
|
lte_ue_measurements(UE,
|
||||||
0,
|
0,
|
||||||
1,
|
1,
|
||||||
|
0,
|
||||||
0);
|
0);
|
||||||
/*
|
/*
|
||||||
if (trial%100 == 0) {
|
if (trial%100 == 0) {
|
||||||
@@ -963,7 +964,7 @@ int main(int argc, char **argv)
|
|||||||
//sprintf(vname,"dl_ch00_%d",l);
|
//sprintf(vname,"dl_ch00_%d",l);
|
||||||
//write_output(fname,vname,&(common_vars->dl_ch_estimates[0][frame_parms->ofdm_symbol_size*(l%6)]),frame_parms->ofdm_symbol_size,1,1);
|
//write_output(fname,vname,&(common_vars->dl_ch_estimates[0][frame_parms->ofdm_symbol_size*(l%6)]),frame_parms->ofdm_symbol_size,1,1);
|
||||||
|
|
||||||
lte_est_freq_offset(UE->common_vars.dl_ch_estimates[0],
|
lte_est_freq_offset(UE->common_vars.common_vars_rx_data_per_thread[/*subframe*/0&0x1].dl_ch_estimates[0],
|
||||||
&UE->frame_parms,
|
&UE->frame_parms,
|
||||||
l,
|
l,
|
||||||
&freq_offset,
|
&freq_offset,
|
||||||
@@ -1051,13 +1052,13 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
if (n_frames==1) {
|
if (n_frames==1) {
|
||||||
|
|
||||||
write_output("H00.m","h00",&(UE->common_vars.dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1);
|
write_output("H00.m","h00",&(UE->common_vars.common_vars_rx_data_per_thread[/*subframe*/0&0x1].dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1);
|
||||||
|
|
||||||
if (n_tx==2)
|
if (n_tx==2)
|
||||||
write_output("H10.m","h10",&(UE->common_vars.dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1);
|
write_output("H10.m","h10",&(UE->common_vars.common_vars_rx_data_per_thread[/*subframe*/0&0x1].dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1);
|
||||||
|
|
||||||
write_output("rxsig0.m","rxs0", UE->common_vars.rxdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
|
write_output("rxsig0.m","rxs0", UE->common_vars.rxdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
|
||||||
write_output("rxsigF0.m","rxsF0", UE->common_vars.rxdataF[0],NUMBER_OF_OFDM_CARRIERS*2*((frame_parms->Ncp==0)?14:12),2,1);
|
write_output("rxsigF0.m","rxsF0", UE->common_vars.common_vars_rx_data_per_thread[/*subframe*/0&0x1].rxdataF[0],NUMBER_OF_OFDM_CARRIERS*2*((frame_parms->Ncp==0)?14:12),2,1);
|
||||||
write_output("PBCH_rxF0_ext.m","pbch0_ext",UE->pbch_vars[0]->rxdataF_ext[0],12*4*6,1,1);
|
write_output("PBCH_rxF0_ext.m","pbch0_ext",UE->pbch_vars[0]->rxdataF_ext[0],12*4*6,1,1);
|
||||||
write_output("PBCH_rxF0_comp.m","pbch0_comp",UE->pbch_vars[0]->rxdataF_comp[0],12*4*6,1,1);
|
write_output("PBCH_rxF0_comp.m","pbch0_comp",UE->pbch_vars[0]->rxdataF_comp[0],12*4*6,1,1);
|
||||||
write_output("PBCH_rxF_llr.m","pbch_llr",UE->pbch_vars[0]->llr,(frame_parms->Ncp==0) ? 1920 : 1728,1,4);
|
write_output("PBCH_rxF_llr.m","pbch_llr",UE->pbch_vars[0]->llr,(frame_parms->Ncp==0) ? 1920 : 1728,1,4);
|
||||||
|
|||||||
@@ -1060,9 +1060,9 @@ int main(int argc, char **argv)
|
|||||||
for(aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
for(aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||||
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[k][(aa<<1)+aarx])[2*i+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(
|
||||||
eNB2UE->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
eNB2UE->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP);
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)(
|
||||||
eNB2UE->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
eNB2UE->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1072,8 +1072,8 @@ int main(int argc, char **argv)
|
|||||||
for(aa=0; aa<frame_parms->nb_antenna_ports_eNB; aa++) {
|
for(aa=0; aa<frame_parms->nb_antenna_ports_eNB; aa++) {
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||||
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
for (i=0; i<frame_parms->N_RB_DL*12; i++) {
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP);
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][(aa<<1)+aarx])[2*i+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP);
|
||||||
((int16_t *) UE->common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2;
|
((int16_t *) UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1212,17 +1212,17 @@ int main(int argc, char **argv)
|
|||||||
write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
|
write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
|
||||||
|
|
||||||
write_output("rxsig0.m","rxs0", UE->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
|
write_output("rxsig0.m","rxs0", UE->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
|
||||||
write_output("rxsigF0.m","rxsF0", UE->common_vars.rxdataF[0],NUMBER_OF_OFDM_CARRIERS*2*((frame_parms->Ncp==0)?14:12),2,1);
|
write_output("rxsigF0.m","rxsF0", UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0],NUMBER_OF_OFDM_CARRIERS*2*((frame_parms->Ncp==0)?14:12),2,1);
|
||||||
|
|
||||||
if (n_rx>1) {
|
if (n_rx>1) {
|
||||||
write_output("rxsig1.m","rxs1", UE->common_vars.rxdata[1],10*frame_parms->samples_per_tti,1,1);
|
write_output("rxsig1.m","rxs1", UE->common_vars.rxdata[1],10*frame_parms->samples_per_tti,1,1);
|
||||||
write_output("rxsigF1.m","rxsF1", UE->common_vars.rxdataF[1],NUMBER_OF_OFDM_CARRIERS*2*((frame_parms->Ncp==0)?14:12),2,1);
|
write_output("rxsigF1.m","rxsF1", UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF[1],NUMBER_OF_OFDM_CARRIERS*2*((frame_parms->Ncp==0)?14:12),2,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
write_output("H00.m","h00",&(UE->common_vars.dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1);
|
write_output("H00.m","h00",&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1);
|
||||||
|
|
||||||
if (n_tx==2)
|
if (n_tx==2)
|
||||||
write_output("H10.m","h10",&(UE->common_vars.dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1);
|
write_output("H10.m","h10",&(UE->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(eNB->frame_parms.ofdm_symbol_size),1,1);
|
||||||
|
|
||||||
write_output("pdcch_rxF_ext0.m","pdcch_rxF_ext0",UE->pdcch_vars[eNb_id]->rxdataF_ext[0],3*12*UE->frame_parms.N_RB_DL,1,1);
|
write_output("pdcch_rxF_ext0.m","pdcch_rxF_ext0",UE->pdcch_vars[eNb_id]->rxdataF_ext[0],3*12*UE->frame_parms.N_RB_DL,1,1);
|
||||||
write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[eNb_id]->rxdataF_comp[0],4*12*UE->frame_parms.N_RB_DL,1,1);
|
write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[eNb_id]->rxdataF_comp[0],4*12*UE->frame_parms.N_RB_DL,1,1);
|
||||||
|
|||||||
@@ -1683,9 +1683,9 @@ int main(int argc, char **argv)
|
|||||||
frame_parms,
|
frame_parms,
|
||||||
PHY_vars_UE[0]->lte_ue_pdcch_vars[0]->num_pdcch_symbols,
|
PHY_vars_UE[0]->lte_ue_pdcch_vars[0]->num_pdcch_symbols,
|
||||||
(int16_t**)PHY_vars_UE[0]->lte_ue_common_vars.dl_ch_estimates_time,
|
(int16_t**)PHY_vars_UE[0]->lte_ue_common_vars.dl_ch_estimates_time,
|
||||||
(int16_t**)PHY_vars_UE[0]->lte_ue_common_vars.dl_ch_estimates[0],
|
(int16_t**)PHY_vars_UE[0]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0],
|
||||||
(int16_t**)PHY_vars_UE[0]->lte_ue_common_vars.rxdata,
|
(int16_t**)PHY_vars_UE[0]->lte_ue_common_vars.rxdata,
|
||||||
(int16_t**)PHY_vars_UE[0]->lte_ue_common_vars.rxdataF,
|
(int16_t**)PHY_vars_UE[0]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF,
|
||||||
(int16_t*)PHY_vars_UE[0]->lte_ue_pdcch_vars[0]->rxdataF_comp[0],
|
(int16_t*)PHY_vars_UE[0]->lte_ue_pdcch_vars[0]->rxdataF_comp[0],
|
||||||
(int16_t*)PHY_vars_UE[0]->lte_ue_pdsch_vars[0]->rxdataF_comp[0],
|
(int16_t*)PHY_vars_UE[0]->lte_ue_pdsch_vars[0]->rxdataF_comp[0],
|
||||||
(int16_t*)PHY_vars_UE[0]->lte_ue_pdsch_vars[1]->rxdataF_comp[0],
|
(int16_t*)PHY_vars_UE[0]->lte_ue_pdsch_vars[1]->rxdataF_comp[0],
|
||||||
@@ -1699,9 +1699,9 @@ int main(int argc, char **argv)
|
|||||||
frame_parms,
|
frame_parms,
|
||||||
PHY_vars_UE[1]->lte_ue_pdcch_vars[0]->num_pdcch_symbols,
|
PHY_vars_UE[1]->lte_ue_pdcch_vars[0]->num_pdcch_symbols,
|
||||||
(int16_t**)PHY_vars_UE[1]->lte_ue_common_vars.dl_ch_estimates_time,
|
(int16_t**)PHY_vars_UE[1]->lte_ue_common_vars.dl_ch_estimates_time,
|
||||||
(int16_t**)PHY_vars_UE[1]->lte_ue_common_vars.dl_ch_estimates[0],
|
(int16_t**)PHY_vars_UE[1]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0],
|
||||||
(int16_t**)PHY_vars_UE[1]->lte_ue_common_vars.rxdata,
|
(int16_t**)PHY_vars_UE[1]->lte_ue_common_vars.rxdata,
|
||||||
(int16_t**)PHY_vars_UE[1]->lte_ue_common_vars.rxdataF,
|
(int16_t**)PHY_vars_UE[1]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].rxdataF,
|
||||||
(int16_t*)PHY_vars_UE[1]->lte_ue_pdcch_vars[0]->rxdataF_comp[0],
|
(int16_t*)PHY_vars_UE[1]->lte_ue_pdcch_vars[0]->rxdataF_comp[0],
|
||||||
(int16_t*)PHY_vars_UE[1]->lte_ue_pdsch_vars[0]->rxdataF_comp[0],
|
(int16_t*)PHY_vars_UE[1]->lte_ue_pdsch_vars[0]->rxdataF_comp[0],
|
||||||
(int16_t*)PHY_vars_UE[1]->lte_ue_pdsch_vars[3]->rxdataF_comp[0],
|
(int16_t*)PHY_vars_UE[1]->lte_ue_pdsch_vars[3]->rxdataF_comp[0],
|
||||||
@@ -1718,10 +1718,10 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
if (n_frames==1) {
|
if (n_frames==1) {
|
||||||
|
|
||||||
write_output("H00.m","h00",&(PHY_vars_UE[0]->lte_ue_common_vars.dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size),1,1);
|
write_output("H00.m","h00",&(PHY_vars_UE[0]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][0][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size),1,1);
|
||||||
|
|
||||||
if (n_tx==2)
|
if (n_tx==2)
|
||||||
write_output("H10.m","h10",&(PHY_vars_UE[0]->lte_ue_common_vars.dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size),1,1);
|
write_output("H10.m","h10",&(PHY_vars_UE[0]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][2][0]),((frame_parms->Ncp==0)?7:6)*(PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size),1,1);
|
||||||
|
|
||||||
write_output("rxsig0.m","rxs0", PHY_vars_UE[0]->lte_ue_common_vars.rxdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
|
write_output("rxsig0.m","rxs0", PHY_vars_UE[0]->lte_ue_common_vars.rxdata[0],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
|
||||||
write_output("rxsigF0.m","rxsF0", PHY_vars_UE[0]->lte_ue_common_vars.rxdataF[0],NUMBER_OF_OFDM_CARRIERS*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb,2,1);
|
write_output("rxsigF0.m","rxsF0", PHY_vars_UE[0]->lte_ue_common_vars.rxdataF[0],NUMBER_OF_OFDM_CARRIERS*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*nsymb,2,1);
|
||||||
@@ -1739,7 +1739,7 @@ int main(int argc, char **argv)
|
|||||||
PHY_vars_UE[0]->lte_ue_pdcch_vars[0]->num_pdcch_symbols,
|
PHY_vars_UE[0]->lte_ue_pdcch_vars[0]->num_pdcch_symbols,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
dump_dlsch2(PHY_vars_UE[0],0,coded_bits_per_codeword);
|
dump_dlsch2(PHY_vars_UE[0],0,0,coded_bits_per_codeword);
|
||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -3131,9 +3131,9 @@ static void dump_sib2( SystemInformationBlockType2_t *sib2 )
|
|||||||
sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig );
|
sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig );
|
||||||
LOG_I( RRC, "radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission : %d\n",
|
LOG_I( RRC, "radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission : %d\n",
|
||||||
sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission );
|
sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission );
|
||||||
LOG_I( RRC, "radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts : %ld\n",
|
//LOG_I( RRC, "radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts : %ld\n",
|
||||||
/* TODO: check that it's okay to access [0] */
|
/* TODO: check that it's okay to access [0] */
|
||||||
sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts[0] );
|
// sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts[0] );
|
||||||
}
|
}
|
||||||
|
|
||||||
// uplinkPowerControlCommon
|
// uplinkPowerControlCommon
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
#include "TLVEncoder.h"
|
#include "TLVEncoder.h"
|
||||||
#include "TLVDecoder.h"
|
#include "TLVDecoder.h"
|
||||||
#include "AttachAccept.h"
|
#include "AttachAccept.h"
|
||||||
|
#include "assertions.h"
|
||||||
|
|
||||||
int decode_attach_accept(attach_accept_msg *attach_accept, uint8_t *buffer, uint32_t len)
|
int decode_attach_accept(attach_accept_msg *attach_accept, uint8_t *buffer, uint32_t len)
|
||||||
{
|
{
|
||||||
@@ -59,7 +60,7 @@ int decode_attach_accept(attach_accept_msg *attach_accept, uint8_t *buffer, uint
|
|||||||
decoded += decoded_result;
|
decoded += decoded_result;
|
||||||
|
|
||||||
/* Decoding optional fields */
|
/* Decoding optional fields */
|
||||||
while(len - decoded > 0) {
|
while(((int32_t)len - (int32_t)decoded) > 0) {
|
||||||
uint8_t ieiDecoded = *(buffer + decoded);
|
uint8_t ieiDecoded = *(buffer + decoded);
|
||||||
|
|
||||||
/* Type | value iei are below 0x80 so just return the first 4 bits */
|
/* Type | value iei are below 0x80 so just return the first 4 bits */
|
||||||
@@ -189,6 +190,7 @@ int decode_attach_accept(attach_accept_msg *attach_accept, uint8_t *buffer, uint
|
|||||||
default:
|
default:
|
||||||
errorCodeDecoder = TLV_DECODE_UNEXPECTED_IEI;
|
errorCodeDecoder = TLV_DECODE_UNEXPECTED_IEI;
|
||||||
LOG_TRACE(WARNING, "DECODE_UNEXPECTED_IEI %x (4 bits)", ieiDecoded);
|
LOG_TRACE(WARNING, "DECODE_UNEXPECTED_IEI %x (4 bits)", ieiDecoded);
|
||||||
|
AssertFatal(0, " ");
|
||||||
return TLV_DECODE_UNEXPECTED_IEI;
|
return TLV_DECODE_UNEXPECTED_IEI;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+47
-11
@@ -449,7 +449,14 @@ static void *UE_thread_synch(void *arg)
|
|||||||
// rerun with new cell parameters and frequency-offset
|
// rerun with new cell parameters and frequency-offset
|
||||||
for (i=0;i<openair0_cfg[UE->rf_map.card].rx_num_channels;i++) {
|
for (i=0;i<openair0_cfg[UE->rf_map.card].rx_num_channels;i++) {
|
||||||
openair0_cfg[UE->rf_map.card].rx_gain[UE->rf_map.chain+i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET;
|
openair0_cfg[UE->rf_map.card].rx_gain[UE->rf_map.chain+i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET;
|
||||||
|
if (freq_offset >= 0)
|
||||||
|
{
|
||||||
|
openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i] += UE->common_vars.freq_offset;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i] -= UE->common_vars.freq_offset;
|
openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i] -= UE->common_vars.freq_offset;
|
||||||
|
}
|
||||||
openair0_cfg[UE->rf_map.card].tx_freq[UE->rf_map.chain+i] = openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i]+uplink_frequency_offset[CC_id][i];
|
openair0_cfg[UE->rf_map.card].tx_freq[UE->rf_map.chain+i] = openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i]+uplink_frequency_offset[CC_id][i];
|
||||||
downlink_frequency[CC_id][i] = openair0_cfg[CC_id].rx_freq[i];
|
downlink_frequency[CC_id][i] = openair0_cfg[CC_id].rx_freq[i];
|
||||||
freq_offset=0;
|
freq_offset=0;
|
||||||
@@ -856,8 +863,8 @@ static void *UE_thread_rxn_txnp4(void *arg)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define RX_OFF_MAX 10
|
#define RX_OFF_MAX 23
|
||||||
#define RX_OFF_MIN 5
|
#define RX_OFF_MIN 0
|
||||||
#define RX_OFF_MID ((RX_OFF_MAX+RX_OFF_MIN)/2)
|
#define RX_OFF_MID ((RX_OFF_MAX+RX_OFF_MIN)/2)
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -1033,6 +1040,7 @@ void *UE_thread(void *arg) {
|
|||||||
return &UE_thread_retval;
|
return &UE_thread_retval;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LOG_D(PHY,"Set rx_offset to 0 \n");
|
||||||
UE->rx_offset=0;
|
UE->rx_offset=0;
|
||||||
UE->proc.proc_rxtx[0].frame_rx++;
|
UE->proc.proc_rxtx[0].frame_rx++;
|
||||||
UE->proc.proc_rxtx[1].frame_rx++;
|
UE->proc.proc_rxtx[1].frame_rx++;
|
||||||
@@ -1079,6 +1087,8 @@ void *UE_thread(void *arg) {
|
|||||||
rxp,
|
rxp,
|
||||||
UE->frame_parms.samples_per_tti,
|
UE->frame_parms.samples_per_tti,
|
||||||
UE->frame_parms.nb_antennas_rx);
|
UE->frame_parms.nb_antennas_rx);
|
||||||
|
LOG_D(PHY,"grab signal for subframe %d offset %d Nbsamples %d \n", sf, UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0+(sf*UE->frame_parms.samples_per_tti),
|
||||||
|
UE->frame_parms.samples_per_tti);
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 );
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 );
|
||||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs );
|
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs );
|
||||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS_MISSING, UE->frame_parms.samples_per_tti - rxs);
|
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS_MISSING, UE->frame_parms.samples_per_tti - rxs);
|
||||||
@@ -1119,6 +1129,9 @@ void *UE_thread(void *arg) {
|
|||||||
rxp,
|
rxp,
|
||||||
UE->frame_parms.samples_per_tti-UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0,
|
UE->frame_parms.samples_per_tti-UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0,
|
||||||
UE->frame_parms.nb_antennas_rx);
|
UE->frame_parms.nb_antennas_rx);
|
||||||
|
|
||||||
|
LOG_D(PHY,"grab signal for subframe %d offset %d Nbsamples %d \n", sf, UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0+(sf*UE->frame_parms.samples_per_tti),
|
||||||
|
UE->frame_parms.samples_per_tti-UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0);
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, 0 );
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, 0 );
|
||||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs );
|
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs );
|
||||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS_MISSING, (UE->frame_parms.samples_per_tti-UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0) - rxs);
|
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS_MISSING, (UE->frame_parms.samples_per_tti-UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0) - rxs);
|
||||||
@@ -1152,18 +1165,37 @@ void *UE_thread(void *arg) {
|
|||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, 1 );
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, 1 );
|
||||||
// read in first symbol of next frame and adjust for timing drift
|
// read in first symbol of next frame and adjust for timing drift
|
||||||
|
for (i=0; i<UE->frame_parms.nb_antennas_rx; i++)
|
||||||
|
{
|
||||||
|
rxp[i] = (void*)&UE->common_vars.rxdata[i][0];
|
||||||
|
}
|
||||||
|
|
||||||
rxs = UE->rfdevice.trx_read_func(&UE->rfdevice,
|
rxs = UE->rfdevice.trx_read_func(&UE->rfdevice,
|
||||||
×tamp1,
|
×tamp1,
|
||||||
(void**)UE->common_vars.rxdata,
|
rxp,
|
||||||
UE->frame_parms.ofdm_symbol_size + UE->frame_parms.nb_prefix_samples0 - rx_off_diff,
|
UE->frame_parms.nb_prefix_samples0 - rx_off_diff,
|
||||||
UE->frame_parms.nb_antennas_rx);
|
UE->frame_parms.nb_antennas_rx);
|
||||||
|
|
||||||
|
for (i=0; i<UE->frame_parms.nb_antennas_rx; i++)
|
||||||
|
{
|
||||||
|
rxp[i] = (void*)&UE->common_vars.rxdata[i][UE->frame_parms.nb_prefix_samples0];
|
||||||
|
}
|
||||||
|
|
||||||
|
rxs = UE->rfdevice.trx_read_func(&UE->rfdevice,
|
||||||
|
×tamp1,
|
||||||
|
rxp,
|
||||||
|
UE->frame_parms.ofdm_symbol_size,
|
||||||
|
UE->frame_parms.nb_antennas_rx);
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, 0 );
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, 0 );
|
||||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs );
|
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs );
|
||||||
if (rxs != (UE->frame_parms.ofdm_symbol_size + UE->frame_parms.nb_prefix_samples0 - rx_off_diff)) {
|
if (rxs != (UE->frame_parms.ofdm_symbol_size)) {
|
||||||
LOG_E(PHY, "problem in rx 7! expect #samples=%d but got only %d! rx_off_diff=%d\n", UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0 - rx_off_diff, rxs, rx_off_diff);
|
LOG_E(PHY, "problem in rx 7! expect #samples=%d but got only %d! rx_off_diff=%d\n", UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0 - rx_off_diff, rxs, rx_off_diff);
|
||||||
exit_fun("problem in rx 7!");
|
exit_fun("problem in rx 7!");
|
||||||
return &UE_thread_retval;
|
return &UE_thread_retval;
|
||||||
}
|
}
|
||||||
|
UE->rx_offset_diff = rx_off_diff;
|
||||||
|
LOG_D(PHY,"SET rx_off_diff to %d\n",UE->rx_offset_diff);
|
||||||
rx_off_diff = 0;
|
rx_off_diff = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1232,17 +1264,21 @@ void *UE_thread(void *arg) {
|
|||||||
getchar();
|
getchar();
|
||||||
}
|
}
|
||||||
}// for sf=0..10
|
}// for sf=0..10
|
||||||
|
|
||||||
|
uint8_t proc_select = 9&1;
|
||||||
|
UE_rxtx_proc_t *proc = &UE->proc.proc_rxtx[proc_select];
|
||||||
|
|
||||||
if ((UE->rx_offset<(5*UE->frame_parms.samples_per_tti)) &&
|
if ((UE->rx_offset<(5*UE->frame_parms.samples_per_tti)) &&
|
||||||
(UE->rx_offset > RX_OFF_MIN) &&
|
(UE->rx_offset > 0) &&
|
||||||
(rx_correction_timer == 0)) {
|
(rx_correction_timer == 0)) {
|
||||||
rx_off_diff = -UE->rx_offset + RX_OFF_MIN;
|
rx_off_diff = -1 ;
|
||||||
LOG_D(PHY,"UE->rx_offset %d > %d, diff %d\n",UE->rx_offset,RX_OFF_MIN,rx_off_diff);
|
LOG_D(PHY,"AbsSubframe %d.%d UE->rx_offset %d > %d, diff %d\n",proc->frame_rx,proc->subframe_rx,UE->rx_offset,0,rx_off_diff);
|
||||||
rx_correction_timer = 5;
|
rx_correction_timer = 5;
|
||||||
} else if ((UE->rx_offset>(5*UE->frame_parms.samples_per_tti)) &&
|
} else if ((UE->rx_offset>(5*UE->frame_parms.samples_per_tti)) &&
|
||||||
(UE->rx_offset < ((10*UE->frame_parms.samples_per_tti)-RX_OFF_MIN)) &&
|
(UE->rx_offset < ((10*UE->frame_parms.samples_per_tti))) &&
|
||||||
(rx_correction_timer == 0)) { // moving to the left so drop rx_off_diff samples
|
(rx_correction_timer == 0)) { // moving to the left so drop rx_off_diff samples
|
||||||
rx_off_diff = 10*UE->frame_parms.samples_per_tti - RX_OFF_MIN - UE->rx_offset;
|
rx_off_diff = 1;
|
||||||
LOG_D(PHY,"UE->rx_offset %d < %d, diff %d\n",UE->rx_offset,10*UE->frame_parms.samples_per_tti-RX_OFF_MIN,rx_off_diff);
|
LOG_D(PHY,"AbsSubframe %d.%d UE->rx_offset %d < %d, diff %d\n",proc->frame_rx,proc->subframe_rx,UE->rx_offset,10*UE->frame_parms.samples_per_tti,rx_off_diff);
|
||||||
|
|
||||||
rx_correction_timer = 5;
|
rx_correction_timer = 5;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N
|
|||||||
//dlsch_abstraction(PHY_vars_UE_g[UE_id]->sinr_dB, rb_alloc, 8);
|
//dlsch_abstraction(PHY_vars_UE_g[UE_id]->sinr_dB, rb_alloc, 8);
|
||||||
// fill in perfect channel estimates
|
// fill in perfect channel estimates
|
||||||
channel_desc_t *desc1 = eNB2UE[att_eNB_id][UE_id][CC_id];
|
channel_desc_t *desc1 = eNB2UE[att_eNB_id][UE_id][CC_id];
|
||||||
int32_t **dl_channel_est = PHY_vars_UE_g[UE_id][CC_id]->common_vars.dl_ch_estimates[0];
|
int32_t **dl_channel_est = PHY_vars_UE_g[UE_id][CC_id]->common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0];
|
||||||
// double scale = pow(10.0,(enb_data[att_eNB_id]->tx_power_dBm + eNB2UE[att_eNB_id][UE_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id]->rx_total_gain_dB)/20.0);
|
// double scale = pow(10.0,(enb_data[att_eNB_id]->tx_power_dBm + eNB2UE[att_eNB_id][UE_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id]->rx_total_gain_dB)/20.0);
|
||||||
double scale = pow(10.0,(frame_parms->pdsch_config_common.referenceSignalPower+eNB2UE[att_eNB_id][UE_id][CC_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB)/20.0);
|
double scale = pow(10.0,(frame_parms->pdsch_config_common.referenceSignalPower+eNB2UE[att_eNB_id][UE_id][CC_id]->path_loss_dB + (double) PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB)/20.0);
|
||||||
LOG_D(OCM,"scale =%lf (%d dB)\n",scale,(int) (20*log10(scale)));
|
LOG_D(OCM,"scale =%lf (%d dB)\n",scale,(int) (20*log10(scale)));
|
||||||
|
|||||||
@@ -1043,19 +1043,19 @@ l2l1_task (void *args_p)
|
|||||||
|
|
||||||
write_output ("dlchan0.m",
|
write_output ("dlchan0.m",
|
||||||
"dlch0",
|
"dlch0",
|
||||||
&(PHY_vars_UE_g[0][0]->common_vars.dl_ch_estimates[0][0][0]),
|
&(PHY_vars_UE_g[0][0]->common_vars.common_vars_rx_data_per_thread[0].dl_ch_estimates[0][0][0]),
|
||||||
(6
|
(6
|
||||||
* (PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size)),
|
* (PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size)),
|
||||||
1, 1);
|
1, 1);
|
||||||
write_output ("dlchan1.m",
|
write_output ("dlchan1.m",
|
||||||
"dlch1",
|
"dlch1",
|
||||||
&(PHY_vars_UE_g[0][0]->common_vars.dl_ch_estimates[1][0][0]),
|
&(PHY_vars_UE_g[0][0]->common_vars.common_vars_rx_data_per_thread[0].dl_ch_estimates[1][0][0]),
|
||||||
(6
|
(6
|
||||||
* (PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size)),
|
* (PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size)),
|
||||||
1, 1);
|
1, 1);
|
||||||
write_output ("dlchan2.m",
|
write_output ("dlchan2.m",
|
||||||
"dlch2",
|
"dlch2",
|
||||||
&(PHY_vars_UE_g[0][0]->common_vars.dl_ch_estimates[2][0][0]),
|
&(PHY_vars_UE_g[0][0]->common_vars.common_vars_rx_data_per_thread[0].dl_ch_estimates[2][0][0]),
|
||||||
(6
|
(6
|
||||||
* (PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size)),
|
* (PHY_vars_UE_g[0][0]->frame_parms.ofdm_symbol_size)),
|
||||||
1, 1);
|
1, 1);
|
||||||
|
|||||||
@@ -450,6 +450,8 @@ void get_simulation_options(int argc, char *argv[])
|
|||||||
|
|
||||||
case 'a':
|
case 'a':
|
||||||
abstraction_flag = 1;
|
abstraction_flag = 1;
|
||||||
|
printf("FATAL: -a flag not functional for the moment.\nWe are working on fixing the abstraction mode.\n");
|
||||||
|
exit(1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'A':
|
case 'A':
|
||||||
|
|||||||
@@ -859,13 +859,13 @@ void run(int argc, char *argv[])
|
|||||||
&& (abstraction_flag == 0) && (oai_emulation.info.n_frames == 1)) {
|
&& (abstraction_flag == 0) && (oai_emulation.info.n_frames == 1)) {
|
||||||
|
|
||||||
write_output ("dlchan0.m", "dlch0",
|
write_output ("dlchan0.m", "dlch0",
|
||||||
&(PHY_vars_UE_g[0]->lte_ue_common_vars.dl_ch_estimates[0][0][0]),
|
&(PHY_vars_UE_g[0]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[0][0][0]),
|
||||||
(6 * (PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)), 1, 1);
|
(6 * (PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)), 1, 1);
|
||||||
write_output ("dlchan1.m", "dlch1",
|
write_output ("dlchan1.m", "dlch1",
|
||||||
&(PHY_vars_UE_g[0]->lte_ue_common_vars.dl_ch_estimates[1][0][0]),
|
&(PHY_vars_UE_g[0]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[1][0][0]),
|
||||||
(6 * (PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)), 1, 1);
|
(6 * (PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)), 1, 1);
|
||||||
write_output ("dlchan2.m", "dlch2",
|
write_output ("dlchan2.m", "dlch2",
|
||||||
&(PHY_vars_UE_g[0]->lte_ue_common_vars.dl_ch_estimates[2][0][0]),
|
&(PHY_vars_UE_g[0]->lte_ue_common_vars.common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[2][0][0]),
|
||||||
(6 * (PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)), 1, 1);
|
(6 * (PHY_vars_UE_g[0]->lte_frame_parms.ofdm_symbol_size)), 1, 1);
|
||||||
write_output ("pbch_rxF_comp0.m", "pbch_comp0",
|
write_output ("pbch_rxF_comp0.m", "pbch_comp0",
|
||||||
PHY_vars_UE_g[0]->lte_ue_pbch_vars[0]->rxdataF_comp[0], 6 * 12 * 4, 1, 1);
|
PHY_vars_UE_g[0]->lte_ue_pbch_vars[0]->rxdataF_comp[0], 6 * 12 * 4, 1, 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user