diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index e4d3acf4b1c976540a95e6cbd033bfa26b9d9ecd..d7cd81cf58823de1791c4a195af33a4ad994052a 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -130,6 +130,9 @@ else (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l")
     file(STRINGS "/proc/cpuinfo" CPUINFO REGEX flags LIMIT_COUNT 1)
     if (CPUINFO MATCHES "avx2")
       set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -mavx2")
+      set(COMPILATION_AVX2 "True")
+    else()
+      set(COMPILATION_AVX2 "False")
     endif()
     if (CPUINFO MATCHES "sse4_1")
       set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -msse4.1")
@@ -558,6 +561,7 @@ elseif (${RF_BOARD} STREQUAL "OAI_LMSSDR")
   include_directories("/usr/local/include/lime")
   include_directories("/usr/include/lime")
   LINK_DIRECTORIES("/usr/lib/x86_64-linux-gnu")
+  LINK_DIRECTORIES("/usr/local/lib")
   LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/lmsSDR")
   LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/lms7002m")
   LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/Si5351C")
@@ -1116,6 +1120,11 @@ set(PHY_SRC
 if (${SMBV})
   set(PHY_SRC "${PHY_SRC} ${OPENAIR1_DIR}/PHY/TOOLS/smbv.c")
 endif  (${SMBV})
+
+if (${COMPILATION_AVX2} STREQUAL "True")
+  set(PHY_SRC ${PHY_SRC} ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c)
+endif ()
+
 add_library(PHY ${PHY_SRC})
 
 #Layer 2 library
@@ -2051,22 +2060,22 @@ endforeach(myExe)
 
 #ensure that the T header files are generated before targets depending on them
 if (${T_TRACER})
-  add_dependencies(lte-softmodem generate_T)
-  add_dependencies(lte-softmodem-nos1 generate_T)
-  add_dependencies(rrh_gw generate_T)
-  add_dependencies(oaisim generate_T)
-  add_dependencies(oaisim_nos1 generate_T)
-  add_dependencies(dlsim generate_T)
-  add_dependencies(dlsim_tm4 generate_T)
-  add_dependencies(dlsim_tm7 generate_T)
-  add_dependencies(ulsim generate_T)
-  add_dependencies(pbchsim generate_T)
-  add_dependencies(scansim generate_T)
-  add_dependencies(mbmssim generate_T)
-  add_dependencies(pdcchsim generate_T)
-  add_dependencies(pucchsim generate_T)
-  add_dependencies(prachsim generate_T)
-  add_dependencies(syncsim generate_T)
+  foreach(i
+        #all "add_executable" definitions (except tests, rb_tool, updatefw)
+        lte-softmodem lte-softmodem-nos1 rrh_gw oaisim oaisim_nos1
+        dlsim_tm4 dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim
+        pdcchsim pucchsim prachsim syncsim
+        #all "add_library" definitions
+        ITTI RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB
+        oai_exmimodevif oai_usrpdevif oai_bladerfdevif oai_lmssdrdevif
+        oai_eth_transpro
+        FLPT_MSG ASYNC_IF FLEXRAN_AGENT HASHTABLE MSC UTIL OMG_SUMO SECU_OSA
+        SECU_CN SCHED_LIB PHY L2 default_sched remote_sched RAL MIH CN_UTILS
+        GTPV1U SCTP_CLIENT UDP LIB_NAS_UE LFDS LFDS7 SIMU SIMU_ETH OPENAIR0_LIB)
+    if (TARGET ${i})
+      add_dependencies(${i} generate_T)
+    endif()
+  endforeach(i)
 endif (${T_TRACER})
 
 ##################################################
@@ -2091,11 +2100,16 @@ endforeach()
 # force castxml and clang compilation with gnu89 standard
 # we can't use cXX standard as pthread_rwlock_t is gnu standard
 list(APPEND itti_compiler_options "-std=gnu89")
-
 set (ITTI_H ${ITTI_DIR}/intertask_interface_types.h)
+if(EXISTS /usr/bin/gccxml)
+   set(xml_command gccxml ${itti_compiler_options} -fxml=${OPENAIR_BIN_DIR}/messages.xml ${ITTI_H})
+else()
+   set(xml_command castxml --castxml-gccxml ${itti_compiler_options} ${ITTI_H} -o ${OPENAIR_BIN_DIR}/messages.xml)
+endif()
+
 add_custom_command (
   OUTPUT ${OPENAIR_BIN_DIR}/messages.xml
-  COMMAND gccxml ${itti_compiler_options} -fxml=${OPENAIR_BIN_DIR}/messages.xml ${ITTI_H}
+  COMMAND ${xml_command}
   DEPENDS ${S1AP_OAI_generated} ${RRC_FULL_DIR}/asn1_constants.h
   )
 
diff --git a/cmake_targets/autotests/README.txt b/cmake_targets/autotests/README.txt
index 8156e31beeb8bc77c4cbe5f49b8a22cd42d5f946..b94d99bff7b5a264ada3038a0027c3e6b3b786b1 100644
--- a/cmake_targets/autotests/README.txt
+++ b/cmake_targets/autotests/README.txt
@@ -213,7 +213,7 @@ Obj.#   Case#   Test#	Description
 01      63      04      Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
 01      63      05      Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
 
-01      65      00      lte-softmodem tests with BladeRF RF as eNB and ALU EPC w/ Bandrich COTS UE for 1TX/1RX
+01      65              lte-softmodem tests with BladeRF RF as eNB and ALU EPC w/ Bandrich COTS UE for 1TX/1RX
 01      65      00      Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
 01      65      01      Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
 01      65      02      Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
@@ -222,7 +222,7 @@ Obj.#   Case#   Test#	Description
 01      65      05      Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
 
 
-01      70      00      lte-softmodem tests with SoDeRa RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
+01      70              lte-softmodem tests with SoDeRa RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
 01      70      00      Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
 01      70      01      Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
 01      70      02      Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
@@ -231,7 +231,7 @@ Obj.#   Case#   Test#	Description
 01      70      05      Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
 
 
-01      75      00      lte-softmodem + RRU (NGFI IF4P5, RAW) tests with B210 RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
+01      75              lte-softmodem + RRU (NGFI IF4P5, RAW) tests with B210 RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
 01      75      00      Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
 01      75      01      Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
 01      75      02      Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
@@ -239,7 +239,21 @@ Obj.#   Case#   Test#	Description
 01      75      04      Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
 01      75      05      Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
 
-01      80      00      lte-softmodem + RRU (NGFI) tests with BladeRF RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
+01      76              lte-softmodem + RRU (NGFI IF4P5, UDP) tests with B210 RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
+01      76      00      Band 7 FDD 5MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
+01      76      01      Band 7 FDD 10MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
+01      76      02      Band 7 FDD 20MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
+01      76      03      Band 7 FDD 5MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
+01      76      04      Band 7 FDD 10MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
+01      76      05      Band 7 FDD 20MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
+01      76      06      Band 7 FDD 5MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
+01      76      07      Band 7 FDD 10MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
+01      76      08      Band 7 FDD 20MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
+01      76      09      Band 7 FDD 5MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
+01      76      10      Band 7 FDD 10MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
+01      76      11      Band 7 FDD 20MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
+
+01      80              lte-softmodem + RRU (NGFI) tests with BladeRF RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
 01      80      00      Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
 01      80      01      Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
 01      80      02      Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
@@ -247,7 +261,7 @@ Obj.#   Case#   Test#	Description
 01      80      04      Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
 01      80      05      Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
 
-01      85      00      lte-softmodem + RRU (NGFI) tests with USRP X310 RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
+01      85              lte-softmodem + RRU (NGFI) tests with USRP X310 RF as eNB and ALU EPC w/ Bandrich COTS UE for TX/1RX
 01      85      00      Band 7 FDD 5MHz UL Throughput for 300 sec for 1TX/1RX
 01      85      01      Band 7 FDD 10MHz UL Throughput for 300 sec for 1TX/1RX
 01      85      02      Band 7 FDD 20MHz UL Throughput for 300 sec for 1TX/1RX
@@ -255,6 +269,32 @@ Obj.#   Case#   Test#	Description
 01      85      04      Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
 01      85      05      Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
 
+01      86              lte-softmodem tests with USRP B210 RF as eNB and ALU EPC w/ Huawei e3276 COTS UE for 1TX/1RX (TM1), 2TX/2RX (TM2)
+01      86      00      Band 38 TDD 5MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
+01      86      01      Band 38 TDD 10MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
+01      86      02      Band 38 TDD 20MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
+01      86      03      Band 38 TDD 5MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
+01      86      04      Band 38 TDD 10MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
+01      86      05      Band 38 TDD 20MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
+01      86      06      Band 38 TDD 5MHz UL Throughput (UDP) for 300 sec for 2TX/2RX (TM2)
+01      86      07      Band 38 TDD 10MHz UL Throughput (UDP) for 300 sec for 2TX/2RX (TM2)
+01      86      08      Band 38 TDD 20MHz UL Throughput (UDP) for 300 sec for 2TX/2RX (TM2)
+01      86      09      Band 38 TDD 5MHz DL Throughput (UDP) for 300 sec for 2TX/2RX (TM2)
+01      86      10      Band 38 TDD 10MHz DL Throughput (UDP) for 300 sec for 2TX/2RX (TM2)
+01      86      11      Band 38 TDD 20MHz DL Throughput (UDP) for 300 sec for 2TX/2RX (TM2)
+01      86      12      Band 38 TDD 5MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
+01      86      13      Band 38 TDD 10MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
+01      86      14      Band 38 TDD 20MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
+01      86      15      Band 38 TDD 5MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
+01      86      16      Band 38 TDD 10MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
+01      86      17      Band 38 TDD 20MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
+01      86      18      Band 38 TDD 5MHz UL Throughput (TCP) for 300 sec for 2TX/2RX  (TM2)
+01      86      19      Band 38 TDD 10MHz UL Throughput (TCP) for 300 sec for 2TX/2RX (TM2)
+01      86      20      Band 38 TDD 20MHz UL Throughput (TCP) for 300 sec for 2TX/2RX (TM2)
+01      86      21      Band 38 TDD 5MHz DL Throughput (TCP) for 300 sec for 2TX/2RX (TM2)
+01      86      22      Band 38 TDD 10MHz DL Throughput (TCP) for 300 sec for 2TX/2RX (TM2)
+01      86      23      Band 38 TDD 20MHz DL Throughput (TCP) for 300 sec for 2TX/2RX (TM2)
+
 02      55              lte-softmodem tests with USRP B210 RF as eNB and ALU EPC w/ Sony Experia M4 COTS UE for 1TX/1RX and 2TX/2RX (TM2)
 02      55      00      Band 7 FDD 5MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
 02      55      01      Band 7 FDD 10MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml
index f37c2654627b119aa14f2ee12aeb3709bea7beb9..0c80e960a45286fe34d3387d3c0783267cb63dc7 100644
--- a/cmake_targets/autotests/test_case_list.xml
+++ b/cmake_targets/autotests/test_case_list.xml
@@ -8664,6 +8664,43 @@ c
     <nruns>10</nruns>
     </testCase> 
 
+  <testCase id="017600"></testCase>
+  <testCase id="017601"></testCase>
+  <testCase id="017602"></testCase>
+  <testCase id="017603"></testCase>
+  <testCase id="017604"></testCase>
+  <testCase id="017605"></testCase>
+  <testCase id="017606"></testCase>
+  <testCase id="017607"></testCase>
+  <testCase id="017608"></testCase>
+  <testCase id="017609"></testCase>
+  <testCase id="017610"></testCase>
+  <testCase id="017611"></testCase>
+
+  <testCase id="018600"></testCase>
+  <testCase id="018601"></testCase>
+  <testCase id="018602"></testCase>
+  <testCase id="018603"></testCase>
+  <testCase id="018604"></testCase>
+  <testCase id="018605"></testCase>
+  <testCase id="018606"></testCase>
+  <testCase id="018607"></testCase>
+  <testCase id="018608"></testCase>
+  <testCase id="018609"></testCase>
+  <testCase id="018610"></testCase>
+  <testCase id="018611"></testCase>
+  <testCase id="018612"></testCase>
+  <testCase id="018613"></testCase>
+  <testCase id="018614"></testCase>
+  <testCase id="018615"></testCase>
+  <testCase id="018616"></testCase>
+  <testCase id="018617"></testCase>
+  <testCase id="018618"></testCase>
+  <testCase id="018619"></testCase>
+  <testCase id="018620"></testCase>
+  <testCase id="018621"></testCase>
+  <testCase id="018622"></testCase>
+  <testCase id="018623"></testCase>
 
   <testCase id="025500" >
     <class>lte-softmodem</class>
diff --git a/cmake_targets/autotests/v2/actions/start_3276.bash b/cmake_targets/autotests/v2/actions/start_3276.bash
new file mode 100644
index 0000000000000000000000000000000000000000..c6fbdcedd95a7ab20b821f0d6e0236860a3f3573
--- /dev/null
+++ b/cmake_targets/autotests/v2/actions/start_3276.bash
@@ -0,0 +1,11 @@
+#enable control+C reception (to be refined if it does not work)
+stty isig intr ^C
+
+cd /tmp/oai_test_setup/oai
+source oaienv
+cd cmake_targets/autotests/v2/actions
+sudo python start_3276.py
+
+sudo wvdial -C wvdial.3276.conf || true
+
+sudo python stop_3276.py
diff --git a/cmake_targets/autotests/v2/actions/start_3276.py b/cmake_targets/autotests/v2/actions/start_3276.py
new file mode 100644
index 0000000000000000000000000000000000000000..cf0629213aa012ea25b76ead78c6af332fe15c38
--- /dev/null
+++ b/cmake_targets/autotests/v2/actions/start_3276.py
@@ -0,0 +1,59 @@
+import time
+
+from modem import quit, Modem
+
+try:
+    modem = Modem("/dev/ttyUSB0")
+
+    #test that modem is there
+    print "INFO: check modem's presence"
+    modem.send('AT')
+    if modem.wait().ret != True:
+        print "ERROR: no modem?"
+        quit(1)
+
+    #first deactivate
+    print "INFO: deactivate the modem"
+    modem.send('AT+CFUN=0')
+    if modem.wait().ret != True:
+        print "ERROR: failed deactivating the modem"
+        quit(1)
+
+    #activate the modem
+    print "INFO: activate the modem"
+    modem.send('AT+CFUN=1')
+    if modem.wait().ret != True:
+        print "ERROR: failed asking modem for activation"
+        quit(1)
+
+    #wait for modem to be connected
+    #timeout after one minute
+    print "INFO: wait for modem to be connected (timeout: one minute)"
+    start_time = time.time()
+    while True:
+        modem.send('AT+CGATT?')
+        r = modem.wait()
+        if r.ret != True:
+            print "ERROR: failed checking attachment status of modem"
+            quit(1)
+        if "+CGATT: 1" in r.data:
+            break
+        if not "CGATT: 0" in r.data:
+            print "ERROR: bad data when checking attachment status of modem"
+            quit(1)
+        time.sleep(0.1)
+        if time.time() > start_time + 60:
+            print "ERROR: modem not connected after one minute, close modem"
+            modem.send('AT+CFUN=0')
+            r = modem.wait()
+            if r.ret != True:
+                print "ERROR: closing modem failed"
+            quit(1)
+
+    print "INFO: modem is connected"
+
+except BaseException, e:
+    print "ERROR: " + str(e)
+    quit(1)
+
+quit(0)
diff --git a/cmake_targets/autotests/v2/actions/stop_3276.py b/cmake_targets/autotests/v2/actions/stop_3276.py
new file mode 100644
index 0000000000000000000000000000000000000000..3eb7e889c6b91020028d17e6844523f79c2f58d3
--- /dev/null
+++ b/cmake_targets/autotests/v2/actions/stop_3276.py
@@ -0,0 +1,29 @@
+import time
+
+from modem import quit, Modem
+
+try:
+    modem = Modem("/dev/ttyUSB0")
+
+    #test that modem is there
+    print "INFO: check modem's presence"
+    modem.send('AT')
+    r = modem.wait()
+    if r.ret != True and "NO CARRIER" not in r.data:
+        print "ERROR: no modem?"
+        quit(1)
+    if "NO CARRIER" in r.data:
+        print "WARNING: 'NO CARRIER' detected, not sure if handled correctly"
+
+    #deactivate the modem
+    print "INFO: deactivate the modem"
+    modem.send('AT+CFUN=0')
+    if modem.wait().ret != True:
+        print "ERROR: failed asking modem for deactivation"
+        quit(1)
+
+except BaseException, e:
+    print "ERROR: " + str(e)
+    quit(1)
+
+quit(0)
diff --git a/cmake_targets/autotests/v2/actions/wvdial.3276.conf b/cmake_targets/autotests/v2/actions/wvdial.3276.conf
new file mode 100644
index 0000000000000000000000000000000000000000..81fedc8df212d7183b2902373a8151ad4f48c171
--- /dev/null
+++ b/cmake_targets/autotests/v2/actions/wvdial.3276.conf
@@ -0,0 +1,27 @@
+[Dialer Defaults]
+Modem = /dev/ttyUSB0
+ISDN = off
+Modem Type = Analog Modem
+Baud = 9600
+Init1 = ATZ
+Init2 = AT&F &D2 &C1
+Init3 = AT+CGDCONT=1,"IP","oai.ipv4"
+Phone = *99#
+Phone1 = 
+Phone2 = 
+Phone3 = 
+Phone4 = 
+Ask Password = off
+Password = ''
+Username = ImaginLab
+Auto Reconnect = off
+Abort on Busy = off
+Carrier Check = on
+Check Def Route = on
+Abort on No Dialtone = on
+Stupid Mode = on
+Idle Seconds = 0
+Auto DNS = on
+;Minimize = off
+;Dock = off
+;Do NOT edit this file by hand!
diff --git a/cmake_targets/autotests/v2/alu_test.py b/cmake_targets/autotests/v2/alu_test.py
index 7992ce7f3ca460654a7d577073309116f4471e03..762e414a95f93ea988ed253cfd9d2abe991f8269 100644
--- a/cmake_targets/autotests/v2/alu_test.py
+++ b/cmake_targets/autotests/v2/alu_test.py
@@ -9,18 +9,24 @@ class alu_test:
                  openair,
                  user, password,
                  log_subdir,
-                 env):
-        self.epc_machine  = epc
-        self.enb_machine  = enb
-        self.ue_machine   = ue
-        self.openair_dir  = openair
-        self.oai_user     = user
-        self.oai_password = password
-        self.env          = env
-
-        self.task_hss = None
-        self.task_enb = None
-        self.task_ue  = None
+                 env,
+                 enb_rru = "",
+                 enb_rcc = ""):
+        self.epc_machine      = epc
+        self.enb_machine      = enb
+        self.ue_machine       = ue
+        self.openair_dir      = openair
+        self.oai_user         = user
+        self.oai_password     = password
+        self.env              = env
+        self.enb_rru_machine  = enb_rru
+        self.enb_rcc_machine  = enb_rcc
+
+        self.task_hss     = None
+        self.task_enb     = None
+        self.task_ue      = None
+        self.task_rru_enb = None
+        self.task_rcc_enb = None
 
         self.logdir = openair + '/cmake_targets/autotests/log/' + log_subdir
         quickshell('mkdir -p ' + self.logdir)
@@ -40,6 +46,10 @@ class alu_test:
             self.task_enb.kill()
         if self.task_ue != None and self.task_ue.alive():
             self.task_ue.kill()
+        if self.task_rru_enb != None and self.task_rru_enb.alive():
+            self.task_rru_enb.kill()
+        if self.task_rcc_enb != None and self.task_rcc_enb.alive():
+            self.task_rcc_enb.kill()
 
     ##########################################################################
     # start_epc
@@ -101,8 +111,8 @@ class alu_test:
     ##########################################################################
     # compile_enb
     ##########################################################################
-    def compile_enb(self, build_arguments):
-        log("INFO: ALU test: compile softmodem")
+    def compile_enb(self, build_arguments, log_suffix=""):
+        log("INFO: ALU test: compile softmodem on " + self.enb_machine)
         envcomp = list(self.env)
         envcomp.append('BUILD_ARGUMENTS="' + build_arguments + '"')
         #we don't care about BUILD_OUTPUT but required (TODO: change that)
@@ -120,7 +130,8 @@ class alu_test:
                 self.oai_user,
                 self.oai_password,
                 envcomp,
-                self.logdir + "/compile_softmodem." + self.enb_machine,
+                self.logdir + "/compile_softmodem." + log_suffix + \
+                    self.enb_machine,
                 post_action=post_action)
         ret = task.wait()
         if ret != 0:
@@ -163,49 +174,107 @@ class alu_test:
             #os._exit(1)
 
     ##########################################################################
-    # start_bandrich_ue
+    # start_enb_rru_rcc
     ##########################################################################
-    def start_bandrich_ue(self):
-        log("INFO: ALU test: start bandrich UE")
-        self.task_ue = Task("actions/start_bandrich.bash",
-                "start_bandrich",
+    def start_enb_rru_rcc(self, rru_config_file, rcc_config_file):
+        #copy wanted configuration files
+        quickshell("sshpass -p " + self.oai_password +
+                   " scp config/" + rru_config_file + " " +
+                   self.oai_user + "@" + self.enb_rru_machine+":/tmp/enb.conf")
+        quickshell("sshpass -p " + self.oai_password +
+                   " scp config/" + rcc_config_file + " " +
+                   self.oai_user + "@" + self.enb_rcc_machine+":/tmp/enb.conf")
+
+        #run RRU/RCC softmodem
+        log("INFO: ALU test: run RRU softmodem with configuration file " +
+            rru_config_file)
+        self.task_rru_enb = Task("actions/run_enb.bash",
+                "run_RRU_softmodem",
+                self.enb_rru_machine,
+                self.oai_user,
+                self.oai_password,
+                self.env,
+                self.logdir + "/run_softmodem." + self.enb_rru_machine,
+                event=self.event)
+        self.task_rru_enb.waitlog('[RRH] binding to')
+        log("INFO: ALU test: run RCC softmodem with configuration file " +
+            rcc_config_file)
+        self.task_rcc_enb = Task("actions/run_enb.bash",
+                "run_RCC_softmodem",
+                self.enb_rcc_machine,
+                self.oai_user,
+                self.oai_password,
+                self.env,
+                self.logdir + "/run_softmodem." + self.enb_rcc_machine,
+                event=self.event)
+        self.task_rcc_enb.waitlog('[BBU] local ip addr')
+        #wait for RRU and RCC to be connected
+        self.task_rru_enb.waitlog('devices ok (eNB_thread_asynch_rx)')
+
+    ##########################################################################
+    # stop_enb_rru_rcc
+    ##########################################################################
+    def stop_enb_rru_rcc(self):
+        log("INFO: ALU test: stop RRU/RCC softmodem")
+        self.task_rru_enb.sendnow("%c" % 3)
+        ret = self.task_rru_enb.wait()
+        if ret != 0:
+            log("ERROR: ALU test: RRU softmodem failed")
+            #not sure if we have to quit here or not
+            #os._exit(1)
+        self.task_rcc_enb.sendnow("%c" % 3)
+        ret = self.task_rcc_enb.wait()
+        if ret != 0:
+            log("ERROR: ALU test: RCC softmodem failed")
+            #not sure if we have to quit here or not
+            #os._exit(1)
+
+    ##########################################################################
+    # start_ue
+    ##########################################################################
+    def start_ue(self, ue):
+        log("INFO: ALU test: start " + ue + " UE")
+        self.task_ue = Task("actions/start_" + ue + ".bash",
+                "start_" + ue,
                 self.ue_machine,
                 self.oai_user,
                 self.oai_password,
                 self.env,
-                self.logdir + "/start_bandrich." + self.ue_machine,
+                self.logdir + "/start_" + ue + "." + self.ue_machine,
                 event=self.event)
         self.task_ue.waitlog("local  IP address", event=self.event)
         self.event.wait()
 
         #at this point one task has died or we have the line in the log
         if self.task_ue.waitlog_state != WAITLOG_SUCCESS:
-            log("ERROR: ALU test: bandrich UE did not connect")
+            log("ERROR: ALU test: " + ue + " UE did not connect")
             raise TestFailed()
 
         self.event.clear()
 
-        if (    not self.task_enb.alive() or
+        if (    (self.task_enb != None and not self.task_enb.alive()) or
+                (self.task_rru_enb!=None and not self.task_rru_enb.alive()) or
+                (self.task_rcc_enb!=None and not self.task_rcc_enb.alive()) or
                 not self.task_hss.alive() or
                 not self.task_ue.alive()):
             log("ERROR: ALU test: eNB, HSS or UE task died")
             raise TestFailed()
 
-        #get bandrich UE IP
+        #get UE IP
         l = open(self.task_ue.logfile, "r").read()
-        self.bandrich_ue_ip = re.search("local  IP address (.*)\n", l) \
-                                .groups()[0]
-        log("INFO: ALU test: bandrich UE IP address: " + self.bandrich_ue_ip)
+        self.ue_ip = re.search("local  IP address (.*)\n", l) \
+                       .groups()[0]
+        log("INFO: ALU test: " + ue + " UE IP address: " + self.ue_ip)
 
     ##########################################################################
-    # stop_bandrich_ue
+    # stop_ue
     ##########################################################################
-    def stop_bandrich_ue(self):
-        log("INFO: ALU test: stop bandrich UE")
+    def stop_ue(self, ue):
+        log("INFO: ALU test: stop " + ue + " UE")
         self.task_ue.sendnow("%c" % 3)
         ret = self.task_ue.wait()
         if ret != 0:
-            log("ERROR: ALU test: task bandrich UE failed")
+            log("ERROR: ALU test: task " + ue + " UE failed")
             #not sure if we have to quit here or not
             #os._exit(1)
 
@@ -250,14 +319,20 @@ class alu_test:
         self.event.wait()
         log("DEBUG: event.wait() done")
 
-        if (    not self.task_enb.alive() or
+        if (    (self.task_enb != None and not self.task_enb.alive()) or
+                (self.task_rru_enb!=None and not self.task_rru_enb.alive()) or
+                (self.task_rcc_enb!=None and not self.task_rcc_enb.alive()) or
                 not self.task_hss.alive() or
                 not self.task_ue.alive()):
             log("ERROR: unexpected task exited, test failed, kill all")
             if task_traffic_client.alive():
                 task_traffic_client.kill()
-            if self.task_enb.alive():
+            if (self.task_enb != None and self.task_enb.alive()):
                 self.task_enb.kill()
+            if (self.task_rru_enb != None and self.task_rru_enb.alive()):
+                self.task_rru_enb.kill()
+            if (self.task_rcc_enb != None and self.task_rcc_enb.alive()):
+                self.task_rcc_enb.kill()
             if self.task_ue.alive():
                 self.task_ue.kill()
 
@@ -277,7 +352,9 @@ class alu_test:
 
         self.event.clear()
 
-        if (    not self.task_enb.alive() or
+        if (    (self.task_enb != None and not self.task_enb.alive()) or
+                (self.task_rru_enb!=None and not self.task_rru_enb.alive()) or
+                (self.task_rcc_enb!=None and not self.task_rcc_enb.alive()) or
                 not self.task_hss.alive() or
                 not self.task_ue.alive()):
             log("ERROR: ALU test: eNB, HSS or UE task died")
@@ -286,47 +363,47 @@ class alu_test:
     ##########################################################################
     # dl_tcp
     ##########################################################################
-    def dl_tcp(self):
-        self._do_traffic("bandrich downlink TCP",
-                         "server_tcp", self.ue_machine, self.bandrich_ue_ip,
+    def dl_tcp(self, ue):
+        self._do_traffic(ue + " downlink TCP",
+                         "server_tcp", self.ue_machine, self.ue_ip,
                          "client_tcp", self.epc_machine,
                          "Server listening on TCP port 5001",
-                         "bandrich_downlink_tcp_server",
-                         "bandrich_downlink_tcp_client")
+                         ue + "_downlink_tcp_server",
+                         ue + "_downlink_tcp_client")
 
     ##########################################################################
     # ul_tcp
     ##########################################################################
-    def ul_tcp(self):
-        self._do_traffic("bandrich uplink TCP",
+    def ul_tcp(self, ue):
+        self._do_traffic(ue + " uplink TCP",
                          "server_tcp", self.epc_machine, "192.172.0.1",
                          "client_tcp", self.ue_machine,
                          "Server listening on TCP port 5001",
-                         "bandrich_uplink_tcp_server",
-                         "bandrich_uplink_tcp_client")
+                         ue + "_uplink_tcp_server",
+                         ue + "_uplink_tcp_client")
 
     ##########################################################################
     # dl_udp
     ##########################################################################
-    def dl_udp(self, bandwidth):
-        self._do_traffic("bandrich downlink UDP",
-                         "server_udp", self.ue_machine, self.bandrich_ue_ip,
+    def dl_udp(self, ue, bandwidth):
+        self._do_traffic(ue + " downlink UDP",
+                         "server_udp", self.ue_machine, self.ue_ip,
                          "client_udp", self.epc_machine,
                          "Server listening on UDP port 5001",
-                         "bandrich_downlink_udp_server",
-                         "bandrich_downlink_udp_client",
+                         ue + "_downlink_udp_server",
+                         ue + "_downlink_udp_client",
                          udp_bandwidth=bandwidth)
 
     ##########################################################################
     # ul_udp
     ##########################################################################
-    def ul_udp(self, bandwidth):
-        self._do_traffic("bandrich uplink UDP",
+    def ul_udp(self, ue, bandwidth):
+        self._do_traffic(ue + " uplink UDP",
                          "server_udp", self.epc_machine, "192.172.0.1",
                          "client_udp", self.ue_machine,
                          "Server listening on UDP port 5001",
-                         "bandrich_uplink_udp_server",
-                         "bandrich_uplink_udp_client",
+                         ue + "_uplink_udp_server",
+                         ue + "_uplink_udp_client",
                          udp_bandwidth=bandwidth)
 
 ##############################################################################
@@ -334,22 +411,72 @@ class alu_test:
 ##############################################################################
 
 def run_b210_alu(tests, openair_dir, oai_user, oai_password, env):
-    if not do_tests(tests['b210']['alu']):
-        return
-
-    #compile eNB
 
-    alu = alu_test(epc='amerique', enb='hutch', ue='stevens',
-                   openair=openair_dir,
-                   user=oai_user, password=oai_password,
-                   log_subdir='enb_tests/b210_alu/compile_enb',
-                   env=env)
+    #compile eNB (two cases: one for FDD and one for TDD)
+
+    if do_tests(tests['b210']['alu']['fdd']):
+        alu = alu_test(epc='amerique', enb='hutch', ue='stevens',
+                       openair=openair_dir,
+                       user=oai_user, password=oai_password,
+                       log_subdir='enb_tests/b210_alu/compile_enb_fdd',
+                       env=env)
+
+        try:
+            alu.compile_enb("--eNB -w USRP -x -c --disable-cpu-affinity")
+        except BaseException, e:
+            log("ERROR: ALU test failed: eNB compilation failed: " + str(e))
+            return
+
+    if do_tests(tests['b210']['alu']['tdd']):
+        alu = alu_test(epc='amerique', enb='calisson', ue='mozart',
+                       openair=openair_dir,
+                       user=oai_user, password=oai_password,
+                       log_subdir='enb_tests/b210_alu/compile_enb_tdd',
+                       env=env)
+
+        try:
+            alu.compile_enb("--eNB -w USRP -x -c --disable-cpu-affinity")
+        except BaseException, e:
+            log("ERROR: ALU test failed: eNB compilation failed: " + str(e))
+            return
+
+    #compile RRU/RCC eNB
+
+    if do_tests(tests['remote b210']['alu']['fdd']):
+        #RRU
+        alu = alu_test(epc='amerique', ue='stevens',
+                       openair=openair_dir,
+                       user=oai_user, password=oai_password,
+                       log_subdir='enb_tests/remote_b210_alu/compile_enb_rru',
+                       env=env,
+                       #hack: set 'enb' to reuse 'compile_enb'
+                       enb = 'superserver',
+                       enb_rru = 'superserver', enb_rcc = 'starsky')
+
+        try:
+            alu.compile_enb("--eNB -x -c -w USRP -t ETHERNET",
+                            log_suffix='rru.')
+        except BaseException, e:
+            log("ERROR: ALU test failed: RRU eNB compilation failed: "+str(e))
+            return
+
+        #RCC
+        alu = alu_test(epc='amerique', ue='stevens',
+                       openair=openair_dir,
+                       user=oai_user, password=oai_password,
+                       log_subdir='enb_tests/remote_b210_alu/compile_enb_rcc',
+                       env=env,
+                       #hack: set 'enb' to reuse 'compile_enb'
+                       enb = 'starsky',
+                       enb_rru = 'superserver', enb_rcc = 'starsky')
+
+        try:
+            alu.compile_enb("--eNB -w None -t ETHERNET",
+                            log_suffix='rcc.')
+        except BaseException, e:
+            log("ERROR: ALU test failed: RCC eNB compilation failed: "+str(e))
+            return
 
-    try:
-        alu.compile_enb("--eNB -w USRP -x -c --disable-cpu-affinity")
-    except BaseException, e:
-        log("ERROR: ALU test failed: eNB compilation failed: " + str(e))
-        return
 
     #run tests
 
@@ -361,29 +488,64 @@ def run_b210_alu(tests, openair_dir, oai_user, oai_password, env):
                          "10" : "15M",
                          "20" : "15M" }
 
-    for bw in ('5', '10', '20'):
-        if do_tests(tests['b210']['alu'][bw]):
-            log("INFO: ALU test: run tests for bandwidth " + bw + " MHz")
-            ctest = tests['b210']['alu'][bw]
-            alu = alu_test(epc='amerique', enb='hutch', ue='stevens',
-                           openair=openair_dir,
-                           user=oai_user, password=oai_password,
-                           log_subdir='enb_tests/b210_alu/' + bw,
-                           env=env)
-            try:
-                alu.start_epc()
-                alu.start_enb("enb.band7.tm1.usrpb210." + bw + "MHz.conf")
-                if do_tests(ctest['bandrich']):
-                    alu.start_bandrich_ue()
-                    if do_tests(ctest['bandrich']['tcp']['dl']): alu.dl_tcp()
-                    if do_tests(ctest['bandrich']['tcp']['ul']): alu.ul_tcp()
-                    if do_tests(ctest['bandrich']['udp']['dl']):
-                        alu.dl_udp(udp_dl_bandwidth[bw])
-                    if do_tests(ctest['bandrich']['udp']['ul']):
-                        alu.ul_udp(udp_ul_bandwidth[bw])
-                    alu.stop_bandrich_ue()
-                alu.stop_enb()
-                alu.stop_epc()
-            except BaseException, e:
-                log("ERROR: ALU test failed: " + str(e))
-                alu.finish()
+    ue_machine = { "fdd" : "stevens",
+                   "tdd" : "mozart" }
+
+    enb_machine = { "fdd" : "hutch",
+                    "tdd" : "calisson" }
+
+    band = { "fdd" : "7",
+             "tdd" : "38" }
+
+    for mode in ('fdd', 'tdd'):
+        for bw in ('5', '10', '20'):
+            if do_tests(tests['b210']['alu'][mode][bw]):
+                log("INFO: ALU test: run tests for bandwidth " + bw + " MHz")
+                ctest = tests['b210']['alu'][mode][bw]
+                alu = alu_test(epc='amerique', enb=enb_machine[mode], ue=ue_machine[mode],
+                               openair=openair_dir,
+                               user=oai_user, password=oai_password,
+                               log_subdir='enb_tests/b210_alu/' + mode + "/" + bw,
+                               env=env)
+                try:
+                    alu.start_epc()
+                    alu.start_enb("enb.band" + band[mode] + ".tm1.usrpb210." + mode + "." + bw + "MHz.conf")
+                    for ue in ('bandrich', '3276'):
+                        if ue in ctest and do_tests(ctest[ue]):
+                            alu.start_ue(ue)
+                            if do_tests(ctest[ue]['tcp']['dl']): alu.dl_tcp(ue)
+                            if do_tests(ctest[ue]['tcp']['ul']): alu.ul_tcp(ue)
+                            if do_tests(ctest[ue]['udp']['dl']): alu.dl_udp(ue, udp_dl_bandwidth[bw])
+                            if do_tests(ctest[ue]['udp']['ul']): alu.ul_udp(ue, udp_ul_bandwidth[bw])
+                            alu.stop_ue(ue)
+                    alu.stop_enb()
+                    alu.stop_epc()
+                except BaseException, e:
+                    log("ERROR: ALU test failed: " + str(e))
+                    alu.finish()
+            if do_tests(tests['remote b210']['alu'][mode][bw]):
+                log("INFO: ALU test: run RRU/RCC tests for bandwidth " + bw + " MHz")
+                ctest = tests['remote b210']['alu'][mode][bw]
+                alu = alu_test(epc='amerique', enb='', ue=ue_machine[mode],
+                               openair=openair_dir,
+                               user=oai_user, password=oai_password,
+                               log_subdir='enb_tests/remote_b210_alu/' + bw,
+                               env=env,
+                               enb_rru='superserver', enb_rcc='starsky')
+                try:
+                    alu.start_epc()
+                    alu.start_enb_rru_rcc("rru.band7.tm1.if4p5." + bw + "MHz.udp.usrpb210.conf",
+                                          "rcc.band7.tm1.if4p5." + bw + "MHz.conf")
+                    for ue in ('bandrich', '3276'):
+                        if ue in ctest and do_tests(ctest[ue]):
+                            alu.start_ue(ue)
+                            if do_tests(ctest[ue]['tcp']['dl']): alu.dl_tcp(ue)
+                            if do_tests(ctest[ue]['tcp']['ul']): alu.ul_tcp(ue)
+                            if do_tests(ctest[ue]['udp']['dl']): alu.dl_udp(ue, udp_dl_bandwidth[bw])
+                            if do_tests(ctest[ue]['udp']['ul']): alu.ul_udp(ue, udp_ul_bandwidth[bw])
+                            alu.stop_ue(ue)
+                    alu.stop_enb_rru_rcc()
+                    alu.stop_epc()
+                except BaseException, e:
+                    log("ERROR: ALU test failed: " + str(e))
+                    alu.finish()
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
new file mode 100644
index 0000000000000000000000000000000000000000..c25b954e1ab532de744b65bed211876a86cabd7e
--- /dev/null
+++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
@@ -0,0 +1,175 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+        node_function                                         = "eNodeB_3GPP";
+	node_timing                                           = "synch_to_ext_device";
+	node_synch_ref                                        = 0;
+        frame_type					      = "TDD";
+        tdd_config 					      = 3;
+        tdd_config_s            			      = 0;
+        prefix_type             			      = "NORMAL";
+        eutra_band              			      = 38;
+        downlink_frequency      			      = 2580000000L;
+        uplink_frequency_offset 			      = 0;
+        Nid_cell					      = 0;
+        N_RB_DL                 			      = 50;
+        Nid_cell_mbsfn          			      = 0;
+        nb_antenna_ports          			      = 1;
+        nb_antennas_tx          			      = 1;
+        nb_antennas_rx          			      = 1;
+        tx_gain                                            = 90;
+        rx_gain                                            = 125;
+        prach_root              			      = 0;
+        prach_config_index      			      = 0;
+        prach_high_speed        			      = "DISABLE";
+        prach_zero_correlation  			      = 1;
+        prach_freq_offset       			      = 2;
+        pucch_delta_shift       			      = 1;
+        pucch_nRB_CQI           			      = 1;
+        pucch_nCS_AN            			      = 0;
+        pucch_n1_AN             			      = 32;
+        pdsch_referenceSignalPower 			      = -24;
+        pdsch_p_b                  			      = 0;
+        pusch_n_SB                 			      = 1;
+        pusch_enable64QAM          			      = "DISABLE";
+        pusch_hoppingMode                                  = "interSubFrame";
+        pusch_hoppingOffset                                = 0;
+        pusch_groupHoppingEnabled  			      = "ENABLE";
+        pusch_groupAssignment      			      = 0;
+        pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+        pusch_nDMRS1                                       = 1;
+        phich_duration                                     = "NORMAL";
+        phich_resource                                     = "ONESIXTH";
+        srs_enable                                         = "DISABLE";
+        /*  srs_BandwidthConfig                                =;
+        srs_SubframeConfig                                 =;
+        srs_ackNackST                                      =;
+        srs_MaxUpPts                                       =;*/
+
+        pusch_p0_Nominal                                   = -90;
+        pusch_alpha                                        = "AL1";
+        pucch_p0_Nominal                                   = -96;
+        msg3_delta_Preamble                                = 6;
+        pucch_deltaF_Format1                               = "deltaF2";
+        pucch_deltaF_Format1b                              = "deltaF3";
+        pucch_deltaF_Format2                               = "deltaF0";
+        pucch_deltaF_Format2a                              = "deltaF0";
+        pucch_deltaF_Format2b		    	      = "deltaF0";
+
+        rach_numberOfRA_Preambles                          = 64;
+        rach_preamblesGroupAConfig                         = "DISABLE";
+        /*
+        rach_sizeOfRA_PreamblesGroupA                      = ;
+        rach_messageSizeGroupA                             = ;
+        rach_messagePowerOffsetGroupB                      = ;
+        */
+        rach_powerRampingStep                              = 4;
+        rach_preambleInitialReceivedTargetPower            = -104;
+        rach_preambleTransMax                              = 10;
+        rach_raResponseWindowSize                          = 10;
+        rach_macContentionResolutionTimer                  = 48;
+        rach_maxHARQ_Msg3Tx                                = 4;
+
+        pcch_default_PagingCycle                           = 128;
+        pcch_nB                                            = "oneT";
+        bcch_modificationPeriodCoeff			      = 2;
+        ue_TimersAndConstants_t300			      = 1000;
+        ue_TimersAndConstants_t301			      = 1000;
+        ue_TimersAndConstants_t310			      = 1000;
+        ue_TimersAndConstants_t311			      = 10000;
+        ue_TimersAndConstants_n310			      = 20;
+        ue_TimersAndConstants_n311			      = 1;
+
+	ue_TransmissionMode				      = 1;
+      }
+    );
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+    ////////// MME parameters:
+
+    mme_ip_address      = ( { ipv4       = "192.168.12.26";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth6";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.82/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth6";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.82/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+    log_config :
+    {
+      global_log_level                      ="info";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+  }
+);
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
new file mode 100644
index 0000000000000000000000000000000000000000..0773f9c267fd5e2675ce54c7896db50bce8b74cc
--- /dev/null
+++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
@@ -0,0 +1,175 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+        node_function                                         = "eNodeB_3GPP";
+	node_timing                                           = "synch_to_ext_device";
+	node_synch_ref                                        = 0;
+        frame_type					      = "TDD";
+        tdd_config 					      = 3;
+        tdd_config_s            			      = 0;
+        prefix_type             			      = "NORMAL";
+        eutra_band              			      = 38;
+        downlink_frequency      			      = 2580000000L;
+        uplink_frequency_offset 			      = 0;
+        Nid_cell					      = 0;
+        N_RB_DL                 			      = 100;
+        Nid_cell_mbsfn          			      = 0;
+        nb_antenna_ports          			      = 1;
+        nb_antennas_tx          			      = 1;
+        nb_antennas_rx          			      = 1;
+        tx_gain                                            = 90;
+        rx_gain                                            = 125;
+        prach_root              			      = 0;
+        prach_config_index      			      = 0;
+        prach_high_speed        			      = "DISABLE";
+        prach_zero_correlation  			      = 1;
+        prach_freq_offset       			      = 2;
+        pucch_delta_shift       			      = 1;
+        pucch_nRB_CQI           			      = 1;
+        pucch_nCS_AN            			      = 0;
+        pucch_n1_AN             			      = 32;
+        pdsch_referenceSignalPower 			      = -24;
+        pdsch_p_b                  			      = 0;
+        pusch_n_SB                 			      = 1;
+        pusch_enable64QAM          			      = "DISABLE";
+        pusch_hoppingMode                                  = "interSubFrame";
+        pusch_hoppingOffset                                = 0;
+        pusch_groupHoppingEnabled  			      = "ENABLE";
+        pusch_groupAssignment      			      = 0;
+        pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+        pusch_nDMRS1                                       = 1;
+        phich_duration                                     = "NORMAL";
+        phich_resource                                     = "ONESIXTH";
+        srs_enable                                         = "DISABLE";
+        /*  srs_BandwidthConfig                                =;
+        srs_SubframeConfig                                 =;
+        srs_ackNackST                                      =;
+        srs_MaxUpPts                                       =;*/
+
+        pusch_p0_Nominal                                   = -90;
+        pusch_alpha                                        = "AL1";
+        pucch_p0_Nominal                                   = -96;
+        msg3_delta_Preamble                                = 6;
+        pucch_deltaF_Format1                               = "deltaF2";
+        pucch_deltaF_Format1b                              = "deltaF3";
+        pucch_deltaF_Format2                               = "deltaF0";
+        pucch_deltaF_Format2a                              = "deltaF0";
+        pucch_deltaF_Format2b		    	      = "deltaF0";
+
+        rach_numberOfRA_Preambles                          = 64;
+        rach_preamblesGroupAConfig                         = "DISABLE";
+        /*
+        rach_sizeOfRA_PreamblesGroupA                      = ;
+        rach_messageSizeGroupA                             = ;
+        rach_messagePowerOffsetGroupB                      = ;
+        */
+        rach_powerRampingStep                              = 4;
+        rach_preambleInitialReceivedTargetPower            = -104;
+        rach_preambleTransMax                              = 10;
+        rach_raResponseWindowSize                          = 10;
+        rach_macContentionResolutionTimer                  = 48;
+        rach_maxHARQ_Msg3Tx                                = 4;
+
+        pcch_default_PagingCycle                           = 128;
+        pcch_nB                                            = "oneT";
+        bcch_modificationPeriodCoeff			      = 2;
+        ue_TimersAndConstants_t300			      = 1000;
+        ue_TimersAndConstants_t301			      = 1000;
+        ue_TimersAndConstants_t310			      = 1000;
+        ue_TimersAndConstants_t311			      = 10000;
+        ue_TimersAndConstants_n310			      = 20;
+        ue_TimersAndConstants_n311			      = 1;
+
+	ue_TransmissionMode				      = 1;
+      }
+    );
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+    ////////// MME parameters:
+
+    mme_ip_address      = ( { ipv4       = "192.168.12.26";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth6";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.82/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth6";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.82/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+    log_config :
+    {
+      global_log_level                      ="info";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+  }
+);
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
new file mode 100644
index 0000000000000000000000000000000000000000..024be3b77535bde64d8c6d346509cf8e6948de6b
--- /dev/null
+++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
@@ -0,0 +1,175 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+        node_function                                         = "eNodeB_3GPP";
+	node_timing                                           = "synch_to_ext_device";
+	node_synch_ref                                        = 0;
+        frame_type					      = "TDD";
+        tdd_config 					      = 3;
+        tdd_config_s            			      = 0;
+        prefix_type             			      = "NORMAL";
+        eutra_band              			      = 38;
+        downlink_frequency      			      = 2580000000L;
+        uplink_frequency_offset 			      = 0;
+        Nid_cell					      = 0;
+        N_RB_DL                 			      = 25;
+        Nid_cell_mbsfn          			      = 0;
+        nb_antenna_ports          			      = 1;
+        nb_antennas_tx          			      = 1;
+        nb_antennas_rx          			      = 1;
+        tx_gain                                            = 90;
+        rx_gain                                            = 125;
+        prach_root              			      = 0;
+        prach_config_index      			      = 0;
+        prach_high_speed        			      = "DISABLE";
+        prach_zero_correlation  			      = 1;
+        prach_freq_offset       			      = 2;
+        pucch_delta_shift       			      = 1;
+        pucch_nRB_CQI           			      = 1;
+        pucch_nCS_AN            			      = 0;
+        pucch_n1_AN             			      = 32;
+        pdsch_referenceSignalPower 			      = -24;
+        pdsch_p_b                  			      = 0;
+        pusch_n_SB                 			      = 1;
+        pusch_enable64QAM          			      = "DISABLE";
+        pusch_hoppingMode                                  = "interSubFrame";
+        pusch_hoppingOffset                                = 0;
+        pusch_groupHoppingEnabled  			      = "ENABLE";
+        pusch_groupAssignment      			      = 0;
+        pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+        pusch_nDMRS1                                       = 1;
+        phich_duration                                     = "NORMAL";
+        phich_resource                                     = "ONESIXTH";
+        srs_enable                                         = "DISABLE";
+        /*  srs_BandwidthConfig                                =;
+        srs_SubframeConfig                                 =;
+        srs_ackNackST                                      =;
+        srs_MaxUpPts                                       =;*/
+
+        pusch_p0_Nominal                                   = -90;
+        pusch_alpha                                        = "AL1";
+        pucch_p0_Nominal                                   = -96;
+        msg3_delta_Preamble                                = 6;
+        pucch_deltaF_Format1                               = "deltaF2";
+        pucch_deltaF_Format1b                              = "deltaF3";
+        pucch_deltaF_Format2                               = "deltaF0";
+        pucch_deltaF_Format2a                              = "deltaF0";
+        pucch_deltaF_Format2b		    	      = "deltaF0";
+
+        rach_numberOfRA_Preambles                          = 64;
+        rach_preamblesGroupAConfig                         = "DISABLE";
+        /*
+        rach_sizeOfRA_PreamblesGroupA                      = ;
+        rach_messageSizeGroupA                             = ;
+        rach_messagePowerOffsetGroupB                      = ;
+        */
+        rach_powerRampingStep                              = 4;
+        rach_preambleInitialReceivedTargetPower            = -104;
+        rach_preambleTransMax                              = 10;
+        rach_raResponseWindowSize                          = 10;
+        rach_macContentionResolutionTimer                  = 48;
+        rach_maxHARQ_Msg3Tx                                = 4;
+
+        pcch_default_PagingCycle                           = 128;
+        pcch_nB                                            = "oneT";
+        bcch_modificationPeriodCoeff			      = 2;
+        ue_TimersAndConstants_t300			      = 1000;
+        ue_TimersAndConstants_t301			      = 1000;
+        ue_TimersAndConstants_t310			      = 1000;
+        ue_TimersAndConstants_t311			      = 10000;
+        ue_TimersAndConstants_n310			      = 20;
+        ue_TimersAndConstants_n311			      = 1;
+
+	ue_TransmissionMode				      = 1;
+      }
+    );
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+    ////////// MME parameters:
+
+    mme_ip_address      = ( { ipv4       = "192.168.12.26";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth6";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.82/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth6";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.82/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+    log_config :
+    {
+      global_log_level                      ="info";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+  }
+);
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.10MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf
similarity index 100%
rename from cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.10MHz.conf
rename to cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.20MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf
similarity index 100%
rename from cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.20MHz.conf
rename to cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.5MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf
similarity index 100%
rename from cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.5MHz.conf
rename to cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf
diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf
new file mode 100644
index 0000000000000000000000000000000000000000..81eed5f4b10946477df799fd0820e51ea2ffb71a
--- /dev/null
+++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf
@@ -0,0 +1,192 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+      node_function             = "NGFI_RCC_IF4p5";
+      node_timing               = "synch_to_ext_device";
+      node_synch_ref            = 0;
+      frame_type					      = "FDD";
+      tdd_config 					      = 3;
+      tdd_config_s            			      = 0;
+      prefix_type             			      = "NORMAL";
+      eutra_band              			      = 7;
+      downlink_frequency      			      = 2660000000L;
+      uplink_frequency_offset 			      = -120000000;
+      Nid_cell					      = 0;
+      N_RB_DL                 			      = 50;
+      Nid_cell_mbsfn          			      = 0;
+      nb_antenna_ports                                = 1;
+      nb_antennas_tx          			      = 1;
+      nb_antennas_rx          			      = 1;
+      tx_gain                                            = 90;
+      rx_gain                                            = 125;
+      prach_root              			      = 0;
+      prach_config_index      			      = 0;
+      prach_high_speed        			      = "DISABLE";
+      prach_zero_correlation  			      = 1;
+      prach_freq_offset       			      = 2;
+      pucch_delta_shift       			      = 1;
+      pucch_nRB_CQI           			      = 1;
+      pucch_nCS_AN            			      = 0;
+      pucch_n1_AN             			      = 32;
+      pdsch_referenceSignalPower 			      = -29;
+      pdsch_p_b                  			      = 0;
+      pusch_n_SB                 			      = 1;
+      pusch_enable64QAM          			      = "DISABLE";
+      pusch_hoppingMode                                  = "interSubFrame";
+      pusch_hoppingOffset                                = 0;
+      pusch_groupHoppingEnabled  			      = "ENABLE";
+      pusch_groupAssignment      			      = 0;
+      pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+      pusch_nDMRS1                                       = 1;
+      phich_duration                                     = "NORMAL";
+      phich_resource                                     = "ONESIXTH";
+      srs_enable                                         = "DISABLE";
+      /*  srs_BandwidthConfig                                =;
+      srs_SubframeConfig                                 =;
+      srs_ackNackST                                      =;
+      srs_MaxUpPts                                       =;*/
+
+      pusch_p0_Nominal                                   = -96;
+      pusch_alpha                                        = "AL1";
+      pucch_p0_Nominal                                   = -104;
+      msg3_delta_Preamble                                = 6;
+      pucch_deltaF_Format1                               = "deltaF2";
+      pucch_deltaF_Format1b                              = "deltaF3";
+      pucch_deltaF_Format2                               = "deltaF0";
+      pucch_deltaF_Format2a                              = "deltaF0";
+      pucch_deltaF_Format2b		    	      = "deltaF0";
+
+      rach_numberOfRA_Preambles                          = 64;
+      rach_preamblesGroupAConfig                         = "DISABLE";
+      /*
+      rach_sizeOfRA_PreamblesGroupA                      = ;
+      rach_messageSizeGroupA                             = ;
+      rach_messagePowerOffsetGroupB                      = ;
+      */
+      rach_powerRampingStep                              = 4;
+      rach_preambleInitialReceivedTargetPower            = -108;
+      rach_preambleTransMax                              = 10;
+      rach_raResponseWindowSize                          = 10;
+      rach_macContentionResolutionTimer                  = 48;
+      rach_maxHARQ_Msg3Tx                                = 4;
+
+      pcch_default_PagingCycle                           = 128;
+      pcch_nB                                            = "oneT";
+      bcch_modificationPeriodCoeff			      = 2;
+      ue_TimersAndConstants_t300			      = 1000;
+      ue_TimersAndConstants_t301			      = 1000;
+      ue_TimersAndConstants_t310			      = 1000;
+      ue_TimersAndConstants_t311			      = 10000;
+      ue_TimersAndConstants_n310			      = 20;
+      ue_TimersAndConstants_n311			      = 1;
+      ue_TransmissionMode                                    = 1;
+      }
+    );
+
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+
+    ////////// MME parameters:
+    mme_ip_address      = ( { ipv4       = "192.168.12.26";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.18/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.18/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+    rrh_gw_config = (
+    {
+      	local_if_name = "eth1";			  
+   	remote_address = "10.10.10.157";
+    	local_address = "10.10.10.18";    
+    	local_port = 50000;	#for raw option local port must be the same to remote	       
+    	remote_port = 50000; 
+    	rrh_gw_active = "yes";
+    	tr_preference = "udp_if4p5";
+    	rf_preference = "usrp_b200";
+    	iq_txshift = 4;
+    	tx_sample_advance = 80;	
+    	tx_scheduling_advance = 9;
+        if_compression = "alaw";
+    }
+    );  
+
+    log_config :
+    {
+      global_log_level                      ="info";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+  }
+);
diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf
new file mode 100644
index 0000000000000000000000000000000000000000..4b4190f8ce980cf107f62bd76eab8a9ca9ecf1da
--- /dev/null
+++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf
@@ -0,0 +1,192 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+      node_function             = "NGFI_RCC_IF4p5";
+      node_timing               = "synch_to_ext_device";
+      node_synch_ref            = 0;
+      frame_type					      = "FDD";
+      tdd_config 					      = 3;
+      tdd_config_s            			      = 0;
+      prefix_type             			      = "NORMAL";
+      eutra_band              			      = 7;
+      downlink_frequency      			      = 2660000000L;
+      uplink_frequency_offset 			      = -120000000;
+      Nid_cell					      = 0;
+      N_RB_DL                 			      = 100;
+      Nid_cell_mbsfn          			      = 0;
+      nb_antenna_ports                                = 1;
+      nb_antennas_tx          			      = 1;
+      nb_antennas_rx          			      = 1;
+      tx_gain                                            = 90;
+      rx_gain                                            = 125;
+      prach_root              			      = 0;
+      prach_config_index      			      = 0;
+      prach_high_speed        			      = "DISABLE";
+      prach_zero_correlation  			      = 1;
+      prach_freq_offset       			      = 2;
+      pucch_delta_shift       			      = 1;
+      pucch_nRB_CQI           			      = 1;
+      pucch_nCS_AN            			      = 0;
+      pucch_n1_AN             			      = 32;
+      pdsch_referenceSignalPower 			      = -29;
+      pdsch_p_b                  			      = 0;
+      pusch_n_SB                 			      = 1;
+      pusch_enable64QAM          			      = "DISABLE";
+      pusch_hoppingMode                                  = "interSubFrame";
+      pusch_hoppingOffset                                = 0;
+      pusch_groupHoppingEnabled  			      = "ENABLE";
+      pusch_groupAssignment      			      = 0;
+      pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+      pusch_nDMRS1                                       = 1;
+      phich_duration                                     = "NORMAL";
+      phich_resource                                     = "ONESIXTH";
+      srs_enable                                         = "DISABLE";
+      /*  srs_BandwidthConfig                                =;
+      srs_SubframeConfig                                 =;
+      srs_ackNackST                                      =;
+      srs_MaxUpPts                                       =;*/
+
+      pusch_p0_Nominal                                   = -96;
+      pusch_alpha                                        = "AL1";
+      pucch_p0_Nominal                                   = -104;
+      msg3_delta_Preamble                                = 6;
+      pucch_deltaF_Format1                               = "deltaF2";
+      pucch_deltaF_Format1b                              = "deltaF3";
+      pucch_deltaF_Format2                               = "deltaF0";
+      pucch_deltaF_Format2a                              = "deltaF0";
+      pucch_deltaF_Format2b		    	      = "deltaF0";
+
+      rach_numberOfRA_Preambles                          = 64;
+      rach_preamblesGroupAConfig                         = "DISABLE";
+      /*
+      rach_sizeOfRA_PreamblesGroupA                      = ;
+      rach_messageSizeGroupA                             = ;
+      rach_messagePowerOffsetGroupB                      = ;
+      */
+      rach_powerRampingStep                              = 4;
+      rach_preambleInitialReceivedTargetPower            = -108;
+      rach_preambleTransMax                              = 10;
+      rach_raResponseWindowSize                          = 10;
+      rach_macContentionResolutionTimer                  = 48;
+      rach_maxHARQ_Msg3Tx                                = 4;
+
+      pcch_default_PagingCycle                           = 128;
+      pcch_nB                                            = "oneT";
+      bcch_modificationPeriodCoeff			      = 2;
+      ue_TimersAndConstants_t300			      = 1000;
+      ue_TimersAndConstants_t301			      = 1000;
+      ue_TimersAndConstants_t310			      = 1000;
+      ue_TimersAndConstants_t311			      = 10000;
+      ue_TimersAndConstants_n310			      = 20;
+      ue_TimersAndConstants_n311			      = 1;
+      ue_TransmissionMode                                    = 1;
+      }
+    );
+
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+
+    ////////// MME parameters:
+    mme_ip_address      = ( { ipv4       = "192.168.12.26";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.18/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.18/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+    rrh_gw_config = (
+    {
+      	local_if_name = "eth1";			  
+   	remote_address = "10.10.10.157";
+    	local_address = "10.10.10.18";    
+    	local_port = 50000;	#for raw option local port must be the same to remote	       
+    	remote_port = 50000; 
+    	rrh_gw_active = "yes";
+    	tr_preference = "udp_if4p5";
+    	rf_preference = "usrp_b200";
+    	iq_txshift = 4;
+    	tx_sample_advance = 80;	
+    	tx_scheduling_advance = 9;
+        if_compression = "alaw";
+    }
+    );  
+
+    log_config :
+    {
+      global_log_level                      ="info";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+  }
+);
diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf
new file mode 100644
index 0000000000000000000000000000000000000000..99b9a66226f0b1d5bc821f632d59636e604fc4f0
--- /dev/null
+++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf
@@ -0,0 +1,192 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+      node_function             = "NGFI_RCC_IF4p5";
+      node_timing               = "synch_to_ext_device";
+      node_synch_ref            = 0;
+      frame_type					      = "FDD";
+      tdd_config 					      = 3;
+      tdd_config_s            			      = 0;
+      prefix_type             			      = "NORMAL";
+      eutra_band              			      = 7;
+      downlink_frequency      			      = 2660000000L;
+      uplink_frequency_offset 			      = -120000000;
+      Nid_cell					      = 0;
+      N_RB_DL                 			      = 25;
+      Nid_cell_mbsfn          			      = 0;
+      nb_antenna_ports                                = 1;
+      nb_antennas_tx          			      = 1;
+      nb_antennas_rx          			      = 1;
+      tx_gain                                            = 90;
+      rx_gain                                            = 125;
+      prach_root              			      = 0;
+      prach_config_index      			      = 0;
+      prach_high_speed        			      = "DISABLE";
+      prach_zero_correlation  			      = 1;
+      prach_freq_offset       			      = 2;
+      pucch_delta_shift       			      = 1;
+      pucch_nRB_CQI           			      = 1;
+      pucch_nCS_AN            			      = 0;
+      pucch_n1_AN             			      = 32;
+      pdsch_referenceSignalPower 			      = -29;
+      pdsch_p_b                  			      = 0;
+      pusch_n_SB                 			      = 1;
+      pusch_enable64QAM          			      = "DISABLE";
+      pusch_hoppingMode                                  = "interSubFrame";
+      pusch_hoppingOffset                                = 0;
+      pusch_groupHoppingEnabled  			      = "ENABLE";
+      pusch_groupAssignment      			      = 0;
+      pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+      pusch_nDMRS1                                       = 1;
+      phich_duration                                     = "NORMAL";
+      phich_resource                                     = "ONESIXTH";
+      srs_enable                                         = "DISABLE";
+      /*  srs_BandwidthConfig                                =;
+      srs_SubframeConfig                                 =;
+      srs_ackNackST                                      =;
+      srs_MaxUpPts                                       =;*/
+
+      pusch_p0_Nominal                                   = -96;
+      pusch_alpha                                        = "AL1";
+      pucch_p0_Nominal                                   = -104;
+      msg3_delta_Preamble                                = 6;
+      pucch_deltaF_Format1                               = "deltaF2";
+      pucch_deltaF_Format1b                              = "deltaF3";
+      pucch_deltaF_Format2                               = "deltaF0";
+      pucch_deltaF_Format2a                              = "deltaF0";
+      pucch_deltaF_Format2b		    	      = "deltaF0";
+
+      rach_numberOfRA_Preambles                          = 64;
+      rach_preamblesGroupAConfig                         = "DISABLE";
+      /*
+      rach_sizeOfRA_PreamblesGroupA                      = ;
+      rach_messageSizeGroupA                             = ;
+      rach_messagePowerOffsetGroupB                      = ;
+      */
+      rach_powerRampingStep                              = 4;
+      rach_preambleInitialReceivedTargetPower            = -108;
+      rach_preambleTransMax                              = 10;
+      rach_raResponseWindowSize                          = 10;
+      rach_macContentionResolutionTimer                  = 48;
+      rach_maxHARQ_Msg3Tx                                = 4;
+
+      pcch_default_PagingCycle                           = 128;
+      pcch_nB                                            = "oneT";
+      bcch_modificationPeriodCoeff			      = 2;
+      ue_TimersAndConstants_t300			      = 1000;
+      ue_TimersAndConstants_t301			      = 1000;
+      ue_TimersAndConstants_t310			      = 1000;
+      ue_TimersAndConstants_t311			      = 10000;
+      ue_TimersAndConstants_n310			      = 20;
+      ue_TimersAndConstants_n311			      = 1;
+      ue_TransmissionMode                                    = 1;
+      }
+    );
+
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+
+    ////////// MME parameters:
+    mme_ip_address      = ( { ipv4       = "192.168.12.26";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.18/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.18/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+    rrh_gw_config = (
+    {
+      	local_if_name = "eth1";			  
+   	remote_address = "10.10.10.157";
+    	local_address = "10.10.10.18";    
+    	local_port = 50000;	#for raw option local port must be the same to remote	       
+    	remote_port = 50000; 
+    	rrh_gw_active = "yes";
+    	tr_preference = "udp_if4p5";
+    	rf_preference = "usrp_b200";
+    	iq_txshift = 4;
+    	tx_sample_advance = 80;	
+    	tx_scheduling_advance = 9;
+        if_compression = "alaw";
+    }
+    );  
+
+    log_config :
+    {
+      global_log_level                      ="info";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+  }
+);
diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf
new file mode 100644
index 0000000000000000000000000000000000000000..4cc40b6d84139da98b1250b62ba480bce60406f0
--- /dev/null
+++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf
@@ -0,0 +1,194 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+      node_function     = "NGFI_RRU_IF4p5";
+      node_timing       = "synch_to_ext_device";
+      node_synch_ref    = 0;  
+      frame_type					      = "FDD";
+      tdd_config 					      = 3;
+      tdd_config_s            			      = 0;
+      prefix_type             			      = "NORMAL";
+      eutra_band              			      = 7;
+      downlink_frequency      			      = 2660000000L;
+      uplink_frequency_offset 			      = -120000000;
+      Nid_cell					      = 0;
+      N_RB_DL                 			      = 50;
+      Nid_cell_mbsfn          			      = 0;
+      nb_antenna_ports                                = 1;
+      nb_antennas_tx          			      = 1;
+      nb_antennas_rx          			      = 1;
+      tx_gain                                            = 90;
+      rx_gain                                            = 125;
+      prach_root              			      = 0;
+      prach_config_index      			      = 0;
+      prach_high_speed        			      = "DISABLE";
+      prach_zero_correlation  			      = 1;
+      prach_freq_offset       			      = 2;
+      pucch_delta_shift       			      = 1;
+      pucch_nRB_CQI           			      = 1;
+      pucch_nCS_AN            			      = 0;
+      pucch_n1_AN             			      = 32;
+      pdsch_referenceSignalPower 			      = -29;
+      pdsch_p_b                  			      = 0;
+      pusch_n_SB                 			      = 1;
+      pusch_enable64QAM          			      = "DISABLE";
+      pusch_hoppingMode                                  = "interSubFrame";
+      pusch_hoppingOffset                                = 0;
+      pusch_groupHoppingEnabled  			      = "ENABLE";
+      pusch_groupAssignment      			      = 0;
+      pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+      pusch_nDMRS1                                       = 1;
+      phich_duration                                     = "NORMAL";
+      phich_resource                                     = "ONESIXTH";
+      srs_enable                                         = "DISABLE";
+      /*  srs_BandwidthConfig                                =;
+      srs_SubframeConfig                                 =;
+      srs_ackNackST                                      =;
+      srs_MaxUpPts                                       =;*/
+
+      pusch_p0_Nominal                                   = -96;
+      pusch_alpha                                        = "AL1";
+      pucch_p0_Nominal                                   = -104;
+      msg3_delta_Preamble                                = 6;
+      pucch_deltaF_Format1                               = "deltaF2";
+      pucch_deltaF_Format1b                              = "deltaF3";
+      pucch_deltaF_Format2                               = "deltaF0";
+      pucch_deltaF_Format2a                              = "deltaF0";
+      pucch_deltaF_Format2b		    	      = "deltaF0";
+
+      rach_numberOfRA_Preambles                          = 64;
+      rach_preamblesGroupAConfig                         = "DISABLE";
+      /*
+      rach_sizeOfRA_PreamblesGroupA                      = ;
+      rach_messageSizeGroupA                             = ;
+      rach_messagePowerOffsetGroupB                      = ;
+      */
+      rach_powerRampingStep                              = 4;
+      rach_preambleInitialReceivedTargetPower            = -104;
+      rach_preambleTransMax                              = 10;
+      rach_raResponseWindowSize                          = 10;
+      rach_macContentionResolutionTimer                  = 48;
+      rach_maxHARQ_Msg3Tx                                = 4;
+
+      pcch_default_PagingCycle                           = 128;
+      pcch_nB                                            = "oneT";
+      bcch_modificationPeriodCoeff			      = 2;
+      ue_TimersAndConstants_t300			      = 1000;
+      ue_TimersAndConstants_t301			      = 1000;
+      ue_TimersAndConstants_t310			      = 1000;
+      ue_TimersAndConstants_t311			      = 10000;
+      ue_TimersAndConstants_n310			      = 20;
+      ue_TimersAndConstants_n311			      = 1;
+
+      ue_TransmissionMode	   			      = 1;
+
+      }
+    );
+
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+
+    ////////// MME parameters:
+    mme_ip_address      = ( { ipv4       = "192.168.12.11";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth3";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.215/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth3";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.215/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+    rrh_gw_config = (
+    {			  
+      	local_if_name = "eth3";			  
+	remote_address = "10.10.10.18";
+	local_address = "10.10.10.157";
+    	local_port = 50000;	#for raw option local port must be the same to remote	       
+    	remote_port = 50000; 
+    	rrh_gw_active = "yes";
+    	tr_preference = "udp_if4p5";
+    	rf_preference = "usrp_b200";
+    	iq_txshift = 4;
+    	tx_sample_advance = 80;	
+    	tx_scheduling_advance = 9; 	                
+        if_compression = "alaw";
+    }
+    );  
+
+    log_config :
+    {
+      global_log_level                      ="info";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+  }
+);
diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf
new file mode 100644
index 0000000000000000000000000000000000000000..787cedb18d9972ef05e3d5d0f75074977cfc92e5
--- /dev/null
+++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf
@@ -0,0 +1,194 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+      node_function     = "NGFI_RRU_IF4p5";
+      node_timing       = "synch_to_ext_device";
+      node_synch_ref    = 0;  
+      frame_type					      = "FDD";
+      tdd_config 					      = 3;
+      tdd_config_s            			      = 0;
+      prefix_type             			      = "NORMAL";
+      eutra_band              			      = 7;
+      downlink_frequency      			      = 2660000000L;
+      uplink_frequency_offset 			      = -120000000;
+      Nid_cell					      = 0;
+      N_RB_DL                 			      = 100;
+      Nid_cell_mbsfn          			      = 0;
+      nb_antenna_ports                                = 1;
+      nb_antennas_tx          			      = 1;
+      nb_antennas_rx          			      = 1;
+      tx_gain                                            = 90;
+      rx_gain                                            = 125;
+      prach_root              			      = 0;
+      prach_config_index      			      = 0;
+      prach_high_speed        			      = "DISABLE";
+      prach_zero_correlation  			      = 1;
+      prach_freq_offset       			      = 2;
+      pucch_delta_shift       			      = 1;
+      pucch_nRB_CQI           			      = 1;
+      pucch_nCS_AN            			      = 0;
+      pucch_n1_AN             			      = 32;
+      pdsch_referenceSignalPower 			      = -29;
+      pdsch_p_b                  			      = 0;
+      pusch_n_SB                 			      = 1;
+      pusch_enable64QAM          			      = "DISABLE";
+      pusch_hoppingMode                                  = "interSubFrame";
+      pusch_hoppingOffset                                = 0;
+      pusch_groupHoppingEnabled  			      = "ENABLE";
+      pusch_groupAssignment      			      = 0;
+      pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+      pusch_nDMRS1                                       = 1;
+      phich_duration                                     = "NORMAL";
+      phich_resource                                     = "ONESIXTH";
+      srs_enable                                         = "DISABLE";
+      /*  srs_BandwidthConfig                                =;
+      srs_SubframeConfig                                 =;
+      srs_ackNackST                                      =;
+      srs_MaxUpPts                                       =;*/
+
+      pusch_p0_Nominal                                   = -96;
+      pusch_alpha                                        = "AL1";
+      pucch_p0_Nominal                                   = -104;
+      msg3_delta_Preamble                                = 6;
+      pucch_deltaF_Format1                               = "deltaF2";
+      pucch_deltaF_Format1b                              = "deltaF3";
+      pucch_deltaF_Format2                               = "deltaF0";
+      pucch_deltaF_Format2a                              = "deltaF0";
+      pucch_deltaF_Format2b		    	      = "deltaF0";
+
+      rach_numberOfRA_Preambles                          = 64;
+      rach_preamblesGroupAConfig                         = "DISABLE";
+      /*
+      rach_sizeOfRA_PreamblesGroupA                      = ;
+      rach_messageSizeGroupA                             = ;
+      rach_messagePowerOffsetGroupB                      = ;
+      */
+      rach_powerRampingStep                              = 4;
+      rach_preambleInitialReceivedTargetPower            = -104;
+      rach_preambleTransMax                              = 10;
+      rach_raResponseWindowSize                          = 10;
+      rach_macContentionResolutionTimer                  = 48;
+      rach_maxHARQ_Msg3Tx                                = 4;
+
+      pcch_default_PagingCycle                           = 128;
+      pcch_nB                                            = "oneT";
+      bcch_modificationPeriodCoeff			      = 2;
+      ue_TimersAndConstants_t300			      = 1000;
+      ue_TimersAndConstants_t301			      = 1000;
+      ue_TimersAndConstants_t310			      = 1000;
+      ue_TimersAndConstants_t311			      = 10000;
+      ue_TimersAndConstants_n310			      = 20;
+      ue_TimersAndConstants_n311			      = 1;
+
+      ue_TransmissionMode	   			      = 1;
+
+      }
+    );
+
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+
+    ////////// MME parameters:
+    mme_ip_address      = ( { ipv4       = "192.168.12.11";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth3";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.215/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth3";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.215/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+    rrh_gw_config = (
+    {			  
+      	local_if_name = "eth3";			  
+	remote_address = "10.10.10.18";
+	local_address = "10.10.10.157";
+    	local_port = 50000;	#for raw option local port must be the same to remote	       
+    	remote_port = 50000; 
+    	rrh_gw_active = "yes";
+    	tr_preference = "udp_if4p5";
+    	rf_preference = "usrp_b200";
+    	iq_txshift = 4;
+    	tx_sample_advance = 80;	
+    	tx_scheduling_advance = 9; 	                
+        if_compression = "alaw";
+    }
+    );  
+
+    log_config :
+    {
+      global_log_level                      ="info";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+  }
+);
diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf
new file mode 100644
index 0000000000000000000000000000000000000000..d9d46bf9446cef80a3fe8dd0a3c1eaa47d245972
--- /dev/null
+++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf
@@ -0,0 +1,194 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+      node_function     = "NGFI_RRU_IF4p5";
+      node_timing       = "synch_to_ext_device";
+      node_synch_ref    = 0;  
+      frame_type					      = "FDD";
+      tdd_config 					      = 3;
+      tdd_config_s            			      = 0;
+      prefix_type             			      = "NORMAL";
+      eutra_band              			      = 7;
+      downlink_frequency      			      = 2660000000L;
+      uplink_frequency_offset 			      = -120000000;
+      Nid_cell					      = 0;
+      N_RB_DL                 			      = 25;
+      Nid_cell_mbsfn          			      = 0;
+      nb_antenna_ports                                = 1;
+      nb_antennas_tx          			      = 1;
+      nb_antennas_rx          			      = 1;
+      tx_gain                                            = 90;
+      rx_gain                                            = 125;
+      prach_root              			      = 0;
+      prach_config_index      			      = 0;
+      prach_high_speed        			      = "DISABLE";
+      prach_zero_correlation  			      = 1;
+      prach_freq_offset       			      = 2;
+      pucch_delta_shift       			      = 1;
+      pucch_nRB_CQI           			      = 1;
+      pucch_nCS_AN            			      = 0;
+      pucch_n1_AN             			      = 32;
+      pdsch_referenceSignalPower 			      = -29;
+      pdsch_p_b                  			      = 0;
+      pusch_n_SB                 			      = 1;
+      pusch_enable64QAM          			      = "DISABLE";
+      pusch_hoppingMode                                  = "interSubFrame";
+      pusch_hoppingOffset                                = 0;
+      pusch_groupHoppingEnabled  			      = "ENABLE";
+      pusch_groupAssignment      			      = 0;
+      pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+      pusch_nDMRS1                                       = 1;
+      phich_duration                                     = "NORMAL";
+      phich_resource                                     = "ONESIXTH";
+      srs_enable                                         = "DISABLE";
+      /*  srs_BandwidthConfig                                =;
+      srs_SubframeConfig                                 =;
+      srs_ackNackST                                      =;
+      srs_MaxUpPts                                       =;*/
+
+      pusch_p0_Nominal                                   = -96;
+      pusch_alpha                                        = "AL1";
+      pucch_p0_Nominal                                   = -104;
+      msg3_delta_Preamble                                = 6;
+      pucch_deltaF_Format1                               = "deltaF2";
+      pucch_deltaF_Format1b                              = "deltaF3";
+      pucch_deltaF_Format2                               = "deltaF0";
+      pucch_deltaF_Format2a                              = "deltaF0";
+      pucch_deltaF_Format2b		    	      = "deltaF0";
+
+      rach_numberOfRA_Preambles                          = 64;
+      rach_preamblesGroupAConfig                         = "DISABLE";
+      /*
+      rach_sizeOfRA_PreamblesGroupA                      = ;
+      rach_messageSizeGroupA                             = ;
+      rach_messagePowerOffsetGroupB                      = ;
+      */
+      rach_powerRampingStep                              = 4;
+      rach_preambleInitialReceivedTargetPower            = -104;
+      rach_preambleTransMax                              = 10;
+      rach_raResponseWindowSize                          = 10;
+      rach_macContentionResolutionTimer                  = 48;
+      rach_maxHARQ_Msg3Tx                                = 4;
+
+      pcch_default_PagingCycle                           = 128;
+      pcch_nB                                            = "oneT";
+      bcch_modificationPeriodCoeff			      = 2;
+      ue_TimersAndConstants_t300			      = 1000;
+      ue_TimersAndConstants_t301			      = 1000;
+      ue_TimersAndConstants_t310			      = 1000;
+      ue_TimersAndConstants_t311			      = 10000;
+      ue_TimersAndConstants_n310			      = 20;
+      ue_TimersAndConstants_n311			      = 1;
+
+      ue_TransmissionMode	   			      = 1;
+
+      }
+    );
+
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+
+    ////////// MME parameters:
+    mme_ip_address      = ( { ipv4       = "192.168.12.11";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth3";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.215/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth3";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.215/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+    rrh_gw_config = (
+    {			  
+      	local_if_name = "eth3";			  
+	remote_address = "10.10.10.18";
+	local_address = "10.10.10.157";
+    	local_port = 50000;	#for raw option local port must be the same to remote	       
+    	remote_port = 50000; 
+    	rrh_gw_active = "yes";
+    	tr_preference = "udp_if4p5";
+    	rf_preference = "usrp_b200";
+    	iq_txshift = 4;
+    	tx_sample_advance = 80;	
+    	tx_scheduling_advance = 9; 	                
+        if_compression = "alaw";
+    }
+    );  
+
+    log_config :
+    {
+      global_log_level                      ="info";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+  }
+);
diff --git a/cmake_targets/autotests/v2/main.py b/cmake_targets/autotests/v2/main.py
index 6cf3b97c3608579706058f0ba465c84f86fbb734..da38432dbc270f9b208135191bd6a3df6d9a357d 100644
--- a/cmake_targets/autotests/v2/main.py
+++ b/cmake_targets/autotests/v2/main.py
@@ -280,65 +280,45 @@ machine_list.wait_all_free()
 # run eNB softmodem tests                                                    #
 ##############################################################################
 
-tests = {
-  'b210' : {
-    'alu' : {
-      '5' : {
-        'bandrich' : {
-          'tcp' : { 'ul': False, 'dl' : False },
-          'udp' : { 'ul': False, 'dl' : False }},
-        'sony' : {
-          'tcp' : { 'ul': False, 'dl' : False },
-          'udp' : { 'ul': False, 'dl' : False }}},
-      '10' : {
-        'bandrich' : {
-          'tcp' : { 'ul': False, 'dl' : False },
-          'udp' : { 'ul': False, 'dl' : False }},
-        'sony' : {
-          'tcp' : { 'ul': False, 'dl' : False },
-          'udp' : { 'ul': False, 'dl' : False }}},
-      '20' : {
-        'bandrich' : {
-          'tcp' : { 'ul': False, 'dl' : False },
-          'udp' : { 'ul': False, 'dl' : False }},
-        'sony' : {
-          'tcp' : { 'ul': False, 'dl' : False },
-          'udp' : { 'ul': False, 'dl' : False }}}},
-    'openair-cn' : {}
-  },
-  'x310' : {
-    'alu' : {},
-    'openair-cn' : {}
-  },
-  'exmimo2' : {
-    'alu' : {},
-    'openair-cn' : {}
-  }
-}
+tests = {}
+for a in { 'b210', 'remote b210', 'x310', 'exmimo2' }:
+  tests[a] = {}
+  for b in { 'alu', 'openair-cn' }:
+    tests[a][b] = {}
+    for c in { 'fdd', 'tdd' }:
+      tests[a][b][c] = {}
+      for d in { '5', '10', '20' }:
+        tests[a][b][c][d] = {}
+        for e in { 'bandrich', 'sony', '3276' }:
+          tests[a][b][c][d][e] = {}
+          for f in { 'tcp', 'udp' }:
+            tests[a][b][c][d][e][f] = {}
+            for g in { 'dl', 'ul' }:
+              tests[a][b][c][d][e][f][g] = False
 
 todo_tests_ids = []
 for test in todo_tests:
     todo_tests_ids.append(test.get('id'))
 
 for test in todo_tests_ids:
-  if test=='015500':tests['b210']['alu'][ '5']['bandrich']['udp']['ul']=True
-  if test=='015501':tests['b210']['alu']['10']['bandrich']['udp']['ul']=True
-  if test=='015502':tests['b210']['alu']['20']['bandrich']['udp']['ul']=True
-  if test=='015503':tests['b210']['alu'][ '5']['bandrich']['udp']['dl']=True
-  if test=='015504':tests['b210']['alu']['10']['bandrich']['udp']['dl']=True
-  if test=='015505':tests['b210']['alu']['20']['bandrich']['udp']['dl']=True
+  if test=='015500':tests['b210']['alu']['fdd'][ '5']['bandrich']['udp']['ul']=True
+  if test=='015501':tests['b210']['alu']['fdd']['10']['bandrich']['udp']['ul']=True
+  if test=='015502':tests['b210']['alu']['fdd']['20']['bandrich']['udp']['ul']=True
+  if test=='015503':tests['b210']['alu']['fdd'][ '5']['bandrich']['udp']['dl']=True
+  if test=='015504':tests['b210']['alu']['fdd']['10']['bandrich']['udp']['dl']=True
+  if test=='015505':tests['b210']['alu']['fdd']['20']['bandrich']['udp']['dl']=True
   if test=='015506':log('WARNING: skip test ' + test) #TODO
   if test=='015507':log('WARNING: skip test ' + test) #TODO
   if test=='015508':log('WARNING: skip test ' + test) #TODO
   if test=='015509':log('WARNING: skip test ' + test) #TODO
   if test=='015510':log('WARNING: skip test ' + test) #TODO
   if test=='015511':log('WARNING: skip test ' + test) #TODO
-  if test=='015512':tests['b210']['alu'][ '5']['bandrich']['tcp']['ul']=True
-  if test=='015513':tests['b210']['alu']['10']['bandrich']['tcp']['ul']=True
-  if test=='015514':tests['b210']['alu']['20']['bandrich']['tcp']['ul']=True
-  if test=='015515':tests['b210']['alu'][ '5']['bandrich']['tcp']['dl']=True
-  if test=='015516':tests['b210']['alu']['10']['bandrich']['tcp']['dl']=True
-  if test=='015517':tests['b210']['alu']['20']['bandrich']['tcp']['dl']=True
+  if test=='015512':tests['b210']['alu']['fdd'][ '5']['bandrich']['tcp']['ul']=True
+  if test=='015513':tests['b210']['alu']['fdd']['10']['bandrich']['tcp']['ul']=True
+  if test=='015514':tests['b210']['alu']['fdd']['20']['bandrich']['tcp']['ul']=True
+  if test=='015515':tests['b210']['alu']['fdd'][ '5']['bandrich']['tcp']['dl']=True
+  if test=='015516':tests['b210']['alu']['fdd']['10']['bandrich']['tcp']['dl']=True
+  if test=='015517':tests['b210']['alu']['fdd']['20']['bandrich']['tcp']['dl']=True
   if test=='015518':log('WARNING: skip test ' + test) #TODO
   if test=='015519':log('WARNING: skip test ' + test) #TODO
   if test=='015520':log('WARNING: skip test ' + test) #TODO
@@ -427,6 +407,19 @@ for test in todo_tests_ids:
   if test=='017504':log('WARNING: skip test ' + test) #TODO
   if test=='017505':log('WARNING: skip test ' + test) #TODO
 
+  if test=='017600':tests['remote b210']['alu']['fdd'][ '5']['bandrich']['udp']['ul']=True
+  if test=='017601':tests['remote b210']['alu']['fdd']['10']['bandrich']['udp']['ul']=True
+  if test=='017602':tests['remote b210']['alu']['fdd']['20']['bandrich']['udp']['ul']=True
+  if test=='017603':tests['remote b210']['alu']['fdd'][ '5']['bandrich']['udp']['dl']=True
+  if test=='017604':tests['remote b210']['alu']['fdd']['10']['bandrich']['udp']['dl']=True
+  if test=='017605':tests['remote b210']['alu']['fdd']['20']['bandrich']['udp']['dl']=True
+  if test=='017606':tests['remote b210']['alu']['fdd'][ '5']['bandrich']['tcp']['ul']=True
+  if test=='017607':tests['remote b210']['alu']['fdd']['10']['bandrich']['tcp']['ul']=True
+  if test=='017608':tests['remote b210']['alu']['fdd']['20']['bandrich']['tcp']['ul']=True
+  if test=='017609':tests['remote b210']['alu']['fdd'][ '5']['bandrich']['tcp']['dl']=True
+  if test=='017610':tests['remote b210']['alu']['fdd']['10']['bandrich']['tcp']['dl']=True
+  if test=='017611':tests['remote b210']['alu']['fdd']['20']['bandrich']['tcp']['dl']=True
+
   if test=='018000':log('WARNING: skip test ' + test) #TODO
   if test=='018001':log('WARNING: skip test ' + test) #TODO
   if test=='018002':log('WARNING: skip test ' + test) #TODO
@@ -441,6 +434,31 @@ for test in todo_tests_ids:
   if test=='018504':log('WARNING: skip test ' + test) #TODO
   if test=='018505':log('WARNING: skip test ' + test) #TODO
 
+  if test=='018600':tests['b210']['alu']['tdd'][ '5']['3276']['udp']['ul']=True
+  if test=='018601':tests['b210']['alu']['tdd']['10']['3276']['udp']['ul']=True
+  if test=='018602':tests['b210']['alu']['tdd']['20']['3276']['udp']['ul']=True
+  if test=='018603':tests['b210']['alu']['tdd'][ '5']['3276']['udp']['dl']=True
+  if test=='018604':tests['b210']['alu']['tdd']['10']['3276']['udp']['dl']=True
+  if test=='018605':tests['b210']['alu']['tdd']['20']['3276']['udp']['dl']=True
+  if test=='018606':log('WARNING: skip test ' + test) #TODO
+  if test=='018607':log('WARNING: skip test ' + test) #TODO
+  if test=='018608':log('WARNING: skip test ' + test) #TODO
+  if test=='018609':log('WARNING: skip test ' + test) #TODO
+  if test=='018610':log('WARNING: skip test ' + test) #TODO
+  if test=='018611':log('WARNING: skip test ' + test) #TODO
+  if test=='018612':tests['b210']['alu']['tdd'][ '5']['3276']['tcp']['ul']=True
+  if test=='018613':tests['b210']['alu']['tdd']['10']['3276']['tcp']['ul']=True
+  if test=='018614':tests['b210']['alu']['tdd']['20']['3276']['tcp']['ul']=True
+  if test=='018615':tests['b210']['alu']['tdd'][ '5']['3276']['tcp']['dl']=True
+  if test=='018616':tests['b210']['alu']['tdd']['10']['3276']['tcp']['dl']=True
+  if test=='018617':tests['b210']['alu']['tdd']['20']['3276']['tcp']['dl']=True
+  if test=='018618':log('WARNING: skip test ' + test) #TODO
+  if test=='018619':log('WARNING: skip test ' + test) #TODO
+  if test=='018620':log('WARNING: skip test ' + test) #TODO
+  if test=='018621':log('WARNING: skip test ' + test) #TODO
+  if test=='018622':log('WARNING: skip test ' + test) #TODO
+  if test=='018623':log('WARNING: skip test ' + test) #TODO
+
   if test=='025500':log('WARNING: skip test ' + test) #TODO
   if test=='025501':log('WARNING: skip test ' + test) #TODO
   if test=='025502':log('WARNING: skip test ' + test) #TODO
diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c
index 9d8818a444a2f18eb24a41b198c5d67e2ac46f34..56b23ea2b5cee744a74fb16a86553b6c89167334 100755
--- a/openair1/PHY/INIT/lte_init.c
+++ b/openair1/PHY/INIT/lte_init.c
@@ -615,8 +615,12 @@ void phy_config_afterHO_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_id, Mobility
 
     // RNTI
 
-    PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[eNB_id]->crnti = mobilityControlInfo->newUE_Identity.buf[0]|(mobilityControlInfo->newUE_Identity.buf[1]<<8);
 
+    PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[0][eNB_id]->crnti = mobilityControlInfo->newUE_Identity.buf[0]|(mobilityControlInfo->newUE_Identity.buf[1]<<8);
+    PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[1][eNB_id]->crnti = mobilityControlInfo->newUE_Identity.buf[0]|(mobilityControlInfo->newUE_Identity.buf[1]<<8);
+
+    LOG_I(PHY,"SET C-RNTI %x %x\n",PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[0][eNB_id]->crnti,
+                                   PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[1][eNB_id]->crnti);
   }
 
   if(ho_failed) {
@@ -836,7 +840,7 @@ void phy_config_dedicated_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,
 
     if (physicalConfigDedicated->antennaInfo) {
       phy_vars_ue->transmission_mode[eNB_id] = 1+(physicalConfigDedicated->antennaInfo->choice.explicitValue.transmissionMode);
-      LOG_D(PHY,"Transmission Mode %d\n",phy_vars_ue->transmission_mode[eNB_id]);
+      LOG_I(PHY,"Transmission Mode %d\n",phy_vars_ue->transmission_mode[eNB_id]);
       switch(physicalConfigDedicated->antennaInfo->choice.explicitValue.transmissionMode) {
       case AntennaInfoDedicated__transmissionMode_tm1:
         phy_vars_ue->transmission_mode[eNB_id] = 1;
@@ -857,7 +861,7 @@ void phy_config_dedicated_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,
         phy_vars_ue->transmission_mode[eNB_id] = 6;
         break;
       case AntennaInfoDedicated__transmissionMode_tm7:
-        lte_gold_ue_spec_port5(phy_vars_ue->lte_gold_uespec_port5_table, phy_vars_ue->frame_parms.Nid_cell, phy_vars_ue->pdcch_vars[eNB_id]->crnti);
+        lte_gold_ue_spec_port5(phy_vars_ue->lte_gold_uespec_port5_table, phy_vars_ue->frame_parms.Nid_cell, phy_vars_ue->pdcch_vars[0][eNB_id]->crnti);
         phy_vars_ue->transmission_mode[eNB_id] = 7;
         break;
       default:
@@ -949,6 +953,19 @@ void phy_config_dedicated_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,
   // fill cqi parameters for periodic CQI reporting
   get_cqipmiri_params(phy_vars_ue,eNB_id);
 
+  // disable MIB SIB decoding once we are on connected mode
+  LOG_I(PHY,"Disabling SIB MIB decoding \n");
+  phy_vars_ue->decode_SIB = 0;
+  phy_vars_ue->decode_MIB = 0;
+  //phy_vars_ue->pdcch_vars[1][eNB_id]->crnti = phy_vars_ue->pdcch_vars[0][eNB_id]->crnti;
+  if(phy_vars_ue->pdcch_vars[0][eNB_id]->crnti == 0x1234)
+      phy_vars_ue->pdcch_vars[0][eNB_id]->crnti = phy_vars_ue->pdcch_vars[1][eNB_id]->crnti;
+  else
+      phy_vars_ue->pdcch_vars[1][eNB_id]->crnti = phy_vars_ue->pdcch_vars[0][eNB_id]->crnti;
+
+  LOG_I(PHY,"C-RNTI %x %x \n", phy_vars_ue->pdcch_vars[0][eNB_id]->crnti,
+                               phy_vars_ue->pdcch_vars[1][eNB_id]->crnti);
+
 }
 
 void  phy_config_cba_rnti (module_id_t Mod_id,int CC_id,eNB_flag_t eNB_flag, uint8_t index, rnti_t cba_rnti, uint8_t cba_group_id, uint8_t num_active_cba_groups)
@@ -1071,7 +1088,8 @@ int phy_init_lte_ue(PHY_VARS_UE *ue,
   LTE_UE_PDSCH** const pdsch_vars_ra      = ue->pdsch_vars_ra;
   LTE_UE_PDSCH** const pdsch_vars_mch     = ue->pdsch_vars_MCH;
   LTE_UE_PBCH** const pbch_vars           = ue->pbch_vars;
-  LTE_UE_PDCCH** const pdcch_vars         = ue->pdcch_vars;
+  LTE_UE_PDCCH** const pdcch_vars_th0     = ue->pdcch_vars[0];
+  LTE_UE_PDCCH** const pdcch_vars_th1     = ue->pdcch_vars[1];
   LTE_UE_PRACH** const prach_vars         = ue->prach_vars;
 
   int i,j,k,l;
@@ -1153,7 +1171,8 @@ int phy_init_lte_ue(PHY_VARS_UE *ue,
     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_mch[eNB_id] = (LTE_UE_PDSCH *)malloc16_clear(sizeof(LTE_UE_PDSCH));
-    pdcch_vars[eNB_id]     = (LTE_UE_PDCCH *)malloc16_clear(sizeof(LTE_UE_PDCCH));
+    pdcch_vars_th0[eNB_id] = (LTE_UE_PDCCH *)malloc16_clear(sizeof(LTE_UE_PDCCH));
+    pdcch_vars_th1[eNB_id] = (LTE_UE_PDCCH *)malloc16_clear(sizeof(LTE_UE_PDCCH));
     prach_vars[eNB_id]     = (LTE_UE_PRACH *)malloc16_clear(sizeof(LTE_UE_PRACH));
     pbch_vars[eNB_id]      = (LTE_UE_PBCH *)malloc16_clear(sizeof(LTE_UE_PBCH));
 
@@ -1229,29 +1248,46 @@ int phy_init_lte_ue(PHY_VARS_UE *ue,
       phy_init_lte_ue__PDSCH( pdsch_vars_mch[eNB_id], fp );
 
       // 100 PRBs * 12 REs/PRB * 4 PDCCH SYMBOLS * 2 LLRs/RE
-      pdcch_vars[eNB_id]->llr   = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
-      pdcch_vars[eNB_id]->llr16 = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
-      pdcch_vars[eNB_id]->wbar  = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
-      pdcch_vars[eNB_id]->e_rx  = (int8_t*)malloc16_clear( 4*2*100*12 );
-
-      pdcch_vars[eNB_id]->rxdataF_comp        = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
-      pdcch_vars[eNB_id]->dl_ch_rho_ext       = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
-      pdcch_vars[eNB_id]->rho                 = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*) );
-      pdcch_vars[eNB_id]->rxdataF_ext         = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
-      pdcch_vars[eNB_id]->dl_ch_estimates_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pdcch_vars_th0[eNB_id]->llr   = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
+      pdcch_vars_th0[eNB_id]->llr16 = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
+      pdcch_vars_th0[eNB_id]->wbar  = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
+      pdcch_vars_th0[eNB_id]->e_rx  = (int8_t*)malloc16_clear( 4*2*100*12 );
+
+      pdcch_vars_th0[eNB_id]->rxdataF_comp        = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pdcch_vars_th0[eNB_id]->dl_ch_rho_ext       = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pdcch_vars_th0[eNB_id]->rho                 = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*) );
+      pdcch_vars_th0[eNB_id]->rxdataF_ext         = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pdcch_vars_th0[eNB_id]->dl_ch_estimates_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+
+      pdcch_vars_th1[eNB_id]->llr   = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
+      pdcch_vars_th1[eNB_id]->llr16 = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
+      pdcch_vars_th1[eNB_id]->wbar  = (uint16_t*)malloc16_clear( 2*4*100*12*sizeof(uint16_t) );
+      pdcch_vars_th1[eNB_id]->e_rx  = (int8_t*)malloc16_clear( 4*2*100*12 );
+
+      pdcch_vars_th1[eNB_id]->rxdataF_comp        = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pdcch_vars_th1[eNB_id]->dl_ch_rho_ext       = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pdcch_vars_th1[eNB_id]->rho                 = (int32_t**)malloc16( fp->nb_antennas_rx*sizeof(int32_t*) );
+      pdcch_vars_th1[eNB_id]->rxdataF_ext         = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
+      pdcch_vars_th1[eNB_id]->dl_ch_estimates_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
 
       for (i=0; i<fp->nb_antennas_rx; i++) {
         //ue_pdcch_vars[eNB_id]->rho[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(fp->N_RB_DL*12*7*2) );
-        pdcch_vars[eNB_id]->rho[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(100*12*4) );
+        pdcch_vars_th0[eNB_id]->rho[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(100*12*4) );
+        pdcch_vars_th1[eNB_id]->rho[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(100*12*4) );
 
         for (j=0; j<4; j++) { //fp->nb_antennas_tx; j++)
           int idx = (j<<1)+i;
           //  size_t num = 7*2*fp->N_RB_DL*12;
           size_t num = 4*100*12;  // 4 symbols, 100 PRBs, 12 REs per PRB
-          pdcch_vars[eNB_id]->rxdataF_comp[idx]        = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
-          pdcch_vars[eNB_id]->dl_ch_rho_ext[idx]       = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
-          pdcch_vars[eNB_id]->rxdataF_ext[idx]         = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
-          pdcch_vars[eNB_id]->dl_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
+          pdcch_vars_th0[eNB_id]->rxdataF_comp[idx]        = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
+          pdcch_vars_th0[eNB_id]->dl_ch_rho_ext[idx]       = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
+          pdcch_vars_th0[eNB_id]->rxdataF_ext[idx]         = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
+          pdcch_vars_th0[eNB_id]->dl_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
+
+          pdcch_vars_th1[eNB_id]->rxdataF_comp[idx]        = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
+          pdcch_vars_th1[eNB_id]->dl_ch_rho_ext[idx]       = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
+          pdcch_vars_th1[eNB_id]->rxdataF_ext[idx]         = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
+          pdcch_vars_th1[eNB_id]->dl_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
         }
       }
 
@@ -1307,6 +1343,10 @@ int phy_init_lte_ue(PHY_VARS_UE *ue,
   ue->high_speed_flag = 1;
   ue->ch_est_alpha    = 24576;
 
+  // enable MIB/SIB decoding by default
+  ue->decode_MIB = 1;
+  ue->decode_SIB = 1;
+
   init_prach_tables(839);
 
 
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c
index 02b5102ae544a16b04e527ac9aed30fc1fc84009..7e112342ce15980c0e199cc930c6428ea8347db7 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c
@@ -51,10 +51,10 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue,
   int uespec_pilot[300];
 
   LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->frame_parms;
-  LTE_UE_DLSCH_t **dlsch_ue       = phy_vars_ue->dlsch[eNB_id];
+  LTE_UE_DLSCH_t **dlsch_ue       = phy_vars_ue->dlsch[(Ns>>1)&0x1][eNB_id];
   LTE_DL_UE_HARQ_t *dlsch0_harq; 
 
-  harq_pid    = dlsch_ue[0]->current_harq_pid; 
+  harq_pid    = dlsch_ue[0]->current_harq_pid;
   dlsch0_harq = dlsch_ue[0]->harq_processes[harq_pid];
 
   if (((frame_parms->Ncp == NORMAL) && (symbol>=7)) ||
diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c
index 49fe90bf15c0f58668d8e12f010aa4b46a2fe842..21c4c8aba84c57cb312e0edb0900955e965db662 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci.c
@@ -1682,9 +1682,7 @@ void pdcch_alamouti(LTE_DL_FRAME_PARMS *frame_parms,
 
 int32_t avgP[4];
 
-int32_t rx_pdcch(LTE_UE_COMMON *common_vars,
-                 LTE_UE_PDCCH **pdcch_vars,
-                 LTE_DL_FRAME_PARMS *frame_parms,
+int32_t rx_pdcch(PHY_VARS_UE *ue,
                  uint32_t frame,
                  uint8_t subframe,
                  uint8_t eNB_id,
@@ -1693,6 +1691,10 @@ int32_t rx_pdcch(LTE_UE_COMMON *common_vars,
                  uint8_t is_secondary_ue)
 {
 
+  LTE_UE_COMMON *common_vars      = &ue->common_vars;
+  LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
+  LTE_UE_PDCCH **pdcch_vars       = ue->pdcch_vars[subframe & 0x1];
+
   uint8_t log2_maxh,aatx,aarx;
 #ifdef MU_RECEIVER
   uint8_t eNB_id_i=eNB_id+1;//add 1 to eNB_id to separate from wanted signal, chosen as the B/F'd pilots from the SeNB are shifted by 1
@@ -1701,7 +1703,7 @@ int32_t rx_pdcch(LTE_UE_COMMON *common_vars,
   uint8_t n_pdcch_symbols = 3; //pdcch_vars[eNB_id]->num_pdcch_symbols;
   uint8_t mi = get_mi(frame_parms,subframe);
 
-  //  printf("In rx_pdcch, subframe %d,  eNB_id %d\n",subframe,eNB_id);
+  //printf("In rx_pdcch, subframe %d, eNB_id %d, pdcch_vars %d \n",subframe,eNB_id,pdcch_vars);
 
   for (s=0; s<n_pdcch_symbols; s++) {
     if (is_secondary_ue == 1) {
@@ -1876,12 +1878,12 @@ int32_t rx_pdcch(LTE_UE_COMMON *common_vars,
                               pdcch_vars[eNB_id],
                               mimo_mode);
 
+
   if (n_pdcch_symbols>3)
     n_pdcch_symbols=1;
 
 
 #ifdef DEBUG_DCI_DECODING
-  printf("[PDCCH] subframe %d n_pdcch_symbols from PCFICH =%d\n",subframe,n_pdcch_symbols);
 
   printf("demapping: subframe %d, mi %d, tdd_config %d\n",subframe,get_mi(frame_parms,subframe),frame_parms->tdd_config);
 #endif
@@ -2503,7 +2505,7 @@ void dci_decoding(uint8_t DCI_LENGTH,
 }
 
 
-static uint8_t dci_decoded_output[(MAX_DCI_SIZE_BITS+64)/8];
+static uint8_t dci_decoded_output[2][(MAX_DCI_SIZE_BITS+64)/8];
 
 uint16_t get_nCCE(uint8_t num_pdcch_symbols,LTE_DL_FRAME_PARMS *frame_parms,uint8_t mi)
 {
@@ -2795,21 +2797,23 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars,
 #ifdef DEBUG_DCI_DECODING
 
       if (do_common == 1)
-        LOG_I(PHY,"[DCI search - common] Attempting candidate %d Aggregation Level %d DCI length %d at CCE %d/%d (CCEmap %x,CCEmap_cand %x)\n",m,L2,sizeof_bits,CCEind,nCCE,*CCEmap,CCEmap_mask);
+        LOG_I(PHY,"[DCI search nPdcch %d - common] Attempting candidate %d Aggregation Level %d DCI length %d at CCE %d/%d (CCEmap %x,CCEmap_cand %x)\n",
+                pdcch_vars[eNB_id]->num_pdcch_symbols,m,L2,sizeof_bits,CCEind,nCCE,*CCEmap,CCEmap_mask);
       else
-        LOG_I(PHY,"[DCI search - ue spec] Attempting candidate %d Aggregation Level %d DCI length %d at CCE %d/%d (CCEmap %x,CCEmap_cand %x)\n",m,L2,sizeof_bits,CCEind,nCCE,*CCEmap,CCEmap_mask);
+        LOG_I(PHY,"[DCI search nPdcch %d - ue spec] Attempting candidate %d Aggregation Level %d DCI length %d at CCE %d/%d (CCEmap %x,CCEmap_cand %x)\n",
+                pdcch_vars[eNB_id]->num_pdcch_symbols,m,L2,sizeof_bits,CCEind,nCCE,*CCEmap,CCEmap_mask);
 
 #endif
 
       dci_decoding(sizeof_bits,
                    L,
                    &pdcch_vars[eNB_id]->e_rx[CCEind*72],
-                   dci_decoded_output);
+                   &dci_decoded_output[subframe&0x1][0]);
       /*
         for (i=0;i<3+(sizeof_bits>>3);i++)
         printf("dci_decoded_output[%d] => %x\n",i,dci_decoded_output[i]);
       */
-      crc = (crc16(dci_decoded_output,sizeof_bits)>>16) ^ extract_crc(dci_decoded_output,sizeof_bits);
+      crc = (crc16(&dci_decoded_output[subframe&0x1][0],sizeof_bits)>>16) ^ extract_crc(&dci_decoded_output[subframe&0x1][0],sizeof_bits);
 #ifdef DEBUG_DCI_DECODING
       printf("crc =>%x\n",crc);
 #endif
@@ -2823,27 +2827,31 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars,
         dci_alloc[*dci_cnt].L          = L;
         dci_alloc[*dci_cnt].firstCCE   = CCEind;
 
+        //printf("DCI FOUND !!! crc =>%x,  sizeof_bits %d, sizeof_bytes %d \n",crc, sizeof_bits, sizeof_bytes);
         if (sizeof_bytes<=4) {
-          dci_alloc[*dci_cnt].dci_pdu[3] = dci_decoded_output[0];
-          dci_alloc[*dci_cnt].dci_pdu[2] = dci_decoded_output[1];
-          dci_alloc[*dci_cnt].dci_pdu[1] = dci_decoded_output[2];
-          dci_alloc[*dci_cnt].dci_pdu[0] = dci_decoded_output[3];
+          dci_alloc[*dci_cnt].dci_pdu[3] = dci_decoded_output[subframe&0x1][0];
+          dci_alloc[*dci_cnt].dci_pdu[2] = dci_decoded_output[subframe&0x1][1];
+          dci_alloc[*dci_cnt].dci_pdu[1] = dci_decoded_output[subframe&0x1][2];
+          dci_alloc[*dci_cnt].dci_pdu[0] = dci_decoded_output[subframe&0x1][3];
 #ifdef DEBUG_DCI_DECODING
-          printf("DCI => %x,%x,%x,%x\n",dci_decoded_output[0],dci_decoded_output[1],dci_decoded_output[2],dci_decoded_output[3]);
+          printf("DCI => %x,%x,%x,%x\n",dci_decoded_output[subframe&0x1][0],
+                  dci_decoded_output[subframe&0x1][1],
+                  dci_decoded_output[subframe&0x1][2],
+                  dci_decoded_output[subframe&0x1][3]);
 #endif
         } else {
-          dci_alloc[*dci_cnt].dci_pdu[7] = dci_decoded_output[0];
-          dci_alloc[*dci_cnt].dci_pdu[6] = dci_decoded_output[1];
-          dci_alloc[*dci_cnt].dci_pdu[5] = dci_decoded_output[2];
-          dci_alloc[*dci_cnt].dci_pdu[4] = dci_decoded_output[3];
-          dci_alloc[*dci_cnt].dci_pdu[3] = dci_decoded_output[4];
-          dci_alloc[*dci_cnt].dci_pdu[2] = dci_decoded_output[5];
-          dci_alloc[*dci_cnt].dci_pdu[1] = dci_decoded_output[6];
-          dci_alloc[*dci_cnt].dci_pdu[0] = dci_decoded_output[7];
+          dci_alloc[*dci_cnt].dci_pdu[7] = dci_decoded_output[subframe&0x1][0];
+          dci_alloc[*dci_cnt].dci_pdu[6] = dci_decoded_output[subframe&0x1][1];
+          dci_alloc[*dci_cnt].dci_pdu[5] = dci_decoded_output[subframe&0x1][2];
+          dci_alloc[*dci_cnt].dci_pdu[4] = dci_decoded_output[subframe&0x1][3];
+          dci_alloc[*dci_cnt].dci_pdu[3] = dci_decoded_output[subframe&0x1][4];
+          dci_alloc[*dci_cnt].dci_pdu[2] = dci_decoded_output[subframe&0x1][5];
+          dci_alloc[*dci_cnt].dci_pdu[1] = dci_decoded_output[subframe&0x1][6];
+          dci_alloc[*dci_cnt].dci_pdu[0] = dci_decoded_output[subframe&0x1][7];
 #ifdef DEBUG_DCI_DECODING
           printf("DCI => %x,%x,%x,%x,%x,%x,%x,%x\n",
-              dci_decoded_output[0],dci_decoded_output[1],dci_decoded_output[2],dci_decoded_output[3],
-              dci_decoded_output[4],dci_decoded_output[5],dci_decoded_output[6],dci_decoded_output[7]);
+              dci_decoded_output[subframe&0x1][0],dci_decoded_output[subframe&0x1][1],dci_decoded_output[subframe&0x1][2],dci_decoded_output[subframe&0x1][3],
+              dci_decoded_output[subframe&0x1][4],dci_decoded_output[subframe&0x1][5],dci_decoded_output[subframe&0x1][6],dci_decoded_output[subframe&0x1][7]);
 #endif
         }
 
@@ -2860,7 +2868,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars,
           *dci_cnt = *dci_cnt+1;
         } else if (crc==pdcch_vars[eNB_id]->crnti) {
 
-          if ((mode&UL_DCI)&&(format_c == format0)&&((dci_decoded_output[0]&0x80)==0)) {// check if pdu is format 0 or 1A
+          if ((mode&UL_DCI)&&(format_c == format0)&&((dci_decoded_output[subframe&0x1][0]&0x80)==0)) {// check if pdu is format 0 or 1A
             if (*format0_found == 0) {
               dci_alloc[*dci_cnt].format     = format0;
               *format0_found = 1;
@@ -2893,15 +2901,15 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars,
           break;
 
         case 2:
-          *CCEmap|=(0x03<<(CCEind&0x1f));
+          *CCEmap|=(1<<(CCEind&0x1f));
           break;
 
         case 4:
-          *CCEmap|=(0x0f<<(CCEind&0x1f));
+          *CCEmap|=(1<<(CCEind&0x1f));
           break;
 
         case 8:
-          *CCEmap|=(0xff<<(CCEind&0x1f));
+          *CCEmap|=(1<<(CCEind&0x1f));
           break;
         }
 
@@ -2928,7 +2936,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
 
   uint8_t  dci_cnt=0,old_dci_cnt=0;
   uint32_t CCEmap0=0,CCEmap1=0,CCEmap2=0;
-  LTE_UE_PDCCH **pdcch_vars = ue->pdcch_vars;
+  LTE_UE_PDCCH **pdcch_vars = ue->pdcch_vars[subframe & 0x1];
   LTE_DL_FRAME_PARMS *frame_parms  = &ue->frame_parms;
   uint8_t mi = get_mi(&ue->frame_parms,subframe);
   uint16_t ra_rnti=99;
@@ -3149,7 +3157,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0) ,
                             ra_rnti,
 			    P_RNTI,
                             2,
@@ -3177,7 +3185,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
                             2,
@@ -3209,7 +3217,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
 			    P_RNTI,
                             ra_rnti,
                             3,
@@ -3237,7 +3245,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
 			    3,
@@ -3271,7 +3279,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                           eNB_id,
                           frame_parms,
                           mi,
-                          SI_RNTI,
+                          ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                           ra_rnti,
 			  P_RNTI,
 			  0,
@@ -3300,7 +3308,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                           eNB_id,
                           frame_parms,
                           mi,
-                          SI_RNTI,
+                          ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                           ra_rnti,
 			  P_RNTI,
 			  1,
@@ -3333,7 +3341,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                           eNB_id,
                           frame_parms,
                           mi,
-                          SI_RNTI,
+                          ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                           ra_rnti,
 			  P_RNTI,
                           2,
@@ -3362,7 +3370,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                           eNB_id,
                           frame_parms,
                           mi,
-                          SI_RNTI,
+                          ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                           ra_rnti,
 			  P_RNTI,
                           3,
@@ -3395,7 +3403,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
                             0,
@@ -3426,7 +3434,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
                             1,
@@ -3458,7 +3466,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
 			    2,
@@ -3490,7 +3498,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
                             3,
@@ -3518,16 +3526,18 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
   } else if (tmode == 3) {
 
 
+    LOG_D(PHY," Now check UE_SPEC format 2A_2A search aggregation 1 dci length: %d[bits] %d[bytes]\n",format2A_size_bits,format2A_size_bytes);
     // Now check UE_SPEC format 2A_2A search spaces at aggregation 1
+    old_dci_cnt=dci_cnt;
     dci_decoding_procedure0(pdcch_vars,0,mode,
                             subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
-			    P_RNTI,
+                            P_RNTI,
                             0,
                             format1A,
                             format1A,
@@ -3542,21 +3552,25 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                             &CCEmap1,
                             &CCEmap2);
 
+    LOG_D(PHY," format 2A_2A search CCEmap0 %x, format0_found %d, format_c_found %d \n", CCEmap0, format0_found, format_c_found);
     if ((CCEmap0==0xffff)||
         ((format0_found==1)&&(format_c_found==1)))
       return(dci_cnt);
 
+    LOG_D(PHY," format 2A_2A search dci_cnt %d, old_dci_cn t%d \n", dci_cnt, old_dci_cnt);
     if (dci_cnt>old_dci_cnt)
       return(dci_cnt);
 
     // Now check UE_SPEC format 2 search spaces at aggregation 2
+    LOG_D(PHY," Now check UE_SPEC format 2A_2A search aggregation 2 dci length: %d[bits] %d[bytes]\n",format2A_size_bits,format2A_size_bytes);
+    old_dci_cnt=dci_cnt;
     dci_decoding_procedure0(pdcch_vars,0,mode,
                             subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
                             1,
@@ -3577,19 +3591,22 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
         ((format0_found==1)&&(format_c_found==1)))
       return(dci_cnt);
 
+    LOG_D(PHY," format 2A_2A search dci_cnt %d, old_dci_cn t%d \n", dci_cnt, old_dci_cnt);
     if (dci_cnt>old_dci_cnt)
       return(dci_cnt);
 
     // Now check UE_SPEC format 2_2A search spaces at aggregation 4
+    LOG_D(PHY," Now check UE_SPEC format 2_2A search spaces at aggregation 4 \n");
+    old_dci_cnt=dci_cnt;
     dci_decoding_procedure0(pdcch_vars,0,mode,
                             subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
-			    P_RNTI,
+                            P_RNTI,
                             2,
                             format1A,
                             format1A,
@@ -3608,18 +3625,21 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
         ((format0_found==1)&&(format_c_found==1)))
       return(dci_cnt);
 
+    LOG_D(PHY," format 2A_2A search dci_cnt %d, old_dci_cn t%d \n", dci_cnt, old_dci_cnt);
     if (dci_cnt>old_dci_cnt)
       return(dci_cnt);
 
     //#ifdef ALL_AGGREGATION
     // Now check UE_SPEC format 2_2A search spaces at aggregation 8
+    LOG_D(PHY," Now check UE_SPEC format 2_2A search spaces at aggregation 8 dci length: %d[bits] %d[bytes]\n",format2A_size_bits,format2A_size_bytes);
+    old_dci_cnt=dci_cnt;
     dci_decoding_procedure0(pdcch_vars,0,mode,
                             subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
                             3,
@@ -3636,16 +3656,24 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
                             &CCEmap1,
                             &CCEmap2);
     //#endif
+    if ((CCEmap0==0xffff)||
+        ((format0_found==1)&&(format_c_found==1)))
+      return(dci_cnt);
+
+    LOG_D(PHY," format 2A_2A search dci_cnt %d, old_dci_cn t%d \n", dci_cnt, old_dci_cnt);
+    if (dci_cnt>old_dci_cnt)
+      return(dci_cnt);
   } else if (tmode == 4) {
 
     // Now check UE_SPEC format 2_2A search spaces at aggregation 1
+    old_dci_cnt=dci_cnt;
     dci_decoding_procedure0(pdcch_vars,0,mode,
                             subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
                             0,
@@ -3670,13 +3698,14 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
       return(dci_cnt);
 
     // Now check UE_SPEC format 2 search spaces at aggregation 2
+    old_dci_cnt=dci_cnt;
     dci_decoding_procedure0(pdcch_vars,0,mode,
                             subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
                             1,
@@ -3701,13 +3730,14 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
       return(dci_cnt);
 
     // Now check UE_SPEC format 2_2A search spaces at aggregation 4
+    old_dci_cnt=dci_cnt;
     dci_decoding_procedure0(pdcch_vars,0,mode,
                             subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
                             2,
@@ -3733,13 +3763,14 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
 
     //#ifdef ALL_AGGREGATION
     // Now check UE_SPEC format 2_2A search spaces at aggregation 8
+    old_dci_cnt=dci_cnt;
     dci_decoding_procedure0(pdcch_vars,0,mode,
                             subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
                             3,
@@ -3762,13 +3793,14 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
 #ifdef DEBUG_DCI_DECODING
     LOG_I(PHY," MU-MIMO check UE_SPEC format 1E_2A_M10PRB\n");
 #endif
+    old_dci_cnt=dci_cnt;
     dci_decoding_procedure0(pdcch_vars,0,mode,
                             subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
                             0,
@@ -3794,13 +3826,14 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
       return(dci_cnt);
 
     // Now check UE_SPEC format 1E_2A_M10PRB search spaces aggregation 2
+    old_dci_cnt=dci_cnt;
     dci_decoding_procedure0(pdcch_vars,0,mode,
                             subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
                             1,
@@ -3825,13 +3858,14 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
       return(dci_cnt);
 
     // Now check UE_SPEC format 1E_2A_M10PRB search spaces aggregation 4
+    old_dci_cnt=dci_cnt;
     dci_decoding_procedure0(pdcch_vars,0,mode,
                             subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
                             2,
@@ -3858,13 +3892,14 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
     //#ifdef ALL_AGGREGATION
 
     // Now check UE_SPEC format 1E_2A_M10PRB search spaces at aggregation 8
+    old_dci_cnt=dci_cnt;
     dci_decoding_procedure0(pdcch_vars,0,mode,
                             subframe,
                             dci_alloc,
                             eNB_id,
                             frame_parms,
                             mi,
-                            SI_RNTI,
+                            ((ue->decode_SIB == 1) ? SI_RNTI : 0),
                             ra_rnti,
 			    P_RNTI,
                             3,
diff --git a/openair1/PHY/LTE_TRANSPORT/dci.h b/openair1/PHY/LTE_TRANSPORT/dci.h
index c250e7c10ab00fa29cc56fd7449a69410482f3b1..2987f026e04663ddd8ee68e2adb2b321a95d128a 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci.h
+++ b/openair1/PHY/LTE_TRANSPORT/dci.h
@@ -1897,9 +1897,9 @@ struct DCI2A_10MHz_4A_TDD {
 #define sizeof_DCI2A_10MHz_4A_TDD_t 41
 typedef struct DCI2A_10MHz_4A_TDD DCI2A_10MHz_4A_TDD_t;
 
-/// DCI Format Type 2A (10 MHz, FDD, 2 Antenna Ports, 36 bits)
+/// DCI Format Type 2A (10 MHz, FDD, 2 Antenna Ports, 40 bits)
 struct DCI2A_10MHz_2A_FDD {
-  uint64_t padding:28;
+  uint64_t padding:24;
   /// Redundancy version 2
   uint64_t rv2:2;
   /// New Data Indicator 2
@@ -1923,7 +1923,7 @@ struct DCI2A_10MHz_2A_FDD {
   /// Resource Allocation Header
   uint64_t rah:1;
 } __attribute__ ((__packed__));
-#define sizeof_DCI2A_10MHz_2A_FDD_t 36
+#define sizeof_DCI2A_10MHz_2A_FDD_t 41
 typedef struct DCI2A_10MHz_2A_FDD DCI2A_10MHz_2A_FDD_t;
 
 /// DCI Format Type 2A (10 MHz, FDD, 4 Antenna Ports, 38 bits)
diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
index 9876b4b169430f9488bd55c5732fe036527d7e14..2a8e44256351d1a1602fa8d5e66e81d677867007 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
@@ -4763,22 +4763,26 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format,
         uint16_t si_rnti,
         uint16_t ra_rnti,
         uint16_t p_rnti,
+        uint32_t frame,
+        uint8_t  subframe,
         DCI_INFO_EXTRACTED_t *pdci_info_extarcted,
         LTE_DL_UE_HARQ_t *pdlsch0_harq)
 {
     uint8_t  harq_pid  = pdci_info_extarcted->harq_pid;
     uint32_t rballoc   = pdci_info_extarcted->rballoc;
     uint8_t  mcs1      = pdci_info_extarcted->mcs1;
-    uint8_t  rv1       = pdci_info_extarcted->rv1;
-    uint8_t  ndi1      = pdci_info_extarcted->ndi1;
     uint8_t  TPC       = pdci_info_extarcted->TPC;
     uint8_t  rah       = pdci_info_extarcted->rah;
+#ifdef DEBUG_DCI
+    uint8_t  rv1       = pdci_info_extarcted->rv1;
+    uint8_t  ndi1      = pdci_info_extarcted->ndi1;
+#endif
 
     uint8_t  NPRB    = 0;
     long long int RIV_max = 0;
 
 #ifdef DEBUG_DCI
-    LOG_I(PHY,"[DCI-FORMAT-1-1A] dci_format %d\n", dci_format);
+    LOG_I(PHY,"[DCI-FORMAT-1-1A] AbsSubframe %d.%d dci_format %d\n", frame, subframe, dci_format);
     LOG_I(PHY,"[DCI-FORMAT-1-1A] rnti       %x\n",  rnti);
     LOG_I(PHY,"[DCI-FORMAT-1-1A] harq_pid   %d\n", harq_pid);
     LOG_I(PHY,"[DCI-FORMAT-1-1A] rah        %d\n", rah);
@@ -4983,24 +4987,30 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
     uint8_t  rv2  = pdci_info_extarcted->rv2;
     uint8_t  harq_pid = pdci_info_extarcted->harq_pid;
     uint32_t rballoc  = pdci_info_extarcted->rballoc;
+
+#ifdef DEBUG_DCI
     uint8_t  ndi1     = pdci_info_extarcted->ndi1;
     uint8_t  ndi2     = pdci_info_extarcted->ndi2;
+#endif
 
     uint8_t  NPRB    = 0;
     long long RIV_max = 0;
 
+#ifdef DEBUG_DCI
     LOG_I(PHY, "extarcted dci - dci_format %d \n", dci_format);
+    LOG_I(PHY, "extarcted dci - rnti       %d \n", rnti);
     LOG_I(PHY, "extarcted dci - rah        %d \n", rah);
     LOG_I(PHY, "extarcted dci - mcs1       %d \n", mcs1);
     LOG_I(PHY, "extarcted dci - mcs2       %d \n", mcs2);
     LOG_I(PHY, "extarcted dci - rv1        %d \n", rv1);
     LOG_I(PHY, "extarcted dci - rv2        %d \n", rv2);
-    LOG_I(PHY, "extarcted dci - ndi1       %d \n", ndi1);
-    LOG_I(PHY, "extarcted dci - ndi2       %d \n", ndi2);
+    //LOG_I(PHY, "extarcted dci - ndi1       %d \n", ndi1);
+    //LOG_I(PHY, "extarcted dci - ndi2       %d \n", ndi2);
     LOG_I(PHY, "extarcted dci - rballoc    %x \n", rballoc);
-    LOG_I(PHY, "extarcted dci - harq pif   %d \n", harq_pid);
+    LOG_I(PHY, "extarcted dci - harq pid   %d \n", harq_pid);
     LOG_I(PHY, "extarcted dci - round0     %d \n", pdlsch0_harq->round);
     LOG_I(PHY, "extarcted dci - round1     %d \n", pdlsch1_harq->round);
+#endif
 
     // I- check dci content minimum coherency
     if(harq_pid >8)
@@ -5043,6 +5053,21 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
     }*/
 
 
+    if((pdlsch0_harq->round == 0) && (rv1 > 0))
+    {
+      // DCI false detection
+        LOG_I(PHY,"bad rv1\n");
+      return(0);
+    }
+
+    if((pdlsch1_harq->round == 0) && (rv2 > 0))
+    {
+      // DCI false detection
+        LOG_I(PHY,"bad rv2\n");
+      return(0);
+    }
+
+
     switch (N_RB_DL) {
     case 6:
         if (rah == 0)
@@ -5119,6 +5144,7 @@ void prepare_dl_decoding_format1_1A(DCI_format_t dci_format,
                                     LTE_DL_FRAME_PARMS *frame_parms,
                                     uint8_t  subframe,
                                     uint16_t rnti,
+									uint16_t tc_rnti,
                                     uint16_t si_rnti,
                                     uint16_t ra_rnti,
                                     uint16_t p_rnti,
@@ -5181,6 +5207,13 @@ void prepare_dl_decoding_format1_1A(DCI_format_t dci_format,
     }
     else //CRNTI
     {
+    	if (rnti == tc_rnti) {
+			//fix for standalone Contention Resolution Id
+			pdlsch0_harq->DCINdi = (uint8_t)-1;
+			 LOG_D(PHY,"UE (%x/%d): Format1A DCI: C-RNTI is temporary. Set NDI = %d and to be ignored\n",
+				 rnti,harq_pid,pdlsch0_harq->DCINdi);
+    	}
+
         // DCI has been toggled or this is the first transmission
         if (ndi1!=pdlsch0_harq->DCINdi)
         {
@@ -5606,6 +5639,7 @@ void compute_precoding_info_format2A(uint8_t tpmi,
 void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
                                     DCI_INFO_EXTRACTED_t *pdci_info_extarcted,
                                     LTE_DL_FRAME_PARMS *frame_parms,
+                                    uint16_t rnti,
                                     uint8_t subframe,
                                     LTE_DL_UE_HARQ_t *dlsch0_harq,
                                     LTE_DL_UE_HARQ_t *dlsch1_harq,
@@ -5663,15 +5697,17 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
         dlsch1_harq->dl_power_off = 1;
 
         pdlsch0->current_harq_pid = harq_pid;
-        pdlsch0->harq_ack[subframe].harq_id = harq_pid;
+        pdlsch0->harq_ack[subframe].harq_id     = harq_pid;
         pdlsch1->current_harq_pid = harq_pid;
-        pdlsch1->harq_ack[subframe].harq_id = harq_pid;
+        pdlsch1->harq_ack[subframe].harq_id     = harq_pid;
 
         // assume two CW are active
         dlsch0_harq->status   = ACTIVE;
         dlsch1_harq->status   = ACTIVE;
         pdlsch0->active = 1;
         pdlsch1->active = 1;
+        pdlsch0->rnti = rnti;
+        pdlsch1->rnti = rnti;
 
 
       if (TB0_active && TB1_active && tbswap==1) {
@@ -5682,23 +5718,19 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
       if (TB0_active==0) {
         dlsch0_harq->status = SCH_IDLE;
         pdlsch0->active     = 0;
-#ifdef DEBUG_HARQ
+  #ifdef DEBUG_HARQ
         printf("[DCI UE]: TB0 is deactivated, retransmit TB1 transmit in TM6\n");
-#endif
+  #endif
       }
 
       if (TB1_active==0) {
         dlsch1_harq->status = SCH_IDLE;
         pdlsch1->active     = 0;
-#ifdef DEBUG_HARQ
-        printf("[DCI UE]: TB1 is deactivated, retransmit TB0 transmit in TM6\n");
-#endif
       }
 
-
-#ifdef DEBUG_HARQ
+//#ifdef DEBUG_HARQ
       printf("[DCI UE]: dlsch0_harq status %d , dlsch1_harq status %d\n", dlsch0_harq->status, dlsch1_harq->status);
-#endif
+//#endif
 
       // compute resource allocation
       if (TB0_active == 1){
@@ -5727,6 +5759,9 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
           dlsch1_harq->rb_alloc_odd[3] = dlsch0_harq->rb_alloc_odd[3];
 
           dlsch1_harq->nb_rb = dlsch0_harq->nb_rb;
+
+          //dlsch0_harq->Nl       = 1;
+          //dlsch1_harq->Nl       = 1;
         }
       } else if ((TB0_active == 0) && (TB1_active == 1)){
 
@@ -5774,38 +5809,57 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
         if ((ndi1!=dlsch0_harq->DCINdi) || (dlsch0_harq->first_tx==1))  {
           dlsch0_harq->round = 0;
 
+          //LOG_I(PHY,"[UE] DLSCH: New Data Indicator CW0 subframe %d (pid %d, round %d)\n",
+          //           subframe,harq_pid,dlsch0_harq->round);
           if ( dlsch0_harq->first_tx==1) {
             LOG_D(PHY,"Format 2 DCI First TX0: Clearing flag\n");
             dlsch0_harq->first_tx = 0;
           }
         }else{
          if(dlsch0_harq->round == 0) {
+#if 0
             // skip pdsch decoding and report ack
             dlsch0_harq->status   = SCH_IDLE;
             pdlsch0->active       = 0;
             pdlsch0->harq_ack[subframe].ack = 1;
             pdlsch0->harq_ack[subframe].harq_id = harq_pid;
             pdlsch0->harq_ack[subframe].send_harq_status = 1;
+#endif
          }
         }
 
-          dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
-          if(dlsch0_harq->Nl == 2)
-            dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][(dlsch0_harq->nb_rb<<1)-1];
-          if (mcs1 <= 28)
+        // if Imcs in [29..31] TBS is assumed to be as determined from DCI transported in the latest
+        // PDCCH for the same trasport block using Imcs in [0 .. 28]
+        if(dlsch0_harq->mcs <= 28)
+        {
+            dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
+            LOG_D(PHY,"[UE] DLSCH: New TBS CW0 subframe %d (pid %d, round %d) TBS %d \n",
+                       subframe,harq_pid,dlsch0_harq->round, dlsch0_harq->TBS);
+        }
+        else
+        {
+            LOG_D(PHY,"[UE] DLSCH: Keep the same TBS CW0 subframe %d (pid %d, round %d) TBS %d \n",
+                       subframe,harq_pid,dlsch0_harq->round, dlsch0_harq->TBS);
+        }
+        //if(dlsch0_harq->Nl == 2)
+        //dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][(dlsch0_harq->nb_rb<<1)-1];
+        if (mcs1 <= 28)
             dlsch0_harq->Qm = get_Qm(mcs1);
-          else if (mcs1<=31)
+        else if (mcs1<=31)
             dlsch0_harq->Qm = (mcs1-28)<<1;
       }
 
       if (TB1_active) {
         if ((ndi2!=dlsch1_harq->DCINdi) || (dlsch1_harq->first_tx==1)) {
           dlsch1_harq->round = 0;
+          //LOG_I(PHY,"[UE] DLSCH: New Data Indicator CW1 subframe %d (pid %d, round %d)\n",
+          //           subframe,harq_pid,dlsch0_harq->round);
           if (dlsch1_harq->first_tx==1) {
             LOG_D(PHY,"Format 2 DCI First TX1: Clearing flag\n");
             dlsch1_harq->first_tx = 0;
           }
         }else{
+#if 0
          if(dlsch1_harq->round == 0) {
             // skip pdsch decoding and report ack
             dlsch1_harq->status   = SCH_IDLE;
@@ -5814,21 +5868,31 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
             pdlsch1->harq_ack[subframe].harq_id = harq_pid;
             pdlsch1->harq_ack[subframe].send_harq_status = 1;
          }
+#endif
         }
 
-          dlsch1_harq->TBS = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch1_harq->nb_rb-1];
-          if(dlsch0_harq->Nl == 2)
-            dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][(dlsch0_harq->nb_rb<<1)-1];
-
-          if (mcs2 <= 28)
+        // if Imcs in [29..31] TBS is assumed to be as determined from DCI transported in the latest
+        // PDCCH for the same trasport block using Imcs in [0 .. 28]
+        if(dlsch1_harq->mcs <= 28)
+        {
+            dlsch1_harq->TBS = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch1_harq->nb_rb-1];
+            LOG_D(PHY,"[UE] DLSCH: New TBS CW1 subframe %d (pid %d, round %d) TBS %d \n",
+                       subframe,harq_pid,dlsch1_harq->round, dlsch1_harq->TBS);
+        }
+        else
+        {
+            LOG_D(PHY,"[UE] DLSCH: Keep the same TBS CW1 subframe %d (pid %d, round %d) TBS %d \n",
+                       subframe,harq_pid,dlsch1_harq->round, dlsch1_harq->TBS);
+        }
+        if (mcs2 <= 28)
             dlsch1_harq->Qm = get_Qm(mcs2);
-          else if (mcs1<=31)
+        else if (mcs1<=31)
             dlsch1_harq->Qm = (mcs2-28)<<1;
       }
 
-#ifdef DEBUG_HARQ
+//#ifdef DEBUG_HARQ
       printf("[DCI UE]: dlsch0_harq status %d , dlsch1_harq status %d\n", dlsch0_harq->status, dlsch1_harq->status);
-#endif
+//#endif
 
   #ifdef DEBUG_HARQ
       if (dlsch0 != NULL && dlsch1 != NULL)
@@ -5920,7 +5984,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
                                               tc_rnti,
                                               si_rnti,
                                               ra_rnti,
-                                              p_rnti,
+                                              p_rnti,frame,subframe,
                                               &dci_info_extarcted,
                                               dlsch0_harq);
       if(status == 0)
@@ -5936,6 +6000,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
                                      frame_parms,
                                      subframe,
                                      rnti,
+									 tc_rnti,
                                      si_rnti,
                                      ra_rnti,
                                      p_rnti,
@@ -6020,7 +6085,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
                                               tc_rnti,
                                               si_rnti,
                                               ra_rnti,
-                                              p_rnti,
+                                              p_rnti,frame,subframe,
                                               &dci_info_extarcted,
                                               dlsch0_harq);
       if(status == 0)
@@ -6036,6 +6101,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
                                      frame_parms,
                                      subframe,
                                      rnti,
+									 tc_rnti,
                                      si_rnti,
                                      ra_rnti,
                                      p_rnti,
@@ -6047,7 +6113,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
     case format2:
     {
         // extract dci infomation
-        LOG_I(PHY,"[DCI-format2] extract dci infomation \n");
+        //LOG_I(PHY,"[DCI-format2] AbsSubframe %d.%d extract dci infomation \n", frame, subframe);
         extract_dci2_info(frame_parms->N_RB_DL,
                 frame_type,
                 frame_parms->nb_antenna_ports_eNB,
@@ -6069,7 +6135,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
         dlsch0_harq = dlsch0->harq_processes[harq_pid];
         dlsch1_harq = dlsch1->harq_processes[harq_pid];
 
-        LOG_I(PHY,"[DCI-format2] check dci content \n");
+        //LOG_I(PHY,"[DCI-format2] check dci content \n");
         status = check_dci_format2_2a_coherency(format2,
                 frame_parms->N_RB_DL,
                 &dci_info_extarcted,
@@ -6083,10 +6149,11 @@ int generate_ue_dlsch_params_from_dci(int frame,
             return(-1);
 
         // dci is correct ==> update internal structure and prepare dl decoding
-        LOG_I(PHY,"[DCI-format2] update internal structure and prepare dl decoding \n");
+        //LOG_I(PHY,"[DCI-format2] update internal structure and prepare dl decoding \n");
         prepare_dl_decoding_format2_2A(format2,
                 &dci_info_extarcted,
                 frame_parms,
+                rnti,
                 subframe,
                 dlsch0_harq,
                 dlsch1_harq,
@@ -6099,7 +6166,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
     case format2A:
     {
     // extract dci infomation
-    LOG_I(PHY,"[DCI-format2A] extract dci infomation \n");
+    LOG_I(PHY,"[DCI-format2] AbsSubframe %d.%d extract dci infomation \n", frame%1024, subframe);
     extract_dci2A_info(frame_parms->N_RB_DL,
                        frame_type,
                        frame_parms->nb_antenna_ports_eNB,
@@ -6107,10 +6174,10 @@ int generate_ue_dlsch_params_from_dci(int frame,
                        &dci_info_extarcted);
 
     // check dci content
-    LOG_I(PHY,"[DCI-format2A] check dci content \n");
-    LOG_I(PHY,"[DCI-format2A] tb_swap %d harq_pid %d\n", dci_info_extarcted.tb_swap, dci_info_extarcted.harq_pid);
-      dlsch[0]->active = 0;
-      dlsch[1]->active = 0;
+    //LOG_I(PHY,"[DCI-format2A] check dci content \n");
+    //LOG_I(PHY,"[DCI-format2A] tb_swap %d harq_pid %d\n", dci_info_extarcted.tb_swap, dci_info_extarcted.harq_pid);
+      //dlsch[0]->active = 0;
+      //dlsch[1]->active = 0;
 
     if (dci_info_extarcted.tb_swap == 0) {
       dlsch0 = dlsch[0];
@@ -6122,7 +6189,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
     dlsch0_harq = dlsch0->harq_processes[dci_info_extarcted.harq_pid];
     dlsch1_harq = dlsch1->harq_processes[dci_info_extarcted.harq_pid];
 
-    LOG_I(PHY,"[DCI-format2A] check dci content \n");
+    //LOG_I(PHY,"[DCI-format2A] check dci content \n");
     status = check_dci_format2_2a_coherency(format2A,
                                               frame_parms->N_RB_DL,
                                               &dci_info_extarcted,
@@ -6136,10 +6203,11 @@ int generate_ue_dlsch_params_from_dci(int frame,
       return(-1);
 
     // dci is correct ==> update internal structure and prepare dl decoding
-    LOG_I(PHY,"[DCI-format2A] update internal structure and prepare dl decoding \n");
+    //LOG_I(PHY,"[DCI-format2A] update internal structure and prepare dl decoding \n");
     prepare_dl_decoding_format2_2A(format2A,
                                    &dci_info_extarcted,
                                    frame_parms,
+                                   rnti,
                                    subframe,
                                    dlsch0_harq,
                                    dlsch1_harq,
@@ -6318,7 +6386,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
     }
 
 
-  #ifdef DEBUG_DCI
+#ifdef DEBUG_DCI
 
     if (dlsch[0] && (dlsch[0]->rnti != 0xffff)) {
       printf("dci_format:%d Abssubframe: %d.%d \n",dci_format,frame%1024,subframe);
@@ -6326,7 +6394,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
       printf("PDSCH dlsch0 UE: NBRB     %d\n",dlsch0_harq->nb_rb);
       printf("PDSCH dlsch0 UE: rballoc  %x\n",dlsch0_harq->rb_alloc_even[0]);
       printf("PDSCH dlsch0 UE: harq_pid %d\n",harq_pid);
-      printf("PDSCH dlsch0 UE: tpc      %d\n",TPC);
+      //printf("PDSCH dlsch0 UE: tpc      %d\n",TPC);
       printf("PDSCH dlsch0 UE: g        %d\n",dlsch[0]->g_pucch);
       printf("PDSCH dlsch0 UE: round    %d\n",dlsch0_harq->round);
       printf("PDSCH dlsch0 UE: DCINdi   %d\n",dlsch0_harq->DCINdi);
@@ -6335,8 +6403,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
       printf("PDSCH dlsch0 UE: mcs      %d\n",dlsch0_harq->mcs);
       printf("PDSCH dlsch0 UE: pwr_off  %d\n",dlsch0_harq->dl_power_off);
     }
-
-  #endif
+#endif
 
   #if T_TRACER
     if( (dlsch[0]->rnti != si_rnti) && (dlsch[0]->rnti != ra_rnti) && (dlsch[0]->rnti != p_rnti))
@@ -7142,7 +7209,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
   uint8_t transmission_mode = ue->transmission_mode[eNB_id];
   ANFBmode_t AckNackFBMode;
   LTE_UE_ULSCH_t *ulsch = ue->ulsch[eNB_id];
-  LTE_UE_DLSCH_t **dlsch = ue->dlsch[0];
+  LTE_UE_DLSCH_t **dlsch = ue->dlsch[subframe&0x1][0];
   PHY_MEASUREMENTS *meas = &ue->measurements;
   LTE_DL_FRAME_PARMS *frame_parms = &ue->frame_parms;
   //  uint32_t current_dlsch_cqi = ue->current_dlsch_cqi[eNB_id];
@@ -7948,7 +8015,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
     if (frame_parms->frame_type == FDD) {
       int dl_subframe = (subframe<4) ? (subframe+6) : (subframe-4);
 
-      if (ue->dlsch[eNB_id][0]->harq_ack[dl_subframe].send_harq_status>0) { // we have downlink transmission
+      if (ue->dlsch[dl_subframe&0x1][eNB_id][0]->harq_ack[dl_subframe].send_harq_status>0) { // we have downlink transmission
         ulsch->harq_processes[harq_pid]->O_ACK = 1;
       } else {
         ulsch->harq_processes[harq_pid]->O_ACK = 0;
@@ -8019,7 +8086,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
 
   // 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%1024,subframe);
     printf("Format 0 DCI : ulsch (ue): NBRB        %d\n",ulsch->harq_processes[harq_pid]->nb_rb);
diff --git a/openair1/PHY/LTE_TRANSPORT/defs.h b/openair1/PHY/LTE_TRANSPORT/defs.h
index 3b13c01c52ccf0b2b02e69772aa38ec61487d3e5..f6293bf1b2d73689d6769a1270bfe0ad53fc418b 100755
--- a/openair1/PHY/LTE_TRANSPORT/defs.h
+++ b/openair1/PHY/LTE_TRANSPORT/defs.h
@@ -708,7 +708,7 @@ typedef struct {
   int16_t sqrt_rho_a;
   /// amplitude of PDSCH (compared to RS) in symbols containing pilots
   int16_t sqrt_rho_b;
-  /// Current HARQ process id
+  /// Current HARQ process id threadRx Odd and threadRx Even
   uint8_t current_harq_pid;
   /// Current subband antenna selection
   uint32_t antenna_alloc;
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
index 04794e3ffcba4fcf6540f31cffe594416774b23f..9f8ee6cec79a861403653fabbc6348f534647fa6 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
@@ -38,6 +38,7 @@
 #include "SIMULATION/TOOLS/defs.h"
 //#define DEBUG_DLSCH_DECODING
 
+extern double cpuf;
 
 void free_ue_dlsch(LTE_UE_DLSCH_t *dlsch)
 {
@@ -159,7 +160,7 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
                          LTE_DL_FRAME_PARMS *frame_parms,
                          LTE_UE_DLSCH_t *dlsch,
                          LTE_DL_UE_HARQ_t *harq_process,
-                         uint8_t frame,
+                         uint32_t frame,
                          uint8_t subframe,
                          uint8_t harq_pid,
                          uint8_t is_crnti,
@@ -270,7 +271,7 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
     return(max_turbo_iterations);
     }*/
 
-  /*harq_pid = dlsch->current_harq_pid;
+  /*harq_pid = dlsch->current_harq_pid[subframe&0x1];
   if (harq_pid >= 8) {
     printf("dlsch_decoding.c: Illegal harq_pid %d\n",harq_pid);
     return(max_turbo_iterations);
@@ -341,6 +342,8 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
   printf("Segmentation: C %d, Cminus %d, Kminus %d, Kplus %d\n",harq_process->C,harq_process->Cminus,harq_process->Kminus,harq_process->Kplus);
 #endif
 
+  opp_enabled=1;
+
   for (r=0; r<harq_process->C; r++) {
 
 
@@ -376,7 +379,7 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
                                             (r==0) ? harq_process->F : 0);
 
 #ifdef DEBUG_DLSCH_DECODING
-    LOG_I(PHY,"HARQ_PID %d Rate Matching Segment %d (coded bits %d,unpunctured/repeated bits %d, TBS %d, mod_order %d, nb_rb %d, Nl %d, rv %d, round %d)...\n",
+    LOG_D(PHY,"HARQ_PID %d Rate Matching Segment %d (coded bits %d,unpunctured/repeated bits %d, TBS %d, mod_order %d, nb_rb %d, Nl %d, rv %d, round %d)...\n",
           harq_pid,r, G,
           Kr*3,
           harq_process->TBS,
@@ -459,12 +462,17 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
 #if 1
     if (err_flag == 0) {
 
+        LOG_D(PHY, "turbo algo Kr=%d cb_cnt=%d C=%d nbRB=%d TBSInput=%d TBSHarq=%d TBSplus24=%d mcs=%d Qm=%d RIV=%d round=%d maxIter %d\n",
+                            Kr,r,harq_process->C,harq_process->nb_rb,A,harq_process->TBS,
+                            harq_process->B,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round,dlsch->max_turbo_iterations);
+
     	if (llr8_flag) {
     		AssertFatal (Kr >= 256, "turbo algo issue Kr=%d cb_cnt=%d C=%d nbRB=%d TBSInput=%d TBSHarq=%d TBSplus24=%d mcs=%d Qm=%d RIV=%d round=%d\n",
     				Kr,r,harq_process->C,harq_process->nb_rb,A,harq_process->TBS,harq_process->B,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round);
     	}
 
       start_meas(dlsch_turbo_decoding_stats);
+      LOG_D(PHY,"AbsSubframe %d.%d Start turbo segment %d/%d \n",frame%1024,subframe,r,harq_process->C-1);
       ret = tc
             (&harq_process->d[r][96],
              harq_process->c[r],
@@ -605,6 +613,13 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
              &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
 	  stop_meas(dlsch_turbo_decoding_stats);
 
+	  /*printf("Segmentation: C %d r %d, dlsch_rate_unmatching_stats %5.3f dlsch_deinterleaving_stats %5.3f  dlsch_turbo_decoding_stats %5.3f \n",
+              harq_process->C,
+              r,
+              dlsch_rate_unmatching_stats->p_time/(cpuf*1000.0),
+              dlsch_deinterleaving_stats->p_time/(cpuf*1000.0),
+              dlsch_turbo_decoding_stats->p_time/(cpuf*1000.0));*/
+
 	}
       }
     }
@@ -612,7 +627,7 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
 
 
     if ((err_flag == 0) && (ret>=(1+dlsch->max_turbo_iterations))) {// a Code segment is in error so break;
-      //printf("CRC failed, segment %d\n",r);
+      LOG_D(PHY,"AbsSubframe %d.%d CRC failed, segment %d/%d \n",frame%1024,subframe,r,harq_process->C-1);
       err_flag = 1;
     }
   }
@@ -636,25 +651,28 @@ uint32_t  dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
     harq_process->round++;
 
 
-    if(is_crnti)
-    {
-    LOG_D(PHY,"[UE %d] DLSCH: Setting NACK for subframe %d (pid %d, round %d, TBS %d)\n",phy_vars_ue->Mod_id,subframe,harq_pid,harq_process->round,harq_process->TBS);
-    }
     //    printf("Rate: [UE %d] DLSCH: Setting NACK for subframe %d (pid %d, round %d)\n",phy_vars_ue->Mod_id,subframe,harq_pid,harq_process->round);
     if (harq_process->round >= dlsch->Mdlharq) {
       harq_process->status = SCH_IDLE;
+      harq_process->round  = 0;
+    }
+    if(is_crnti)
+    {
+    LOG_D(PHY,"[UE %d] DLSCH: Setting NACK for subframe %d (pid %d, pid status %d, round %d/Max %d, TBS %d)\n",
+               phy_vars_ue->Mod_id,subframe,harq_pid,harq_process->status,harq_process->round,dlsch->Mdlharq,harq_process->TBS);
     }
 
     return((1+dlsch->max_turbo_iterations));
   } else {
-    LOG_D(PHY,"[UE %d] DLSCH: Setting ACK for SFN/SF %d/%d (pid %d, round %d, subframe %d)\n",
-        phy_vars_ue->Mod_id, frame_rx_prev, subframe_rx_prev, harq_pid, harq_process->round, subframe);
 
     harq_process->status = SCH_IDLE;
     harq_process->round  = 0;
     dlsch->harq_ack[subframe].ack = 1;
     dlsch->harq_ack[subframe].harq_id = harq_pid;
     dlsch->harq_ack[subframe].send_harq_status = 1;
+    LOG_D(PHY,"[UE %d] DLSCH: Setting ACK for SFN/SF %d/%d (pid %d, pid status %d, round %d, subframe %d)\n",
+        phy_vars_ue->Mod_id, frame_rx_prev, subframe_rx_prev, harq_pid, harq_process->status, harq_process->round, subframe);
+
     if(is_crnti)
     {
     LOG_D(PHY,"[UE %d] DLSCH: Setting ACK for subframe %d (pid %d, round %d, TBS %d)\n",phy_vars_ue->Mod_id,subframe,harq_pid,harq_process->round,harq_process->TBS);
@@ -908,9 +926,9 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
     break;
 
   case PDSCH: // TB0
-    dlsch_ue  = phy_vars_ue->dlsch[eNB_id][0];
+    dlsch_ue  = phy_vars_ue->dlsch[subframe&0x1][eNB_id][0];
     harq_pid = dlsch_ue->current_harq_pid;
-    ue_id= (uint32_t)find_ue((int16_t)phy_vars_ue->pdcch_vars[(uint32_t)eNB_id]->crnti,PHY_vars_eNB_g[eNB_id2][CC_id]);
+    ue_id= (uint32_t)find_ue((int16_t)phy_vars_ue->pdcch_vars[subframe & 0x1][(uint32_t)eNB_id]->crnti,PHY_vars_eNB_g[eNB_id2][CC_id]);
     DevAssert( ue_id != (uint32_t)-1 );
     dlsch_eNB = PHY_vars_eNB_g[eNB_id2][CC_id]->dlsch[ue_id][0];
 
@@ -954,9 +972,9 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
     break;
 
   case PDSCH1: { // TB1
-    dlsch_ue = phy_vars_ue->dlsch[eNB_id][1];
+    dlsch_ue = phy_vars_ue->dlsch[subframe&0x1][eNB_id][1];
     harq_pid = dlsch_ue->current_harq_pid;
-    int8_t UE_id = find_ue( phy_vars_ue->pdcch_vars[eNB_id]->crnti, PHY_vars_eNB_g[eNB_id2][CC_id] );
+    int8_t UE_id = find_ue( phy_vars_ue->pdcch_vars[subframe & 0x1][eNB_id]->crnti, PHY_vars_eNB_g[eNB_id2][CC_id] );
     DevAssert( UE_id != -1 );
     dlsch_eNB = PHY_vars_eNB_g[eNB_id2][CC_id]->dlsch[UE_id][1];
     // reset HARQ
@@ -1008,7 +1026,7 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
     break;
 
   default:
-    dlsch_ue = phy_vars_ue->dlsch[eNB_id][0];
+    dlsch_ue = phy_vars_ue->dlsch[subframe&0x1][eNB_id][0];
     LOG_E(PHY,"dlsch_decoding_emul: FATAL, unknown DLSCH_id %d\n",dlsch_id);
     dlsch_ue->last_iteration_cnt = 1+dlsch_ue->max_turbo_iterations;
     return(1+dlsch_ue->max_turbo_iterations);
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
index 601eacc6205143468931e31b6526a58dfba962c9..cb1129f8cb6118d78551f85f55cb003053e28168 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
@@ -42,6 +42,12 @@
 #define NOCYGWIN_STATIC
 #endif
 
+/* dynamic shift for LLR computation for TM3/4
+ * set as command line argument, see lte-softmodem.c
+ * default value: 0
+ */
+int16_t dlsch_demod_shift = 0;
+
 //#define DEBUG_HARQ
 
 //#undef LOG_D
@@ -50,9 +56,7 @@
 //#define DEBUG_PHY 1
 //#define DEBUG_DLSCH_DEMOD 1
 
-int avg[4];
-int avg_0[2];
-int avg_1[2];
+
 
 // [MCS][i_mod (0,1,2) = (2,4,6)]
 unsigned char offset_mumimo_llr_drange_fix=0;
@@ -104,6 +108,9 @@ int rx_pdsch(PHY_VARS_UE *ue,
   PHY_MEASUREMENTS *measurements = &ue->measurements;
   LTE_UE_DLSCH_t   **dlsch;
 
+  int avg[4];
+  int avg_0[2];
+  int avg_1[2];
 
   unsigned char aatx,aarx;
 
@@ -137,17 +144,19 @@ int rx_pdsch(PHY_VARS_UE *ue,
     break;
 
   case PDSCH:
-    pdsch_vars = &ue->pdsch_vars[subframe&0x1][eNB_id];
-    dlsch = ue->dlsch[eNB_id];
+    pdsch_vars = ue->pdsch_vars[subframe&0x1];
+    dlsch = ue->dlsch[subframe&0x1][eNB_id];
+    LOG_D(PHY,"AbsSubframe %d.%d / Sym %d harq_pid %d,  harq status %d.%d \n",
+                   frame,subframe,symbol,harq_pid,
+                   dlsch[0]->harq_processes[harq_pid]->status,
+                   dlsch[1]->harq_processes[harq_pid]->status);
+
     if ((dlsch[0]->harq_processes[harq_pid]->status == ACTIVE) &&
         (dlsch[1]->harq_processes[harq_pid]->status == ACTIVE)){
       codeword_TB0 = dlsch[0]->harq_processes[harq_pid]->codeword;
       codeword_TB1 = dlsch[1]->harq_processes[harq_pid]->codeword;
       dlsch0_harq = dlsch[codeword_TB0]->harq_processes[harq_pid];
       dlsch1_harq = dlsch[codeword_TB1]->harq_processes[harq_pid];
-#ifdef DEBUG_HARQ
-      printf("I am assuming both CW active\n");
-#endif
     }
      else if ((dlsch[0]->harq_processes[harq_pid]->status == ACTIVE) &&
               (dlsch[1]->harq_processes[harq_pid]->status != ACTIVE) ) {
@@ -159,8 +168,8 @@ int rx_pdsch(PHY_VARS_UE *ue,
      else if ((dlsch[0]->harq_processes[harq_pid]->status != ACTIVE) &&
               (dlsch[1]->harq_processes[harq_pid]->status == ACTIVE) ){
       codeword_TB1 = dlsch[1]->harq_processes[harq_pid]->codeword;
-      dlsch0_harq = dlsch[1]->harq_processes[harq_pid];
-      dlsch1_harq = NULL;
+      dlsch0_harq  = dlsch[1]->harq_processes[harq_pid];
+      dlsch1_harq  = NULL;
       codeword_TB0 = -1;
     }
     else {
@@ -336,7 +345,7 @@ int rx_pdsch(PHY_VARS_UE *ue,
     LOG_W(PHY,"dlsch_demodulation: beamforming mode not supported yet.\n");
   }
 
-  //  printf("nb_rb = %d, eNB_id %d\n",nb_rb,eNB_id);
+  //printf("nb_rb = %d, eNB_id %d\n",nb_rb,eNB_id);
   if (nb_rb==0) {
     LOG_D(PHY,"dlsch_demodulation.c: nb_rb=0\n");
     return(-1);
@@ -357,12 +366,18 @@ int rx_pdsch(PHY_VARS_UE *ue,
                       symbol,
                       nb_rb);
 
-  if ((dlsch0_harq->mimo_mode<DUALSTREAM_UNIFORM_PRECODING1) && (rx_type==rx_IC_single_stream) && (eNB_id_i==ue->n_connected_eNB) && (dlsch0_harq->dl_power_off==0))  // TM5 two-user
+  if ((dlsch0_harq->mimo_mode<DUALSTREAM_UNIFORM_PRECODING1) &&
+      (rx_type==rx_IC_single_stream) &&
+      (eNB_id_i==ue->n_connected_eNB) &&
+      (dlsch0_harq->dl_power_off==0)
+     )  // TM5 two-user
+  {
     dlsch_scale_channel(pdsch_vars[eNB_id_i]->dl_ch_estimates_ext,
                         frame_parms,
                         dlsch,
                         symbol,
                         nb_rb);
+  }
 
   if (first_symbol_flag==1) {
     if (beamforming_mode==0){
@@ -392,21 +407,23 @@ int rx_pdsch(PHY_VARS_UE *ue,
                                  nb_rb,
                                  dlsch0_harq->mimo_mode);
 
+      LOG_D(PHY,"Channel Level TM34  avg_0 %d, avg_1 %d, rx_type %d, rx_standard %d, interf_unaw_shift %d \n", avg_0[0],
+              avg_1[0], rx_type, rx_standard, interf_unaw_shift);
         if (rx_type>rx_standard) {
-          avg_0[0] = (log2_approx(avg_0[0])/2) -13 + interf_unaw_shift;
-          avg_1[0] = (log2_approx(avg_1[0])/2) -13 + interf_unaw_shift;
+          avg_0[0] = (log2_approx(avg_0[0])/2) + dlsch_demod_shift;// + 2 ;//+ 4;
+          avg_1[0] = (log2_approx(avg_1[0])/2) + dlsch_demod_shift;// + 2 ;//+ 4;
           pdsch_vars[eNB_id]->log2_maxh0 = cmax(avg_0[0],0);
           pdsch_vars[eNB_id]->log2_maxh1 = cmax(avg_1[0],0);
-          //printf("TM4 I-A log2_maxh0 = %d\n", lte_ue_pdsch_vars[eNB_id]->log2_maxh0);
-          //printf("TM4 I-A log2_maxh1 = %d\n", lte_ue_pdsch_vars[eNB_id]->log2_maxh1);
+          //printf("TM4 I-A log2_maxh0 = %d\n", pdsch_vars[eNB_id]->log2_maxh0);
+          //printf("TM4 I-A log2_maxh1 = %d\n", pdsch_vars[eNB_id]->log2_maxh1);
          }
           else {
           avg_0[0] = (log2_approx(avg_0[0])/2) - 13 + interf_unaw_shift;
           avg_1[0] = (log2_approx(avg_1[0])/2) - 13 + interf_unaw_shift;
           pdsch_vars[eNB_id]->log2_maxh0 = cmax(avg_0[0],0);
           pdsch_vars[eNB_id]->log2_maxh1 = cmax(avg_1[0],0);
-          //printf("TM4 I-UA log2_maxh0 = %d\n", lte_ue_pdsch_vars[eNB_id]->log2_maxh0);
-          //printf("TM4 I-UA log2_maxh1 = %d\n", lte_ue_pdsch_vars[eNB_id]->log2_maxh1);
+          //printf("TM4 I-UA log2_maxh0 = %d\n", pdsch_vars[eNB_id]->log2_maxh0);
+          //printf("TM4 I-UA log2_maxh1 = %d\n", pdsch_vars[eNB_id]->log2_maxh1);
         }
       }
       else if (dlsch0_harq->mimo_mode<DUALSTREAM_UNIFORM_PRECODING1) {// single-layer precoding (TM5, TM6)
@@ -448,8 +465,11 @@ int rx_pdsch(PHY_VARS_UE *ue,
                               symbol,
                               nb_rb);
 #ifdef DEBUG_PHY
-    LOG_D(PHY,"[DLSCH] log2_maxh = %d (%d,%d)\n",pdsch_vars[eNB_id]->log2_maxh,avg[0],avgs);
-    LOG_D(PHY,"[DLSCH] mimo_mode = %d\n", dlsch0_harq->mimo_mode);
+    LOG_I(PHY,"[DLSCH] log2_maxh = %d [log2_maxh0 %d log2_maxh1 %d] (%d,%d)\n",pdsch_vars[eNB_id]->log2_maxh,
+                                                 pdsch_vars[eNB_id]->log2_maxh0,
+                                                 pdsch_vars[eNB_id]->log2_maxh1,
+                                                 avg[0],avgs);
+    LOG_I(PHY,"[DLSCH] mimo_mode = %d\n", dlsch0_harq->mimo_mode);
 #endif
   }
 
@@ -1023,6 +1043,44 @@ int rx_pdsch(PHY_VARS_UE *ue,
   }
   }
 
+// Please keep it: useful for debugging
+#if 0
+  if( (symbol == 13) && (dlsch0_harq->mimo_mode == 2) )
+  {
+      LOG_E(PHY,"Dump Phy Chan Est \n");
+      if(subframe&0x1)
+      {
+#if 1
+      //write_output("rxdataF0.m"    , "rxdataF0",             &common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0][0],14*frame_parms->ofdm_symbol_size,1,1);
+      //write_output("rxdataF1.m"    , "rxdataF1",             &common_vars->common_vars_rx_data_per_thread[subframe&0x1].rxdataF[0][0],14*frame_parms->ofdm_symbol_size,1,1);
+      //write_output("dl_ch_estimates00.m", "dl_ch_estimates00",   &common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][0][0],14*frame_parms->ofdm_symbol_size,1,1);
+      //write_output("dl_ch_estimates01.m", "dl_ch_estimates01",   &common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][1][0],14*frame_parms->ofdm_symbol_size,1,1);
+      //write_output("dl_ch_estimates10.m", "dl_ch_estimates10",   &common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][2][0],14*frame_parms->ofdm_symbol_size,1,1);
+      //write_output("dl_ch_estimates11.m", "dl_ch_estimates11",   &common_vars->common_vars_rx_data_per_thread[subframe&0x1].dl_ch_estimates[eNB_id][3][0],14*frame_parms->ofdm_symbol_size,1,1);
+
+
+      //write_output("rxdataF_ext00.m"    , "rxdataF_ext00",       &pdsch_vars[eNB_id]->rxdataF_ext[0][0],14*frame_parms->N_RB_DL*12,1,1);
+      //write_output("rxdataF_ext01.m"    , "rxdataF_ext01",       &pdsch_vars[eNB_id]->rxdataF_ext[1][0],14*frame_parms->N_RB_DL*12,1,1);
+      //write_output("rxdataF_ext10.m"    , "rxdataF_ext10",       &pdsch_vars[eNB_id]->rxdataF_ext[2][0],14*frame_parms->N_RB_DL*12,1,1);
+      //write_output("rxdataF_ext11.m"    , "rxdataF_ext11",       &pdsch_vars[eNB_id]->rxdataF_ext[3][0],14*frame_parms->N_RB_DL*12,1,1);
+      write_output("dl_ch_estimates_ext00.m", "dl_ch_estimates_ext00", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[0][0],14*frame_parms->N_RB_DL*12,1,1);
+      write_output("dl_ch_estimates_ext01.m", "dl_ch_estimates_ext01", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[1][0],14*frame_parms->N_RB_DL*12,1,1);
+      write_output("dl_ch_estimates_ext10.m", "dl_ch_estimates_ext10", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[2][0],14*frame_parms->N_RB_DL*12,1,1);
+      write_output("dl_ch_estimates_ext11.m", "dl_ch_estimates_ext11", &pdsch_vars[eNB_id]->dl_ch_estimates_ext[3][0],14*frame_parms->N_RB_DL*12,1,1);
+      write_output("rxdataF_comp00.m","rxdataF_comp00",              &pdsch_vars[eNB_id]->rxdataF_comp0[0][0],14*frame_parms->N_RB_DL*12,1,1);
+      write_output("rxdataF_comp01.m","rxdataF_comp01",              &pdsch_vars[eNB_id]->rxdataF_comp0[1][0],14*frame_parms->N_RB_DL*12,1,1);
+      write_output("rxdataF_comp10.m","rxdataF_comp10",              &pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][0][0],14*frame_parms->N_RB_DL*12,1,1);
+      write_output("rxdataF_comp11.m","rxdataF_comp11",              &pdsch_vars[eNB_id]->rxdataF_comp1[harq_pid][round][1][0],14*frame_parms->N_RB_DL*12,1,1);
+#endif
+      write_output("llr0.m","llr0",  &pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0);
+      write_output("llr1.m","llr1",  &pdsch_vars[eNB_id]->llr[1][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0);
+
+
+      AssertFatal(0," ");
+      }
+
+  }
+#endif
 
 #if T_TRACER
   T(T_UE_PHY_PDSCH_IQ, T_INT(eNB_id), T_INT(ue->Mod_id), T_INT(frame%1024),
@@ -1609,9 +1667,7 @@ void prec2A_TM3_128(__m128i *ch0,__m128i *ch1) {
 
   __m128i tmp0,tmp1;
 
-  // sqrt(2) is already taken into account in computation sqrt_rho_a, sqrt_rho_b,
-  //so divide by 2 is replaced by divide by sqrt(2).
-
+  //_mm_mulhi_epi16
   //  print_shorts("prec2A_TM3 ch0 (before):",ch0);
   //  print_shorts("prec2A_TM3 ch1 (before):",ch1);
 
@@ -1622,17 +1678,22 @@ void prec2A_TM3_128(__m128i *ch0,__m128i *ch1) {
   ch0[0] = _mm_adds_epi16(ch0[0],tmp1);
   ch1[0] = _mm_subs_epi16(tmp0,tmp1);
 
-
-  //  print_shorts("prec2A_TM3 ch0 (mid):",&tmp0);
-  //  print_shorts("prec2A_TM3 ch1 (mid):",ch1);
-
   ch0[0] = _mm_mulhi_epi16(ch0[0],amp);
   ch0[0] = _mm_slli_epi16(ch0[0],1);
+
   ch1[0] = _mm_mulhi_epi16(ch1[0],amp);
   ch1[0] = _mm_slli_epi16(ch1[0],1);
 
-  // ch0[0] = _mm_srai_epi16(ch0[0],1);
-  // ch1[0] = _mm_srai_epi16(ch1[0],1);
+  //  print_shorts("prec2A_TM3 ch0 (mid):",&tmp0);
+  //  print_shorts("prec2A_TM3 ch1 (mid):",ch1);
+
+  //ch0[0] = _mm_mulhi_epi16(ch0[0],amp);
+  //ch0[0] = _mm_slli_epi16(ch0[0],1);
+  //ch1[0] = _mm_mulhi_epi16(ch1[0],amp);
+  //ch1[0] = _mm_slli_epi16(ch1[0],1);
+
+  //ch0[0] = _mm_srai_epi16(ch0[0],1);
+  //ch1[0] = _mm_srai_epi16(ch1[0],1);
 
   //  print_shorts("prec2A_TM3 ch0 (after):",ch0);
   //  print_shorts("prec2A_TM3 ch1 (after):",ch1);
@@ -3301,7 +3362,7 @@ ch_amp = ((pilots) ? (dlsch_ue[0]->sqrt_rho_b) : (dlsch_ue[0]->sqrt_rho_a));
 //compute average channel_level on each (TX,RX) antenna pair
 void dlsch_channel_level(int **dl_ch_estimates_ext,
                          LTE_DL_FRAME_PARMS *frame_parms,
-                         int *avg,
+                         int32_t *avg,
                          uint8_t symbol,
                          unsigned short nb_rb)
 {
@@ -3310,10 +3371,23 @@ void dlsch_channel_level(int **dl_ch_estimates_ext,
 
   short rb;
   unsigned char aatx,aarx,nre=12,symbol_mod;
-  __m128i *dl_ch128, avg128D;
+  __m128i *dl_ch128, avg128D, coeff128;
 
   symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
 
+  if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->mode1_flag==0))
+    nre=8;
+  else if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->mode1_flag==1))
+    nre=10;
+  else
+    nre=12;
+
+  double one_over_nb_re = 0.0;
+  one_over_nb_re = 1/((double)(nb_rb*nre));
+  int16_t one_over_nb_re_q1_15 = (int16_t)(one_over_nb_re * (double)(1<<15) );
+  coeff128 = _mm_set_epi16(one_over_nb_re_q1_15,one_over_nb_re_q1_15,one_over_nb_re_q1_15,one_over_nb_re_q1_15,
+                            one_over_nb_re_q1_15,one_over_nb_re_q1_15,one_over_nb_re_q1_15,one_over_nb_re_q1_15);
+
   for (aatx=0; aatx<frame_parms->nb_antenna_ports_eNB; aatx++)
     for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
       //clear average level
@@ -3325,13 +3399,14 @@ void dlsch_channel_level(int **dl_ch_estimates_ext,
       for (rb=0;rb<nb_rb;rb++) {
         //      printf("rb %d : ",rb);
         //      print_shorts("ch",&dl_ch128[0]);
-        avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch128[0],dl_ch128[0]));
-        avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch128[1],dl_ch128[1]));
+        avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch128[0],_mm_srai_epi16(_mm_mulhi_epi16(dl_ch128[0], coeff128),15)));
+        avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch128[1],_mm_srai_epi16(_mm_mulhi_epi16(dl_ch128[1], coeff128),15)));
+
         if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->mode1_flag==0)) {
           dl_ch128+=2;
         }
         else {
-          avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch128[2],dl_ch128[2]));
+          avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch128[2],_mm_srai_epi16(_mm_mulhi_epi16(dl_ch128[2], coeff128),15)));
           dl_ch128+=3;
         }
         /*
@@ -3343,18 +3418,10 @@ void dlsch_channel_level(int **dl_ch_estimates_ext,
         */
       }
 
-      if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->mode1_flag==0))
-        nre=8;
-      else if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))&&(frame_parms->mode1_flag==1))
-        nre=10;
-      else
-        nre=12;
-
-      avg[(aatx<<1)+aarx] = (((int*)&avg128D)[0] +
-                             ((int*)&avg128D)[1] +
-                             ((int*)&avg128D)[2] +
-                             ((int*)&avg128D)[3])/(nb_rb*nre);
-
+      avg[(aatx<<1)+aarx] =(((int32_t*)&avg128D)[0] +
+                            ((int32_t*)&avg128D)[1] +
+                            ((int32_t*)&avg128D)[2] +
+                            ((int32_t*)&avg128D)[3]);
                 //  printf("Channel level : %d\n",avg[(aatx<<1)+aarx]);
     }
 
@@ -5813,7 +5880,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF,
 #ifdef USER_MODE
 
 
-void dump_dlsch2(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t subframe,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,unsigned int *coded_bits_per_codeword,int round,  unsigned char harq_pid)
 {
   unsigned int nsymb = (ue->frame_parms.Ncp == 0) ? 14 : 12;
   char fname[32],vname[32];
@@ -5892,7 +5959,7 @@ void dump_dlsch2(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t subframe,uint16_t coded_
 
   sprintf(fname,"dlsch%d_rxF_r%d_llr.m",eNB_id,round);
   sprintf(vname,"dl%d_r%d_llr",eNB_id,round);
-  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[subframe&0x1][eNB_id]->llr[0],coded_bits_per_codeword[0],1,0);
   sprintf(fname,"dlsch%d_r%d_mag1.m",eNB_id,round);
   sprintf(vname,"dl%d_r%d_mag1",eNB_id,round);
   write_output(fname,vname,ue->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_mag0[0],12*N_RB_DL*nsymb,1,1);
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
index 0b73e2b02390a060e3774838e42fa4ab7cfa1533..e2de78f9caf4b903bb30051095fc83d9774b8b1d 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
@@ -8831,6 +8831,46 @@ int dlsch_64qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
     len = (nb_rb*12) - pbch_pss_sss_adjust;
   }
 
+#ifdef __AVX2__
+
+  // Round length up to multiple of 16 words
+  uint32_t len256i = ((len+16)>>4)*16;
+  int32_t *rxF_256i      = (int32_t*) malloc16_clear(len256i*4);
+  int32_t *rxF_i_256i    = (int32_t*) malloc16_clear(len256i*4);
+  int32_t *ch_mag_256i   = (int32_t*) malloc16_clear(len256i*4);
+  int32_t *ch_mag_i_256i = (int32_t*) malloc16_clear(len256i*4);
+  int32_t *rho_256i      = (int32_t*) malloc16_clear(len256i*4);
+
+  memcpy(rxF_256i, rxF, len*4);
+  memcpy(rxF_i_256i, rxF_i, len*4);
+  memcpy(ch_mag_256i, ch_mag, len*4);
+  memcpy(ch_mag_i_256i, ch_mag_i, len*4);
+  memcpy(rho_256i, rho, len*4);
+
+#if 0
+  qam64_qam16_avx2((short *)rxF_256i,
+                   (short *)rxF_i_256i,
+                   (short *)ch_mag_256i,
+                   (short *)ch_mag_i_256i,
+                   (short *)llr16,
+                   (short *) rho_256i,
+                   len);
+#else
+  qam64_qam64_avx2((int32_t *)rxF_256i,
+                   (int32_t *)rxF_i_256i,
+                   (int32_t *)ch_mag_256i,
+                   (int32_t *)ch_mag_i_256i,
+                   (int16_t *)llr16,
+                   (int32_t *) rho_256i,
+                   len);
+#endif
+  free16(rxF_256i, sizeof(rxF_256i));
+  free16(rxF_i_256i, sizeof(rxF_i_256i));
+  free16(ch_mag_256i, sizeof(ch_mag_256i));
+  free16(ch_mag_i_256i, sizeof(ch_mag_i_256i));
+  free16(rho_256i, sizeof(rho_256i));
+
+#else
   qam64_qam64((short *)rxF,
               (short *)rxF_i,
               (short *)ch_mag,
@@ -8838,6 +8878,7 @@ int dlsch_64qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
               (short *)llr16,
               (short *)rho,
               len);
+#endif
 
   llr16 += (6*len);
   *llr16p = (short *)llr16;
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c
new file mode 100644
index 0000000000000000000000000000000000000000..cda5ad0f55ee8afbe37bf4d3536cea17fb3ed575
--- /dev/null
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c
@@ -0,0 +1,4034 @@
+ /*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file PHY/LTE_TRANSPORT/dlsch_llr_computation.c
+ * \brief Top-level routines for LLR computation of the PDSCH physical channel from 36-211, V8.6 2009-03
+ * \author R. Knopp, F. Kaltenberger,A. Bhamri, S. Aubert, S. Wagner, X Jiang
+ * \date 2011
+ * \version 0.1
+ * \company Eurecom
+ * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,ankit.bhamri@eurecom.fr,sebastien.aubert@eurecom.fr, sebastian.wagner@eurecom.fr
+ * \note
+ * \warning
+ */
+
+#include "PHY/defs.h"
+#include "PHY/TOOLS/defs.h"
+#include "PHY/extern.h"
+#include "defs.h"
+#include "extern.h"
+#include "PHY/sse_intrin.h"
+
+int16_t ones256[16] __attribute__ ((aligned(32))) = {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff};
+
+static __m256i rho_rpi __attribute__ ((aligned(32)));
+static __m256i rho_rmi __attribute__ ((aligned(32)));
+static __m256i rho_rpi_1_1 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_1_3 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_1_5 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_1_7 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_3_1 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_3_3 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_3_5 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_3_7 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_5_1 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_5_3 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_5_5 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_5_7 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_7_1 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_7_3 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_7_5 __attribute__ ((aligned(32)));
+static __m256i rho_rpi_7_7 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_1_1 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_1_3 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_1_5 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_1_7 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_3_1 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_3_3 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_3_5 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_3_7 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_5_1 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_5_3 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_5_5 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_5_7 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_7_1 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_7_3 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_7_5 __attribute__ ((aligned(32)));
+static __m256i rho_rmi_7_7 __attribute__ ((aligned(32)));
+
+static __m256i psi_r_m7_m7 __attribute__ ((aligned(32)));
+static __m256i psi_r_m7_m5 __attribute__ ((aligned(32)));
+static __m256i psi_r_m7_m3 __attribute__ ((aligned(32)));
+static __m256i psi_r_m7_m1 __attribute__ ((aligned(32)));
+static __m256i psi_r_m7_p1 __attribute__ ((aligned(32)));
+static __m256i psi_r_m7_p3 __attribute__ ((aligned(32)));
+static __m256i psi_r_m7_p5 __attribute__ ((aligned(32)));
+static __m256i psi_r_m7_p7 __attribute__ ((aligned(32)));
+static __m256i psi_r_m5_m7 __attribute__ ((aligned(32)));
+static __m256i psi_r_m5_m5 __attribute__ ((aligned(32)));
+static __m256i psi_r_m5_m3 __attribute__ ((aligned(32)));
+static __m256i psi_r_m5_m1 __attribute__ ((aligned(32)));
+static __m256i psi_r_m5_p1 __attribute__ ((aligned(32)));
+static __m256i psi_r_m5_p3 __attribute__ ((aligned(32)));
+static __m256i psi_r_m5_p5 __attribute__ ((aligned(32)));
+static __m256i psi_r_m5_p7 __attribute__ ((aligned(32)));
+static __m256i psi_r_m3_m7 __attribute__ ((aligned(32)));
+static __m256i psi_r_m3_m5 __attribute__ ((aligned(32)));
+static __m256i psi_r_m3_m3 __attribute__ ((aligned(32)));
+static __m256i psi_r_m3_m1 __attribute__ ((aligned(32)));
+static __m256i psi_r_m3_p1 __attribute__ ((aligned(32)));
+static __m256i psi_r_m3_p3 __attribute__ ((aligned(32)));
+static __m256i psi_r_m3_p5 __attribute__ ((aligned(32)));
+static __m256i psi_r_m3_p7 __attribute__ ((aligned(32)));
+static __m256i psi_r_m1_m7 __attribute__ ((aligned(32)));
+static __m256i psi_r_m1_m5 __attribute__ ((aligned(32)));
+static __m256i psi_r_m1_m3 __attribute__ ((aligned(32)));
+static __m256i psi_r_m1_m1 __attribute__ ((aligned(32)));
+static __m256i psi_r_m1_p1 __attribute__ ((aligned(32)));
+static __m256i psi_r_m1_p3 __attribute__ ((aligned(32)));
+static __m256i psi_r_m1_p5 __attribute__ ((aligned(32)));
+static __m256i psi_r_m1_p7 __attribute__ ((aligned(32)));
+static __m256i psi_r_p1_m7 __attribute__ ((aligned(32)));
+static __m256i psi_r_p1_m5 __attribute__ ((aligned(32)));
+static __m256i psi_r_p1_m3 __attribute__ ((aligned(32)));
+static __m256i psi_r_p1_m1 __attribute__ ((aligned(32)));
+static __m256i psi_r_p1_p1 __attribute__ ((aligned(32)));
+static __m256i psi_r_p1_p3 __attribute__ ((aligned(32)));
+static __m256i psi_r_p1_p5 __attribute__ ((aligned(32)));
+static __m256i psi_r_p1_p7 __attribute__ ((aligned(32)));
+static __m256i psi_r_p3_m7 __attribute__ ((aligned(32)));
+static __m256i psi_r_p3_m5 __attribute__ ((aligned(32)));
+static __m256i psi_r_p3_m3 __attribute__ ((aligned(32)));
+static __m256i psi_r_p3_m1 __attribute__ ((aligned(32)));
+static __m256i psi_r_p3_p1 __attribute__ ((aligned(32)));
+static __m256i psi_r_p3_p3 __attribute__ ((aligned(32)));
+static __m256i psi_r_p3_p5 __attribute__ ((aligned(32)));
+static __m256i psi_r_p3_p7 __attribute__ ((aligned(32)));
+static __m256i psi_r_p5_m7 __attribute__ ((aligned(32)));
+static __m256i psi_r_p5_m5 __attribute__ ((aligned(32)));
+static __m256i psi_r_p5_m3 __attribute__ ((aligned(32)));
+static __m256i psi_r_p5_m1 __attribute__ ((aligned(32)));
+static __m256i psi_r_p5_p1 __attribute__ ((aligned(32)));
+static __m256i psi_r_p5_p3 __attribute__ ((aligned(32)));
+static __m256i psi_r_p5_p5 __attribute__ ((aligned(32)));
+static __m256i psi_r_p5_p7 __attribute__ ((aligned(32)));
+static __m256i psi_r_p7_m7 __attribute__ ((aligned(32)));
+static __m256i psi_r_p7_m5 __attribute__ ((aligned(32)));
+static __m256i psi_r_p7_m3 __attribute__ ((aligned(32)));
+static __m256i psi_r_p7_m1 __attribute__ ((aligned(32)));
+static __m256i psi_r_p7_p1 __attribute__ ((aligned(32)));
+static __m256i psi_r_p7_p3 __attribute__ ((aligned(32)));
+static __m256i psi_r_p7_p5 __attribute__ ((aligned(32)));
+static __m256i psi_r_p7_p7 __attribute__ ((aligned(32)));
+
+static __m256i psi_i_m7_m7 __attribute__ ((aligned(32)));
+static __m256i psi_i_m7_m5 __attribute__ ((aligned(32)));
+static __m256i psi_i_m7_m3 __attribute__ ((aligned(32)));
+static __m256i psi_i_m7_m1 __attribute__ ((aligned(32)));
+static __m256i psi_i_m7_p1 __attribute__ ((aligned(32)));
+static __m256i psi_i_m7_p3 __attribute__ ((aligned(32)));
+static __m256i psi_i_m7_p5 __attribute__ ((aligned(32)));
+static __m256i psi_i_m7_p7 __attribute__ ((aligned(32)));
+static __m256i psi_i_m5_m7 __attribute__ ((aligned(32)));
+static __m256i psi_i_m5_m5 __attribute__ ((aligned(32)));
+static __m256i psi_i_m5_m3 __attribute__ ((aligned(32)));
+static __m256i psi_i_m5_m1 __attribute__ ((aligned(32)));
+static __m256i psi_i_m5_p1 __attribute__ ((aligned(32)));
+static __m256i psi_i_m5_p3 __attribute__ ((aligned(32)));
+static __m256i psi_i_m5_p5 __attribute__ ((aligned(32)));
+static __m256i psi_i_m5_p7 __attribute__ ((aligned(32)));
+static __m256i psi_i_m3_m7 __attribute__ ((aligned(32)));
+static __m256i psi_i_m3_m5 __attribute__ ((aligned(32)));
+static __m256i psi_i_m3_m3 __attribute__ ((aligned(32)));
+static __m256i psi_i_m3_m1 __attribute__ ((aligned(32)));
+static __m256i psi_i_m3_p1 __attribute__ ((aligned(32)));
+static __m256i psi_i_m3_p3 __attribute__ ((aligned(32)));
+static __m256i psi_i_m3_p5 __attribute__ ((aligned(32)));
+static __m256i psi_i_m3_p7 __attribute__ ((aligned(32)));
+static __m256i psi_i_m1_m7 __attribute__ ((aligned(32)));
+static __m256i psi_i_m1_m5 __attribute__ ((aligned(32)));
+static __m256i psi_i_m1_m3 __attribute__ ((aligned(32)));
+static __m256i psi_i_m1_m1 __attribute__ ((aligned(32)));
+static __m256i psi_i_m1_p1 __attribute__ ((aligned(32)));
+static __m256i psi_i_m1_p3 __attribute__ ((aligned(32)));
+static __m256i psi_i_m1_p5 __attribute__ ((aligned(32)));
+static __m256i psi_i_m1_p7 __attribute__ ((aligned(32)));
+static __m256i psi_i_p1_m7 __attribute__ ((aligned(32)));
+static __m256i psi_i_p1_m5 __attribute__ ((aligned(32)));
+static __m256i psi_i_p1_m3 __attribute__ ((aligned(32)));
+static __m256i psi_i_p1_m1 __attribute__ ((aligned(32)));
+static __m256i psi_i_p1_p1 __attribute__ ((aligned(32)));
+static __m256i psi_i_p1_p3 __attribute__ ((aligned(32)));
+static __m256i psi_i_p1_p5 __attribute__ ((aligned(32)));
+static __m256i psi_i_p1_p7 __attribute__ ((aligned(32)));
+static __m256i psi_i_p3_m7 __attribute__ ((aligned(32)));
+static __m256i psi_i_p3_m5 __attribute__ ((aligned(32)));
+static __m256i psi_i_p3_m3 __attribute__ ((aligned(32)));
+static __m256i psi_i_p3_m1 __attribute__ ((aligned(32)));
+static __m256i psi_i_p3_p1 __attribute__ ((aligned(32)));
+static __m256i psi_i_p3_p3 __attribute__ ((aligned(32)));
+static __m256i psi_i_p3_p5 __attribute__ ((aligned(32)));
+static __m256i psi_i_p3_p7 __attribute__ ((aligned(32)));
+static __m256i psi_i_p5_m7 __attribute__ ((aligned(32)));
+static __m256i psi_i_p5_m5 __attribute__ ((aligned(32)));
+static __m256i psi_i_p5_m3 __attribute__ ((aligned(32)));
+static __m256i psi_i_p5_m1 __attribute__ ((aligned(32)));
+static __m256i psi_i_p5_p1 __attribute__ ((aligned(32)));
+static __m256i psi_i_p5_p3 __attribute__ ((aligned(32)));
+static __m256i psi_i_p5_p5 __attribute__ ((aligned(32)));
+static __m256i psi_i_p5_p7 __attribute__ ((aligned(32)));
+static __m256i psi_i_p7_m7 __attribute__ ((aligned(32)));
+static __m256i psi_i_p7_m5 __attribute__ ((aligned(32)));
+static __m256i psi_i_p7_m3 __attribute__ ((aligned(32)));
+static __m256i psi_i_p7_m1 __attribute__ ((aligned(32)));
+static __m256i psi_i_p7_p1 __attribute__ ((aligned(32)));
+static __m256i psi_i_p7_p3 __attribute__ ((aligned(32)));
+static __m256i psi_i_p7_p5 __attribute__ ((aligned(32)));
+static __m256i psi_i_p7_p7 __attribute__ ((aligned(32)));
+
+static __m256i a_r_m7_m7 __attribute__ ((aligned(32)));
+static __m256i a_r_m7_m5 __attribute__ ((aligned(32)));
+static __m256i a_r_m7_m3 __attribute__ ((aligned(32)));
+static __m256i a_r_m7_m1 __attribute__ ((aligned(32)));
+static __m256i a_r_m7_p1 __attribute__ ((aligned(32)));
+static __m256i a_r_m7_p3 __attribute__ ((aligned(32)));
+static __m256i a_r_m7_p5 __attribute__ ((aligned(32)));
+static __m256i a_r_m7_p7 __attribute__ ((aligned(32)));
+static __m256i a_r_m5_m7 __attribute__ ((aligned(32)));
+static __m256i a_r_m5_m5 __attribute__ ((aligned(32)));
+static __m256i a_r_m5_m3 __attribute__ ((aligned(32)));
+static __m256i a_r_m5_m1 __attribute__ ((aligned(32)));
+static __m256i a_r_m5_p1 __attribute__ ((aligned(32)));
+static __m256i a_r_m5_p3 __attribute__ ((aligned(32)));
+static __m256i a_r_m5_p5 __attribute__ ((aligned(32)));
+static __m256i a_r_m5_p7 __attribute__ ((aligned(32)));
+static __m256i a_r_m3_m7 __attribute__ ((aligned(32)));
+static __m256i a_r_m3_m5 __attribute__ ((aligned(32)));
+static __m256i a_r_m3_m3 __attribute__ ((aligned(32)));
+static __m256i a_r_m3_m1 __attribute__ ((aligned(32)));
+static __m256i a_r_m3_p1 __attribute__ ((aligned(32)));
+static __m256i a_r_m3_p3 __attribute__ ((aligned(32)));
+static __m256i a_r_m3_p5 __attribute__ ((aligned(32)));
+static __m256i a_r_m3_p7 __attribute__ ((aligned(32)));
+static __m256i a_r_m1_m7 __attribute__ ((aligned(32)));
+static __m256i a_r_m1_m5 __attribute__ ((aligned(32)));
+static __m256i a_r_m1_m3 __attribute__ ((aligned(32)));
+static __m256i a_r_m1_m1 __attribute__ ((aligned(32)));
+static __m256i a_r_m1_p1 __attribute__ ((aligned(32)));
+static __m256i a_r_m1_p3 __attribute__ ((aligned(32)));
+static __m256i a_r_m1_p5 __attribute__ ((aligned(32)));
+static __m256i a_r_m1_p7 __attribute__ ((aligned(32)));
+static __m256i a_r_p1_m7 __attribute__ ((aligned(32)));
+static __m256i a_r_p1_m5 __attribute__ ((aligned(32)));
+static __m256i a_r_p1_m3 __attribute__ ((aligned(32)));
+static __m256i a_r_p1_m1 __attribute__ ((aligned(32)));
+static __m256i a_r_p1_p1 __attribute__ ((aligned(32)));
+static __m256i a_r_p1_p3 __attribute__ ((aligned(32)));
+static __m256i a_r_p1_p5 __attribute__ ((aligned(32)));
+static __m256i a_r_p1_p7 __attribute__ ((aligned(32)));
+static __m256i a_r_p3_m7 __attribute__ ((aligned(32)));
+static __m256i a_r_p3_m5 __attribute__ ((aligned(32)));
+static __m256i a_r_p3_m3 __attribute__ ((aligned(32)));
+static __m256i a_r_p3_m1 __attribute__ ((aligned(32)));
+static __m256i a_r_p3_p1 __attribute__ ((aligned(32)));
+static __m256i a_r_p3_p3 __attribute__ ((aligned(32)));
+static __m256i a_r_p3_p5 __attribute__ ((aligned(32)));
+static __m256i a_r_p3_p7 __attribute__ ((aligned(32)));
+static __m256i a_r_p5_m7 __attribute__ ((aligned(32)));
+static __m256i a_r_p5_m5 __attribute__ ((aligned(32)));
+static __m256i a_r_p5_m3 __attribute__ ((aligned(32)));
+static __m256i a_r_p5_m1 __attribute__ ((aligned(32)));
+static __m256i a_r_p5_p1 __attribute__ ((aligned(32)));
+static __m256i a_r_p5_p3 __attribute__ ((aligned(32)));
+static __m256i a_r_p5_p5 __attribute__ ((aligned(32)));
+static __m256i a_r_p5_p7 __attribute__ ((aligned(32)));
+static __m256i a_r_p7_m7 __attribute__ ((aligned(32)));
+static __m256i a_r_p7_m5 __attribute__ ((aligned(32)));
+static __m256i a_r_p7_m3 __attribute__ ((aligned(32)));
+static __m256i a_r_p7_m1 __attribute__ ((aligned(32)));
+static __m256i a_r_p7_p1 __attribute__ ((aligned(32)));
+static __m256i a_r_p7_p3 __attribute__ ((aligned(32)));
+static __m256i a_r_p7_p5 __attribute__ ((aligned(32)));
+static __m256i a_r_p7_p7 __attribute__ ((aligned(32)));
+
+static __m256i a_i_m7_m7 __attribute__ ((aligned(32)));
+static __m256i a_i_m7_m5 __attribute__ ((aligned(32)));
+static __m256i a_i_m7_m3 __attribute__ ((aligned(32)));
+static __m256i a_i_m7_m1 __attribute__ ((aligned(32)));
+static __m256i a_i_m7_p1 __attribute__ ((aligned(32)));
+static __m256i a_i_m7_p3 __attribute__ ((aligned(32)));
+static __m256i a_i_m7_p5 __attribute__ ((aligned(32)));
+static __m256i a_i_m7_p7 __attribute__ ((aligned(32)));
+static __m256i a_i_m5_m7 __attribute__ ((aligned(32)));
+static __m256i a_i_m5_m5 __attribute__ ((aligned(32)));
+static __m256i a_i_m5_m3 __attribute__ ((aligned(32)));
+static __m256i a_i_m5_m1 __attribute__ ((aligned(32)));
+static __m256i a_i_m5_p1 __attribute__ ((aligned(32)));
+static __m256i a_i_m5_p3 __attribute__ ((aligned(32)));
+static __m256i a_i_m5_p5 __attribute__ ((aligned(32)));
+static __m256i a_i_m5_p7 __attribute__ ((aligned(32)));
+static __m256i a_i_m3_m7 __attribute__ ((aligned(32)));
+static __m256i a_i_m3_m5 __attribute__ ((aligned(32)));
+static __m256i a_i_m3_m3 __attribute__ ((aligned(32)));
+static __m256i a_i_m3_m1 __attribute__ ((aligned(32)));
+static __m256i a_i_m3_p1 __attribute__ ((aligned(32)));
+static __m256i a_i_m3_p3 __attribute__ ((aligned(32)));
+static __m256i a_i_m3_p5 __attribute__ ((aligned(32)));
+static __m256i a_i_m3_p7 __attribute__ ((aligned(32)));
+static __m256i a_i_m1_m7 __attribute__ ((aligned(32)));
+static __m256i a_i_m1_m5 __attribute__ ((aligned(32)));
+static __m256i a_i_m1_m3 __attribute__ ((aligned(32)));
+static __m256i a_i_m1_m1 __attribute__ ((aligned(32)));
+static __m256i a_i_m1_p1 __attribute__ ((aligned(32)));
+static __m256i a_i_m1_p3 __attribute__ ((aligned(32)));
+static __m256i a_i_m1_p5 __attribute__ ((aligned(32)));
+static __m256i a_i_m1_p7 __attribute__ ((aligned(32)));
+static __m256i a_i_p1_m7 __attribute__ ((aligned(32)));
+static __m256i a_i_p1_m5 __attribute__ ((aligned(32)));
+static __m256i a_i_p1_m3 __attribute__ ((aligned(32)));
+static __m256i a_i_p1_m1 __attribute__ ((aligned(32)));
+static __m256i a_i_p1_p1 __attribute__ ((aligned(32)));
+static __m256i a_i_p1_p3 __attribute__ ((aligned(32)));
+static __m256i a_i_p1_p5 __attribute__ ((aligned(32)));
+static __m256i a_i_p1_p7 __attribute__ ((aligned(32)));
+static __m256i a_i_p3_m7 __attribute__ ((aligned(32)));
+static __m256i a_i_p3_m5 __attribute__ ((aligned(32)));
+static __m256i a_i_p3_m3 __attribute__ ((aligned(32)));
+static __m256i a_i_p3_m1 __attribute__ ((aligned(32)));
+static __m256i a_i_p3_p1 __attribute__ ((aligned(32)));
+static __m256i a_i_p3_p3 __attribute__ ((aligned(32)));
+static __m256i a_i_p3_p5 __attribute__ ((aligned(32)));
+static __m256i a_i_p3_p7 __attribute__ ((aligned(32)));
+static __m256i a_i_p5_m7 __attribute__ ((aligned(32)));
+static __m256i a_i_p5_m5 __attribute__ ((aligned(32)));
+static __m256i a_i_p5_m3 __attribute__ ((aligned(32)));
+static __m256i a_i_p5_m1 __attribute__ ((aligned(32)));
+static __m256i a_i_p5_p1 __attribute__ ((aligned(32)));
+static __m256i a_i_p5_p3 __attribute__ ((aligned(32)));
+static __m256i a_i_p5_p5 __attribute__ ((aligned(32)));
+static __m256i a_i_p5_p7 __attribute__ ((aligned(32)));
+static __m256i a_i_p7_m7 __attribute__ ((aligned(32)));
+static __m256i a_i_p7_m5 __attribute__ ((aligned(32)));
+static __m256i a_i_p7_m3 __attribute__ ((aligned(32)));
+static __m256i a_i_p7_m1 __attribute__ ((aligned(32)));
+static __m256i a_i_p7_p1 __attribute__ ((aligned(32)));
+static __m256i a_i_p7_p3 __attribute__ ((aligned(32)));
+static __m256i a_i_p7_p5 __attribute__ ((aligned(32)));
+static __m256i a_i_p7_p7 __attribute__ ((aligned(32)));
+
+static __m256i psi_a_m7_m7 __attribute__ ((aligned(32)));
+static __m256i psi_a_m7_m5 __attribute__ ((aligned(32)));
+static __m256i psi_a_m7_m3 __attribute__ ((aligned(32)));
+static __m256i psi_a_m7_m1 __attribute__ ((aligned(32)));
+static __m256i psi_a_m7_p1 __attribute__ ((aligned(32)));
+static __m256i psi_a_m7_p3 __attribute__ ((aligned(32)));
+static __m256i psi_a_m7_p5 __attribute__ ((aligned(32)));
+static __m256i psi_a_m7_p7 __attribute__ ((aligned(32)));
+static __m256i psi_a_m5_m7 __attribute__ ((aligned(32)));
+static __m256i psi_a_m5_m5 __attribute__ ((aligned(32)));
+static __m256i psi_a_m5_m3 __attribute__ ((aligned(32)));
+static __m256i psi_a_m5_m1 __attribute__ ((aligned(32)));
+static __m256i psi_a_m5_p1 __attribute__ ((aligned(32)));
+static __m256i psi_a_m5_p3 __attribute__ ((aligned(32)));
+static __m256i psi_a_m5_p5 __attribute__ ((aligned(32)));
+static __m256i psi_a_m5_p7 __attribute__ ((aligned(32)));
+static __m256i psi_a_m3_m7 __attribute__ ((aligned(32)));
+static __m256i psi_a_m3_m5 __attribute__ ((aligned(32)));
+static __m256i psi_a_m3_m3 __attribute__ ((aligned(32)));
+static __m256i psi_a_m3_m1 __attribute__ ((aligned(32)));
+static __m256i psi_a_m3_p1 __attribute__ ((aligned(32)));
+static __m256i psi_a_m3_p3 __attribute__ ((aligned(32)));
+static __m256i psi_a_m3_p5 __attribute__ ((aligned(32)));
+static __m256i psi_a_m3_p7 __attribute__ ((aligned(32)));
+static __m256i psi_a_m1_m7 __attribute__ ((aligned(32)));
+static __m256i psi_a_m1_m5 __attribute__ ((aligned(32)));
+static __m256i psi_a_m1_m3 __attribute__ ((aligned(32)));
+static __m256i psi_a_m1_m1 __attribute__ ((aligned(32)));
+static __m256i psi_a_m1_p1 __attribute__ ((aligned(32)));
+static __m256i psi_a_m1_p3 __attribute__ ((aligned(32)));
+static __m256i psi_a_m1_p5 __attribute__ ((aligned(32)));
+static __m256i psi_a_m1_p7 __attribute__ ((aligned(32)));
+static __m256i psi_a_p1_m7 __attribute__ ((aligned(32)));
+static __m256i psi_a_p1_m5 __attribute__ ((aligned(32)));
+static __m256i psi_a_p1_m3 __attribute__ ((aligned(32)));
+static __m256i psi_a_p1_m1 __attribute__ ((aligned(32)));
+static __m256i psi_a_p1_p1 __attribute__ ((aligned(32)));
+static __m256i psi_a_p1_p3 __attribute__ ((aligned(32)));
+static __m256i psi_a_p1_p5 __attribute__ ((aligned(32)));
+static __m256i psi_a_p1_p7 __attribute__ ((aligned(32)));
+static __m256i psi_a_p3_m7 __attribute__ ((aligned(32)));
+static __m256i psi_a_p3_m5 __attribute__ ((aligned(32)));
+static __m256i psi_a_p3_m3 __attribute__ ((aligned(32)));
+static __m256i psi_a_p3_m1 __attribute__ ((aligned(32)));
+static __m256i psi_a_p3_p1 __attribute__ ((aligned(32)));
+static __m256i psi_a_p3_p3 __attribute__ ((aligned(32)));
+static __m256i psi_a_p3_p5 __attribute__ ((aligned(32)));
+static __m256i psi_a_p3_p7 __attribute__ ((aligned(32)));
+static __m256i psi_a_p5_m7 __attribute__ ((aligned(32)));
+static __m256i psi_a_p5_m5 __attribute__ ((aligned(32)));
+static __m256i psi_a_p5_m3 __attribute__ ((aligned(32)));
+static __m256i psi_a_p5_m1 __attribute__ ((aligned(32)));
+static __m256i psi_a_p5_p1 __attribute__ ((aligned(32)));
+static __m256i psi_a_p5_p3 __attribute__ ((aligned(32)));
+static __m256i psi_a_p5_p5 __attribute__ ((aligned(32)));
+static __m256i psi_a_p5_p7 __attribute__ ((aligned(32)));
+static __m256i psi_a_p7_m7 __attribute__ ((aligned(32)));
+static __m256i psi_a_p7_m5 __attribute__ ((aligned(32)));
+static __m256i psi_a_p7_m3 __attribute__ ((aligned(32)));
+static __m256i psi_a_p7_m1 __attribute__ ((aligned(32)));
+static __m256i psi_a_p7_p1 __attribute__ ((aligned(32)));
+static __m256i psi_a_p7_p3 __attribute__ ((aligned(32)));
+static __m256i psi_a_p7_p5 __attribute__ ((aligned(32)));
+static __m256i psi_a_p7_p7 __attribute__ ((aligned(32)));
+
+static __m256i a_sq_m7_m7 __attribute__ ((aligned(32)));
+static __m256i a_sq_m7_m5 __attribute__ ((aligned(32)));
+static __m256i a_sq_m7_m3 __attribute__ ((aligned(32)));
+static __m256i a_sq_m7_m1 __attribute__ ((aligned(32)));
+static __m256i a_sq_m7_p1 __attribute__ ((aligned(32)));
+static __m256i a_sq_m7_p3 __attribute__ ((aligned(32)));
+static __m256i a_sq_m7_p5 __attribute__ ((aligned(32)));
+static __m256i a_sq_m7_p7 __attribute__ ((aligned(32)));
+static __m256i a_sq_m5_m7 __attribute__ ((aligned(32)));
+static __m256i a_sq_m5_m5 __attribute__ ((aligned(32)));
+static __m256i a_sq_m5_m3 __attribute__ ((aligned(32)));
+static __m256i a_sq_m5_m1 __attribute__ ((aligned(32)));
+static __m256i a_sq_m5_p1 __attribute__ ((aligned(32)));
+static __m256i a_sq_m5_p3 __attribute__ ((aligned(32)));
+static __m256i a_sq_m5_p5 __attribute__ ((aligned(32)));
+static __m256i a_sq_m5_p7 __attribute__ ((aligned(32)));
+static __m256i a_sq_m3_m7 __attribute__ ((aligned(32)));
+static __m256i a_sq_m3_m5 __attribute__ ((aligned(32)));
+static __m256i a_sq_m3_m3 __attribute__ ((aligned(32)));
+static __m256i a_sq_m3_m1 __attribute__ ((aligned(32)));
+static __m256i a_sq_m3_p1 __attribute__ ((aligned(32)));
+static __m256i a_sq_m3_p3 __attribute__ ((aligned(32)));
+static __m256i a_sq_m3_p5 __attribute__ ((aligned(32)));
+static __m256i a_sq_m3_p7 __attribute__ ((aligned(32)));
+static __m256i a_sq_m1_m7 __attribute__ ((aligned(32)));
+static __m256i a_sq_m1_m5 __attribute__ ((aligned(32)));
+static __m256i a_sq_m1_m3 __attribute__ ((aligned(32)));
+static __m256i a_sq_m1_m1 __attribute__ ((aligned(32)));
+static __m256i a_sq_m1_p1 __attribute__ ((aligned(32)));
+static __m256i a_sq_m1_p3 __attribute__ ((aligned(32)));
+static __m256i a_sq_m1_p5 __attribute__ ((aligned(32)));
+static __m256i a_sq_m1_p7 __attribute__ ((aligned(32)));
+static __m256i a_sq_p1_m7 __attribute__ ((aligned(32)));
+static __m256i a_sq_p1_m5 __attribute__ ((aligned(32)));
+static __m256i a_sq_p1_m3 __attribute__ ((aligned(32)));
+static __m256i a_sq_p1_m1 __attribute__ ((aligned(32)));
+static __m256i a_sq_p1_p1 __attribute__ ((aligned(32)));
+static __m256i a_sq_p1_p3 __attribute__ ((aligned(32)));
+static __m256i a_sq_p1_p5 __attribute__ ((aligned(32)));
+static __m256i a_sq_p1_p7 __attribute__ ((aligned(32)));
+static __m256i a_sq_p3_m7 __attribute__ ((aligned(32)));
+static __m256i a_sq_p3_m5 __attribute__ ((aligned(32)));
+static __m256i a_sq_p3_m3 __attribute__ ((aligned(32)));
+static __m256i a_sq_p3_m1 __attribute__ ((aligned(32)));
+static __m256i a_sq_p3_p1 __attribute__ ((aligned(32)));
+static __m256i a_sq_p3_p3 __attribute__ ((aligned(32)));
+static __m256i a_sq_p3_p5 __attribute__ ((aligned(32)));
+static __m256i a_sq_p3_p7 __attribute__ ((aligned(32)));
+static __m256i a_sq_p5_m7 __attribute__ ((aligned(32)));
+static __m256i a_sq_p5_m5 __attribute__ ((aligned(32)));
+static __m256i a_sq_p5_m3 __attribute__ ((aligned(32)));
+static __m256i a_sq_p5_m1 __attribute__ ((aligned(32)));
+static __m256i a_sq_p5_p1 __attribute__ ((aligned(32)));
+static __m256i a_sq_p5_p3 __attribute__ ((aligned(32)));
+static __m256i a_sq_p5_p5 __attribute__ ((aligned(32)));
+static __m256i a_sq_p5_p7 __attribute__ ((aligned(32)));
+static __m256i a_sq_p7_m7 __attribute__ ((aligned(32)));
+static __m256i a_sq_p7_m5 __attribute__ ((aligned(32)));
+static __m256i a_sq_p7_m3 __attribute__ ((aligned(32)));
+static __m256i a_sq_p7_m1 __attribute__ ((aligned(32)));
+static __m256i a_sq_p7_p1 __attribute__ ((aligned(32)));
+static __m256i a_sq_p7_p3 __attribute__ ((aligned(32)));
+static __m256i a_sq_p7_p5 __attribute__ ((aligned(32)));
+static __m256i a_sq_p7_p7 __attribute__ ((aligned(32)));
+
+static __m256i bit_met_m7_m7 __attribute__ ((aligned(32)));
+static __m256i bit_met_m7_m5 __attribute__ ((aligned(32)));
+static __m256i bit_met_m7_m3 __attribute__ ((aligned(32)));
+static __m256i bit_met_m7_m1 __attribute__ ((aligned(32)));
+static __m256i bit_met_m7_p1 __attribute__ ((aligned(32)));
+static __m256i bit_met_m7_p3 __attribute__ ((aligned(32)));
+static __m256i bit_met_m7_p5 __attribute__ ((aligned(32)));
+static __m256i bit_met_m7_p7 __attribute__ ((aligned(32)));
+static __m256i bit_met_m5_m7 __attribute__ ((aligned(32)));
+static __m256i bit_met_m5_m5 __attribute__ ((aligned(32)));
+static __m256i bit_met_m5_m3 __attribute__ ((aligned(32)));
+static __m256i bit_met_m5_m1 __attribute__ ((aligned(32)));
+static __m256i bit_met_m5_p1 __attribute__ ((aligned(32)));
+static __m256i bit_met_m5_p3 __attribute__ ((aligned(32)));
+static __m256i bit_met_m5_p5 __attribute__ ((aligned(32)));
+static __m256i bit_met_m5_p7 __attribute__ ((aligned(32)));
+static __m256i bit_met_m3_m7 __attribute__ ((aligned(32)));
+static __m256i bit_met_m3_m5 __attribute__ ((aligned(32)));
+static __m256i bit_met_m3_m3 __attribute__ ((aligned(32)));
+static __m256i bit_met_m3_m1 __attribute__ ((aligned(32)));
+static __m256i bit_met_m3_p1 __attribute__ ((aligned(32)));
+static __m256i bit_met_m3_p3 __attribute__ ((aligned(32)));
+static __m256i bit_met_m3_p5 __attribute__ ((aligned(32)));
+static __m256i bit_met_m3_p7 __attribute__ ((aligned(32)));
+static __m256i bit_met_m1_m7 __attribute__ ((aligned(32)));
+static __m256i bit_met_m1_m5 __attribute__ ((aligned(32)));
+static __m256i bit_met_m1_m3 __attribute__ ((aligned(32)));
+static __m256i bit_met_m1_m1 __attribute__ ((aligned(32)));
+static __m256i bit_met_m1_p1 __attribute__ ((aligned(32)));
+static __m256i bit_met_m1_p3 __attribute__ ((aligned(32)));
+static __m256i bit_met_m1_p5 __attribute__ ((aligned(32)));
+static __m256i bit_met_m1_p7 __attribute__ ((aligned(32)));
+static __m256i bit_met_p1_m7 __attribute__ ((aligned(32)));
+static __m256i bit_met_p1_m5 __attribute__ ((aligned(32)));
+static __m256i bit_met_p1_m3 __attribute__ ((aligned(32)));
+static __m256i bit_met_p1_m1 __attribute__ ((aligned(32)));
+static __m256i bit_met_p1_p1 __attribute__ ((aligned(32)));
+static __m256i bit_met_p1_p3 __attribute__ ((aligned(32)));
+static __m256i bit_met_p1_p5 __attribute__ ((aligned(32)));
+static __m256i bit_met_p1_p7 __attribute__ ((aligned(32)));
+static __m256i bit_met_p3_m7 __attribute__ ((aligned(32)));
+static __m256i bit_met_p3_m5 __attribute__ ((aligned(32)));
+static __m256i bit_met_p3_m3 __attribute__ ((aligned(32)));
+static __m256i bit_met_p3_m1 __attribute__ ((aligned(32)));
+static __m256i bit_met_p3_p1 __attribute__ ((aligned(32)));
+static __m256i bit_met_p3_p3 __attribute__ ((aligned(32)));
+static __m256i bit_met_p3_p5 __attribute__ ((aligned(32)));
+static __m256i bit_met_p3_p7 __attribute__ ((aligned(32)));
+static __m256i bit_met_p5_m7 __attribute__ ((aligned(32)));
+static __m256i bit_met_p5_m5 __attribute__ ((aligned(32)));
+static __m256i bit_met_p5_m3 __attribute__ ((aligned(32)));
+static __m256i bit_met_p5_m1 __attribute__ ((aligned(32)));
+static __m256i bit_met_p5_p1 __attribute__ ((aligned(32)));
+static __m256i bit_met_p5_p3 __attribute__ ((aligned(32)));
+static __m256i bit_met_p5_p5 __attribute__ ((aligned(32)));
+static __m256i bit_met_p5_p7 __attribute__ ((aligned(32)));
+static __m256i bit_met_p7_m7 __attribute__ ((aligned(32)));
+static __m256i bit_met_p7_m5 __attribute__ ((aligned(32)));
+static __m256i bit_met_p7_m3 __attribute__ ((aligned(32)));
+static __m256i bit_met_p7_m1 __attribute__ ((aligned(32)));
+static __m256i bit_met_p7_p1 __attribute__ ((aligned(32)));
+static __m256i bit_met_p7_p3 __attribute__ ((aligned(32)));
+static __m256i bit_met_p7_p5 __attribute__ ((aligned(32)));
+static __m256i bit_met_p7_p7 __attribute__ ((aligned(32)));
+
+static __m256i  y0_p_1_1 __attribute__ ((aligned(32)));
+static __m256i  y0_p_1_3 __attribute__ ((aligned(32)));
+static __m256i  y0_p_1_5 __attribute__ ((aligned(32)));
+static __m256i  y0_p_1_7 __attribute__ ((aligned(32)));
+static __m256i  y0_p_3_1 __attribute__ ((aligned(32)));
+static __m256i  y0_p_3_3 __attribute__ ((aligned(32)));
+static __m256i  y0_p_3_5 __attribute__ ((aligned(32)));
+static __m256i  y0_p_3_7 __attribute__ ((aligned(32)));
+static __m256i  y0_p_5_1 __attribute__ ((aligned(32)));
+static __m256i  y0_p_5_3 __attribute__ ((aligned(32)));
+static __m256i  y0_p_5_5 __attribute__ ((aligned(32)));
+static __m256i  y0_p_5_7 __attribute__ ((aligned(32)));
+static __m256i  y0_p_7_1 __attribute__ ((aligned(32)));
+static __m256i  y0_p_7_3 __attribute__ ((aligned(32)));
+static __m256i  y0_p_7_5 __attribute__ ((aligned(32)));
+static __m256i  y0_p_7_7 __attribute__ ((aligned(32)));
+static __m256i  y0_m_1_1 __attribute__ ((aligned(32)));
+static __m256i  y0_m_1_3 __attribute__ ((aligned(32)));
+static __m256i  y0_m_1_5 __attribute__ ((aligned(32)));
+static __m256i  y0_m_1_7 __attribute__ ((aligned(32)));
+static __m256i  y0_m_3_1 __attribute__ ((aligned(32)));
+static __m256i  y0_m_3_3 __attribute__ ((aligned(32)));
+static __m256i  y0_m_3_5 __attribute__ ((aligned(32)));
+static __m256i  y0_m_3_7 __attribute__ ((aligned(32)));
+static __m256i  y0_m_5_1 __attribute__ ((aligned(32)));
+static __m256i  y0_m_5_3 __attribute__ ((aligned(32)));
+static __m256i  y0_m_5_5 __attribute__ ((aligned(32)));
+static __m256i  y0_m_5_7 __attribute__ ((aligned(32)));
+static __m256i  y0_m_7_1 __attribute__ ((aligned(32)));
+static __m256i  y0_m_7_3 __attribute__ ((aligned(32)));
+static __m256i  y0_m_7_5 __attribute__ ((aligned(32)));
+static __m256i  y0_m_7_7 __attribute__ ((aligned(32)));
+
+static __m256i  xmm0 __attribute__ ((aligned(32)));
+static __m256i  xmm1 __attribute__ ((aligned(32)));
+static __m256i  xmm2 __attribute__ ((aligned(32)));
+static __m256i  xmm3 __attribute__ ((aligned(32)));
+static __m256i  xmm4 __attribute__ ((aligned(32)));
+static __m256i  xmm5 __attribute__ ((aligned(32)));
+static __m256i  xmm6 __attribute__ ((aligned(32)));
+static __m256i  xmm7 __attribute__ ((aligned(32)));
+static __m256i  xmm8 __attribute__ ((aligned(32)));
+
+static __m256i  y0r __attribute__ ((aligned(32)));
+static __m256i  y0i __attribute__ ((aligned(32)));
+static __m256i  y1r __attribute__ ((aligned(32)));
+static __m256i  y1i __attribute__ ((aligned(32)));
+static __m256i  y2r __attribute__ ((aligned(32)));
+static __m256i  y2i __attribute__ ((aligned(32)));
+
+static __m256i  logmax_num_re0 __attribute__ ((aligned(32)));
+static __m256i  logmax_den_re0 __attribute__ ((aligned(32)));
+
+static __m256i tmp_result  __attribute__ ((aligned(32)));
+static __m256i tmp_result2 __attribute__ ((aligned(32)));
+static __m256i tmp_result3 __attribute__ ((aligned(32)));
+static __m256i tmp_result4 __attribute__ ((aligned(32)));
+
+//==============================================================================================
+// Auxiliary Makros
+
+// calculate interference magnitude
+#define interference_abs_epi16(psi,int_ch_mag,int_mag,c1,c2) tmp_result = _mm256_cmpgt_epi16(int_ch_mag,psi); tmp_result2 = _mm256_xor_si256(tmp_result,(*(__m256i*)&ones256[0])); tmp_result = _mm256_and_si256(tmp_result,c1); tmp_result2 = _mm256_and_si256(tmp_result2,c2); int_mag = _mm256_or_si256(tmp_result,tmp_result2);
+
+// calculate interference magnitude
+// tmp_result = ones in shorts corr. to interval 2<=x<=4, tmp_result2 interval < 2, tmp_result3 interval 4<x<6 and tmp_result4 interval x>6
+#define interference_abs_64qam_epi16(psi,int_ch_mag,int_two_ch_mag,int_three_ch_mag,a,c1,c3,c5,c7) tmp_result = _mm256_cmpgt_epi16(int_two_ch_mag,psi); tmp_result3 = _mm256_xor_si256(tmp_result,(*(__m256i*)&ones256[0])); tmp_result2 = _mm256_cmpgt_epi16(int_ch_mag,psi); tmp_result = _mm256_xor_si256(tmp_result,tmp_result2); tmp_result4 = _mm256_cmpgt_epi16(psi,int_three_ch_mag); tmp_result3 = _mm256_xor_si256(tmp_result3,tmp_result4); tmp_result = _mm256_and_si256(tmp_result,c3); tmp_result2 = _mm256_and_si256(tmp_result2,c1); tmp_result3 = _mm256_and_si256(tmp_result3,c5); tmp_result4 = _mm256_and_si256(tmp_result4,c7); tmp_result = _mm256_or_si256(tmp_result,tmp_result2); tmp_result3 = _mm256_or_si256(tmp_result3,tmp_result4); a = _mm256_or_si256(tmp_result,tmp_result3);
+
+// calculates psi_a = psi_r*a_r + psi_i*a_i
+#define prodsum_psi_a_epi16(psi_r,a_r,psi_i,a_i,psi_a) tmp_result = _mm256_mulhi_epi16(psi_r,a_r); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result2 = _mm256_mulhi_epi16(psi_i,a_i); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); psi_a = _mm256_adds_epi16(tmp_result,tmp_result2);
+
+// calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor
+#define square_a_epi16(a_r,a_i,int_ch_mag,scale_factor,a_sq) tmp_result = _mm256_mulhi_epi16(a_r,a_r); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result = _mm256_mulhi_epi16(tmp_result,scale_factor); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result = _mm256_mulhi_epi16(tmp_result,int_ch_mag); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result2 = _mm256_mulhi_epi16(a_i,a_i); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); tmp_result2 = _mm256_mulhi_epi16(tmp_result2,scale_factor); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); tmp_result2 = _mm256_mulhi_epi16(tmp_result2,int_ch_mag); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); a_sq = _mm256_adds_epi16(tmp_result,tmp_result2);
+
+// calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor for 64-QAM
+#define square_a_64qam_epi16(a_r,a_i,int_ch_mag,scale_factor,a_sq)  tmp_result = _mm256_mulhi_epi16(a_r,a_r); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result = _mm256_mulhi_epi16(tmp_result,scale_factor); tmp_result = _mm256_slli_epi16(tmp_result,3); tmp_result = _mm256_mulhi_epi16(tmp_result,int_ch_mag); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result2 = _mm256_mulhi_epi16(a_i,a_i); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); tmp_result2 = _mm256_mulhi_epi16(tmp_result2,scale_factor); tmp_result2 = _mm256_slli_epi16(tmp_result2,3); tmp_result2 = _mm256_mulhi_epi16(tmp_result2,int_ch_mag); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); a_sq = _mm256_adds_epi16(tmp_result,tmp_result2);
+
+void seperate_real_imag_parts(__m256i *out_re,
+                              __m256i *out_im,
+                              __m256i in0,
+                              __m256i in1)
+{
+    __m256i tmp0;
+    __m256i tmp1;
+
+    in0 = _mm256_shufflelo_epi16(in0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    in0 = _mm256_shufflehi_epi16(in0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    in0 = _mm256_shuffle_epi32(in0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+
+    in1 = _mm256_shufflelo_epi16(in1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    in1 = _mm256_shufflehi_epi16(in1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    in1 = _mm256_shuffle_epi32(in1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+
+    //in0 = [Re(0,1,2,3)   Im(0,1,2,3)   Re(4,5,6,7)     Im(4,5,6,7)]
+    //in0 = [Re(8,9,10,11) Im(8,9,10,11) Re(12,13,14,15) Im(12,13,14,15)]
+
+    tmp0 = _mm256_unpacklo_epi64(in0, in1);
+    //axmm2 = [Re(0,1,2,3) Re(8,9,10,11) Re(4,5,6,7) Re(12,13,14,15)]
+    tmp0 = _mm256_permute4x64_epi64(tmp0,0xd8); // Re(rho)
+
+    tmp1 = _mm256_unpackhi_epi64(in0, in1);
+    //axmm3 = [Im(0,1,2,3) Im(8,9,10,11) Im(4,5,6,7) Im(12,13,14,15)]
+    tmp1 = _mm256_permute4x64_epi64(tmp1,0xd8); // Im(rho)
+
+    *out_re = tmp0;
+    *out_im = tmp1;
+}
+
+void qam64_qam16_avx2(short *stream0_in,
+                      short *stream1_in,
+                      short *ch_mag,
+                      short *ch_mag_i,
+                      short *stream0_out,
+                      short *rho01,
+                      int length
+    )
+{
+
+  /*
+    Author: S. Wagner
+    Date: 31-07-12
+
+    Input:
+    stream0_in:  MF filter for 1st stream, i.e., y0=h0'*y
+    stream1_in:  MF filter for 2nd stream, i.e., y1=h1'*y
+    ch_mag:      4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
+    ch_mag_i:    4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
+    rho01:       Channel cross correlation, i.e., h1'*h0
+
+    Output:
+    stream0_out: output LLRs for 1st stream
+  */
+
+#if defined(__x86_64__) || defined(__i386__)
+
+  __m256i *rho01_256i      = (__m256i *)rho01;
+  __m256i *stream0_256i_in = (__m256i *)stream0_in;
+  __m256i *stream1_256i_in = (__m256i *)stream1_in;
+  __m256i *ch_mag_256i     = (__m256i *)ch_mag;
+  __m256i *ch_mag_256i_i   = (__m256i *)ch_mag_i;
+
+  __m256i ONE_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(10112)); // round(1/sqrt(42)*2^16)
+  __m256i THREE_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(30337)); // round(3/sqrt(42)*2^16)
+  __m256i FIVE_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(25281)); // round(5/sqrt(42)*2^15)
+  __m256i SEVEN_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(17697)); // round(5/sqrt(42)*2^15)
+  __m256i FORTYNINE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(30969)); // round(49/(4*sqrt(42))*2^14), Q2.14
+  __m256i THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(23385)); // round(37/(4*sqrt(42))*2^14), Q2.14
+  __m256i TWENTYFIVE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(31601)); // round(25/(4*sqrt(42))*2^15)
+  __m256i TWENTYNINE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(18329)); // round(29/(4*sqrt(42))*2^15), Q2.14
+  __m256i SEVENTEEN_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(21489)); // round(17/(4*sqrt(42))*2^15)
+  __m256i NINE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(11376)); // round(9/(4*sqrt(42))*2^15)
+  __m256i THIRTEEN_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(16433)); // round(13/(4*sqrt(42))*2^15)
+  __m256i FIVE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(6320)); // round(5/(4*sqrt(42))*2^15)
+  __m256i ONE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(1264)); // round(1/(4*sqrt(42))*2^15)
+  __m256i ONE_OVER_SQRT_10_Q15 = _mm256_broadcastw_epi16(_mm_set1_epi16(10362)); // round(1/sqrt(10)*2^15)
+  __m256i THREE_OVER_SQRT_10 = _mm256_broadcastw_epi16(_mm_set1_epi16(31086)); // round(3/sqrt(10)*2^15)
+  __m256i SQRT_10_OVER_FOUR = _mm256_broadcastw_epi16(_mm_set1_epi16(25905)); // round(sqrt(10)/4*2^15)
+
+
+  __m256i ch_mag_int;
+  __m256i ch_mag_des;
+  __m256i ch_mag_98_over_42_with_sigma2;
+  __m256i ch_mag_74_over_42_with_sigma2;
+  __m256i ch_mag_58_over_42_with_sigma2;
+  __m256i ch_mag_50_over_42_with_sigma2;
+  __m256i ch_mag_34_over_42_with_sigma2;
+  __m256i ch_mag_18_over_42_with_sigma2;
+  __m256i ch_mag_26_over_42_with_sigma2;
+  __m256i ch_mag_10_over_42_with_sigma2;
+  __m256i ch_mag_2_over_42_with_sigma2;
+  __m256i  y0r_one_over_sqrt_21;
+  __m256i  y0r_three_over_sqrt_21;
+  __m256i  y0r_five_over_sqrt_21;
+  __m256i  y0r_seven_over_sqrt_21;
+  __m256i  y0i_one_over_sqrt_21;
+  __m256i  y0i_three_over_sqrt_21;
+  __m256i  y0i_five_over_sqrt_21;
+  __m256i  y0i_seven_over_sqrt_21;
+
+#elif defined(__arm__)
+
+#endif
+  int i,j;
+  uint32_t len256 = (length)>>3;
+
+  for (i=0; i<len256; i+=2) {
+
+#if defined(__x86_64__) || defined(__i386__)
+    // Get rho
+      /*
+    xmm0 = rho01_128i[i];
+    xmm1 = rho01_128i[i+1];
+    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
+    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
+    xmm2 = _mm_unpacklo_epi64(xmm0,xmm1); // Re(rho)
+    xmm3 = _mm_unpackhi_epi64(xmm0,xmm1); // Im(rho)
+      */
+    seperate_real_imag_parts(&xmm2, &xmm3, rho01_256i[i], rho01_256i[i+1]);
+
+    rho_rpi = _mm256_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho)
+    rho_rmi = _mm256_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho)
+
+    // Compute the different rhos
+    rho_rpi_1_1 = _mm256_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42);
+    rho_rmi_1_1 = _mm256_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42);
+    rho_rpi_3_3 = _mm256_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42);
+    rho_rmi_3_3 = _mm256_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_42);
+    rho_rpi_5_5 = _mm256_mulhi_epi16(rho_rpi, FIVE_OVER_SQRT_42);
+    rho_rmi_5_5 = _mm256_mulhi_epi16(rho_rmi, FIVE_OVER_SQRT_42);
+    rho_rpi_7_7 = _mm256_mulhi_epi16(rho_rpi, SEVEN_OVER_SQRT_42);
+    rho_rmi_7_7 = _mm256_mulhi_epi16(rho_rmi, SEVEN_OVER_SQRT_42);
+
+    rho_rpi_5_5 = _mm256_slli_epi16(rho_rpi_5_5, 1);
+    rho_rmi_5_5 = _mm256_slli_epi16(rho_rmi_5_5, 1);
+    rho_rpi_7_7 = _mm256_slli_epi16(rho_rpi_7_7, 2);
+    rho_rmi_7_7 = _mm256_slli_epi16(rho_rmi_7_7, 2);
+
+    xmm4 = _mm256_mulhi_epi16(xmm2, ONE_OVER_SQRT_42);
+    xmm5 = _mm256_mulhi_epi16(xmm3, ONE_OVER_SQRT_42);
+    xmm6 = _mm256_mulhi_epi16(xmm3, THREE_OVER_SQRT_42);
+    xmm7 = _mm256_mulhi_epi16(xmm3, FIVE_OVER_SQRT_42);
+    xmm8 = _mm256_mulhi_epi16(xmm3, SEVEN_OVER_SQRT_42);
+    xmm7 = _mm256_slli_epi16(xmm7, 1);
+    xmm8 = _mm256_slli_epi16(xmm8, 2);
+
+    rho_rpi_1_3 = _mm256_adds_epi16(xmm4, xmm6);
+    rho_rmi_1_3 = _mm256_subs_epi16(xmm4, xmm6);
+    rho_rpi_1_5 = _mm256_adds_epi16(xmm4, xmm7);
+    rho_rmi_1_5 = _mm256_subs_epi16(xmm4, xmm7);
+    rho_rpi_1_7 = _mm256_adds_epi16(xmm4, xmm8);
+    rho_rmi_1_7 = _mm256_subs_epi16(xmm4, xmm8);
+
+    xmm4 = _mm256_mulhi_epi16(xmm2, THREE_OVER_SQRT_42);
+    rho_rpi_3_1 = _mm256_adds_epi16(xmm4, xmm5);
+    rho_rmi_3_1 = _mm256_subs_epi16(xmm4, xmm5);
+    rho_rpi_3_5 = _mm256_adds_epi16(xmm4, xmm7);
+    rho_rmi_3_5 = _mm256_subs_epi16(xmm4, xmm7);
+    rho_rpi_3_7 = _mm256_adds_epi16(xmm4, xmm8);
+    rho_rmi_3_7 = _mm256_subs_epi16(xmm4, xmm8);
+
+    xmm4 = _mm256_mulhi_epi16(xmm2, FIVE_OVER_SQRT_42);
+    xmm4 = _mm256_slli_epi16(xmm4, 1);
+    rho_rpi_5_1 = _mm256_adds_epi16(xmm4, xmm5);
+    rho_rmi_5_1 = _mm256_subs_epi16(xmm4, xmm5);
+    rho_rpi_5_3 = _mm256_adds_epi16(xmm4, xmm6);
+    rho_rmi_5_3 = _mm256_subs_epi16(xmm4, xmm6);
+    rho_rpi_5_7 = _mm256_adds_epi16(xmm4, xmm8);
+    rho_rmi_5_7 = _mm256_subs_epi16(xmm4, xmm8);
+
+    xmm4 = _mm256_mulhi_epi16(xmm2, SEVEN_OVER_SQRT_42);
+    xmm4 = _mm256_slli_epi16(xmm4, 2);
+    rho_rpi_7_1 = _mm256_adds_epi16(xmm4, xmm5);
+    rho_rmi_7_1 = _mm256_subs_epi16(xmm4, xmm5);
+    rho_rpi_7_3 = _mm256_adds_epi16(xmm4, xmm6);
+    rho_rmi_7_3 = _mm256_subs_epi16(xmm4, xmm6);
+    rho_rpi_7_5 = _mm256_adds_epi16(xmm4, xmm7);
+    rho_rmi_7_5 = _mm256_subs_epi16(xmm4, xmm7);
+
+    // Rearrange interfering MF output
+    /*
+    xmm0 = stream1_128i_in[i];
+    xmm1 = stream1_128i_in[i+1];
+    xmm0 = _mm256_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm0 = _mm256_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm0 = _mm256_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm256_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm256_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm256_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
+    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
+    y1r = _mm256_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
+    y1i = _mm256_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
+    */
+
+    seperate_real_imag_parts(&y1r, &y1i, stream1_256i_in[i], stream1_256i_in[i+1]);
+
+    // Psi_r calculation from rho_rpi or rho_rmi
+    xmm0 = _mm256_broadcastw_epi16(_mm_set1_epi16(0));// ZERO for abs_pi16
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_7, y1r);
+    psi_r_p7_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_5, y1r);
+    psi_r_p7_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_3, y1r);
+    psi_r_p7_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_1, y1r);
+    psi_r_p7_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_1, y1r);
+    psi_r_p7_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_3, y1r);
+    psi_r_p7_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_5, y1r);
+    psi_r_p7_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_7, y1r);
+    psi_r_p7_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_7, y1r);
+    psi_r_p5_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_5, y1r);
+    psi_r_p5_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_3, y1r);
+    psi_r_p5_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_1, y1r);
+    psi_r_p5_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_1, y1r);
+    psi_r_p5_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_3, y1r);
+    psi_r_p5_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_5, y1r);
+    psi_r_p5_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_7, y1r);
+    psi_r_p5_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_7, y1r);
+    psi_r_p3_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_5, y1r);
+    psi_r_p3_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_3, y1r);
+    psi_r_p3_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_1, y1r);
+    psi_r_p3_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_1, y1r);
+    psi_r_p3_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_3, y1r);
+    psi_r_p3_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_5, y1r);
+    psi_r_p3_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_7, y1r);
+    psi_r_p3_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_7, y1r);
+    psi_r_p1_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_5, y1r);
+    psi_r_p1_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_3, y1r);
+    psi_r_p1_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_1, y1r);
+    psi_r_p1_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_1, y1r);
+    psi_r_p1_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_3, y1r);
+    psi_r_p1_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_5, y1r);
+    psi_r_p1_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_7, y1r);
+    psi_r_p1_m7 = _mm256_abs_epi16(xmm2);
+
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_7, y1r);
+    psi_r_m1_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_5, y1r);
+    psi_r_m1_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_3, y1r);
+    psi_r_m1_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_1, y1r);
+    psi_r_m1_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_1, y1r);
+    psi_r_m1_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_3, y1r);
+    psi_r_m1_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_5, y1r);
+    psi_r_m1_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_7, y1r);
+    psi_r_m1_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_7, y1r);
+    psi_r_m3_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_5, y1r);
+    psi_r_m3_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_3, y1r);
+    psi_r_m3_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_1, y1r);
+    psi_r_m3_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_1, y1r);
+    psi_r_m3_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_3, y1r);
+    psi_r_m3_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_5, y1r);
+    psi_r_m3_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_7, y1r);
+    psi_r_m3_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_7, y1r);
+    psi_r_m5_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_5, y1r);
+    psi_r_m5_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_3, y1r);
+    psi_r_m5_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_1, y1r);
+    psi_r_m5_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_1, y1r);
+    psi_r_m5_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_3, y1r);
+    psi_r_m5_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_5, y1r);
+    psi_r_m5_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_7, y1r);
+    psi_r_m5_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_7, y1r);
+    psi_r_m7_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_5, y1r);
+    psi_r_m7_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_3, y1r);
+    psi_r_m7_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_1, y1r);
+    psi_r_m7_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_1, y1r);
+    psi_r_m7_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_3, y1r);
+    psi_r_m7_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_5, y1r);
+    psi_r_m7_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_7, y1r);
+    psi_r_m7_m7 = _mm256_abs_epi16(xmm2);
+
+    // Psi_i calculation from rho_rpi or rho_rmi
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_7, y1i);
+    psi_i_p7_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_7, y1i);
+    psi_i_p7_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_7, y1i);
+    psi_i_p7_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_7, y1i);
+    psi_i_p7_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_7, y1i);
+    psi_i_p7_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_7, y1i);
+    psi_i_p7_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_7, y1i);
+    psi_i_p7_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_7, y1i);
+    psi_i_p7_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_5, y1i);
+    psi_i_p5_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_5, y1i);
+    psi_i_p5_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_5, y1i);
+    psi_i_p5_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_5, y1i);
+    psi_i_p5_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_5, y1i);
+    psi_i_p5_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_5, y1i);
+    psi_i_p5_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_5, y1i);
+    psi_i_p5_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_5, y1i);
+    psi_i_p5_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_3, y1i);
+    psi_i_p3_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_3, y1i);
+    psi_i_p3_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_3, y1i);
+    psi_i_p3_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_3, y1i);
+    psi_i_p3_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_3, y1i);
+    psi_i_p3_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_3, y1i);
+    psi_i_p3_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_3, y1i);
+    psi_i_p3_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_3, y1i);
+    psi_i_p3_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_1, y1i);
+    psi_i_p1_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_1, y1i);
+    psi_i_p1_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_1, y1i);
+    psi_i_p1_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_1, y1i);
+    psi_i_p1_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_1, y1i);
+    psi_i_p1_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_1, y1i);
+    psi_i_p1_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_1, y1i);
+    psi_i_p1_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_1, y1i);
+    psi_i_p1_m7 = _mm256_abs_epi16(xmm2);
+
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_1, y1i);
+    psi_i_m1_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_1, y1i);
+    psi_i_m1_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_1, y1i);
+    psi_i_m1_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_1, y1i);
+    psi_i_m1_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_1, y1i);
+    psi_i_m1_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_1, y1i);
+    psi_i_m1_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_1, y1i);
+    psi_i_m1_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_1, y1i);
+    psi_i_m1_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_3, y1i);
+    psi_i_m3_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_3, y1i);
+    psi_i_m3_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_3, y1i);
+    psi_i_m3_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_3, y1i);
+    psi_i_m3_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_3, y1i);
+    psi_i_m3_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_3, y1i);
+    psi_i_m3_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_3, y1i);
+    psi_i_m3_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_3, y1i);
+    psi_i_m3_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_5, y1i);
+    psi_i_m5_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_5, y1i);
+    psi_i_m5_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_5, y1i);
+    psi_i_m5_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_5, y1i);
+    psi_i_m5_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_5, y1i);
+    psi_i_m5_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_5, y1i);
+    psi_i_m5_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_5, y1i);
+    psi_i_m5_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_5, y1i);
+    psi_i_m5_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_7, y1i);
+    psi_i_m7_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_7, y1i);
+    psi_i_m7_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_7, y1i);
+    psi_i_m7_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_7, y1i);
+    psi_i_m7_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_7, y1i);
+    psi_i_m7_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_7, y1i);
+    psi_i_m7_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_7, y1i);
+    psi_i_m7_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_7, y1i);
+    psi_i_m7_m7 = _mm256_abs_epi16(xmm2);
+
+/*
+    // Rearrange desired MF output
+    xmm0 = stream0_128i_in[i];
+    xmm1 = stream0_128i_in[i+1];
+    xmm0 = _mm256_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm0 = _mm256_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm0 = _mm256_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm256_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm256_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm256_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
+    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
+    y0r = _mm256_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)]
+    y0i = _mm256_unpackhi_epi64(xmm0,xmm1);
+*/
+    seperate_real_imag_parts(&y0r, &y0i, stream0_256i_in[i], stream0_256i_in[i+1]);
+
+    /*
+    // Rearrange desired channel magnitudes
+    xmm2 = ch_mag_128i[i]; // = [|h|^2(1),|h|^2(1),|h|^2(2),|h|^2(2)]*(2/sqrt(10))
+    xmm3 = ch_mag_128i[i+1]; // = [|h|^2(3),|h|^2(3),|h|^2(4),|h|^2(4)]*(2/sqrt(10))
+    xmm2 = _mm256_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm2 = _mm256_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm2 = _mm256_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm3 = _mm256_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm3 = _mm256_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm3 = _mm256_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    ch_mag_des = _mm256_unpacklo_epi64(xmm2,xmm3);
+    */
+
+    seperate_real_imag_parts(&ch_mag_des, &xmm2, ch_mag_256i[i], ch_mag_256i[i+1]);
+
+    // Rearrange interfering channel magnitudes
+    /*
+    xmm2 = ch_mag_128i_i[i];
+    xmm3 = ch_mag_128i_i[i+1];
+    xmm2 = _mm256_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm2 = _mm256_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm2 = _mm256_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm3 = _mm256_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm3 = _mm256_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm3 = _mm256_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    ch_mag_int  = _mm256_unpacklo_epi64(xmm2,xmm3);
+    */
+
+    seperate_real_imag_parts(&ch_mag_int, &xmm2, ch_mag_256i_i[i], ch_mag_256i_i[i+1]);
+
+    y0r_one_over_sqrt_21   = _mm256_mulhi_epi16(y0r, ONE_OVER_SQRT_42);
+    y0r_three_over_sqrt_21 = _mm256_mulhi_epi16(y0r, THREE_OVER_SQRT_42);
+    y0r_five_over_sqrt_21  = _mm256_mulhi_epi16(y0r, FIVE_OVER_SQRT_42);
+    y0r_five_over_sqrt_21  = _mm256_slli_epi16(y0r_five_over_sqrt_21, 1);
+    y0r_seven_over_sqrt_21 = _mm256_mulhi_epi16(y0r, SEVEN_OVER_SQRT_42);
+    y0r_seven_over_sqrt_21 = _mm256_slli_epi16(y0r_seven_over_sqrt_21, 2); // Q2.14
+
+    y0i_one_over_sqrt_21   = _mm256_mulhi_epi16(y0i, ONE_OVER_SQRT_42);
+    y0i_three_over_sqrt_21 = _mm256_mulhi_epi16(y0i, THREE_OVER_SQRT_42);
+    y0i_five_over_sqrt_21  = _mm256_mulhi_epi16(y0i, FIVE_OVER_SQRT_42);
+    y0i_five_over_sqrt_21  = _mm256_slli_epi16(y0i_five_over_sqrt_21, 1);
+    y0i_seven_over_sqrt_21 = _mm256_mulhi_epi16(y0i, SEVEN_OVER_SQRT_42);
+    y0i_seven_over_sqrt_21 = _mm256_slli_epi16(y0i_seven_over_sqrt_21, 2); // Q2.14
+
+    y0_p_7_1 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_p_7_3 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_p_7_5 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_p_7_7 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21);
+    y0_p_5_1 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_p_5_3 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_p_5_5 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_p_5_7 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21);
+    y0_p_3_1 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_p_3_3 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_p_3_5 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_p_3_7 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21);
+    y0_p_1_1 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_p_1_3 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_p_1_5 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_p_1_7 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21);
+
+    y0_m_1_1 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_m_1_3 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_m_1_5 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_m_1_7 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21);
+    y0_m_3_1 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_m_3_3 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_m_3_5 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_m_3_7 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21);
+    y0_m_5_1 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_m_5_3 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_m_5_5 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_m_5_7 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21);
+    y0_m_7_1 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_m_7_3 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_m_7_5 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_m_7_7 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21);
+
+    interference_abs_epi16(psi_r_p7_p7, ch_mag_int, a_r_p7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p7_p5, ch_mag_int, a_r_p7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p7_p3, ch_mag_int, a_r_p7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p7_p1, ch_mag_int, a_r_p7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p7_m1, ch_mag_int, a_r_p7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p7_m3, ch_mag_int, a_r_p7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p7_m5, ch_mag_int, a_r_p7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p7_m7, ch_mag_int, a_r_p7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p5_p7, ch_mag_int, a_r_p5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p5_p5, ch_mag_int, a_r_p5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p5_p3, ch_mag_int, a_r_p5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p5_p1, ch_mag_int, a_r_p5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p5_m1, ch_mag_int, a_r_p5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p5_m3, ch_mag_int, a_r_p5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p5_m5, ch_mag_int, a_r_p5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p5_m7, ch_mag_int, a_r_p5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p3_p7, ch_mag_int, a_r_p3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p3_p5, ch_mag_int, a_r_p3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p3_p3, ch_mag_int, a_r_p3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p3_p1, ch_mag_int, a_r_p3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p3_m1, ch_mag_int, a_r_p3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p3_m3, ch_mag_int, a_r_p3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p3_m5, ch_mag_int, a_r_p3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p3_m7, ch_mag_int, a_r_p3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p1_p7, ch_mag_int, a_r_p1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p1_p5, ch_mag_int, a_r_p1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p1_p3, ch_mag_int, a_r_p1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p1_p1, ch_mag_int, a_r_p1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p1_m1, ch_mag_int, a_r_p1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p1_m3, ch_mag_int, a_r_p1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p1_m5, ch_mag_int, a_r_p1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_p1_m7, ch_mag_int, a_r_p1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m1_p7, ch_mag_int, a_r_m1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m1_p5, ch_mag_int, a_r_m1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m1_p3, ch_mag_int, a_r_m1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m1_p1, ch_mag_int, a_r_m1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m1_m1, ch_mag_int, a_r_m1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m1_m3, ch_mag_int, a_r_m1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m1_m5, ch_mag_int, a_r_m1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m1_m7, ch_mag_int, a_r_m1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m3_p7, ch_mag_int, a_r_m3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m3_p5, ch_mag_int, a_r_m3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m3_p3, ch_mag_int, a_r_m3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m3_p1, ch_mag_int, a_r_m3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m3_m1, ch_mag_int, a_r_m3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m3_m3, ch_mag_int, a_r_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m3_m5, ch_mag_int, a_r_m3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m3_m7, ch_mag_int, a_r_m3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m5_p7, ch_mag_int, a_r_m5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m5_p5, ch_mag_int, a_r_m5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m5_p3, ch_mag_int, a_r_m5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m5_p1, ch_mag_int, a_r_m5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m5_m1, ch_mag_int, a_r_m5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m5_m3, ch_mag_int, a_r_m5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m5_m5, ch_mag_int, a_r_m5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m5_m7, ch_mag_int, a_r_m5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m7_p7, ch_mag_int, a_r_m7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m7_p5, ch_mag_int, a_r_m7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m7_p3, ch_mag_int, a_r_m7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m7_p1, ch_mag_int, a_r_m7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m7_m1, ch_mag_int, a_r_m7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m7_m3, ch_mag_int, a_r_m7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m7_m5, ch_mag_int, a_r_m7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_r_m7_m7, ch_mag_int, a_r_m7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+
+    interference_abs_epi16(psi_i_p7_p7, ch_mag_int, a_i_p7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p7_p5, ch_mag_int, a_i_p7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p7_p3, ch_mag_int, a_i_p7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p7_p1, ch_mag_int, a_i_p7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p7_m1, ch_mag_int, a_i_p7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p7_m3, ch_mag_int, a_i_p7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p7_m5, ch_mag_int, a_i_p7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p7_m7, ch_mag_int, a_i_p7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p5_p7, ch_mag_int, a_i_p5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p5_p5, ch_mag_int, a_i_p5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p5_p3, ch_mag_int, a_i_p5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p5_p1, ch_mag_int, a_i_p5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p5_m1, ch_mag_int, a_i_p5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p5_m3, ch_mag_int, a_i_p5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p5_m5, ch_mag_int, a_i_p5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p5_m7, ch_mag_int, a_i_p5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p3_p7, ch_mag_int, a_i_p3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p3_p5, ch_mag_int, a_i_p3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p3_p3, ch_mag_int, a_i_p3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p3_p1, ch_mag_int, a_i_p3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p3_m1, ch_mag_int, a_i_p3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p3_m3, ch_mag_int, a_i_p3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p3_m5, ch_mag_int, a_i_p3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p3_m7, ch_mag_int, a_i_p3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p1_p7, ch_mag_int, a_i_p1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p1_p5, ch_mag_int, a_i_p1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p1_p3, ch_mag_int, a_i_p1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p1_p1, ch_mag_int, a_i_p1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p1_m1, ch_mag_int, a_i_p1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p1_m3, ch_mag_int, a_i_p1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p1_m5, ch_mag_int, a_i_p1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_p1_m7, ch_mag_int, a_i_p1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m1_p7, ch_mag_int, a_i_m1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m1_p5, ch_mag_int, a_i_m1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m1_p3, ch_mag_int, a_i_m1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m1_p1, ch_mag_int, a_i_m1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m1_m1, ch_mag_int, a_i_m1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m1_m3, ch_mag_int, a_i_m1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m1_m5, ch_mag_int, a_i_m1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m1_m7, ch_mag_int, a_i_m1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m3_p7, ch_mag_int, a_i_m3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m3_p5, ch_mag_int, a_i_m3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m3_p3, ch_mag_int, a_i_m3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m3_p1, ch_mag_int, a_i_m3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m3_m1, ch_mag_int, a_i_m3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m3_m3, ch_mag_int, a_i_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m3_m5, ch_mag_int, a_i_m3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m3_m7, ch_mag_int, a_i_m3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m5_p7, ch_mag_int, a_i_m5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m5_p5, ch_mag_int, a_i_m5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m5_p3, ch_mag_int, a_i_m5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m5_p1, ch_mag_int, a_i_m5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m5_m1, ch_mag_int, a_i_m5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m5_m3, ch_mag_int, a_i_m5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m5_m5, ch_mag_int, a_i_m5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m5_m7, ch_mag_int, a_i_m5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m7_p7, ch_mag_int, a_i_m7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m7_p5, ch_mag_int, a_i_m7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m7_p3, ch_mag_int, a_i_m7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m7_p1, ch_mag_int, a_i_m7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m7_m1, ch_mag_int, a_i_m7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m7_m3, ch_mag_int, a_i_m7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m7_m5, ch_mag_int, a_i_m7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+    interference_abs_epi16(psi_i_m7_m7, ch_mag_int, a_i_m7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10);
+
+    // Calculation of a group of two terms in the bit metric involving product of psi and interference
+    prodsum_psi_a_epi16(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7, psi_a_p7_p7);
+    prodsum_psi_a_epi16(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5, psi_a_p7_p5);
+    prodsum_psi_a_epi16(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3, psi_a_p7_p3);
+    prodsum_psi_a_epi16(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1, psi_a_p7_p1);
+    prodsum_psi_a_epi16(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1, psi_a_p7_m1);
+    prodsum_psi_a_epi16(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3, psi_a_p7_m3);
+    prodsum_psi_a_epi16(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5, psi_a_p7_m5);
+    prodsum_psi_a_epi16(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7, psi_a_p7_m7);
+    prodsum_psi_a_epi16(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7, psi_a_p5_p7);
+    prodsum_psi_a_epi16(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5, psi_a_p5_p5);
+    prodsum_psi_a_epi16(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3, psi_a_p5_p3);
+    prodsum_psi_a_epi16(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1, psi_a_p5_p1);
+    prodsum_psi_a_epi16(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1, psi_a_p5_m1);
+    prodsum_psi_a_epi16(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3, psi_a_p5_m3);
+    prodsum_psi_a_epi16(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5, psi_a_p5_m5);
+    prodsum_psi_a_epi16(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7, psi_a_p5_m7);
+    prodsum_psi_a_epi16(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7, psi_a_p3_p7);
+    prodsum_psi_a_epi16(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5, psi_a_p3_p5);
+    prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3, psi_a_p3_p3);
+    prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1, psi_a_p3_p1);
+    prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1, psi_a_p3_m1);
+    prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3, psi_a_p3_m3);
+    prodsum_psi_a_epi16(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5, psi_a_p3_m5);
+    prodsum_psi_a_epi16(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7, psi_a_p3_m7);
+    prodsum_psi_a_epi16(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7, psi_a_p1_p7);
+    prodsum_psi_a_epi16(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5, psi_a_p1_p5);
+    prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3, psi_a_p1_p3);
+    prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1);
+    prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1);
+    prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3, psi_a_p1_m3);
+    prodsum_psi_a_epi16(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5, psi_a_p1_m5);
+    prodsum_psi_a_epi16(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7, psi_a_p1_m7);
+    prodsum_psi_a_epi16(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7, psi_a_m1_p7);
+    prodsum_psi_a_epi16(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5, psi_a_m1_p5);
+    prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3, psi_a_m1_p3);
+    prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1);
+    prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1);
+    prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3, psi_a_m1_m3);
+    prodsum_psi_a_epi16(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5, psi_a_m1_m5);
+    prodsum_psi_a_epi16(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7, psi_a_m1_m7);
+    prodsum_psi_a_epi16(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7, psi_a_m3_p7);
+    prodsum_psi_a_epi16(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5, psi_a_m3_p5);
+    prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3, psi_a_m3_p3);
+    prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1, psi_a_m3_p1);
+    prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1, psi_a_m3_m1);
+    prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3, psi_a_m3_m3);
+    prodsum_psi_a_epi16(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5, psi_a_m3_m5);
+    prodsum_psi_a_epi16(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7, psi_a_m3_m7);
+    prodsum_psi_a_epi16(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7, psi_a_m5_p7);
+    prodsum_psi_a_epi16(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5, psi_a_m5_p5);
+    prodsum_psi_a_epi16(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3, psi_a_m5_p3);
+    prodsum_psi_a_epi16(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1, psi_a_m5_p1);
+    prodsum_psi_a_epi16(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1, psi_a_m5_m1);
+    prodsum_psi_a_epi16(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3, psi_a_m5_m3);
+    prodsum_psi_a_epi16(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5, psi_a_m5_m5);
+    prodsum_psi_a_epi16(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7, psi_a_m5_m7);
+    prodsum_psi_a_epi16(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7, psi_a_m7_p7);
+    prodsum_psi_a_epi16(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5, psi_a_m7_p5);
+    prodsum_psi_a_epi16(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3, psi_a_m7_p3);
+    prodsum_psi_a_epi16(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1, psi_a_m7_p1);
+    prodsum_psi_a_epi16(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1, psi_a_m7_m1);
+    prodsum_psi_a_epi16(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3, psi_a_m7_m3);
+    prodsum_psi_a_epi16(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5, psi_a_m7_m5);
+    prodsum_psi_a_epi16(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7, psi_a_m7_m7);
+
+    // Calculation of a group of two terms in the bit metric involving squares of interference
+    square_a_epi16(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p7);
+    square_a_epi16(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p5);
+    square_a_epi16(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p3);
+    square_a_epi16(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p1);
+    square_a_epi16(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m1);
+    square_a_epi16(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m3);
+    square_a_epi16(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m5);
+    square_a_epi16(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m7);
+    square_a_epi16(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p7);
+    square_a_epi16(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p5);
+    square_a_epi16(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p3);
+    square_a_epi16(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p1);
+    square_a_epi16(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m1);
+    square_a_epi16(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m3);
+    square_a_epi16(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m5);
+    square_a_epi16(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m7);
+    square_a_epi16(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p7);
+    square_a_epi16(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p5);
+    square_a_epi16(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p3);
+    square_a_epi16(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p1);
+    square_a_epi16(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m1);
+    square_a_epi16(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m3);
+    square_a_epi16(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m5);
+    square_a_epi16(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m7);
+    square_a_epi16(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p7);
+    square_a_epi16(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p5);
+    square_a_epi16(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p3);
+    square_a_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p1);
+    square_a_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m1);
+    square_a_epi16(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m3);
+    square_a_epi16(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m5);
+    square_a_epi16(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m7);
+    square_a_epi16(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p7);
+    square_a_epi16(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p5);
+    square_a_epi16(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p3);
+    square_a_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p1);
+    square_a_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m1);
+    square_a_epi16(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m3);
+    square_a_epi16(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m5);
+    square_a_epi16(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m7);
+    square_a_epi16(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p7);
+    square_a_epi16(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p5);
+    square_a_epi16(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p3);
+    square_a_epi16(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p1);
+    square_a_epi16(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m1);
+    square_a_epi16(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m3);
+    square_a_epi16(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m5);
+    square_a_epi16(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m7);
+    square_a_epi16(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p7);
+    square_a_epi16(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p5);
+    square_a_epi16(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p3);
+    square_a_epi16(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p1);
+    square_a_epi16(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m1);
+    square_a_epi16(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m3);
+    square_a_epi16(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m5);
+    square_a_epi16(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m7);
+    square_a_epi16(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p7);
+    square_a_epi16(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p5);
+    square_a_epi16(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p3);
+    square_a_epi16(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p1);
+    square_a_epi16(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m1);
+    square_a_epi16(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m3);
+    square_a_epi16(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m5);
+    square_a_epi16(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m7);
+
+    // Computing different multiples of ||h0||^2
+    // x=1, y=1
+    ch_mag_2_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,ONE_OVER_FOUR_SQRT_42);
+    ch_mag_2_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_2_over_42_with_sigma2,1);
+    // x=1, y=3
+    ch_mag_10_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,FIVE_OVER_FOUR_SQRT_42);
+    ch_mag_10_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_10_over_42_with_sigma2,1);
+    // x=1, x=5
+    ch_mag_26_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,THIRTEEN_OVER_FOUR_SQRT_42);
+    ch_mag_26_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_26_over_42_with_sigma2,1);
+    // x=1, y=7
+    ch_mag_50_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42);
+    ch_mag_50_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_50_over_42_with_sigma2,1);
+    // x=3, y=3
+    ch_mag_18_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,NINE_OVER_FOUR_SQRT_42);
+    ch_mag_18_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_18_over_42_with_sigma2,1);
+    // x=3, y=5
+    ch_mag_34_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,SEVENTEEN_OVER_FOUR_SQRT_42);
+    ch_mag_34_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_34_over_42_with_sigma2,1);
+    // x=3, y=7
+    ch_mag_58_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYNINE_OVER_FOUR_SQRT_42);
+    ch_mag_58_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_58_over_42_with_sigma2,2);
+    // x=5, y=5
+    ch_mag_50_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42);
+    ch_mag_50_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_50_over_42_with_sigma2,1);
+    // x=5, y=7
+    ch_mag_74_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,THIRTYSEVEN_OVER_FOUR_SQRT_42);
+    ch_mag_74_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_74_over_42_with_sigma2,2);
+    // x=7, y=7
+    ch_mag_98_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,FORTYNINE_OVER_FOUR_SQRT_42);
+    ch_mag_98_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_98_over_42_with_sigma2,2);
+
+    // Computing Metrics
+    xmm0 = _mm256_subs_epi16(psi_a_p7_p7, a_sq_p7_p7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_7);
+    bit_met_p7_p7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p7_p5, a_sq_p7_p5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_5);
+    bit_met_p7_p5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p7_p3, a_sq_p7_p3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_3);
+    bit_met_p7_p3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p7_p1, a_sq_p7_p1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_1);
+    bit_met_p7_p1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p7_m1, a_sq_p7_m1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_1);
+    bit_met_p7_m1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p7_m3, a_sq_p7_m3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_3);
+    bit_met_p7_m3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p7_m5, a_sq_p7_m5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_5);
+    bit_met_p7_m5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p7_m7, a_sq_p7_m7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_7);
+    bit_met_p7_m7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_p7, a_sq_p5_p7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_7);
+    bit_met_p5_p7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_p5, a_sq_p5_p5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_5);
+    bit_met_p5_p5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_p3, a_sq_p5_p3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_3);
+    bit_met_p5_p3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_p1, a_sq_p5_p1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_1);
+    bit_met_p5_p1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_m1, a_sq_p5_m1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_1);
+    bit_met_p5_m1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_m3, a_sq_p5_m3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_3);
+    bit_met_p5_m3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_m5, a_sq_p5_m5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_5);
+    bit_met_p5_m5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_m7, a_sq_p5_m7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_7);
+    bit_met_p5_m7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_p7, a_sq_p3_p7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_7);
+    bit_met_p3_p7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_p5, a_sq_p3_p5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_5);
+    bit_met_p3_p5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_p3, a_sq_p3_p3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_3);
+    bit_met_p3_p3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_p1, a_sq_p3_p1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_1);
+    bit_met_p3_p1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_m1, a_sq_p3_m1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_1);
+    bit_met_p3_m1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_m3, a_sq_p3_m3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_3);
+    bit_met_p3_m3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_m5, a_sq_p3_m5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_5);
+    bit_met_p3_m5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_m7, a_sq_p3_m7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_7);
+    bit_met_p3_m7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_p7, a_sq_p1_p7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_7);
+    bit_met_p1_p7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_p5, a_sq_p1_p5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_5);
+    bit_met_p1_p5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_p3, a_sq_p1_p3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_3);
+    bit_met_p1_p3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_p1, a_sq_p1_p1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_1);
+    bit_met_p1_p1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_m1, a_sq_p1_m1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_1);
+    bit_met_p1_m1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_m3, a_sq_p1_m3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_3);
+    bit_met_p1_m3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_m5, a_sq_p1_m5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_5);
+    bit_met_p1_m5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_m7, a_sq_p1_m7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_7);
+    bit_met_p1_m7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+
+    xmm0 = _mm256_subs_epi16(psi_a_m1_p7, a_sq_m1_p7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_7);
+    bit_met_m1_p7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m1_p5, a_sq_m1_p5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_5);
+    bit_met_m1_p5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m1_p3, a_sq_m1_p3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_3);
+    bit_met_m1_p3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m1_p1, a_sq_m1_p1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_1);
+    bit_met_m1_p1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m1_m1, a_sq_m1_m1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_1);
+    bit_met_m1_m1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m1_m3, a_sq_m1_m3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_3);
+    bit_met_m1_m3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m1_m5, a_sq_m1_m5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_5);
+    bit_met_m1_m5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m1_m7, a_sq_m1_m7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_7);
+    bit_met_m1_m7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_p7, a_sq_m3_p7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_7);
+    bit_met_m3_p7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_p5, a_sq_m3_p5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_5);
+    bit_met_m3_p5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_p3, a_sq_m3_p3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_3);
+    bit_met_m3_p3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_p1, a_sq_m3_p1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_1);
+    bit_met_m3_p1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_m1, a_sq_m3_m1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_1);
+    bit_met_m3_m1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_m3, a_sq_m3_m3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_3);
+    bit_met_m3_m3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_m5, a_sq_m3_m5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_5);
+    bit_met_m3_m5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_m7, a_sq_m3_m7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_7);
+    bit_met_m3_m7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_p7, a_sq_m5_p7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_7);
+    bit_met_m5_p7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_p5, a_sq_m5_p5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_5);
+    bit_met_m5_p5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_p3, a_sq_m5_p3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_3);
+    bit_met_m5_p3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_p1, a_sq_m5_p1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_1);
+    bit_met_m5_p1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_m1, a_sq_m5_m1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_1);
+    bit_met_m5_m1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_m3, a_sq_m5_m3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_3);
+    bit_met_m5_m3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_m5, a_sq_m5_m5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_5);
+    bit_met_m5_m5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_m7, a_sq_m5_m7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_7);
+    bit_met_m5_m7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_p7, a_sq_m7_p7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_7);
+    bit_met_m7_p7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_p5, a_sq_m7_p5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_5);
+    bit_met_m7_p5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_p3, a_sq_m7_p3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_3);
+    bit_met_m7_p3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_p1, a_sq_m7_p1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_1);
+    bit_met_m7_p1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_m1, a_sq_m7_m1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_1);
+    bit_met_m7_m1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_m3, a_sq_m7_m3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_3);
+    bit_met_m7_m3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_m5, a_sq_m7_m5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_5);
+    bit_met_m7_m5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_m7, a_sq_m7_m7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_7);
+    bit_met_m7_m7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
+
+    // Detection for 1st bit (LTE mapping)
+    // bit = 1
+    xmm0 = _mm256_max_epi16(bit_met_m7_p7, bit_met_m7_p5);
+    xmm1 = _mm256_max_epi16(bit_met_m7_p3, bit_met_m7_p1);
+    xmm2 = _mm256_max_epi16(bit_met_m7_m1, bit_met_m7_m3);
+    xmm3 = _mm256_max_epi16(bit_met_m7_m5, bit_met_m7_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m5_p5);
+    xmm1 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m5_p1);
+    xmm2 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m5_m3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m5_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_m3_p7, bit_met_m3_p5);
+    xmm1 = _mm256_max_epi16(bit_met_m3_p3, bit_met_m3_p1);
+    xmm2 = _mm256_max_epi16(bit_met_m3_m1, bit_met_m3_m3);
+    xmm3 = _mm256_max_epi16(bit_met_m3_m5, bit_met_m3_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m1_p5);
+    xmm1 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m1_p1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m1_m3);
+    xmm3 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m1_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+
+    // bit = 0
+    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p7_p5);
+    xmm1 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p7_p1);
+    xmm2 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p7_m3);
+    xmm3 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p7_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p5_p7, bit_met_p5_p5);
+    xmm1 = _mm256_max_epi16(bit_met_p5_p3, bit_met_p5_p1);
+    xmm2 = _mm256_max_epi16(bit_met_p5_m1, bit_met_p5_m3);
+    xmm3 = _mm256_max_epi16(bit_met_p5_m5, bit_met_p5_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p3_p5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p3_p1);
+    xmm2 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p3_m3);
+    xmm3 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p3_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p1_p7, bit_met_p1_p5);
+    xmm1 = _mm256_max_epi16(bit_met_p1_p3, bit_met_p1_p1);
+    xmm2 = _mm256_max_epi16(bit_met_p1_m1, bit_met_p1_m3);
+    xmm3 = _mm256_max_epi16(bit_met_p1_m5, bit_met_p1_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+
+    y0r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
+
+    // Detection for 2nd bit (LTE mapping)
+    // bit = 1
+    xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+
+    // bit = 0
+    xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m7_p5);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+
+    y1r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
+
+    // Detection for 3rd bit (LTE mapping)
+    xmm0 = _mm256_max_epi16(bit_met_m7_m7, bit_met_m7_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m7_m3, bit_met_m7_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m7_p1, bit_met_m7_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m7_p5, bit_met_m7_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m5_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m5_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p5_m7, bit_met_p5_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p5_m3, bit_met_p5_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p5_p1, bit_met_p5_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p5_p5, bit_met_p5_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p7_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p7_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p7_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p7_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+
+    xmm0 = _mm256_max_epi16(bit_met_m3_m7, bit_met_m3_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m3_m3, bit_met_m3_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m3_p1, bit_met_m3_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m3_p5, bit_met_m3_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m1_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m1_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m1_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m1_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p1_m7, bit_met_p1_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p1_m3, bit_met_p1_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p1_p1, bit_met_p1_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p1_p5, bit_met_p1_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p3_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p3_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p3_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p3_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+
+    y2r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
+
+    // Detection for 4th bit (LTE mapping)
+    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p5);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+
+    xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+
+    y0i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
+
+
+    // Detection for 5th bit (LTE mapping)
+    xmm0 = _mm256_max_epi16(bit_met_m7_m7, bit_met_m7_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m7_m3, bit_met_m7_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m7_p1, bit_met_m7_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m7_p5, bit_met_m7_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m1_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m1_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m1_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m1_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p1_m7, bit_met_p1_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p1_m3, bit_met_p1_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p1_p1, bit_met_p1_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p1_p5, bit_met_p1_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p7_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p7_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p7_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p7_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+
+    xmm0 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m5_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m5_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_m3_m7, bit_met_m3_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m3_m3, bit_met_m3_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m3_p1, bit_met_m3_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m3_p5, bit_met_m3_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p3_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p3_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p3_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p3_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p5_m7, bit_met_p5_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p5_m3, bit_met_p5_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p5_p1, bit_met_p5_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p5_p5, bit_met_p5_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+
+    y1i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
+
+    // Detection for 6th bit (LTE mapping)
+    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p1);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+
+    xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m7_p5);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+
+    y2i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
+
+    // map to output stream, difficult to do in SIMD since we have 6 16bit LLRs
+    // RE 1
+    j = 48*i;
+    stream0_out[j + 0] = ((short *)&y0r)[0];
+    stream0_out[j + 1] = ((short *)&y1r)[0];
+    stream0_out[j + 2] = ((short *)&y2r)[0];
+    stream0_out[j + 3] = ((short *)&y0i)[0];
+    stream0_out[j + 4] = ((short *)&y1i)[0];
+    stream0_out[j + 5] = ((short *)&y2i)[0];
+    // RE 2
+    stream0_out[j + 6] = ((short *)&y0r)[1];
+    stream0_out[j + 7] = ((short *)&y1r)[1];
+    stream0_out[j + 8] = ((short *)&y2r)[1];
+    stream0_out[j + 9] = ((short *)&y0i)[1];
+    stream0_out[j + 10] = ((short *)&y1i)[1];
+    stream0_out[j + 11] = ((short *)&y2i)[1];
+    // RE 3
+    stream0_out[j + 12] = ((short *)&y0r)[2];
+    stream0_out[j + 13] = ((short *)&y1r)[2];
+    stream0_out[j + 14] = ((short *)&y2r)[2];
+    stream0_out[j + 15] = ((short *)&y0i)[2];
+    stream0_out[j + 16] = ((short *)&y1i)[2];
+    stream0_out[j + 17] = ((short *)&y2i)[2];
+    // RE 4
+    stream0_out[j + 18] = ((short *)&y0r)[3];
+    stream0_out[j + 19] = ((short *)&y1r)[3];
+    stream0_out[j + 20] = ((short *)&y2r)[3];
+    stream0_out[j + 21] = ((short *)&y0i)[3];
+    stream0_out[j + 22] = ((short *)&y1i)[3];
+    stream0_out[j + 23] = ((short *)&y2i)[3];
+    // RE 5
+    stream0_out[j + 24] = ((short *)&y0r)[4];
+    stream0_out[j + 25] = ((short *)&y1r)[4];
+    stream0_out[j + 26] = ((short *)&y2r)[4];
+    stream0_out[j + 27] = ((short *)&y0i)[4];
+    stream0_out[j + 28] = ((short *)&y1i)[4];
+    stream0_out[j + 29] = ((short *)&y2i)[4];
+    // RE 6
+    stream0_out[j + 30] = ((short *)&y0r)[5];
+    stream0_out[j + 31] = ((short *)&y1r)[5];
+    stream0_out[j + 32] = ((short *)&y2r)[5];
+    stream0_out[j + 33] = ((short *)&y0i)[5];
+    stream0_out[j + 34] = ((short *)&y1i)[5];
+    stream0_out[j + 35] = ((short *)&y2i)[5];
+    // RE 7
+    stream0_out[j + 36] = ((short *)&y0r)[6];
+    stream0_out[j + 37] = ((short *)&y1r)[6];
+    stream0_out[j + 38] = ((short *)&y2r)[6];
+    stream0_out[j + 39] = ((short *)&y0i)[6];
+    stream0_out[j + 40] = ((short *)&y1i)[6];
+    stream0_out[j + 41] = ((short *)&y2i)[6];
+    // RE 8
+    stream0_out[j + 42] = ((short *)&y0r)[7];
+    stream0_out[j + 43] = ((short *)&y1r)[7];
+    stream0_out[j + 44] = ((short *)&y2r)[7];
+    stream0_out[j + 45] = ((short *)&y0i)[7];
+    stream0_out[j + 46] = ((short *)&y1i)[7];
+    stream0_out[j + 47] = ((short *)&y2i)[7];
+
+    // RE 9
+    stream0_out[j + 48] = ((short *)&y0r)[8];
+    stream0_out[j + 49] = ((short *)&y1r)[8];
+    stream0_out[j + 50] = ((short *)&y2r)[8];
+    stream0_out[j + 51] = ((short *)&y0i)[8];
+    stream0_out[j + 52] = ((short *)&y1i)[8];
+    stream0_out[j + 53] = ((short *)&y2i)[8];
+    // RE 10
+    stream0_out[j + 54] = ((short *)&y0r)[9];
+    stream0_out[j + 55] = ((short *)&y1r)[9];
+    stream0_out[j + 56] = ((short *)&y2r)[9];
+    stream0_out[j + 57] = ((short *)&y0i)[9];
+    stream0_out[j + 58] = ((short *)&y1i)[9];
+    stream0_out[j + 59] = ((short *)&y2i)[9];
+    // RE 11
+    stream0_out[j + 60] = ((short *)&y0r)[10];
+    stream0_out[j + 61] = ((short *)&y1r)[10];
+    stream0_out[j + 62] = ((short *)&y2r)[10];
+    stream0_out[j + 63] = ((short *)&y0i)[10];
+    stream0_out[j + 64] = ((short *)&y1i)[10];
+    stream0_out[j + 65] = ((short *)&y2i)[10];
+    // RE 12
+    stream0_out[j + 66] = ((short *)&y0r)[11];
+    stream0_out[j + 67] = ((short *)&y1r)[11];
+    stream0_out[j + 68] = ((short *)&y2r)[11];
+    stream0_out[j + 69] = ((short *)&y0i)[11];
+    stream0_out[j + 70] = ((short *)&y1i)[11];
+    stream0_out[j + 71] = ((short *)&y2i)[11];
+    // RE 13
+    stream0_out[j + 72] = ((short *)&y0r)[12];
+    stream0_out[j + 73] = ((short *)&y1r)[12];
+    stream0_out[j + 74] = ((short *)&y2r)[12];
+    stream0_out[j + 75] = ((short *)&y0i)[12];
+    stream0_out[j + 76] = ((short *)&y1i)[12];
+    stream0_out[j + 77] = ((short *)&y2i)[12];
+    // RE 14
+    stream0_out[j + 78] = ((short *)&y0r)[13];
+    stream0_out[j + 79] = ((short *)&y1r)[13];
+    stream0_out[j + 80] = ((short *)&y2r)[13];
+    stream0_out[j + 81] = ((short *)&y0i)[13];
+    stream0_out[j + 82] = ((short *)&y1i)[13];
+    stream0_out[j + 83] = ((short *)&y2i)[13];
+    // RE 15
+    stream0_out[j + 84] = ((short *)&y0r)[14];
+    stream0_out[j + 85] = ((short *)&y1r)[14];
+    stream0_out[j + 86] = ((short *)&y2r)[14];
+    stream0_out[j + 87] = ((short *)&y0i)[14];
+    stream0_out[j + 88] = ((short *)&y1i)[14];
+    stream0_out[j + 89] = ((short *)&y2i)[14];
+    // RE 16
+    stream0_out[j + 90] = ((short *)&y0r)[15];
+    stream0_out[j + 91] = ((short *)&y1r)[15];
+    stream0_out[j + 92] = ((short *)&y2r)[15];
+    stream0_out[j + 93] = ((short *)&y0i)[15];
+    stream0_out[j + 94] = ((short *)&y1i)[15];
+    stream0_out[j + 95] = ((short *)&y2i)[15];
+
+#elif defined(__arm__)
+
+#endif
+  }
+
+#if defined(__x86_64__) || defined(__i386__)
+  _mm_empty();
+  _m_empty();
+#endif
+
+}
+
+void qam64_qam64_avx2(int32_t *stream0_in,
+                      int32_t *stream1_in,
+                      int32_t *ch_mag,
+                      int32_t *ch_mag_i,
+                      int16_t *stream0_out,
+                      int32_t *rho01,
+                      int length
+    )
+{
+
+  /*
+    Author: S. Wagner
+    Date: 28-02-17
+
+    Input:
+    stream0_in:  MF filter for 1st stream, i.e., y0=h0'*y
+    stream1_in:  MF filter for 2nd stream, i.e., y1=h1'*y
+    ch_mag:      4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
+    ch_mag_i:    4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc
+    rho01:       Channel cross correlation, i.e., h1'*h0
+
+    Output:
+    stream0_out: output LLRs for 1st stream
+  */
+
+#if defined(__x86_64__) || defined(__i386__)
+
+  __m256i *rho01_256i      = (__m256i *)rho01;
+  __m256i *stream0_256i_in = (__m256i *)stream0_in;
+  __m256i *stream1_256i_in = (__m256i *)stream1_in;
+  __m256i *ch_mag_256i     = (__m256i *)ch_mag;
+  __m256i *ch_mag_256i_i   = (__m256i *)ch_mag_i;
+
+  __m256i ONE_OVER_SQRT_42              = _mm256_broadcastw_epi16(_mm_set1_epi16(10112)); // round(1/sqrt(42)*2^16)
+  __m256i THREE_OVER_SQRT_42            = _mm256_broadcastw_epi16(_mm_set1_epi16(30337)); // round(3/sqrt(42)*2^16)
+  __m256i FIVE_OVER_SQRT_42             = _mm256_broadcastw_epi16(_mm_set1_epi16(25281)); // round(5/sqrt(42)*2^15)
+  __m256i SEVEN_OVER_SQRT_42            = _mm256_broadcastw_epi16(_mm_set1_epi16(17697)); // round(7/sqrt(42)*2^14) Q2.14
+  __m256i ONE_OVER_SQRT_2               = _mm256_broadcastw_epi16(_mm_set1_epi16(23170)); // round(1/sqrt(2)*2^15)
+  __m256i ONE_OVER_SQRT_2_42            = _mm256_broadcastw_epi16(_mm_set1_epi16(3575));  // round(1/sqrt(2*42)*2^15)
+  __m256i THREE_OVER_SQRT_2_42          = _mm256_broadcastw_epi16(_mm_set1_epi16(10726)); // round(3/sqrt(2*42)*2^15)
+  __m256i FIVE_OVER_SQRT_2_42           = _mm256_broadcastw_epi16(_mm_set1_epi16(17876)); // round(5/sqrt(2*42)*2^15)
+  __m256i SEVEN_OVER_SQRT_2_42          = _mm256_broadcastw_epi16(_mm_set1_epi16(25027)); // round(7/sqrt(2*42)*2^15)
+  __m256i FORTYNINE_OVER_FOUR_SQRT_42   = _mm256_broadcastw_epi16(_mm_set1_epi16(30969)); // round(49/(4*sqrt(42))*2^14), Q2.14
+  __m256i THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(23385)); // round(37/(4*sqrt(42))*2^14), Q2.14
+  __m256i TWENTYFIVE_OVER_FOUR_SQRT_42  = _mm256_broadcastw_epi16(_mm_set1_epi16(31601)); // round(25/(4*sqrt(42))*2^15)
+  __m256i TWENTYNINE_OVER_FOUR_SQRT_42  = _mm256_broadcastw_epi16(_mm_set1_epi16(18329)); // round(29/(4*sqrt(42))*2^15), Q2.14
+  __m256i SEVENTEEN_OVER_FOUR_SQRT_42   = _mm256_broadcastw_epi16(_mm_set1_epi16(21489)); // round(17/(4*sqrt(42))*2^15)
+  __m256i NINE_OVER_FOUR_SQRT_42        = _mm256_broadcastw_epi16(_mm_set1_epi16(11376)); // round(9/(4*sqrt(42))*2^15)
+  __m256i THIRTEEN_OVER_FOUR_SQRT_42    = _mm256_broadcastw_epi16(_mm_set1_epi16(16433)); // round(13/(4*sqrt(42))*2^15)
+  __m256i FIVE_OVER_FOUR_SQRT_42        = _mm256_broadcastw_epi16(_mm_set1_epi16(6320));  // round(5/(4*sqrt(42))*2^15)
+  __m256i ONE_OVER_FOUR_SQRT_42         = _mm256_broadcastw_epi16(_mm_set1_epi16(1264));  // round(1/(4*sqrt(42))*2^15)
+  __m256i SQRT_42_OVER_FOUR             = _mm256_broadcastw_epi16(_mm_set1_epi16(13272)); // round(sqrt(42)/4*2^13), Q3.12
+
+  __m256i ch_mag_des;
+  __m256i ch_mag_int;
+  __m256i ch_mag_98_over_42_with_sigma2;
+  __m256i ch_mag_74_over_42_with_sigma2;
+  __m256i ch_mag_58_over_42_with_sigma2;
+  __m256i ch_mag_50_over_42_with_sigma2;
+  __m256i ch_mag_34_over_42_with_sigma2;
+  __m256i ch_mag_18_over_42_with_sigma2;
+  __m256i ch_mag_26_over_42_with_sigma2;
+  __m256i ch_mag_10_over_42_with_sigma2;
+  __m256i ch_mag_2_over_42_with_sigma2;
+  __m256i y0r_one_over_sqrt_21;
+  __m256i y0r_three_over_sqrt_21;
+  __m256i y0r_five_over_sqrt_21;
+  __m256i y0r_seven_over_sqrt_21;
+  __m256i y0i_one_over_sqrt_21;
+  __m256i y0i_three_over_sqrt_21;
+  __m256i y0i_five_over_sqrt_21;
+  __m256i y0i_seven_over_sqrt_21;
+  __m256i ch_mag_int_with_sigma2;
+  __m256i two_ch_mag_int_with_sigma2;
+  __m256i three_ch_mag_int_with_sigma2;
+#elif defined(__arm__)
+
+#endif
+
+  int i,j;
+  uint32_t len256 = (length)>>3;
+
+  for (i=0; i<len256; i+=2) {
+
+#if defined(__x86_64__) || defined(__i386__)
+
+    // Get rho
+      /*
+    xmm0 = rho01_256i[i];
+    xmm1 = rho01_256i[i+1];
+    xmm0 = _mm256_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm0 = _mm256_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm0 = _mm256_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+
+    xmm1 = _mm256_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm256_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm256_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+
+    //xmm0 = [Re(0,1,2,3)   Im(0,1,2,3)   Re(4,5,6,7)     Im(4,5,6,7)]
+    //xmm0 = [Re(8,9,10,11) Im(8,9,10,11) Re(12,13,14,15) Im(12,13,14,15)]
+
+    xmm2 = _mm256_unpacklo_epi64(xmm0, xmm1);
+    //xmm2 = [Re(0,1,2,3) Re(8,9,10,11) Re(4,5,6,7) Re(12,13,14,15)]
+    xmm2 = _mm256_permute4x64_epi64(xmm2,0xd8); // Re(rho)
+
+    xmm3 = _mm256_unpackhi_epi64(xmm0, xmm1);
+    //xmm3 = [Im(0,1,2,3) Im(8,9,10,11) Im(4,5,6,7) Im(12,13,14,15)]
+    xmm3 = _mm256_permute4x64_epi64(xmm3,0xd8); // Im(rho)
+      */
+
+    seperate_real_imag_parts(&xmm2, &xmm3, rho01_256i[i], rho01_256i[i+1]);
+
+    rho_rpi = _mm256_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho)
+    rho_rmi = _mm256_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho)
+
+    // Compute the different rhos
+    rho_rpi_1_1 = _mm256_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42);
+    rho_rmi_1_1 = _mm256_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42);
+    rho_rpi_3_3 = _mm256_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42);
+    rho_rmi_3_3 = _mm256_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_42);
+    rho_rpi_5_5 = _mm256_mulhi_epi16(rho_rpi, FIVE_OVER_SQRT_42);
+    rho_rmi_5_5 = _mm256_mulhi_epi16(rho_rmi, FIVE_OVER_SQRT_42);
+    rho_rpi_7_7 = _mm256_mulhi_epi16(rho_rpi, SEVEN_OVER_SQRT_42);
+    rho_rmi_7_7 = _mm256_mulhi_epi16(rho_rmi, SEVEN_OVER_SQRT_42);
+
+    rho_rpi_5_5 = _mm256_slli_epi16(rho_rpi_5_5, 1);
+    rho_rmi_5_5 = _mm256_slli_epi16(rho_rmi_5_5, 1);
+    rho_rpi_7_7 = _mm256_slli_epi16(rho_rpi_7_7, 2);
+    rho_rmi_7_7 = _mm256_slli_epi16(rho_rmi_7_7, 2);
+
+    xmm4 = _mm256_mulhi_epi16(xmm2, ONE_OVER_SQRT_42);
+    xmm5 = _mm256_mulhi_epi16(xmm3, ONE_OVER_SQRT_42);
+    xmm6 = _mm256_mulhi_epi16(xmm3, THREE_OVER_SQRT_42);
+    xmm7 = _mm256_mulhi_epi16(xmm3, FIVE_OVER_SQRT_42);
+    xmm8 = _mm256_mulhi_epi16(xmm3, SEVEN_OVER_SQRT_42);
+    xmm7 = _mm256_slli_epi16(xmm7, 1);
+    xmm8 = _mm256_slli_epi16(xmm8, 2);
+
+    rho_rpi_1_3 = _mm256_adds_epi16(xmm4, xmm6);
+    rho_rmi_1_3 = _mm256_subs_epi16(xmm4, xmm6);
+    rho_rpi_1_5 = _mm256_adds_epi16(xmm4, xmm7);
+    rho_rmi_1_5 = _mm256_subs_epi16(xmm4, xmm7);
+    rho_rpi_1_7 = _mm256_adds_epi16(xmm4, xmm8);
+    rho_rmi_1_7 = _mm256_subs_epi16(xmm4, xmm8);
+
+    xmm4 = _mm256_mulhi_epi16(xmm2, THREE_OVER_SQRT_42);
+    rho_rpi_3_1 = _mm256_adds_epi16(xmm4, xmm5);
+    rho_rmi_3_1 = _mm256_subs_epi16(xmm4, xmm5);
+    rho_rpi_3_5 = _mm256_adds_epi16(xmm4, xmm7);
+    rho_rmi_3_5 = _mm256_subs_epi16(xmm4, xmm7);
+    rho_rpi_3_7 = _mm256_adds_epi16(xmm4, xmm8);
+    rho_rmi_3_7 = _mm256_subs_epi16(xmm4, xmm8);
+
+    xmm4 = _mm256_mulhi_epi16(xmm2, FIVE_OVER_SQRT_42);
+    xmm4 = _mm256_slli_epi16(xmm4, 1);
+    rho_rpi_5_1 = _mm256_adds_epi16(xmm4, xmm5);
+    rho_rmi_5_1 = _mm256_subs_epi16(xmm4, xmm5);
+    rho_rpi_5_3 = _mm256_adds_epi16(xmm4, xmm6);
+    rho_rmi_5_3 = _mm256_subs_epi16(xmm4, xmm6);
+    rho_rpi_5_7 = _mm256_adds_epi16(xmm4, xmm8);
+    rho_rmi_5_7 = _mm256_subs_epi16(xmm4, xmm8);
+
+    xmm4 = _mm256_mulhi_epi16(xmm2, SEVEN_OVER_SQRT_42);
+    xmm4 = _mm256_slli_epi16(xmm4, 2);
+    rho_rpi_7_1 = _mm256_adds_epi16(xmm4, xmm5);
+    rho_rmi_7_1 = _mm256_subs_epi16(xmm4, xmm5);
+    rho_rpi_7_3 = _mm256_adds_epi16(xmm4, xmm6);
+    rho_rmi_7_3 = _mm256_subs_epi16(xmm4, xmm6);
+    rho_rpi_7_5 = _mm256_adds_epi16(xmm4, xmm7);
+    rho_rmi_7_5 = _mm256_subs_epi16(xmm4, xmm7);
+
+    // Rearrange interfering MF output
+    /*
+    xmm0 = stream1_256i_in[i];
+    xmm1 = stream1_256i_in[i+1];
+    xmm0 = _mm256_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm0 = _mm256_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm0 = _mm256_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+
+    xmm1 = _mm256_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm256_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm256_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+
+    y1r = _mm256_unpacklo_epi64(xmm0, xmm1);
+    y1r = _mm256_permute4x64_epi64(y1r,0xd8); // Re(y1)
+
+    y1i = _mm256_unpackhi_epi64(xmm0, xmm1);
+    y1i = _mm256_permute4x64_epi64(y1i,0xd8); // Im(y1)
+    */
+
+    seperate_real_imag_parts(&y1r, &y1i, stream1_256i_in[i], stream1_256i_in[i+1]);
+
+    // Psi_r calculation from rho_rpi or rho_rmi
+    xmm0 = _mm256_broadcastw_epi16(_mm_set1_epi16(0));// ZERO for abs_pi16
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_7, y1r);
+
+    psi_r_p7_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_5, y1r);
+    psi_r_p7_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_3, y1r);
+    psi_r_p7_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_1, y1r);
+    psi_r_p7_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_1, y1r);
+    psi_r_p7_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_3, y1r);
+    psi_r_p7_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_5, y1r);
+    psi_r_p7_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_7, y1r);
+    psi_r_p7_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_7, y1r);
+    psi_r_p5_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_5, y1r);
+    psi_r_p5_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_3, y1r);
+    psi_r_p5_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_1, y1r);
+    psi_r_p5_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_1, y1r);
+    psi_r_p5_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_3, y1r);
+    psi_r_p5_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_5, y1r);
+    psi_r_p5_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_7, y1r);
+    psi_r_p5_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_7, y1r);
+    psi_r_p3_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_5, y1r);
+    psi_r_p3_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_3, y1r);
+    psi_r_p3_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_1, y1r);
+    psi_r_p3_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_1, y1r);
+    psi_r_p3_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_3, y1r);
+    psi_r_p3_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_5, y1r);
+    psi_r_p3_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_7, y1r);
+    psi_r_p3_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_7, y1r);
+    psi_r_p1_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_5, y1r);
+    psi_r_p1_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_3, y1r);
+    psi_r_p1_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_1, y1r);
+    psi_r_p1_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_1, y1r);
+    psi_r_p1_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_3, y1r);
+    psi_r_p1_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_5, y1r);
+    psi_r_p1_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_7, y1r);
+    psi_r_p1_m7 = _mm256_abs_epi16(xmm2);
+
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_7, y1r);
+    psi_r_m1_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_5, y1r);
+    psi_r_m1_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_3, y1r);
+    psi_r_m1_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_1, y1r);
+    psi_r_m1_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_1, y1r);
+    psi_r_m1_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_3, y1r);
+    psi_r_m1_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_5, y1r);
+    psi_r_m1_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_7, y1r);
+    psi_r_m1_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_7, y1r);
+    psi_r_m3_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_5, y1r);
+    psi_r_m3_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_3, y1r);
+    psi_r_m3_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_1, y1r);
+    psi_r_m3_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_1, y1r);
+    psi_r_m3_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_3, y1r);
+    psi_r_m3_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_5, y1r);
+    psi_r_m3_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_7, y1r);
+    psi_r_m3_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_7, y1r);
+    psi_r_m5_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_5, y1r);
+    psi_r_m5_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_3, y1r);
+    psi_r_m5_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_1, y1r);
+    psi_r_m5_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_1, y1r);
+    psi_r_m5_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_3, y1r);
+    psi_r_m5_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_5, y1r);
+    psi_r_m5_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_7, y1r);
+    psi_r_m5_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_7, y1r);
+    psi_r_m7_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_5, y1r);
+    psi_r_m7_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_3, y1r);
+    psi_r_m7_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_1, y1r);
+    psi_r_m7_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_1, y1r);
+    psi_r_m7_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_3, y1r);
+    psi_r_m7_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_5, y1r);
+    psi_r_m7_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_7, y1r);
+    psi_r_m7_m7 = _mm256_abs_epi16(xmm2);
+
+    // Psi_i calculation from rho_rpi or rho_rmi
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_7, y1i);
+    psi_i_p7_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_7, y1i);
+    psi_i_p7_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_7, y1i);
+    psi_i_p7_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_7, y1i);
+    psi_i_p7_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_7, y1i);
+    psi_i_p7_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_7, y1i);
+    psi_i_p7_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_7, y1i);
+    psi_i_p7_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_7, y1i);
+    psi_i_p7_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_5, y1i);
+    psi_i_p5_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_5, y1i);
+    psi_i_p5_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_5, y1i);
+    psi_i_p5_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_5, y1i);
+    psi_i_p5_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_5, y1i);
+    psi_i_p5_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_5, y1i);
+    psi_i_p5_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_5, y1i);
+    psi_i_p5_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_5, y1i);
+    psi_i_p5_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_3, y1i);
+    psi_i_p3_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_3, y1i);
+    psi_i_p3_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_3, y1i);
+    psi_i_p3_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_3, y1i);
+    psi_i_p3_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_3, y1i);
+    psi_i_p3_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_3, y1i);
+    psi_i_p3_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_3, y1i);
+    psi_i_p3_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_3, y1i);
+    psi_i_p3_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_7_1, y1i);
+    psi_i_p1_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_5_1, y1i);
+    psi_i_p1_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_3_1, y1i);
+    psi_i_p1_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rmi_1_1, y1i);
+    psi_i_p1_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_1_1, y1i);
+    psi_i_p1_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_3_1, y1i);
+    psi_i_p1_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_5_1, y1i);
+    psi_i_p1_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rpi_7_1, y1i);
+    psi_i_p1_m7 = _mm256_abs_epi16(xmm2);
+
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_1, y1i);
+    psi_i_m1_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_1, y1i);
+    psi_i_m1_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_1, y1i);
+    psi_i_m1_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_1, y1i);
+    psi_i_m1_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_1, y1i);
+    psi_i_m1_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_1, y1i);
+    psi_i_m1_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_1, y1i);
+    psi_i_m1_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_1, y1i);
+    psi_i_m1_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_3, y1i);
+    psi_i_m3_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_3, y1i);
+    psi_i_m3_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_3, y1i);
+    psi_i_m3_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_3, y1i);
+    psi_i_m3_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_3, y1i);
+    psi_i_m3_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_3, y1i);
+    psi_i_m3_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_3, y1i);
+    psi_i_m3_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_3, y1i);
+    psi_i_m3_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_5, y1i);
+    psi_i_m5_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_5, y1i);
+    psi_i_m5_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_5, y1i);
+    psi_i_m5_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_5, y1i);
+    psi_i_m5_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_5, y1i);
+    psi_i_m5_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_5, y1i);
+    psi_i_m5_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_5, y1i);
+    psi_i_m5_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_5, y1i);
+    psi_i_m5_m7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_7_7, y1i);
+    psi_i_m7_p7 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_5_7, y1i);
+    psi_i_m7_p5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_3_7, y1i);
+    psi_i_m7_p3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_subs_epi16(rho_rpi_1_7, y1i);
+    psi_i_m7_p1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_1_7, y1i);
+    psi_i_m7_m1 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_3_7, y1i);
+    psi_i_m7_m3 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_5_7, y1i);
+    psi_i_m7_m5 = _mm256_abs_epi16(xmm2);
+    xmm2 = _mm256_adds_epi16(rho_rmi_7_7, y1i);
+    psi_i_m7_m7 = _mm256_abs_epi16(xmm2);
+
+    /*
+    // Rearrange desired MF output
+    xmm0 = stream0_256i_in[i];
+    xmm1 = stream0_256i_in[i+1];
+    xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)]
+    //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)]
+    y0r = _mm_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)]
+    y0i = _mm_unpackhi_epi64(xmm0,xmm1);
+    */
+    seperate_real_imag_parts(&y0r, &y0i, stream0_256i_in[i], stream0_256i_in[i+1]);
+
+    // Rearrange desired channel magnitudes
+    // [|h|^2(1),|h|^2(1),|h|^2(2),|h|^2(2),...,,|h|^2(7),|h|^2(7)]*(2/sqrt(10))
+    /*
+    xmm2 = ch_mag_256i[i];
+    xmm3 = ch_mag_256i[i+1];
+    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    ch_mag_des = _mm_unpacklo_epi64(xmm2,xmm3);
+    */
+    // xmm2 is dummy variable that contains the same values as ch_mag_des
+    seperate_real_imag_parts(&ch_mag_des, &xmm2, ch_mag_256i[i], ch_mag_256i[i+1]);
+
+
+    // Rearrange interfering channel magnitudes
+    /*
+    xmm2 = ch_mag_256i_i[i];
+    xmm3 = ch_mag_256i_i[i+1];
+    xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3));
+    ch_mag_int  = _mm_unpacklo_epi64(xmm2,xmm3);
+    */
+    seperate_real_imag_parts(&ch_mag_int, &xmm2, ch_mag_256i_i[i], ch_mag_256i_i[i+1]);
+
+    y0r_one_over_sqrt_21   = _mm256_mulhi_epi16(y0r, ONE_OVER_SQRT_42);
+    y0r_three_over_sqrt_21 = _mm256_mulhi_epi16(y0r, THREE_OVER_SQRT_42);
+    y0r_five_over_sqrt_21  = _mm256_mulhi_epi16(y0r, FIVE_OVER_SQRT_42);
+    y0r_five_over_sqrt_21  = _mm256_slli_epi16(y0r_five_over_sqrt_21, 1);
+    y0r_seven_over_sqrt_21 = _mm256_mulhi_epi16(y0r, SEVEN_OVER_SQRT_42);
+    y0r_seven_over_sqrt_21 = _mm256_slli_epi16(y0r_seven_over_sqrt_21, 2); // Q2.14
+
+    y0i_one_over_sqrt_21   = _mm256_mulhi_epi16(y0i, ONE_OVER_SQRT_42);
+    y0i_three_over_sqrt_21 = _mm256_mulhi_epi16(y0i, THREE_OVER_SQRT_42);
+    y0i_five_over_sqrt_21  = _mm256_mulhi_epi16(y0i, FIVE_OVER_SQRT_42);
+    y0i_five_over_sqrt_21  = _mm256_slli_epi16(y0i_five_over_sqrt_21, 1);
+    y0i_seven_over_sqrt_21 = _mm256_mulhi_epi16(y0i, SEVEN_OVER_SQRT_42);
+    y0i_seven_over_sqrt_21 = _mm256_slli_epi16(y0i_seven_over_sqrt_21, 2); // Q2.14
+
+
+    y0_p_7_1 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_p_7_3 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_p_7_5 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_p_7_7 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21);
+    y0_p_5_1 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_p_5_3 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_p_5_5 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_p_5_7 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21);
+    y0_p_3_1 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_p_3_3 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_p_3_5 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_p_3_7 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21);
+    y0_p_1_1 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_p_1_3 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_p_1_5 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_p_1_7 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21);
+
+    y0_m_1_1 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_m_1_3 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_m_1_5 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_m_1_7 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21);
+    y0_m_3_1 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_m_3_3 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_m_3_5 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_m_3_7 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21);
+    y0_m_5_1 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_m_5_3 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_m_5_5 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_m_5_7 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21);
+    y0_m_7_1 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21);
+    y0_m_7_3 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21);
+    y0_m_7_5 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21);
+    y0_m_7_7 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21);
+
+    // Detection of interference term
+    ch_mag_int_with_sigma2       = _mm256_srai_epi16(ch_mag_int, 1); // *2
+    two_ch_mag_int_with_sigma2   = ch_mag_int; // *4
+    three_ch_mag_int_with_sigma2 = _mm256_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6
+
+    interference_abs_64qam_epi16(psi_r_p7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_p1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_r_m7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+
+    interference_abs_64qam_epi16(psi_i_p7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_p1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+    interference_abs_64qam_epi16(psi_i_m7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42,
+                                 SEVEN_OVER_SQRT_2_42);
+
+    // Calculation of a group of two terms in the bit metric involving product of psi and interference
+    prodsum_psi_a_epi16(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7, psi_a_p7_p7);
+    prodsum_psi_a_epi16(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5, psi_a_p7_p5);
+    prodsum_psi_a_epi16(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3, psi_a_p7_p3);
+    prodsum_psi_a_epi16(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1, psi_a_p7_p1);
+    prodsum_psi_a_epi16(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1, psi_a_p7_m1);
+    prodsum_psi_a_epi16(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3, psi_a_p7_m3);
+    prodsum_psi_a_epi16(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5, psi_a_p7_m5);
+    prodsum_psi_a_epi16(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7, psi_a_p7_m7);
+    prodsum_psi_a_epi16(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7, psi_a_p5_p7);
+    prodsum_psi_a_epi16(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5, psi_a_p5_p5);
+    prodsum_psi_a_epi16(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3, psi_a_p5_p3);
+    prodsum_psi_a_epi16(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1, psi_a_p5_p1);
+    prodsum_psi_a_epi16(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1, psi_a_p5_m1);
+    prodsum_psi_a_epi16(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3, psi_a_p5_m3);
+    prodsum_psi_a_epi16(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5, psi_a_p5_m5);
+    prodsum_psi_a_epi16(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7, psi_a_p5_m7);
+    prodsum_psi_a_epi16(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7, psi_a_p3_p7);
+    prodsum_psi_a_epi16(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5, psi_a_p3_p5);
+    prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3, psi_a_p3_p3);
+    prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1, psi_a_p3_p1);
+    prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1, psi_a_p3_m1);
+    prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3, psi_a_p3_m3);
+    prodsum_psi_a_epi16(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5, psi_a_p3_m5);
+    prodsum_psi_a_epi16(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7, psi_a_p3_m7);
+    prodsum_psi_a_epi16(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7, psi_a_p1_p7);
+    prodsum_psi_a_epi16(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5, psi_a_p1_p5);
+    prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3, psi_a_p1_p3);
+    prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1);
+    prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1);
+    prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3, psi_a_p1_m3);
+    prodsum_psi_a_epi16(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5, psi_a_p1_m5);
+    prodsum_psi_a_epi16(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7, psi_a_p1_m7);
+    prodsum_psi_a_epi16(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7, psi_a_m1_p7);
+    prodsum_psi_a_epi16(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5, psi_a_m1_p5);
+    prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3, psi_a_m1_p3);
+    prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1);
+    prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1);
+    prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3, psi_a_m1_m3);
+    prodsum_psi_a_epi16(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5, psi_a_m1_m5);
+    prodsum_psi_a_epi16(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7, psi_a_m1_m7);
+    prodsum_psi_a_epi16(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7, psi_a_m3_p7);
+    prodsum_psi_a_epi16(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5, psi_a_m3_p5);
+    prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3, psi_a_m3_p3);
+    prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1, psi_a_m3_p1);
+    prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1, psi_a_m3_m1);
+    prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3, psi_a_m3_m3);
+    prodsum_psi_a_epi16(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5, psi_a_m3_m5);
+    prodsum_psi_a_epi16(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7, psi_a_m3_m7);
+    prodsum_psi_a_epi16(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7, psi_a_m5_p7);
+    prodsum_psi_a_epi16(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5, psi_a_m5_p5);
+    prodsum_psi_a_epi16(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3, psi_a_m5_p3);
+    prodsum_psi_a_epi16(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1, psi_a_m5_p1);
+    prodsum_psi_a_epi16(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1, psi_a_m5_m1);
+    prodsum_psi_a_epi16(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3, psi_a_m5_m3);
+    prodsum_psi_a_epi16(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5, psi_a_m5_m5);
+    prodsum_psi_a_epi16(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7, psi_a_m5_m7);
+    prodsum_psi_a_epi16(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7, psi_a_m7_p7);
+    prodsum_psi_a_epi16(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5, psi_a_m7_p5);
+    prodsum_psi_a_epi16(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3, psi_a_m7_p3);
+    prodsum_psi_a_epi16(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1, psi_a_m7_p1);
+    prodsum_psi_a_epi16(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1, psi_a_m7_m1);
+    prodsum_psi_a_epi16(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3, psi_a_m7_m3);
+    prodsum_psi_a_epi16(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5, psi_a_m7_m5);
+    prodsum_psi_a_epi16(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7, psi_a_m7_m7);
+
+    // Multiply by sqrt(2)
+    psi_a_p7_p7 = _mm256_mulhi_epi16(psi_a_p7_p7, ONE_OVER_SQRT_2);
+    psi_a_p7_p7 = _mm256_slli_epi16(psi_a_p7_p7, 2);
+    psi_a_p7_p5 = _mm256_mulhi_epi16(psi_a_p7_p5, ONE_OVER_SQRT_2);
+    psi_a_p7_p5 = _mm256_slli_epi16(psi_a_p7_p5, 2);
+    psi_a_p7_p3 = _mm256_mulhi_epi16(psi_a_p7_p3, ONE_OVER_SQRT_2);
+    psi_a_p7_p3 = _mm256_slli_epi16(psi_a_p7_p3, 2);
+    psi_a_p7_p1 = _mm256_mulhi_epi16(psi_a_p7_p1, ONE_OVER_SQRT_2);
+    psi_a_p7_p1 = _mm256_slli_epi16(psi_a_p7_p1, 2);
+    psi_a_p7_m1 = _mm256_mulhi_epi16(psi_a_p7_m1, ONE_OVER_SQRT_2);
+    psi_a_p7_m1 = _mm256_slli_epi16(psi_a_p7_m1, 2);
+    psi_a_p7_m3 = _mm256_mulhi_epi16(psi_a_p7_m3, ONE_OVER_SQRT_2);
+    psi_a_p7_m3 = _mm256_slli_epi16(psi_a_p7_m3, 2);
+    psi_a_p7_m5 = _mm256_mulhi_epi16(psi_a_p7_m5, ONE_OVER_SQRT_2);
+    psi_a_p7_m5 = _mm256_slli_epi16(psi_a_p7_m5, 2);
+    psi_a_p7_m7 = _mm256_mulhi_epi16(psi_a_p7_m7, ONE_OVER_SQRT_2);
+    psi_a_p7_m7 = _mm256_slli_epi16(psi_a_p7_m7, 2);
+    psi_a_p5_p7 = _mm256_mulhi_epi16(psi_a_p5_p7, ONE_OVER_SQRT_2);
+    psi_a_p5_p7 = _mm256_slli_epi16(psi_a_p5_p7, 2);
+    psi_a_p5_p5 = _mm256_mulhi_epi16(psi_a_p5_p5, ONE_OVER_SQRT_2);
+    psi_a_p5_p5 = _mm256_slli_epi16(psi_a_p5_p5, 2);
+    psi_a_p5_p3 = _mm256_mulhi_epi16(psi_a_p5_p3, ONE_OVER_SQRT_2);
+    psi_a_p5_p3 = _mm256_slli_epi16(psi_a_p5_p3, 2);
+    psi_a_p5_p1 = _mm256_mulhi_epi16(psi_a_p5_p1, ONE_OVER_SQRT_2);
+    psi_a_p5_p1 = _mm256_slli_epi16(psi_a_p5_p1, 2);
+    psi_a_p5_m1 = _mm256_mulhi_epi16(psi_a_p5_m1, ONE_OVER_SQRT_2);
+    psi_a_p5_m1 = _mm256_slli_epi16(psi_a_p5_m1, 2);
+    psi_a_p5_m3 = _mm256_mulhi_epi16(psi_a_p5_m3, ONE_OVER_SQRT_2);
+    psi_a_p5_m3 = _mm256_slli_epi16(psi_a_p5_m3, 2);
+    psi_a_p5_m5 = _mm256_mulhi_epi16(psi_a_p5_m5, ONE_OVER_SQRT_2);
+    psi_a_p5_m5 = _mm256_slli_epi16(psi_a_p5_m5, 2);
+    psi_a_p5_m7 = _mm256_mulhi_epi16(psi_a_p5_m7, ONE_OVER_SQRT_2);
+    psi_a_p5_m7 = _mm256_slli_epi16(psi_a_p5_m7, 2);
+    psi_a_p3_p7 = _mm256_mulhi_epi16(psi_a_p3_p7, ONE_OVER_SQRT_2);
+    psi_a_p3_p7 = _mm256_slli_epi16(psi_a_p3_p7, 2);
+    psi_a_p3_p5 = _mm256_mulhi_epi16(psi_a_p3_p5, ONE_OVER_SQRT_2);
+    psi_a_p3_p5 = _mm256_slli_epi16(psi_a_p3_p5, 2);
+    psi_a_p3_p3 = _mm256_mulhi_epi16(psi_a_p3_p3, ONE_OVER_SQRT_2);
+    psi_a_p3_p3 = _mm256_slli_epi16(psi_a_p3_p3, 2);
+    psi_a_p3_p1 = _mm256_mulhi_epi16(psi_a_p3_p1, ONE_OVER_SQRT_2);
+    psi_a_p3_p1 = _mm256_slli_epi16(psi_a_p3_p1, 2);
+    psi_a_p3_m1 = _mm256_mulhi_epi16(psi_a_p3_m1, ONE_OVER_SQRT_2);
+    psi_a_p3_m1 = _mm256_slli_epi16(psi_a_p3_m1, 2);
+    psi_a_p3_m3 = _mm256_mulhi_epi16(psi_a_p3_m3, ONE_OVER_SQRT_2);
+    psi_a_p3_m3 = _mm256_slli_epi16(psi_a_p3_m3, 2);
+    psi_a_p3_m5 = _mm256_mulhi_epi16(psi_a_p3_m5, ONE_OVER_SQRT_2);
+    psi_a_p3_m5 = _mm256_slli_epi16(psi_a_p3_m5, 2);
+    psi_a_p3_m7 = _mm256_mulhi_epi16(psi_a_p3_m7, ONE_OVER_SQRT_2);
+    psi_a_p3_m7 = _mm256_slli_epi16(psi_a_p3_m7, 2);
+    psi_a_p1_p7 = _mm256_mulhi_epi16(psi_a_p1_p7, ONE_OVER_SQRT_2);
+    psi_a_p1_p7 = _mm256_slli_epi16(psi_a_p1_p7, 2);
+    psi_a_p1_p5 = _mm256_mulhi_epi16(psi_a_p1_p5, ONE_OVER_SQRT_2);
+    psi_a_p1_p5 = _mm256_slli_epi16(psi_a_p1_p5, 2);
+    psi_a_p1_p3 = _mm256_mulhi_epi16(psi_a_p1_p3, ONE_OVER_SQRT_2);
+    psi_a_p1_p3 = _mm256_slli_epi16(psi_a_p1_p3, 2);
+    psi_a_p1_p1 = _mm256_mulhi_epi16(psi_a_p1_p1, ONE_OVER_SQRT_2);
+    psi_a_p1_p1 = _mm256_slli_epi16(psi_a_p1_p1, 2);
+    psi_a_p1_m1 = _mm256_mulhi_epi16(psi_a_p1_m1, ONE_OVER_SQRT_2);
+    psi_a_p1_m1 = _mm256_slli_epi16(psi_a_p1_m1, 2);
+    psi_a_p1_m3 = _mm256_mulhi_epi16(psi_a_p1_m3, ONE_OVER_SQRT_2);
+    psi_a_p1_m3 = _mm256_slli_epi16(psi_a_p1_m3, 2);
+    psi_a_p1_m5 = _mm256_mulhi_epi16(psi_a_p1_m5, ONE_OVER_SQRT_2);
+    psi_a_p1_m5 = _mm256_slli_epi16(psi_a_p1_m5, 2);
+    psi_a_p1_m7 = _mm256_mulhi_epi16(psi_a_p1_m7, ONE_OVER_SQRT_2);
+    psi_a_p1_m7 = _mm256_slli_epi16(psi_a_p1_m7, 2);
+    psi_a_m1_p7 = _mm256_mulhi_epi16(psi_a_m1_p7, ONE_OVER_SQRT_2);
+    psi_a_m1_p7 = _mm256_slli_epi16(psi_a_m1_p7, 2);
+    psi_a_m1_p5 = _mm256_mulhi_epi16(psi_a_m1_p5, ONE_OVER_SQRT_2);
+    psi_a_m1_p5 = _mm256_slli_epi16(psi_a_m1_p5, 2);
+    psi_a_m1_p3 = _mm256_mulhi_epi16(psi_a_m1_p3, ONE_OVER_SQRT_2);
+    psi_a_m1_p3 = _mm256_slli_epi16(psi_a_m1_p3, 2);
+    psi_a_m1_p1 = _mm256_mulhi_epi16(psi_a_m1_p1, ONE_OVER_SQRT_2);
+    psi_a_m1_p1 = _mm256_slli_epi16(psi_a_m1_p1, 2);
+    psi_a_m1_m1 = _mm256_mulhi_epi16(psi_a_m1_m1, ONE_OVER_SQRT_2);
+    psi_a_m1_m1 = _mm256_slli_epi16(psi_a_m1_m1, 2);
+    psi_a_m1_m3 = _mm256_mulhi_epi16(psi_a_m1_m3, ONE_OVER_SQRT_2);
+    psi_a_m1_m3 = _mm256_slli_epi16(psi_a_m1_m3, 2);
+    psi_a_m1_m5 = _mm256_mulhi_epi16(psi_a_m1_m5, ONE_OVER_SQRT_2);
+    psi_a_m1_m5 = _mm256_slli_epi16(psi_a_m1_m5, 2);
+    psi_a_m1_m7 = _mm256_mulhi_epi16(psi_a_m1_m7, ONE_OVER_SQRT_2);
+    psi_a_m1_m7 = _mm256_slli_epi16(psi_a_m1_m7, 2);
+    psi_a_m3_p7 = _mm256_mulhi_epi16(psi_a_m3_p7, ONE_OVER_SQRT_2);
+    psi_a_m3_p7 = _mm256_slli_epi16(psi_a_m3_p7, 2);
+    psi_a_m3_p5 = _mm256_mulhi_epi16(psi_a_m3_p5, ONE_OVER_SQRT_2);
+    psi_a_m3_p5 = _mm256_slli_epi16(psi_a_m3_p5, 2);
+    psi_a_m3_p3 = _mm256_mulhi_epi16(psi_a_m3_p3, ONE_OVER_SQRT_2);
+    psi_a_m3_p3 = _mm256_slli_epi16(psi_a_m3_p3, 2);
+    psi_a_m3_p1 = _mm256_mulhi_epi16(psi_a_m3_p1, ONE_OVER_SQRT_2);
+    psi_a_m3_p1 = _mm256_slli_epi16(psi_a_m3_p1, 2);
+    psi_a_m3_m1 = _mm256_mulhi_epi16(psi_a_m3_m1, ONE_OVER_SQRT_2);
+    psi_a_m3_m1 = _mm256_slli_epi16(psi_a_m3_m1, 2);
+    psi_a_m3_m3 = _mm256_mulhi_epi16(psi_a_m3_m3, ONE_OVER_SQRT_2);
+    psi_a_m3_m3 = _mm256_slli_epi16(psi_a_m3_m3, 2);
+    psi_a_m3_m5 = _mm256_mulhi_epi16(psi_a_m3_m5, ONE_OVER_SQRT_2);
+    psi_a_m3_m5 = _mm256_slli_epi16(psi_a_m3_m5, 2);
+    psi_a_m3_m7 = _mm256_mulhi_epi16(psi_a_m3_m7, ONE_OVER_SQRT_2);
+    psi_a_m3_m7 = _mm256_slli_epi16(psi_a_m3_m7, 2);
+    psi_a_m5_p7 = _mm256_mulhi_epi16(psi_a_m5_p7, ONE_OVER_SQRT_2);
+    psi_a_m5_p7 = _mm256_slli_epi16(psi_a_m5_p7, 2);
+    psi_a_m5_p5 = _mm256_mulhi_epi16(psi_a_m5_p5, ONE_OVER_SQRT_2);
+    psi_a_m5_p5 = _mm256_slli_epi16(psi_a_m5_p5, 2);
+    psi_a_m5_p3 = _mm256_mulhi_epi16(psi_a_m5_p3, ONE_OVER_SQRT_2);
+    psi_a_m5_p3 = _mm256_slli_epi16(psi_a_m5_p3, 2);
+    psi_a_m5_p1 = _mm256_mulhi_epi16(psi_a_m5_p1, ONE_OVER_SQRT_2);
+    psi_a_m5_p1 = _mm256_slli_epi16(psi_a_m5_p1, 2);
+    psi_a_m5_m1 = _mm256_mulhi_epi16(psi_a_m5_m1, ONE_OVER_SQRT_2);
+    psi_a_m5_m1 = _mm256_slli_epi16(psi_a_m5_m1, 2);
+    psi_a_m5_m3 = _mm256_mulhi_epi16(psi_a_m5_m3, ONE_OVER_SQRT_2);
+    psi_a_m5_m3 = _mm256_slli_epi16(psi_a_m5_m3, 2);
+    psi_a_m5_m5 = _mm256_mulhi_epi16(psi_a_m5_m5, ONE_OVER_SQRT_2);
+    psi_a_m5_m5 = _mm256_slli_epi16(psi_a_m5_m5, 2);
+    psi_a_m5_m7 = _mm256_mulhi_epi16(psi_a_m5_m7, ONE_OVER_SQRT_2);
+    psi_a_m5_m7 = _mm256_slli_epi16(psi_a_m5_m7, 2);
+    psi_a_m7_p7 = _mm256_mulhi_epi16(psi_a_m7_p7, ONE_OVER_SQRT_2);
+    psi_a_m7_p7 = _mm256_slli_epi16(psi_a_m7_p7, 2);
+    psi_a_m7_p5 = _mm256_mulhi_epi16(psi_a_m7_p5, ONE_OVER_SQRT_2);
+    psi_a_m7_p5 = _mm256_slli_epi16(psi_a_m7_p5, 2);
+    psi_a_m7_p3 = _mm256_mulhi_epi16(psi_a_m7_p3, ONE_OVER_SQRT_2);
+    psi_a_m7_p3 = _mm256_slli_epi16(psi_a_m7_p3, 2);
+    psi_a_m7_p1 = _mm256_mulhi_epi16(psi_a_m7_p1, ONE_OVER_SQRT_2);
+    psi_a_m7_p1 = _mm256_slli_epi16(psi_a_m7_p1, 2);
+    psi_a_m7_m1 = _mm256_mulhi_epi16(psi_a_m7_m1, ONE_OVER_SQRT_2);
+    psi_a_m7_m1 = _mm256_slli_epi16(psi_a_m7_m1, 2);
+    psi_a_m7_m3 = _mm256_mulhi_epi16(psi_a_m7_m3, ONE_OVER_SQRT_2);
+    psi_a_m7_m3 = _mm256_slli_epi16(psi_a_m7_m3, 2);
+    psi_a_m7_m5 = _mm256_mulhi_epi16(psi_a_m7_m5, ONE_OVER_SQRT_2);
+    psi_a_m7_m5 = _mm256_slli_epi16(psi_a_m7_m5, 2);
+    psi_a_m7_m7 = _mm256_mulhi_epi16(psi_a_m7_m7, ONE_OVER_SQRT_2);
+    psi_a_m7_m7 = _mm256_slli_epi16(psi_a_m7_m7, 2);
+
+    // Calculation of a group of two terms in the bit metric involving squares of interference
+    square_a_64qam_epi16(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p7);
+    square_a_64qam_epi16(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p5);
+    square_a_64qam_epi16(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p3);
+    square_a_64qam_epi16(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p1);
+    square_a_64qam_epi16(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m1);
+    square_a_64qam_epi16(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m3);
+    square_a_64qam_epi16(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m5);
+    square_a_64qam_epi16(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m7);
+    square_a_64qam_epi16(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p7);
+    square_a_64qam_epi16(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p5);
+    square_a_64qam_epi16(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p3);
+    square_a_64qam_epi16(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p1);
+    square_a_64qam_epi16(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m1);
+    square_a_64qam_epi16(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m3);
+    square_a_64qam_epi16(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m5);
+    square_a_64qam_epi16(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m7);
+    square_a_64qam_epi16(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p7);
+    square_a_64qam_epi16(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p5);
+    square_a_64qam_epi16(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p3);
+    square_a_64qam_epi16(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p1);
+    square_a_64qam_epi16(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m1);
+    square_a_64qam_epi16(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m3);
+    square_a_64qam_epi16(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m5);
+    square_a_64qam_epi16(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m7);
+    square_a_64qam_epi16(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p7);
+    square_a_64qam_epi16(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p5);
+    square_a_64qam_epi16(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p3);
+    square_a_64qam_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p1);
+    square_a_64qam_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m1);
+    square_a_64qam_epi16(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m3);
+    square_a_64qam_epi16(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m5);
+    square_a_64qam_epi16(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m7);
+    square_a_64qam_epi16(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p7);
+    square_a_64qam_epi16(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p5);
+    square_a_64qam_epi16(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p3);
+    square_a_64qam_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p1);
+    square_a_64qam_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m1);
+    square_a_64qam_epi16(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m3);
+    square_a_64qam_epi16(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m5);
+    square_a_64qam_epi16(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m7);
+    square_a_64qam_epi16(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p7);
+    square_a_64qam_epi16(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p5);
+    square_a_64qam_epi16(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p3);
+    square_a_64qam_epi16(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p1);
+    square_a_64qam_epi16(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m1);
+    square_a_64qam_epi16(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m3);
+    square_a_64qam_epi16(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m5);
+    square_a_64qam_epi16(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m7);
+    square_a_64qam_epi16(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p7);
+    square_a_64qam_epi16(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p5);
+    square_a_64qam_epi16(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p3);
+    square_a_64qam_epi16(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p1);
+    square_a_64qam_epi16(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m1);
+    square_a_64qam_epi16(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m3);
+    square_a_64qam_epi16(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m5);
+    square_a_64qam_epi16(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m7);
+    square_a_64qam_epi16(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p7);
+    square_a_64qam_epi16(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p5);
+    square_a_64qam_epi16(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p3);
+    square_a_64qam_epi16(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p1);
+    square_a_64qam_epi16(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m1);
+    square_a_64qam_epi16(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m3);
+    square_a_64qam_epi16(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m5);
+    square_a_64qam_epi16(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m7);
+
+    // Computing different multiples of ||h0||^2
+    // x=1, y=1
+    ch_mag_2_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,ONE_OVER_FOUR_SQRT_42);
+    ch_mag_2_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_2_over_42_with_sigma2,1);
+    // x=1, y=3
+    ch_mag_10_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,FIVE_OVER_FOUR_SQRT_42);
+    ch_mag_10_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_10_over_42_with_sigma2,1);
+    // x=1, x=5
+    ch_mag_26_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,THIRTEEN_OVER_FOUR_SQRT_42);
+    ch_mag_26_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_26_over_42_with_sigma2,1);
+    // x=1, y=7
+    ch_mag_50_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42);
+    ch_mag_50_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_50_over_42_with_sigma2,1);
+    // x=3, y=3
+    ch_mag_18_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,NINE_OVER_FOUR_SQRT_42);
+    ch_mag_18_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_18_over_42_with_sigma2,1);
+    // x=3, y=5
+    ch_mag_34_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,SEVENTEEN_OVER_FOUR_SQRT_42);
+    ch_mag_34_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_34_over_42_with_sigma2,1);
+    // x=3, y=7
+    ch_mag_58_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYNINE_OVER_FOUR_SQRT_42);
+    ch_mag_58_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_58_over_42_with_sigma2,2);
+    // x=5, y=5
+    ch_mag_50_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42);
+    ch_mag_50_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_50_over_42_with_sigma2,1);
+    // x=5, y=7
+    ch_mag_74_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,THIRTYSEVEN_OVER_FOUR_SQRT_42);
+    ch_mag_74_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_74_over_42_with_sigma2,2);
+    // x=7, y=7
+    ch_mag_98_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,FORTYNINE_OVER_FOUR_SQRT_42);
+    ch_mag_98_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_98_over_42_with_sigma2,2);
+
+    // Computing Metrics
+    xmm0 = _mm256_subs_epi16(psi_a_p7_p7, a_sq_p7_p7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_7);
+    bit_met_p7_p7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p7_p5, a_sq_p7_p5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_5);
+    bit_met_p7_p5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p7_p3, a_sq_p7_p3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_3);
+    bit_met_p7_p3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p7_p1, a_sq_p7_p1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_1);
+    bit_met_p7_p1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p7_m1, a_sq_p7_m1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_1);
+    bit_met_p7_m1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p7_m3, a_sq_p7_m3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_3);
+    bit_met_p7_m3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p7_m5, a_sq_p7_m5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_5);
+    bit_met_p7_m5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p7_m7, a_sq_p7_m7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_7);
+    bit_met_p7_m7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_p7, a_sq_p5_p7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_7);
+    bit_met_p5_p7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_p5, a_sq_p5_p5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_5);
+    bit_met_p5_p5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_p3, a_sq_p5_p3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_3);
+    bit_met_p5_p3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_p1, a_sq_p5_p1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_1);
+    bit_met_p5_p1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_m1, a_sq_p5_m1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_1);
+    bit_met_p5_m1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_m3, a_sq_p5_m3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_3);
+    bit_met_p5_m3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_m5, a_sq_p5_m5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_5);
+    bit_met_p5_m5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p5_m7, a_sq_p5_m7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_7);
+    bit_met_p5_m7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_p7, a_sq_p3_p7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_7);
+    bit_met_p3_p7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_p5, a_sq_p3_p5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_5);
+    bit_met_p3_p5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_p3, a_sq_p3_p3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_3);
+    bit_met_p3_p3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_p1, a_sq_p3_p1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_1);
+    bit_met_p3_p1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_m1, a_sq_p3_m1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_1);
+    bit_met_p3_m1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_m3, a_sq_p3_m3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_3);
+    bit_met_p3_m3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_m5, a_sq_p3_m5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_5);
+    bit_met_p3_m5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p3_m7, a_sq_p3_m7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_7);
+    bit_met_p3_m7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_p7, a_sq_p1_p7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_7);
+    bit_met_p1_p7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_p5, a_sq_p1_p5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_5);
+    bit_met_p1_p5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_p3, a_sq_p1_p3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_3);
+    bit_met_p1_p3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_p1, a_sq_p1_p1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_1);
+    bit_met_p1_p1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_m1, a_sq_p1_m1);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_1);
+    bit_met_p1_m1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_m3, a_sq_p1_m3);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_3);
+    bit_met_p1_m3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_m5, a_sq_p1_m5);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_5);
+    bit_met_p1_m5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_p1_m7, a_sq_p1_m7);
+    xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_7);
+    bit_met_p1_m7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+
+    xmm0 = _mm256_subs_epi16(psi_a_m1_p7, a_sq_m1_p7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_7);
+    bit_met_m1_p7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m1_p5, a_sq_m1_p5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_5);
+    bit_met_m1_p5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m1_p3, a_sq_m1_p3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_3);
+    bit_met_m1_p3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m1_p1, a_sq_m1_p1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_1);
+    bit_met_m1_p1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m1_m1, a_sq_m1_m1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_1);
+    bit_met_m1_m1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m1_m3, a_sq_m1_m3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_3);
+    bit_met_m1_m3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m1_m5, a_sq_m1_m5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_5);
+    bit_met_m1_m5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m1_m7, a_sq_m1_m7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_7);
+    bit_met_m1_m7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_p7, a_sq_m3_p7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_7);
+    bit_met_m3_p7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_p5, a_sq_m3_p5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_5);
+    bit_met_m3_p5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_p3, a_sq_m3_p3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_3);
+    bit_met_m3_p3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_p1, a_sq_m3_p1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_1);
+    bit_met_m3_p1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_m1, a_sq_m3_m1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_1);
+    bit_met_m3_m1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_m3, a_sq_m3_m3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_3);
+    bit_met_m3_m3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_m5, a_sq_m3_m5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_5);
+    bit_met_m3_m5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m3_m7, a_sq_m3_m7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_7);
+    bit_met_m3_m7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_p7, a_sq_m5_p7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_7);
+    bit_met_m5_p7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_p5, a_sq_m5_p5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_5);
+    bit_met_m5_p5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_p3, a_sq_m5_p3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_3);
+    bit_met_m5_p3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_p1, a_sq_m5_p1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_1);
+    bit_met_m5_p1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_m1, a_sq_m5_m1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_1);
+    bit_met_m5_m1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_m3, a_sq_m5_m3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_3);
+    bit_met_m5_m3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_m5, a_sq_m5_m5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_5);
+    bit_met_m5_m5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m5_m7, a_sq_m5_m7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_7);
+    bit_met_m5_m7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_p7, a_sq_m7_p7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_7);
+    bit_met_m7_p7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_p5, a_sq_m7_p5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_5);
+    bit_met_m7_p5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_p3, a_sq_m7_p3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_3);
+    bit_met_m7_p3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_p1, a_sq_m7_p1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_1);
+    bit_met_m7_p1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_m1, a_sq_m7_m1);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_1);
+    bit_met_m7_m1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_m3, a_sq_m7_m3);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_3);
+    bit_met_m7_m3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_m5, a_sq_m7_m5);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_5);
+    bit_met_m7_m5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2);
+    xmm0 = _mm256_subs_epi16(psi_a_m7_m7, a_sq_m7_m7);
+    xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_7);
+    bit_met_m7_m7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2);
+
+    // Detection for 1st bit (LTE mapping)
+    // bit = 1
+    xmm0 = _mm256_max_epi16(bit_met_m7_p7, bit_met_m7_p5);
+    xmm1 = _mm256_max_epi16(bit_met_m7_p3, bit_met_m7_p1);
+    xmm2 = _mm256_max_epi16(bit_met_m7_m1, bit_met_m7_m3);
+    xmm3 = _mm256_max_epi16(bit_met_m7_m5, bit_met_m7_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m5_p5);
+    xmm1 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m5_p1);
+    xmm2 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m5_m3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m5_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_m3_p7, bit_met_m3_p5);
+    xmm1 = _mm256_max_epi16(bit_met_m3_p3, bit_met_m3_p1);
+    xmm2 = _mm256_max_epi16(bit_met_m3_m1, bit_met_m3_m3);
+    xmm3 = _mm256_max_epi16(bit_met_m3_m5, bit_met_m3_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m1_p5);
+    xmm1 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m1_p1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m1_m3);
+    xmm3 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m1_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+
+    // bit = 0
+    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p7_p5);
+    xmm1 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p7_p1);
+    xmm2 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p7_m3);
+    xmm3 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p7_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p5_p7, bit_met_p5_p5);
+    xmm1 = _mm256_max_epi16(bit_met_p5_p3, bit_met_p5_p1);
+    xmm2 = _mm256_max_epi16(bit_met_p5_m1, bit_met_p5_m3);
+    xmm3 = _mm256_max_epi16(bit_met_p5_m5, bit_met_p5_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p3_p5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p3_p1);
+    xmm2 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p3_m3);
+    xmm3 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p3_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p1_p7, bit_met_p1_p5);
+    xmm1 = _mm256_max_epi16(bit_met_p1_p3, bit_met_p1_p1);
+    xmm2 = _mm256_max_epi16(bit_met_p1_m1, bit_met_p1_m3);
+    xmm3 = _mm256_max_epi16(bit_met_p1_m5, bit_met_p1_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+
+    y0r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
+
+    // Detection for 2nd bit (LTE mapping)
+    // bit = 1
+    xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+
+    // bit = 0
+    xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m7_p5);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+
+    y1r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
+
+    // Detection for 3rd bit (LTE mapping)
+    xmm0 = _mm256_max_epi16(bit_met_m7_m7, bit_met_m7_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m7_m3, bit_met_m7_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m7_p1, bit_met_m7_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m7_p5, bit_met_m7_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m5_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m5_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p5_m7, bit_met_p5_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p5_m3, bit_met_p5_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p5_p1, bit_met_p5_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p5_p5, bit_met_p5_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p7_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p7_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p7_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p7_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+
+    xmm0 = _mm256_max_epi16(bit_met_m3_m7, bit_met_m3_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m3_m3, bit_met_m3_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m3_p1, bit_met_m3_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m3_p5, bit_met_m3_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m1_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m1_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m1_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m1_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p1_m7, bit_met_p1_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p1_m3, bit_met_p1_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p1_p1, bit_met_p1_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p1_p5, bit_met_p1_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p3_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p3_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p3_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p3_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+
+    y2r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
+
+    // Detection for 4th bit (LTE mapping)
+    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p5);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+
+    xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+
+    y0i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
+
+
+    // Detection for 5th bit (LTE mapping)
+    xmm0 = _mm256_max_epi16(bit_met_m7_m7, bit_met_m7_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m7_m3, bit_met_m7_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m7_p1, bit_met_m7_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m7_p5, bit_met_m7_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m1_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m1_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m1_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m1_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p1_m7, bit_met_p1_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p1_m3, bit_met_p1_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p1_p1, bit_met_p1_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p1_p5, bit_met_p1_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p7_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p7_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p7_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p7_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+
+    xmm0 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m5_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m5_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_m3_m7, bit_met_m3_m5);
+    xmm1 = _mm256_max_epi16(bit_met_m3_m3, bit_met_m3_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m3_p1, bit_met_m3_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m3_p5, bit_met_m3_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p3_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p3_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p3_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p3_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p5_m7, bit_met_p5_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p5_m3, bit_met_p5_m1);
+    xmm2 = _mm256_max_epi16(bit_met_p5_p1, bit_met_p5_p3);
+    xmm3 = _mm256_max_epi16(bit_met_p5_p5, bit_met_p5_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+
+    y1i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
+
+    // Detection for 6th bit (LTE mapping)
+    xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p1);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4);
+    logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5);
+
+    xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3);
+    xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3);
+    xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+    xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5);
+    xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5);
+    xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5);
+    xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m7_p5);
+    xmm4 = _mm256_max_epi16(xmm0, xmm1);
+    xmm5 = _mm256_max_epi16(xmm2, xmm3);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4);
+    logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5);
+
+    y2i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0);
+
+    // map to output stream, difficult to do in SIMD since we have 6 16bit LLRs
+    // RE 1
+    j = 48*i;
+    stream0_out[j + 0] = ((short *)&y0r)[0];
+    stream0_out[j + 1] = ((short *)&y1r)[0];
+    stream0_out[j + 2] = ((short *)&y2r)[0];
+    stream0_out[j + 3] = ((short *)&y0i)[0];
+    stream0_out[j + 4] = ((short *)&y1i)[0];
+    stream0_out[j + 5] = ((short *)&y2i)[0];
+    // RE 2
+    stream0_out[j + 6] = ((short *)&y0r)[1];
+    stream0_out[j + 7] = ((short *)&y1r)[1];
+    stream0_out[j + 8] = ((short *)&y2r)[1];
+    stream0_out[j + 9] = ((short *)&y0i)[1];
+    stream0_out[j + 10] = ((short *)&y1i)[1];
+    stream0_out[j + 11] = ((short *)&y2i)[1];
+    // RE 3
+    stream0_out[j + 12] = ((short *)&y0r)[2];
+    stream0_out[j + 13] = ((short *)&y1r)[2];
+    stream0_out[j + 14] = ((short *)&y2r)[2];
+    stream0_out[j + 15] = ((short *)&y0i)[2];
+    stream0_out[j + 16] = ((short *)&y1i)[2];
+    stream0_out[j + 17] = ((short *)&y2i)[2];
+    // RE 4
+    stream0_out[j + 18] = ((short *)&y0r)[3];
+    stream0_out[j + 19] = ((short *)&y1r)[3];
+    stream0_out[j + 20] = ((short *)&y2r)[3];
+    stream0_out[j + 21] = ((short *)&y0i)[3];
+    stream0_out[j + 22] = ((short *)&y1i)[3];
+    stream0_out[j + 23] = ((short *)&y2i)[3];
+    // RE 5
+    stream0_out[j + 24] = ((short *)&y0r)[4];
+    stream0_out[j + 25] = ((short *)&y1r)[4];
+    stream0_out[j + 26] = ((short *)&y2r)[4];
+    stream0_out[j + 27] = ((short *)&y0i)[4];
+    stream0_out[j + 28] = ((short *)&y1i)[4];
+    stream0_out[j + 29] = ((short *)&y2i)[4];
+    // RE 6
+    stream0_out[j + 30] = ((short *)&y0r)[5];
+    stream0_out[j + 31] = ((short *)&y1r)[5];
+    stream0_out[j + 32] = ((short *)&y2r)[5];
+    stream0_out[j + 33] = ((short *)&y0i)[5];
+    stream0_out[j + 34] = ((short *)&y1i)[5];
+    stream0_out[j + 35] = ((short *)&y2i)[5];
+    // RE 7
+    stream0_out[j + 36] = ((short *)&y0r)[6];
+    stream0_out[j + 37] = ((short *)&y1r)[6];
+    stream0_out[j + 38] = ((short *)&y2r)[6];
+    stream0_out[j + 39] = ((short *)&y0i)[6];
+    stream0_out[j + 40] = ((short *)&y1i)[6];
+    stream0_out[j + 41] = ((short *)&y2i)[6];
+    // RE 8
+    stream0_out[j + 42] = ((short *)&y0r)[7];
+    stream0_out[j + 43] = ((short *)&y1r)[7];
+    stream0_out[j + 44] = ((short *)&y2r)[7];
+    stream0_out[j + 45] = ((short *)&y0i)[7];
+    stream0_out[j + 46] = ((short *)&y1i)[7];
+    stream0_out[j + 47] = ((short *)&y2i)[7];
+
+    // RE 9
+    stream0_out[j + 48] = ((short *)&y0r)[8];
+    stream0_out[j + 49] = ((short *)&y1r)[8];
+    stream0_out[j + 50] = ((short *)&y2r)[8];
+    stream0_out[j + 51] = ((short *)&y0i)[8];
+    stream0_out[j + 52] = ((short *)&y1i)[8];
+    stream0_out[j + 53] = ((short *)&y2i)[8];
+    // RE 10
+    stream0_out[j + 54] = ((short *)&y0r)[9];
+    stream0_out[j + 55] = ((short *)&y1r)[9];
+    stream0_out[j + 56] = ((short *)&y2r)[9];
+    stream0_out[j + 57] = ((short *)&y0i)[9];
+    stream0_out[j + 58] = ((short *)&y1i)[9];
+    stream0_out[j + 59] = ((short *)&y2i)[9];
+    // RE 11
+    stream0_out[j + 60] = ((short *)&y0r)[10];
+    stream0_out[j + 61] = ((short *)&y1r)[10];
+    stream0_out[j + 62] = ((short *)&y2r)[10];
+    stream0_out[j + 63] = ((short *)&y0i)[10];
+    stream0_out[j + 64] = ((short *)&y1i)[10];
+    stream0_out[j + 65] = ((short *)&y2i)[10];
+    // RE 12
+    stream0_out[j + 66] = ((short *)&y0r)[11];
+    stream0_out[j + 67] = ((short *)&y1r)[11];
+    stream0_out[j + 68] = ((short *)&y2r)[11];
+    stream0_out[j + 69] = ((short *)&y0i)[11];
+    stream0_out[j + 70] = ((short *)&y1i)[11];
+    stream0_out[j + 71] = ((short *)&y2i)[11];
+    // RE 13
+    stream0_out[j + 72] = ((short *)&y0r)[12];
+    stream0_out[j + 73] = ((short *)&y1r)[12];
+    stream0_out[j + 74] = ((short *)&y2r)[12];
+    stream0_out[j + 75] = ((short *)&y0i)[12];
+    stream0_out[j + 76] = ((short *)&y1i)[12];
+    stream0_out[j + 77] = ((short *)&y2i)[12];
+    // RE 14
+    stream0_out[j + 78] = ((short *)&y0r)[13];
+    stream0_out[j + 79] = ((short *)&y1r)[13];
+    stream0_out[j + 80] = ((short *)&y2r)[13];
+    stream0_out[j + 81] = ((short *)&y0i)[13];
+    stream0_out[j + 82] = ((short *)&y1i)[13];
+    stream0_out[j + 83] = ((short *)&y2i)[13];
+    // RE 15
+    stream0_out[j + 84] = ((short *)&y0r)[14];
+    stream0_out[j + 85] = ((short *)&y1r)[14];
+    stream0_out[j + 86] = ((short *)&y2r)[14];
+    stream0_out[j + 87] = ((short *)&y0i)[14];
+    stream0_out[j + 88] = ((short *)&y1i)[14];
+    stream0_out[j + 89] = ((short *)&y2i)[14];
+    // RE 16
+    stream0_out[j + 90] = ((short *)&y0r)[15];
+    stream0_out[j + 91] = ((short *)&y1r)[15];
+    stream0_out[j + 92] = ((short *)&y2r)[15];
+    stream0_out[j + 93] = ((short *)&y0i)[15];
+    stream0_out[j + 94] = ((short *)&y1i)[15];
+    stream0_out[j + 95] = ((short *)&y2i)[15];
+
+#elif defined(__arm__)
+
+#endif
+
+  }
+
+#if defined(__x86_64__) || defined(__i386__)
+  _mm_empty();
+  _m_empty();
+#endif
+}
diff --git a/openair1/PHY/LTE_TRANSPORT/phich.c b/openair1/PHY/LTE_TRANSPORT/phich.c
index df789cd174bf09d42148df583952822069cc6d60..d363d4dcf65faf9312a1dc70357f45eab7f5f6a8 100644
--- a/openair1/PHY/LTE_TRANSPORT/phich.c
+++ b/openair1/PHY/LTE_TRANSPORT/phich.c
@@ -1067,7 +1067,7 @@ void rx_phich(PHY_VARS_UE *ue,
 
 
   LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
-  LTE_UE_PDCCH **pdcch_vars = ue->pdcch_vars;
+  LTE_UE_PDCCH **pdcch_vars = &ue->pdcch_vars[subframe & 0x1][eNB_id];
 
   //  uint8_t HI;
   uint8_t harq_pid = phich_subframe_to_harq_pid(frame_parms,proc->frame_rx,subframe);
diff --git a/openair1/PHY/LTE_TRANSPORT/print_stats.c b/openair1/PHY/LTE_TRANSPORT/print_stats.c
index c8d4292e8d03c8866f6a053ce1c7a45d37b591ad..0bebff8c353c2bab20cb469e49105a9a657bb10b 100644
--- a/openair1/PHY/LTE_TRANSPORT/print_stats.c
+++ b/openair1/PHY/LTE_TRANSPORT/print_stats.c
@@ -59,7 +59,7 @@ int dump_ue_stats(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,char* buffer, int length
     return 0;
 
   if ((mode == normal_txrx) || (mode == no_L2_connect)) {
-    len += sprintf(&buffer[len], "[UE_PROC] UE %d, RNTI %x\n",ue->Mod_id, ue->pdcch_vars[0]->crnti);
+    len += sprintf(&buffer[len], "[UE_PROC] UE %d, RNTI %x\n",ue->Mod_id, ue->pdcch_vars[0][0]->crnti);
      len += sprintf(&buffer[len],"[UE PROC] RSRP[0] %.2f dBm/RE, RSSI %.2f dBm, RSRQ[0] %.2f dB, N0 %d dBm/RE (NF %.1f dB)\n",
 		    10*log10(ue->measurements.rsrp[0])-ue->rx_total_gain_dB,
 		    10*log10(ue->measurements.rssi)-ue->rx_total_gain_dB, 
@@ -107,9 +107,9 @@ int dump_ue_stats(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,char* buffer, int length
       len += sprintf(&buffer[len], "[UE PROC] Po_PUCCH = %d dBm (Po_NOMINAL_PUCCH %d dBm, g_pucch %d dB)\n", 
 		     get_PL(ue->Mod_id,ue->CC_id,0)+
 		     ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH+
-		     ue->dlsch[0][0]->g_pucch,
+		     ue->dlsch[0][0][0]->g_pucch,
 		     ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
-		     ue->dlsch[0][0]->g_pucch);
+		     ue->dlsch[0][0][0]->g_pucch);
     }
     //for (eNB=0;eNB<NUMBER_OF_eNB_MAX;eNB++) {
     for (eNB=0; eNB<1; eNB++) {
@@ -482,24 +482,24 @@ int dump_ue_stats(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,char* buffer, int length
         len += sprintf(&buffer[len], "[UE PROC] Mode 6 Wideband CQI eNB %d : %d dB\n",eNB,ue->measurements.precoded_cqi_dB[eNB][0]);
 
       for (harq_pid=0;harq_pid<8;harq_pid++) {
-	len+=sprintf(&buffer[len],"[UE PROC] eNB %d: CW 0 harq_pid %d, mcs %d:",eNB,harq_pid,ue->dlsch[0][0]->harq_processes[harq_pid]->mcs);
+	len+=sprintf(&buffer[len],"[UE PROC] eNB %d: CW 0 harq_pid %d, mcs %d:",eNB,harq_pid,ue->dlsch[0][0][0]->harq_processes[harq_pid]->mcs);
 	for (round=0;round<8;round++)
 	  len+=sprintf(&buffer[len],"%d/%d ",
-		       ue->dlsch[0][0]->harq_processes[harq_pid]->errors[round],
-		       ue->dlsch[0][0]->harq_processes[harq_pid]->trials[round]);
+		       ue->dlsch[0][0][0]->harq_processes[harq_pid]->errors[round],
+		       ue->dlsch[0][0][0]->harq_processes[harq_pid]->trials[round]);
 	len+=sprintf(&buffer[len],"\n");
       }
-      if (ue->dlsch[0] && ue->dlsch[0][0] && ue->dlsch[0][1]) {
-        len += sprintf(&buffer[len], "[UE PROC] Saved PMI for DLSCH eNB %d : %jx (%p)\n",eNB,pmi2hex_2Ar1(ue->dlsch[0][0]->pmi_alloc),ue->dlsch[0][0]);
+      if (ue->dlsch[0][0] && ue->dlsch[0][0][0] && ue->dlsch[0][0][1]) {
+        len += sprintf(&buffer[len], "[UE PROC] Saved PMI for DLSCH eNB %d : %jx (%p)\n",eNB,pmi2hex_2Ar1(ue->dlsch[0][0][0]->pmi_alloc),ue->dlsch[0][0][0]);
 
-        len += sprintf(&buffer[len], "[UE PROC] eNB %d: dl_power_off = %d\n",eNB,ue->dlsch[0][0]->harq_processes[0]->dl_power_off);
+        len += sprintf(&buffer[len], "[UE PROC] eNB %d: dl_power_off = %d\n",eNB,ue->dlsch[0][0][0]->harq_processes[0]->dl_power_off);
 
 	for (harq_pid=0;harq_pid<8;harq_pid++) {
-	  len+=sprintf(&buffer[len],"[UE PROC] eNB %d: CW 1 harq_pid %d, mcs %d:",eNB,harq_pid,ue->dlsch[0][1]->harq_processes[0]->mcs);
+	  len+=sprintf(&buffer[len],"[UE PROC] eNB %d: CW 1 harq_pid %d, mcs %d:",eNB,harq_pid,ue->dlsch[0][0][1]->harq_processes[0]->mcs);
 	  for (round=0;round<8;round++)
 	    len+=sprintf(&buffer[len],"%d/%d ",
-			 ue->dlsch[0][1]->harq_processes[harq_pid]->errors[round],
-			 ue->dlsch[0][1]->harq_processes[harq_pid]->trials[round]);
+			 ue->dlsch[0][0][1]->harq_processes[harq_pid]->errors[round],
+			 ue->dlsch[0][0][1]->harq_processes[harq_pid]->trials[round]);
 	  len+=sprintf(&buffer[len],"\n");
 	}
       }
diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h
index aaa0a28043e499ec25dc91e023489862dadf1454..46847d91e4a29f86540ffc6e03c7cc6d8304136f 100644
--- a/openair1/PHY/LTE_TRANSPORT/proto.h
+++ b/openair1/PHY/LTE_TRANSPORT/proto.h
@@ -704,6 +704,22 @@ void qam64_qam16(short *stream0_in,
                  short *rho01,
                  int length);
 
+/** \brief This function computes the LLRs for ML (max-logsum approximation) dual-stream 64QAM/16QAM reception.
+    @param stream0_in Input from channel compensated (MR combined) stream 0
+    @param stream1_in Input from channel compensated (MR combined) stream 1
+    @param ch_mag   Input from scaled channel magnitude square of h0'*g0
+    @param ch_mag_i Input from scaled channel magnitude square of h0'*g1
+    @param stream0_out Output from LLR unit for stream0
+    @param rho01 Cross-correlation between channels (MR combined)
+    @param length in complex channel outputs*/
+void qam64_qam16_avx2(short *stream0_in,
+                      short *stream1_in,
+                      short *ch_mag,
+                      short *ch_mag_i,
+                      short *stream0_out,
+                      short *rho01,
+                      int length);
+
 /** \brief This function perform LLR computation for dual-stream (64QAM/16QAM) transmission.
     @param frame_parms Frame descriptor structure
     @param rxdataF_comp Compensated channel output
@@ -746,6 +762,22 @@ void qam64_qam64(short *stream0_in,
                  short *rho01,
                  int length);
 
+/** \brief This function computes the LLRs for ML (max-logsum approximation) dual-stream 64QAM/64QAM reception.
+    @param stream0_in Input from channel compensated (MR combined) stream 0
+    @param stream1_in Input from channel compensated (MR combined) stream 1
+    @param ch_mag   Input from scaled channel magnitude square of h0'*g0
+    @param ch_mag_i Input from scaled channel magnitude square of h0'*g1
+    @param stream0_out Output from LLR unit for stream0
+    @param rho01 Cross-correlation between channels (MR combined)
+    @param length in complex channel outputs*/
+void qam64_qam64_avx2(int32_t *stream0_in,
+                      int32_t *stream1_in,
+                      int32_t *ch_mag,
+                      int32_t *ch_mag_i,
+                      int16_t *stream0_out,
+                      int32_t *rho01,
+                      int length);
+
 /** \brief This function perform LLR computation for dual-stream (64QAM/64QAM) transmission.
     @param frame_parms Frame descriptor structure
     @param rxdataF_comp Compensated channel output
@@ -1236,7 +1268,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
                         LTE_DL_FRAME_PARMS *lte_frame_parms,
                         LTE_UE_DLSCH_t *dlsch,
                         LTE_DL_UE_HARQ_t *harq_process,
-                        uint8_t frame,
+                        uint32_t frame,
                         uint8_t subframe,
                         uint8_t harq_pid,
                         uint8_t is_crnti,
@@ -1276,9 +1308,7 @@ int32_t rx_pdsch(PHY_VARS_UE *phy_vars_ue,
                  uint8_t i_mod,
                  uint8_t harq_pid);
 
-int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
-                 LTE_UE_PDCCH **lte_ue_pdcch_vars,
-                 LTE_DL_FRAME_PARMS *frame_parms,
+int32_t rx_pdcch(PHY_VARS_UE *ue,
                  uint32_t frame,
                  uint8_t subframe,
                  uint8_t eNB_id,
@@ -1751,6 +1781,7 @@ uint32_t ulsch_encoding(uint8_t *a,
                         PHY_VARS_UE *phy_vars_ue,
                         uint8_t harq_pid,
                         uint8_t eNB_id,
+                        uint8_t subframe_rx,
                         uint8_t tmode,
                         uint8_t control_only_flag,
                         uint8_t Nbundled);
@@ -1766,6 +1797,7 @@ uint32_t ulsch_encoding(uint8_t *a,
 int32_t ulsch_encoding_emul(uint8_t *ulsch_buffer,
                             PHY_VARS_UE *phy_vars_ue,
                             uint8_t eNB_id,
+                            uint8_t subframe_rx,
                             uint8_t harq_pid,
                             uint8_t control_only_flag);
 
diff --git a/openair1/PHY/LTE_TRANSPORT/pucch.c b/openair1/PHY/LTE_TRANSPORT/pucch.c
index 563f83bb7fa9e7d1851f2a2ed623b5d5c1c537ea..1efad912af5a0f54ff6efe37c99f73f4cce001e6 100644
--- a/openair1/PHY/LTE_TRANSPORT/pucch.c
+++ b/openair1/PHY/LTE_TRANSPORT/pucch.c
@@ -1315,7 +1315,7 @@ int32_t rx_pucch_emul(PHY_VARS_eNB *eNB,
   rnti = eNB->ulsch[UE_index]->rnti;
 
   for (UE_id=0; UE_id<NB_UE_INST; UE_id++) {
-    if (rnti == PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[0]->crnti)
+    if (rnti == PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[subframe & 0x1][0]->crnti)
       break;
   }
 
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
index 9571ea6cd52823d8409a2781bdd1c2ab5fc7c6e4..bd49fdacb06dc4c177a9182f6ee5d57759a49577 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
@@ -202,6 +202,7 @@ uint32_t ulsch_encoding(uint8_t *a,
                         PHY_VARS_UE *ue,
                         uint8_t harq_pid,
                         uint8_t eNB_id,
+                        uint8_t subframe_rx,
                         uint8_t tmode,
                         uint8_t control_only_flag,
                         uint8_t Nbundled)
@@ -233,7 +234,7 @@ uint32_t ulsch_encoding(uint8_t *a,
   LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
   PHY_MEASUREMENTS *meas = &ue->measurements;
   LTE_UE_ULSCH_t *ulsch=ue->ulsch[eNB_id];
-  LTE_UE_DLSCH_t **dlsch = ue->dlsch[eNB_id];
+  LTE_UE_DLSCH_t **dlsch = ue->dlsch[0][eNB_id];
   uint16_t rnti = 0xffff;
 
   if (!ulsch) {
@@ -261,10 +262,10 @@ uint32_t ulsch_encoding(uint8_t *a,
   // fill CQI/PMI information
   if (ulsch->O>0) {
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_ENCODING_FILL_CQI, VCD_FUNCTION_IN);
-    rnti = ue->pdcch_vars[eNB_id]->crnti;
+    rnti = ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti;
     fill_CQI(ulsch,meas,0,harq_pid,ue->frame_parms.N_RB_DL,rnti, tmode,ue->sinr_eff);
 
-    LOG_D(PHY,"UE CQI\n");
+    LOG_D(PHY,"ULSCH Encoding rnti %x \n", rnti);
     print_CQI(ulsch->o,ulsch->uci_format,0,ue->frame_parms.N_RB_DL);
 
     // save PUSCH pmi for later (transmission modes 4,5,6)
@@ -961,15 +962,16 @@ uint32_t ulsch_encoding(uint8_t *a,
 int ulsch_encoding_emul(uint8_t *ulsch_buffer,
                         PHY_VARS_UE *ue,
                         uint8_t eNB_id,
+                        uint8_t subframe_rx,
                         uint8_t harq_pid,
                         uint8_t control_only_flag)
 {
 
   LTE_UE_ULSCH_t *ulsch = ue->ulsch[eNB_id];
-  LTE_UE_DLSCH_t **dlsch = ue->dlsch[eNB_id];
+  LTE_UE_DLSCH_t **dlsch = ue->dlsch[0][eNB_id];
   PHY_MEASUREMENTS *meas = &ue->measurements;
   uint8_t tmode = ue->transmission_mode[eNB_id];
-  uint16_t rnti=ue->pdcch_vars[eNB_id]->crnti;
+  uint16_t rnti=ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti;
   LOG_D(PHY,"EMUL UE ulsch_encoding for eNB %d,mod_id %d, harq_pid %d rnti %x, ACK(%d,%d) \n",
         eNB_id,ue->Mod_id, harq_pid, rnti,ulsch->o_ACK[0],ulsch->o_ACK[1]);
 
@@ -1003,7 +1005,7 @@ int ulsch_encoding_emul(uint8_t *ulsch_buffer,
   //UE_transport_info_TB_index[ue->Mod_id]+=ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3;
   // navid: currently more than one eNB is not supported in the code
   UE_transport_info[ue->Mod_id][ue->CC_id].num_eNB = 1;
-  UE_transport_info[ue->Mod_id][ue->CC_id].rnti[0] = ue->pdcch_vars[0]->crnti;
+  UE_transport_info[ue->Mod_id][ue->CC_id].rnti[0] = ue->pdcch_vars[subframe_rx & 0x1][0]->crnti;
   UE_transport_info[ue->Mod_id][ue->CC_id].eNB_id[0]  = eNB_id;
   UE_transport_info[ue->Mod_id][ue->CC_id].harq_pid[0] = harq_pid;
   UE_transport_info[ue->Mod_id][ue->CC_id].tbs[0]     = ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3 ;
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
index ca67ccdb3c9c34dbf01b7752201ebce456b34017..a26f3a876bd53be7a4db161878d735070490cf83 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
@@ -2002,7 +2002,7 @@ uint32_t ulsch_decoding_emul(PHY_VARS_eNB *eNB, eNB_rxtx_proc_t *proc,
 #endif
 
   for (UE_id=0; UE_id<NB_UE_INST; UE_id++) {
-    if (rnti == PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[0]->crnti)
+    if (rnti == PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[subframe & 0x1][0]->crnti)
       break;
 
   }
@@ -2066,7 +2066,7 @@ uint32_t ulsch_decoding_emul(PHY_VARS_eNB *eNB, eNB_rxtx_proc_t *proc,
     // get local ue's ack
     if ((UE_index >= oai_emulation.info.first_ue_local) ||(UE_index <(oai_emulation.info.first_ue_local+oai_emulation.info.nb_ue_local))) {
       get_ack(&eNB->frame_parms,
-              PHY_vars_UE_g[UE_id][CC_id]->dlsch[0][0]->harq_ack,
+              PHY_vars_UE_g[UE_id][CC_id]->dlsch[0][0][0]->harq_ack,
               subframe,
               eNB->ulsch[UE_index]->harq_processes[harq_pid]->o_ACK,0);
     } else { // get remote UEs' ack
diff --git a/openair1/PHY/Makefile.inc b/openair1/PHY/Makefile.inc
index 1586f353c0f623853f6149ca91f313630847b92a..90094b31f8605946ba6c18f31eb070b4ff99f484 100644
--- a/openair1/PHY/Makefile.inc
+++ b/openair1/PHY/Makefile.inc
@@ -7,6 +7,7 @@ PHY_OBJS += $(TOP_DIR)/PHY/LTE_TRANSPORT/dlsch_coding.o
 PHY_OBJS += $(TOP_DIR)/PHY/LTE_TRANSPORT/dlsch_modulation.o
 PHY_OBJS += $(TOP_DIR)/PHY/LTE_TRANSPORT/dlsch_demodulation.o
 PHY_OBJS += $(TOP_DIR)/PHY/LTE_TRANSPORT/dlsch_llr_computation.o
+PHY_OBJS += $(TOP_DIR)/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.o
 PHY_OBJS += $(TOP_DIR)/PHY/LTE_TRANSPORT/power_control.o
 PHY_OBJS += $(TOP_DIR)/PHY/LTE_TRANSPORT/dlsch_decoding.o
 PHY_OBJS += $(TOP_DIR)/PHY/LTE_TRANSPORT/dlsch_scrambling.o
diff --git a/openair1/PHY/TOOLS/lte_phy_scope.c b/openair1/PHY/TOOLS/lte_phy_scope.c
index 72035f92969b4c5301e7423fa85265b51fd25a68..dd057f997513a2cc6a4bc45fe4545689dc5068a6 100644
--- a/openair1/PHY/TOOLS/lte_phy_scope.c
+++ b/openair1/PHY/TOOLS/lte_phy_scope.c
@@ -513,32 +513,32 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
   int beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]>6 ? phy_vars_ue->transmission_mode[eNB_id] : 0;
 
 
-  if (phy_vars_ue->dlsch[eNB_id][0]!=NULL) {
-    harq_pid = phy_vars_ue->dlsch[eNB_id][0]->current_harq_pid;
+  if (phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]!=NULL) {
+    harq_pid = phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid;
 
     if (harq_pid>=8)
       return;
 
-    mcs = phy_vars_ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->mcs;
+    mcs = phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->mcs;
 
     // Button 0
-    if(!phy_vars_ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->dl_power_off) {
+    if(!phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->dl_power_off) {
       // we are in TM5
       fl_show_object(form->button_0);
     }
   }
 
-  if (phy_vars_ue->pdcch_vars[eNB_id]!=NULL) {
-    num_pdcch_symbols = phy_vars_ue->pdcch_vars[eNB_id]->num_pdcch_symbols;
+  if (phy_vars_ue->pdcch_vars[subframe&0x1][eNB_id]!=NULL) {
+    num_pdcch_symbols = phy_vars_ue->pdcch_vars[subframe&0x1][eNB_id]->num_pdcch_symbols;
   }
 
   //    coded_bits_per_codeword = frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti);
-  if (phy_vars_ue->dlsch[eNB_id][0]!=NULL) {
+  if (phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]!=NULL) {
     coded_bits_per_codeword = get_G(frame_parms,
-                                    phy_vars_ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
-                                    phy_vars_ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
+                                    phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->nb_rb,
+                                    phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
                                     get_Qm(mcs),
-                                    phy_vars_ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->Nl,
+                                    phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->Nl,
                                     num_pdcch_symbols,
                                     frame,
                                     subframe,
@@ -566,8 +566,8 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
   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_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_comp = (int16_t*) phy_vars_ue->pdcch_vars[eNB_id]->rxdataF_comp[0];
+  pdcch_llr = (int8_t*) phy_vars_ue->pdcch_vars[subframe&0x1][eNB_id]->llr;
+  pdcch_comp = (int16_t*) phy_vars_ue->pdcch_vars[subframe&0x1][eNB_id]->rxdataF_comp[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_comp = (int16_t*) phy_vars_ue->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp0[0];
@@ -702,7 +702,14 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
     }
 
     fl_set_xyplot_xbounds(form->pdcch_llr,0,12*frame_parms->N_RB_DL*2*3);
-    fl_set_xyplot_data(form->pdcch_llr,bit_pdcch,llr_pdcch,12*frame_parms->N_RB_DL*2*num_pdcch_symbols,"","","");
+    if (frame_parms->N_RB_DL != 100)
+    {
+        fl_set_xyplot_data(form->pdcch_llr,bit_pdcch,llr_pdcch,12*frame_parms->N_RB_DL*2*num_pdcch_symbols,"","","");
+    }
+    else
+    {
+        LOG_D(PHY,"UE PDCCH LLR plot is bugged in 20 MHz BW, to be fixed !!!\n");
+    }
   }
 
   // PDCCH I/Q of MF Output
@@ -711,8 +718,14 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
       I[i] = pdcch_comp[2*i];
       Q[i] = pdcch_comp[2*i+1];
     }
-
-    fl_set_xyplot_data(form->pdcch_comp,I,Q,12*frame_parms->N_RB_DL*num_pdcch_symbols,"","","");
+    if (frame_parms->N_RB_DL != 100)
+    {
+        fl_set_xyplot_data(form->pdcch_comp,I,Q,12*frame_parms->N_RB_DL*num_pdcch_symbols,"","","");
+    }
+    else
+    {
+        LOG_D(PHY,"UE PDCCH COMP plot is bugged in 20 MHz BW, to be fixed !!!\n");
+    }
   }
 
   // PDSCH LLRs
@@ -723,7 +736,14 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
     }
 
     fl_set_xyplot_xbounds(form->pdsch_llr,0,coded_bits_per_codeword);
-    fl_set_xyplot_data(form->pdsch_llr,bit,llr,coded_bits_per_codeword,"","","");
+    if (frame_parms->N_RB_DL != 100)
+    {
+        fl_set_xyplot_data(form->pdsch_llr,bit,llr,coded_bits_per_codeword,"","","");
+    }
+    else
+    {
+        LOG_D(PHY,"UE PDSCH LLR plot is bugged in 20 MHz BW, to be fixed !!!\n");
+    }
   }
 
   // PDSCH I/Q of MF Output
diff --git a/openair1/PHY/TOOLS/lte_phy_scope_tm4.c b/openair1/PHY/TOOLS/lte_phy_scope_tm4.c
index 60c5ace2c5379471d7746421daad79f9a1844cfc..92a0d9f218e2ebedc09ecbdcf4eecccfa55ad022 100755
--- a/openair1/PHY/TOOLS/lte_phy_scope_tm4.c
+++ b/openair1/PHY/TOOLS/lte_phy_scope_tm4.c
@@ -448,11 +448,11 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
     int mcs1=0;
     unsigned char harq_pid = 0;
     int beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]>6 ? phy_vars_ue->transmission_mode[eNB_id] : 0;
-    if (phy_vars_ue->dlsch[eNB_id][0]!=NULL) {
-        harq_pid = phy_vars_ue->dlsch[eNB_id][0]->current_harq_pid;
+    if (phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]!=NULL) {
+        harq_pid = phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid;
   if (harq_pid>=8)
     return;
-    mcs0 = phy_vars_ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->mcs;
+    mcs0 = phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->mcs;
         // Button 0
   /*
         if(!phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off) {
@@ -461,23 +461,23 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
         }
   */
     }
-       if (phy_vars_ue->dlsch[eNB_id][1]!=NULL) {
-        harq_pid = phy_vars_ue->dlsch[eNB_id][1]->current_harq_pid;
+       if (phy_vars_ue->dlsch[subframe&0x1][eNB_id][1]!=NULL) {
+        harq_pid = phy_vars_ue->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid;
   if (harq_pid>=8)
     return;
-    mcs1 = phy_vars_ue->dlsch[eNB_id][1]->harq_processes[harq_pid]->mcs;
+    mcs1 = phy_vars_ue->dlsch[subframe&0x1][eNB_id][1]->harq_processes[harq_pid]->mcs;
     }
-    if (phy_vars_ue->pdcch_vars[eNB_id]!=NULL) {
-        num_pdcch_symbols = phy_vars_ue->pdcch_vars[eNB_id]->num_pdcch_symbols;
+    if (phy_vars_ue->pdcch_vars[subframe&0x1][eNB_id]!=NULL) {
+        num_pdcch_symbols = phy_vars_ue->pdcch_vars[subframe&0x1][eNB_id]->num_pdcch_symbols;
     }
     //    coded_bits_per_codeword = frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti);
-    if (phy_vars_ue->dlsch[eNB_id][0]!=NULL) {
+    if (phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]!=NULL) {
       mod0 = get_Qm(mcs0);
       coded_bits_per_codeword0 = get_G(frame_parms,
-              phy_vars_ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
-              phy_vars_ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
+              phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->nb_rb,
+              phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
               get_Qm(mcs0),
-              phy_vars_ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->Nl,
+              phy_vars_ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->Nl,
               num_pdcch_symbols,
               frame,
               subframe,
@@ -486,13 +486,13 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
       coded_bits_per_codeword0 = 0; //frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti);
       mod0=0;
     }
-    if (phy_vars_ue->dlsch[eNB_id][1]!=NULL) {
+    if (phy_vars_ue->dlsch[subframe&0x1][eNB_id][1]!=NULL) {
       mod1 = get_Qm(mcs1);
       coded_bits_per_codeword1 = get_G(frame_parms,
-               phy_vars_ue->dlsch[eNB_id][1]->harq_processes[harq_pid]->nb_rb,
-               phy_vars_ue->dlsch[eNB_id][1]->harq_processes[harq_pid]->rb_alloc_even,
+               phy_vars_ue->dlsch[subframe&0x1][eNB_id][1]->harq_processes[harq_pid]->nb_rb,
+               phy_vars_ue->dlsch[subframe&0x1][eNB_id][1]->harq_processes[harq_pid]->rb_alloc_even,
                get_Qm(mcs1),
-               phy_vars_ue->dlsch[eNB_id][1]->harq_processes[harq_pid]->Nl,
+               phy_vars_ue->dlsch[subframe&0x1][eNB_id][1]->harq_processes[harq_pid]->Nl,
                num_pdcch_symbols,
                frame,
                subframe,
@@ -519,8 +519,8 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
     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_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_comp = (int16_t*) phy_vars_ue->pdcch_vars[eNB_id]->rxdataF_comp[0];
+    pdcch_llr = (int8_t*) phy_vars_ue->pdcch_vars[subframe&0x1][eNB_id]->llr;
+    pdcch_comp = (int16_t*) phy_vars_ue->pdcch_vars[subframe&0x1][eNB_id]->rxdataF_comp[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[subframe&0x1][eNB_id]->llr[1]; // stream 1
     pdsch_comp = (int16_t*) phy_vars_ue->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp0[0];
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index d70bfb3f722df0bcf526266d633b932bb534057b..272051000664a4dc4917c5917e9f90b286df2389 100644
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -706,16 +706,16 @@ typedef struct {
   LTE_DL_FRAME_PARMS  frame_parms_before_ho;
   LTE_UE_COMMON    common_vars;
 
-  LTE_UE_PDSCH     *pdsch_vars[2][NUMBER_OF_CONNECTED_eNB_MAX+1];
+  LTE_UE_PDSCH     *pdsch_vars[2][NUMBER_OF_CONNECTED_eNB_MAX+1]; // two RxTx Threads
   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_ra[NUMBER_OF_CONNECTED_eNB_MAX+1];
   LTE_UE_PDSCH     *pdsch_vars_p[NUMBER_OF_CONNECTED_eNB_MAX+1];
   LTE_UE_PDSCH     *pdsch_vars_MCH[NUMBER_OF_CONNECTED_eNB_MAX];
   LTE_UE_PBCH      *pbch_vars[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_PDCCH     *pdcch_vars[NUMBER_OF_CONNECTED_eNB_MAX];
+  LTE_UE_PDCCH     *pdcch_vars[2][NUMBER_OF_CONNECTED_eNB_MAX];
   LTE_UE_PRACH     *prach_vars[NUMBER_OF_CONNECTED_eNB_MAX];
-  LTE_UE_DLSCH_t   *dlsch[NUMBER_OF_CONNECTED_eNB_MAX][2];
+  LTE_UE_DLSCH_t   *dlsch[2][NUMBER_OF_CONNECTED_eNB_MAX][2]; // two RxTx Threads
   LTE_UE_ULSCH_t   *ulsch[NUMBER_OF_CONNECTED_eNB_MAX];
   LTE_UE_DLSCH_t   *dlsch_SI[NUMBER_OF_CONNECTED_eNB_MAX];
   LTE_UE_DLSCH_t   *dlsch_ra[NUMBER_OF_CONNECTED_eNB_MAX];
@@ -802,6 +802,8 @@ typedef struct {
   uint8_t               prach_cnt;
   uint8_t               prach_PreambleIndex;
   //  uint8_t               prach_timer;
+  uint8_t               decode_SIB;
+  uint8_t               decode_MIB;
   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
@@ -872,7 +874,7 @@ typedef struct {
 
   time_stats_t phy_proc;
   time_stats_t phy_proc_tx;
-  time_stats_t phy_proc_rx;
+  time_stats_t phy_proc_rx[2];
 
   uint32_t use_ia_receiver;
 
@@ -885,12 +887,16 @@ typedef struct {
   time_stats_t ulsch_interleaving_stats;
   time_stats_t ulsch_multiplexing_stats;
 
+  time_stats_t generic_stat;
+  time_stats_t pdsch_procedures_stat;
+  time_stats_t dlsch_procedures_stat;
+
   time_stats_t ofdm_demod_stats;
   time_stats_t dlsch_rx_pdcch_stats;
   time_stats_t rx_dft_stats;
   time_stats_t dlsch_channel_estimation_stats;
   time_stats_t dlsch_freq_offset_estimation_stats;
-  time_stats_t dlsch_decoding_stats;
+  time_stats_t dlsch_decoding_stats[2];
   time_stats_t dlsch_demodulation_stats;
   time_stats_t dlsch_rate_unmatching_stats;
   time_stats_t dlsch_turbo_decoding_stats;
diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h
index f283014af7b188c03bb229415defd369e45179f2..283ae2db6ddd58a9a0d7fa2b4e2a05c2d2f3575d 100644
--- a/openair1/SCHED/defs.h
+++ b/openair1/SCHED/defs.h
@@ -511,7 +511,7 @@ void dump_dlsch(PHY_VARS_UE *phy_vars_ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
 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_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe, 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, unsigned int *coded_bits_per_codeword,int round, unsigned char harq_pid);
 
 
 int is_srs_occasion_common(LTE_DL_FRAME_PARMS *frame_parms,int frame_tx,int subframe_tx);
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index f4cc7f8c415061b122411e111963c4a2b5b7b00b..b9fdc5d2267d4fbaecb44a08bf05b3a7f0f43420 100644
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -915,7 +915,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,LTE_eNB_DLSCH_t *d
   int input_buffer_length = dlsch_harq->TBS/8;
   LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
   uint8_t *DLSCH_pdu=NULL;
-  uint8_t DLSCH_pdu_tmp[768*8];
+  uint8_t DLSCH_pdu_tmp[input_buffer_length+4]; //[768*8];
   uint8_t DLSCH_pdu_rar[256];
   int i;
 
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index 41ea1339d5ae4e7dfdcdf7494a7e0d19af41003c..b8a9159955025ab9f6b40a312099e1d85a6a3d8a 100644
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -75,6 +75,7 @@ fifo_dump_emos_UE emos_dump_UE;
 
 extern int oai_exit;
 
+extern double cpuf;
 
 
 
@@ -90,11 +91,11 @@ void dump_dlsch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subf
   uint8_t nsymb = (ue->frame_parms.Ncp == 0) ? 14 : 12;
 
   coded_bits_per_codeword = get_G(&ue->frame_parms,
-                                  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
-                                  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
-                                  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->Qm,
-                                  ue->dlsch[eNB_id][0]->harq_processes[harq_pid]->Nl,
-                                  ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+                                  ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->nb_rb,
+                                  ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
+                                  ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->Qm,
+                                  ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[harq_pid]->Nl,
+                                  ue->pdcch_vars[0&0x1][eNB_id]->num_pdcch_symbols,
                                   proc->frame_rx,
 				  subframe,
 				  ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
@@ -125,7 +126,7 @@ void dump_dlsch_SI(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t s
                                   ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even,
                                   2,
                                   1,
-                                  ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+                                  ue->pdcch_vars[0&0x1][eNB_id]->num_pdcch_symbols,
                                   proc->frame_rx,
 				  subframe,
 				  0);
@@ -136,7 +137,7 @@ void dump_dlsch_SI(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t s
         ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
         ue->dlsch_SI[eNB_id]->harq_processes[0]->mcs,
         ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
-        ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+        ue->pdcch_vars[0&0x1][eNB_id]->num_pdcch_symbols,
         coded_bits_per_codeword);
 
   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);
@@ -230,7 +231,7 @@ void dump_dlsch_ra(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t s
                                   ue->dlsch_ra[eNB_id]->harq_processes[0]->rb_alloc_even,
                                   2,
                                   1,
-                                  ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+                                  ue->pdcch_vars[0&0x1][eNB_id]->num_pdcch_symbols,
                                   proc->frame_rx,
 				  subframe,
 				  0);
@@ -239,7 +240,7 @@ void dump_dlsch_ra(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t s
         ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb,
         ue->dlsch_ra[eNB_id]->harq_processes[0]->mcs,
         ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb,
-        ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+        ue->pdcch_vars[0&0x1][eNB_id]->num_pdcch_symbols,
         coded_bits_per_codeword);
 
   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);
@@ -267,37 +268,39 @@ void phy_reset_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index)
   uint8_t i,j,k,s;
   PHY_VARS_UE *ue = PHY_vars_UE_g[Mod_id][CC_id];
 
-  //[NUMBER_OF_CONNECTED_eNB_MAX][2];
-  for(i=0; i<NUMBER_OF_CONNECTED_eNB_MAX; i++) {
-    for(j=0; j<2; j++) {
-      //DL HARQ
-      if(ue->dlsch[i][j]) {
-        for(k=0; k<NUMBER_OF_HARQ_PID_MAX && ue->dlsch[i][j]->harq_processes[k]; k++) {
-          ue->dlsch[i][j]->harq_processes[k]->status = SCH_IDLE;
-          for (s=0; s<10; s++) {
-            // reset ACK/NACK bit to DTX for all subframes s = 0..9
-            ue->dlsch[i][j]->harq_ack[s].ack = 2;
-            ue->dlsch[i][j]->harq_ack[s].send_harq_status = 0;
-            ue->dlsch[i][j]->harq_ack[s].vDAI_UL = 0xff;
-            ue->dlsch[i][j]->harq_ack[s].vDAI_DL = 0xff;
+  //[NUMBER_OF_RX_THREAD=2][NUMBER_OF_CONNECTED_eNB_MAX][2];
+  for(int l=0; l<2; l++) {
+      for(i=0; i<NUMBER_OF_CONNECTED_eNB_MAX; i++) {
+          for(j=0; j<2; j++) {
+              //DL HARQ
+              if(ue->dlsch[l][i][j]) {
+                  for(k=0; k<NUMBER_OF_HARQ_PID_MAX && ue->dlsch[l][i][j]->harq_processes[k]; k++) {
+                      ue->dlsch[l][i][j]->harq_processes[k]->status = SCH_IDLE;
+                      for (s=0; s<10; s++) {
+                          // reset ACK/NACK bit to DTX for all subframes s = 0..9
+                          ue->dlsch[l][i][j]->harq_ack[s].ack = 2;
+                          ue->dlsch[l][i][j]->harq_ack[s].send_harq_status = 0;
+                          ue->dlsch[l][i][j]->harq_ack[s].vDAI_UL = 0xff;
+                          ue->dlsch[l][i][j]->harq_ack[s].vDAI_DL = 0xff;
+                      }
+                  }
+              }
           }
-        }
-      }
-    }
 
-    //UL HARQ
-    if(ue->ulsch[i]) {
-      for(k=0; k<NUMBER_OF_HARQ_PID_MAX && ue->ulsch[i]->harq_processes[k]; k++) {
-        ue->ulsch[i]->harq_processes[k]->status = SCH_IDLE;
-        //Set NDIs for all UL HARQs to 0
-        //  ue->ulsch[i]->harq_processes[k]->Ndi = 0;
+          //UL HARQ
+          if(ue->ulsch[i]) {
+              for(k=0; k<NUMBER_OF_HARQ_PID_MAX && ue->ulsch[i]->harq_processes[k]; k++) {
+                  ue->ulsch[i]->harq_processes[k]->status = SCH_IDLE;
+                  //Set NDIs for all UL HARQs to 0
+                  //  ue->ulsch[i]->harq_processes[k]->Ndi = 0;
 
-      }
-    }
+              }
+          }
 
-    // flush Msg3 buffer
-    ue->ulsch_Msg3_active[i] = 0;
+          // flush Msg3 buffer
+          ue->ulsch_Msg3_active[i] = 0;
 
+      }
   }
 }
 
@@ -306,8 +309,10 @@ void ra_failed(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index)
 
   // if contention resolution fails, go back to PRACH
   PHY_vars_UE_g[Mod_id][CC_id]->UE_mode[eNB_index] = PRACH;
-  PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[eNB_index]->crnti_is_temporary = 0;
-  PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[eNB_index]->crnti = 0;
+  PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[0][eNB_index]->crnti_is_temporary = 0;
+  PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[0][eNB_index]->crnti = 0;
+  PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[1][eNB_index]->crnti_is_temporary = 0;
+  PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[1][eNB_index]->crnti = 0;
   LOG_E(PHY,"[UE %d] Random-access procedure fails, going back to PRACH, setting SIStatus = 0, discard temporary C-RNTI and State RRC_IDLE\n",Mod_id);
   //mac_xface->macphy_exit("");
 }
@@ -319,14 +324,16 @@ void ra_succeeded(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index)
 
   LOG_I(PHY,"[UE %d][RAPROC] Random-access procedure succeeded. Set C-RNTI = Temporary C-RNTI\n",Mod_id);
 
-  PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[eNB_index]->crnti_is_temporary = 0;
+  PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[0][eNB_index]->crnti_is_temporary = 0;
+  PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[1][eNB_index]->crnti_is_temporary = 0;
   PHY_vars_UE_g[Mod_id][CC_id]->ulsch_Msg3_active[eNB_index] = 0;
   PHY_vars_UE_g[Mod_id][CC_id]->UE_mode[eNB_index] = PUSCH;
 
   for (i=0; i<8; i++) {
     if (PHY_vars_UE_g[Mod_id][CC_id]->ulsch[eNB_index]->harq_processes[i]) {
       PHY_vars_UE_g[Mod_id][CC_id]->ulsch[eNB_index]->harq_processes[i]->status=IDLE;
-      PHY_vars_UE_g[Mod_id][CC_id]->dlsch[eNB_index][0]->harq_processes[i]->round=0;
+      PHY_vars_UE_g[Mod_id][CC_id]->dlsch[0][eNB_index][0]->harq_processes[i]->round=0;
+      PHY_vars_UE_g[Mod_id][CC_id]->dlsch[1][eNB_index][0]->harq_processes[i]->round=0;
     }
   }
 
@@ -374,7 +381,7 @@ uint8_t is_SR_TXOp(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id)
   int subframe=proc->subframe_tx;
 
   LOG_D(PHY,"[UE %d][SR %x] Frame %d subframe %d Checking for SR TXOp (sr_ConfigIndex %d)\n",
-        ue->Mod_id,ue->pdcch_vars[eNB_id]->crnti,proc->frame_tx,subframe,
+        ue->Mod_id,ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->crnti,proc->frame_tx,subframe,
         ue->scheduling_request_config[eNB_id].sr_ConfigIndex);
 
   if (ue->scheduling_request_config[eNB_id].sr_ConfigIndex <= 4) {        // 5 ms SR period
@@ -493,7 +500,7 @@ void ue_compute_srs_occasion(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id
                               CC_id,
                               frame_tx,
                               eNB_id,
-                              ue->pdcch_vars[eNB_id]->crnti,
+                              ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->crnti,
                               subframe_tx); // subframe used for meas gap
 
                       if (SR_payload > 0)
@@ -503,7 +510,7 @@ void ue_compute_srs_occasion(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id
 
               uint8_t pucch_ack_payload[2];
               if (get_ack(&ue->frame_parms,
-                      ue->dlsch[eNB_id][0]->harq_ack,
+                      ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack,
                       subframe_tx,pucch_ack_payload,0) > 0)
               {
                   is_sr_an_subframe = 1;
@@ -656,6 +663,7 @@ PUCCH_FMT_t get_pucch_format(lte_frame_type_t frame_type,
           return pucch_format2;
       }
   }
+  return pucch_format1a;
 }
 uint16_t get_n1_pucch(PHY_VARS_UE *ue,
 		      UE_rxtx_proc_t *proc,
@@ -680,10 +688,10 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
 
   if (frame_parms->frame_type == FDD ) { // FDD
     sf = (subframe<4)? subframe+6 : subframe-4;
-    LOG_D(PHY,"n1_pucch_UE: subframe %d, nCCE %d\n",sf,ue->pdcch_vars[eNB_id]->nCCE[sf]);
+    LOG_D(PHY,"n1_pucch_UE: subframe %d, nCCE %d\n",sf,ue->pdcch_vars[proc->subframe_rx&0x1][eNB_id]->nCCE[sf]);
 
     if (SR == 0)
-      return(frame_parms->pucch_config_common.n1PUCCH_AN + ue->pdcch_vars[eNB_id]->nCCE[sf]);
+      return(frame_parms->pucch_config_common.n1PUCCH_AN + ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[sf]);
     else
       return(ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
   } else {
@@ -746,7 +754,7 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
           last_dl);
 
       // i=0
-      nCCE0 = ue->pdcch_vars[eNB_id]->nCCE[last_dl];
+      nCCE0 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[last_dl];
       n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0+ frame_parms->pucch_config_common.n1PUCCH_AN;
 
       harq_ack0 = b[0];
@@ -788,18 +796,18 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
       // This is the offset for a particular subframe (2,3,4) => (0,2,4)
       last_dl = (subframe-2)<<1;
       // i=0
-      nCCE0 = ue->pdcch_vars[eNB_id]->nCCE[5+last_dl];
+      nCCE0 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[5+last_dl];
       n1_pucch0 = get_Np(frame_parms->N_RB_DL,nCCE0,0) + nCCE0+ frame_parms->pucch_config_common.n1PUCCH_AN;
       // i=1
-      nCCE1 = ue->pdcch_vars[eNB_id]->nCCE[(6+last_dl)%10];
+      nCCE1 = ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->nCCE[(6+last_dl)%10];
       n1_pucch1 = get_Np(frame_parms->N_RB_DL,nCCE1,1) + nCCE1 + frame_parms->pucch_config_common.n1PUCCH_AN;
 
       // set ACK/NAK to values if not DTX
-      if (ue->dlsch[eNB_id][0]->harq_ack[(6+last_dl)%10].send_harq_status>0)  // n-6 // subframe 6 is to be ACK/NAKed
-        harq_ack1 = ue->dlsch[eNB_id][0]->harq_ack[(6+last_dl)%10].ack;
+      if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(6+last_dl)%10].send_harq_status>0)  // n-6 // subframe 6 is to be ACK/NAKed
+        harq_ack1 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[(6+last_dl)%10].ack;
 
-      if (ue->dlsch[eNB_id][0]->harq_ack[5+last_dl].send_harq_status>0)  // n-6 // subframe 5 is to be ACK/NAKed
-        harq_ack0 = ue->dlsch[eNB_id][0]->harq_ack[5+last_dl].ack;
+      if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[5+last_dl].send_harq_status>0)  // n-6 // subframe 5 is to be ACK/NAKed
+        harq_ack0 = ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack[5+last_dl].ack;
 
 
       if (harq_ack1!=2) { // n-6 // subframe 6,8,0 and maybe 5,7,9 is to be ACK/NAKed
@@ -1202,7 +1210,8 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
   uint8_t ulsch_input_buffer[5477] __attribute__ ((aligned(32)));
   uint8_t access_mode;
   uint8_t Nbundled=0;
-  uint8_t ack_status=0;
+  uint8_t ack_status_cw0=0;
+  uint8_t ack_status_cw1=0;
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC,VCD_FUNCTION_IN);
 
@@ -1285,7 +1294,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
     }
 
     if (isBad) {
-      LOG_D(PHY,"Skip PUSCH generation!\n");
+      LOG_I(PHY,"Skip PUSCH generation!\n");
       ue->ulsch[eNB_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 0;
     }
   }
@@ -1303,11 +1312,16 @@ 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;
     }
     
-    ack_status = reset_ack(&ue->frame_parms,
-			 ue->dlsch[eNB_id][0]->harq_ack,
-			 subframe_tx,
-			 ue->ulsch[eNB_id]->o_ACK,0);
-    Nbundled = ack_status;
+    ack_status_cw0 = reset_ack(&ue->frame_parms,
+            ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack,
+            subframe_tx,
+            ue->ulsch[eNB_id]->o_ACK,0);
+    ack_status_cw1 = reset_ack(&ue->frame_parms,
+            ue->dlsch[proc->subframe_rx&0x1][eNB_id][1]->harq_ack,
+            subframe_tx,
+            ue->ulsch[eNB_id]->o_ACK,1);
+
+    Nbundled = ack_status_cw0;
     first_rb = ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb;
     nb_rb = ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb;
     
@@ -1315,24 +1329,24 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
     
     
 
-    if (ack_status > 0) {
+    if (ack_status_cw0 > 0) {
 
       // check if we received a PDSCH at subframe_tx - 4
       // ==> send ACK/NACK on PUSCH
-      ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK = 1;
+      ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK = ack_status_cw0 + ack_status_cw1;
 
 #if T_TRACER
     if(ue->ulsch[eNB_id]->o_ACK[0])
     {
     	LOG_I(PHY,"PUSCH ACK\n");
-        T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(Mod_id), T_INT(ue->dlsch[eNB_id][0]->rnti),
-                      T_INT(ue->dlsch[eNB_id][0]->current_harq_pid));
+        T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(Mod_id), T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti),
+                      T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->current_harq_pid));
     }
     else
     {
     	LOG_I(PHY,"PUSCH NACK\n");
-        T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(Mod_id), T_INT(ue->dlsch[eNB_id][0]->rnti),
-                      T_INT(ue->dlsch[eNB_id][0]->current_harq_pid));
+        T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(Mod_id), T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti),
+                      T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->current_harq_pid));
     }
 #endif
 
@@ -1346,8 +1360,8 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
 
 #ifdef DEBUG_PHY_PROC
         LOG_D(PHY,
-              "[UE  %d][PUSCH %d] AbsSubframe %d.%d Generating PUSCH : first_rb %d, nb_rb %d, round %d, mcs %d, rv %d, cyclic_shift %d (cyclic_shift_common %d,n_DMRS2 %d,n_PRS %d), ACK (%d,%d), O_ACK %d, bundling %d\n",
-	  Mod_id,harq_pid,frame_tx,subframe_tx,
+              "[UE  %d][PUSCH %d] AbsSubframe %d.%d %d Generating PUSCH : first_rb %d, nb_rb %d, round %d, mcs %d, rv %d, cyclic_shift %d (cyclic_shift_common %d,n_DMRS2 %d,n_PRS %d), ACK (%d,%d), O_ACK %d, bundling %d\n",
+	  Mod_id,harq_pid,frame_tx,subframe_tx,proc->subframe_rx,
 	  first_rb,nb_rb,
 	  ue->ulsch[eNB_id]->harq_processes[harq_pid]->round,
 	  ue->ulsch[eNB_id]->harq_processes[harq_pid]->mcs,
@@ -1391,18 +1405,20 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
 			   ue,
 			   harq_pid,
 			   eNB_id,
+			   proc->subframe_rx,
 			   ue->transmission_mode[eNB_id],0,0)!=0) {
 	  LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
 	  mac_xface->macphy_exit("Error in ulsch_coding");
 	  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
 	  stop_meas(&ue->phy_proc_tx);
+	  //printf("------FULL TX PROC : %5.2f ------\n",ue->phy_proc_tx.p_time/(cpuf*1000.0));
 	  return;
 	}
       }
       
 #ifdef PHY_ABSTRACTION
       else {
-	ulsch_encoding_emul(ue->prach_resources[eNB_id]->Msg3,ue,eNB_id,harq_pid,0);
+	ulsch_encoding_emul(ue->prach_resources[eNB_id]->Msg3,ue,eNB_id,proc->subframe_rx,harq_pid,0);
       }
       
 #endif
@@ -1462,6 +1478,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
 			   ue,
 			   harq_pid,
 			   eNB_id,
+			   proc->subframe_rx,
          ue->transmission_mode[eNB_id],0,
          Nbundled)!=0) {
 	  LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
@@ -1473,7 +1490,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
       
 #ifdef PHY_ABSTRACTION
       else {
-	ulsch_encoding_emul(ulsch_input_buffer,ue,eNB_id,harq_pid,0);
+	ulsch_encoding_emul(ulsch_input_buffer,ue,eNB_id,proc->subframe_rx,harq_pid,0);
       }
       
 #endif
@@ -1642,13 +1659,13 @@ void get_pucch_param(PHY_VARS_UE    *ue,
     {
         pucch_resource[0] = get_n1_pucch(ue,
                                          proc,
-                                         ue->dlsch[eNB_id][0]->harq_ack,
+                                         ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack,
                                          eNB_id,
                                          ack_payload,
                                          SR);
         pucch_payload[0]  = ack_payload[0];
-        //pucch_payload[1]  = ack_payload[1];
-        pucch_payload[1]  = 1;
+        pucch_payload[1]  = ack_payload[1];
+        //pucch_payload[1]  = 1;
     }
     break;
 
@@ -1657,7 +1674,7 @@ void get_pucch_param(PHY_VARS_UE    *ue,
         pucch_resource[0]    = ue->cqi_report_config[eNB_id].CQI_ReportPeriodic.cqi_PUCCH_ResourceIndex;
         if(cqi_report)
         {
-            pucch_payload[0] = get_pucch2_cqi(ue,eNB_id,plength);
+            pucch_payload[0] = get_pucch2_cqi(ue,eNB_id,(int*)plength);
         }
         else
         {
@@ -1678,14 +1695,12 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
 
 
   uint8_t  pucch_ack_payload[2];
-  uint8_t  n1_pucch,n2_pucch;
+  uint8_t  n2_pucch;
   uint16_t pucch_resource;
   ANFBmode_t bundling_flag;
   PUCCH_FMT_t format;
 
   uint8_t  SR_payload;
-  uint16_t CQI_payload;
-  uint16_t RI_payload;
   uint8_t  pucch_payload[2];
   uint16_t len;
 
@@ -1696,13 +1711,11 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
   int CC_id = ue->CC_id;
   int tx_amp;
   int16_t Po_PUCCH;
-  uint8_t ack_status=0;
   uint8_t ack_status_cw0=0;
   uint8_t ack_status_cw1=0;
   uint8_t nb_cw=0;
   uint8_t cqi_status=0;
   uint8_t ri_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);
   
@@ -1754,7 +1767,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
                   CC_id,
                   frame_tx,
                   eNB_id,
-                  ue->pdcch_vars[eNB_id]->crnti,
+                  ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->crnti,
                   subframe_tx); // subframe used for meas gap
       }
       else {
@@ -1763,13 +1776,13 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
   }
 
   ack_status_cw0 = reset_ack(&ue->frame_parms,
-                       ue->dlsch[eNB_id][0]->harq_ack,
+                       ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack,
                        subframe_tx,
                        pucch_ack_payload,
                        0);
 
   ack_status_cw1 = reset_ack(&ue->frame_parms,
-                       ue->dlsch[eNB_id][1]->harq_ack,
+                       ue->dlsch[proc->subframe_rx&0x1][eNB_id][1]->harq_ack,
                        subframe_tx,
                        pucch_ack_payload,
                        1);
@@ -1808,11 +1821,11 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
                   SR_payload,
                   cqi_status,
                   &pucch_resource,
-                  &pucch_payload,
+                  (uint8_t *)&pucch_payload,
                   &len);
 
   LOG_D(PHY,"PUCCH feedback AbsSubframe %d.%d SR %d NbCW %d AckNack %d.%d CQI %d RI %d format %d pucch_resource %d pucch_payload %d %d \n",
-		  frame_tx%1024, subframe_tx, SR_payload, nb_cw, pucch_ack_payload[0], pucch_ack_payload[1], cqi_status, ri_status, format, pucch_resource,pucch_payload[0],pucch_payload[1]);
+          frame_tx%1024, subframe_tx, SR_payload, nb_cw, pucch_ack_payload[0], pucch_ack_payload[1], cqi_status, ri_status, format, pucch_resource,pucch_payload[0],pucch_payload[1]);
 
 
   // Part - IV
@@ -1843,14 +1856,14 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
 #endif
 #if T_TRACER
       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[proc->subframe_rx&0x1][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
 #endif
       if(format == pucch_format1)
       {
           LOG_D(PHY,"[UE  %d][SR %x] AbsSubframe %d.%d Generating PUCCH 1 (SR for PUSCH), an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, Po_PUCCH %d\n",
                   Mod_id,
-                  ue->dlsch[eNB_id][0]->rnti,
-                  frame_tx, subframe_tx,
+                  ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
+                  frame_tx%1024, subframe_tx,
                   frame_parms->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission,
                   isShortenPucch,
                   ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex,
@@ -1861,7 +1874,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
           if (SR_payload>0) {
               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,
-                      ue->dlsch[eNB_id][0]->rnti,
+                      ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
                       frame_tx % 1024, subframe_tx,
                       (format == pucch_format1a? "1a": (
                               format == pucch_format1b? "1b" : "??")),
@@ -1874,7 +1887,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
           } else {
               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,
-                      ue->dlsch[eNB_id][0]->rnti,
+                      ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
                       frame_tx%1024, subframe_tx,ue->rx_offset_diff,
                       (format == pucch_format1a? "1a": (
                               format == pucch_format1b? "1b" : "??")),
@@ -1889,13 +1902,13 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
 #if T_TRACER
       if(pucch_payload[0])
       {
-          T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(Mod_id), T_INT(ue->dlsch[eNB_id][0]->rnti),
-                  T_INT(ue->dlsch[eNB_id][0]->current_harq_pid));
+          T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(Mod_id), T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti),
+                  T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->current_harq_pid));
       }
       else
       {
-          T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(Mod_id), T_INT(ue->dlsch[eNB_id][0]->rnti),
-                  T_INT(ue->dlsch[eNB_id][0]->current_harq_pid));
+          T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(Mod_id), T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti),
+                  T_INT(ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->current_harq_pid));
       }
 #endif
 
@@ -1948,12 +1961,12 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
 #endif
 #if T_TRACER
       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[proc->subframe_rx&0x1][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
 #endif
 
       LOG_D(PHY,"[UE  %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2 (RI or CQI), n2_pucch %d, Po_PUCCH %d, isShortenPucch %d, amp %d\n",
               Mod_id,
-              ue->dlsch[eNB_id][0]->rnti,
+              ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
               frame_tx%1024, subframe_tx,
               n2_pucch,
               Po_PUCCH,
@@ -1971,20 +1984,20 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
               0,            // B2 not needed
               tx_amp,
               subframe_tx,
-              ue->pdcch_vars[eNB_id]->crnti);
+              ue->pdcch_vars[proc->subframe_rx & 0x1][eNB_id]->crnti);
   }
   break;
 
   case pucch_format2a:
       LOG_I(PHY,"[UE  %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2a (RI or CQI) Ack/Nack 1bit \n",
               Mod_id,
-              ue->dlsch[eNB_id][0]->rnti,
+              ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
               frame_tx%1024, subframe_tx);
       break;
   case pucch_format2b:
       LOG_I(PHY,"[UE  %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2b (RI or CQI) Ack/Nack 2bits\n",
               Mod_id,
-              ue->dlsch[eNB_id][0]->rnti,
+              ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,
               frame_tx%1024, subframe_tx);
       break;
   default:
@@ -2081,6 +2094,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
 			   ue,
 			   harq_pid,
 			   eNB_id,
+			   proc->subframe_rx,
 			   ue->transmission_mode[eNB_id],0,
 			   0)!=0) {  //  Nbundled, to be updated!!!!
 	  LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
@@ -2090,7 +2104,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
 	    
 #ifdef PHY_ABSTRACTION
       else {
-	ulsch_encoding_emul(ulsch_input_buffer,ue,eNB_id,harq_pid,0);
+	ulsch_encoding_emul(ulsch_input_buffer,ue,eNB_id,proc->subframe_rx,harq_pid,0);
       }
 	    
 #endif
@@ -2125,12 +2139,14 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
   }
     
   // reset DL ACK/NACK status
-  reset_ack(&ue->frame_parms,
-             ue->dlsch[eNB_id][0]->harq_ack,
-             subframe_tx,
-             ue->ulsch[eNB_id]->o_ACK,0);
-
-  reset_ack(&ue->frame_parms,
+  if (ue->dlsch[proc->subframe_rx&0x1][eNB_id][0] != NULL)
+    reset_ack(&ue->frame_parms,
+               ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->harq_ack,
+               subframe_tx,
+               ue->ulsch[eNB_id]->o_ACK,0);
+
+  if (ue->dlsch_SI[eNB_id] != NULL)
+    reset_ack(&ue->frame_parms,
              ue->dlsch_SI[eNB_id]->harq_ack,
              subframe_tx,
              ue->ulsch[eNB_id]->o_ACK,0);
@@ -2323,8 +2339,8 @@ void phy_procedures_emos_UE_RX(PHY_VARS_UE *ue,uint8_t last_slot,uint8_t eNB_id)
     emos_dump_UE.total_TBS_last = ue->total_TBS_last[eNB_id];
     emos_dump_UE.bitrate = ue->bitrate[eNB_id];
     emos_dump_UE.total_received_bits = ue->total_received_bits[eNB_id];
-    emos_dump_UE.pmi_saved = ue->dlsch[eNB_id][0]->pmi_alloc;
-    emos_dump_UE.mcs = ue->dlsch[eNB_id][0]->harq_processes[ue->dlsch[eNB_id][0]->current_harq_pid]->mcs;
+    emos_dump_UE.pmi_saved = ue->dlsch[subframe&0x1][eNB_id][0]->pmi_alloc;
+    emos_dump_UE.mcs = ue->dlsch[subframe&0x1][eNB_id][0]->harq_processes[ue->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mcs;
     emos_dump_UE.use_ia_receiver = openair_daq_vars.use_ia_receiver;
 
     bytes = rtf_put(CHANSOUNDER_FIFO_MINOR, &emos_dump_UE, sizeof(fifo_dump_emos_UE));
@@ -2366,10 +2382,15 @@ void restart_phy(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uint8_t eNB_id,uint8_t ab
   ue->pbch_vars[eNB_id]->pdu_errors_conseq=0;
   ue->pbch_vars[eNB_id]->pdu_errors=0;
 
-  ue->pdcch_vars[eNB_id]->dci_errors = 0;
-  ue->pdcch_vars[eNB_id]->dci_missed = 0;
-  ue->pdcch_vars[eNB_id]->dci_false  = 0;
-  ue->pdcch_vars[eNB_id]->dci_received = 0;
+  ue->pdcch_vars[0][eNB_id]->dci_errors = 0;
+  ue->pdcch_vars[0][eNB_id]->dci_missed = 0;
+  ue->pdcch_vars[0][eNB_id]->dci_false  = 0;
+  ue->pdcch_vars[0][eNB_id]->dci_received = 0;
+
+  ue->pdcch_vars[1][eNB_id]->dci_errors = 0;
+  ue->pdcch_vars[1][eNB_id]->dci_missed = 0;
+  ue->pdcch_vars[1][eNB_id]->dci_false  = 0;
+  ue->pdcch_vars[1][eNB_id]->dci_received = 0;
 
   ue->dlsch_errors[eNB_id] = 0;
   ue->dlsch_errors_last[eNB_id] = 0;
@@ -2617,9 +2638,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
   if (abstraction_flag == 0)  {
 
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_IN);
-    rx_pdcch(&ue->common_vars,
-	     ue->pdcch_vars,
-	     &ue->frame_parms,
+    rx_pdcch(ue,
 	     proc->frame_rx,
 	     subframe_rx,
 	     eNB_id,
@@ -2665,14 +2684,14 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
     }
 
     LOG_D(PHY,"Calling dci_decoding_proc_emul ...\n");
-    dci_cnt = dci_decoding_procedure_emul(ue->pdcch_vars,
+    dci_cnt = dci_decoding_procedure_emul(ue->pdcch_vars[subframe_rx&1],
 					  PHY_vars_eNB_g[i][CC_id]->num_ue_spec_dci[subframe_rx&1],
 					  PHY_vars_eNB_g[i][CC_id]->num_common_dci[subframe_rx&1],
 					  PHY_vars_eNB_g[i][CC_id]->dci_alloc[subframe_rx&1],
 					  dci_alloc_rx,
 					  eNB_id);
     //    printf("DCI: dci_cnt %d\n",dci_cnt);
-    UE_id = (uint32_t)find_ue((int16_t)ue->pdcch_vars[eNB_id]->crnti,PHY_vars_eNB_g[i][CC_id]);
+    UE_id = (uint32_t)find_ue((int16_t)ue->pdcch_vars[subframe_rx&1][eNB_id]->crnti,PHY_vars_eNB_g[i][CC_id]);
 
     if (UE_id>=0) {
       //      printf("Checking PHICH for UE  %d (eNB %d)\n",UE_id,i);
@@ -2695,9 +2714,14 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
 #endif
 
 
-  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);
+  LOG_D(PHY,"[UE  %d] AbsSubFrame %d.%d, Mode %s: DCI found %i --> rnti %x / crnti %x : format %d\n",
+       ue->Mod_id,frame_rx%1024,subframe_rx,mode_string[ue->UE_mode[eNB_id]],
+       dci_cnt,
+       dci_alloc_rx[0].rnti,
+       ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti,
+       dci_alloc_rx[0].format );
 
-  ue->pdcch_vars[eNB_id]->dci_received += dci_cnt;
+  ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->dci_received += dci_cnt;
 
 #ifdef EMOS
   //emos_dump_UE.dci_cnt[subframe_rx] = dci_cnt;
@@ -2708,7 +2732,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
 
 
     if ((ue->UE_mode[eNB_id]>PRACH) &&
-	(dci_alloc_rx[i].rnti == ue->pdcch_vars[eNB_id]->crnti) &&
+	(dci_alloc_rx[i].rnti == ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti) &&
 	(dci_alloc_rx[i].format != format0)) {
       
 
@@ -2716,8 +2740,8 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
 	    ue->Mod_id,dci_alloc_rx[i].rnti,
 	    frame_rx%1024,subframe_rx,
 	    dci_alloc_rx[i].format,
-	    ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
-	    ue->pdcch_vars[eNB_id]->nCCE[subframe_rx],
+	    ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols,
+	    ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->nCCE[subframe_rx],
 	    get_nCCE(3,&ue->frame_parms,get_mi(&ue->frame_parms,0)));
 
 
@@ -2729,16 +2753,16 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
 	  (generate_ue_dlsch_params_from_dci(frame_rx,
 					     subframe_rx,
 					     (void *)&dci_alloc_rx[i].dci_pdu,
-					     ue->pdcch_vars[eNB_id]->crnti,
+					     ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti,
 					     dci_alloc_rx[i].format,
-					     ue->dlsch[eNB_id],
+					     ue->dlsch[subframe_rx&0x1][eNB_id],
 					     &ue->frame_parms,
 					     ue->pdsch_config_dedicated,
 					     SI_RNTI,
 					     0,
 					     P_RNTI,
 					     ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id],
-					     ue->pdcch_vars[eNB_id]->crnti_is_temporary? ue->pdcch_vars[eNB_id]->crnti: 0)==0)) {
+					     ue->pdcch_vars[0&0x1][eNB_id]->crnti_is_temporary? ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti: 0)==0)) {
 
           // update TPC for PUCCH
           if((dci_alloc_rx[i].format == format1)   ||
@@ -2748,7 +2772,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
               (dci_alloc_rx[i].format == format2A) ||
               (dci_alloc_rx[i].format == format2B))
           {
-            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[subframe_rx&0x1][eNB_id][0]->g_pucch += ue->dlsch[subframe_rx&0x1][eNB_id][0]->harq_processes[ue->dlsch[subframe_rx&0x1][eNB_id][0]->current_harq_pid]->delta_PUCCH;
           }
 
 	ue->dlsch_received[eNB_id]++;
@@ -2756,13 +2780,13 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
 #ifdef DEBUG_PHY_PROC
 	LOG_D(PHY,"[UE  %d] Generated UE DLSCH C_RNTI format %d\n",ue->Mod_id,dci_alloc_rx[i].format);
 	dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
-	LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d=> %d\n",ue->Mod_id,subframe_rx,ue->dlsch[eNB_id][0]->active);
+	LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d=> %d\n",ue->Mod_id,subframe_rx,ue->dlsch[subframe_rx&0x1][eNB_id][0]->active);
 #endif
 	
 	// we received a CRNTI, so we're in PUSCH
 	if (ue->UE_mode[eNB_id] != PUSCH) {
 #ifdef DEBUG_PHY_PROC
-	  LOG_D(PHY,"[UE  %d] Frame %d, subframe %d: Received DCI with CRNTI %x => Mode PUSCH\n",ue->Mod_id,frame_rx,subframe_rx,ue->pdcch_vars[eNB_id]->crnti);
+	  LOG_D(PHY,"[UE  %d] Frame %d, subframe %d: Received DCI with CRNTI %x => Mode PUSCH\n",ue->Mod_id,frame_rx,subframe_rx,ue->pdcch_vars[subframe_rx&1][eNB_id]->crnti);
 #endif
 	  //dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
 	  ue->UE_mode[eNB_id] = PUSCH;
@@ -2870,7 +2894,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
 	      ue->Mod_id,ue->dlsch_ra[eNB_id]->harq_processes[0]->rb_alloc_even[0],ue->dlsch_ra[eNB_id]);
 #endif
       }
-    } else if( (dci_alloc_rx[i].rnti == ue->pdcch_vars[eNB_id]->crnti) &&
+    } else if( (dci_alloc_rx[i].rnti == ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti) &&
 	       (dci_alloc_rx[i].format == format0)) {
 #ifdef DEBUG_PHY_PROC
       LOG_D(PHY,"[UE  %d][PUSCH] Frame %d subframe %d: Found rnti %x, format 0, dci_cnt %d\n",
@@ -2882,7 +2906,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
 
       if ((ue->UE_mode[eNB_id] > PRACH) &&
 	  (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu,
-					     ue->pdcch_vars[eNB_id]->crnti,
+					     ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti,
 					     subframe_rx,
 					     format0,
 					     ue,
@@ -2953,7 +2977,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
     else {
 #ifdef DEBUG_PHY_PROC
       LOG_D(PHY,"[UE  %d] frame %d, subframe %d: received DCI %d with RNTI=%x (C-RNTI:%x, CBA_RNTI %x) and format %d!\n",ue->Mod_id,frame_rx,subframe_rx,i,dci_alloc_rx[i].rnti,
-	    ue->pdcch_vars[eNB_id]->crnti,
+	    ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti,
 	    ue->ulsch[eNB_id]->cba_rnti[0],
 	    dci_alloc_rx[i].format);
       //      dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
@@ -3134,7 +3158,14 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, PDSC
 	dual_stream_UE = 1;
 	eNB_id_i = ue->n_connected_eNB;
 	i_mod =  dlsch0->harq_processes[harq_pid]->Qm;
-      } else {
+      }
+      else if((pdsch==PDSCH) && (ue->transmission_mode[eNB_id]==3))
+      {
+          dual_stream_UE = rx_IC_dual_stream;
+          eNB_id_i       = eNB_id;
+          i_mod          = 0;
+      }
+      else {
 	dual_stream_UE = 0;
 	eNB_id_i = eNB_id+1;
 	i_mod = 0;
@@ -3202,21 +3233,23 @@ void process_rar(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, runmode_t mo
 						 frame_rx,
 						 ue->prach_resources[eNB_id]->ra_RNTI,
 						 dlsch0->harq_processes[0]->b,
-						 &ue->pdcch_vars[eNB_id]->crnti,
+						 &ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti,
 						 ue->prach_resources[eNB_id]->ra_PreambleIndex);
+
+      ue->pdcch_vars[(subframe_rx+1) & 0x1][eNB_id]->crnti = ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti;
       
 	    
       if (timing_advance!=0xffff) {
 	      
-	LOG_D(PHY,"[UE  %d][RAPROC] Frame %d subframe %d Got rnti %x and timing advance %d from RAR\n",
-	      ue->Mod_id,
-	      frame_rx,
-	      subframe_rx,
-	      ue->pdcch_vars[eNB_id]->crnti,
-	      timing_advance);
+	      LOG_D(PHY,"[UE  %d][RAPROC] Frame %d subframe %d Got rnti %x and timing advance %d from RAR\n",
+              ue->Mod_id,
+              frame_rx,
+              subframe_rx,
+              ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti,
+              timing_advance);
 	      
   // remember this c-rnti is still a tc-rnti
-  ue->pdcch_vars[eNB_id]->crnti_is_temporary = 1;	     
+  ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->crnti_is_temporary = 1;
 	      
 	//timing_advance = 0;
 	process_timing_advance_rar(ue,proc,timing_advance);
@@ -3273,11 +3306,34 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
   int harq_pid;
   int frame_rx = proc->frame_rx;
   int subframe_rx = proc->subframe_rx;
-  int ret=0;
+  int ret=0, ret1=0;
   int CC_id = ue->CC_id;
   LTE_UE_PDSCH *pdsch_vars;
+  uint8_t is_cw0_active = 0;
+  uint8_t is_cw1_active = 0;
 
-  if (dlsch0 && (!dlsch1)) {
+  if (dlsch0==NULL)
+      AssertFatal(0,"dlsch0 should be defined at this level \n");
+
+  harq_pid = dlsch0->current_harq_pid;
+  is_cw0_active = dlsch0->harq_processes[harq_pid]->status;
+
+  if(dlsch1)
+    is_cw1_active = dlsch1->harq_processes[harq_pid]->status;
+
+  LOG_D(PHY,"AbsSubframe %d.%d Start Turbo Decoder for CW0 [harq_pid %d] ? %d \n", frame_rx%1024, subframe_rx, harq_pid, is_cw0_active);
+  LOG_D(PHY,"AbsSubframe %d.%d Start Turbo Decoder for CW1 [harq_pid %d] ? %d \n", frame_rx%1024, subframe_rx, harq_pid, is_cw1_active);
+
+  if(is_cw0_active && is_cw1_active)
+  {
+      dlsch0->Kmimo = 2;
+      dlsch1->Kmimo = 2;
+  }
+  else
+  {
+      dlsch0->Kmimo = 1;
+  }
+  if (1) {
     switch (pdsch) {
     case SI_PDSCH:
       pdsch_vars = ue->pdsch_vars_SI[eNB_id];
@@ -3303,8 +3359,6 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
       break;
 
     }
-  
-    harq_pid = dlsch0->current_harq_pid;
 
     if (frame_rx < *dlsch_errors)
       *dlsch_errors=0;
@@ -3321,12 +3375,13 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
 
     if (abstraction_flag == 0) {
 
+      // start turbo decode for CW 0
       dlsch0->harq_processes[harq_pid]->G = get_G(&ue->frame_parms,
 						  dlsch0->harq_processes[harq_pid]->nb_rb,
 						  dlsch0->harq_processes[harq_pid]->rb_alloc_even,
 						  dlsch0->harq_processes[harq_pid]->Qm,
 						  dlsch0->harq_processes[harq_pid]->Nl,
-						  ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+						  ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols,
 						  frame_rx,
 						  subframe_rx,
 						  ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
@@ -3339,8 +3394,19 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
 			 0,
 			 subframe_rx<<1);
       stop_meas(&ue->dlsch_unscrambling_stats);
-      
-      start_meas(&ue->dlsch_decoding_stats);
+
+#if 0
+      LOG_I(PHY," ------ start turbo decoder for AbsSubframe %d.%d / %d  ------  \n", frame_rx, subframe_rx, harq_pid);
+      LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> nb_rb %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->nb_rb);
+      LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d  --> rb_alloc_even %x \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->rb_alloc_even);
+      LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d  --> Qm %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->Qm);
+      LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d  --> Nl %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->Nl);
+      LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d  --> G  %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->G);
+      LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d  --> Kmimo  %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->Kmimo);
+      LOG_I(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d  --> Pdcch Sym  %d \n", frame_rx, subframe_rx, harq_pid, ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols);
+#endif
+
+      start_meas(&ue->dlsch_decoding_stats[subframe_rx&0x1]);
       ret = dlsch_decoding(ue,
 			   pdsch_vars->llr[0],
 			   &ue->frame_parms,
@@ -3351,7 +3417,69 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
 			   harq_pid,
 			   pdsch==PDSCH?1:0,
 			   dlsch0->harq_processes[harq_pid]->TBS>256?1:0);
-      stop_meas(&ue->dlsch_decoding_stats);
+      stop_meas(&ue->dlsch_decoding_stats[subframe_rx&0x1]);
+
+      LOG_D(PHY," --> Unscrambling for CW0 %5.3f\n",
+              (ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0));
+      LOG_D(PHY,"AbsSubframe %d.%d --> Turbo Decoding for CW0 %5.3f\n",
+              frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[subframe_rx&0x1].p_time)/(cpuf*1000.0));
+
+
+      if(is_cw1_active)
+      {
+          // start turbo decode for CW 1
+          dlsch1->harq_processes[harq_pid]->G = get_G(&ue->frame_parms,
+                  dlsch1->harq_processes[harq_pid]->nb_rb,
+                  dlsch1->harq_processes[harq_pid]->rb_alloc_even,
+                  dlsch1->harq_processes[harq_pid]->Qm,
+                  dlsch1->harq_processes[harq_pid]->Nl,
+                  ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols,
+                  frame_rx,
+                  subframe_rx,
+                  ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
+
+          start_meas(&ue->dlsch_unscrambling_stats);
+          dlsch_unscrambling(&ue->frame_parms,
+                  0,
+                  dlsch1,
+                  dlsch1->harq_processes[harq_pid]->G,
+                  pdsch_vars->llr[1],
+                  1,
+                  subframe_rx<<1);
+          stop_meas(&ue->dlsch_unscrambling_stats);
+
+#if 0
+          LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> nb_rb %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->nb_rb);
+          LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d  --> rb_alloc_even %x \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->rb_alloc_even);
+          LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d  --> Qm %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->Qm);
+          LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d  --> Nl %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->Nl);
+          LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d  --> G  %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->G);
+          LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d  --> Kmimo  %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->Kmimo);
+          LOG_I(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d  --> Pdcch Sym  %d \n", frame_rx, subframe_rx, harq_pid, ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols);
+#endif
+
+          start_meas(&ue->dlsch_decoding_stats[subframe_rx&0x1]);
+
+          ret1 = dlsch_decoding(ue,
+                  pdsch_vars->llr[1],
+                  &ue->frame_parms,
+                  dlsch1,
+                  dlsch1->harq_processes[harq_pid],
+                  frame_rx,
+                  subframe_rx,
+                  harq_pid,
+                  pdsch==PDSCH?1:0,
+                  dlsch1->harq_processes[harq_pid]->TBS>256?1:0);
+          stop_meas(&ue->dlsch_decoding_stats[subframe_rx&0x1]);
+
+
+          LOG_D(PHY," --> Unscrambling for CW1 %5.3f\n",
+                  (ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0));
+          LOG_D(PHY,"AbsSubframe %d.%d --> Turbo Decoding for CW1 %5.3f\n",
+                  frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[subframe_rx&0x1].p_time)/(cpuf*1000.0));
+      }
+
+      LOG_D(PHY," ------ end turbo decoder for AbsSubframe %d.%d ------  \n", frame_rx, subframe_rx);
     }
 	
     else {
@@ -3364,15 +3492,17 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
 #endif
     }
 	
+    // Check CRC for CW 0
     if (ret == (1+dlsch0->max_turbo_iterations)) {
       *dlsch_errors=*dlsch_errors+1;
       
       if(dlsch0->rnti != 0xffff)
       {
-      LOG_D(PHY,"[UE  %d][PDSCH %x/%d] Frame %d subframe %d DLSCH in error (rv %d,mcs %d,TBS %d)\n",
+      LOG_D(PHY,"[UE  %d][PDSCH %x/%d] AbsSubframe %d.%d : DLSCH CW0 in error (rv %d,round %d, mcs %d,TBS %d)\n",
 	    ue->Mod_id,dlsch0->rnti,
 	    harq_pid,frame_rx,subframe_rx,
 	    dlsch0->harq_processes[harq_pid]->rvidx,
+        dlsch0->harq_processes[harq_pid]->round,
 	    dlsch0->harq_processes[harq_pid]->mcs,
 	    dlsch0->harq_processes[harq_pid]->TBS);
       }
@@ -3381,10 +3511,11 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
     } else {
         if(dlsch0->rnti != 0xffff)
         {
-      LOG_D(PHY,"[UE  %d][PDSCH %x/%d] Frame %d subframe %d: Received DLSCH (rv %d,mcs %d,TBS %d)\n",
+      LOG_D(PHY,"[UE  %d][PDSCH %x/%d] AbsSubframe %d.%d : Received DLSCH CW0 (rv %d,round %d, mcs %d,TBS %d)\n",
 	    ue->Mod_id,dlsch0->rnti,
 	    harq_pid,frame_rx,subframe_rx,
 	    dlsch0->harq_processes[harq_pid]->rvidx,
+        dlsch0->harq_processes[harq_pid]->round,
 	    dlsch0->harq_processes[harq_pid]->mcs,
 	    dlsch0->harq_processes[harq_pid]->TBS);
         }
@@ -3446,6 +3577,49 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
 	dlsch0->harq_processes[dlsch0->current_harq_pid]->TBS;
     }
   
+    // Check CRC for CW 1
+    if(is_cw1_active)
+    {
+        if (ret1 == (1+dlsch0->max_turbo_iterations)) {
+            LOG_I(PHY,"[UE  %d][PDSCH %x/%d] Frame %d subframe %d DLSCH CW1 in error (rv %d,mcs %d,TBS %d)\n",
+                    ue->Mod_id,dlsch0->rnti,
+                    harq_pid,frame_rx,subframe_rx,
+                    dlsch0->harq_processes[harq_pid]->rvidx,
+                    dlsch0->harq_processes[harq_pid]->mcs,
+                    dlsch0->harq_processes[harq_pid]->TBS);
+
+        } else {
+            LOG_I(PHY,"[UE  %d][PDSCH %x/%d] Frame %d subframe %d: Received DLSCH CW1 (rv %d,mcs %d,TBS %d)\n",
+                    ue->Mod_id,dlsch0->rnti,
+                    harq_pid,frame_rx,subframe_rx,
+                    dlsch0->harq_processes[harq_pid]->rvidx,
+                    dlsch0->harq_processes[harq_pid]->mcs,
+                    dlsch0->harq_processes[harq_pid]->TBS);
+
+
+            if (ue->mac_enabled == 1) {
+                switch (pdsch) {
+                case PDSCH:
+                    if(is_cw1_active)
+                        mac_xface->ue_send_sdu(ue->Mod_id,
+                                CC_id,
+                                frame_rx,
+                                subframe_rx,
+                                dlsch1->harq_processes[dlsch1->current_harq_pid]->b,
+                                dlsch1->harq_processes[dlsch1->current_harq_pid]->TBS>>3,
+                                eNB_id);
+                    break;
+                case SI_PDSCH:
+                case P_PDSCH:
+                case RA_PDSCH:
+                case PDSCH1:
+                case PMCH:
+                    AssertFatal(0,"exiting");
+                    break;
+                }
+            }
+        }
+    }
   
       
 #ifdef DEBUG_PHY_PROC
@@ -3494,16 +3668,20 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
     T_BUFFER(&ue->common_vars.rxdata[0][subframe_rx*ue->frame_parms.samples_per_tti],
              ue->frame_parms.samples_per_tti * 4));
 
-  start_meas(&ue->phy_proc_rx);
+  // start timers
+
+  LOG_D(PHY," ****** start RX-Chain for AbsSubframe %d.%d ******  \n", frame_rx%1024, subframe_rx);
+  start_meas(&ue->phy_proc_rx[subframe_rx&0x1]);
+  start_meas(&ue->generic_stat);
 
   pmch_flag = is_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms) ? 1 : 0;
 
 
   // deactivate reception until we scan pdcch
-  if (ue->dlsch[eNB_id][0])
-    ue->dlsch[eNB_id][0]->active = 0;
-  if (ue->dlsch[eNB_id][1])
-    ue->dlsch[eNB_id][1]->active = 0;
+  if (ue->dlsch[subframe_rx&0x1][eNB_id][0])
+    ue->dlsch[subframe_rx&0x1][eNB_id][0]->active = 0;
+  if (ue->dlsch[subframe_rx&0x1][eNB_id][1])
+    ue->dlsch[subframe_rx&0x1][eNB_id][1]->active = 0;
 
   if (ue->dlsch_SI[eNB_id])
     ue->dlsch_SI[eNB_id]->active = 0;
@@ -3546,6 +3724,9 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
     //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     l=1;
   }
+
+  LOG_D(PHY," ------ slot 0 Processing: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+  LOG_D(PHY," ------  --> FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
   for (; l<=l2; l++) {
     if (abstraction_flag == 0) {
       start_meas(&ue->ofdm_demod_stats);
@@ -3569,12 +3750,13 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
 	LOG_E(PHY,"[UE  %d] Frame %d, subframe %d: Error in pdcch procedures\n",ue->Mod_id,frame_rx,subframe_rx);
 	return(-1);
       }
-      LOG_D(PHY,"num_pdcch_symbols %d\n",ue->pdcch_vars[eNB_id]->num_pdcch_symbols);
+      LOG_D(PHY,"num_pdcch_symbols %d\n",ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols);
     }
     
   } // for l=1..l2
   ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode); 
   
+  LOG_D(PHY," ------  end FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
     // If this is PMCH, call procedures and return
   if (pmch_flag == 1) {
     ue_pmch_procedures(ue,proc,eNB_id,abstraction_flag);
@@ -3589,21 +3771,27 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
 	   0);
 
   // first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH)
- 
+  stop_meas(&ue->generic_stat);
+  LOG_D(PHY,"[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
+  LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+
+  start_meas(&ue->generic_stat);
   // do procedures for C-RNTI
-  if (ue->dlsch[eNB_id][0]->active == 1) {
+  if (ue->dlsch[subframe_rx&0x1][eNB_id][0]->active == 1) {
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
     ue_pdsch_procedures(ue,
 			proc,
 			eNB_id,
 			PDSCH,
-			ue->dlsch[eNB_id][0],
+			ue->dlsch[subframe_rx&0x1][eNB_id][0],
 			NULL,
-			ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+			ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols,
 			ue->frame_parms.symbols_per_tti>>1,
 			abstraction_flag);
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
   }
+
+  LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
   // do procedures for SI-RNTI
   if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) {
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_IN);
@@ -3613,7 +3801,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
 			SI_PDSCH,
 			ue->dlsch_SI[eNB_id],
 			NULL,
-			ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+			ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols,
 			ue->frame_parms.symbols_per_tti>>1,
 			abstraction_flag);
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_OUT);
@@ -3628,7 +3816,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
 			P_PDSCH,
 			ue->dlsch_p[eNB_id],
 			NULL,
-			ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+			ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols,
 			ue->frame_parms.symbols_per_tti>>1,
 			abstraction_flag);
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_P, VCD_FUNCTION_OUT);
@@ -3643,12 +3831,15 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
 			RA_PDSCH,
 			ue->dlsch_ra[eNB_id],
 			NULL,
-			ue->pdcch_vars[eNB_id]->num_pdcch_symbols,
+			ue->pdcch_vars[subframe_rx & 0x1][eNB_id]->num_pdcch_symbols,
 			ue->frame_parms.symbols_per_tti>>1,
 			abstraction_flag);
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_OUT);
   }    
   
+  LOG_D(PHY," ------ slot 1 Processing: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+  LOG_D(PHY," ------  --> FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+
   if (subframe_select(&ue->frame_parms,subframe_rx) != SF_S) {  // do front-end processing for second slot, and first symbol of next subframe
     for (l=1; l<ue->frame_parms.symbols_per_tti>>1; l++) {
       if (abstraction_flag == 0) {
@@ -3681,35 +3872,54 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
     }
   } // not an S-subframe
 
-  // run pbch procedures if subframe is 0
-  if (subframe_rx == 0)
+  stop_meas(&ue->generic_stat);
+
+  LOG_D(PHY,"[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
+  LOG_D(PHY," ------  end FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+
+  if ( (subframe_rx == 0) && (ue->decode_MIB == 1))
+  {
     ue_pbch_procedures(eNB_id,ue,proc,abstraction_flag);
+  }
    
   // do procedures for C-RNTI
-  if (ue->dlsch[eNB_id][0]->active == 1) {
+  LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+  if (ue->dlsch[subframe_rx&0x1][eNB_id][0]->active == 1) {
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
+    start_meas(&ue->pdsch_procedures_stat);
     ue_pdsch_procedures(ue,
 			proc,
 			eNB_id,
 			PDSCH,
-			ue->dlsch[eNB_id][0],
+			ue->dlsch[subframe_rx&0x1][eNB_id][0],
 			NULL,
 			1+(ue->frame_parms.symbols_per_tti>>1),
 			ue->frame_parms.symbols_per_tti-1,
 			abstraction_flag);
+    stop_meas(&ue->pdsch_procedures_stat);
+
+    LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    LOG_D(PHY," ------ --> PDSCH Turbo Decoder slot 0/1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+
+    start_meas(&ue->dlsch_procedures_stat);
     ue_dlsch_procedures(ue,
 			proc,
 			eNB_id,
 			PDSCH,
-			ue->dlsch[eNB_id][0],
-			NULL,
+			ue->dlsch[subframe_rx&0x1][eNB_id][0],
+			ue->dlsch[subframe_rx&0x1][eNB_id][1],
 			&ue->dlsch_errors[eNB_id],
 			mode,
 			abstraction_flag);
+    stop_meas(&ue->dlsch_procedures_stat);
+    LOG_D(PHY,"[SFN %d] Slot1:       Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat.p_time/(cpuf*1000.0));
+    LOG_D(PHY,"[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat.p_time/(cpuf*1000.0));
+
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
 
   }
 
+  start_meas(&ue->generic_stat);
   // do procedures for SI-RNTI
   if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) {
     ue_pdsch_procedures(ue,
@@ -3804,7 +4014,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
 
   }
 
-
+  stop_meas(&ue->generic_stat);
+  //printf("after tubo until end of Rx %5.2f \n",ue->generic_stat.p_time/(cpuf*1000.0));
 
 #ifdef EMOS
   phy_procedures_emos_UE_RX(ue,slot,eNB_id);
@@ -3812,7 +4023,10 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
 
      
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
-  stop_meas(&ue->phy_proc_rx);
+  stop_meas(&ue->phy_proc_rx[subframe_rx&0x1]);
+
+  LOG_D(PHY,"------FULL RX PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->phy_proc_rx[subframe_rx&0x1].p_time/(cpuf*1000.0));
+  LOG_D(PHY," ****** end RX-Chain  for AbsSubframe %d.%d ******  \n", frame_rx%1024, subframe_rx);
   return (0);
 }
    
diff --git a/openair1/SCHED/pucch_pc.c b/openair1/SCHED/pucch_pc.c
index 5bc03bb58de4f8e0653410e68e091d05cb6780dc..ae831238622a91fef15d58e9be8d7d0f65ae28a5 100644
--- a/openair1/SCHED/pucch_pc.c
+++ b/openair1/SCHED/pucch_pc.c
@@ -51,7 +51,7 @@ int16_t pucch_power_cntl(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t subframe,u
 
   Po_PUCCH = get_PL(ue->Mod_id,ue->CC_id,eNB_id)+
     ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH+
-    ue->dlsch[eNB_id][0]->g_pucch;
+    ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->g_pucch;
 
   switch (pucch_fmt) {
   case pucch_format1:
@@ -90,19 +90,19 @@ int16_t pucch_power_cntl(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t subframe,u
   if (pucch_fmt!=pucch_format1) {
     LOG_D(PHY,"[UE  %d][PDSCH %x] AbsSubframe %d.%d: Po_PUCCH %d dBm : Po_NOMINAL_PUCCH %d dBm, PL %d dB, g_pucch %d dB\n",
           ue->Mod_id,
-          ue->dlsch[eNB_id][0]->rnti,proc->frame_tx%1024,subframe,
+          ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,proc->frame_tx%1024,subframe,
           Po_PUCCH,
           ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
           get_PL(ue->Mod_id,ue->CC_id,eNB_id),
-          ue->dlsch[eNB_id][0]->g_pucch);
+          ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->g_pucch);
   } else {
     LOG_D(PHY,"[UE  %d][SR %x] AbsSubframe %d.%d: Po_PUCCH %d dBm : Po_NOMINAL_PUCCH %d dBm, PL %d dB g_pucch %d dB\n",
           ue->Mod_id,
-          ue->dlsch[eNB_id][0]->rnti,proc->frame_tx%1024,subframe,
+          ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->rnti,proc->frame_tx%1024,subframe,
           Po_PUCCH,
           ue->frame_parms.ul_power_control_config_common.p0_NominalPUCCH,
           get_PL(ue->Mod_id,ue->CC_id,eNB_id),
-          ue->dlsch[eNB_id][0]->g_pucch);
+          ue->dlsch[proc->subframe_rx&0x1][eNB_id][0]->g_pucch);
   }
 
   return(Po_PUCCH);
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c b/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c
index 6d3d4cabb35aacee0ce5e3e71bce097751430581..76b72e321f304901ac38c0d0e2cf72fbd3a8c460 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c
+++ b/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c
@@ -488,7 +488,8 @@ void fill_phy_ue_vars(unsigned int ue_id, uint8_t CC_id,unsigned int last_slot)
     rnti = UE_transport_info[ue_id][CC_id].rnti[n_enb];
     enb_id = UE_transport_info[ue_id][CC_id].eNB_id[n_enb];
 
-    PHY_vars_UE_g[ue_id][CC_id]->pdcch_vars[enb_id]->crnti=rnti;
+    PHY_vars_UE_g[ue_id][CC_id]->pdcch_vars[0][enb_id]->crnti=rnti;
+    PHY_vars_UE_g[ue_id][CC_id]->pdcch_vars[1][enb_id]->crnti=rnti;
 
     harq_pid = UE_transport_info[ue_id][CC_id].harq_pid[n_enb];
 
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c
index af39d92a6b64c6430486fd33b5f159a2a8e01ad5..6acfc646c7e5adef0ba00b96b08a4f1ba2d3053e 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim.c
@@ -57,6 +57,8 @@
 PHY_VARS_eNB *eNB;
 PHY_VARS_UE *UE;
 
+double cpuf;
+
 int otg_enabled=0;
 /*the following parameters are used to control the processing times calculations*/
 double t_tx_max = -1000000000; /*!< \brief initial max process time for tx */
@@ -1409,6 +1411,8 @@ int main(int argc, char **argv)
 #endif
   printf("Detected cpu_freq %f GHz\n",cpu_freq_GHz);
 
+  cpuf = cpu_freq_GHz;
+
   //signal(SIGSEGV, handler);
   //signal(SIGABRT, handler);
 
@@ -1991,7 +1995,7 @@ int main(int argc, char **argv)
     }
   */
 
-  UE->pdcch_vars[0]->crnti = n_rnti;
+  UE->pdcch_vars[0][0]->crnti = n_rnti;
 
   // Fill in UL_alloc
   UL_alloc_pdu.type    = 0;
@@ -2098,14 +2102,14 @@ int main(int argc, char **argv)
   }
 
   for (i=0; i<2; i++) {
-    UE->dlsch[0][i]  = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0);
+    UE->dlsch[subframe&0x1][0][i]  = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0);
 
-    if (!UE->dlsch[0][i]) {
+    if (!UE->dlsch[subframe&0x1][0][i]) {
       printf("Can't get ue dlsch structures\n");
       exit(-1);
     }
 
-    UE->dlsch[0][i]->rnti   = n_rnti;
+    UE->dlsch[subframe&0x1][0][i]->rnti   = n_rnti;
   }
 
     UE->dlsch_SI[0]  = new_ue_dlsch(1,1,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0);
@@ -2254,12 +2258,13 @@ int main(int argc, char **argv)
       reset_meas(&eNB->dlsch_rate_matching_stats);
       reset_meas(&eNB->dlsch_turbo_encoding_stats);
 
-      reset_meas(&UE->phy_proc_rx); // total UE rx
+      reset_meas(&UE->phy_proc_rx[subframe&0x1]); // total UE rx
       reset_meas(&UE->ofdm_demod_stats);
       reset_meas(&UE->dlsch_channel_estimation_stats);
       reset_meas(&UE->dlsch_freq_offset_estimation_stats);
       reset_meas(&UE->rx_dft_stats);
-      reset_meas(&UE->dlsch_decoding_stats);
+      reset_meas(&UE->dlsch_decoding_stats[0]);
+      reset_meas(&UE->dlsch_decoding_stats[1]);
       reset_meas(&UE->dlsch_turbo_decoding_stats);
       reset_meas(&UE->dlsch_deinterleaving_stats);
       reset_meas(&UE->dlsch_rate_unmatching_stats);
@@ -2488,7 +2493,7 @@ int main(int argc, char **argv)
 	  if (n_frames==1) printf("Running phy_procedures_UE_RX\n");
 	  phy_procedures_UE_RX(UE,proc,0,0,normal_txrx,no_relay,NULL);
 
-	  if (UE->dlsch[0][0]->active == 0) {
+	  if (UE->dlsch[subframe&0x1][0][0]->active == 0) {
 	    //printf("DCI not received\n");
 	    /*
 	    write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1);
@@ -2543,16 +2548,16 @@ int main(int argc, char **argv)
 
 	    //pdsch_vars
 
-	    dump_dlsch2(UE,eNB_id,subframe,coded_bits_per_codeword,round, UE->dlsch[0][0]->current_harq_pid);
+	    dump_dlsch2(UE,eNB_id,subframe,&coded_bits_per_codeword,round, UE->dlsch[subframe&0x1][0][0]->current_harq_pid);
 
 	    write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
 
 	    //pdcch_vars
-	    write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1);
-	    write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[eNB_id]->dl_ch_estimates_ext[0],300*3,1,1);
+	    write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[0][eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1);
+	    write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[0][eNB_id]->dl_ch_estimates_ext[0],300*3,1,1);
 
-	    write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[eNB_id]->rxdataF_comp[0],4*300,1,1);
-	    write_output("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[eNB_id]->llr,2400,1,4);
+	    write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[0][eNB_id]->rxdataF_comp[0],4*300,1,1);
+	    write_output("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[0][eNB_id]->llr,2400,1,4);
 
 	  }
 
@@ -2561,13 +2566,13 @@ int main(int argc, char **argv)
 
           if (UE->dlsch_errors[0] == 0) {
 
-            avg_iter += UE->dlsch[eNB_id][0]->last_iteration_cnt;
+            avg_iter += UE->dlsch[subframe&0x1][eNB_id][0]->last_iteration_cnt;
             iter_trials++;
 
             if (n_frames==1)
               printf("No DLSCH errors found (round %d),uncoded ber %f\n",round,uncoded_ber);
 
-            UE->total_TBS[eNB_id] =  UE->total_TBS[eNB_id] + UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->TBS;
+            UE->total_TBS[eNB_id] =  UE->total_TBS[eNB_id] + UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->TBS;
             TB0_active = 0;
 
 
@@ -2575,25 +2580,25 @@ int main(int argc, char **argv)
 	  else {
             errs[round]++;
 
-            avg_iter += UE->dlsch[eNB_id][0]->last_iteration_cnt-1;
+            avg_iter += UE->dlsch[subframe&0x1][eNB_id][0]->last_iteration_cnt-1;
             iter_trials++;
 
             if (n_frames==1) {
               //if ((n_frames==1) || (SNR>=30)) {
               printf("DLSCH errors found (round %d), uncoded ber %f\n",round,uncoded_ber);
 
-              for (s=0; s<UE->dlsch[0][0]->harq_processes[0]->C; s++) {
-                if (s<UE->dlsch[0][0]->harq_processes[0]->Cminus)
-                  Kr = UE->dlsch[0][0]->harq_processes[0]->Kminus;
+              for (s=0; s<UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->C; s++) {
+                if (s<UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Cminus)
+                  Kr = UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kminus;
                 else
-                  Kr = UE->dlsch[0][0]->harq_processes[0]->Kplus;
+                  Kr = UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kplus;
 
                 Kr_bytes = Kr>>3;
 
                 printf("Decoded_output (Segment %d):\n",s);
 
                 for (i=0; i<Kr_bytes; i++)
-                  printf("%d : %x (%x)\n",i,UE->dlsch[0][0]->harq_processes[0]->c[s][i],UE->dlsch[0][0]->harq_processes[0]->c[s][i]^eNB->dlsch[0][0]->harq_processes[0]->c[s][i]);
+                  printf("%d : %x (%x)\n",i,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->c[s][i],UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->c[s][i]^eNB->dlsch[0][0]->harq_processes[0]->c[s][i]);
               }
 
               sprintf(fname,"rxsig0_r%d.m",round);
@@ -2644,19 +2649,19 @@ int main(int argc, char **argv)
               }
 
               //pdsch_vars
-              dump_dlsch2(UE,eNB_id,subframe,coded_bits_per_codeword,round, UE->dlsch[0][0]->current_harq_pid);
+              dump_dlsch2(UE,eNB_id,subframe,&coded_bits_per_codeword,round, UE->dlsch[subframe&0x1][0][0]->current_harq_pid);
 
 
               //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_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4);
-              //write_output("dlsch_w.m","w",UE->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0);
+              //write_output("dlsch_w.m","w",UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0);
 	      //pdcch_vars
-	      write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1);
-	      write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[eNB_id]->dl_ch_estimates_ext[0],300*3,1,1);
+	      write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[0][eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1);
+	      write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[0][eNB_id]->dl_ch_estimates_ext[0],300*3,1,1);
 
-	      write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[eNB_id]->rxdataF_comp[0],4*300,1,1);
-	      write_output("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[eNB_id]->llr,2400,1,4);
+	      write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[0][eNB_id]->rxdataF_comp[0],4*300,1,1);
+	      write_output("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[0][eNB_id]->llr,2400,1,4);
 
               if (round == 3) exit(-1);
             }
@@ -2664,7 +2669,7 @@ int main(int argc, char **argv)
             //      printf("round %d errors %d/%d\n",round,errs[round],trials);
 
             round++;
-            //      UE->dlsch[0][0]->harq_processes[0]->round++;
+            //      UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->round++;
           }
 
 	  if (xforms==1) {
@@ -2705,10 +2710,10 @@ int main(int argc, char **argv)
         double t_tx_enc = (double)eNB->dlsch_encoding_stats.p_time/cpu_freq_GHz/1000.0;
 
 
-        double t_rx = (double)UE->phy_proc_rx.p_time/cpu_freq_GHz/1000.0;
+        double t_rx = (double)UE->phy_proc_rx[subframe&0x1].p_time/cpu_freq_GHz/1000.0;
         double t_rx_fft = (double)UE->ofdm_demod_stats.p_time/cpu_freq_GHz/1000.0;
         double t_rx_demod = (double)UE->dlsch_rx_pdcch_stats.p_time/cpu_freq_GHz/1000.0;
-        double t_rx_dec = (double)UE->dlsch_decoding_stats.p_time/cpu_freq_GHz/1000.0;
+        double t_rx_dec = (double)UE->dlsch_decoding_stats[subframe&1].p_time/cpu_freq_GHz/1000.0;
 
         if (t_tx > t_tx_max)
           t_tx_max = t_tx;
@@ -2854,7 +2859,7 @@ int main(int argc, char **argv)
              rate*effective_rate,
              100*effective_rate,
              rate,
-             rate*get_Qm(UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->mcs),
+             rate*get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs),
              (1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0])/
              (double)eNB->dlsch[0][0]->harq_processes[0]->TBS,
              (1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0]));
@@ -2894,10 +2899,10 @@ int main(int argc, char **argv)
                eNB->dlsch_interleaving_stats.diff/eNB->dlsch_interleaving_stats.trials/cpu_freq_GHz/1000.0,eNB->dlsch_interleaving_stats.trials);
 
         printf("\n\nUE RX function statistics (per 1ms subframe)\n\n");
-        std_phy_proc_rx = sqrt((double)UE->phy_proc_rx.diff_square/pow(cpu_freq_GHz,2)/pow(1000,
-                               2)/UE->phy_proc_rx.trials - pow((double)UE->phy_proc_rx.diff/UE->phy_proc_rx.trials/cpu_freq_GHz/1000,2));
-        printf("Total PHY proc rx                                   :%f us (%d trials)\n",(double)UE->phy_proc_rx.diff/UE->phy_proc_rx.trials/cpu_freq_GHz/1000.0,
-               UE->phy_proc_rx.trials*2/3);
+        std_phy_proc_rx = sqrt((double)UE->phy_proc_rx[subframe&0x1].diff_square/pow(cpu_freq_GHz,2)/pow(1000,
+                               2)/UE->phy_proc_rx[subframe&0x1].trials - pow((double)UE->phy_proc_rx[subframe&0x1].diff/UE->phy_proc_rx[subframe&0x1].trials/cpu_freq_GHz/1000,2));
+        printf("Total PHY proc rx                                   :%f us (%d trials)\n",(double)UE->phy_proc_rx[subframe&0x1].diff/UE->phy_proc_rx[subframe&0x1].trials/cpu_freq_GHz/1000.0,
+               UE->phy_proc_rx[subframe&0x1].trials*2/3);
         printf("|__Statistcs                                            std: %fus max: %fus min: %fus median %fus q1 %fus q3 %fus n_dropped: %d packet \n", std_phy_proc_rx, t_rx_max, t_rx_min, rx_median,
                rx_q1, rx_q3, n_rx_dropped);
         std_phy_proc_rx_fft = sqrt((double)UE->ofdm_demod_stats.diff_square/pow(cpu_freq_GHz,2)/pow(1000,
@@ -2921,17 +2926,17 @@ int main(int argc, char **argv)
         printf("|__ Statistcs                           std: %fus median %fus q1 %fus q3 %fus \n",std_phy_proc_rx_demod, rx_demod_median, rx_demod_q1, rx_demod_q3);
         printf("DLSCH unscrambling time                             :%f us (%d trials)\n",(double)UE->dlsch_unscrambling_stats.diff/UE->dlsch_unscrambling_stats.trials/cpu_freq_GHz/1000.0,
                UE->dlsch_unscrambling_stats.trials);
-        std_phy_proc_rx_dec = sqrt((double)UE->dlsch_decoding_stats.diff_square/pow(cpu_freq_GHz,2)/pow(1000,
-                                   2)/UE->dlsch_decoding_stats.trials - pow((double)UE->dlsch_decoding_stats.diff/UE->dlsch_decoding_stats.trials/cpu_freq_GHz/1000,2));
+        std_phy_proc_rx_dec = sqrt((double)UE->dlsch_decoding_stats[subframe&1].diff_square/pow(cpu_freq_GHz,2)/pow(1000,
+                                   2)/UE->dlsch_decoding_stats[subframe&1].trials - pow((double)UE->dlsch_decoding_stats[subframe&1].diff/UE->dlsch_decoding_stats[subframe&1].trials/cpu_freq_GHz/1000,2));
         printf("DLSCH Decoding time (%02.2f Mbit/s, avg iter %1.2f)    :%f us (%d trials, max %f)\n",
                eNB->dlsch[0][0]->harq_processes[0]->TBS/1000.0,(double)avg_iter/iter_trials,
-               (double)UE->dlsch_decoding_stats.diff/UE->dlsch_decoding_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_decoding_stats.trials,
-               (double)UE->dlsch_decoding_stats.max/cpu_freq_GHz/1000.0);
+               (double)UE->dlsch_decoding_stats[subframe&1].diff/UE->dlsch_decoding_stats[subframe&1].trials/cpu_freq_GHz/1000.0,UE->dlsch_decoding_stats[subframe&1].trials,
+               (double)UE->dlsch_decoding_stats[subframe&1].max/cpu_freq_GHz/1000.0);
         printf("|__ Statistcs                           std: %fus median %fus q1 %fus q3 %fus \n",std_phy_proc_rx_dec, rx_dec_median, rx_dec_q1, rx_dec_q3);
         printf("|__ DLSCH Rate Unmatching                               :%f us (%d trials)\n",
                (double)UE->dlsch_rate_unmatching_stats.diff/UE->dlsch_rate_unmatching_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_rate_unmatching_stats.trials);
         printf("|__ DLSCH Turbo Decoding(%d bits)                       :%f us (%d trials)\n",
-               UE->dlsch[0][0]->harq_processes[0]->Cminus ? UE->dlsch[0][0]->harq_processes[0]->Kminus : UE->dlsch[0][0]->harq_processes[0]->Kplus,
+               UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Cminus ? UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kminus : UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kplus,
                (double)UE->dlsch_turbo_decoding_stats.diff/UE->dlsch_turbo_decoding_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_turbo_decoding_stats.trials);
         printf("    |__ init                                            %f us (cycles/iter %f, %d trials)\n",
                (double)UE->dlsch_tc_init_stats.diff/UE->dlsch_tc_init_stats.trials/cpu_freq_GHz/1000.0,
@@ -3109,12 +3114,12 @@ int main(int argc, char **argv)
                 eNB->dlsch_modulation_stats.trials,
                 eNB->dlsch_scrambling_stats.trials,
                 eNB->dlsch_encoding_stats.trials,
-                UE->phy_proc_rx.trials,
+                UE->phy_proc_rx[subframe&0x1].trials,
                 UE->ofdm_demod_stats.trials,
                 UE->dlsch_rx_pdcch_stats.trials,
                 UE->dlsch_llr_stats.trials,
                 UE->dlsch_unscrambling_stats.trials,
-                UE->dlsch_decoding_stats.trials
+                UE->dlsch_decoding_stats[subframe&1].trials
                );
         fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;",
                 get_time_meas_us(&eNB->phy_proc_tx),
@@ -3122,12 +3127,12 @@ int main(int argc, char **argv)
                 get_time_meas_us(&eNB->dlsch_modulation_stats),
                 get_time_meas_us(&eNB->dlsch_scrambling_stats),
                 get_time_meas_us(&eNB->dlsch_encoding_stats),
-                get_time_meas_us(&UE->phy_proc_rx),
+                get_time_meas_us(&UE->phy_proc_rx[subframe&0x1]),
                 nsymb*get_time_meas_us(&UE->ofdm_demod_stats),
                 get_time_meas_us(&UE->dlsch_rx_pdcch_stats),
                 3*get_time_meas_us(&UE->dlsch_llr_stats),
                 get_time_meas_us(&UE->dlsch_unscrambling_stats),
-                get_time_meas_us(&UE->dlsch_decoding_stats)
+                get_time_meas_us(&UE->dlsch_decoding_stats[subframe&1])
                );
         //fprintf(time_meas_fd,"eNB_PROC_TX_STD;eNB_PROC_TX_MAX;eNB_PROC_TX_MIN;eNB_PROC_TX_MED;eNB_PROC_TX_Q1;eNB_PROC_TX_Q3;eNB_PROC_TX_DROPPED;\n");
         fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%d;", std_phy_proc_tx, t_tx_max, t_tx_min, tx_median, tx_q1, tx_q3, n_tx_dropped);
@@ -3162,12 +3167,12 @@ int main(int argc, char **argv)
         eNB->dlsch_modulation_stats.trials,
         eNB->dlsch_scrambling_stats.trials,
         eNB->dlsch_encoding_stats.trials,
-        UE->phy_proc_rx.trials,
+        UE->phy_proc_rx[subframe&0x1].trials,
         UE->ofdm_demod_stats.trials,
         UE->dlsch_rx_pdcch_stats.trials,
         UE->dlsch_llr_stats.trials,
         UE->dlsch_unscrambling_stats.trials,
-        UE->dlsch_decoding_stats.trials);
+        UE->dlsch_decoding_stats[subframe&1].trials);
         */
         printf("[passed] effective rate : %f  (%2.1f%%,%f)): log and break \n",rate*effective_rate, 100*effective_rate, rate );
         break;
@@ -3220,7 +3225,7 @@ int main(int argc, char **argv)
     printf("eNB %d\n",i);
     free_eNB_dlsch(eNB->dlsch[0][i]);
     printf("UE %d\n",i);
-    free_ue_dlsch(UE->dlsch[0][i]);
+    free_ue_dlsch(UE->dlsch[subframe&0x1][0][i]);
   }
 
 
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
index c3f975006de0d1e4d85a5396cc3b3720fdad06c0..57742c5e13e4ec8d1f7fe13e0fe069a7ce1238c4 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
@@ -68,6 +68,7 @@ extern uint8_t interf_unaw_shift;
 PHY_VARS_eNB *eNB;
 PHY_VARS_UE *UE;
 
+double cpuf;
 
 int otg_enabled=0;
 /*the following parameters are used to control the processing times calculations*/
@@ -296,8 +297,6 @@ int main(int argc, char **argv)
 
   int threequarter_fs=0;
 
-
-
   opp_enabled=1; // to enable the time meas
 
 #if defined(__arm__)
@@ -316,6 +315,8 @@ int main(int argc, char **argv)
 #else
   cpu_freq_GHz = get_cpu_freq_GHz();
 #endif
+  cpuf = cpu_freq_GHz;
+
   printf("Detected cpu_freq %f GHz\n",cpu_freq_GHz);
 
   //signal(SIGSEGV, handler);
@@ -867,7 +868,7 @@ int main(int argc, char **argv)
     //    bzero(r_im0[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
   }
 
-  UE->pdcch_vars[0]->crnti = n_rnti;
+  UE->pdcch_vars[subframe&0x1][0]->crnti = n_rnti;
   UE->transmission_mode[eNB_id]=transmission_mode;
   if (UE->transmission_mode[eNB_id] !=4)
       UE->measurements.rank[eNB_id]=0;
@@ -980,15 +981,15 @@ int main(int argc, char **argv)
   }
 
   for (i=0; i<2; i++) {
-    UE->dlsch[0][i]  = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0);
+    UE->dlsch[subframe&0x1][0][i]  = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0);
 
-    if (!UE->dlsch[0][i]) {
+    if (!UE->dlsch[subframe&0x1][0][i]) {
 
       printf("Can't get ue dlsch structures\n");
       exit(-1);
     }
 
-    UE->dlsch[0][i]->rnti   = n_rnti;
+    UE->dlsch[subframe&0x1][0][i]->rnti   = n_rnti;
   }
 
   // structure for SIC at UE
@@ -2081,13 +2082,14 @@ int main(int argc, char **argv)
       reset_meas(&eNB->dlsch_rate_matching_stats);
       reset_meas(&eNB->dlsch_turbo_encoding_stats);
 
-      reset_meas(&UE->phy_proc_rx); // total UE rx
+      reset_meas(&UE->phy_proc_rx[subframe&0x1]); // total UE rx
       reset_meas(&UE->ofdm_demod_stats);
       reset_meas(&UE->dlsch_channel_estimation_stats);
       reset_meas(&UE->dlsch_freq_offset_estimation_stats);
       reset_meas(&UE->rx_dft_stats);
       reset_meas(&UE->dlsch_llr_stats);
-      reset_meas(&UE->dlsch_decoding_stats);
+      reset_meas(&UE->dlsch_decoding_stats[0]);
+      reset_meas(&UE->dlsch_decoding_stats[1]);
       reset_meas(&UE->dlsch_turbo_decoding_stats);
       reset_meas(&UE->dlsch_deinterleaving_stats);
       reset_meas(&UE->dlsch_rate_unmatching_stats);
@@ -2135,8 +2137,8 @@ int main(int argc, char **argv)
 
         eNB2UE[0]->first_run = 1;
 
-        ret[0] = UE->dlsch[0][0]->max_turbo_iterations+1;
-        ret[1] = UE->dlsch[0][0]->max_turbo_iterations+1;
+        ret[0] = UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations+1;
+        ret[1] = UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations+1;
 
         resend_cw0_cw1=1;
         resend_cw1=0;
@@ -2144,10 +2146,10 @@ int main(int argc, char **argv)
         TB1_active=1;
 
         while (((transmission_mode == 3 || transmission_mode == 4) &&
-               ((round < num_rounds) && ((ret[0] > UE->dlsch[0][0]->max_turbo_iterations) ||
-               (ret[1] > UE->dlsch[0][0]->max_turbo_iterations)))) ||
+               ((round < num_rounds) && ((ret[0] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations) ||
+               (ret[1] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations)))) ||
                ((transmission_mode!=4 && transmission_mode != 3) && ((round< num_rounds) &&
-               (ret[0] > UE->dlsch[0][0]->max_turbo_iterations)))) {
+               (ret[0] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations)))) {
 #ifdef DEBUG_HARQ
         printf("\n [DLSIM] On top round is %d\n", round);
 #endif
@@ -2158,10 +2160,10 @@ int main(int argc, char **argv)
 
           //printf("Trial %d, round %d , ret[0] %d, ret[1] %d, round_trials %d\n",trials,round, ret[0], ret[1], round_trials[round]);
 
-        /*if (ret[0] > UE->dlsch[0][0]->max_turbo_iterations) {
+        /*if (ret[0] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations) {
           round_trials[0][round]++;
           round_trials[1][round]++;
-        } else if ((ret[1] > UE->dlsch[0][0]->max_turbo_iterations) && (ret[0] <= UE->dlsch[0][0]->max_turbo_iterations))
+        } else if ((ret[1] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations) && (ret[0] <= UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations))
           round_trials[1][round]++;*/
 
 
@@ -2624,7 +2626,7 @@ int main(int argc, char **argv)
                                                          SI_RNTI,
                                                          0,
                                                          P_RNTI,
-                                                         UE->dlsch[0][1]->pmi_alloc,
+                                                         UE->dlsch[subframe&0x1][0][1]->pmi_alloc,
                                                          transmission_mode>=7?transmission_mode:0
                                                          );
                       break;
@@ -2852,7 +2854,7 @@ int main(int argc, char **argv)
                                                          SI_RNTI,
                                                          0,
                                                          P_RNTI,
-                                                         UE->dlsch[0][1]->pmi_alloc,
+                                                         UE->dlsch[subframe&0x1][0][1]->pmi_alloc,
                                                          transmission_mode>=7?transmission_mode:0
                                                          );
                       break;
@@ -2983,7 +2985,7 @@ int main(int argc, char **argv)
               // use the PMI from previous trial
                 if (DLSCH_alloc_pdu2_1E[0].tpmi == 5) {
                   eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,eNB->frame_parms.N_RB_DL);
-                  UE->dlsch[0][0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
+                  UE->dlsch[subframe&0x1][0][0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
                   if (n_users>1)
                     eNB->dlsch[1][0]->harq_processes[0]->pmi_alloc = (eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc ^ 0x1555);
                   /*
@@ -3007,7 +3009,7 @@ int main(int argc, char **argv)
                       printf ("[DLSIM] I am calling from the  eNode B 2\n");
 #endif
 
-                    UE->dlsch[0][TB]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
+                    UE->dlsch[subframe&0x1][0][TB]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
                   }
 
                   else if (updated_csi == 0){
@@ -3020,7 +3022,7 @@ int main(int argc, char **argv)
 #ifdef DEBUG_HARQ
                       printf ("[DLSIM] I am calling from the  eNode B 2\n");
 #endif
-                      UE->dlsch[0][TB]->pmi_alloc = pmi_convert_rank1_from_rank2(UE->dlsch[0][TB]->pmi_alloc,5,UE->frame_parms.N_RB_DL);
+                      UE->dlsch[subframe&0x1][0][TB]->pmi_alloc = pmi_convert_rank1_from_rank2(UE->dlsch[subframe&0x1][0][TB]->pmi_alloc,5,UE->frame_parms.N_RB_DL);
                     }
 
                     else if (hold_rank1_precoder == 0 && ((((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 6) ||(((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 6))){
@@ -3031,7 +3033,7 @@ int main(int argc, char **argv)
 #ifdef DEBUG_HARQ
                       printf ("[DLSIM] I am calling from the  eNode B 2\n");
 #endif
-                      UE->dlsch[0][TB]->pmi_alloc = pmi_convert_rank1_from_rank2(UE->dlsch[0][TB]->pmi_alloc,6,UE->frame_parms.N_RB_DL);
+                      UE->dlsch[subframe&0x1][0][TB]->pmi_alloc = pmi_convert_rank1_from_rank2(UE->dlsch[subframe&0x1][0][TB]->pmi_alloc,6,UE->frame_parms.N_RB_DL);
                     }
                   } else if (updated_csi == 1){
 
@@ -3050,11 +3052,11 @@ int main(int argc, char **argv)
 #ifdef DEBUG_HARQ
                       printf ("[DLSIM] I quantize from ENodeB 2\n");
 #endif
-                    UE->dlsch[0][TB]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
+                    UE->dlsch[subframe&0x1][0][TB]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
 #ifdef DEBUG_HARQ
                       printf ("[DLSIM] I convert pmi to rank1 eNode B 2\n");
 #endif
-                    UE->dlsch[0][TB]->pmi_alloc = pmi_convert_rank1_from_rank2(UE->dlsch[0][TB]->pmi_alloc,5,UE->frame_parms.N_RB_DL);
+                    UE->dlsch[subframe&0x1][0][TB]->pmi_alloc = pmi_convert_rank1_from_rank2(UE->dlsch[subframe&0x1][0][TB]->pmi_alloc,5,UE->frame_parms.N_RB_DL);
                   }
                   else if (((((DCI2_5MHz_2A_TDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 6) ||(((DCI2_5MHz_2A_FDD_t *)&DLSCH_alloc_pdu_1[k])->tpmi == 6))){
 #ifdef DEBUG_HARQ
@@ -3070,11 +3072,11 @@ int main(int argc, char **argv)
 #ifdef DEBUG_HARQ
                       printf ("[DLSIM] I quantize from ENodeB 2\n");
 #endif
-                    UE->dlsch[0][TB]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
+                    UE->dlsch[subframe&0x1][0][TB]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
 #ifdef DEBUG_HARQ
                       printf ("[DLSIM] I convert pmi to rank1 eNode B 2\n");
 #endif
-                    UE->dlsch[0][TB]->pmi_alloc = pmi_convert_rank1_from_rank2(UE->dlsch[0][TB]->pmi_alloc,6,UE->frame_parms.N_RB_DL);
+                    UE->dlsch[subframe&0x1][0][TB]->pmi_alloc = pmi_convert_rank1_from_rank2(UE->dlsch[subframe&0x1][0][TB]->pmi_alloc,6,UE->frame_parms.N_RB_DL);
                   }
 
                 }
@@ -3363,7 +3365,7 @@ int main(int argc, char **argv)
           pilot3 = 9;
         }
 
-        start_meas(&UE->phy_proc_rx);
+        start_meas(&UE->phy_proc_rx[subframe&0x1]);
         // Inner receiver scheduling for 3 slots
           for (Ns=(2*subframe);Ns<((2*subframe)+3);Ns++) {
             for (l=0;l<pilot2;l++) {
@@ -3488,9 +3490,7 @@ int main(int argc, char **argv)
                   UE->UE_mode[0] = PUSCH;
                   start_meas(&UE->dlsch_rx_pdcch_stats);
 
-                   rx_pdcch(&UE->common_vars,
-                           UE->pdcch_vars,
-                           &UE->frame_parms,
+                   rx_pdcch(UE,
                            trials,
                            subframe,
                            0,
@@ -3500,7 +3500,7 @@ int main(int argc, char **argv)
 
                   stop_meas(&UE->dlsch_rx_pdcch_stats);
                   // overwrite number of pdcch symbols
-                  UE->pdcch_vars[0]->num_pdcch_symbols = num_pdcch_symbols;
+                  UE->pdcch_vars[subframe&0x1][0]->num_pdcch_symbols = num_pdcch_symbols;
 
                   dci_cnt = dci_decoding_procedure(UE,
                                                    dci_alloc_rx,1,
@@ -3525,10 +3525,10 @@ int main(int argc, char **argv)
                     //printf("Generating dlsch parameters for RNTI %x\n",dci_alloc_rx[i].rnti);
 
                      if (round == 0) {
-                        UE->dlsch[0][0]->harq_processes[0]->first_tx=1;
+                        UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx=1;
                       }
                       if ((transmission_mode == 3 || transmission_mode ==4) && (round == 0)) {
-                        UE->dlsch[0][1]->harq_processes[0]->first_tx=1;
+                        UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->first_tx=1;
                       }
 
                     if ((dci_alloc_rx[i].rnti == n_rnti) &&
@@ -3537,40 +3537,40 @@ int main(int argc, char **argv)
                                                            dci_alloc_rx[i].dci_pdu,
                                                            dci_alloc_rx[i].rnti,
                                                            dci_alloc_rx[i].format,
-                                                           UE->dlsch[0],
+                                                           UE->dlsch[subframe&0x1][0],
                                                            &UE->frame_parms,
                                                            UE->pdsch_config_dedicated,
                                                            SI_RNTI,
                                                            0,
                                                            P_RNTI,
                                                            transmission_mode<7?0:transmission_mode,
-                                                           UE->pdcch_vars[0]->crnti_is_temporary? UE->pdcch_vars[0]->crnti: 0)==0)) {
+                                                           UE->pdcch_vars[subframe&0x1][0]->crnti_is_temporary? UE->pdcch_vars[subframe&0x1][0]->crnti: 0)==0)) {
                       dump_dci(&UE->frame_parms,&dci_alloc_rx[i]);
                       coded_bits_per_codeword[0]= get_G(&eNB->frame_parms,
-                                                      UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->nb_rb,
-                                                      UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->rb_alloc_even,
-                                                      get_Qm(UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->mcs),
-                                                      UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->Nl,
-                                                      UE->pdcch_vars[0]->num_pdcch_symbols,
+                                                      UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->nb_rb,
+                                                      UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->rb_alloc_even,
+                                                      get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs),
+                                                      UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->Nl,
+                                                      UE->pdcch_vars[subframe&0x1][0]->num_pdcch_symbols,
                                                       0,
                                                       subframe,
                                                       transmission_mode>=7?transmission_mode:0);
                       if (transmission_mode == 3 || transmission_mode == 4) {
                         coded_bits_per_codeword[1]= get_G(&eNB->frame_parms,
-                                                      UE->dlsch[0][1]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->nb_rb,
-                                                      UE->dlsch[0][1]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->rb_alloc_even,
-                                                      get_Qm(UE->dlsch[0][1]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->mcs),
-                                                      UE->dlsch[0][1]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->Nl,
-                                                      UE->pdcch_vars[1]->num_pdcch_symbols,
+                                                      UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->nb_rb,
+                                                      UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->rb_alloc_even,
+                                                      get_Qm(UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs),
+                                                      UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->Nl,
+                                                      UE->pdcch_vars[subframe&0x1][1]->num_pdcch_symbols,
                                                       0,
                                                       subframe,
                                                       transmission_mode>=7?transmission_mode:0);
                       }
                       /*
-                      rate = (double)dlsch_tbs25[get_I_TBS(UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->mcs)][UE->dlsch[0][0]->nb_rb-1]/(coded_bits_per_codeword);
-                      rate*=get_Qm(UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->mcs);
+                      rate = (double)dlsch_tbs25[get_I_TBS(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs)][UE->dlsch[subframe&0x1][0][0]->nb_rb-1]/(coded_bits_per_codeword);
+                      rate*=get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs);
                       */
-                      printf("num_pdcch_symbols %d, G %d, TBS %d\n",UE->pdcch_vars[0]->num_pdcch_symbols,coded_bits_per_codeword [0],UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->TBS);
+                      printf("num_pdcch_symbols %d, G %d, TBS %d\n",UE->pdcch_vars[subframe&0x1][0]->num_pdcch_symbols,coded_bits_per_codeword [0],UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->TBS);
 
                       dlsch_active = 1; // what does it indicates???
                     } else {
@@ -3591,11 +3591,11 @@ int main(int argc, char **argv)
                       }
                   }
                   } else { //dci_flag == 0
-                      UE->pdcch_vars[0]->crnti = n_rnti;
-                      UE->pdcch_vars[0]->num_pdcch_symbols = num_pdcch_symbols;
+                      UE->pdcch_vars[subframe&0x1][0]->crnti = n_rnti;
+                      UE->pdcch_vars[subframe&0x1][0]->num_pdcch_symbols = num_pdcch_symbols;
                       if (round == 0) {
-                        UE->dlsch[0][0]->harq_processes[0]->first_tx=1;
-                        UE->dlsch[0][1]->harq_processes[0]->first_tx=1;
+                        UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx=1;
+                        UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->first_tx=1;
                       }
 
                       switch (transmission_mode) {
@@ -3606,33 +3606,33 @@ int main(int argc, char **argv)
                                                           &DLSCH_alloc_pdu_1[0],
                                                           (common_flag==0)? C_RNTI : SI_RNTI,
                                                           (common_flag==0)? format1 : format1A,
-                                                          UE->dlsch[0],
+                                                          UE->dlsch[subframe&0x1][0],
                                                           &UE->frame_parms,
                                                           UE->pdsch_config_dedicated,
                                                           SI_RNTI,
                                                           0,
                                                           P_RNTI,
                                                           transmission_mode<7?0:transmission_mode,
-                                                          UE->pdcch_vars[0]->crnti_is_temporary? UE->pdcch_vars[0]->crnti: 0);
+                                                          UE->pdcch_vars[subframe&0x1][0]->crnti_is_temporary? UE->pdcch_vars[subframe&0x1][0]->crnti: 0);
                         break;
                       case 3:
 
-                        //printf("Rate: TM3 (before) round %d (%d) first_tx %d\n",round,UE->dlsch[0][0]->harq_processes[0]->round,UE->dlsch[0][0]->harq_processes[0]->first_tx);
+                        //printf("Rate: TM3 (before) round %d (%d) first_tx %d\n",round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx);
 
                         generate_ue_dlsch_params_from_dci(0,
                                                           subframe,
                                                           &DLSCH_alloc_pdu_1[0],
                                                           (common_flag==0)? C_RNTI : SI_RNTI,
                                                           (common_flag==0)? format2A : format1A,
-                                                          UE->dlsch[0],
+                                                          UE->dlsch[subframe&0x1][0],
                                                           &UE->frame_parms,
                                                           UE->pdsch_config_dedicated,
                                                           SI_RNTI,
                                                           0,
                                                           P_RNTI,
                                                           transmission_mode<7?0:transmission_mode,
-                                                          UE->pdcch_vars[0]->crnti_is_temporary? UE->pdcch_vars[0]->crnti: 0);
-                        //printf("Rate: TM3 (after) round %d (%d) first_tx %d\n",round,UE->dlsch[0][0]->harq_processes[0]->round,UE->dlsch[0][0]->harq_processes[0]->first_tx);
+                                                          UE->pdcch_vars[subframe&0x1][0]->crnti_is_temporary? UE->pdcch_vars[subframe&0x1][0]->crnti: 0);
+                        //printf("Rate: TM3 (after) round %d (%d) first_tx %d\n",round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx);
                         break;
                       case 4:
                         generate_ue_dlsch_params_from_dci(0,
@@ -3640,14 +3640,14 @@ int main(int argc, char **argv)
                                                           &DLSCH_alloc_pdu_1[0],
                                                           (common_flag==0)? C_RNTI : SI_RNTI,
                                                           (common_flag==0)? format2 : format1A,//format1A only for a codeblock
-                                                          UE->dlsch[0],
+                                                          UE->dlsch[subframe&0x1][0],
                                                           &UE->frame_parms,
                                                           UE->pdsch_config_dedicated,
                                                           SI_RNTI,
                                                           0,
                                                           P_RNTI,
                                                           transmission_mode<7?0:transmission_mode,
-                                                          UE->pdcch_vars[0]->crnti_is_temporary? UE->pdcch_vars[0]->crnti: 0);
+                                                          UE->pdcch_vars[subframe&0x1][0]->crnti_is_temporary? UE->pdcch_vars[subframe&0x1][0]->crnti: 0);
 
                         break;
                       case 5:
@@ -3657,14 +3657,14 @@ int main(int argc, char **argv)
                                                           &DLSCH_alloc_pdu2_1E[0],
                                                           C_RNTI,
                                                           format1E_2A_M10PRB,
-                                                          UE->dlsch[0],
+                                                          UE->dlsch[subframe&0x1][0],
                                                           &UE->frame_parms,
                                                           UE->pdsch_config_dedicated,
                                                           SI_RNTI,
                                                           0,
                                                           P_RNTI,
                                                           transmission_mode<7?0:transmission_mode,
-                                                          UE->pdcch_vars[0]->crnti_is_temporary? UE->pdcch_vars[0]->crnti: 0);
+                                                          UE->pdcch_vars[subframe&0x1][0]->crnti_is_temporary? UE->pdcch_vars[subframe&0x1][0]->crnti: 0);
                         break;
                       }
                       dlsch_active = 1;
@@ -3673,13 +3673,13 @@ int main(int argc, char **argv)
 
               if (dlsch_active == 1) {
                 if (TB0_active==1)
-                  cur_harq_pid =UE->dlsch[0][0]->current_harq_pid;
+                  cur_harq_pid =UE->dlsch[subframe&0x1][0][0]->current_harq_pid;
                 else
-                  cur_harq_pid =UE->dlsch[0][1]->current_harq_pid;
+                  cur_harq_pid =UE->dlsch[subframe&0x1][0][1]->current_harq_pid;
 
                 if ((Ns==(1+(2*subframe))) && (l==0)) {// process PDSCH symbols 1,2,3,4,5,(6 Normal Prefix
               /*    if (transmission_mode == 5) {
-                    if ((UE->dlsch[eNB_id][0]->harq_processes[cur_harq_pid]->dl_power_off==0) &&
+                    if ((UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[cur_harq_pid]->dl_power_off==0) &&
                         (openair_daq_vars.use_ia_receiver ==1)) {
                       rx_type = rx_IC_single_stream;
                     } else {
@@ -3690,7 +3690,7 @@ int main(int argc, char **argv)
 
                   start_meas(&UE->dlsch_llr_stats);
 
-                  for (m=UE->pdcch_vars[0]->num_pdcch_symbols; m<pilot2; m++) {
+                  for (m=UE->pdcch_vars[subframe&0x1][0]->num_pdcch_symbols; m<pilot2; m++) {
                     if (rx_pdsch(UE,
                                  PDSCH,
                                  eNB_id,
@@ -3698,10 +3698,10 @@ int main(int argc, char **argv)
                                  0,
                                  subframe,
                                  m,
-                                 (m==UE->pdcch_vars[0]->num_pdcch_symbols)?1:0,
+                                 (m==UE->pdcch_vars[subframe&0x1][0]->num_pdcch_symbols)?1:0,
                                  rx_type,
                                  i_mod,
-                                 UE->dlsch[0][0]->current_harq_pid)==-1){
+                                 UE->dlsch[subframe&0x1][0][0]->current_harq_pid)==-1){
                       dlsch_active = 0;
                       break;
                     }
@@ -3788,7 +3788,7 @@ int main(int argc, char **argv)
               break;
             }
 
-            UE->dlsch[0][TB]->rnti = (common_flag==0) ? n_rnti: SI_RNTI;
+            UE->dlsch[subframe&0x1][0][TB]->rnti = (common_flag==0) ? n_rnti: SI_RNTI;
             coded_bits_per_codeword[TB] = get_G(&eNB->frame_parms,
                                             eNB->dlsch[0][TB]->harq_processes[0]->nb_rb,
                                             eNB->dlsch[0][TB]->harq_processes[0]->rb_alloc,
@@ -3798,12 +3798,12 @@ int main(int argc, char **argv)
                                             0,subframe,
                                             transmission_mode>=7?transmission_mode:0);
 
-            UE->dlsch[0][TB]->harq_processes[UE->dlsch[0][TB]->current_harq_pid]->G = coded_bits_per_codeword[TB];
-            UE->dlsch[0][TB]->harq_processes[UE->dlsch[0][TB]->current_harq_pid]->Qm = get_Qm(eNB->dlsch[0][TB]->harq_processes[0]->mcs);
+            UE->dlsch[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid]->G = coded_bits_per_codeword[TB];
+            UE->dlsch[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid]->Qm = get_Qm(eNB->dlsch[0][TB]->harq_processes[0]->mcs);
 
             if (n_frames==2) {
               printf("Kmimo=%d, TB=%d, G=%d, TBS=%d\n",Kmimo,TB,coded_bits_per_codeword[TB],
-                     UE->dlsch[0][TB]->harq_processes[UE->dlsch[0][TB]->current_harq_pid]->TBS);
+                     UE->dlsch[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid]->TBS);
 
               // calculate uncoded BER
               uncoded_ber_bit = (short*) malloc(sizeof(short)*coded_bits_per_codeword[TB]);
@@ -3812,7 +3812,7 @@ int main(int argc, char **argv)
 
               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);
-              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);
+              write_output(fname,vname, UE->pdsch_vars[subframe&0x1][0]->llr[UE->dlsch[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid]->codeword],coded_bits_per_codeword[TB],1,0);
               sprintf(fname,"dlsch_cw%d_e.m", 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);
@@ -3820,7 +3820,7 @@ int main(int argc, char **argv)
               printf("trials=%d\n", trials);
 
               for (i=0;i<coded_bits_per_codeword[TB];i++)
-                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)) {
+                if (eNB->dlsch[0][TB]->harq_processes[0]->e[i] != (UE->pdsch_vars[subframe&0x1][0]->llr[UE->dlsch[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid]->codeword][i]<0)) {
                   uncoded_ber_bit[i] = 1;
                   uncoded_ber++;
                 }
@@ -3842,34 +3842,34 @@ int main(int argc, char **argv)
             start_meas(&UE->dlsch_unscrambling_stats);
             dlsch_unscrambling(&UE->frame_parms,
                                0,
-                               UE->dlsch[0][TB],
+                               UE->dlsch[subframe&0x1][0][TB],
                                coded_bits_per_codeword[TB],
-                               UE->pdsch_vars[subframe&0x1][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[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid]->codeword],
                                TB,
                                subframe<<1);
             stop_meas(&UE->dlsch_unscrambling_stats);
 
-            start_meas(&UE->dlsch_decoding_stats);
+            start_meas(&UE->dlsch_decoding_stats[subframe&0x1]);
             ret[TB] = dlsch_decoding(UE,
-                                     UE->pdsch_vars[subframe&0x1][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[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid]->codeword],
                                      &UE->frame_parms,
-                                     UE->dlsch[0][TB],
-                                     UE->dlsch[0][TB]->harq_processes[UE->dlsch[0][TB]->current_harq_pid],
+                                     UE->dlsch[subframe&0x1][0][TB],
+                                     UE->dlsch[subframe&0x1][0][TB]->harq_processes[UE->dlsch[subframe&0x1][0][TB]->current_harq_pid],
                                      0,
                                     subframe,
-                                    UE->dlsch[0][TB]->current_harq_pid,
+                                    UE->dlsch[subframe&0x1][0][TB]->current_harq_pid,
                                     1,llr8_flag);
-            stop_meas(&UE->dlsch_decoding_stats);
+            stop_meas(&UE->dlsch_decoding_stats[subframe&0x1]);
 #ifdef DEBUG_HARQ
             printf("[DLSIM] ret[%d] = %d\n", TB, ret[TB]);
 #endif
 
             //printf("retr cw 0 = %d\n", ret[0]);
-            //printf("current round = %d\n", UE->dlsch[0][cw_non_sic]->harq_processes[UE->dlsch[0][cw_non_sic]->current_harq_pid]->round);
+            //printf("current round = %d\n", UE->dlsch[subframe&0x1][0][cw_non_sic]->harq_processes[UE->dlsch[subframe&0x1][0][cw_non_sic]->current_harq_pid]->round);
 
 
 
-            if (ret[TB] <= UE->dlsch[0][0]->max_turbo_iterations ) { //if CW0 is decoded, approach CW1
+            if (ret[TB] <= UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations ) { //if CW0 is decoded, approach CW1
 #ifdef DEBUG_HARQ
             printf("[DLSIM] TB%d is decoded\n", TB);
 #endif
@@ -3880,33 +3880,33 @@ int main(int argc, char **argv)
               if (n_frames==2) {
                 printf("cw non sic %d, round %d: No DLSCH errors found, uncoded ber %f\n",TB,round,uncoded_ber);
 #ifdef PRINT_BYTES
-                for (s=0;s<UE->dlsch[0][TB]->harq_processes[0]->C;s++) {
-                  if (s<UE->dlsch[0][TB]->harq_processes[0]->Cminus)
-                    Kr = UE->dlsch[0][TB]->harq_processes[0]->Kminus;
+                for (s=0;s<UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->C;s++) {
+                  if (s<UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->Cminus)
+                    Kr = UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->Kminus;
                   else
-                    Kr = UE->dlsch[0][TB]->harq_processes[0]->Kplus;
+                    Kr = UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->Kplus;
 
                   Kr_bytes = Kr>>3;
 
                   printf("Decoded_output (Segment %d):\n",s);
                   for (i=0;i<Kr_bytes;i++)
-                    printf("%d : %x (%x)\n",i,UE->dlsch[0][TB]->harq_processes[0]->c[s][i],
-                           UE->dlsch[0][TB]->harq_processes[0]->c[s][i]^eNB->dlsch[0][TB]->harq_processes[0]->c[s][i]);
+                    printf("%d : %x (%x)\n",i,UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->c[s][i],
+                           UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->c[s][i]^eNB->dlsch[0][TB]->harq_processes[0]->c[s][i]);
                 }
 #endif
               }
 
-              UE->total_TBS[eNB_id] = UE->total_TBS[eNB_id] + UE->dlsch[eNB_id][TB]->harq_processes[UE->dlsch[eNB_id][TB]->current_harq_pid]->TBS;
+              UE->total_TBS[eNB_id] = UE->total_TBS[eNB_id] + UE->dlsch[subframe&0x1][eNB_id][TB]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][TB]->current_harq_pid]->TBS;
 
               // If the  receiver is NOT SIC, Here we are done with both CW, now only to calculate BLER
               //If the receiver IS SIC, we are done only with CW0, CW1 was only compensated by this moment (y1' obtained)
-              if (UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->mimo_mode == LARGE_CDD) {   //try to decode second stream using SIC
+              if (UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mimo_mode == LARGE_CDD) {   //try to decode second stream using SIC
               /*
-              //for (round = 0 ; round < UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->round ; round++) {
+              //for (round = 0 ; round < UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->round ; round++) {
               // we assume here that the second stream has a lower MCS and is thus more likely to be decoded
               // re-encoding of second stream
-              dlsch0_ue_harq = UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid];
-              dlsch0_eNB_harq = UE->dlsch[eNB_id]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid];
+              dlsch0_ue_harq = UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid];
+              dlsch0_eNB_harq = UE->dlsch[subframe&0x1][eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid];
 
               dlsch0_eNB_harq->mimo_mode    = LARGE_CDD;
               dlsch0_eNB_harq->rb_alloc[0]  = dlsch0_ue_harq->rb_alloc[0];
@@ -3920,14 +3920,14 @@ int main(int argc, char **argv)
               dlsch0_eNB_harq->dl_power_off = dlsch0_ue_harq->dl_power_off;
               dlsch0_eNB_harq->status       = dlsch0_ue_harq->status;
 
-              UE->dlsch[eNB_id]->active       = UE->dlsch[eNB_id][0]->active;
-              UE->dlsch[eNB_id]->rnti         = UE->dlsch[eNB_id][0]->rnti;
-              UE->dlsch[eNB_id]->current_harq_pid         = UE->dlsch[eNB_id][0]->current_harq_pid;
+              UE->dlsch[subframe&0x1][eNB_id]->active       = UE->dlsch[subframe&0x1][eNB_id][0]->active;
+              UE->dlsch[subframe&0x1][eNB_id]->rnti         = UE->dlsch[subframe&0x1][eNB_id][0]->rnti;
+              UE->dlsch[subframe&0x1][eNB_id]->current_harq_pid         = UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid;
 
-              dlsch_encoding(UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->b,
+              dlsch_encoding(UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->b,
                  &UE->frame_parms,
                  num_pdcch_symbols,
-                 UE->dlsch[eNB_id],
+                 UE->dlsch[subframe&0x1][eNB_id],
                  0,subframe,
                  &UE->dlsch_rate_matching_stats,
                  &UE->dlsch_turbo_encoding_stats,
@@ -3935,10 +3935,10 @@ int main(int argc, char **argv)
                  );
 
               coded_bits_per_codeword = get_G(&UE->frame_parms,
-                      UE->dlsch[eNB_id]->harq_processes[UE->dlsch[eNB_id]->current_harq_pid]->nb_rb,
-                      UE->dlsch[eNB_id]->harq_processes[UE->dlsch[eNB_id]->current_harq_pid]->rb_alloc,
-                      get_Qm(UE->dlsch[eNB_id]->harq_processes[UE->dlsch[eNB_id]->current_harq_pid]->mcs),
-                      UE->dlsch[eNB_id]->harq_processes[UE->dlsch[eNB_id]->current_harq_pid]->Nl,
+                      UE->dlsch[subframe&0x1][eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id]->current_harq_pid]->nb_rb,
+                      UE->dlsch[subframe&0x1][eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id]->current_harq_pid]->rb_alloc,
+                      get_Qm(UE->dlsch[subframe&0x1][eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id]->current_harq_pid]->mcs),
+                      UE->dlsch[subframe&0x1][eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id]->current_harq_pid]->Nl,
                       num_pdcch_symbols,
                       0,subframe);
 
@@ -3946,7 +3946,7 @@ int main(int argc, char **argv)
               //scrambling
               dlsch_scrambling(&UE->frame_parms,
                    0,
-                   UE->dlsch[eNB_id],
+                   UE->dlsch[subframe&0x1][eNB_id],
                    coded_bits_per_codeword,
                    0,
                    subframe<<1);
@@ -3958,7 +3958,7 @@ int main(int argc, char **argv)
                       subframe,
                       &UE->frame_parms,
                       num_pdcch_symbols,
-                      &UE->dlsch[0][0],
+                      &UE->dlsch[subframe&0x1][0][0],
                       NULL);
               // sic_buffer is a vector of size nb_antennas_tx, but both contain the same signal, since we do modulation without precoding
               // precoding is contained in effective channel estimate
@@ -3998,8 +3998,8 @@ int main(int argc, char **argv)
               }
 
 
-             if ((UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->mimo_mode >=DUALSTREAM_UNIFORM_PRECODING1) &&
-                  (UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->mimo_mode <=DUALSTREAM_PUSCH_PRECODING) && (TB0_active == 1) &&
+             if ((UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mimo_mode >=DUALSTREAM_UNIFORM_PRECODING1) &&
+                  (UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mimo_mode <=DUALSTREAM_PUSCH_PRECODING) && (TB0_active == 1) &&
                   (rx_type==rx_SIC_dual_stream)) {
 #ifdef DEBUG_HARQ
                 printf("[DLSIM] Starting SIC procedure\n");
@@ -4018,10 +4018,10 @@ int main(int argc, char **argv)
 #endif
                 //printf("I enter round_sic loop \n");
                 //printf("round_sic= %d\n", round_sic);
-                dlsch0_ue_harq = UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid];
-                dlsch0_eNB_harq = UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid];
+                dlsch0_ue_harq = UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid];
+                dlsch0_eNB_harq = UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid];
 
-                dlsch0_eNB_harq->mimo_mode    = UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->mimo_mode;
+                dlsch0_eNB_harq->mimo_mode    = UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mimo_mode;
                 dlsch0_eNB_harq->rb_alloc[0]  = dlsch0_ue_harq->rb_alloc_even[0];
                 dlsch0_eNB_harq->nb_rb        = dlsch0_ue_harq->nb_rb;
                 dlsch0_eNB_harq->mcs          = dlsch0_ue_harq->mcs;
@@ -4033,28 +4033,28 @@ int main(int argc, char **argv)
                 dlsch0_eNB_harq->status       = dlsch0_ue_harq->status;
 
                 if (round_sic == 0){
-                  UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[eNB_id][1]->current_harq_pid]->rvidx        = 0;
-                  UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->rvidx=0;
+                  UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid]->rvidx        = 0;
+                  UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->rvidx=0;
                 }
                   else if (round_sic == 1){
-                  UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[eNB_id][1]->current_harq_pid]->rvidx        = 1;
-                  UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->rvidx=1;
+                  UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid]->rvidx        = 1;
+                  UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->rvidx=1;
                 }
                   else if (round_sic == 2){
-                  UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[eNB_id][1]->current_harq_pid]->rvidx        = 2;
-                  UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->rvidx=2;
+                  UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid]->rvidx        = 2;
+                  UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->rvidx=2;
                 }
                   else{
-                  UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[eNB_id][1]->current_harq_pid]->rvidx        = 3;
-                  UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->rvidx=3;
+                  UE->dlsch_eNB[eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][1]->current_harq_pid]->rvidx        = 3;
+                  UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->rvidx=3;
                 }
 
-                UE->dlsch_eNB[eNB_id]->active                   = UE->dlsch[eNB_id][0]->active;
-                UE->dlsch_eNB[eNB_id]->rnti                     = UE->dlsch[eNB_id][0]->rnti;
-                UE->dlsch_eNB[eNB_id]->current_harq_pid         = UE->dlsch[eNB_id][0]->current_harq_pid;
+                UE->dlsch_eNB[eNB_id]->active                   = UE->dlsch[subframe&0x1][eNB_id][0]->active;
+                UE->dlsch_eNB[eNB_id]->rnti                     = UE->dlsch[subframe&0x1][eNB_id][0]->rnti;
+                UE->dlsch_eNB[eNB_id]->current_harq_pid         = UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid;
 
                 dlsch_encoding_SIC(UE,
-                               input_buffer0[0], //UE->dlsch[eNB_id][0]->harq_processes[PHY_vars_UE->dlsch_ue[eNB_id][0]->current_harq_pid]->b,,
+                               input_buffer0[0], //UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[PHY_vars_UE->dlsch_ue[eNB_id][0]->current_harq_pid]->b,,
                                num_pdcch_symbols,
                                UE->dlsch_eNB[eNB_id],
                                0,
@@ -4089,8 +4089,8 @@ int main(int argc, char **argv)
                                                     coded_bits_per_codeword[0]);
 
                // write_output("sic_buffer.m","sic", *sic_buffer,re_allocated,1,1);
-               // write_output("rxdataF_comp1.m","rxF_comp1", *UE->pdsch_vars[eNB_id]->rxdataF_comp1[UE->dlsch[0][0]->current_harq_pid][round],14*12*25,1,1);
-               // write_output("rxdataF_rho.m","rho", *UE->pdsch_vars[eNB_id]->dl_ch_rho_ext[UE->dlsch[0][0]->current_harq_pid][round],14*12*25,1,1);
+               // write_output("rxdataF_comp1.m","rxF_comp1", *UE->pdsch_vars[eNB_id]->rxdataF_comp1[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round],14*12*25,1,1);
+               // write_output("rxdataF_rho.m","rho", *UE->pdsch_vars[eNB_id]->dl_ch_rho_ext[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round],14*12*25,1,1);
 
 
                 switch  (get_Qm(eNB->dlsch[0][1]->harq_processes[0]->mcs)){
@@ -4100,58 +4100,58 @@ int main(int argc, char **argv)
                   case 2:
 
                     dlsch_qpsk_llr_SIC(&UE->frame_parms,
-                                       UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[0][0]->current_harq_pid][round_sic],
+                                       UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
                                        sic_buffer,
-                                       UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[0][0]->current_harq_pid][round_sic],
-                                       UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword],
+                                       UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
+                                       UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->codeword],
                                        num_pdcch_symbols,
                                        dlsch0_eNB_harq->nb_rb,
                                        subframe,
                                        dlsch0_eNB_harq->rb_alloc[0],
                                        get_Qm(eNB->dlsch[0][0]->harq_processes[0]->mcs),
-                                       UE->dlsch[eNB_id][0]);
+                                       UE->dlsch[subframe&0x1][eNB_id][0]);
                   break;
 
                   case 4:
 
                     dlsch_16qam_llr_SIC(&UE->frame_parms,
-                                        UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[0][0]->current_harq_pid][round_sic],
+                                        UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
                                         sic_buffer,
-                                        UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[0][0]->current_harq_pid][round_sic],
-                                        UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword],
+                                        UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
+                                        UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->codeword],
                                         num_pdcch_symbols,
-                                        UE->pdsch_vars[subframe&0x1][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[subframe&0x1][0][0]->current_harq_pid][round_sic],
                                         dlsch0_eNB_harq->nb_rb,
                                         subframe,
                                         dlsch0_eNB_harq->rb_alloc[0],
                                         get_Qm(eNB->dlsch[0][TB]->harq_processes[0]->mcs),
-                                        UE->dlsch[eNB_id][0]);
+                                        UE->dlsch[subframe&0x1][eNB_id][0]);
                   break;
                   case 6:
                     dlsch_64qam_llr_SIC(&UE->frame_parms,
-                                        UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[0][0]->current_harq_pid][round_sic],
+                                        UE->pdsch_vars[subframe&0x1][eNB_id]->rxdataF_comp1[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
                                         sic_buffer,
-                                        UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[0][0]->current_harq_pid][round_sic],
-                                        UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword],
+                                        UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_rho_ext[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
+                                        UE->pdsch_vars[subframe&0x1][eNB_id]->llr[UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->codeword],
                                         num_pdcch_symbols,
-                                        UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_mag1[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],
+                                        UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_mag1[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
+                                        UE->pdsch_vars[subframe&0x1][eNB_id]->dl_ch_magb1[UE->dlsch[subframe&0x1][0][0]->current_harq_pid][round_sic],
                                         dlsch0_eNB_harq->nb_rb,
                                         subframe,
                                         dlsch0_eNB_harq->rb_alloc[0],
                                         get_Qm(eNB->dlsch[0][0]->harq_processes[0]->mcs),
-                                        UE->dlsch[eNB_id][TB]);
+                                        UE->dlsch[subframe&0x1][eNB_id][TB]);
                   break;
                     }
                   //}// rouns sic
 #ifdef DEBUG_HARQ
-                  printf("[DLSIM] TB1 is mapped into CW%d\n", UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->codeword);
+                  printf("[DLSIM] TB1 is mapped into CW%d\n", UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->codeword);
 #endif
 
                     //  write_output("rxdata_llr1.m","llr1", UE->pdsch_vars[eNB_id]->llr[1],re_allocated*2,1,0);
 
                   // replace cw_sic with TB+1
-                  UE->dlsch[0][1]->rnti = (common_flag==0) ? n_rnti: SI_RNTI;
+                  UE->dlsch[subframe&0x1][0][1]->rnti = (common_flag==0) ? n_rnti: SI_RNTI;
                   coded_bits_per_codeword[1]= get_G(&eNB->frame_parms,
                                                     eNB->dlsch[0][1]->harq_processes[0]->nb_rb,
                                                     eNB->dlsch[0][1]->harq_processes[0]->rb_alloc,
@@ -4162,12 +4162,12 @@ int main(int argc, char **argv)
                                                     subframe,
                                                     transmission_mode>=7?transmission_mode:0);
 
-                  UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->G = coded_bits_per_codeword[1];
-                  UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->Qm = get_Qm(eNB->dlsch[0][1]->harq_processes[0]->mcs);
+                  UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->G = coded_bits_per_codeword[1];
+                  UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->Qm = get_Qm(eNB->dlsch[0][1]->harq_processes[0]->mcs);
 
                   if (n_frames==2) {
                     printf("Kmimo=%d, cw=%d, G=%d, TBS=%d\n",Kmimo,1,coded_bits_per_codeword[1],
-                    UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid]->TBS);
+                    UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->TBS);
 
                   // calculate uncoded BER
                     uncoded_ber_bit = (short*) malloc(sizeof(short)*coded_bits_per_codeword[1]);
@@ -4181,7 +4181,7 @@ int main(int argc, char **argv)
                     uncoded_ber=0;
                     printf("trials=%d\n", trials);
                     for (i=0;i<coded_bits_per_codeword[1];i++)
-                    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)) {
+                    if (eNB->dlsch[0][1]->harq_processes[0]->e[i] != (UE->pdsch_vars[subframe&0x1][0]->llr[UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->codeword][i]<0)) {
                       uncoded_ber_bit[i] = 1;
                       uncoded_ber++;
                     }
@@ -4201,25 +4201,25 @@ int main(int argc, char **argv)
                 start_meas(&UE->dlsch_unscrambling_stats);
                 dlsch_unscrambling(&UE->frame_parms,
                                    0,
-                                   UE->dlsch[0][1],
+                                   UE->dlsch[subframe&0x1][0][1],
                                    coded_bits_per_codeword[1],
-                                   UE->pdsch_vars[subframe&0x1][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[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->codeword],
                                    1,
                                    subframe<<1);
                 stop_meas(&UE->dlsch_unscrambling_stats);
 
-                start_meas(&UE->dlsch_decoding_stats);
+                start_meas(&UE->dlsch_decoding_stats[subframe&0x1]);
 
                 ret[1] = dlsch_decoding(UE,
-                                        UE->pdsch_vars[subframe&0x1][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[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid]->codeword],
                                         &UE->frame_parms,
-                                        UE->dlsch[0][1],
-                                        UE->dlsch[0][1]->harq_processes[UE->dlsch[0][1]->current_harq_pid],
+                                        UE->dlsch[subframe&0x1][0][1],
+                                        UE->dlsch[subframe&0x1][0][1]->harq_processes[UE->dlsch[subframe&0x1][0][1]->current_harq_pid],
                                         0,
                                         subframe,
-                                        UE->dlsch[0][1]->current_harq_pid,
+                                        UE->dlsch[subframe&0x1][0][1]->current_harq_pid,
                                         1,llr8_flag);
-                stop_meas(&UE->dlsch_decoding_stats);
+                stop_meas(&UE->dlsch_decoding_stats[subframe&0x1]);
 
 #ifdef DEBUG_HARQ
                 printf("[DLSIM] Decoding TB1 in SIC: ret[1] = %d,  round sic %d\n", ret[1], round_sic);
@@ -4227,7 +4227,7 @@ int main(int argc, char **argv)
 
                 //printf("ret TB 1 = %d round %d \n", ret[1], round);
 
-                if (ret[1] <=UE->dlsch[0][0]->max_turbo_iterations ) {
+                if (ret[1] <=UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations ) {
                   decoded_in_sic[round]++;
                   round_sic = round+1; // to exit round_sic
 #ifdef DEBUG_HARQ
@@ -4241,19 +4241,19 @@ int main(int argc, char **argv)
                     printf("cw sic %d, round %d: No DLSCH errors found, uncoded ber %f\n",1,round,uncoded_ber);
 
                     #ifdef PRINT_BYTES
-                    for (s=0;s<UE->dlsch[0][1]->harq_processes[0]->C;s++) {
-                    if (s<UE->dlsch[0][1]->harq_processes[0]->Cminus)
-                      Kr = UE->dlsch[0][1]->harq_processes[0]->Kminus;
+                    for (s=0;s<UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->C;s++) {
+                    if (s<UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->Cminus)
+                      Kr = UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->Kminus;
                     else
-                      Kr = UE->dlsch[0][1]->harq_processes[0]->Kplus;
+                      Kr = UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->Kplus;
 
                     Kr_bytes = Kr>>3;
 
                     printf("Decoded_output (Segment %d):\n",s);
 
                     for (i=0;i<Kr_bytes;i++)
-                      printf("%d : %x (%x)\n",i,UE->dlsch[0][1]->harq_processes[0]->c[s][i],
-                      UE->dlsch[0][1]->harq_processes[0]->c[s][i]^eNB->dlsch[0][1]->harq_processes[0]->c[s][i]);
+                      printf("%d : %x (%x)\n",i,UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->c[s][i],
+                      UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->c[s][i]^eNB->dlsch[0][1]->harq_processes[0]->c[s][i]);
                     }
                     #endif
                   }
@@ -4261,7 +4261,7 @@ int main(int argc, char **argv)
               } //round_sic
 
 
-            if (ret[1] > UE->dlsch[0][0]->max_turbo_iterations ){
+            if (ret[1] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations ){
               errs[1][round]++;
 #ifdef DEBUG_HARQ
                   printf("[DLSIM] TB1 is not decoded in SIC loop, errs[TB1][round %d] = %d\n",round, errs[1][round]);
@@ -4276,23 +4276,23 @@ int main(int argc, char **argv)
                     //if ((n_frames==1) || (SNR>=30)) {
                     printf("cw sic %d, round %d: DLSCH errors found, uncoded ber %f\n",1,round,uncoded_ber);
 #ifdef PRINT_BYTES
-                    for (s=0;s<UE->dlsch[0][1]->harq_processes[0]->C;s++) {
-                      if (s<UE->dlsch[0][1]->harq_processes[0]->Cminus)
-                        Kr = UE->dlsch[0][1]->harq_processes[0]->Kminus;
+                    for (s=0;s<UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->C;s++) {
+                      if (s<UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->Cminus)
+                        Kr = UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->Kminus;
                       else
-                        Kr = UE->dlsch[0][1]->harq_processes[0]->Kplus;
+                        Kr = UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->Kplus;
 
                       Kr_bytes = Kr>>3;
 
                       printf("Decoded_output (Segment %d):\n",s);
                       for (i=0;i<Kr_bytes;i++)
-                        printf("%d : %x (%x)\n",i,UE->dlsch[0][1]->harq_processes[0]->c[s][i],
-                         UE->dlsch[0][1]->harq_processes[0]->c[s][i]^eNB->dlsch[0][1]->harq_processes[0]->c[s][i]);
+                        printf("%d : %x (%x)\n",i,UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->c[s][i],
+                         UE->dlsch[subframe&0x1][0][1]->harq_processes[0]->c[s][i]^eNB->dlsch[0][1]->harq_processes[0]->c[s][i]);
                     }
 #endif
                   } //n_frames==1
                  // exit(0);
-              } //if (ret > UE->dlsch[0][1]->max_turbo_iterations )
+              } //if (ret > UE->dlsch[subframe&0x1][0][1]->max_turbo_iterations )
             }//if SIC
           } else {
 
@@ -4307,8 +4307,8 @@ int main(int argc, char **argv)
           iter_trials[0]++;
               }*/
 
-            if ((UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->mimo_mode >=DUALSTREAM_UNIFORM_PRECODING1) &&
-              (UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->mimo_mode <=DUALSTREAM_PUSCH_PRECODING) &&
+            if ((UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mimo_mode >=DUALSTREAM_UNIFORM_PRECODING1) &&
+              (UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mimo_mode <=DUALSTREAM_PUSCH_PRECODING) &&
                 (rx_type==rx_SIC_dual_stream) && (TB0_active ==1)) {
                 errs[1][round]++;
 #ifdef DEBUG_HARQ
@@ -4327,18 +4327,18 @@ int main(int argc, char **argv)
           //if ((n_frames==1) || (SNR>=30)) {
                 printf("cw %d, round %d: DLSCH errors found, uncoded ber %f\n",TB,round,uncoded_ber);
 #ifdef PRINT_BYTES
-                for (s=0;s<UE->dlsch[0][TB]->harq_processes[0]->C;s++) {
-                  if (s<UE->dlsch[0][TB]->harq_processes[0]->Cminus)
-                    Kr = UE->dlsch[0][TB]->harq_processes[0]->Kminus;
+                for (s=0;s<UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->C;s++) {
+                  if (s<UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->Cminus)
+                    Kr = UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->Kminus;
                   else
-                    Kr = UE->dlsch[0][TB]->harq_processes[0]->Kplus;
+                    Kr = UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->Kplus;
 
                   Kr_bytes = Kr>>3;
 
                   printf("Decoded_output (Segment %d):\n",s);
                   for (i=0;i<Kr_bytes;i++)
-                    printf("%d : %x (%x)\n",i,UE->dlsch[0][TB]->harq_processes[0]->c[s][i],
-                     UE->dlsch[0][TB]->harq_processes[0]->c[s][i]^eNB->dlsch[0][TB]->harq_processes[0]->c[s][i]);
+                    printf("%d : %x (%x)\n",i,UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->c[s][i],
+                     UE->dlsch[subframe&0x1][0][TB]->harq_processes[0]->c[s][i]^eNB->dlsch[0][TB]->harq_processes[0]->c[s][i]);
                 }
 #endif
               }
@@ -4347,7 +4347,7 @@ int main(int argc, char **argv)
             TB++; // to terminate the loop over TB
           }
 
-          stop_meas(&UE->phy_proc_rx);
+          stop_meas(&UE->phy_proc_rx[subframe&0x1]);
 
           if (n_frames==1) {
 
@@ -4410,20 +4410,20 @@ int main(int argc, char **argv)
                UE->frame_parms.ofdm_symbol_size*nsymb,1,1);
             }
             //pdsch_vars
-            dump_dlsch2(UE,eNB_id,subframe,coded_bits_per_codeword,round, UE->dlsch[0][0]->current_harq_pid);
+            dump_dlsch2(UE,eNB_id,subframe,coded_bits_per_codeword,round, UE->dlsch[subframe&0x1][0][0]->current_harq_pid);
             /*
               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_eNB_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4);
-              write_output("dlsch_UE_w.m","w",UE->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0);
+              write_output("dlsch_UE_w.m","w",UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0);
             */
 
             //pdcch_vars
-            write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1);
-            write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[eNB_id]->dl_ch_estimates_ext[0],300*3,1,1);
+            write_output("pdcchF0_ext.m","pdcchF_ext", UE->pdcch_vars[subframe&0x1][eNB_id]->rxdataF_ext[0],2*3*UE->frame_parms.ofdm_symbol_size,1,1);
+            write_output("pdcch00_ch0_ext.m","pdcch00_ch0_ext",UE->pdcch_vars[subframe&0x1][eNB_id]->dl_ch_estimates_ext[0],300*3,1,1);
 
-            write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[eNB_id]->rxdataF_comp[0],4*300,1,1);
-            write_output("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[eNB_id]->llr,2400,1,4);
+            write_output("pdcch_rxF_comp0.m","pdcch0_rxF_comp0",UE->pdcch_vars[subframe&0x1][eNB_id]->rxdataF_comp[0],4*300,1,1);
+            write_output("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[subframe&0x1][eNB_id]->llr,2400,1,4);
 
             if (round == 3) exit(-1);
           }
@@ -4439,15 +4439,15 @@ int main(int argc, char **argv)
           printf("[DLSIM] Errors errs[TB0][round %d] = %d, errs[TB1][round %d] = %d\n ", round, errs[0][round], round, errs[1][round]);
 #endif
 
-          if ((transmission_mode != 3) && (transmission_mode !=4) && (ret[0] > UE->dlsch[0][0]->max_turbo_iterations)){
+          if ((transmission_mode != 3) && (transmission_mode !=4) && (ret[0] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations)){
             //printf("flag 1 \n");
             round++;
           }
 
 
           if (transmission_mode == 3 || transmission_mode == 4 ) {
-            if (ret[0] > UE->dlsch[0][0]->max_turbo_iterations &&
-               ret[1] > UE->dlsch[0][0]->max_turbo_iterations){
+            if (ret[0] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations &&
+               ret[1] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations){
               resend_both[round]++;
               round++;
               resend_cw0_cw1=1;  //resend both cws
@@ -4455,8 +4455,8 @@ int main(int argc, char **argv)
               TB0_active=1;
               TB1_active=1;
             }
-            else if (ret[1] > UE->dlsch[0][0]->max_turbo_iterations &&
-                     ret[0] <= UE->dlsch[0][0]->max_turbo_iterations){
+            else if (ret[1] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations &&
+                     ret[0] <= UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations){
               resend_one[round]++;
               resend_cw0_cw1=0;
               TB0_active=0;
@@ -4476,8 +4476,8 @@ int main(int argc, char **argv)
 #endif
             round++;
             }
-            else if (ret[0] > UE->dlsch[0][0]->max_turbo_iterations &&
-                     ret[1] <= UE->dlsch[0][0]->max_turbo_iterations){
+            else if (ret[0] > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations &&
+                     ret[1] <= UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations){
               resend_one[round]++;
               resend_cw0_cw1=0;
               TB0_active=1;
@@ -4531,10 +4531,10 @@ int main(int argc, char **argv)
         double t_tx_enc = (double)eNB->dlsch_encoding_stats.p_time/cpu_freq_GHz/1000.0;
 
 
-        double t_rx = (double)UE->phy_proc_rx.p_time/cpu_freq_GHz/1000.0;
+        double t_rx = (double)UE->phy_proc_rx[subframe&0x1].p_time/cpu_freq_GHz/1000.0;
         double t_rx_fft = (double)UE->ofdm_demod_stats.p_time/cpu_freq_GHz/1000.0;
         double t_rx_demod = (double)UE->dlsch_rx_pdcch_stats.p_time/cpu_freq_GHz/1000.0;
-        double t_rx_dec = (double)UE->dlsch_decoding_stats.p_time/cpu_freq_GHz/1000.0;
+        double t_rx_dec = (double)UE->dlsch_decoding_stats[subframe&0x1].p_time/cpu_freq_GHz/1000.0;
 
 
               if (t_tx > t_tx_max)
@@ -4796,7 +4796,7 @@ int main(int argc, char **argv)
          rate[0]*effective_rate,
          100*effective_rate,
          rate[0],
-         rate[0]*get_Qm(UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->mcs),
+         rate[0]*get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs),
          (1.0*(round_trials[0][0]-errs[0][0])+2.0*(round_trials[0][1]-errs[0][1])+3.0*(round_trials[0][2]-errs[0][2])+
           4.0*(round_trials[0][3]-errs[0][3]))/((double)round_trials[0][0])/(double)eNB->dlsch[0][0]->harq_processes[0]->TBS,
          (1.0*(round_trials[0][0]-errs[0][0])+2.0*(round_trials[0][1]-errs[0][1])+3.0*(round_trials[0][2]-errs[0][2])
@@ -4864,10 +4864,10 @@ int main(int argc, char **argv)
                eNB->dlsch_interleaving_stats.diff/eNB->dlsch_interleaving_stats.trials/cpu_freq_GHz/1000.0,eNB->dlsch_interleaving_stats.trials);
 
         printf("\n\nUE RX function statistics (per 1ms subframe)\n\n");
-        std_phy_proc_rx = sqrt((double)UE->phy_proc_rx.diff_square/pow(cpu_freq_GHz,2)/pow(1000,
-                               2)/UE->phy_proc_rx.trials - pow((double)UE->phy_proc_rx.diff/UE->phy_proc_rx.trials/cpu_freq_GHz/1000,2));
-        printf("Total PHY proc rx                                   :%f us (%d trials)\n",(double)UE->phy_proc_rx.diff/UE->phy_proc_rx.trials/cpu_freq_GHz/1000.0,
-               UE->phy_proc_rx.trials*2/3);
+        std_phy_proc_rx = sqrt((double)UE->phy_proc_rx[subframe&0x1].diff_square/pow(cpu_freq_GHz,2)/pow(1000,
+                               2)/UE->phy_proc_rx[subframe&0x1].trials - pow((double)UE->phy_proc_rx[subframe&0x1].diff/UE->phy_proc_rx[subframe&0x1].trials/cpu_freq_GHz/1000,2));
+        printf("Total PHY proc rx                                   :%f us (%d trials)\n",(double)UE->phy_proc_rx[subframe&0x1].diff/UE->phy_proc_rx[subframe&0x1].trials/cpu_freq_GHz/1000.0,
+               UE->phy_proc_rx[subframe&0x1].trials*2/3);
         printf("|__Statistcs                                            std: %fus max: %fus min: %fus median %fus q1 %fus q3 %fus n_dropped: %d packet \n", std_phy_proc_rx, t_rx_max, t_rx_min, rx_median,
                rx_q1, rx_q3, n_rx_dropped);
         std_phy_proc_rx_fft = sqrt((double)UE->ofdm_demod_stats.diff_square/pow(cpu_freq_GHz,2)/pow(1000,
@@ -4891,17 +4891,17 @@ int main(int argc, char **argv)
         printf("|__ Statistcs                           std: %fus median %fus q1 %fus q3 %fus \n",std_phy_proc_rx_demod, rx_demod_median, rx_demod_q1, rx_demod_q3);
         printf("DLSCH unscrambling time                             :%f us (%d trials)\n",(double)UE->dlsch_unscrambling_stats.diff/UE->dlsch_unscrambling_stats.trials/cpu_freq_GHz/1000.0,
                UE->dlsch_unscrambling_stats.trials);
-        std_phy_proc_rx_dec = sqrt((double)UE->dlsch_decoding_stats.diff_square/pow(cpu_freq_GHz,2)/pow(1000,
-                                   2)/UE->dlsch_decoding_stats.trials - pow((double)UE->dlsch_decoding_stats.diff/UE->dlsch_decoding_stats.trials/cpu_freq_GHz/1000,2));
+        std_phy_proc_rx_dec = sqrt((double)UE->dlsch_decoding_stats[subframe&0x1].diff_square/pow(cpu_freq_GHz,2)/pow(1000,
+                                   2)/UE->dlsch_decoding_stats[subframe&0x1].trials - pow((double)UE->dlsch_decoding_stats[subframe&0x1].diff/UE->dlsch_decoding_stats[subframe&0x1].trials/cpu_freq_GHz/1000,2));
         printf("DLSCH Decoding time (%02.2f Mbit/s, avg iter %1.2f)    :%f us (%d trials, max %f)\n",
                eNB->dlsch[0][0]->harq_processes[0]->TBS/1000.0,(double)avg_iter[0]/iter_trials[0],
-               (double)UE->dlsch_decoding_stats.diff/UE->dlsch_decoding_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_decoding_stats.trials,
-               (double)UE->dlsch_decoding_stats.max/cpu_freq_GHz/1000.0);
+               (double)UE->dlsch_decoding_stats[subframe&0x1].diff/UE->dlsch_decoding_stats[subframe&0x1].trials/cpu_freq_GHz/1000.0,UE->dlsch_decoding_stats[subframe&0x1].trials,
+               (double)UE->dlsch_decoding_stats[subframe&0x1].max/cpu_freq_GHz/1000.0);
         printf("|__ Statistcs                           std: %fus median %fus q1 %fus q3 %fus \n",std_phy_proc_rx_dec, rx_dec_median, rx_dec_q1, rx_dec_q3);
         printf("|__ DLSCH Rate Unmatching                               :%f us (%d trials)\n",
                (double)UE->dlsch_rate_unmatching_stats.diff/UE->dlsch_rate_unmatching_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_rate_unmatching_stats.trials);
         printf("|__ DLSCH Turbo Decoding(%d bits)                       :%f us (%d trials)\n",
-               UE->dlsch[0][0]->harq_processes[0]->Cminus ? UE->dlsch[0][0]->harq_processes[0]->Kminus : UE->dlsch[0][0]->harq_processes[0]->Kplus,
+               UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Cminus ? UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kminus : UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kplus,
                (double)UE->dlsch_turbo_decoding_stats.diff/UE->dlsch_turbo_decoding_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_turbo_decoding_stats.trials);
         printf("    |__ init                                            %f us (cycles/iter %f, %d trials)\n",
                (double)UE->dlsch_tc_init_stats.diff/UE->dlsch_tc_init_stats.trials/cpu_freq_GHz/1000.0,
@@ -5189,12 +5189,12 @@ int main(int argc, char **argv)
     eNB->dlsch_modulation_stats.trials,
     eNB->dlsch_scrambling_stats.trials,
     eNB->dlsch_encoding_stats.trials,
-    UE->phy_proc_rx.trials,
+    UE->phy_proc_rx[subframe&0x1].trials,
     UE->ofdm_demod_stats.trials,
     UE->dlsch_rx_pdcch_stats.trials,
     UE->dlsch_llr_stats.trials,
     UE->dlsch_unscrambling_stats.trials,
-    UE->dlsch_decoding_stats.trials
+    UE->dlsch_decoding_stats[subframe&0x1].trials
     );
   fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;%f;",
     get_time_meas_us(&eNB->phy_proc_tx),
@@ -5202,12 +5202,12 @@ int main(int argc, char **argv)
     get_time_meas_us(&eNB->dlsch_modulation_stats),
     get_time_meas_us(&eNB->dlsch_scrambling_stats),
     get_time_meas_us(&eNB->dlsch_encoding_stats),
-    get_time_meas_us(&UE->phy_proc_rx),
+    get_time_meas_us(&UE->phy_proc_rx[subframe&0x1]),
     nsymb*get_time_meas_us(&UE->ofdm_demod_stats),
     get_time_meas_us(&UE->dlsch_rx_pdcch_stats),
     3*get_time_meas_us(&UE->dlsch_llr_stats),
     get_time_meas_us(&UE->dlsch_unscrambling_stats),
-    get_time_meas_us(&UE->dlsch_decoding_stats)
+    get_time_meas_us(&UE->dlsch_decoding_stats[subframe&0x1])
     );
   //fprintf(time_meas_fd,"eNB_PROC_TX_STD;eNB_PROC_TX_MAX;eNB_PROC_TX_MIN;eNB_PROC_TX_MED;eNB_PROC_TX_Q1;eNB_PROC_TX_Q3;eNB_PROC_TX_DROPPED;\n");
   fprintf(time_meas_fd,"%f;%f;%f;%f;%f;%f;%d;", std_phy_proc_tx, t_tx_max, t_tx_min, tx_median, tx_q1, tx_q3, n_tx_dropped);
@@ -5247,7 +5247,7 @@ int main(int argc, char **argv)
     UE->dlsch_rx_pdcch_stats.trials,
     UE->dlsch_llr_stats.trials,
     UE->dlsch_unscrambling_stats.trials,
-    UE->dlsch_decoding_stats.trials);
+    UE->dlsch_decoding_stats[subframe&0x1].trials);
     */
     printf("[passed] effective rate : %f  (%2.1f%%,%f)): log and break \n",rate[0]*effective_rate, 100*effective_rate, rate[0]);
     break;
@@ -5326,7 +5326,7 @@ int main(int argc, char **argv)
 
     free_eNB_dlsch(eNB->dlsch[0][i]);
     printf("UE %d\n",i);
-    free_ue_dlsch(UE->dlsch[0][i]);
+    free_ue_dlsch(UE->dlsch[subframe&0x1][0][i]);
   }
 
 
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
index 195f27f72e9960527cc0f8d0c379768ad79b2f23..3055e99b07272a4d318787f4b6830b772efd88d8 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
@@ -953,14 +953,14 @@ int main(int argc, char **argv)
   }
 
   for (i=0; i<2; i++) {
-    UE->dlsch[0][i]  = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0);
+    UE->dlsch[subframe&0x1][0][i]  = new_ue_dlsch(Kmimo,8,Nsoft,MAX_TURBO_ITERATIONS,N_RB_DL,0);
 
-    if (!UE->dlsch[0][i]) {
+    if (!UE->dlsch[subframe&0x1][0][i]) {
       printf("Can't get ue dlsch structures\n");
       exit(-1);
     }
 
-    UE->dlsch[0][i]->rnti   = n_rnti;
+    UE->dlsch[subframe&0x1][0][i]->rnti   = n_rnti;
   }
 
   // structure for SIC at UE
@@ -2069,7 +2069,7 @@ int main(int argc, char **argv)
       reset_meas(&eNB->dlsch_rate_matching_stats);
       reset_meas(&eNB->dlsch_turbo_encoding_stats);
 
-      reset_meas(&UE->phy_proc_rx); // total UE rx
+      reset_meas(&UE->phy_proc_rx[subframe&0x1]); // total UE rx
       reset_meas(&UE->ofdm_demod_stats);
       reset_meas(&UE->dlsch_channel_estimation_stats);
       reset_meas(&UE->dlsch_freq_offset_estimation_stats);
@@ -2112,9 +2112,9 @@ int main(int argc, char **argv)
         //if (trials%100==0)
         eNB2UE[0]->first_run = 1;
 
-        ret = UE->dlsch[0][0]->max_turbo_iterations+1;
+        ret = UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations+1;
 
-        while ((round < num_rounds) && (ret > UE->dlsch[0][0]->max_turbo_iterations)) {
+        while ((round < num_rounds) && (ret > UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations)) {
               //printf("Trial %d, round %d\n",trials,round);
           round_trials[round]++;
 
@@ -2601,7 +2601,7 @@ PMI_FEEDBACK:
                 // use the PMI from previous trial
                 if (DLSCH_alloc_pdu2_1E[0].tpmi == 5) {
                   eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,eNB->frame_parms.N_RB_DL);
-                  UE->dlsch[0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
+                  UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->pmi_alloc = quantize_subband_pmi(&UE->measurements,0,UE->frame_parms.N_RB_DL);
 
                   if (n_users>1)
                     eNB->dlsch[1][0]->harq_processes[0]->pmi_alloc = (eNB->dlsch[0][0]->harq_processes[0]->pmi_alloc ^ 0x1555);
@@ -3059,7 +3059,7 @@ PMI_FEEDBACK:
           }
           
 
-          start_meas(&UE->phy_proc_rx);
+          start_meas(&UE->phy_proc_rx[subframe&0x1]);
 
           // Inner receiver scheduling for 3 slots
         
@@ -3227,7 +3227,7 @@ PMI_FEEDBACK:
 
                   for (i=0; i<dci_cnt; i++) {
                     //        printf("Generating dlsch parameters for RNTI %x\n",dci_alloc_rx[i].rnti);
-                    if (round == 0) UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->first_tx=1;
+                    if (round == 0) UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->first_tx=1;
 
                     if ((dci_alloc_rx[i].rnti == n_rnti) &&
                         (generate_ue_dlsch_params_from_dci(0,
@@ -3235,7 +3235,7 @@ PMI_FEEDBACK:
                                                            dci_alloc_rx[i].dci_pdu,
                                                            dci_alloc_rx[i].rnti,
                                                            dci_alloc_rx[i].format,
-                                                           UE->dlsch[0],
+                                                           UE->dlsch[subframe&0x1][0],
                                                            &UE->frame_parms,
                                                            UE->pdsch_config_dedicated,
                                                            SI_RNTI,
@@ -3244,23 +3244,23 @@ PMI_FEEDBACK:
                                                            transmission_mode<7?0:transmission_mode))) {
                       //dump_dci(&UE->frame_parms,&dci_alloc_rx[i]);
                       coded_bits_per_codeword = get_G(&eNB->frame_parms,
-                                                      UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->nb_rb,
-                                                      UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->rb_alloc_even,
-                                                      get_Qm(UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->mcs),
-                                                      UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->Nl,
+                                                      UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->nb_rb,
+                                                      UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->rb_alloc_even,
+                                                      get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs),
+                                                      UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->Nl,
                                                       UE->pdcch_vars[0]->num_pdcch_symbols,
                                                       0,
 						      subframe,
 						      (transmission_mode<7?0:transmission_mode));
           	    /*if (transmission_mode==7 && common_flag==0)
-       	    	      UE->dlsch[0][0]->harq_processes[0]->mimo_mode = TM7; */
+       	    	      UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->mimo_mode = TM7; */
 
                       /*
-                      rate = (double)dlsch_tbs25[get_I_TBS(UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->mcs)][UE->dlsch[0][0]->nb_rb-1]/(coded_bits_per_codeword);
-                      rate*=get_Qm(UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->mcs);
+                      rate = (double)dlsch_tbs25[get_I_TBS(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs)][UE->dlsch[subframe&0x1][0][0]->nb_rb-1]/(coded_bits_per_codeword);
+                      rate*=get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs);
                       */
                       printf("num_pdcch_symbols %d, G %d, TBS %d\n",UE->pdcch_vars[0]->num_pdcch_symbols,coded_bits_per_codeword,
-                             UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->TBS);
+                             UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->TBS);
 
                       dlsch_active = 1;
                     } else {
@@ -3288,7 +3288,7 @@ PMI_FEEDBACK:
                   UE->pdcch_vars[0]->crnti = n_rnti;
                   UE->pdcch_vars[0]->num_pdcch_symbols = num_pdcch_symbols;
 
-                  if (round == 0) UE->dlsch[0][0]->harq_processes[0]->first_tx=1;
+                  if (round == 0) UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx=1;
 
                   switch (transmission_mode) {
                   case 1:
@@ -3299,7 +3299,7 @@ PMI_FEEDBACK:
                                                       &DLSCH_alloc_pdu_1[0],
                                                       (common_flag==0)? C_RNTI : SI_RNTI,
                                                       (common_flag==0)? format1 : format1A,
-                                                      UE->dlsch[0],
+                                                      UE->dlsch[subframe&0x1][0],
                                                       &UE->frame_parms,
                                                       UE->pdsch_config_dedicated,
                                                       SI_RNTI,
@@ -3307,24 +3307,24 @@ PMI_FEEDBACK:
                                                       P_RNTI,
                                                       transmission_mode<7?0:transmission_mode);
           	    /*if(transmission_mode==7 && common_flag==0)
-       	    	      UE->dlsch[0][0]->harq_processes[0]->mimo_mode = TM7;*/ 
+       	    	      UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->mimo_mode = TM7;*/
                     break;
 
                   case 3:
-                    //        printf("Rate: TM3 (before) round %d (%d) first_tx %d\n",round,UE->dlsch[0][0]->harq_processes[0]->round,UE->dlsch[0][0]->harq_processes[0]->first_tx);
+                    //        printf("Rate: TM3 (before) round %d (%d) first_tx %d\n",round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx);
                     generate_ue_dlsch_params_from_dci(0,
 						      subframe,
                                                       &DLSCH_alloc_pdu_1[0],
                                                       (common_flag==0)? C_RNTI : SI_RNTI,
                                                       (common_flag==0)? format2A : format1A,
-                                                      UE->dlsch[0],
+                                                      UE->dlsch[subframe&0x1][0],
                                                       &UE->frame_parms,
                                                       UE->pdsch_config_dedicated,
                                                       SI_RNTI,
                                                       0,
                                                       P_RNTI,
                                                       0);
-                    //        printf("Rate: TM3 (after) round %d (%d) first_tx %d\n",round,UE->dlsch[0][0]->harq_processes[0]->round,UE->dlsch[0][0]->harq_processes[0]->first_tx);
+                    //        printf("Rate: TM3 (after) round %d (%d) first_tx %d\n",round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->round,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->first_tx);
                     break;
 
                   case 4:
@@ -3333,7 +3333,7 @@ PMI_FEEDBACK:
                                                       &DLSCH_alloc_pdu_1[0],
                                                       (common_flag==0)? C_RNTI : SI_RNTI,
                                                       (common_flag==0)? format2 : format1A,
-                                                      UE->dlsch[0],
+                                                      UE->dlsch[subframe&0x1][0],
                                                       &UE->frame_parms,
                                                       UE->pdsch_config_dedicated,
                                                       SI_RNTI,
@@ -3349,7 +3349,7 @@ PMI_FEEDBACK:
                                                       &DLSCH_alloc_pdu2_1E[0],
                                                       C_RNTI,
                                                       format1E_2A_M10PRB,
-                                                      UE->dlsch[0],
+                                                      UE->dlsch[subframe&0x1][0],
                                                       &UE->frame_parms,
                                                       UE->pdsch_config_dedicated,
                                                       SI_RNTI,
@@ -3381,7 +3381,7 @@ PMI_FEEDBACK:
                 if ((Ns==(1+(2*subframe))) && (l==0)) {// process PDSCH symbols 1,2,3,4,5,(6 Normal Prefix)
 
                   if ((transmission_mode == 5) &&
-                      (UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->dl_power_off==0) &&
+                      (UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->dl_power_off==0) &&
                       (UE->use_ia_receiver ==1)) {
                     dual_stream_UE = 1;
                   } else {
@@ -3404,7 +3404,7 @@ PMI_FEEDBACK:
                                  (m==UE->pdcch_vars[0]->num_pdcch_symbols)?1:0,
                                  dual_stream_UE,
                                  i_mod,
-                                 UE->dlsch[0][0]->current_harq_pid)==-1) {
+                                 UE->dlsch[subframe&0x1][0][0]->current_harq_pid)==-1) {
                       dlsch_active = 0;
                       break;
                     }
@@ -3430,7 +3430,7 @@ PMI_FEEDBACK:
                                  0,
                                  dual_stream_UE,
                                  i_mod,
-                                 UE->dlsch[0][0]->current_harq_pid)==-1) {
+                                 UE->dlsch[subframe&0x1][0][0]->current_harq_pid)==-1) {
                       dlsch_active=0;
                       break;
                     }
@@ -3456,7 +3456,7 @@ PMI_FEEDBACK:
                                  0,
                                  dual_stream_UE,
                                  i_mod,
-                                 UE->dlsch[0][0]->current_harq_pid)==-1) {
+                                 UE->dlsch[subframe&0x1][0][0]->current_harq_pid)==-1) {
                       dlsch_active=0;
                       break;
                     }
@@ -3504,7 +3504,7 @@ PMI_FEEDBACK:
                                    UE->frame_parms.ofdm_symbol_size*nsymb/2,1,1);
 
                     //pdsch_vars
-                    dump_dlsch2(UE,eNB_id,subframe,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);
                     write_output("dlsch_e.m","e",eNB->dlsch[0][0]->harq_processes[0]->e,coded_bits_per_codeword,1,4);
 
@@ -3534,7 +3534,7 @@ PMI_FEEDBACK:
           }
 
           for (int cw=Kmimo-1; cw>=0; cw--) {
-            UE->dlsch[0][cw]->rnti = (common_flag==0) ? n_rnti: SI_RNTI;
+            UE->dlsch[subframe&0x1][0][cw]->rnti = (common_flag==0) ? n_rnti: SI_RNTI;
             coded_bits_per_codeword = get_G(&eNB->frame_parms,
                                             eNB->dlsch[0][cw]->harq_processes[0]->nb_rb,
                                             eNB->dlsch[0][cw]->harq_processes[0]->rb_alloc,
@@ -3545,7 +3545,7 @@ PMI_FEEDBACK:
 					    subframe,
 					    (transmission_mode<7?0:transmission_mode));
 
-            UE->dlsch[0][cw]->harq_processes[UE->dlsch[0][cw]->current_harq_pid]->G = coded_bits_per_codeword;
+            UE->dlsch[subframe&0x1][0][cw]->harq_processes[UE->dlsch[subframe&0x1][0][cw]->current_harq_pid]->G = coded_bits_per_codeword;
 
 
 	                
@@ -3569,7 +3569,7 @@ PMI_FEEDBACK:
             start_meas(&UE->dlsch_unscrambling_stats);
             dlsch_unscrambling(&UE->frame_parms,
                                0,
-                               UE->dlsch[0][cw],
+                               UE->dlsch[subframe&0x1][0][cw],
                                coded_bits_per_codeword,
                                UE->pdsch_vars[subframe&0x1][eNB_id]->llr[cw],
                                0,
@@ -3580,15 +3580,15 @@ PMI_FEEDBACK:
             ret = dlsch_decoding(UE,
                                  UE->pdsch_vars[subframe&0x1][eNB_id]->llr[cw],
                                  &UE->frame_parms,
-                                 UE->dlsch[0][cw],
-                                 UE->dlsch[0][cw]->harq_processes[UE->dlsch[0][cw]->current_harq_pid],
+                                 UE->dlsch[subframe&0x1][0][cw],
+                                 UE->dlsch[subframe&0x1][0][cw]->harq_processes[UE->dlsch[subframe&0x1][0][cw]->current_harq_pid],
                                  subframe,
-                                 UE->dlsch[0][cw]->current_harq_pid,
+                                 UE->dlsch[subframe&0x1][0][cw]->current_harq_pid,
                                  1,llr8_flag);
             stop_meas(&UE->dlsch_decoding_stats);
 
             if (cw==1) {
-              if (ret <= UE->dlsch[0][cw]->max_turbo_iterations) {
+              if (ret <= UE->dlsch[subframe&0x1][0][cw]->max_turbo_iterations) {
               } else {
                 errs2[round]++;
               }
@@ -3596,10 +3596,10 @@ PMI_FEEDBACK:
           }
 
 
-          stop_meas(&UE->phy_proc_rx);
+          stop_meas(&UE->phy_proc_rx[subframe&0x1]);
 
 
-          if (ret <= UE->dlsch[0][0]->max_turbo_iterations) {
+          if (ret <= UE->dlsch[subframe&0x1][0][0]->max_turbo_iterations) {
 
             avg_iter += ret;
             iter_trials++;
@@ -3607,15 +3607,15 @@ PMI_FEEDBACK:
             if (n_frames==1)
               printf("No DLSCH errors found (round %d),uncoded ber %f\n",round,uncoded_ber);
 
-            UE->total_TBS[eNB_id] =  UE->total_TBS[eNB_id] + UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->TBS;
+            UE->total_TBS[eNB_id] =  UE->total_TBS[eNB_id] + UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->TBS;
             TB0_active = 0;
 
-            if (UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->mimo_mode == LARGE_CDD) {   //try to decode second stream using SIC
+            if (UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->mimo_mode == LARGE_CDD) {   //try to decode second stream using SIC
               /*
-              for (round = 0 ; round < UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->round ; round++) {
+              for (round = 0 ; round < UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->round ; round++) {
               // re-encoding of first stream
-              dlsch0_ue_harq = UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid];
-              dlsch0_eNB_harq = UE->dlsch[eNB_id]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid];
+              dlsch0_ue_harq = UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid];
+              dlsch0_eNB_harq = UE->dlsch[subframe&0x1][eNB_id]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid];
               dlsch0_eNB_harq->mimo_mode    = LARGE_CDD;
               dlsch0_eNB_harq->rb_alloc[0]  = dlsch0_ue_harq->rb_alloc_even[0];
               dlsch0_eNB_harq->nb_rb        = dlsch0_ue_harq->nb_rb;
@@ -3627,13 +3627,13 @@ PMI_FEEDBACK:
               dlsch0_eNB_harq->dl_power_off = dlsch0_ue_harq->dl_power_off;
               dlsch0_eNB_harq->status       = dlsch0_ue_harq->status;
 
-              UE->dlsch[eNB_id]->active       = UE->dlsch[eNB_id][0]->active;
-              UE->dlsch[eNB_id]->rnti         = UE->dlsch[eNB_id][0]->rnti;
+              UE->dlsch[subframe&0x1][eNB_id]->active       = UE->dlsch[subframe&0x1][eNB_id][0]->active;
+              UE->dlsch[subframe&0x1][eNB_id]->rnti         = UE->dlsch[subframe&0x1][eNB_id][0]->rnti;
 
-              dlsch_encoding(UE->dlsch[eNB_id][0]->harq_processes[UE->dlsch[eNB_id][0]->current_harq_pid]->b,
+              dlsch_encoding(UE->dlsch[subframe&0x1][eNB_id][0]->harq_processes[UE->dlsch[subframe&0x1][eNB_id][0]->current_harq_pid]->b,
                    &UE->frame_parms,
                    num_pdcch_symbols,
-                   UE->dlsch[0],
+                   UE->dlsch[subframe&0x1][0],
                    0,subframe,
                    &UE->dlsch_rate_matching_stats,
                    &UE->dlsch_turbo_encoding_stats,
@@ -3660,18 +3660,18 @@ PMI_FEEDBACK:
               //if ((n_frames==1) || (SNR>=30)) 
               printf("DLSCH errors found (round %d), uncoded ber %f\n",round,uncoded_ber);
 
-              for (s=0; s<UE->dlsch[0][0]->harq_processes[0]->C; s++) {
-                if (s<UE->dlsch[0][0]->harq_processes[0]->Cminus)
-                  Kr = UE->dlsch[0][0]->harq_processes[0]->Kminus;
+              for (s=0; s<UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->C; s++) {
+                if (s<UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Cminus)
+                  Kr = UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kminus;
                 else
-                  Kr = UE->dlsch[0][0]->harq_processes[0]->Kplus;
+                  Kr = UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kplus;
 
                 Kr_bytes = Kr>>3;
 
                 printf("Decoded_output (Segment %d):\n",s);
 
                 for (i=0; i<Kr_bytes; i++)
-                  printf("%d : %x (%x)\n",i,UE->dlsch[0][0]->harq_processes[0]->c[s][i],UE->dlsch[0][0]->harq_processes[0]->c[s][i]^eNB->dlsch[0][0]->harq_processes[0]->c[s][i]);
+                  printf("%d : %x (%x)\n",i,UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->c[s][i],UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->c[s][i]^eNB->dlsch[0][0]->harq_processes[0]->c[s][i]);
               }
 
               sprintf(fname,"rxsig0_r%d.m",round);
@@ -3721,12 +3721,12 @@ PMI_FEEDBACK:
               }
 
               //pdsch_vars
-              dump_dlsch2(UE,eNB_id,subframe,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_ber_bit.m","ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0);
               write_output("dlsch_w.m","w",eNB->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,4);
-              write_output("dlsch_w.m","w",UE->dlsch[0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0);
+              write_output("dlsch_w.m","w",UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->w[0],3*(tbs+64),1,0);
               */
 
               if (round == 3) exit(-1);
@@ -3735,7 +3735,7 @@ PMI_FEEDBACK:
             //      printf("round %d errors %d/%d\n",round,errs[round],trials);
 
             round++;
-            //      UE->dlsch[0][0]->harq_processes[0]->round++;
+            //      UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->round++;
           }
 
 	  if (xforms==1) {
@@ -3775,7 +3775,7 @@ PMI_FEEDBACK:
         double t_tx_enc = (double)eNB->dlsch_encoding_stats.p_time/cpu_freq_GHz/1000.0;
 
 
-        double t_rx = (double)UE->phy_proc_rx.p_time/cpu_freq_GHz/1000.0;
+        double t_rx = (double)UE->phy_proc_rx[subframe&0x1].p_time/cpu_freq_GHz/1000.0;
         double t_rx_fft = (double)UE->ofdm_demod_stats.p_time/cpu_freq_GHz/1000.0;
         double t_rx_demod = (double)UE->dlsch_rx_pdcch_stats.p_time/cpu_freq_GHz/1000.0;
         double t_rx_dec = (double)UE->dlsch_decoding_stats.p_time/cpu_freq_GHz/1000.0;
@@ -3925,7 +3925,7 @@ PMI_FEEDBACK:
              rate*effective_rate,
              100*effective_rate,
              rate,
-             rate*get_Qm(UE->dlsch[0][0]->harq_processes[UE->dlsch[0][0]->current_harq_pid]->mcs),
+             rate*get_Qm(UE->dlsch[subframe&0x1][0][0]->harq_processes[UE->dlsch[subframe&0x1][0][0]->current_harq_pid]->mcs),
              (1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0])/
              (double)eNB->dlsch[0][0]->harq_processes[0]->TBS,
              (1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0]));
@@ -3964,10 +3964,10 @@ PMI_FEEDBACK:
                eNB->dlsch_interleaving_stats.diff/eNB->dlsch_interleaving_stats.trials/cpu_freq_GHz/1000.0,eNB->dlsch_interleaving_stats.trials);
 
         printf("\n\nUE RX function statistics (per 1ms subframe)\n\n");
-        std_phy_proc_rx = sqrt((double)UE->phy_proc_rx.diff_square/pow(cpu_freq_GHz,2)/pow(1000,
-                               2)/UE->phy_proc_rx.trials - pow((double)UE->phy_proc_rx.diff/UE->phy_proc_rx.trials/cpu_freq_GHz/1000,2));
-        printf("Total PHY proc rx                                   :%f us (%d trials)\n",(double)UE->phy_proc_rx.diff/UE->phy_proc_rx.trials/cpu_freq_GHz/1000.0,
-               UE->phy_proc_rx.trials*2/3);
+        std_phy_proc_rx = sqrt((double)UE->phy_proc_rx[subframe&0x1].diff_square/pow(cpu_freq_GHz,2)/pow(1000,
+                               2)/UE->phy_proc_rx[subframe&0x1].trials - pow((double)UE->phy_proc_rx[subframe&0x1].diff/UE->phy_proc_rx[subframe&0x1].trials/cpu_freq_GHz/1000,2));
+        printf("Total PHY proc rx                                   :%f us (%d trials)\n",(double)UE->phy_proc_rx[subframe&0x1].diff/UE->phy_proc_rx[subframe&0x1].trials/cpu_freq_GHz/1000.0,
+               UE->phy_proc_rx[subframe&0x1].trials*2/3);
         printf("|__Statistcs                                            std: %fus max: %fus min: %fus median %fus q1 %fus q3 %fus n_dropped: %d packet \n", std_phy_proc_rx, t_rx_max, t_rx_min, rx_median,
                rx_q1, rx_q3, n_rx_dropped);
         std_phy_proc_rx_fft = sqrt((double)UE->ofdm_demod_stats.diff_square/pow(cpu_freq_GHz,2)/pow(1000,
@@ -4001,7 +4001,7 @@ PMI_FEEDBACK:
         printf("|__ DLSCH Rate Unmatching                               :%f us (%d trials)\n",
                (double)UE->dlsch_rate_unmatching_stats.diff/UE->dlsch_rate_unmatching_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_rate_unmatching_stats.trials);
         printf("|__ DLSCH Turbo Decoding(%d bits)                       :%f us (%d trials)\n",
-               UE->dlsch[0][0]->harq_processes[0]->Cminus ? UE->dlsch[0][0]->harq_processes[0]->Kminus : UE->dlsch[0][0]->harq_processes[0]->Kplus,
+               UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Cminus ? UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kminus : UE->dlsch[subframe&0x1][0][0]->harq_processes[0]->Kplus,
                (double)UE->dlsch_turbo_decoding_stats.diff/UE->dlsch_turbo_decoding_stats.trials/cpu_freq_GHz/1000.0,UE->dlsch_turbo_decoding_stats.trials);
         printf("    |__ init                                            %f us (cycles/iter %f, %d trials)\n",
                (double)UE->dlsch_tc_init_stats.diff/UE->dlsch_tc_init_stats.trials/cpu_freq_GHz/1000.0,
@@ -4179,7 +4179,7 @@ PMI_FEEDBACK:
                 eNB->dlsch_modulation_stats.trials,
                 eNB->dlsch_scrambling_stats.trials,
                 eNB->dlsch_encoding_stats.trials,
-                UE->phy_proc_rx.trials,
+                UE->phy_proc_rx[subframe&0x1].trials,
                 UE->ofdm_demod_stats.trials,
                 UE->dlsch_rx_pdcch_stats.trials,
                 UE->dlsch_llr_stats.trials,
@@ -4192,7 +4192,7 @@ PMI_FEEDBACK:
                 get_time_meas_us(&eNB->dlsch_modulation_stats),
                 get_time_meas_us(&eNB->dlsch_scrambling_stats),
                 get_time_meas_us(&eNB->dlsch_encoding_stats),
-                get_time_meas_us(&UE->phy_proc_rx),
+                get_time_meas_us(&UE->phy_proc_rx[subframe&0x1]),
                 nsymb*get_time_meas_us(&UE->ofdm_demod_stats),
                 get_time_meas_us(&UE->dlsch_rx_pdcch_stats),
                 3*get_time_meas_us(&UE->dlsch_llr_stats),
@@ -4232,7 +4232,7 @@ PMI_FEEDBACK:
         eNB->dlsch_modulation_stats.trials,
         eNB->dlsch_scrambling_stats.trials,
         eNB->dlsch_encoding_stats.trials,
-        UE->phy_proc_rx.trials,
+        UE->phy_proc_rx[subframe&0x1].trials,
         UE->ofdm_demod_stats.trials,
         UE->dlsch_rx_pdcch_stats.trials,
         UE->dlsch_llr_stats.trials,
@@ -4290,7 +4290,7 @@ PMI_FEEDBACK:
     printf("eNB %d\n",i);
     free_eNB_dlsch(eNB->dlsch[0][i]);
     printf("UE %d\n",i);
-    free_ue_dlsch(UE->dlsch[0][i]);
+    free_ue_dlsch(UE->dlsch[subframe&0x1][0][i]);
   }
 
 
diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c
index fb2fa506ac20f01aedc334f9283ca4836f75b895..69de4aee9f000337292bff2f6d5c2e5b9f9d3822 100644
--- a/openair1/SIMULATION/LTE_PHY/mbmssim.c
+++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c
@@ -50,6 +50,7 @@
 PHY_VARS_eNB *eNB;
 PHY_VARS_UE *UE;
 
+double cpuf;
 
 DCI1E_5MHz_2A_M10PRB_TDD_t  DLSCH_alloc_pdu2_1E[2];
 #define UL_RB_ALLOC 0x1ff;
@@ -118,6 +119,8 @@ int main(int argc, char **argv)
 #endif
   */
 
+  cpuf = get_cpu_freq_GHz();
+
   logInit();
   number_of_cards = 1;
 
diff --git a/openair1/SIMULATION/LTE_PHY/pbchsim.c b/openair1/SIMULATION/LTE_PHY/pbchsim.c
index 806a206a2bd851800126a929b7a9f51bfa14dec9..f117879d6b49fd43f390d3c9999dae237bc3a492 100644
--- a/openair1/SIMULATION/LTE_PHY/pbchsim.c
+++ b/openair1/SIMULATION/LTE_PHY/pbchsim.c
@@ -50,6 +50,8 @@
 PHY_VARS_eNB *eNB,*eNB1,*eNB2;
 PHY_VARS_UE *UE;
 
+double cpuf;
+
 #define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
 
 int32_t *dummybuf[4];
@@ -116,6 +118,8 @@ int main(int argc, char **argv)
   char title[255];
 #endif
 
+  cpuf = get_cpu_freq_GHz();
+
   logInit();
   number_of_cards = 1;
 
diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c
index 1ba79bdb0a4182ff10a2c5ae3609025310704381..4c50aaa5d540ca3c18a7718ff6f904db7844c26d 100644
--- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c
+++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c
@@ -50,6 +50,7 @@ PHY_VARS_UE *UE;
 #define CCCH_RB_ALLOC computeRIV(eNB->frame_parms.N_RB_UL,0,2)
 #define DLSCH_RB_ALLOC ((uint16_t)0x1fbf) // igore DC component,RB13
 
+double cpuf;
 
 DCI_PDU DCI_pdu;
 
@@ -457,6 +458,8 @@ int main(int argc, char **argv)
 
   number_of_cards = 1;
 
+  cpuf = get_cpu_freq_GHz();
+
   logInit();
 
 
@@ -1085,12 +1088,10 @@ int main(int argc, char **argv)
           //      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);
 
           // do PDCCH procedures here
-          UE->pdcch_vars[0]->crnti = n_rnti;
+          UE->pdcch_vars[0][0]->crnti = n_rnti;
 
           //    printf("Doing RX : num_pdcch_symbols at TX %d\n",num_pdcch_symbols);
-          rx_pdcch(&UE->common_vars,
-                   UE->pdcch_vars,
-                   &UE->frame_parms,
+          rx_pdcch(UE,
                    trial,
                    subframe,
                    0,
@@ -1118,7 +1119,7 @@ int main(int argc, char **argv)
           dl_rx=0;
 
           if (n_frames==1)  {
-            numCCE = get_nCCE(UE->pdcch_vars[0]->num_pdcch_symbols, &UE->frame_parms, get_mi(&UE->frame_parms,subframe));
+            numCCE = get_nCCE(UE->pdcch_vars[0][0]->num_pdcch_symbols, &UE->frame_parms, get_mi(&UE->frame_parms,subframe));
 
             for (i = 0; i < dci_cnt; i++)
               printf("dci %d: rnti 0x%x, format %d, L %d, nCCE %d/%d dci_length %d\n",i, dci_alloc_rx[i].rnti, dci_alloc_rx[i].format,
@@ -1167,7 +1168,7 @@ int main(int argc, char **argv)
             //   exit(-1);
           }
 
-          if (UE->pdcch_vars[0]->num_pdcch_symbols != num_pdcch_symbols)
+          if (UE->pdcch_vars[0][0]->num_pdcch_symbols != num_pdcch_symbols)
             n_errors_cfi++;
 
           /*
@@ -1224,9 +1225,9 @@ int main(int argc, char **argv)
     if (n_tx==2)
       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_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_llr.m","pdcch_llr",UE->pdcch_vars[eNb_id]->llr,2400,1,4);
+    write_output("pdcch_rxF_ext0.m","pdcch_rxF_ext0",UE->pdcch_vars[0][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[0][eNb_id]->rxdataF_comp[0],4*12*UE->frame_parms.N_RB_DL,1,1);
+    write_output("pdcch_rxF_llr.m","pdcch_llr",UE->pdcch_vars[0][eNb_id]->llr,2400,1,4);
   }
 
   lte_sync_time_free();
diff --git a/openair1/SIMULATION/LTE_PHY/prachsim.c b/openair1/SIMULATION/LTE_PHY/prachsim.c
index 7acc07528c4763cc3e23fb4d34bece13be8c7473..52339cdc5d585c1a20f6276bc680283d6bb46afa 100644
--- a/openair1/SIMULATION/LTE_PHY/prachsim.c
+++ b/openair1/SIMULATION/LTE_PHY/prachsim.c
@@ -45,7 +45,7 @@ PHY_VARS_UE *UE;
 
 #define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
 
-
+double cpuf;
 
 extern uint16_t prach_root_sequence_map0_3[838];
 
@@ -99,6 +99,8 @@ int main(int argc, char **argv)
   int NCS_config = 1,rootSequenceIndex=0;
   int threequarter_fs = 0;
 
+  cpuf = get_cpu_freq_GHz();
+
   logInit();
 
   number_of_cards = 1;
diff --git a/openair1/SIMULATION/LTE_PHY/pucchsim.c b/openair1/SIMULATION/LTE_PHY/pucchsim.c
index 77bfcb18cf68682f2d80f87cd371c92c5e45d25d..d1db3c29e13067486b16e628d5820c58b270f3cc 100644
--- a/openair1/SIMULATION/LTE_PHY/pucchsim.c
+++ b/openair1/SIMULATION/LTE_PHY/pucchsim.c
@@ -47,7 +47,7 @@ PHY_VARS_UE *UE;
 
 #define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
 
-
+double cpuf;
 
 int main(int argc, char **argv)
 {
@@ -101,6 +101,8 @@ int main(int argc, char **argv)
 
   number_of_cards = 1;
 
+  cpuf = get_cpu_freq_GHz();
+
   while ((c = getopt (argc, argv, "har:pf:g:n:s:S:x:y:z:N:F:T:R:")) != -1) {
     switch (c) {
     case 'a':
diff --git a/openair1/SIMULATION/LTE_PHY/syncsim.c b/openair1/SIMULATION/LTE_PHY/syncsim.c
index 6e74f7bc01f2181a09c44dbddf5c522b43a0c710..97a94a1a4323f3bda14401c39425b1c761b6db3b 100644
--- a/openair1/SIMULATION/LTE_PHY/syncsim.c
+++ b/openair1/SIMULATION/LTE_PHY/syncsim.c
@@ -406,7 +406,7 @@ int main(int argc, char **argv)
 
   DCI_ALLOC_t dci_alloc[8],dci_alloc_rx[8];
   uint16_t n_rnti=1234,dci_cnt;
-  uint16_t coded_bits_per_codeword;
+  unsigned int coded_bits_per_codeword;
   double tmp_re,tmp_im,foff,deltaF=0.0,cs,sn;
   uint32_t carrier_freq[4]= {1907600000,1907600000,1907600000,1907600000};
   uint32_t rf_mode[4]     = {55759,55759,55759,55759};
@@ -1739,7 +1739,7 @@ int main(int argc, char **argv)
                                       PHY_vars_UE[0]->lte_ue_pdcch_vars[0]->num_pdcch_symbols,
                                       0);
 
-      dump_dlsch2(PHY_vars_UE[0],0,0,coded_bits_per_codeword);
+      dump_dlsch2(PHY_vars_UE[0],0,0,&coded_bits_per_codeword);
 
     }
   } else {
diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c
index 02800b8520eea98adb80c2f4c56280fec0c0382a..013b65c2495fecbafa6dc1a82d894c61a71909a0 100644
--- a/openair1/SIMULATION/LTE_PHY/ulsim.c
+++ b/openair1/SIMULATION/LTE_PHY/ulsim.c
@@ -50,6 +50,7 @@
 PHY_VARS_eNB *eNB;
 PHY_VARS_UE *UE;
 
+double cpuf;
 
 
 
@@ -280,6 +281,7 @@ int main(int argc, char **argv)
   opp_enabled=1; // to enable the time meas
 
   cpu_freq_GHz = (double)get_cpu_freq_GHz();
+  cpuf = cpu_freq_GHz;
 
   printf("Detected cpu_freq %f GHz\n",cpu_freq_GHz);
 
@@ -633,7 +635,7 @@ int main(int argc, char **argv)
     fl_show_form (form_enb->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
   }
 
-  UE->pdcch_vars[0]->crnti = 14;
+  UE->pdcch_vars[0][0]->crnti = 14;
 
   UE->frame_parms.soundingrs_ul_config_common.enabled_flag = srs_flag;
   UE->frame_parms.soundingrs_ul_config_common.srs_BandwidthConfig = 2;
@@ -697,20 +699,20 @@ int main(int argc, char **argv)
   // Create transport channel structures for 2 transport blocks (MIMO)
   for (i=0; i<2; i++) {
     eNB->dlsch[0][i] = new_eNB_dlsch(1,8,1827072,N_RB_DL,0,&eNB->frame_parms);
-    UE->dlsch[0][i]  = new_ue_dlsch(1,8,1827072,MAX_TURBO_ITERATIONS,N_RB_DL,0);
+    UE->dlsch[subframe&1][0][i]  = new_ue_dlsch(1,8,1827072,MAX_TURBO_ITERATIONS,N_RB_DL,0);
 
     if (!eNB->dlsch[0][i]) {
       printf("Can't get eNB dlsch structures\n");
       exit(-1);
     }
 
-    if (!UE->dlsch[0][i]) {
+    if (!UE->dlsch[subframe&1][0][i]) {
       printf("Can't get ue dlsch structures\n");
       exit(-1);
     }
 
     eNB->dlsch[0][i]->rnti = 14;
-    UE->dlsch[0][i]->rnti   = 14;
+    UE->dlsch[subframe&1][0][i]->rnti   = 14;
 
   } 
 
@@ -751,7 +753,7 @@ int main(int argc, char **argv)
   init_ul_hopping(&eNB->frame_parms);
 
 
-  UE->dlsch[0][0]->harq_ack[ul_subframe2pdcch_alloc_subframe(&eNB->frame_parms,subframe)].send_harq_status = 1;
+  UE->dlsch[subframe&1][0][0]->harq_ack[ul_subframe2pdcch_alloc_subframe(&eNB->frame_parms,subframe)].send_harq_status = 1;
 
   UE->ulsch_Msg3_active[eNB_id] = 0;
   UE->ul_power_control_dedicated[eNB_id].accumulationEnabled=1;
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_device.c b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_device.c
index 7a8bd0f86788e94e7dccc31c20098806fa9c8710..77b3c28165f879f182c6204398cd3e0685fe1ca7 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_device.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_device.c
@@ -233,9 +233,12 @@ int nasmt_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
   }
 
   // End debug information
-
   netif_stop_queue(dev);
+#if  LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0)
+  netif_trans_update(dev);
+#else
   dev->trans_start = jiffies;
+#endif
 #ifdef NAS_DEBUG_SEND_DETAIL
   printk("nasmt_hard_start_xmit: step 1\n");
 #endif
@@ -307,7 +310,11 @@ void nasmt_tx_timeout(struct net_device *dev)
   printk("nasmt_tx_timeout: begin\n");
   //((struct nas_priv *)(dev->priv))->stats.tx_errors++;
   (gpriv->stats).tx_errors++;
+#if  LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0)
+  netif_trans_update(dev);
+#else
   dev->trans_start = jiffies;
+#endif
   netif_wake_queue(dev);
   printk("nasmt_tx_timeout: transmit timed out %s\n",dev->name);
 }
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_device.c b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_device.c
index aaaa95754dcabe873ad8aea0e2a4fcbf18d52b77..970600de214357157b9546eec561d02a846de770 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_device.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_device.c
@@ -226,7 +226,11 @@ int nasrg_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
   // End debug information
   netif_stop_queue(dev);
+#if  LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0)
+  netif_trans_update(dev);
+#else
   dev->trans_start = jiffies;
+#endif
 #ifdef NAS_DEBUG_SEND_DETAIL
   printk("nasrg_hard_start_xmit: step 1\n");
 #endif
@@ -296,7 +300,11 @@ void nasrg_tx_timeout(struct net_device *dev)
   printk("nasrg_tx_timeout: begin\n");
   //  ((struct nas_priv *)(dev->priv))->stats.tx_errors++;
   (gpriv->stats).tx_errors++;
+#if  LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0)
+  netif_trans_update(dev);
+#else
   dev->trans_start = jiffies;
+#endif
   netif_wake_queue(dev);
   printk("nasrg_tx_timeout: transmit timed out %s\n",dev->name);
 }
diff --git a/openair2/NETWORK_DRIVER/LITE/device.c b/openair2/NETWORK_DRIVER/LITE/device.c
index 9579ebf249cecd5665a10c8493b4a96c45c4ab6a..616af5e14550c47e52f38c91b292ff64806bcab8 100644
--- a/openair2/NETWORK_DRIVER/LITE/device.c
+++ b/openair2/NETWORK_DRIVER/LITE/device.c
@@ -255,7 +255,11 @@ int oai_nw_drv_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
     // End debug information
     netif_stop_queue(dev);
+#if  LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0)
+    netif_trans_update(dev);
+#else
     dev->trans_start = jiffies;
+#endif
 #ifdef OAI_DRV_DEBUG_DEVICE
     printk("[OAI_IP_DRV][%s] step 1\n", __FUNCTION__);
 #endif
@@ -328,7 +332,11 @@ void oai_nw_drv_tx_timeout(struct net_device *dev)
   printk("[OAI_IP_DRV][%s] begin\n", __FUNCTION__);
   //  (struct oai_nw_drv_priv *)(dev->priv)->stats.tx_errors++;
   (priv->stats).tx_errors++;
+#if  LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0)
+  netif_trans_update(dev);
+#else
   dev->trans_start = jiffies;
+#endif
   netif_wake_queue(dev);
   printk("[OAI_IP_DRV][%s] transmit timed out %s\n", __FUNCTION__,dev->name);
 }
diff --git a/openair2/NETWORK_DRIVER/MESH/classifier.c b/openair2/NETWORK_DRIVER/MESH/classifier.c
index a982faac46b04266fd3cd94ed1b32b7e104b76ce..d477ba3ea907bd67ac9366e20c875871aa5b7058 100644
--- a/openair2/NETWORK_DRIVER/MESH/classifier.c
+++ b/openair2/NETWORK_DRIVER/MESH/classifier.c
@@ -790,7 +790,7 @@ void nas_CLASS_send(struct sk_buff *skb,int inst)
              dscp, sprotocol, sp->classref, sfct, sp->rab_id);
 #endif
 
-      sp->fct(skb, cx, sp,inst);
+      sp->fct(skb, cx, sp,inst, NULL);
 
     } // if classifier entry match found
 
@@ -808,7 +808,7 @@ void nas_CLASS_send(struct sk_buff *skb,int inst)
   if (no_connection == 1)
     printk("NAS_CLASS_SEND: no corresponding connection, so the message is dropped\n");
 
-#endif NAS_DEBUG_CLASS
+#endif /* NAS_DEBUG_CLASS */
 
 
   //  }   // while loop over connections
diff --git a/openair2/NETWORK_DRIVER/MESH/common.c b/openair2/NETWORK_DRIVER/MESH/common.c
index 0a4e3ddfed975167f8ca74180707c8e8b3e61de6..6d10abd3801f64f5b55297f9942a9835c224d80e 100644
--- a/openair2/NETWORK_DRIVER/MESH/common.c
+++ b/openair2/NETWORK_DRIVER/MESH/common.c
@@ -321,10 +321,9 @@ void nas_COMMON_receive(uint16_t dlen,
 
 //---------------------------------------------------------------------------
 // Delete the data
-void nas_COMMON_del_send(struct sk_buff *skb, struct cx_entity *cx, struct classifier_entity *sp,int inst)
+void nas_COMMON_del_send(struct sk_buff *skb, struct cx_entity *cx, struct classifier_entity *sp,int inst,struct nas_priv *gpriv)
 {
   struct nas_priv *priv=netdev_priv(nasdev[inst]);
-
   //---------------------------------------------------------------------------
   ++priv->stats.tx_dropped;
 }
@@ -332,7 +331,7 @@ void nas_COMMON_del_send(struct sk_buff *skb, struct cx_entity *cx, struct class
 //---------------------------------------------------------------------------
 // Request the transfer of data (QoS SAP)
 
-void nas_COMMON_QOS_send(struct sk_buff *skb, struct cx_entity *cx, struct classifier_entity *gc,int inst)
+void nas_COMMON_QOS_send(struct sk_buff *skb, struct cx_entity *cx, struct classifier_entity *gc,int inst, struct nas_priv *gpriv)
 {
   //---------------------------------------------------------------------------
   struct pdcp_data_req_header_s     pdcph;
diff --git a/openair2/NETWORK_DRIVER/MESH/device.c b/openair2/NETWORK_DRIVER/MESH/device.c
index f28b41fc6889ef0e531c9eed210e51261c55a7fe..393fe9f9e01fe3ffd4fe863a7b693ab5d309e4f8 100644
--- a/openair2/NETWORK_DRIVER/MESH/device.c
+++ b/openair2/NETWORK_DRIVER/MESH/device.c
@@ -124,11 +124,8 @@ void *nas_interrupt(void)
 int nas_open(struct net_device *dev)
 {
   //---------------------------------------------------------------------------
-  struct nas_priv *priv=netdev_priv(dev);
-
   printk("OPEN: begin\n");
   //  MOD_INC_USE_COUNT;
-
   // Address has already been set at init
 #ifndef PDCP_USE_NETLINK
 
@@ -250,7 +247,11 @@ int nas_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
     // End debug information
     netif_stop_queue(dev);
+#if  LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0)
+    netif_trans_update(dev);
+#else
     dev->trans_start = jiffies;
+#endif
 #ifdef DEBUG_DEVICE
     printk("HARD_START_XMIT: step 1\n");
 #endif
@@ -311,7 +312,11 @@ void nas_tx_timeout(struct net_device *dev)
   printk("TX_TIMEOUT: begin\n");
   //  (struct nas_priv *)(dev->priv)->stats.tx_errors++;
   (priv->stats).tx_errors++;
+#if  LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0)
+  netif_trans_update(dev);
+#else
   dev->trans_start = jiffies;
+#endif
   netif_wake_queue(dev);
   printk("TX_TIMEOUT: transmit timed out %s\n",dev->name);
 }
@@ -406,8 +411,8 @@ void nas_init(struct net_device *dev)
     nas_TOOL_imei2iid(IMEI, dev->dev_addr);// IMEI to device address (for stateless autoconfiguration address)
     nas_TOOL_imei2iid(IMEI, (uint8_t *)priv->cx[0].iid6);
 #else
-    nas_TOOL_imei2iid(nas_IMEI, dev->dev_addr);// IMEI to device address (for stateless autoconfiguration address)
-    nas_TOOL_imei2iid(nas_IMEI, (uint8_t *)priv->cx[0].iid6);
+    nas_TOOL_imei2iid((uint8_t *)nas_IMEI, dev->dev_addr); // IMEI to device address (for stateless autoconfiguration address)
+    nas_TOOL_imei2iid((uint8_t *)nas_IMEI, (uint8_t *)priv->cx[0].iid6);
 #endif
     // this is more appropriate for user space soft realtime emulation
 #else
@@ -478,8 +483,8 @@ int init_module (void)
     if (nasdev[inst]) {
       nas_mesh_init(inst);
       //memcpy(nasdev[inst]->dev_addr,&nas_IMEI[0],8);
-      nas_TOOL_imei2iid(nas_IMEI, nasdev[inst]->dev_addr);// IMEI to device address (for stateless autoconfiguration address)
-      nas_TOOL_imei2iid(nas_IMEI, (uint8_t *)priv->cx[0].iid6);
+      nas_TOOL_imei2iid((uint8_t *)nas_IMEI, nasdev[inst]->dev_addr);// IMEI to device address (for stateless autoconfiguration address)
+      nas_TOOL_imei2iid((uint8_t *)nas_IMEI, (uint8_t *)priv->cx[0].iid6);
       // TO HAVE DIFFERENT HW @
       ((unsigned char*)nasdev[inst]->dev_addr)[7] = ((unsigned char*)nasdev[inst]->dev_addr)[7] + (unsigned char)inst + 1;
       printk("Setting HW addr for INST %d to : %X%X\n",inst,*((unsigned int *)&nasdev[inst]->dev_addr[0]),*((unsigned int *)&nasdev[inst]->dev_addr[4]));
diff --git a/openair2/NETWORK_DRIVER/MESH/ioctl.c b/openair2/NETWORK_DRIVER/MESH/ioctl.c
index 7d4bb10b1f841dc50c2be8d2bf065760d66a3cf7..4045908d93c372fc60bc7bb214eb0f40c6ea5d7e 100644
--- a/openair2/NETWORK_DRIVER/MESH/ioctl.c
+++ b/openair2/NETWORK_DRIVER/MESH/ioctl.c
@@ -853,7 +853,7 @@ int nas_CTL_ioctl(struct net_device *dev,
 //---------------------------------------------------------------------------
 void nas_CTL_send(struct sk_buff *skb,
                   struct cx_entity *cx,
-                  struct classifier_entity *gc)
+                  struct classifier_entity *gc, int inst, struct nas_priv *gpriv)
 {
   //---------------------------------------------------------------------------
   printk("NAS_CTL_SEND - void \n");
diff --git a/openair2/NETWORK_DRIVER/MESH/local.h b/openair2/NETWORK_DRIVER/MESH/local.h
index 8db2b550b0defecb5d42fb671f94818174f102b1..0e0a581cbc9590a0cda18fe29caba28a9e91e5b5 100644
--- a/openair2/NETWORK_DRIVER/MESH/local.h
+++ b/openair2/NETWORK_DRIVER/MESH/local.h
@@ -98,6 +98,26 @@ struct cx_entity {
   int provider_id[MAX_MEASURE_NB];
 
 };
+//#define NAS_RETRY_LIMIT_DEFAULT 5
+
+struct nas_priv {
+  int irq;
+  struct timer_list timer;
+  spinlock_t lock;
+  struct net_device_stats stats;
+  uint8_t retry_limit;
+  uint32_t timer_establishment;
+  uint32_t timer_release;
+  struct cx_entity cx[NAS_CX_MAX];
+  struct classifier_entity *rclassifier[NAS_DSCP_MAX]; // receive classifier
+  uint16_t nrclassifier;
+  int sap[NAS_SAPI_MAX];
+  struct sock *nl_sk;
+  uint8_t nlmsg[NAS_MAX_LENGTH+sizeof(struct nlmsghdr)];
+  uint8_t xbuffer[NAS_MAX_LENGTH]; // transmition buffer
+  uint8_t rbuffer[NAS_MAX_LENGTH]; // reception buffer
+};
+
 
 struct classifier_entity {
   uint32_t classref;
@@ -122,29 +142,7 @@ struct classifier_entity {
   struct rb_entity *rb_rx;   //pointer to rb_entity for receiving (in case of forwarding rule)
   nasRadioBearerId_t rab_id;            // RAB identification for sending
   nasRadioBearerId_t rab_id_rx;   // RAB identification for receiving (in case of forwarding rule)
-  void (*fct)(struct sk_buff *skb, struct cx_entity *cx, struct classifier_entity *gc,int inst);
-};
-
-
-
-//#define NAS_RETRY_LIMIT_DEFAULT 5
-
-struct nas_priv {
-  int irq;
-  struct timer_list timer;
-  spinlock_t lock;
-  struct net_device_stats stats;
-  uint8_t retry_limit;
-  uint32_t timer_establishment;
-  uint32_t timer_release;
-  struct cx_entity cx[NAS_CX_MAX];
-  struct classifier_entity *rclassifier[NAS_DSCP_MAX]; // receive classifier
-  uint16_t nrclassifier;
-  int sap[NAS_SAPI_MAX];
-  struct sock *nl_sk;
-  uint8_t nlmsg[NAS_MAX_LENGTH+sizeof(struct nlmsghdr)];
-  uint8_t xbuffer[NAS_MAX_LENGTH]; // transmition buffer
-  uint8_t rbuffer[NAS_MAX_LENGTH]; // reception buffer
+  void (*fct)(struct sk_buff *skb, struct cx_entity *cx, struct classifier_entity *gc,int inst, struct nas_priv *gpriv);
 };
 
 struct ipversion {
diff --git a/openair2/NETWORK_DRIVER/MESH/mesh.c b/openair2/NETWORK_DRIVER/MESH/mesh.c
index e934a6eb9501e60114d7d4112faf9c795d7d32ed..9817428c5e98d922d3618f46947239a15d60a858 100644
--- a/openair2/NETWORK_DRIVER/MESH/mesh.c
+++ b/openair2/NETWORK_DRIVER/MESH/mesh.c
@@ -155,9 +155,10 @@ void nas_mesh_start_default_sclassifier(struct cx_entity *cx,struct rb_entity *r
 }
 
 //---------------------------------------------------------------------------
-void nas_mesh_timer(unsigned long data,struct nas_priv *gpriv)
+void nas_mesh_timer(unsigned long data)
 {
   //---------------------------------------------------------------------------
+  struct nas_priv *gpriv=(struct nas_priv *) data;
   uint8_t cxi;
   struct cx_entity *cx;
   struct rb_entity *rb;
@@ -168,7 +169,7 @@ void nas_mesh_timer(unsigned long data,struct nas_priv *gpriv)
 
   (gpriv->timer).function=nas_mesh_timer;
   (gpriv->timer).expires=jiffies+NAS_TIMER_TICK;
-  (gpriv->timer).data=0L;
+  (gpriv->timer).data=data;
 
   return;
 
@@ -381,6 +382,7 @@ int nas_mesh_DC_send_cx_release_request(struct cx_entity *cx,
 void nas_mesh_DC_send_sig_data_request(struct sk_buff *skb,
                                        struct cx_entity *cx,
                                        struct classifier_entity *gc,
+                                       int inst,
                                        struct nas_priv *gpriv)
 {
   //---------------------------------------------------------------------------
diff --git a/openair2/NETWORK_DRIVER/MESH/proto_extern.h b/openair2/NETWORK_DRIVER/MESH/proto_extern.h
index 4c0b89f60fdec3c67ea3b3e97a4af6c8e73273ea..a362876f834fa8227619063bb0f54c0d93e004f9 100644
--- a/openair2/NETWORK_DRIVER/MESH/proto_extern.h
+++ b/openair2/NETWORK_DRIVER/MESH/proto_extern.h
@@ -96,7 +96,7 @@ void nas_COMMON_receive(unsigned short dlen,
  */
 void nas_COMMON_QOS_send(struct sk_buff *skb,
                          struct cx_entity *cx,
-                         struct classifier_entity *gc,int inst);
+                         struct classifier_entity *gc,int inst, struct nas_priv *gpriv);
 
 /**
 \fn void nas_COMMON_del_send(struct sk_buff *skb, struct cx_entity *cx, struct classifier_entity *gc,int inst)
@@ -108,7 +108,7 @@ void nas_COMMON_QOS_send(struct sk_buff *skb,
  */
 void nas_COMMON_del_send(struct sk_buff *skb,
                          struct cx_entity *cx,
-                         struct classifier_entity *gc,int inst);
+                         struct classifier_entity *gc,int inst, struct nas_priv *gpriv);
 
 #ifndef PDCP_USE_NETLINK
 /**
@@ -195,19 +195,18 @@ void nas_mesh_init(int inst   //!< Instance ID
 
                   );
 
-void nas_mesh_timer(unsigned long data,
-                    struct nas_priv *gpriv);
+void nas_mesh_timer(unsigned long data);
 
 int  nas_mesh_DC_receive(struct cx_entity *cx,struct nas_priv *gpriv);
 int  nas_mesh_GC_receive(struct nas_priv *gpriv);
 int  nas_mesh_DC_send_cx_establish_request(struct cx_entity *cx,struct nas_priv *gpriv);
 int  nas_mesh_DC_send_cx_release_request(struct cx_entity *cx,struct nas_priv *gpriv);
-void nas_mesh_DC_send_sig_data_request(struct sk_buff *skb, struct cx_entity *cx, struct classifier_entity *gc,struct nas_priv *gpriv);
+void nas_mesh_DC_send_sig_data_request(struct sk_buff *skb, struct cx_entity *cx, struct classifier_entity *gc,int inst, struct nas_priv *gpriv);
 
 // iocontrol.c
 void nas_CTL_send(struct sk_buff *skb,
                   struct cx_entity *cx,
-                  struct classifier_entity *gc);
+                  struct classifier_entity *gc,int inst, struct nas_priv *gpriv);
 //int nas_CTL_receive_authentication(struct ipv6hdr *iph, struct cx-entity *cx, unsigned char sapi);
 int nas_CTL_ioctl(struct net_device *dev,
                   struct ifreq *ifr, int cmd);
diff --git a/openair2/NETWORK_DRIVER/UE_IP/common.c b/openair2/NETWORK_DRIVER/UE_IP/common.c
index 1ea5df0d30c9600b0b3e9009639096350fe6d61c..8c3e4557d36d109efcf7198a41a033a906897108 100644
--- a/openair2/NETWORK_DRIVER/UE_IP/common.c
+++ b/openair2/NETWORK_DRIVER/UE_IP/common.c
@@ -123,9 +123,7 @@ skb_p->mark = rb_idP;
 
   // LG TEST skb_p->ip_summed = CHECKSUM_NONE;
   skb_p->ip_summed = CHECKSUM_UNNECESSARY;
-
-
-  ipv_p = (struct ipversion*)((void*)&(skb_p->data[hard_header_len]));
+  ipv_p = (ipversion_t *)((void *)&(skb_p->data[hard_header_len]));
 
   switch (ipv_p->version) {
 
diff --git a/openair2/NETWORK_DRIVER/UE_IP/device.c b/openair2/NETWORK_DRIVER/UE_IP/device.c
index cfd734286222ceeade640147df282ac8a8c32ab5..a4f714d4c5537218896398f5fd6d92dbee44a12e 100644
--- a/openair2/NETWORK_DRIVER/UE_IP/device.c
+++ b/openair2/NETWORK_DRIVER/UE_IP/device.c
@@ -243,7 +243,11 @@ int ue_ip_hard_start_xmit(struct sk_buff *skb_pP, struct net_device *dev_pP)
 
     // End debug information
     netif_stop_queue(dev_pP);
+#if  LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0)
+    netif_trans_update(dev_pP);
+#else
     dev_pP->trans_start = jiffies;
+#endif
 #ifdef OAI_DRV_DEBUG_DEVICE
     printk("[UE_IP_DRV][%s] step 1\n", __FUNCTION__);
 #endif
@@ -315,7 +319,11 @@ void ue_ip_tx_timeout(struct net_device *dev_pP)
   printk("[UE_IP_DRV][%s] begin\n", __FUNCTION__);
   //  (ue_ip_priv_t *)(dev_pP->priv_p)->stats.tx_errors++;
   (priv_p->stats).tx_errors++;
+#if  LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0)
+  netif_trans_update(dev_pP);
+#else
   dev_pP->trans_start = jiffies;
+#endif
   netif_wake_queue(dev_pP);
   printk("[UE_IP_DRV][%s] transmit timed out %s\n", __FUNCTION__,dev_pP->name);
 }
diff --git a/openair3/NAS/TOOLS/network.h b/openair3/NAS/TOOLS/network.h
index 0d60359c57b7d4093e2006e13c5c1f8a57e45619..d7044c8e51436792605078a8d79d04154e921107 100644
--- a/openair3/NAS/TOOLS/network.h
+++ b/openair3/NAS/TOOLS/network.h
@@ -61,7 +61,7 @@ Description Defines a list of PLMN network operators
 #define VDF5  11
 
 
-#define SELECTED_PLMN OAI_LTEBOX //SFR1
+#define SELECTED_PLMN TEST1 //SFR1
 
 #define TEST_PLMN {0,0,0x0f,1,1,0}  // 00101
 #define SFR_PLMN_1  {0,2,0x0f,8,0,1}  // 20810
diff --git a/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf b/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf
index 84ec59a36bcb9906c8f9010a7dabfbfb2e62412e..05db6be4d12130603fec8d272bf102158d8f23a4 100644
--- a/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf
+++ b/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf
@@ -86,14 +86,14 @@ UE0:
     };
 
     SIM: {
-        MSIN="0100001111";
-        USIM_API_K="fec86ba6eb707ed08905757b1bb44b8f";
+        MSIN="000001234";
+        USIM_API_K="000102030405060708090A0B0C0D0E0F";
         OPC="C42449363BBAD02B66D16BC975D77CC1";
-        MSISDN="33611123456";
+        MSISDN="000000000000";//"33611123456";
     };
 
     # Home PLMN Selector with Access Technology
-    HPLMN= "20893";
+    HPLMN= "00101";
 
     # User controlled PLMN Selector with Access Technology
     UCPLMN_LIST = ();
diff --git a/openair3/NAS/TOOLS/ue_tcl_test.conf b/openair3/NAS/TOOLS/ue_tcl_test.conf
new file mode 100644
index 0000000000000000000000000000000000000000..05db6be4d12130603fec8d272bf102158d8f23a4
--- /dev/null
+++ b/openair3/NAS/TOOLS/ue_tcl_test.conf
@@ -0,0 +1,114 @@
+# List of known PLMNS
+PLMN: {
+    PLMN0: {
+           FULLNAME="Test network";
+           SHORTNAME="OAI4G";
+           MNC="01";
+           MCC="001";
+
+    };
+    PLMN1: {
+           FULLNAME="SFR France";
+           SHORTNAME="SFR";
+           MNC="10";
+           MCC="208";
+
+    };
+    PLMN2: {
+           FULLNAME="SFR France";
+           SHORTNAME="SFR";
+           MNC="11";
+           MCC="208";
+    };
+    PLMN3: {
+           FULLNAME="SFR France";
+           SHORTNAME="SFR";
+           MNC="13";
+           MCC="208";
+    };
+    PLMN4: {
+           FULLNAME="OAI LTEBOX";
+           SHORTNAME="OAIALU";
+           MNC="93";
+           MCC="208";
+    };
+    PLMN5: {
+           FULLNAME="T-Mobile USA";
+           SHORTNAME="T-Mobile";
+           MNC="280";
+           MCC="310";
+    };
+    PLMN6: {
+           FULLNAME="FICTITIOUS USA";
+           SHORTNAME="FICTITIO";
+           MNC="028";
+           MCC="310";
+    };
+    PLMN7: {
+           FULLNAME="Vodafone Italia";
+           SHORTNAME="VODAFONE";
+           MNC="10";
+           MCC="222";
+    };
+    PLMN8: {
+           FULLNAME="Vodafone Spain";
+           SHORTNAME="VODAFONE";
+           MNC="01";
+           MCC="214";
+    };
+    PLMN9: {
+           FULLNAME="Vodafone Spain";
+           SHORTNAME="VODAFONE";
+           MNC="06";
+           MCC="214";
+    };
+    PLMN10: {
+           FULLNAME="Vodafone Germ";
+           SHORTNAME="VODAFONE";
+           MNC="02";
+           MCC="262";
+    };
+    PLMN11: {
+           FULLNAME="Vodafone Germ";
+           SHORTNAME="VODAFONE";
+           MNC="04";
+           MCC="262";
+    };
+};
+
+UE0:
+{
+    USER: {
+        IMEI="356113022094149";
+        MANUFACTURER="EURECOM";
+        MODEL="LTE Android PC";
+        PIN="0000";
+    };
+
+    SIM: {
+        MSIN="000001234";
+        USIM_API_K="000102030405060708090A0B0C0D0E0F";
+        OPC="C42449363BBAD02B66D16BC975D77CC1";
+        MSISDN="000000000000";//"33611123456";
+    };
+
+    # Home PLMN Selector with Access Technology
+    HPLMN= "00101";
+
+    # User controlled PLMN Selector with Access Technology
+    UCPLMN_LIST = ();
+
+    # Operator PLMN List
+    OPLMN_LIST = ("00101", "20810", "20811", "20813", "20893", "310280", "310028");
+
+    # Operator controlled PLMN Selector with Access Technology
+    OCPLMN_LIST = ("22210", "21401", "21406", "26202", "26204");
+
+    # Forbidden plmns
+    FPLMN_LIST = ();
+
+    # List of Equivalent HPLMNs
+#TODO: UE does not connect if set, to be fixed in the UE
+#    EHPLMN_LIST= ("20811", "20813");
+    EHPLMN_LIST= ();
+};
diff --git a/targets/ARCH/LMSSDR/LimeSDR_above_1p8GHz.ini b/targets/ARCH/LMSSDR/LimeSDR_above_1p8GHz.ini
new file mode 100755
index 0000000000000000000000000000000000000000..56ff3527373c61963d70b5e0a878b7ef0febeaa4
--- /dev/null
+++ b/targets/ARCH/LMSSDR/LimeSDR_above_1p8GHz.ini
@@ -0,0 +1,1128 @@
+[file_info]
+type=lms7002m_minimal_config
+version=1
+[lms7002_registers_a]
+0x0020=0xFFFD
+0x0021=0x0E9F
+0x0022=0x07FF
+0x0023=0x5550
+0x0024=0xB1E4
+0x0025=0x0101
+0x0026=0x0101
+0x0027=0xB1E4
+0x0028=0x0101
+0x0029=0x0101
+0x002A=0x0086
+0x002B=0x0038
+0x002C=0x0000
+0x002D=0x0000
+0x002E=0x0000
+0x002F=0x3840
+0x0081=0x0000
+0x0082=0x8003
+0x0084=0x0400
+0x0085=0x0001
+0x0086=0x4101
+0x0087=0x0000
+0x0088=0x04B0
+0x0089=0x1090
+0x008A=0x0514
+0x008B=0x2102
+0x008C=0x267B
+0x0092=0x0001
+0x0093=0x0000
+0x0094=0x0000
+0x0095=0x0000
+0x0096=0x0000
+0x0097=0x0000
+0x0098=0x0000
+0x0099=0x6565
+0x009A=0x658C
+0x009B=0x6565
+0x009C=0x658C
+0x009D=0x6565
+0x009E=0x658C
+0x009F=0x658C
+0x00A0=0x6565
+0x00A1=0x6565
+0x00A2=0x6565
+0x00A3=0x6565
+0x00A4=0x6565
+0x00A5=0x6565
+0x00A6=0x000F
+0x00A7=0x6565
+0x00A8=0x0000
+0x00A9=0x0000
+0x00AA=0x0000
+0x00AB=0x0040
+0x00AC=0x0000
+0x00AD=0x03FF
+0x00AE=0x0000
+0x0100=0x3409
+0x0101=0x7800
+0x0102=0x3180
+0x0103=0x0612
+0x0104=0x0088
+0x0105=0x0011
+0x0106=0x318C
+0x0107=0x318C
+0x0108=0x2826
+0x0109=0x6104
+0x010A=0x17BD
+0x010C=0x8865
+0x010D=0x015A
+0x010E=0x0000
+0x010F=0x3042
+0x0110=0x0BFF
+0x0111=0x0083
+0x0112=0x9407
+0x0113=0x0303
+0x0114=0x00D0
+0x0115=0x0009
+0x0116=0x8180
+0x0117=0x1217
+0x0118=0x018C
+0x0119=0x528C
+0x011A=0x3E03
+0x011C=0xAD41
+0x011D=0x2000
+0x011E=0x06E4
+0x011F=0x3640
+0x0120=0xB9FF
+0x0121=0x341C
+0x0122=0x033F
+0x0123=0x267B
+0x0124=0x0000
+0x0200=0x0081
+0x0201=0x07FF
+0x0202=0x07FF
+0x0203=0x0000
+0x0204=0x0000
+0x0205=0x0000
+0x0206=0x0000
+0x0207=0x0000
+0x0208=0x0170
+0x0209=0x0000
+0x020A=0x0080
+0x020B=0x0000
+0x020C=0x8000
+0x0240=0x0020
+0x0241=0x0000
+0x0242=0x0000
+0x0243=0x0000
+0x0244=0x0000
+0x0245=0x0000
+0x0246=0x0000
+0x0247=0x0000
+0x0248=0x0000
+0x0249=0x0000
+0x024A=0x0000
+0x024B=0x0000
+0x024C=0x0000
+0x024D=0x0000
+0x024E=0x0000
+0x024F=0x0000
+0x0250=0x0000
+0x0251=0x0000
+0x0252=0x0000
+0x0253=0x0000
+0x0254=0x0000
+0x0255=0x0000
+0x0256=0x0000
+0x0257=0x0000
+0x0258=0x0000
+0x0259=0x0000
+0x025A=0x0000
+0x025B=0x0000
+0x025C=0x0000
+0x025D=0x0000
+0x025E=0x0000
+0x025F=0x0000
+0x0260=0x0000
+0x0261=0x0000
+0x0280=0x0000
+0x0281=0x0000
+0x0282=0x0000
+0x0283=0x0000
+0x0284=0x0000
+0x0285=0x0000
+0x0286=0x0000
+0x0287=0x0000
+0x0288=0x0000
+0x0289=0x0000
+0x028A=0x0000
+0x028B=0x0000
+0x028C=0x0000
+0x028D=0x0000
+0x028E=0x0000
+0x028F=0x0000
+0x0290=0x0000
+0x0291=0x0000
+0x0292=0x0000
+0x0293=0x0000
+0x0294=0x0000
+0x0295=0x0000
+0x0296=0x0000
+0x0297=0x0000
+0x0298=0x0000
+0x0299=0x0000
+0x029A=0x0000
+0x029B=0x0000
+0x029C=0x0000
+0x029D=0x0000
+0x029E=0x0000
+0x029F=0x0000
+0x02A0=0x0000
+0x02A1=0x0000
+0x02A2=0x0000
+0x02A3=0x0000
+0x02A4=0x0000
+0x02A5=0x0000
+0x02A6=0x0000
+0x02A7=0x0000
+0x02C0=0x0000
+0x02C1=0x0000
+0x02C2=0x0000
+0x02C3=0x0000
+0x02C4=0x0000
+0x02C5=0x0000
+0x02C6=0x0000
+0x02C7=0x0000
+0x02C8=0x0000
+0x02C9=0x0000
+0x02CA=0x0000
+0x02CB=0x0000
+0x02CC=0x0000
+0x02CD=0x0000
+0x02CE=0x0000
+0x02CF=0x0000
+0x02D0=0x0000
+0x02D1=0x0000
+0x02D2=0x0000
+0x02D3=0x0000
+0x02D4=0x0000
+0x02D5=0x0000
+0x02D6=0x0000
+0x02D7=0x0000
+0x02D8=0x0000
+0x02D9=0x0000
+0x02DA=0x0000
+0x02DB=0x0000
+0x02DC=0x0000
+0x02DD=0x0000
+0x02DE=0x0000
+0x02DF=0x0000
+0x02E0=0x0000
+0x02E1=0x0000
+0x02E2=0x0000
+0x02E3=0x0000
+0x02E4=0x0000
+0x02E5=0x0000
+0x02E6=0x0000
+0x02E7=0x0000
+0x0300=0x0000
+0x0301=0x0000
+0x0302=0x0000
+0x0303=0x0000
+0x0304=0x0000
+0x0305=0x0000
+0x0306=0x0000
+0x0307=0x0000
+0x0308=0x0000
+0x0309=0x0000
+0x030A=0x0000
+0x030B=0x0000
+0x030C=0x0000
+0x030D=0x0000
+0x030E=0x0000
+0x030F=0x0000
+0x0310=0x0000
+0x0311=0x0000
+0x0312=0x0000
+0x0313=0x0000
+0x0314=0x0000
+0x0315=0x0000
+0x0316=0x0000
+0x0317=0x0000
+0x0318=0x0000
+0x0319=0x0000
+0x031A=0x0000
+0x031B=0x0000
+0x031C=0x0000
+0x031D=0x0000
+0x031E=0x0000
+0x031F=0x0000
+0x0320=0x0000
+0x0321=0x0000
+0x0322=0x0000
+0x0323=0x0000
+0x0324=0x0000
+0x0325=0x0000
+0x0326=0x0000
+0x0327=0x0000
+0x0340=0x0000
+0x0341=0x0000
+0x0342=0x0000
+0x0343=0x0000
+0x0344=0x0000
+0x0345=0x0000
+0x0346=0x0000
+0x0347=0x0000
+0x0348=0x0000
+0x0349=0x0000
+0x034A=0x0000
+0x034B=0x0000
+0x034C=0x0000
+0x034D=0x0000
+0x034E=0x0000
+0x034F=0x0000
+0x0350=0x0000
+0x0351=0x0000
+0x0352=0x0000
+0x0353=0x0000
+0x0354=0x0000
+0x0355=0x0000
+0x0356=0x0000
+0x0357=0x0000
+0x0358=0x0000
+0x0359=0x0000
+0x035A=0x0000
+0x035B=0x0000
+0x035C=0x0000
+0x035D=0x0000
+0x035E=0x0000
+0x035F=0x0000
+0x0360=0x0000
+0x0361=0x0000
+0x0362=0x0000
+0x0363=0x0000
+0x0364=0x0000
+0x0365=0x0000
+0x0366=0x0000
+0x0367=0x0000
+0x0380=0x0000
+0x0381=0x0000
+0x0382=0x0000
+0x0383=0x0000
+0x0384=0x0000
+0x0385=0x0000
+0x0386=0x0000
+0x0387=0x0000
+0x0388=0x0000
+0x0389=0x0000
+0x038A=0x0000
+0x038B=0x0000
+0x038C=0x0000
+0x038D=0x0000
+0x038E=0x0000
+0x038F=0x0000
+0x0390=0x0000
+0x0391=0x0000
+0x0392=0x0000
+0x0393=0x0000
+0x0394=0x0000
+0x0395=0x0000
+0x0396=0x0000
+0x0397=0x0000
+0x0398=0x0000
+0x0399=0x0000
+0x039A=0x0000
+0x039B=0x0000
+0x039C=0x0000
+0x039D=0x0000
+0x039E=0x0000
+0x039F=0x0000
+0x03A0=0x0000
+0x03A1=0x0000
+0x03A2=0x0000
+0x03A3=0x0000
+0x03A4=0x0000
+0x03A5=0x0000
+0x03A6=0x0000
+0x03A7=0x0000
+0x0400=0x8081
+0x0401=0x07FF
+0x0402=0x07FF
+0x0403=0x0000
+0x0404=0x0000
+0x0405=0x0000
+0x0406=0x0000
+0x0407=0x0000
+0x0408=0x0000
+0x0409=0x0000
+0x040A=0x0003
+0x040B=0x000F
+0x040C=0x00F8
+0x040D=0x0000
+0x040E=0x0000
+0x040F=0x0000
+0x0440=0x0020
+0x0441=0x0000
+0x0442=0x2B55
+0x0443=0x5540
+0x0444=0x0000
+0x0445=0x0000
+0x0446=0x0000
+0x0447=0x0000
+0x0448=0x0000
+0x0449=0x0000
+0x044A=0x0000
+0x044B=0x0000
+0x044C=0x0000
+0x044D=0x0000
+0x044E=0x0000
+0x044F=0x0000
+0x0450=0x0000
+0x0451=0x0000
+0x0452=0x0000
+0x0453=0x0000
+0x0454=0x0000
+0x0455=0x0000
+0x0456=0x0000
+0x0457=0x0000
+0x0458=0x0000
+0x0459=0x0000
+0x045A=0x0000
+0x045B=0x0000
+0x045C=0x0000
+0x045D=0x0000
+0x045E=0x0000
+0x045F=0x0000
+0x0460=0x0000
+0x0461=0x0000
+0x0480=0x0000
+0x0481=0x0000
+0x0482=0x0000
+0x0483=0x0000
+0x0484=0x0000
+0x0485=0x0000
+0x0486=0x0000
+0x0487=0x0000
+0x0488=0x0000
+0x0489=0x0000
+0x048A=0x0000
+0x048B=0x0000
+0x048C=0x0000
+0x048D=0x0000
+0x048E=0x0000
+0x048F=0x0000
+0x0490=0x0000
+0x0491=0x0000
+0x0492=0x0000
+0x0493=0x0000
+0x0494=0x0000
+0x0495=0x0000
+0x0496=0x0000
+0x0497=0x0000
+0x0498=0x0000
+0x0499=0x0000
+0x049A=0x0000
+0x049B=0x0000
+0x049C=0x0000
+0x049D=0x0000
+0x049E=0x0000
+0x049F=0x0000
+0x04A0=0x0000
+0x04A1=0x0000
+0x04A2=0x0000
+0x04A3=0x0000
+0x04A4=0x0000
+0x04A5=0x0000
+0x04A6=0x0000
+0x04A7=0x0000
+0x04C0=0x0000
+0x04C1=0x0000
+0x04C2=0x0000
+0x04C3=0x0000
+0x04C4=0x0000
+0x04C5=0x0000
+0x04C6=0x0000
+0x04C7=0x0000
+0x04C8=0x0000
+0x04C9=0x0000
+0x04CA=0x0000
+0x04CB=0x0000
+0x04CC=0x0000
+0x04CD=0x0000
+0x04CE=0x0000
+0x04CF=0x0000
+0x04D0=0x0000
+0x04D1=0x0000
+0x04D2=0x0000
+0x04D3=0x0000
+0x04D4=0x0000
+0x04D5=0x0000
+0x04D6=0x0000
+0x04D7=0x0000
+0x04D8=0x0000
+0x04D9=0x0000
+0x04DA=0x0000
+0x04DB=0x0000
+0x04DC=0x0000
+0x04DD=0x0000
+0x04DE=0x0000
+0x04DF=0x0000
+0x04E0=0x0000
+0x04E1=0x0000
+0x04E2=0x0000
+0x04E3=0x0000
+0x04E4=0x0000
+0x04E5=0x0000
+0x04E6=0x0000
+0x04E7=0x0000
+0x0500=0x0000
+0x0501=0x0000
+0x0502=0x0000
+0x0503=0x0000
+0x0504=0x0000
+0x0505=0x0000
+0x0506=0x0000
+0x0507=0x0000
+0x0508=0x0000
+0x0509=0x0000
+0x050A=0x0000
+0x050B=0x0000
+0x050C=0x0000
+0x050D=0x0000
+0x050E=0x0000
+0x050F=0x0000
+0x0510=0x0000
+0x0511=0x0000
+0x0512=0x0000
+0x0513=0x0000
+0x0514=0x0000
+0x0515=0x0000
+0x0516=0x0000
+0x0517=0x0000
+0x0518=0x0000
+0x0519=0x0000
+0x051A=0x0000
+0x051B=0x0000
+0x051C=0x0000
+0x051D=0x0000
+0x051E=0x0000
+0x051F=0x0000
+0x0520=0x0000
+0x0521=0x0000
+0x0522=0x0000
+0x0523=0x0000
+0x0524=0x0000
+0x0525=0x0000
+0x0526=0x0000
+0x0527=0x0000
+0x0540=0x0000
+0x0541=0x0000
+0x0542=0x0000
+0x0543=0x0000
+0x0544=0x0000
+0x0545=0x0000
+0x0546=0x0000
+0x0547=0x0000
+0x0548=0x0000
+0x0549=0x0000
+0x054A=0x0000
+0x054B=0x0000
+0x054C=0x0000
+0x054D=0x0000
+0x054E=0x0000
+0x054F=0x0000
+0x0550=0x0000
+0x0551=0x0000
+0x0552=0x0000
+0x0553=0x0000
+0x0554=0x0000
+0x0555=0x0000
+0x0556=0x0000
+0x0557=0x0000
+0x0558=0x0000
+0x0559=0x0000
+0x055A=0x0000
+0x055B=0x0000
+0x055C=0x0000
+0x055D=0x0000
+0x055E=0x0000
+0x055F=0x0000
+0x0560=0x0000
+0x0561=0x0000
+0x0562=0x0000
+0x0563=0x0000
+0x0564=0x0000
+0x0565=0x0000
+0x0566=0x0000
+0x0567=0x0000
+0x0580=0x0000
+0x0581=0x0000
+0x0582=0x0000
+0x0583=0x0000
+0x0584=0x0000
+0x0585=0x0000
+0x0586=0x0000
+0x0587=0x0000
+0x0588=0x0000
+0x0589=0x0000
+0x058A=0x0000
+0x058B=0x0000
+0x058C=0x0000
+0x058D=0x0000
+0x058E=0x0000
+0x058F=0x0000
+0x0590=0x0000
+0x0591=0x0000
+0x0592=0x0000
+0x0593=0x0000
+0x0594=0x0000
+0x0595=0x0000
+0x0596=0x0000
+0x0597=0x0000
+0x0598=0x0000
+0x0599=0x0000
+0x059A=0x0000
+0x059B=0x0000
+0x059C=0x0000
+0x059D=0x0000
+0x059E=0x0000
+0x059F=0x0000
+0x05A0=0x0000
+0x05A1=0x0000
+0x05A2=0x0000
+0x05A3=0x0000
+0x05A4=0x0000
+0x05A5=0x0000
+0x05A6=0x0000
+0x05A7=0x0000
+[lms7002_registers_b]
+0x0100=0x340F
+0x0101=0x7800
+0x0102=0x3180
+0x0103=0x0612
+0x0104=0x0088
+0x0105=0x001F
+0x0106=0x3182
+0x0107=0x318C
+0x0108=0x9442
+0x0109=0x61C1
+0x010A=0x104C
+0x010C=0x88FF
+0x010D=0x001E
+0x010E=0x2040
+0x010F=0x3042
+0x0110=0x0BF4
+0x0111=0x0083
+0x0112=0x9407
+0x0113=0x03C3
+0x0114=0x00D0
+0x0115=0x000F
+0x0116=0x8180
+0x0117=0x1217
+0x0118=0x018C
+0x0119=0x5280
+0x011A=0x3E03
+0x011C=0xAD41
+0x011D=0x1555
+0x011E=0x0747
+0x011F=0x3640
+0x0120=0xB9FF
+0x0121=0x360C
+0x0122=0x033F
+0x0123=0x267B
+0x0124=0x0000
+0x0200=0x0101
+0x0201=0x07FF
+0x0202=0x07FF
+0x0203=0x0000
+0x0204=0x0000
+0x0205=0x0000
+0x0206=0x0000
+0x0207=0x0000
+0x0208=0x01F0
+0x0209=0x0000
+0x020A=0x0080
+0x020B=0x0000
+0x020C=0x7FFF
+0x0240=0x0020
+0x0241=0x0000
+0x0242=0x0000
+0x0243=0x0000
+0x0244=0x0000
+0x0245=0x0000
+0x0246=0x0000
+0x0247=0x0000
+0x0248=0x0000
+0x0249=0x0000
+0x024A=0x0000
+0x024B=0x0000
+0x024C=0x0000
+0x024D=0x0000
+0x024E=0x0000
+0x024F=0x0000
+0x0250=0x0000
+0x0251=0x0000
+0x0252=0x0000
+0x0253=0x0000
+0x0254=0x0000
+0x0255=0x0000
+0x0256=0x0000
+0x0257=0x0000
+0x0258=0x0000
+0x0259=0x0000
+0x025A=0x0000
+0x025B=0x0000
+0x025C=0x0000
+0x025D=0x0000
+0x025E=0x0000
+0x025F=0x0000
+0x0260=0x0000
+0x0261=0x0000
+0x0280=0x0000
+0x0281=0x0000
+0x0282=0x0000
+0x0283=0x0000
+0x0284=0x0000
+0x0285=0x0000
+0x0286=0x0000
+0x0287=0x0000
+0x0288=0x0000
+0x0289=0x0000
+0x028A=0x0000
+0x028B=0x0000
+0x028C=0x0000
+0x028D=0x0000
+0x028E=0x0000
+0x028F=0x0000
+0x0290=0x0000
+0x0291=0x0000
+0x0292=0x0000
+0x0293=0x0000
+0x0294=0x0000
+0x0295=0x0000
+0x0296=0x0000
+0x0297=0x0000
+0x0298=0x0000
+0x0299=0x0000
+0x029A=0x0000
+0x029B=0x0000
+0x029C=0x0000
+0x029D=0x0000
+0x029E=0x0000
+0x029F=0x0000
+0x02A0=0x0000
+0x02A1=0x0000
+0x02A2=0x0000
+0x02A3=0x0000
+0x02A4=0x0000
+0x02A5=0x0000
+0x02A6=0x0000
+0x02A7=0x0000
+0x02C0=0x0000
+0x02C1=0x0000
+0x02C2=0x0000
+0x02C3=0x0000
+0x02C4=0x0000
+0x02C5=0x0000
+0x02C6=0x0000
+0x02C7=0x0000
+0x02C8=0x0000
+0x02C9=0x0000
+0x02CA=0x0000
+0x02CB=0x0000
+0x02CC=0x0000
+0x02CD=0x0000
+0x02CE=0x0000
+0x02CF=0x0000
+0x02D0=0x0000
+0x02D1=0x0000
+0x02D2=0x0000
+0x02D3=0x0000
+0x02D4=0x0000
+0x02D5=0x0000
+0x02D6=0x0000
+0x02D7=0x0000
+0x02D8=0x0000
+0x02D9=0x0000
+0x02DA=0x0000
+0x02DB=0x0000
+0x02DC=0x0000
+0x02DD=0x0000
+0x02DE=0x0000
+0x02DF=0x0000
+0x02E0=0x0000
+0x02E1=0x0000
+0x02E2=0x0000
+0x02E3=0x0000
+0x02E4=0x0000
+0x02E5=0x0000
+0x02E6=0x0000
+0x02E7=0x0000
+0x0300=0x0000
+0x0301=0x0000
+0x0302=0x0000
+0x0303=0x0000
+0x0304=0x0000
+0x0305=0x0000
+0x0306=0x0000
+0x0307=0x0000
+0x0308=0x0000
+0x0309=0x0000
+0x030A=0x0000
+0x030B=0x0000
+0x030C=0x0000
+0x030D=0x0000
+0x030E=0x0000
+0x030F=0x0000
+0x0310=0x0000
+0x0311=0x0000
+0x0312=0x0000
+0x0313=0x0000
+0x0314=0x0000
+0x0315=0x0000
+0x0316=0x0000
+0x0317=0x0000
+0x0318=0x0000
+0x0319=0x0000
+0x031A=0x0000
+0x031B=0x0000
+0x031C=0x0000
+0x031D=0x0000
+0x031E=0x0000
+0x031F=0x0000
+0x0320=0x0000
+0x0321=0x0000
+0x0322=0x0000
+0x0323=0x0000
+0x0324=0x0000
+0x0325=0x0000
+0x0326=0x0000
+0x0327=0x0000
+0x0340=0x0000
+0x0341=0x0000
+0x0342=0x0000
+0x0343=0x0000
+0x0344=0x0000
+0x0345=0x0000
+0x0346=0x0000
+0x0347=0x0000
+0x0348=0x0000
+0x0349=0x0000
+0x034A=0x0000
+0x034B=0x0000
+0x034C=0x0000
+0x034D=0x0000
+0x034E=0x0000
+0x034F=0x0000
+0x0350=0x0000
+0x0351=0x0000
+0x0352=0x0000
+0x0353=0x0000
+0x0354=0x0000
+0x0355=0x0000
+0x0356=0x0000
+0x0357=0x0000
+0x0358=0x0000
+0x0359=0x0000
+0x035A=0x0000
+0x035B=0x0000
+0x035C=0x0000
+0x035D=0x0000
+0x035E=0x0000
+0x035F=0x0000
+0x0360=0x0000
+0x0361=0x0000
+0x0362=0x0000
+0x0363=0x0000
+0x0364=0x0000
+0x0365=0x0000
+0x0366=0x0000
+0x0367=0x0000
+0x0380=0x0000
+0x0381=0x0000
+0x0382=0x0000
+0x0383=0x0000
+0x0384=0x0000
+0x0385=0x0000
+0x0386=0x0000
+0x0387=0x0000
+0x0388=0x0000
+0x0389=0x0000
+0x038A=0x0000
+0x038B=0x0000
+0x038C=0x0000
+0x038D=0x0000
+0x038E=0x0000
+0x038F=0x0000
+0x0390=0x0000
+0x0391=0x0000
+0x0392=0x0000
+0x0393=0x0000
+0x0394=0x0000
+0x0395=0x0000
+0x0396=0x0000
+0x0397=0x0000
+0x0398=0x0000
+0x0399=0x0000
+0x039A=0x0000
+0x039B=0x0000
+0x039C=0x0000
+0x039D=0x0000
+0x039E=0x0000
+0x039F=0x0000
+0x03A0=0x0000
+0x03A1=0x0000
+0x03A2=0x0000
+0x03A3=0x0000
+0x03A4=0x0000
+0x03A5=0x0000
+0x03A6=0x0000
+0x03A7=0x0000
+0x0400=0x0105
+0x0401=0x07FF
+0x0402=0x07FF
+0x0403=0x0000
+0x0404=0x0000
+0x0405=0x0000
+0x0406=0x0000
+0x0407=0x0000
+0x0408=0x0000
+0x0409=0x0000
+0x040A=0x0000
+0x040B=0x7FFF
+0x040C=0x00FF
+0x040D=0x0000
+0x040E=0x0002
+0x040F=0x0000
+0x0440=0x0020
+0x0441=0x0000
+0x0442=0x0000
+0x0443=0x0000
+0x0444=0x0000
+0x0445=0x0000
+0x0446=0x0000
+0x0447=0x0000
+0x0448=0x0000
+0x0449=0x0000
+0x044A=0x0000
+0x044B=0x0000
+0x044C=0x0000
+0x044D=0x0000
+0x044E=0x0000
+0x044F=0x0000
+0x0450=0x0000
+0x0451=0x0000
+0x0452=0x0000
+0x0453=0x0000
+0x0454=0x0000
+0x0455=0x0000
+0x0456=0x0000
+0x0457=0x0000
+0x0458=0x0000
+0x0459=0x0000
+0x045A=0x0000
+0x045B=0x0000
+0x045C=0x0000
+0x045D=0x0000
+0x045E=0x0000
+0x045F=0x0000
+0x0460=0x0000
+0x0461=0x0000
+0x0480=0x0000
+0x0481=0x0000
+0x0482=0x0000
+0x0483=0x0000
+0x0484=0x0000
+0x0485=0x0000
+0x0486=0x0000
+0x0487=0x0000
+0x0488=0x0000
+0x0489=0x0000
+0x048A=0x0000
+0x048B=0x0000
+0x048C=0x0000
+0x048D=0x0000
+0x048E=0x0000
+0x048F=0x0000
+0x0490=0x0000
+0x0491=0x0000
+0x0492=0x0000
+0x0493=0x0000
+0x0494=0x0000
+0x0495=0x0000
+0x0496=0x0000
+0x0497=0x0000
+0x0498=0x0000
+0x0499=0x0000
+0x049A=0x0000
+0x049B=0x0000
+0x049C=0x0000
+0x049D=0x0000
+0x049E=0x0000
+0x049F=0x0000
+0x04A0=0x0000
+0x04A1=0x0000
+0x04A2=0x0000
+0x04A3=0x0000
+0x04A4=0x0000
+0x04A5=0x0000
+0x04A6=0x0000
+0x04A7=0x0000
+0x04C0=0x0000
+0x04C1=0x0000
+0x04C2=0x0000
+0x04C3=0x0000
+0x04C4=0x0000
+0x04C5=0x0000
+0x04C6=0x0000
+0x04C7=0x0000
+0x04C8=0x0000
+0x04C9=0x0000
+0x04CA=0x0000
+0x04CB=0x0000
+0x04CC=0x0000
+0x04CD=0x0000
+0x04CE=0x0000
+0x04CF=0x0000
+0x04D0=0x0000
+0x04D1=0x0000
+0x04D2=0x0000
+0x04D3=0x0000
+0x04D4=0x0000
+0x04D5=0x0000
+0x04D6=0x0000
+0x04D7=0x0000
+0x04D8=0x0000
+0x04D9=0x0000
+0x04DA=0x0000
+0x04DB=0x0000
+0x04DC=0x0000
+0x04DD=0x0000
+0x04DE=0x0000
+0x04DF=0x0000
+0x04E0=0x0000
+0x04E1=0x0000
+0x04E2=0x0000
+0x04E3=0x0000
+0x04E4=0x0000
+0x04E5=0x0000
+0x04E6=0x0000
+0x04E7=0x0000
+0x0500=0x0000
+0x0501=0x0000
+0x0502=0x0000
+0x0503=0x0000
+0x0504=0x0000
+0x0505=0x0000
+0x0506=0x0000
+0x0507=0x0000
+0x0508=0x0000
+0x0509=0x0000
+0x050A=0x0000
+0x050B=0x0000
+0x050C=0x0000
+0x050D=0x0000
+0x050E=0x0000
+0x050F=0x0000
+0x0510=0x0000
+0x0511=0x0000
+0x0512=0x0000
+0x0513=0x0000
+0x0514=0x0000
+0x0515=0x0000
+0x0516=0x0000
+0x0517=0x0000
+0x0518=0x0000
+0x0519=0x0000
+0x051A=0x0000
+0x051B=0x0000
+0x051C=0x0000
+0x051D=0x0000
+0x051E=0x0000
+0x051F=0x0000
+0x0520=0x0000
+0x0521=0x0000
+0x0522=0x0000
+0x0523=0x0000
+0x0524=0x0000
+0x0525=0x0000
+0x0526=0x0000
+0x0527=0x0000
+0x0540=0x0000
+0x0541=0x0000
+0x0542=0x0000
+0x0543=0x0000
+0x0544=0x0000
+0x0545=0x0000
+0x0546=0x0000
+0x0547=0x0000
+0x0548=0x0000
+0x0549=0x0000
+0x054A=0x0000
+0x054B=0x0000
+0x054C=0x0000
+0x054D=0x0000
+0x054E=0x0000
+0x054F=0x0000
+0x0550=0x0000
+0x0551=0x0000
+0x0552=0x0000
+0x0553=0x0000
+0x0554=0x0000
+0x0555=0x0000
+0x0556=0x0000
+0x0557=0x0000
+0x0558=0x0000
+0x0559=0x0000
+0x055A=0x0000
+0x055B=0x0000
+0x055C=0x0000
+0x055D=0x0000
+0x055E=0x0000
+0x055F=0x0000
+0x0560=0x0000
+0x0561=0x0000
+0x0562=0x0000
+0x0563=0x0000
+0x0564=0x0000
+0x0565=0x0000
+0x0566=0x0000
+0x0567=0x0000
+0x0580=0x0000
+0x0581=0x0000
+0x0582=0x0000
+0x0583=0x0000
+0x0584=0x0000
+0x0585=0x0000
+0x0586=0x0000
+0x0587=0x0000
+0x0588=0x0000
+0x0589=0x0000
+0x058A=0x0000
+0x058B=0x0000
+0x058C=0x0000
+0x058D=0x0000
+0x058E=0x0000
+0x058F=0x0000
+0x0590=0x0000
+0x0591=0x0000
+0x0592=0x0000
+0x0593=0x0000
+0x0594=0x0000
+0x0595=0x0000
+0x0596=0x0000
+0x0597=0x0000
+0x0598=0x0000
+0x0599=0x0000
+0x059A=0x0000
+0x059B=0x0000
+0x059C=0x0000
+0x059D=0x0000
+0x059E=0x0000
+0x059F=0x0000
+0x05A0=0x0000
+0x05A1=0x0000
+0x05A2=0x0000
+0x05A3=0x0000
+0x05A4=0x0000
+0x05A5=0x0000
+0x05A6=0x0000
+0x05A7=0x0000
+[reference_clocks]
+sxt_ref_clk_mhz=30.72
+sxr_ref_clk_mhz=30.72
diff --git a/targets/ARCH/LMSSDR/LimeSDR_above_1p8GHz_1v4.ini b/targets/ARCH/LMSSDR/LimeSDR_above_1p8GHz_1v4.ini
new file mode 100755
index 0000000000000000000000000000000000000000..9503891fb9220223c5f2808d00686112e73c3735
--- /dev/null
+++ b/targets/ARCH/LMSSDR/LimeSDR_above_1p8GHz_1v4.ini
@@ -0,0 +1,1128 @@
+[file_info]
+type=lms7002m_minimal_config
+version=1
+[lms7002_registers_a]
+0x0020=0xFFFD
+0x0021=0x0E9F
+0x0022=0x07FF
+0x0023=0x5550
+0x0024=0xB1E4
+0x0025=0x0101
+0x0026=0x0101
+0x0027=0xB1E4
+0x0028=0x0101
+0x0029=0x0101
+0x002A=0x0086
+0x002B=0x0038
+0x002C=0x0000
+0x002D=0x0000
+0x002E=0x0000
+0x002F=0x3840
+0x0081=0x0000
+0x0082=0x800B
+0x0084=0x0400
+0x0085=0x0001
+0x0086=0x4101
+0x0087=0x0000
+0x0088=0x04B0
+0x0089=0x1090
+0x008A=0x0514
+0x008B=0x2136
+0x008C=0x267B
+0x0092=0x0001
+0x0093=0x0000
+0x0094=0x0000
+0x0095=0x0000
+0x0096=0x0000
+0x0097=0x0000
+0x0098=0x0000
+0x0099=0x6565
+0x009A=0x658C
+0x009B=0x6565
+0x009C=0x658C
+0x009D=0x6565
+0x009E=0x658C
+0x009F=0x658C
+0x00A0=0x6565
+0x00A1=0x6565
+0x00A2=0x6565
+0x00A3=0x6565
+0x00A4=0x6565
+0x00A5=0x6565
+0x00A6=0x000F
+0x00A7=0x6565
+0x00A8=0x0000
+0x00A9=0x0000
+0x00AA=0x0000
+0x00AB=0x0040
+0x00AC=0x0000
+0x00AD=0x03FF
+0x00AE=0x0000
+0x0100=0x3409
+0x0101=0x7800
+0x0102=0x3180
+0x0103=0x0612
+0x0104=0x0088
+0x0105=0x0011
+0x0106=0x318C
+0x0107=0x318C
+0x0108=0x218C
+0x0109=0x6104
+0x010A=0x17BD
+0x010C=0x8865
+0x010D=0x00DE
+0x010E=0x0000
+0x010F=0x30C6
+0x0110=0x0BFF
+0x0111=0x0083
+0x0112=0x9407
+0x0113=0x0303
+0x0114=0x00D0
+0x0115=0x0009
+0x0116=0x8180
+0x0117=0x1217
+0x0118=0x018C
+0x0119=0x528C
+0x011A=0x3E03
+0x011C=0xAD41
+0x011D=0x2000
+0x011E=0x06E4
+0x011F=0x3640
+0x0120=0xB9FF
+0x0121=0x341C
+0x0122=0x033F
+0x0123=0x267B
+0x0124=0x0000
+0x0200=0x0081
+0x0201=0x07FF
+0x0202=0x07FF
+0x0203=0x0000
+0x0204=0x0000
+0x0205=0x0000
+0x0206=0x0000
+0x0207=0x0000
+0x0208=0x0170
+0x0209=0x0000
+0x020A=0x0080
+0x020B=0x0000
+0x020C=0x8000
+0x0240=0x0020
+0x0241=0x0000
+0x0242=0x0000
+0x0243=0x0000
+0x0244=0x0000
+0x0245=0x0000
+0x0246=0x0000
+0x0247=0x0000
+0x0248=0x0000
+0x0249=0x0000
+0x024A=0x0000
+0x024B=0x0000
+0x024C=0x0000
+0x024D=0x0000
+0x024E=0x0000
+0x024F=0x0000
+0x0250=0x0000
+0x0251=0x0000
+0x0252=0x0000
+0x0253=0x0000
+0x0254=0x0000
+0x0255=0x0000
+0x0256=0x0000
+0x0257=0x0000
+0x0258=0x0000
+0x0259=0x0000
+0x025A=0x0000
+0x025B=0x0000
+0x025C=0x0000
+0x025D=0x0000
+0x025E=0x0000
+0x025F=0x0000
+0x0260=0x0000
+0x0261=0x0000
+0x0280=0x0000
+0x0281=0x0000
+0x0282=0x0000
+0x0283=0x0000
+0x0284=0x0000
+0x0285=0x0000
+0x0286=0x0000
+0x0287=0x0000
+0x0288=0x0000
+0x0289=0x0000
+0x028A=0x0000
+0x028B=0x0000
+0x028C=0x0000
+0x028D=0x0000
+0x028E=0x0000
+0x028F=0x0000
+0x0290=0x0000
+0x0291=0x0000
+0x0292=0x0000
+0x0293=0x0000
+0x0294=0x0000
+0x0295=0x0000
+0x0296=0x0000
+0x0297=0x0000
+0x0298=0x0000
+0x0299=0x0000
+0x029A=0x0000
+0x029B=0x0000
+0x029C=0x0000
+0x029D=0x0000
+0x029E=0x0000
+0x029F=0x0000
+0x02A0=0x0000
+0x02A1=0x0000
+0x02A2=0x0000
+0x02A3=0x0000
+0x02A4=0x0000
+0x02A5=0x0000
+0x02A6=0x0000
+0x02A7=0x0000
+0x02C0=0x0000
+0x02C1=0x0000
+0x02C2=0x0000
+0x02C3=0x0000
+0x02C4=0x0000
+0x02C5=0x0000
+0x02C6=0x0000
+0x02C7=0x0000
+0x02C8=0x0000
+0x02C9=0x0000
+0x02CA=0x0000
+0x02CB=0x0000
+0x02CC=0x0000
+0x02CD=0x0000
+0x02CE=0x0000
+0x02CF=0x0000
+0x02D0=0x0000
+0x02D1=0x0000
+0x02D2=0x0000
+0x02D3=0x0000
+0x02D4=0x0000
+0x02D5=0x0000
+0x02D6=0x0000
+0x02D7=0x0000
+0x02D8=0x0000
+0x02D9=0x0000
+0x02DA=0x0000
+0x02DB=0x0000
+0x02DC=0x0000
+0x02DD=0x0000
+0x02DE=0x0000
+0x02DF=0x0000
+0x02E0=0x0000
+0x02E1=0x0000
+0x02E2=0x0000
+0x02E3=0x0000
+0x02E4=0x0000
+0x02E5=0x0000
+0x02E6=0x0000
+0x02E7=0x0000
+0x0300=0x0000
+0x0301=0x0000
+0x0302=0x0000
+0x0303=0x0000
+0x0304=0x0000
+0x0305=0x0000
+0x0306=0x0000
+0x0307=0x0000
+0x0308=0x0000
+0x0309=0x0000
+0x030A=0x0000
+0x030B=0x0000
+0x030C=0x0000
+0x030D=0x0000
+0x030E=0x0000
+0x030F=0x0000
+0x0310=0x0000
+0x0311=0x0000
+0x0312=0x0000
+0x0313=0x0000
+0x0314=0x0000
+0x0315=0x0000
+0x0316=0x0000
+0x0317=0x0000
+0x0318=0x0000
+0x0319=0x0000
+0x031A=0x0000
+0x031B=0x0000
+0x031C=0x0000
+0x031D=0x0000
+0x031E=0x0000
+0x031F=0x0000
+0x0320=0x0000
+0x0321=0x0000
+0x0322=0x0000
+0x0323=0x0000
+0x0324=0x0000
+0x0325=0x0000
+0x0326=0x0000
+0x0327=0x0000
+0x0340=0x0000
+0x0341=0x0000
+0x0342=0x0000
+0x0343=0x0000
+0x0344=0x0000
+0x0345=0x0000
+0x0346=0x0000
+0x0347=0x0000
+0x0348=0x0000
+0x0349=0x0000
+0x034A=0x0000
+0x034B=0x0000
+0x034C=0x0000
+0x034D=0x0000
+0x034E=0x0000
+0x034F=0x0000
+0x0350=0x0000
+0x0351=0x0000
+0x0352=0x0000
+0x0353=0x0000
+0x0354=0x0000
+0x0355=0x0000
+0x0356=0x0000
+0x0357=0x0000
+0x0358=0x0000
+0x0359=0x0000
+0x035A=0x0000
+0x035B=0x0000
+0x035C=0x0000
+0x035D=0x0000
+0x035E=0x0000
+0x035F=0x0000
+0x0360=0x0000
+0x0361=0x0000
+0x0362=0x0000
+0x0363=0x0000
+0x0364=0x0000
+0x0365=0x0000
+0x0366=0x0000
+0x0367=0x0000
+0x0380=0x0000
+0x0381=0x0000
+0x0382=0x0000
+0x0383=0x0000
+0x0384=0x0000
+0x0385=0x0000
+0x0386=0x0000
+0x0387=0x0000
+0x0388=0x0000
+0x0389=0x0000
+0x038A=0x0000
+0x038B=0x0000
+0x038C=0x0000
+0x038D=0x0000
+0x038E=0x0000
+0x038F=0x0000
+0x0390=0x0000
+0x0391=0x0000
+0x0392=0x0000
+0x0393=0x0000
+0x0394=0x0000
+0x0395=0x0000
+0x0396=0x0000
+0x0397=0x0000
+0x0398=0x0000
+0x0399=0x0000
+0x039A=0x0000
+0x039B=0x0000
+0x039C=0x0000
+0x039D=0x0000
+0x039E=0x0000
+0x039F=0x0000
+0x03A0=0x0000
+0x03A1=0x0000
+0x03A2=0x0000
+0x03A3=0x0000
+0x03A4=0x0000
+0x03A5=0x0000
+0x03A6=0x0000
+0x03A7=0x0000
+0x0400=0x8081
+0x0401=0x07FF
+0x0402=0x07FF
+0x0403=0x0000
+0x0404=0x0000
+0x0405=0x0000
+0x0406=0x0000
+0x0407=0x0000
+0x0408=0x0000
+0x0409=0x0000
+0x040A=0x0003
+0x040B=0x000F
+0x040C=0x00F8
+0x040D=0x0000
+0x040E=0x0000
+0x040F=0x0000
+0x0440=0x0020
+0x0441=0x0000
+0x0442=0x2B55
+0x0443=0x5540
+0x0444=0x0000
+0x0445=0x0000
+0x0446=0x0000
+0x0447=0x0000
+0x0448=0x0000
+0x0449=0x0000
+0x044A=0x0000
+0x044B=0x0000
+0x044C=0x0000
+0x044D=0x0000
+0x044E=0x0000
+0x044F=0x0000
+0x0450=0x0000
+0x0451=0x0000
+0x0452=0x0000
+0x0453=0x0000
+0x0454=0x0000
+0x0455=0x0000
+0x0456=0x0000
+0x0457=0x0000
+0x0458=0x0000
+0x0459=0x0000
+0x045A=0x0000
+0x045B=0x0000
+0x045C=0x0000
+0x045D=0x0000
+0x045E=0x0000
+0x045F=0x0000
+0x0460=0x0000
+0x0461=0x0000
+0x0480=0x0000
+0x0481=0x0000
+0x0482=0x0000
+0x0483=0x0000
+0x0484=0x0000
+0x0485=0x0000
+0x0486=0x0000
+0x0487=0x0000
+0x0488=0x0000
+0x0489=0x0000
+0x048A=0x0000
+0x048B=0x0000
+0x048C=0x0000
+0x048D=0x0000
+0x048E=0x0000
+0x048F=0x0000
+0x0490=0x0000
+0x0491=0x0000
+0x0492=0x0000
+0x0493=0x0000
+0x0494=0x0000
+0x0495=0x0000
+0x0496=0x0000
+0x0497=0x0000
+0x0498=0x0000
+0x0499=0x0000
+0x049A=0x0000
+0x049B=0x0000
+0x049C=0x0000
+0x049D=0x0000
+0x049E=0x0000
+0x049F=0x0000
+0x04A0=0x0000
+0x04A1=0x0000
+0x04A2=0x0000
+0x04A3=0x0000
+0x04A4=0x0000
+0x04A5=0x0000
+0x04A6=0x0000
+0x04A7=0x0000
+0x04C0=0x0000
+0x04C1=0x0000
+0x04C2=0x0000
+0x04C3=0x0000
+0x04C4=0x0000
+0x04C5=0x0000
+0x04C6=0x0000
+0x04C7=0x0000
+0x04C8=0x0000
+0x04C9=0x0000
+0x04CA=0x0000
+0x04CB=0x0000
+0x04CC=0x0000
+0x04CD=0x0000
+0x04CE=0x0000
+0x04CF=0x0000
+0x04D0=0x0000
+0x04D1=0x0000
+0x04D2=0x0000
+0x04D3=0x0000
+0x04D4=0x0000
+0x04D5=0x0000
+0x04D6=0x0000
+0x04D7=0x0000
+0x04D8=0x0000
+0x04D9=0x0000
+0x04DA=0x0000
+0x04DB=0x0000
+0x04DC=0x0000
+0x04DD=0x0000
+0x04DE=0x0000
+0x04DF=0x0000
+0x04E0=0x0000
+0x04E1=0x0000
+0x04E2=0x0000
+0x04E3=0x0000
+0x04E4=0x0000
+0x04E5=0x0000
+0x04E6=0x0000
+0x04E7=0x0000
+0x0500=0x0000
+0x0501=0x0000
+0x0502=0x0000
+0x0503=0x0000
+0x0504=0x0000
+0x0505=0x0000
+0x0506=0x0000
+0x0507=0x0000
+0x0508=0x0000
+0x0509=0x0000
+0x050A=0x0000
+0x050B=0x0000
+0x050C=0x0000
+0x050D=0x0000
+0x050E=0x0000
+0x050F=0x0000
+0x0510=0x0000
+0x0511=0x0000
+0x0512=0x0000
+0x0513=0x0000
+0x0514=0x0000
+0x0515=0x0000
+0x0516=0x0000
+0x0517=0x0000
+0x0518=0x0000
+0x0519=0x0000
+0x051A=0x0000
+0x051B=0x0000
+0x051C=0x0000
+0x051D=0x0000
+0x051E=0x0000
+0x051F=0x0000
+0x0520=0x0000
+0x0521=0x0000
+0x0522=0x0000
+0x0523=0x0000
+0x0524=0x0000
+0x0525=0x0000
+0x0526=0x0000
+0x0527=0x0000
+0x0540=0x0000
+0x0541=0x0000
+0x0542=0x0000
+0x0543=0x0000
+0x0544=0x0000
+0x0545=0x0000
+0x0546=0x0000
+0x0547=0x0000
+0x0548=0x0000
+0x0549=0x0000
+0x054A=0x0000
+0x054B=0x0000
+0x054C=0x0000
+0x054D=0x0000
+0x054E=0x0000
+0x054F=0x0000
+0x0550=0x0000
+0x0551=0x0000
+0x0552=0x0000
+0x0553=0x0000
+0x0554=0x0000
+0x0555=0x0000
+0x0556=0x0000
+0x0557=0x0000
+0x0558=0x0000
+0x0559=0x0000
+0x055A=0x0000
+0x055B=0x0000
+0x055C=0x0000
+0x055D=0x0000
+0x055E=0x0000
+0x055F=0x0000
+0x0560=0x0000
+0x0561=0x0000
+0x0562=0x0000
+0x0563=0x0000
+0x0564=0x0000
+0x0565=0x0000
+0x0566=0x0000
+0x0567=0x0000
+0x0580=0x0000
+0x0581=0x0000
+0x0582=0x0000
+0x0583=0x0000
+0x0584=0x0000
+0x0585=0x0000
+0x0586=0x0000
+0x0587=0x0000
+0x0588=0x0000
+0x0589=0x0000
+0x058A=0x0000
+0x058B=0x0000
+0x058C=0x0000
+0x058D=0x0000
+0x058E=0x0000
+0x058F=0x0000
+0x0590=0x0000
+0x0591=0x0000
+0x0592=0x0000
+0x0593=0x0000
+0x0594=0x0000
+0x0595=0x0000
+0x0596=0x0000
+0x0597=0x0000
+0x0598=0x0000
+0x0599=0x0000
+0x059A=0x0000
+0x059B=0x0000
+0x059C=0x0000
+0x059D=0x0000
+0x059E=0x0000
+0x059F=0x0000
+0x05A0=0x0000
+0x05A1=0x0000
+0x05A2=0x0000
+0x05A3=0x0000
+0x05A4=0x0000
+0x05A5=0x0000
+0x05A6=0x0000
+0x05A7=0x0000
+[lms7002_registers_b]
+0x0100=0x340F
+0x0101=0x7800
+0x0102=0x3180
+0x0103=0x0612
+0x0104=0x0088
+0x0105=0x001F
+0x0106=0x3182
+0x0107=0x318C
+0x0108=0x9442
+0x0109=0x61C1
+0x010A=0x104C
+0x010C=0x88FF
+0x010D=0x001E
+0x010E=0x2040
+0x010F=0x3042
+0x0110=0x0BF4
+0x0111=0x0083
+0x0112=0x9407
+0x0113=0x03C3
+0x0114=0x00D0
+0x0115=0x000F
+0x0116=0x8180
+0x0117=0x1217
+0x0118=0x018C
+0x0119=0x5280
+0x011A=0x3E03
+0x011C=0xAD41
+0x011D=0x1555
+0x011E=0x0747
+0x011F=0x3640
+0x0120=0xB9FF
+0x0121=0x360C
+0x0122=0x033F
+0x0123=0x267B
+0x0124=0x0000
+0x0200=0x0101
+0x0201=0x07FF
+0x0202=0x07FF
+0x0203=0x0000
+0x0204=0x0000
+0x0205=0x0000
+0x0206=0x0000
+0x0207=0x0000
+0x0208=0x01F0
+0x0209=0x0000
+0x020A=0x0080
+0x020B=0x0000
+0x020C=0x7FFF
+0x0240=0x0020
+0x0241=0x0000
+0x0242=0x0000
+0x0243=0x0000
+0x0244=0x0000
+0x0245=0x0000
+0x0246=0x0000
+0x0247=0x0000
+0x0248=0x0000
+0x0249=0x0000
+0x024A=0x0000
+0x024B=0x0000
+0x024C=0x0000
+0x024D=0x0000
+0x024E=0x0000
+0x024F=0x0000
+0x0250=0x0000
+0x0251=0x0000
+0x0252=0x0000
+0x0253=0x0000
+0x0254=0x0000
+0x0255=0x0000
+0x0256=0x0000
+0x0257=0x0000
+0x0258=0x0000
+0x0259=0x0000
+0x025A=0x0000
+0x025B=0x0000
+0x025C=0x0000
+0x025D=0x0000
+0x025E=0x0000
+0x025F=0x0000
+0x0260=0x0000
+0x0261=0x0000
+0x0280=0x0000
+0x0281=0x0000
+0x0282=0x0000
+0x0283=0x0000
+0x0284=0x0000
+0x0285=0x0000
+0x0286=0x0000
+0x0287=0x0000
+0x0288=0x0000
+0x0289=0x0000
+0x028A=0x0000
+0x028B=0x0000
+0x028C=0x0000
+0x028D=0x0000
+0x028E=0x0000
+0x028F=0x0000
+0x0290=0x0000
+0x0291=0x0000
+0x0292=0x0000
+0x0293=0x0000
+0x0294=0x0000
+0x0295=0x0000
+0x0296=0x0000
+0x0297=0x0000
+0x0298=0x0000
+0x0299=0x0000
+0x029A=0x0000
+0x029B=0x0000
+0x029C=0x0000
+0x029D=0x0000
+0x029E=0x0000
+0x029F=0x0000
+0x02A0=0x0000
+0x02A1=0x0000
+0x02A2=0x0000
+0x02A3=0x0000
+0x02A4=0x0000
+0x02A5=0x0000
+0x02A6=0x0000
+0x02A7=0x0000
+0x02C0=0x0000
+0x02C1=0x0000
+0x02C2=0x0000
+0x02C3=0x0000
+0x02C4=0x0000
+0x02C5=0x0000
+0x02C6=0x0000
+0x02C7=0x0000
+0x02C8=0x0000
+0x02C9=0x0000
+0x02CA=0x0000
+0x02CB=0x0000
+0x02CC=0x0000
+0x02CD=0x0000
+0x02CE=0x0000
+0x02CF=0x0000
+0x02D0=0x0000
+0x02D1=0x0000
+0x02D2=0x0000
+0x02D3=0x0000
+0x02D4=0x0000
+0x02D5=0x0000
+0x02D6=0x0000
+0x02D7=0x0000
+0x02D8=0x0000
+0x02D9=0x0000
+0x02DA=0x0000
+0x02DB=0x0000
+0x02DC=0x0000
+0x02DD=0x0000
+0x02DE=0x0000
+0x02DF=0x0000
+0x02E0=0x0000
+0x02E1=0x0000
+0x02E2=0x0000
+0x02E3=0x0000
+0x02E4=0x0000
+0x02E5=0x0000
+0x02E6=0x0000
+0x02E7=0x0000
+0x0300=0x0000
+0x0301=0x0000
+0x0302=0x0000
+0x0303=0x0000
+0x0304=0x0000
+0x0305=0x0000
+0x0306=0x0000
+0x0307=0x0000
+0x0308=0x0000
+0x0309=0x0000
+0x030A=0x0000
+0x030B=0x0000
+0x030C=0x0000
+0x030D=0x0000
+0x030E=0x0000
+0x030F=0x0000
+0x0310=0x0000
+0x0311=0x0000
+0x0312=0x0000
+0x0313=0x0000
+0x0314=0x0000
+0x0315=0x0000
+0x0316=0x0000
+0x0317=0x0000
+0x0318=0x0000
+0x0319=0x0000
+0x031A=0x0000
+0x031B=0x0000
+0x031C=0x0000
+0x031D=0x0000
+0x031E=0x0000
+0x031F=0x0000
+0x0320=0x0000
+0x0321=0x0000
+0x0322=0x0000
+0x0323=0x0000
+0x0324=0x0000
+0x0325=0x0000
+0x0326=0x0000
+0x0327=0x0000
+0x0340=0x0000
+0x0341=0x0000
+0x0342=0x0000
+0x0343=0x0000
+0x0344=0x0000
+0x0345=0x0000
+0x0346=0x0000
+0x0347=0x0000
+0x0348=0x0000
+0x0349=0x0000
+0x034A=0x0000
+0x034B=0x0000
+0x034C=0x0000
+0x034D=0x0000
+0x034E=0x0000
+0x034F=0x0000
+0x0350=0x0000
+0x0351=0x0000
+0x0352=0x0000
+0x0353=0x0000
+0x0354=0x0000
+0x0355=0x0000
+0x0356=0x0000
+0x0357=0x0000
+0x0358=0x0000
+0x0359=0x0000
+0x035A=0x0000
+0x035B=0x0000
+0x035C=0x0000
+0x035D=0x0000
+0x035E=0x0000
+0x035F=0x0000
+0x0360=0x0000
+0x0361=0x0000
+0x0362=0x0000
+0x0363=0x0000
+0x0364=0x0000
+0x0365=0x0000
+0x0366=0x0000
+0x0367=0x0000
+0x0380=0x0000
+0x0381=0x0000
+0x0382=0x0000
+0x0383=0x0000
+0x0384=0x0000
+0x0385=0x0000
+0x0386=0x0000
+0x0387=0x0000
+0x0388=0x0000
+0x0389=0x0000
+0x038A=0x0000
+0x038B=0x0000
+0x038C=0x0000
+0x038D=0x0000
+0x038E=0x0000
+0x038F=0x0000
+0x0390=0x0000
+0x0391=0x0000
+0x0392=0x0000
+0x0393=0x0000
+0x0394=0x0000
+0x0395=0x0000
+0x0396=0x0000
+0x0397=0x0000
+0x0398=0x0000
+0x0399=0x0000
+0x039A=0x0000
+0x039B=0x0000
+0x039C=0x0000
+0x039D=0x0000
+0x039E=0x0000
+0x039F=0x0000
+0x03A0=0x0000
+0x03A1=0x0000
+0x03A2=0x0000
+0x03A3=0x0000
+0x03A4=0x0000
+0x03A5=0x0000
+0x03A6=0x0000
+0x03A7=0x0000
+0x0400=0x0105
+0x0401=0x07FF
+0x0402=0x07FF
+0x0403=0x0000
+0x0404=0x0000
+0x0405=0x0000
+0x0406=0x0000
+0x0407=0x0000
+0x0408=0x0000
+0x0409=0x0000
+0x040A=0x0000
+0x040B=0x7FFF
+0x040C=0x00FF
+0x040D=0x0000
+0x040E=0x0002
+0x040F=0x0000
+0x0440=0x0020
+0x0441=0x0000
+0x0442=0x0000
+0x0443=0x0000
+0x0444=0x0000
+0x0445=0x0000
+0x0446=0x0000
+0x0447=0x0000
+0x0448=0x0000
+0x0449=0x0000
+0x044A=0x0000
+0x044B=0x0000
+0x044C=0x0000
+0x044D=0x0000
+0x044E=0x0000
+0x044F=0x0000
+0x0450=0x0000
+0x0451=0x0000
+0x0452=0x0000
+0x0453=0x0000
+0x0454=0x0000
+0x0455=0x0000
+0x0456=0x0000
+0x0457=0x0000
+0x0458=0x0000
+0x0459=0x0000
+0x045A=0x0000
+0x045B=0x0000
+0x045C=0x0000
+0x045D=0x0000
+0x045E=0x0000
+0x045F=0x0000
+0x0460=0x0000
+0x0461=0x0000
+0x0480=0x0000
+0x0481=0x0000
+0x0482=0x0000
+0x0483=0x0000
+0x0484=0x0000
+0x0485=0x0000
+0x0486=0x0000
+0x0487=0x0000
+0x0488=0x0000
+0x0489=0x0000
+0x048A=0x0000
+0x048B=0x0000
+0x048C=0x0000
+0x048D=0x0000
+0x048E=0x0000
+0x048F=0x0000
+0x0490=0x0000
+0x0491=0x0000
+0x0492=0x0000
+0x0493=0x0000
+0x0494=0x0000
+0x0495=0x0000
+0x0496=0x0000
+0x0497=0x0000
+0x0498=0x0000
+0x0499=0x0000
+0x049A=0x0000
+0x049B=0x0000
+0x049C=0x0000
+0x049D=0x0000
+0x049E=0x0000
+0x049F=0x0000
+0x04A0=0x0000
+0x04A1=0x0000
+0x04A2=0x0000
+0x04A3=0x0000
+0x04A4=0x0000
+0x04A5=0x0000
+0x04A6=0x0000
+0x04A7=0x0000
+0x04C0=0x0000
+0x04C1=0x0000
+0x04C2=0x0000
+0x04C3=0x0000
+0x04C4=0x0000
+0x04C5=0x0000
+0x04C6=0x0000
+0x04C7=0x0000
+0x04C8=0x0000
+0x04C9=0x0000
+0x04CA=0x0000
+0x04CB=0x0000
+0x04CC=0x0000
+0x04CD=0x0000
+0x04CE=0x0000
+0x04CF=0x0000
+0x04D0=0x0000
+0x04D1=0x0000
+0x04D2=0x0000
+0x04D3=0x0000
+0x04D4=0x0000
+0x04D5=0x0000
+0x04D6=0x0000
+0x04D7=0x0000
+0x04D8=0x0000
+0x04D9=0x0000
+0x04DA=0x0000
+0x04DB=0x0000
+0x04DC=0x0000
+0x04DD=0x0000
+0x04DE=0x0000
+0x04DF=0x0000
+0x04E0=0x0000
+0x04E1=0x0000
+0x04E2=0x0000
+0x04E3=0x0000
+0x04E4=0x0000
+0x04E5=0x0000
+0x04E6=0x0000
+0x04E7=0x0000
+0x0500=0x0000
+0x0501=0x0000
+0x0502=0x0000
+0x0503=0x0000
+0x0504=0x0000
+0x0505=0x0000
+0x0506=0x0000
+0x0507=0x0000
+0x0508=0x0000
+0x0509=0x0000
+0x050A=0x0000
+0x050B=0x0000
+0x050C=0x0000
+0x050D=0x0000
+0x050E=0x0000
+0x050F=0x0000
+0x0510=0x0000
+0x0511=0x0000
+0x0512=0x0000
+0x0513=0x0000
+0x0514=0x0000
+0x0515=0x0000
+0x0516=0x0000
+0x0517=0x0000
+0x0518=0x0000
+0x0519=0x0000
+0x051A=0x0000
+0x051B=0x0000
+0x051C=0x0000
+0x051D=0x0000
+0x051E=0x0000
+0x051F=0x0000
+0x0520=0x0000
+0x0521=0x0000
+0x0522=0x0000
+0x0523=0x0000
+0x0524=0x0000
+0x0525=0x0000
+0x0526=0x0000
+0x0527=0x0000
+0x0540=0x0000
+0x0541=0x0000
+0x0542=0x0000
+0x0543=0x0000
+0x0544=0x0000
+0x0545=0x0000
+0x0546=0x0000
+0x0547=0x0000
+0x0548=0x0000
+0x0549=0x0000
+0x054A=0x0000
+0x054B=0x0000
+0x054C=0x0000
+0x054D=0x0000
+0x054E=0x0000
+0x054F=0x0000
+0x0550=0x0000
+0x0551=0x0000
+0x0552=0x0000
+0x0553=0x0000
+0x0554=0x0000
+0x0555=0x0000
+0x0556=0x0000
+0x0557=0x0000
+0x0558=0x0000
+0x0559=0x0000
+0x055A=0x0000
+0x055B=0x0000
+0x055C=0x0000
+0x055D=0x0000
+0x055E=0x0000
+0x055F=0x0000
+0x0560=0x0000
+0x0561=0x0000
+0x0562=0x0000
+0x0563=0x0000
+0x0564=0x0000
+0x0565=0x0000
+0x0566=0x0000
+0x0567=0x0000
+0x0580=0x0000
+0x0581=0x0000
+0x0582=0x0000
+0x0583=0x0000
+0x0584=0x0000
+0x0585=0x0000
+0x0586=0x0000
+0x0587=0x0000
+0x0588=0x0000
+0x0589=0x0000
+0x058A=0x0000
+0x058B=0x0000
+0x058C=0x0000
+0x058D=0x0000
+0x058E=0x0000
+0x058F=0x0000
+0x0590=0x0000
+0x0591=0x0000
+0x0592=0x0000
+0x0593=0x0000
+0x0594=0x0000
+0x0595=0x0000
+0x0596=0x0000
+0x0597=0x0000
+0x0598=0x0000
+0x0599=0x0000
+0x059A=0x0000
+0x059B=0x0000
+0x059C=0x0000
+0x059D=0x0000
+0x059E=0x0000
+0x059F=0x0000
+0x05A0=0x0000
+0x05A1=0x0000
+0x05A2=0x0000
+0x05A3=0x0000
+0x05A4=0x0000
+0x05A5=0x0000
+0x05A6=0x0000
+0x05A7=0x0000
+[reference_clocks]
+sxt_ref_clk_mhz=30.72
+sxr_ref_clk_mhz=30.72
diff --git a/targets/ARCH/LMSSDR/LimeSDR_below_1p8GHz.ini b/targets/ARCH/LMSSDR/LimeSDR_below_1p8GHz.ini
new file mode 100755
index 0000000000000000000000000000000000000000..dda51f7f27d97511d742cef79f99c99f208dc310
--- /dev/null
+++ b/targets/ARCH/LMSSDR/LimeSDR_below_1p8GHz.ini
@@ -0,0 +1,1128 @@
+[file_info]
+type=lms7002m_minimal_config
+version=1
+[lms7002_registers_a]
+0x0020=0xFFFD
+0x0021=0x0E9F
+0x0022=0x07FF
+0x0023=0x5550
+0x0024=0xB1E4
+0x0025=0x0101
+0x0026=0x0101
+0x0027=0xB1E4
+0x0028=0x0101
+0x0029=0x0101
+0x002A=0x0086
+0x002B=0x0038
+0x002C=0x0000
+0x002D=0x0000
+0x002E=0x0000
+0x002F=0x3840
+0x0081=0x0000
+0x0082=0x8003
+0x0084=0x0400
+0x0085=0x0001
+0x0086=0x4101
+0x0087=0x0000
+0x0088=0x04B0
+0x0089=0x1090
+0x008A=0x0514
+0x008B=0x2102
+0x008C=0x267B
+0x0092=0x0001
+0x0093=0x0000
+0x0094=0x0000
+0x0095=0x0000
+0x0096=0x0000
+0x0097=0x0000
+0x0098=0x0000
+0x0099=0x6565
+0x009A=0x658C
+0x009B=0x6565
+0x009C=0x658C
+0x009D=0x6565
+0x009E=0x658C
+0x009F=0x658C
+0x00A0=0x6565
+0x00A1=0x6565
+0x00A2=0x6565
+0x00A3=0x6565
+0x00A4=0x6565
+0x00A5=0x6565
+0x00A6=0x000F
+0x00A7=0x6565
+0x00A8=0x0000
+0x00A9=0x0000
+0x00AA=0x0000
+0x00AB=0x0040
+0x00AC=0x0000
+0x00AD=0x03FF
+0x00AE=0x0000
+0x0100=0x3409
+0x0101=0x7800
+0x0102=0x3180
+0x0103=0x0A12
+0x0104=0x0088
+0x0105=0x0011
+0x0106=0x318C
+0x0107=0x318C
+0x0108=0x2826
+0x0109=0x6104
+0x010A=0x17BD
+0x010C=0x8865
+0x010D=0x01DC
+0x010E=0x0000
+0x010F=0x3042
+0x0110=0x0BFF
+0x0111=0x0083
+0x0112=0x9407
+0x0113=0x0303
+0x0114=0x00D0
+0x0115=0x0009
+0x0116=0x8180
+0x0117=0x1217
+0x0118=0x018C
+0x0119=0x528C
+0x011A=0x3E03
+0x011C=0xAD41
+0x011D=0xC000
+0x011E=0x068F
+0x011F=0x3680
+0x0120=0xB9FF
+0x0121=0x3234
+0x0122=0x033F
+0x0123=0x267B
+0x0124=0x0000
+0x0200=0x0081
+0x0201=0x07FF
+0x0202=0x07FF
+0x0203=0x0000
+0x0204=0x0000
+0x0205=0x0000
+0x0206=0x0000
+0x0207=0x0000
+0x0208=0x0170
+0x0209=0x0000
+0x020A=0x0080
+0x020B=0x0000
+0x020C=0x8000
+0x0240=0x0020
+0x0241=0x0000
+0x0242=0x0000
+0x0243=0x0000
+0x0244=0x0000
+0x0245=0x0000
+0x0246=0x0000
+0x0247=0x0000
+0x0248=0x0000
+0x0249=0x0000
+0x024A=0x0000
+0x024B=0x0000
+0x024C=0x0000
+0x024D=0x0000
+0x024E=0x0000
+0x024F=0x0000
+0x0250=0x0000
+0x0251=0x0000
+0x0252=0x0000
+0x0253=0x0000
+0x0254=0x0000
+0x0255=0x0000
+0x0256=0x0000
+0x0257=0x0000
+0x0258=0x0000
+0x0259=0x0000
+0x025A=0x0000
+0x025B=0x0000
+0x025C=0x0000
+0x025D=0x0000
+0x025E=0x0000
+0x025F=0x0000
+0x0260=0x0000
+0x0261=0x0000
+0x0280=0x0000
+0x0281=0x0000
+0x0282=0x0000
+0x0283=0x0000
+0x0284=0x0000
+0x0285=0x0000
+0x0286=0x0000
+0x0287=0x0000
+0x0288=0x0000
+0x0289=0x0000
+0x028A=0x0000
+0x028B=0x0000
+0x028C=0x0000
+0x028D=0x0000
+0x028E=0x0000
+0x028F=0x0000
+0x0290=0x0000
+0x0291=0x0000
+0x0292=0x0000
+0x0293=0x0000
+0x0294=0x0000
+0x0295=0x0000
+0x0296=0x0000
+0x0297=0x0000
+0x0298=0x0000
+0x0299=0x0000
+0x029A=0x0000
+0x029B=0x0000
+0x029C=0x0000
+0x029D=0x0000
+0x029E=0x0000
+0x029F=0x0000
+0x02A0=0x0000
+0x02A1=0x0000
+0x02A2=0x0000
+0x02A3=0x0000
+0x02A4=0x0000
+0x02A5=0x0000
+0x02A6=0x0000
+0x02A7=0x0000
+0x02C0=0x0000
+0x02C1=0x0000
+0x02C2=0x0000
+0x02C3=0x0000
+0x02C4=0x0000
+0x02C5=0x0000
+0x02C6=0x0000
+0x02C7=0x0000
+0x02C8=0x0000
+0x02C9=0x0000
+0x02CA=0x0000
+0x02CB=0x0000
+0x02CC=0x0000
+0x02CD=0x0000
+0x02CE=0x0000
+0x02CF=0x0000
+0x02D0=0x0000
+0x02D1=0x0000
+0x02D2=0x0000
+0x02D3=0x0000
+0x02D4=0x0000
+0x02D5=0x0000
+0x02D6=0x0000
+0x02D7=0x0000
+0x02D8=0x0000
+0x02D9=0x0000
+0x02DA=0x0000
+0x02DB=0x0000
+0x02DC=0x0000
+0x02DD=0x0000
+0x02DE=0x0000
+0x02DF=0x0000
+0x02E0=0x0000
+0x02E1=0x0000
+0x02E2=0x0000
+0x02E3=0x0000
+0x02E4=0x0000
+0x02E5=0x0000
+0x02E6=0x0000
+0x02E7=0x0000
+0x0300=0x0000
+0x0301=0x0000
+0x0302=0x0000
+0x0303=0x0000
+0x0304=0x0000
+0x0305=0x0000
+0x0306=0x0000
+0x0307=0x0000
+0x0308=0x0000
+0x0309=0x0000
+0x030A=0x0000
+0x030B=0x0000
+0x030C=0x0000
+0x030D=0x0000
+0x030E=0x0000
+0x030F=0x0000
+0x0310=0x0000
+0x0311=0x0000
+0x0312=0x0000
+0x0313=0x0000
+0x0314=0x0000
+0x0315=0x0000
+0x0316=0x0000
+0x0317=0x0000
+0x0318=0x0000
+0x0319=0x0000
+0x031A=0x0000
+0x031B=0x0000
+0x031C=0x0000
+0x031D=0x0000
+0x031E=0x0000
+0x031F=0x0000
+0x0320=0x0000
+0x0321=0x0000
+0x0322=0x0000
+0x0323=0x0000
+0x0324=0x0000
+0x0325=0x0000
+0x0326=0x0000
+0x0327=0x0000
+0x0340=0x0000
+0x0341=0x0000
+0x0342=0x0000
+0x0343=0x0000
+0x0344=0x0000
+0x0345=0x0000
+0x0346=0x0000
+0x0347=0x0000
+0x0348=0x0000
+0x0349=0x0000
+0x034A=0x0000
+0x034B=0x0000
+0x034C=0x0000
+0x034D=0x0000
+0x034E=0x0000
+0x034F=0x0000
+0x0350=0x0000
+0x0351=0x0000
+0x0352=0x0000
+0x0353=0x0000
+0x0354=0x0000
+0x0355=0x0000
+0x0356=0x0000
+0x0357=0x0000
+0x0358=0x0000
+0x0359=0x0000
+0x035A=0x0000
+0x035B=0x0000
+0x035C=0x0000
+0x035D=0x0000
+0x035E=0x0000
+0x035F=0x0000
+0x0360=0x0000
+0x0361=0x0000
+0x0362=0x0000
+0x0363=0x0000
+0x0364=0x0000
+0x0365=0x0000
+0x0366=0x0000
+0x0367=0x0000
+0x0380=0x0000
+0x0381=0x0000
+0x0382=0x0000
+0x0383=0x0000
+0x0384=0x0000
+0x0385=0x0000
+0x0386=0x0000
+0x0387=0x0000
+0x0388=0x0000
+0x0389=0x0000
+0x038A=0x0000
+0x038B=0x0000
+0x038C=0x0000
+0x038D=0x0000
+0x038E=0x0000
+0x038F=0x0000
+0x0390=0x0000
+0x0391=0x0000
+0x0392=0x0000
+0x0393=0x0000
+0x0394=0x0000
+0x0395=0x0000
+0x0396=0x0000
+0x0397=0x0000
+0x0398=0x0000
+0x0399=0x0000
+0x039A=0x0000
+0x039B=0x0000
+0x039C=0x0000
+0x039D=0x0000
+0x039E=0x0000
+0x039F=0x0000
+0x03A0=0x0000
+0x03A1=0x0000
+0x03A2=0x0000
+0x03A3=0x0000
+0x03A4=0x0000
+0x03A5=0x0000
+0x03A6=0x0000
+0x03A7=0x0000
+0x0400=0x8081
+0x0401=0x07FF
+0x0402=0x07FF
+0x0403=0x0000
+0x0404=0x0000
+0x0405=0x0000
+0x0406=0x0000
+0x0407=0x0000
+0x0408=0x0000
+0x0409=0x0000
+0x040A=0x0003
+0x040B=0x000F
+0x040C=0x00F8
+0x040D=0x0000
+0x040E=0x0000
+0x040F=0x0000
+0x0440=0x0020
+0x0441=0x0000
+0x0442=0x2B55
+0x0443=0x5540
+0x0444=0x0000
+0x0445=0x0000
+0x0446=0x0000
+0x0447=0x0000
+0x0448=0x0000
+0x0449=0x0000
+0x044A=0x0000
+0x044B=0x0000
+0x044C=0x0000
+0x044D=0x0000
+0x044E=0x0000
+0x044F=0x0000
+0x0450=0x0000
+0x0451=0x0000
+0x0452=0x0000
+0x0453=0x0000
+0x0454=0x0000
+0x0455=0x0000
+0x0456=0x0000
+0x0457=0x0000
+0x0458=0x0000
+0x0459=0x0000
+0x045A=0x0000
+0x045B=0x0000
+0x045C=0x0000
+0x045D=0x0000
+0x045E=0x0000
+0x045F=0x0000
+0x0460=0x0000
+0x0461=0x0000
+0x0480=0x0000
+0x0481=0x0000
+0x0482=0x0000
+0x0483=0x0000
+0x0484=0x0000
+0x0485=0x0000
+0x0486=0x0000
+0x0487=0x0000
+0x0488=0x0000
+0x0489=0x0000
+0x048A=0x0000
+0x048B=0x0000
+0x048C=0x0000
+0x048D=0x0000
+0x048E=0x0000
+0x048F=0x0000
+0x0490=0x0000
+0x0491=0x0000
+0x0492=0x0000
+0x0493=0x0000
+0x0494=0x0000
+0x0495=0x0000
+0x0496=0x0000
+0x0497=0x0000
+0x0498=0x0000
+0x0499=0x0000
+0x049A=0x0000
+0x049B=0x0000
+0x049C=0x0000
+0x049D=0x0000
+0x049E=0x0000
+0x049F=0x0000
+0x04A0=0x0000
+0x04A1=0x0000
+0x04A2=0x0000
+0x04A3=0x0000
+0x04A4=0x0000
+0x04A5=0x0000
+0x04A6=0x0000
+0x04A7=0x0000
+0x04C0=0x0000
+0x04C1=0x0000
+0x04C2=0x0000
+0x04C3=0x0000
+0x04C4=0x0000
+0x04C5=0x0000
+0x04C6=0x0000
+0x04C7=0x0000
+0x04C8=0x0000
+0x04C9=0x0000
+0x04CA=0x0000
+0x04CB=0x0000
+0x04CC=0x0000
+0x04CD=0x0000
+0x04CE=0x0000
+0x04CF=0x0000
+0x04D0=0x0000
+0x04D1=0x0000
+0x04D2=0x0000
+0x04D3=0x0000
+0x04D4=0x0000
+0x04D5=0x0000
+0x04D6=0x0000
+0x04D7=0x0000
+0x04D8=0x0000
+0x04D9=0x0000
+0x04DA=0x0000
+0x04DB=0x0000
+0x04DC=0x0000
+0x04DD=0x0000
+0x04DE=0x0000
+0x04DF=0x0000
+0x04E0=0x0000
+0x04E1=0x0000
+0x04E2=0x0000
+0x04E3=0x0000
+0x04E4=0x0000
+0x04E5=0x0000
+0x04E6=0x0000
+0x04E7=0x0000
+0x0500=0x0000
+0x0501=0x0000
+0x0502=0x0000
+0x0503=0x0000
+0x0504=0x0000
+0x0505=0x0000
+0x0506=0x0000
+0x0507=0x0000
+0x0508=0x0000
+0x0509=0x0000
+0x050A=0x0000
+0x050B=0x0000
+0x050C=0x0000
+0x050D=0x0000
+0x050E=0x0000
+0x050F=0x0000
+0x0510=0x0000
+0x0511=0x0000
+0x0512=0x0000
+0x0513=0x0000
+0x0514=0x0000
+0x0515=0x0000
+0x0516=0x0000
+0x0517=0x0000
+0x0518=0x0000
+0x0519=0x0000
+0x051A=0x0000
+0x051B=0x0000
+0x051C=0x0000
+0x051D=0x0000
+0x051E=0x0000
+0x051F=0x0000
+0x0520=0x0000
+0x0521=0x0000
+0x0522=0x0000
+0x0523=0x0000
+0x0524=0x0000
+0x0525=0x0000
+0x0526=0x0000
+0x0527=0x0000
+0x0540=0x0000
+0x0541=0x0000
+0x0542=0x0000
+0x0543=0x0000
+0x0544=0x0000
+0x0545=0x0000
+0x0546=0x0000
+0x0547=0x0000
+0x0548=0x0000
+0x0549=0x0000
+0x054A=0x0000
+0x054B=0x0000
+0x054C=0x0000
+0x054D=0x0000
+0x054E=0x0000
+0x054F=0x0000
+0x0550=0x0000
+0x0551=0x0000
+0x0552=0x0000
+0x0553=0x0000
+0x0554=0x0000
+0x0555=0x0000
+0x0556=0x0000
+0x0557=0x0000
+0x0558=0x0000
+0x0559=0x0000
+0x055A=0x0000
+0x055B=0x0000
+0x055C=0x0000
+0x055D=0x0000
+0x055E=0x0000
+0x055F=0x0000
+0x0560=0x0000
+0x0561=0x0000
+0x0562=0x0000
+0x0563=0x0000
+0x0564=0x0000
+0x0565=0x0000
+0x0566=0x0000
+0x0567=0x0000
+0x0580=0x0000
+0x0581=0x0000
+0x0582=0x0000
+0x0583=0x0000
+0x0584=0x0000
+0x0585=0x0000
+0x0586=0x0000
+0x0587=0x0000
+0x0588=0x0000
+0x0589=0x0000
+0x058A=0x0000
+0x058B=0x0000
+0x058C=0x0000
+0x058D=0x0000
+0x058E=0x0000
+0x058F=0x0000
+0x0590=0x0000
+0x0591=0x0000
+0x0592=0x0000
+0x0593=0x0000
+0x0594=0x0000
+0x0595=0x0000
+0x0596=0x0000
+0x0597=0x0000
+0x0598=0x0000
+0x0599=0x0000
+0x059A=0x0000
+0x059B=0x0000
+0x059C=0x0000
+0x059D=0x0000
+0x059E=0x0000
+0x059F=0x0000
+0x05A0=0x0000
+0x05A1=0x0000
+0x05A2=0x0000
+0x05A3=0x0000
+0x05A4=0x0000
+0x05A5=0x0000
+0x05A6=0x0000
+0x05A7=0x0000
+[lms7002_registers_b]
+0x0100=0x340F
+0x0101=0x7800
+0x0102=0x3180
+0x0103=0x0612
+0x0104=0x0088
+0x0105=0x001F
+0x0106=0x3182
+0x0107=0x318C
+0x0108=0x9442
+0x0109=0x61C1
+0x010A=0x104C
+0x010C=0x88FF
+0x010D=0x001E
+0x010E=0x2040
+0x010F=0x3042
+0x0110=0x0BF4
+0x0111=0x0083
+0x0112=0x9407
+0x0113=0x03C3
+0x0114=0x00D0
+0x0115=0x000F
+0x0116=0x8180
+0x0117=0x1217
+0x0118=0x018C
+0x0119=0x5280
+0x011A=0x3E03
+0x011C=0xAD41
+0x011D=0xC000
+0x011E=0x06F3
+0x011F=0x3680
+0x0120=0xB9FF
+0x0121=0x346C
+0x0122=0x033F
+0x0123=0x267B
+0x0124=0x0000
+0x0200=0x0101
+0x0201=0x07FF
+0x0202=0x07FF
+0x0203=0x0000
+0x0204=0x0000
+0x0205=0x0000
+0x0206=0x0000
+0x0207=0x0000
+0x0208=0x01F0
+0x0209=0x0000
+0x020A=0x0080
+0x020B=0x0000
+0x020C=0x7FFF
+0x0240=0x0020
+0x0241=0x0000
+0x0242=0x0000
+0x0243=0x0000
+0x0244=0x0000
+0x0245=0x0000
+0x0246=0x0000
+0x0247=0x0000
+0x0248=0x0000
+0x0249=0x0000
+0x024A=0x0000
+0x024B=0x0000
+0x024C=0x0000
+0x024D=0x0000
+0x024E=0x0000
+0x024F=0x0000
+0x0250=0x0000
+0x0251=0x0000
+0x0252=0x0000
+0x0253=0x0000
+0x0254=0x0000
+0x0255=0x0000
+0x0256=0x0000
+0x0257=0x0000
+0x0258=0x0000
+0x0259=0x0000
+0x025A=0x0000
+0x025B=0x0000
+0x025C=0x0000
+0x025D=0x0000
+0x025E=0x0000
+0x025F=0x0000
+0x0260=0x0000
+0x0261=0x0000
+0x0280=0x0000
+0x0281=0x0000
+0x0282=0x0000
+0x0283=0x0000
+0x0284=0x0000
+0x0285=0x0000
+0x0286=0x0000
+0x0287=0x0000
+0x0288=0x0000
+0x0289=0x0000
+0x028A=0x0000
+0x028B=0x0000
+0x028C=0x0000
+0x028D=0x0000
+0x028E=0x0000
+0x028F=0x0000
+0x0290=0x0000
+0x0291=0x0000
+0x0292=0x0000
+0x0293=0x0000
+0x0294=0x0000
+0x0295=0x0000
+0x0296=0x0000
+0x0297=0x0000
+0x0298=0x0000
+0x0299=0x0000
+0x029A=0x0000
+0x029B=0x0000
+0x029C=0x0000
+0x029D=0x0000
+0x029E=0x0000
+0x029F=0x0000
+0x02A0=0x0000
+0x02A1=0x0000
+0x02A2=0x0000
+0x02A3=0x0000
+0x02A4=0x0000
+0x02A5=0x0000
+0x02A6=0x0000
+0x02A7=0x0000
+0x02C0=0x0000
+0x02C1=0x0000
+0x02C2=0x0000
+0x02C3=0x0000
+0x02C4=0x0000
+0x02C5=0x0000
+0x02C6=0x0000
+0x02C7=0x0000
+0x02C8=0x0000
+0x02C9=0x0000
+0x02CA=0x0000
+0x02CB=0x0000
+0x02CC=0x0000
+0x02CD=0x0000
+0x02CE=0x0000
+0x02CF=0x0000
+0x02D0=0x0000
+0x02D1=0x0000
+0x02D2=0x0000
+0x02D3=0x0000
+0x02D4=0x0000
+0x02D5=0x0000
+0x02D6=0x0000
+0x02D7=0x0000
+0x02D8=0x0000
+0x02D9=0x0000
+0x02DA=0x0000
+0x02DB=0x0000
+0x02DC=0x0000
+0x02DD=0x0000
+0x02DE=0x0000
+0x02DF=0x0000
+0x02E0=0x0000
+0x02E1=0x0000
+0x02E2=0x0000
+0x02E3=0x0000
+0x02E4=0x0000
+0x02E5=0x0000
+0x02E6=0x0000
+0x02E7=0x0000
+0x0300=0x0000
+0x0301=0x0000
+0x0302=0x0000
+0x0303=0x0000
+0x0304=0x0000
+0x0305=0x0000
+0x0306=0x0000
+0x0307=0x0000
+0x0308=0x0000
+0x0309=0x0000
+0x030A=0x0000
+0x030B=0x0000
+0x030C=0x0000
+0x030D=0x0000
+0x030E=0x0000
+0x030F=0x0000
+0x0310=0x0000
+0x0311=0x0000
+0x0312=0x0000
+0x0313=0x0000
+0x0314=0x0000
+0x0315=0x0000
+0x0316=0x0000
+0x0317=0x0000
+0x0318=0x0000
+0x0319=0x0000
+0x031A=0x0000
+0x031B=0x0000
+0x031C=0x0000
+0x031D=0x0000
+0x031E=0x0000
+0x031F=0x0000
+0x0320=0x0000
+0x0321=0x0000
+0x0322=0x0000
+0x0323=0x0000
+0x0324=0x0000
+0x0325=0x0000
+0x0326=0x0000
+0x0327=0x0000
+0x0340=0x0000
+0x0341=0x0000
+0x0342=0x0000
+0x0343=0x0000
+0x0344=0x0000
+0x0345=0x0000
+0x0346=0x0000
+0x0347=0x0000
+0x0348=0x0000
+0x0349=0x0000
+0x034A=0x0000
+0x034B=0x0000
+0x034C=0x0000
+0x034D=0x0000
+0x034E=0x0000
+0x034F=0x0000
+0x0350=0x0000
+0x0351=0x0000
+0x0352=0x0000
+0x0353=0x0000
+0x0354=0x0000
+0x0355=0x0000
+0x0356=0x0000
+0x0357=0x0000
+0x0358=0x0000
+0x0359=0x0000
+0x035A=0x0000
+0x035B=0x0000
+0x035C=0x0000
+0x035D=0x0000
+0x035E=0x0000
+0x035F=0x0000
+0x0360=0x0000
+0x0361=0x0000
+0x0362=0x0000
+0x0363=0x0000
+0x0364=0x0000
+0x0365=0x0000
+0x0366=0x0000
+0x0367=0x0000
+0x0380=0x0000
+0x0381=0x0000
+0x0382=0x0000
+0x0383=0x0000
+0x0384=0x0000
+0x0385=0x0000
+0x0386=0x0000
+0x0387=0x0000
+0x0388=0x0000
+0x0389=0x0000
+0x038A=0x0000
+0x038B=0x0000
+0x038C=0x0000
+0x038D=0x0000
+0x038E=0x0000
+0x038F=0x0000
+0x0390=0x0000
+0x0391=0x0000
+0x0392=0x0000
+0x0393=0x0000
+0x0394=0x0000
+0x0395=0x0000
+0x0396=0x0000
+0x0397=0x0000
+0x0398=0x0000
+0x0399=0x0000
+0x039A=0x0000
+0x039B=0x0000
+0x039C=0x0000
+0x039D=0x0000
+0x039E=0x0000
+0x039F=0x0000
+0x03A0=0x0000
+0x03A1=0x0000
+0x03A2=0x0000
+0x03A3=0x0000
+0x03A4=0x0000
+0x03A5=0x0000
+0x03A6=0x0000
+0x03A7=0x0000
+0x0400=0x0105
+0x0401=0x07FF
+0x0402=0x07FF
+0x0403=0x0000
+0x0404=0x0000
+0x0405=0x0000
+0x0406=0x0000
+0x0407=0x0000
+0x0408=0x0000
+0x0409=0x0000
+0x040A=0x0000
+0x040B=0x7FFF
+0x040C=0x00FF
+0x040D=0x0000
+0x040E=0x0002
+0x040F=0x0000
+0x0440=0x0020
+0x0441=0x0000
+0x0442=0x0000
+0x0443=0x0000
+0x0444=0x0000
+0x0445=0x0000
+0x0446=0x0000
+0x0447=0x0000
+0x0448=0x0000
+0x0449=0x0000
+0x044A=0x0000
+0x044B=0x0000
+0x044C=0x0000
+0x044D=0x0000
+0x044E=0x0000
+0x044F=0x0000
+0x0450=0x0000
+0x0451=0x0000
+0x0452=0x0000
+0x0453=0x0000
+0x0454=0x0000
+0x0455=0x0000
+0x0456=0x0000
+0x0457=0x0000
+0x0458=0x0000
+0x0459=0x0000
+0x045A=0x0000
+0x045B=0x0000
+0x045C=0x0000
+0x045D=0x0000
+0x045E=0x0000
+0x045F=0x0000
+0x0460=0x0000
+0x0461=0x0000
+0x0480=0x0000
+0x0481=0x0000
+0x0482=0x0000
+0x0483=0x0000
+0x0484=0x0000
+0x0485=0x0000
+0x0486=0x0000
+0x0487=0x0000
+0x0488=0x0000
+0x0489=0x0000
+0x048A=0x0000
+0x048B=0x0000
+0x048C=0x0000
+0x048D=0x0000
+0x048E=0x0000
+0x048F=0x0000
+0x0490=0x0000
+0x0491=0x0000
+0x0492=0x0000
+0x0493=0x0000
+0x0494=0x0000
+0x0495=0x0000
+0x0496=0x0000
+0x0497=0x0000
+0x0498=0x0000
+0x0499=0x0000
+0x049A=0x0000
+0x049B=0x0000
+0x049C=0x0000
+0x049D=0x0000
+0x049E=0x0000
+0x049F=0x0000
+0x04A0=0x0000
+0x04A1=0x0000
+0x04A2=0x0000
+0x04A3=0x0000
+0x04A4=0x0000
+0x04A5=0x0000
+0x04A6=0x0000
+0x04A7=0x0000
+0x04C0=0x0000
+0x04C1=0x0000
+0x04C2=0x0000
+0x04C3=0x0000
+0x04C4=0x0000
+0x04C5=0x0000
+0x04C6=0x0000
+0x04C7=0x0000
+0x04C8=0x0000
+0x04C9=0x0000
+0x04CA=0x0000
+0x04CB=0x0000
+0x04CC=0x0000
+0x04CD=0x0000
+0x04CE=0x0000
+0x04CF=0x0000
+0x04D0=0x0000
+0x04D1=0x0000
+0x04D2=0x0000
+0x04D3=0x0000
+0x04D4=0x0000
+0x04D5=0x0000
+0x04D6=0x0000
+0x04D7=0x0000
+0x04D8=0x0000
+0x04D9=0x0000
+0x04DA=0x0000
+0x04DB=0x0000
+0x04DC=0x0000
+0x04DD=0x0000
+0x04DE=0x0000
+0x04DF=0x0000
+0x04E0=0x0000
+0x04E1=0x0000
+0x04E2=0x0000
+0x04E3=0x0000
+0x04E4=0x0000
+0x04E5=0x0000
+0x04E6=0x0000
+0x04E7=0x0000
+0x0500=0x0000
+0x0501=0x0000
+0x0502=0x0000
+0x0503=0x0000
+0x0504=0x0000
+0x0505=0x0000
+0x0506=0x0000
+0x0507=0x0000
+0x0508=0x0000
+0x0509=0x0000
+0x050A=0x0000
+0x050B=0x0000
+0x050C=0x0000
+0x050D=0x0000
+0x050E=0x0000
+0x050F=0x0000
+0x0510=0x0000
+0x0511=0x0000
+0x0512=0x0000
+0x0513=0x0000
+0x0514=0x0000
+0x0515=0x0000
+0x0516=0x0000
+0x0517=0x0000
+0x0518=0x0000
+0x0519=0x0000
+0x051A=0x0000
+0x051B=0x0000
+0x051C=0x0000
+0x051D=0x0000
+0x051E=0x0000
+0x051F=0x0000
+0x0520=0x0000
+0x0521=0x0000
+0x0522=0x0000
+0x0523=0x0000
+0x0524=0x0000
+0x0525=0x0000
+0x0526=0x0000
+0x0527=0x0000
+0x0540=0x0000
+0x0541=0x0000
+0x0542=0x0000
+0x0543=0x0000
+0x0544=0x0000
+0x0545=0x0000
+0x0546=0x0000
+0x0547=0x0000
+0x0548=0x0000
+0x0549=0x0000
+0x054A=0x0000
+0x054B=0x0000
+0x054C=0x0000
+0x054D=0x0000
+0x054E=0x0000
+0x054F=0x0000
+0x0550=0x0000
+0x0551=0x0000
+0x0552=0x0000
+0x0553=0x0000
+0x0554=0x0000
+0x0555=0x0000
+0x0556=0x0000
+0x0557=0x0000
+0x0558=0x0000
+0x0559=0x0000
+0x055A=0x0000
+0x055B=0x0000
+0x055C=0x0000
+0x055D=0x0000
+0x055E=0x0000
+0x055F=0x0000
+0x0560=0x0000
+0x0561=0x0000
+0x0562=0x0000
+0x0563=0x0000
+0x0564=0x0000
+0x0565=0x0000
+0x0566=0x0000
+0x0567=0x0000
+0x0580=0x0000
+0x0581=0x0000
+0x0582=0x0000
+0x0583=0x0000
+0x0584=0x0000
+0x0585=0x0000
+0x0586=0x0000
+0x0587=0x0000
+0x0588=0x0000
+0x0589=0x0000
+0x058A=0x0000
+0x058B=0x0000
+0x058C=0x0000
+0x058D=0x0000
+0x058E=0x0000
+0x058F=0x0000
+0x0590=0x0000
+0x0591=0x0000
+0x0592=0x0000
+0x0593=0x0000
+0x0594=0x0000
+0x0595=0x0000
+0x0596=0x0000
+0x0597=0x0000
+0x0598=0x0000
+0x0599=0x0000
+0x059A=0x0000
+0x059B=0x0000
+0x059C=0x0000
+0x059D=0x0000
+0x059E=0x0000
+0x059F=0x0000
+0x05A0=0x0000
+0x05A1=0x0000
+0x05A2=0x0000
+0x05A3=0x0000
+0x05A4=0x0000
+0x05A5=0x0000
+0x05A6=0x0000
+0x05A7=0x0000
+[reference_clocks]
+sxt_ref_clk_mhz=30.72
+sxr_ref_clk_mhz=30.72
diff --git a/targets/ARCH/LMSSDR/LimeSDR_below_1p8GHz_1v4.ini b/targets/ARCH/LMSSDR/LimeSDR_below_1p8GHz_1v4.ini
new file mode 100755
index 0000000000000000000000000000000000000000..7c94b3dd5bf801dc3370a07bb6c38a4aafd6a29e
--- /dev/null
+++ b/targets/ARCH/LMSSDR/LimeSDR_below_1p8GHz_1v4.ini
@@ -0,0 +1,1128 @@
+[file_info]
+type=lms7002m_minimal_config
+version=1
+[lms7002_registers_a]
+0x0020=0xFFFD
+0x0021=0x0E9F
+0x0022=0x07FF
+0x0023=0x5550
+0x0024=0xB1E4
+0x0025=0x0101
+0x0026=0x0101
+0x0027=0xB1E4
+0x0028=0x0101
+0x0029=0x0101
+0x002A=0x0086
+0x002B=0x0038
+0x002C=0x0000
+0x002D=0x0000
+0x002E=0x0000
+0x002F=0x3841
+0x0081=0x0000
+0x0082=0x800B
+0x0084=0x0400
+0x0085=0x0001
+0x0086=0x4101
+0x0087=0x0000
+0x0088=0x04B0
+0x0089=0x1090
+0x008A=0x0514
+0x008B=0x2138
+0x008C=0x267B
+0x0092=0x0001
+0x0093=0x0000
+0x0094=0x0000
+0x0095=0x0000
+0x0096=0x0000
+0x0097=0x0000
+0x0098=0x0000
+0x0099=0x6565
+0x009A=0x658C
+0x009B=0x6565
+0x009C=0x658C
+0x009D=0x6565
+0x009E=0x658C
+0x009F=0x658C
+0x00A0=0x6565
+0x00A1=0x6565
+0x00A2=0x6565
+0x00A3=0x6565
+0x00A4=0x6565
+0x00A5=0x6565
+0x00A6=0x000F
+0x00A7=0x6565
+0x00A8=0x0000
+0x00A9=0x0000
+0x00AA=0x0000
+0x00AB=0x0040
+0x00AC=0x0000
+0x00AD=0x03FF
+0x00AE=0x0000
+0x0100=0x3409
+0x0101=0x7800
+0x0102=0x3180
+0x0103=0x0A12
+0x0104=0x0088
+0x0105=0x0011
+0x0106=0x318C
+0x0107=0x318C
+0x0108=0x298C
+0x0109=0x6104
+0x010A=0x17BD
+0x010C=0x8865
+0x010D=0x015A
+0x010E=0x0000
+0x010F=0x30C6
+0x0110=0x0BFF
+0x0111=0x0083
+0x0112=0x9407
+0x0113=0x0303
+0x0114=0x00D0
+0x0115=0x0009
+0x0116=0x8180
+0x0117=0x1217
+0x0118=0x018C
+0x0119=0x528C
+0x011A=0x3E03
+0x011C=0xAD41
+0x011D=0xC000
+0x011E=0x068F
+0x011F=0x3680
+0x0120=0xB9FF
+0x0121=0x3234
+0x0122=0x033F
+0x0123=0x267B
+0x0124=0x0000
+0x0200=0x0081
+0x0201=0x07FF
+0x0202=0x07FF
+0x0203=0x0000
+0x0204=0x0000
+0x0205=0x0000
+0x0206=0x0000
+0x0207=0x0000
+0x0208=0x0170
+0x0209=0x0000
+0x020A=0x0080
+0x020B=0x0000
+0x020C=0x8000
+0x0240=0x0020
+0x0241=0x0000
+0x0242=0x0000
+0x0243=0x0000
+0x0244=0x0000
+0x0245=0x0000
+0x0246=0x0000
+0x0247=0x0000
+0x0248=0x0000
+0x0249=0x0000
+0x024A=0x0000
+0x024B=0x0000
+0x024C=0x0000
+0x024D=0x0000
+0x024E=0x0000
+0x024F=0x0000
+0x0250=0x0000
+0x0251=0x0000
+0x0252=0x0000
+0x0253=0x0000
+0x0254=0x0000
+0x0255=0x0000
+0x0256=0x0000
+0x0257=0x0000
+0x0258=0x0000
+0x0259=0x0000
+0x025A=0x0000
+0x025B=0x0000
+0x025C=0x0000
+0x025D=0x0000
+0x025E=0x0000
+0x025F=0x0000
+0x0260=0x0000
+0x0261=0x0000
+0x0280=0x0000
+0x0281=0x0000
+0x0282=0x0000
+0x0283=0x0000
+0x0284=0x0000
+0x0285=0x0000
+0x0286=0x0000
+0x0287=0x0000
+0x0288=0x0000
+0x0289=0x0000
+0x028A=0x0000
+0x028B=0x0000
+0x028C=0x0000
+0x028D=0x0000
+0x028E=0x0000
+0x028F=0x0000
+0x0290=0x0000
+0x0291=0x0000
+0x0292=0x0000
+0x0293=0x0000
+0x0294=0x0000
+0x0295=0x0000
+0x0296=0x0000
+0x0297=0x0000
+0x0298=0x0000
+0x0299=0x0000
+0x029A=0x0000
+0x029B=0x0000
+0x029C=0x0000
+0x029D=0x0000
+0x029E=0x0000
+0x029F=0x0000
+0x02A0=0x0000
+0x02A1=0x0000
+0x02A2=0x0000
+0x02A3=0x0000
+0x02A4=0x0000
+0x02A5=0x0000
+0x02A6=0x0000
+0x02A7=0x0000
+0x02C0=0x0000
+0x02C1=0x0000
+0x02C2=0x0000
+0x02C3=0x0000
+0x02C4=0x0000
+0x02C5=0x0000
+0x02C6=0x0000
+0x02C7=0x0000
+0x02C8=0x0000
+0x02C9=0x0000
+0x02CA=0x0000
+0x02CB=0x0000
+0x02CC=0x0000
+0x02CD=0x0000
+0x02CE=0x0000
+0x02CF=0x0000
+0x02D0=0x0000
+0x02D1=0x0000
+0x02D2=0x0000
+0x02D3=0x0000
+0x02D4=0x0000
+0x02D5=0x0000
+0x02D6=0x0000
+0x02D7=0x0000
+0x02D8=0x0000
+0x02D9=0x0000
+0x02DA=0x0000
+0x02DB=0x0000
+0x02DC=0x0000
+0x02DD=0x0000
+0x02DE=0x0000
+0x02DF=0x0000
+0x02E0=0x0000
+0x02E1=0x0000
+0x02E2=0x0000
+0x02E3=0x0000
+0x02E4=0x0000
+0x02E5=0x0000
+0x02E6=0x0000
+0x02E7=0x0000
+0x0300=0x0000
+0x0301=0x0000
+0x0302=0x0000
+0x0303=0x0000
+0x0304=0x0000
+0x0305=0x0000
+0x0306=0x0000
+0x0307=0x0000
+0x0308=0x0000
+0x0309=0x0000
+0x030A=0x0000
+0x030B=0x0000
+0x030C=0x0000
+0x030D=0x0000
+0x030E=0x0000
+0x030F=0x0000
+0x0310=0x0000
+0x0311=0x0000
+0x0312=0x0000
+0x0313=0x0000
+0x0314=0x0000
+0x0315=0x0000
+0x0316=0x0000
+0x0317=0x0000
+0x0318=0x0000
+0x0319=0x0000
+0x031A=0x0000
+0x031B=0x0000
+0x031C=0x0000
+0x031D=0x0000
+0x031E=0x0000
+0x031F=0x0000
+0x0320=0x0000
+0x0321=0x0000
+0x0322=0x0000
+0x0323=0x0000
+0x0324=0x0000
+0x0325=0x0000
+0x0326=0x0000
+0x0327=0x0000
+0x0340=0x0000
+0x0341=0x0000
+0x0342=0x0000
+0x0343=0x0000
+0x0344=0x0000
+0x0345=0x0000
+0x0346=0x0000
+0x0347=0x0000
+0x0348=0x0000
+0x0349=0x0000
+0x034A=0x0000
+0x034B=0x0000
+0x034C=0x0000
+0x034D=0x0000
+0x034E=0x0000
+0x034F=0x0000
+0x0350=0x0000
+0x0351=0x0000
+0x0352=0x0000
+0x0353=0x0000
+0x0354=0x0000
+0x0355=0x0000
+0x0356=0x0000
+0x0357=0x0000
+0x0358=0x0000
+0x0359=0x0000
+0x035A=0x0000
+0x035B=0x0000
+0x035C=0x0000
+0x035D=0x0000
+0x035E=0x0000
+0x035F=0x0000
+0x0360=0x0000
+0x0361=0x0000
+0x0362=0x0000
+0x0363=0x0000
+0x0364=0x0000
+0x0365=0x0000
+0x0366=0x0000
+0x0367=0x0000
+0x0380=0x0000
+0x0381=0x0000
+0x0382=0x0000
+0x0383=0x0000
+0x0384=0x0000
+0x0385=0x0000
+0x0386=0x0000
+0x0387=0x0000
+0x0388=0x0000
+0x0389=0x0000
+0x038A=0x0000
+0x038B=0x0000
+0x038C=0x0000
+0x038D=0x0000
+0x038E=0x0000
+0x038F=0x0000
+0x0390=0x0000
+0x0391=0x0000
+0x0392=0x0000
+0x0393=0x0000
+0x0394=0x0000
+0x0395=0x0000
+0x0396=0x0000
+0x0397=0x0000
+0x0398=0x0000
+0x0399=0x0000
+0x039A=0x0000
+0x039B=0x0000
+0x039C=0x0000
+0x039D=0x0000
+0x039E=0x0000
+0x039F=0x0000
+0x03A0=0x0000
+0x03A1=0x0000
+0x03A2=0x0000
+0x03A3=0x0000
+0x03A4=0x0000
+0x03A5=0x0000
+0x03A6=0x0000
+0x03A7=0x0000
+0x0400=0x8081
+0x0401=0x07FF
+0x0402=0x07FF
+0x0403=0x0000
+0x0404=0x0000
+0x0405=0x0000
+0x0406=0x0000
+0x0407=0x0000
+0x0408=0x0000
+0x0409=0x0000
+0x040A=0x0003
+0x040B=0x000F
+0x040C=0x00F8
+0x040D=0x0000
+0x040E=0x0000
+0x040F=0x0000
+0x0440=0x0020
+0x0441=0x0000
+0x0442=0x2B55
+0x0443=0x5540
+0x0444=0x0000
+0x0445=0x0000
+0x0446=0x0000
+0x0447=0x0000
+0x0448=0x0000
+0x0449=0x0000
+0x044A=0x0000
+0x044B=0x0000
+0x044C=0x0000
+0x044D=0x0000
+0x044E=0x0000
+0x044F=0x0000
+0x0450=0x0000
+0x0451=0x0000
+0x0452=0x0000
+0x0453=0x0000
+0x0454=0x0000
+0x0455=0x0000
+0x0456=0x0000
+0x0457=0x0000
+0x0458=0x0000
+0x0459=0x0000
+0x045A=0x0000
+0x045B=0x0000
+0x045C=0x0000
+0x045D=0x0000
+0x045E=0x0000
+0x045F=0x0000
+0x0460=0x0000
+0x0461=0x0000
+0x0480=0x0000
+0x0481=0x0000
+0x0482=0x0000
+0x0483=0x0000
+0x0484=0x0000
+0x0485=0x0000
+0x0486=0x0000
+0x0487=0x0000
+0x0488=0x0000
+0x0489=0x0000
+0x048A=0x0000
+0x048B=0x0000
+0x048C=0x0000
+0x048D=0x0000
+0x048E=0x0000
+0x048F=0x0000
+0x0490=0x0000
+0x0491=0x0000
+0x0492=0x0000
+0x0493=0x0000
+0x0494=0x0000
+0x0495=0x0000
+0x0496=0x0000
+0x0497=0x0000
+0x0498=0x0000
+0x0499=0x0000
+0x049A=0x0000
+0x049B=0x0000
+0x049C=0x0000
+0x049D=0x0000
+0x049E=0x0000
+0x049F=0x0000
+0x04A0=0x0000
+0x04A1=0x0000
+0x04A2=0x0000
+0x04A3=0x0000
+0x04A4=0x0000
+0x04A5=0x0000
+0x04A6=0x0000
+0x04A7=0x0000
+0x04C0=0x0000
+0x04C1=0x0000
+0x04C2=0x0000
+0x04C3=0x0000
+0x04C4=0x0000
+0x04C5=0x0000
+0x04C6=0x0000
+0x04C7=0x0000
+0x04C8=0x0000
+0x04C9=0x0000
+0x04CA=0x0000
+0x04CB=0x0000
+0x04CC=0x0000
+0x04CD=0x0000
+0x04CE=0x0000
+0x04CF=0x0000
+0x04D0=0x0000
+0x04D1=0x0000
+0x04D2=0x0000
+0x04D3=0x0000
+0x04D4=0x0000
+0x04D5=0x0000
+0x04D6=0x0000
+0x04D7=0x0000
+0x04D8=0x0000
+0x04D9=0x0000
+0x04DA=0x0000
+0x04DB=0x0000
+0x04DC=0x0000
+0x04DD=0x0000
+0x04DE=0x0000
+0x04DF=0x0000
+0x04E0=0x0000
+0x04E1=0x0000
+0x04E2=0x0000
+0x04E3=0x0000
+0x04E4=0x0000
+0x04E5=0x0000
+0x04E6=0x0000
+0x04E7=0x0000
+0x0500=0x0000
+0x0501=0x0000
+0x0502=0x0000
+0x0503=0x0000
+0x0504=0x0000
+0x0505=0x0000
+0x0506=0x0000
+0x0507=0x0000
+0x0508=0x0000
+0x0509=0x0000
+0x050A=0x0000
+0x050B=0x0000
+0x050C=0x0000
+0x050D=0x0000
+0x050E=0x0000
+0x050F=0x0000
+0x0510=0x0000
+0x0511=0x0000
+0x0512=0x0000
+0x0513=0x0000
+0x0514=0x0000
+0x0515=0x0000
+0x0516=0x0000
+0x0517=0x0000
+0x0518=0x0000
+0x0519=0x0000
+0x051A=0x0000
+0x051B=0x0000
+0x051C=0x0000
+0x051D=0x0000
+0x051E=0x0000
+0x051F=0x0000
+0x0520=0x0000
+0x0521=0x0000
+0x0522=0x0000
+0x0523=0x0000
+0x0524=0x0000
+0x0525=0x0000
+0x0526=0x0000
+0x0527=0x0000
+0x0540=0x0000
+0x0541=0x0000
+0x0542=0x0000
+0x0543=0x0000
+0x0544=0x0000
+0x0545=0x0000
+0x0546=0x0000
+0x0547=0x0000
+0x0548=0x0000
+0x0549=0x0000
+0x054A=0x0000
+0x054B=0x0000
+0x054C=0x0000
+0x054D=0x0000
+0x054E=0x0000
+0x054F=0x0000
+0x0550=0x0000
+0x0551=0x0000
+0x0552=0x0000
+0x0553=0x0000
+0x0554=0x0000
+0x0555=0x0000
+0x0556=0x0000
+0x0557=0x0000
+0x0558=0x0000
+0x0559=0x0000
+0x055A=0x0000
+0x055B=0x0000
+0x055C=0x0000
+0x055D=0x0000
+0x055E=0x0000
+0x055F=0x0000
+0x0560=0x0000
+0x0561=0x0000
+0x0562=0x0000
+0x0563=0x0000
+0x0564=0x0000
+0x0565=0x0000
+0x0566=0x0000
+0x0567=0x0000
+0x0580=0x0000
+0x0581=0x0000
+0x0582=0x0000
+0x0583=0x0000
+0x0584=0x0000
+0x0585=0x0000
+0x0586=0x0000
+0x0587=0x0000
+0x0588=0x0000
+0x0589=0x0000
+0x058A=0x0000
+0x058B=0x0000
+0x058C=0x0000
+0x058D=0x0000
+0x058E=0x0000
+0x058F=0x0000
+0x0590=0x0000
+0x0591=0x0000
+0x0592=0x0000
+0x0593=0x0000
+0x0594=0x0000
+0x0595=0x0000
+0x0596=0x0000
+0x0597=0x0000
+0x0598=0x0000
+0x0599=0x0000
+0x059A=0x0000
+0x059B=0x0000
+0x059C=0x0000
+0x059D=0x0000
+0x059E=0x0000
+0x059F=0x0000
+0x05A0=0x0000
+0x05A1=0x0000
+0x05A2=0x0000
+0x05A3=0x0000
+0x05A4=0x0000
+0x05A5=0x0000
+0x05A6=0x0000
+0x05A7=0x0000
+[lms7002_registers_b]
+0x0100=0x340F
+0x0101=0x7800
+0x0102=0x3180
+0x0103=0x0612
+0x0104=0x0088
+0x0105=0x001F
+0x0106=0x3182
+0x0107=0x318C
+0x0108=0x9442
+0x0109=0x61C1
+0x010A=0x104C
+0x010C=0x88FF
+0x010D=0x001E
+0x010E=0x2040
+0x010F=0x3042
+0x0110=0x0BF4
+0x0111=0x0083
+0x0112=0x9407
+0x0113=0x03C3
+0x0114=0x00D0
+0x0115=0x000F
+0x0116=0x8180
+0x0117=0x1217
+0x0118=0x018C
+0x0119=0x5280
+0x011A=0x3E03
+0x011C=0xAD41
+0x011D=0xC000
+0x011E=0x06F3
+0x011F=0x3680
+0x0120=0xB9FF
+0x0121=0x346C
+0x0122=0x033F
+0x0123=0x267B
+0x0124=0x0000
+0x0200=0x0101
+0x0201=0x07FF
+0x0202=0x07FF
+0x0203=0x0000
+0x0204=0x0000
+0x0205=0x0000
+0x0206=0x0000
+0x0207=0x0000
+0x0208=0x01F0
+0x0209=0x0000
+0x020A=0x0080
+0x020B=0x0000
+0x020C=0x7FFF
+0x0240=0x0020
+0x0241=0x0000
+0x0242=0x0000
+0x0243=0x0000
+0x0244=0x0000
+0x0245=0x0000
+0x0246=0x0000
+0x0247=0x0000
+0x0248=0x0000
+0x0249=0x0000
+0x024A=0x0000
+0x024B=0x0000
+0x024C=0x0000
+0x024D=0x0000
+0x024E=0x0000
+0x024F=0x0000
+0x0250=0x0000
+0x0251=0x0000
+0x0252=0x0000
+0x0253=0x0000
+0x0254=0x0000
+0x0255=0x0000
+0x0256=0x0000
+0x0257=0x0000
+0x0258=0x0000
+0x0259=0x0000
+0x025A=0x0000
+0x025B=0x0000
+0x025C=0x0000
+0x025D=0x0000
+0x025E=0x0000
+0x025F=0x0000
+0x0260=0x0000
+0x0261=0x0000
+0x0280=0x0000
+0x0281=0x0000
+0x0282=0x0000
+0x0283=0x0000
+0x0284=0x0000
+0x0285=0x0000
+0x0286=0x0000
+0x0287=0x0000
+0x0288=0x0000
+0x0289=0x0000
+0x028A=0x0000
+0x028B=0x0000
+0x028C=0x0000
+0x028D=0x0000
+0x028E=0x0000
+0x028F=0x0000
+0x0290=0x0000
+0x0291=0x0000
+0x0292=0x0000
+0x0293=0x0000
+0x0294=0x0000
+0x0295=0x0000
+0x0296=0x0000
+0x0297=0x0000
+0x0298=0x0000
+0x0299=0x0000
+0x029A=0x0000
+0x029B=0x0000
+0x029C=0x0000
+0x029D=0x0000
+0x029E=0x0000
+0x029F=0x0000
+0x02A0=0x0000
+0x02A1=0x0000
+0x02A2=0x0000
+0x02A3=0x0000
+0x02A4=0x0000
+0x02A5=0x0000
+0x02A6=0x0000
+0x02A7=0x0000
+0x02C0=0x0000
+0x02C1=0x0000
+0x02C2=0x0000
+0x02C3=0x0000
+0x02C4=0x0000
+0x02C5=0x0000
+0x02C6=0x0000
+0x02C7=0x0000
+0x02C8=0x0000
+0x02C9=0x0000
+0x02CA=0x0000
+0x02CB=0x0000
+0x02CC=0x0000
+0x02CD=0x0000
+0x02CE=0x0000
+0x02CF=0x0000
+0x02D0=0x0000
+0x02D1=0x0000
+0x02D2=0x0000
+0x02D3=0x0000
+0x02D4=0x0000
+0x02D5=0x0000
+0x02D6=0x0000
+0x02D7=0x0000
+0x02D8=0x0000
+0x02D9=0x0000
+0x02DA=0x0000
+0x02DB=0x0000
+0x02DC=0x0000
+0x02DD=0x0000
+0x02DE=0x0000
+0x02DF=0x0000
+0x02E0=0x0000
+0x02E1=0x0000
+0x02E2=0x0000
+0x02E3=0x0000
+0x02E4=0x0000
+0x02E5=0x0000
+0x02E6=0x0000
+0x02E7=0x0000
+0x0300=0x0000
+0x0301=0x0000
+0x0302=0x0000
+0x0303=0x0000
+0x0304=0x0000
+0x0305=0x0000
+0x0306=0x0000
+0x0307=0x0000
+0x0308=0x0000
+0x0309=0x0000
+0x030A=0x0000
+0x030B=0x0000
+0x030C=0x0000
+0x030D=0x0000
+0x030E=0x0000
+0x030F=0x0000
+0x0310=0x0000
+0x0311=0x0000
+0x0312=0x0000
+0x0313=0x0000
+0x0314=0x0000
+0x0315=0x0000
+0x0316=0x0000
+0x0317=0x0000
+0x0318=0x0000
+0x0319=0x0000
+0x031A=0x0000
+0x031B=0x0000
+0x031C=0x0000
+0x031D=0x0000
+0x031E=0x0000
+0x031F=0x0000
+0x0320=0x0000
+0x0321=0x0000
+0x0322=0x0000
+0x0323=0x0000
+0x0324=0x0000
+0x0325=0x0000
+0x0326=0x0000
+0x0327=0x0000
+0x0340=0x0000
+0x0341=0x0000
+0x0342=0x0000
+0x0343=0x0000
+0x0344=0x0000
+0x0345=0x0000
+0x0346=0x0000
+0x0347=0x0000
+0x0348=0x0000
+0x0349=0x0000
+0x034A=0x0000
+0x034B=0x0000
+0x034C=0x0000
+0x034D=0x0000
+0x034E=0x0000
+0x034F=0x0000
+0x0350=0x0000
+0x0351=0x0000
+0x0352=0x0000
+0x0353=0x0000
+0x0354=0x0000
+0x0355=0x0000
+0x0356=0x0000
+0x0357=0x0000
+0x0358=0x0000
+0x0359=0x0000
+0x035A=0x0000
+0x035B=0x0000
+0x035C=0x0000
+0x035D=0x0000
+0x035E=0x0000
+0x035F=0x0000
+0x0360=0x0000
+0x0361=0x0000
+0x0362=0x0000
+0x0363=0x0000
+0x0364=0x0000
+0x0365=0x0000
+0x0366=0x0000
+0x0367=0x0000
+0x0380=0x0000
+0x0381=0x0000
+0x0382=0x0000
+0x0383=0x0000
+0x0384=0x0000
+0x0385=0x0000
+0x0386=0x0000
+0x0387=0x0000
+0x0388=0x0000
+0x0389=0x0000
+0x038A=0x0000
+0x038B=0x0000
+0x038C=0x0000
+0x038D=0x0000
+0x038E=0x0000
+0x038F=0x0000
+0x0390=0x0000
+0x0391=0x0000
+0x0392=0x0000
+0x0393=0x0000
+0x0394=0x0000
+0x0395=0x0000
+0x0396=0x0000
+0x0397=0x0000
+0x0398=0x0000
+0x0399=0x0000
+0x039A=0x0000
+0x039B=0x0000
+0x039C=0x0000
+0x039D=0x0000
+0x039E=0x0000
+0x039F=0x0000
+0x03A0=0x0000
+0x03A1=0x0000
+0x03A2=0x0000
+0x03A3=0x0000
+0x03A4=0x0000
+0x03A5=0x0000
+0x03A6=0x0000
+0x03A7=0x0000
+0x0400=0x0105
+0x0401=0x07FF
+0x0402=0x07FF
+0x0403=0x0000
+0x0404=0x0000
+0x0405=0x0000
+0x0406=0x0000
+0x0407=0x0000
+0x0408=0x0000
+0x0409=0x0000
+0x040A=0x0000
+0x040B=0x7FFF
+0x040C=0x00FF
+0x040D=0x0000
+0x040E=0x0002
+0x040F=0x0000
+0x0440=0x0020
+0x0441=0x0000
+0x0442=0x0000
+0x0443=0x0000
+0x0444=0x0000
+0x0445=0x0000
+0x0446=0x0000
+0x0447=0x0000
+0x0448=0x0000
+0x0449=0x0000
+0x044A=0x0000
+0x044B=0x0000
+0x044C=0x0000
+0x044D=0x0000
+0x044E=0x0000
+0x044F=0x0000
+0x0450=0x0000
+0x0451=0x0000
+0x0452=0x0000
+0x0453=0x0000
+0x0454=0x0000
+0x0455=0x0000
+0x0456=0x0000
+0x0457=0x0000
+0x0458=0x0000
+0x0459=0x0000
+0x045A=0x0000
+0x045B=0x0000
+0x045C=0x0000
+0x045D=0x0000
+0x045E=0x0000
+0x045F=0x0000
+0x0460=0x0000
+0x0461=0x0000
+0x0480=0x0000
+0x0481=0x0000
+0x0482=0x0000
+0x0483=0x0000
+0x0484=0x0000
+0x0485=0x0000
+0x0486=0x0000
+0x0487=0x0000
+0x0488=0x0000
+0x0489=0x0000
+0x048A=0x0000
+0x048B=0x0000
+0x048C=0x0000
+0x048D=0x0000
+0x048E=0x0000
+0x048F=0x0000
+0x0490=0x0000
+0x0491=0x0000
+0x0492=0x0000
+0x0493=0x0000
+0x0494=0x0000
+0x0495=0x0000
+0x0496=0x0000
+0x0497=0x0000
+0x0498=0x0000
+0x0499=0x0000
+0x049A=0x0000
+0x049B=0x0000
+0x049C=0x0000
+0x049D=0x0000
+0x049E=0x0000
+0x049F=0x0000
+0x04A0=0x0000
+0x04A1=0x0000
+0x04A2=0x0000
+0x04A3=0x0000
+0x04A4=0x0000
+0x04A5=0x0000
+0x04A6=0x0000
+0x04A7=0x0000
+0x04C0=0x0000
+0x04C1=0x0000
+0x04C2=0x0000
+0x04C3=0x0000
+0x04C4=0x0000
+0x04C5=0x0000
+0x04C6=0x0000
+0x04C7=0x0000
+0x04C8=0x0000
+0x04C9=0x0000
+0x04CA=0x0000
+0x04CB=0x0000
+0x04CC=0x0000
+0x04CD=0x0000
+0x04CE=0x0000
+0x04CF=0x0000
+0x04D0=0x0000
+0x04D1=0x0000
+0x04D2=0x0000
+0x04D3=0x0000
+0x04D4=0x0000
+0x04D5=0x0000
+0x04D6=0x0000
+0x04D7=0x0000
+0x04D8=0x0000
+0x04D9=0x0000
+0x04DA=0x0000
+0x04DB=0x0000
+0x04DC=0x0000
+0x04DD=0x0000
+0x04DE=0x0000
+0x04DF=0x0000
+0x04E0=0x0000
+0x04E1=0x0000
+0x04E2=0x0000
+0x04E3=0x0000
+0x04E4=0x0000
+0x04E5=0x0000
+0x04E6=0x0000
+0x04E7=0x0000
+0x0500=0x0000
+0x0501=0x0000
+0x0502=0x0000
+0x0503=0x0000
+0x0504=0x0000
+0x0505=0x0000
+0x0506=0x0000
+0x0507=0x0000
+0x0508=0x0000
+0x0509=0x0000
+0x050A=0x0000
+0x050B=0x0000
+0x050C=0x0000
+0x050D=0x0000
+0x050E=0x0000
+0x050F=0x0000
+0x0510=0x0000
+0x0511=0x0000
+0x0512=0x0000
+0x0513=0x0000
+0x0514=0x0000
+0x0515=0x0000
+0x0516=0x0000
+0x0517=0x0000
+0x0518=0x0000
+0x0519=0x0000
+0x051A=0x0000
+0x051B=0x0000
+0x051C=0x0000
+0x051D=0x0000
+0x051E=0x0000
+0x051F=0x0000
+0x0520=0x0000
+0x0521=0x0000
+0x0522=0x0000
+0x0523=0x0000
+0x0524=0x0000
+0x0525=0x0000
+0x0526=0x0000
+0x0527=0x0000
+0x0540=0x0000
+0x0541=0x0000
+0x0542=0x0000
+0x0543=0x0000
+0x0544=0x0000
+0x0545=0x0000
+0x0546=0x0000
+0x0547=0x0000
+0x0548=0x0000
+0x0549=0x0000
+0x054A=0x0000
+0x054B=0x0000
+0x054C=0x0000
+0x054D=0x0000
+0x054E=0x0000
+0x054F=0x0000
+0x0550=0x0000
+0x0551=0x0000
+0x0552=0x0000
+0x0553=0x0000
+0x0554=0x0000
+0x0555=0x0000
+0x0556=0x0000
+0x0557=0x0000
+0x0558=0x0000
+0x0559=0x0000
+0x055A=0x0000
+0x055B=0x0000
+0x055C=0x0000
+0x055D=0x0000
+0x055E=0x0000
+0x055F=0x0000
+0x0560=0x0000
+0x0561=0x0000
+0x0562=0x0000
+0x0563=0x0000
+0x0564=0x0000
+0x0565=0x0000
+0x0566=0x0000
+0x0567=0x0000
+0x0580=0x0000
+0x0581=0x0000
+0x0582=0x0000
+0x0583=0x0000
+0x0584=0x0000
+0x0585=0x0000
+0x0586=0x0000
+0x0587=0x0000
+0x0588=0x0000
+0x0589=0x0000
+0x058A=0x0000
+0x058B=0x0000
+0x058C=0x0000
+0x058D=0x0000
+0x058E=0x0000
+0x058F=0x0000
+0x0590=0x0000
+0x0591=0x0000
+0x0592=0x0000
+0x0593=0x0000
+0x0594=0x0000
+0x0595=0x0000
+0x0596=0x0000
+0x0597=0x0000
+0x0598=0x0000
+0x0599=0x0000
+0x059A=0x0000
+0x059B=0x0000
+0x059C=0x0000
+0x059D=0x0000
+0x059E=0x0000
+0x059F=0x0000
+0x05A0=0x0000
+0x05A1=0x0000
+0x05A2=0x0000
+0x05A3=0x0000
+0x05A4=0x0000
+0x05A5=0x0000
+0x05A6=0x0000
+0x05A7=0x0000
+[reference_clocks]
+sxt_ref_clk_mhz=30.72
+sxr_ref_clk_mhz=30.72
diff --git a/targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp
index 3a9878e82b182c670602344442321b6ffdb52804..f2d2af55c7ee35697f193ba75667b1cac70f80d8 100644
--- a/targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp
+++ b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp
@@ -128,30 +128,20 @@ void set_rx_gain_offset(openair0_config_t *openair0_cfg, int chain_index) {
 /*! \brief Set Gains (TX/RX) on LMSSDR
  * \param device the hardware to use
  * \param openair0_cfg openair0 Config structure
- * \returns 0 in success
+ * \returns 0 in success, -1 on error
  */
 int trx_lms_set_gains(openair0_device* device, openair0_config_t *openair0_cfg) {
+  int ret = 0;
 
-  LMS_SetNormalizedGain(lms_device, LMS_CH_TX, 0, openair0_cfg[0].tx_gain[0]/100.0);
-
-  // RX gains, use low-level setting
-
-  double gv = openair0_cfg[0].rx_gain[0] - openair0_cfg[0].rx_gain_offset[0];   
-  if (gv > 31) {     
-    printf("RX Gain 0 too high, reduce by %f dB\n",gv-31);     
-    gv = 31;   
-  }   
-  if (gv < 0) {     
-    printf("RX Gain 0 too low, increase by %f dB\n",-gv);     
-    gv = 0;   
-  }   
-  printf("[LMS] Setting 7002M G_PGA_RBB to %d\n", (int16_t)gv);   
-  LMS7002M lms7;
-  lms7.SetConnection(lms7.GetConnection());
-  lms7.Modify_SPI_Reg_bits(LMS7param(G_PGA_RBB),(int16_t)gv);
-
+  if (openair0_cfg->rx_gain[0] > 70+openair0_cfg->rx_gain_offset[0]) {
+    printf("[LMS] Reduce RX Gain 0 by %f dB\n",openair0_cfg->rx_gain[0]-openair0_cfg->rx_gain_offset[0]-70);
+    ret = -1;
+  }
+  
+  LMS_SetGaindB(lms_device, LMS_CH_TX, 0, openair0_cfg->tx_gain[0]);
+  LMS_SetGaindB(lms_device, LMS_CH_RX, 0, openair0_cfg->rx_gain[0]-openair0_cfg->rx_gain_offset[0]); 
 
-  return(0);
+  return(ret);
 }
 
 /*! \brief Start LMSSDR
@@ -212,10 +202,11 @@ int trx_lms_start(openair0_device *device){
     }
     printf("Set TX frequency %f MHz\n",device->openair0_cfg[0].tx_freq[0]/1e6);
 
+    /*
     printf("Override antenna settings to: RX1_H, TXA_2");
     LMS_SetAntenna(lms_device, LMS_CH_RX, 0, 1);
     LMS_SetAntenna(lms_device, LMS_CH_TX, 0, 2);
-
+    */
 
     
     for (int i = 0; i< device->openair0_cfg->rx_num_channels; i++)
@@ -292,12 +283,21 @@ int trx_lms_set_freq(openair0_device* device, openair0_config_t *openair0_cfg,in
 
 // 31 = 19 dB => 105 dB total gain @ 2.6 GHz
 /*! \brief calibration table for LMSSDR */
+// V1.2 board
+rx_gain_calib_table_t calib_table_lmssdr_1v2[] = {
+  {3500000000.0,44.0},  // on L PAD
+  {2660000000.0,55.0},  // on L PAD
+  {2300000000.0,54.0},  // on L PAD
+  {1880000000.0,54.0},  // on L PAD
+  {816000000.0,79.0},   // on W PAD
+  {-1,0}};
+// V1.4 board
 rx_gain_calib_table_t calib_table_lmssdr[] = {
-  {3500000000.0,70.0},
-  {2660000000.0,80.0},
-  {2300000000.0,80.0},
-  {1880000000.0,74.0},  // on W PAD
-  {816000000.0,76.0},   // on W PAD
+  {3500000000.0,44.0},  // on H PAD
+  {2660000000.0,55.0},  // on H PAD
+  {2300000000.0,54.0},  // on H PAD
+  {1880000000.0,54.0},  // on H PAD
+  {816000000.0,79.0},   // on L PAD
   {-1,0}};
 
 
@@ -344,7 +344,7 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg){
 
   device->type=LMSSDR_DEV;
   printf("LMSSDR: Initializing openair0_device for %s ...\n", ((device->host_type == BBU_HOST) ? "BBU": "RRH"));
-
+  openair0_cfg[0].iq_txshift = 0;
   switch ((int)openair0_cfg[0].sample_rate) {
   case 30720000:
     // from usrp_time_offset
@@ -355,9 +355,9 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg){
     break;
   case 15360000:
     openair0_cfg[0].samples_per_packet    = 2048;
-    openair0_cfg[0].tx_sample_advance     = 70;
-    openair0_cfg[0].tx_bw                 = 10e6;
-    openair0_cfg[0].rx_bw                 = 10e6;
+    openair0_cfg[0].tx_sample_advance     = 450;
+    openair0_cfg[0].tx_bw                 = 15.36e6;
+    openair0_cfg[0].rx_bw                 = 15.36e6;
     break;
   case 7680000:
     openair0_cfg[0].samples_per_packet    = 1024;
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.lmssdr.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.25PRB.lmssdr.conf
similarity index 95%
rename from targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.lmssdr.conf
rename to targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.25PRB.lmssdr.conf
index 266e5aae25bb3281f27ef9d074d7ede2a31bc98a..3315b953da2c065cb043b78a7fc63801c94eca15 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.lmssdr.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.25PRB.lmssdr.conf
@@ -35,8 +35,8 @@ eNBs =
       Nid_cell_mbsfn          			      = 0;
       nb_antennas_tx          			      = 1;
       nb_antennas_rx          			      = 1;
-      tx_gain                                            = 90;
-      rx_gain                                            = 107;
+      tx_gain                                            = 70;
+      rx_gain                                            = 116;
       prach_root              			      = 0;
       prach_config_index      			      = 0;
       prach_high_speed        			      = "DISABLE";
@@ -46,7 +46,7 @@ eNBs =
       pucch_nRB_CQI           			      = 1;
       pucch_nCS_AN            			      = 0;
       pucch_n1_AN             			      = 32;
-      pdsch_referenceSignalPower 			      = -17;
+      pdsch_referenceSignalPower 			      = -30;
       pdsch_p_b                  			      = 0;
       pusch_n_SB                 			      = 1;
       pusch_enable64QAM          			      = "DISABLE";
@@ -64,9 +64,9 @@ eNBs =
       srs_ackNackST                                      =;
       srs_MaxUpPts                                       =;*/
 
-      pusch_p0_Nominal                                   = -90;
+      pusch_p0_Nominal                                   = -96;
       pusch_alpha                                        = "AL1";
-      pucch_p0_Nominal                                   = -96;
+      pucch_p0_Nominal                                   = -104;
       msg3_delta_Preamble                                = 6;
       pucch_deltaF_Format1                               = "deltaF2";
       pucch_deltaF_Format1b                              = "deltaF3";
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.50PRB.lmssdr.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.50PRB.lmssdr.conf
index b81ac861f616f8c844300f40cd15321226b815a5..1083aa382a47d2428945792ebc5d19be973a827b 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.50PRB.lmssdr.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band13.tm1.50PRB.lmssdr.conf
@@ -23,85 +23,89 @@ eNBs =
 
     component_carriers = (
       {
-      frame_type					      = "FDD";
-      tdd_config 					      = 3;
-      tdd_config_s            			      = 0;
-      prefix_type             			      = "NORMAL";
-      eutra_band              			      = 13;
-      downlink_frequency      			      = 751000000L;
-      uplink_frequency_offset 			      = 31000000;
-      Nid_cell					      = 0;
-      N_RB_DL                 			      = 50;
-      Nid_cell_mbsfn          			      = 0;
-      nb_antennas_tx          			      = 1;
-      nb_antennas_rx          			      = 1;
-      tx_gain                                            = 90;
-      rx_gain                                            = 125;
-      prach_root              			      = 0;
-      prach_config_index      			      = 0;
-      prach_high_speed        			      = "DISABLE";
-      prach_zero_correlation  			      = 1;
-      prach_freq_offset       			      = 2;
-      pucch_delta_shift       			      = 1;
-      pucch_nRB_CQI           			      = 1;
-      pucch_nCS_AN            			      = 0;
-      pucch_n1_AN             			      = 32;
-      pdsch_referenceSignalPower 			      = -20;
-      pdsch_p_b                  			      = 0;
-      pusch_n_SB                 			      = 1;
-      pusch_enable64QAM          			      = "DISABLE";
-      pusch_hoppingMode                                  = "interSubFrame";
-      pusch_hoppingOffset                                = 0;
-      pusch_groupHoppingEnabled  			      = "ENABLE";
-      pusch_groupAssignment      			      = 0;
-      pusch_sequenceHoppingEnabled		   	      = "DISABLE";
-      pusch_nDMRS1                                       = 1;
-      phich_duration                                     = "NORMAL";
-      phich_resource                                     = "ONESIXTH";
-      srs_enable                                         = "DISABLE";
-      /*  srs_BandwidthConfig                                =;
-      srs_SubframeConfig                                 =;
-      srs_ackNackST                                      =;
-      srs_MaxUpPts                                       =;*/
-
-      pusch_p0_Nominal                                   = -90;
-      pusch_alpha                                        = "AL1";
-      pucch_p0_Nominal                                   = -96;
-      msg3_delta_Preamble                                = 6;
-      pucch_deltaF_Format1                               = "deltaF2";
-      pucch_deltaF_Format1b                              = "deltaF3";
-      pucch_deltaF_Format2                               = "deltaF0";
-      pucch_deltaF_Format2a                              = "deltaF0";
-      pucch_deltaF_Format2b		    	      = "deltaF0";
-
-      rach_numberOfRA_Preambles                          = 64;
-      rach_preamblesGroupAConfig                         = "DISABLE";
-      /*
-      rach_sizeOfRA_PreamblesGroupA                      = ;
-      rach_messageSizeGroupA                             = ;
-      rach_messagePowerOffsetGroupB                      = ;
-      */
-      rach_powerRampingStep                              = 4;
-      rach_preambleInitialReceivedTargetPower            = -108;
-      rach_preambleTransMax                              = 10;
-      rach_raResponseWindowSize                          = 10;
-      rach_macContentionResolutionTimer                  = 48;
-      rach_maxHARQ_Msg3Tx                                = 4;
-
-      pcch_default_PagingCycle                           = 128;
-      pcch_nB                                            = "oneT";
-      bcch_modificationPeriodCoeff			      = 2;
-      ue_TimersAndConstants_t300			      = 1000;
-      ue_TimersAndConstants_t301			      = 1000;
-      ue_TimersAndConstants_t310			      = 1000;
-      ue_TimersAndConstants_t311			      = 10000;
-      ue_TimersAndConstants_n310			      = 20;
-      ue_TimersAndConstants_n311			      = 1;
-
+        node_function                                         = "eNodeB_3GPP";
+	node_timing                                           = "synch_to_ext_device";
+	node_synch_ref                                        = 0;
+        frame_type					      = "FDD";
+        tdd_config 					      = 3;
+        tdd_config_s            			      = 0;
+        prefix_type             			      = "NORMAL";
+        eutra_band              			      = 13;
+        downlink_frequency      			      = 751000000L;
+        uplink_frequency_offset 			      = 31000000;
+        Nid_cell					      = 0;
+        N_RB_DL                 			      = 50;
+        Nid_cell_mbsfn          			      = 0;
+        nb_antenna_ports				      = 1;
+        nb_antennas_tx          			      = 1;
+        nb_antennas_rx          			      = 1;
+        tx_gain                                            = 20;
+        rx_gain                                            = 100;
+        prach_root              			      = 0;
+        prach_config_index      			      = 0;
+        prach_high_speed        			      = "DISABLE";
+        prach_zero_correlation  			      = 1;
+        prach_freq_offset       			      = 2;
+        pucch_delta_shift       			      = 1;
+        pucch_nRB_CQI           			      = 1;
+        pucch_nCS_AN            			      = 0;
+        pucch_n1_AN             			      = 32;
+        pdsch_referenceSignalPower 			      = -30;
+        pdsch_p_b                  			      = 0;
+        pusch_n_SB                 			      = 1;
+        pusch_enable64QAM          			      = "DISABLE";
+        pusch_hoppingMode                                  = "interSubFrame";
+        pusch_hoppingOffset                                = 0;
+        pusch_groupHoppingEnabled  			      = "ENABLE";
+        pusch_groupAssignment      			      = 0;
+        pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+        pusch_nDMRS1                                       = 1;
+        phich_duration                                     = "NORMAL";
+        phich_resource                                     = "ONESIXTH";
+        srs_enable                                         = "DISABLE";
+        /*  srs_BandwidthConfig                                =;
+        srs_SubframeConfig                                 =;
+        srs_ackNackST                                      =;
+        srs_MaxUpPts                                       =;*/
+
+        pusch_p0_Nominal                                   = -96;
+        pusch_alpha                                        = "AL1";
+        pucch_p0_Nominal                                   = -104;
+        msg3_delta_Preamble                                = 6;
+        pucch_deltaF_Format1                               = "deltaF2";
+        pucch_deltaF_Format1b                              = "deltaF3";
+        pucch_deltaF_Format2                               = "deltaF0";
+        pucch_deltaF_Format2a                              = "deltaF0";
+        pucch_deltaF_Format2b		    	      = "deltaF0";
+
+        rach_numberOfRA_Preambles                          = 64;
+        rach_preamblesGroupAConfig                         = "DISABLE";
+        /*
+        rach_sizeOfRA_PreamblesGroupA                      = ;
+        rach_messageSizeGroupA                             = ;
+        rach_messagePowerOffsetGroupB                      = ;
+        */
+        rach_powerRampingStep                              = 4;
+        rach_preambleInitialReceivedTargetPower            = -104;
+        rach_preambleTransMax                              = 10;
+        rach_raResponseWindowSize                          = 10;
+        rach_macContentionResolutionTimer                  = 48;
+        rach_maxHARQ_Msg3Tx                                = 4;
+
+        pcch_default_PagingCycle                           = 128;
+        pcch_nB                                            = "oneT";
+        bcch_modificationPeriodCoeff			      = 2;
+        ue_TimersAndConstants_t300			      = 1000;
+        ue_TimersAndConstants_t301			      = 1000;
+        ue_TimersAndConstants_t310			      = 1000;
+        ue_TimersAndConstants_t311			      = 10000;
+        ue_TimersAndConstants_n310			      = 20;
+        ue_TimersAndConstants_n311			      = 1;
+
+	ue_TransmissionMode	   			      = 1;
       }
     );
 
-
     srb1_parameters :
     {
         # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
@@ -131,7 +135,6 @@ eNBs =
         SCTP_OUTSTREAMS = 2;
     };
 
-
     ////////// MME parameters:
     mme_ip_address      = ( { ipv4       = "127.0.0.3";
                               ipv6       = "192:168:30::17";
@@ -146,7 +149,7 @@ eNBs =
         ENB_IPV4_ADDRESS_FOR_S1_MME              = "127.0.0.2/24";
 
         ENB_INTERFACE_NAME_FOR_S1U               = "lo";
-        ENB_IPV4_ADDRESS_FOR_S1U                 = "127.0.0.4/24";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "127.0.0.5/24";
         ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
     };
 
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpb210.conf
new file mode 100644
index 0000000000000000000000000000000000000000..024be3b77535bde64d8c6d346509cf8e6948de6b
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpb210.conf
@@ -0,0 +1,175 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+        node_function                                         = "eNodeB_3GPP";
+	node_timing                                           = "synch_to_ext_device";
+	node_synch_ref                                        = 0;
+        frame_type					      = "TDD";
+        tdd_config 					      = 3;
+        tdd_config_s            			      = 0;
+        prefix_type             			      = "NORMAL";
+        eutra_band              			      = 38;
+        downlink_frequency      			      = 2580000000L;
+        uplink_frequency_offset 			      = 0;
+        Nid_cell					      = 0;
+        N_RB_DL                 			      = 25;
+        Nid_cell_mbsfn          			      = 0;
+        nb_antenna_ports          			      = 1;
+        nb_antennas_tx          			      = 1;
+        nb_antennas_rx          			      = 1;
+        tx_gain                                            = 90;
+        rx_gain                                            = 125;
+        prach_root              			      = 0;
+        prach_config_index      			      = 0;
+        prach_high_speed        			      = "DISABLE";
+        prach_zero_correlation  			      = 1;
+        prach_freq_offset       			      = 2;
+        pucch_delta_shift       			      = 1;
+        pucch_nRB_CQI           			      = 1;
+        pucch_nCS_AN            			      = 0;
+        pucch_n1_AN             			      = 32;
+        pdsch_referenceSignalPower 			      = -24;
+        pdsch_p_b                  			      = 0;
+        pusch_n_SB                 			      = 1;
+        pusch_enable64QAM          			      = "DISABLE";
+        pusch_hoppingMode                                  = "interSubFrame";
+        pusch_hoppingOffset                                = 0;
+        pusch_groupHoppingEnabled  			      = "ENABLE";
+        pusch_groupAssignment      			      = 0;
+        pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+        pusch_nDMRS1                                       = 1;
+        phich_duration                                     = "NORMAL";
+        phich_resource                                     = "ONESIXTH";
+        srs_enable                                         = "DISABLE";
+        /*  srs_BandwidthConfig                                =;
+        srs_SubframeConfig                                 =;
+        srs_ackNackST                                      =;
+        srs_MaxUpPts                                       =;*/
+
+        pusch_p0_Nominal                                   = -90;
+        pusch_alpha                                        = "AL1";
+        pucch_p0_Nominal                                   = -96;
+        msg3_delta_Preamble                                = 6;
+        pucch_deltaF_Format1                               = "deltaF2";
+        pucch_deltaF_Format1b                              = "deltaF3";
+        pucch_deltaF_Format2                               = "deltaF0";
+        pucch_deltaF_Format2a                              = "deltaF0";
+        pucch_deltaF_Format2b		    	      = "deltaF0";
+
+        rach_numberOfRA_Preambles                          = 64;
+        rach_preamblesGroupAConfig                         = "DISABLE";
+        /*
+        rach_sizeOfRA_PreamblesGroupA                      = ;
+        rach_messageSizeGroupA                             = ;
+        rach_messagePowerOffsetGroupB                      = ;
+        */
+        rach_powerRampingStep                              = 4;
+        rach_preambleInitialReceivedTargetPower            = -104;
+        rach_preambleTransMax                              = 10;
+        rach_raResponseWindowSize                          = 10;
+        rach_macContentionResolutionTimer                  = 48;
+        rach_maxHARQ_Msg3Tx                                = 4;
+
+        pcch_default_PagingCycle                           = 128;
+        pcch_nB                                            = "oneT";
+        bcch_modificationPeriodCoeff			      = 2;
+        ue_TimersAndConstants_t300			      = 1000;
+        ue_TimersAndConstants_t301			      = 1000;
+        ue_TimersAndConstants_t310			      = 1000;
+        ue_TimersAndConstants_t311			      = 10000;
+        ue_TimersAndConstants_n310			      = 20;
+        ue_TimersAndConstants_n311			      = 1;
+
+	ue_TransmissionMode				      = 1;
+      }
+    );
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+    ////////// MME parameters:
+
+    mme_ip_address      = ( { ipv4       = "192.168.12.26";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth6";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.82/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth6";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.82/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+    log_config :
+    {
+      global_log_level                      ="info";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+  }
+);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.lmssdr.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.lmssdr.conf
new file mode 100644
index 0000000000000000000000000000000000000000..00f875ec4e2a27e50e7c9625a39c34d57a8d8ff1
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.lmssdr.conf
@@ -0,0 +1,174 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+
+    mobile_network_code =  "93";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+        node_function                                         = "eNodeB_3GPP";
+	node_timing                                           = "synch_to_ext_device";
+	node_synch_ref                                        = 0;
+        frame_type					      = "FDD";
+        tdd_config 					      = 3;
+        tdd_config_s            			      = 0;
+        prefix_type             			      = "NORMAL";
+        eutra_band              			      = 7;
+        downlink_frequency      			      = 2680000000L;
+        uplink_frequency_offset 			      = -120000000;
+        Nid_cell					      = 0;
+        N_RB_DL                 			      = 25;
+        Nid_cell_mbsfn          			      = 0;
+        nb_antenna_ports				      = 1;
+        nb_antennas_tx          			      = 1;
+        nb_antennas_rx          			      = 1;
+        tx_gain                                            = 7;
+        rx_gain                                            = 116;
+        prach_root              			      = 0;
+        prach_config_index      			      = 0;
+        prach_high_speed        			      = "DISABLE";
+        prach_zero_correlation  			      = 1;
+        prach_freq_offset       			      = 2;
+        pucch_delta_shift       			      = 1;
+        pucch_nRB_CQI           			      = 1;
+        pucch_nCS_AN            			      = 0;
+        pucch_n1_AN             			      = 32;
+        pdsch_referenceSignalPower 			      = -34;
+        pdsch_p_b                  			      = 0;
+        pusch_n_SB                 			      = 1;
+        pusch_enable64QAM          			      = "DISABLE";
+        pusch_hoppingMode                                  = "interSubFrame";
+        pusch_hoppingOffset                                = 0;
+        pusch_groupHoppingEnabled  			      = "ENABLE";
+        pusch_groupAssignment      			      = 0;
+        pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+        pusch_nDMRS1                                       = 1;
+        phich_duration                                     = "NORMAL";
+        phich_resource                                     = "ONESIXTH";
+        srs_enable                                         = "DISABLE";
+        /*  srs_BandwidthConfig                                =;
+        srs_SubframeConfig                                 =;
+        srs_ackNackST                                      =;
+        srs_MaxUpPts                                       =;*/
+
+        pusch_p0_Nominal                                   = -96;
+        pusch_alpha                                        = "AL1";
+        pucch_p0_Nominal                                   = -104;
+        msg3_delta_Preamble                                = 6;
+        pucch_deltaF_Format1                               = "deltaF2";
+        pucch_deltaF_Format1b                              = "deltaF3";
+        pucch_deltaF_Format2                               = "deltaF0";
+        pucch_deltaF_Format2a                              = "deltaF0";
+        pucch_deltaF_Format2b		    	      = "deltaF0";
+
+        rach_numberOfRA_Preambles                          = 64;
+        rach_preamblesGroupAConfig                         = "DISABLE";
+        /*
+        rach_sizeOfRA_PreamblesGroupA                      = ;
+        rach_messageSizeGroupA                             = ;
+        rach_messagePowerOffsetGroupB                      = ;
+        */
+        rach_powerRampingStep                              = 4;
+        rach_preambleInitialReceivedTargetPower            = -104;
+        rach_preambleTransMax                              = 10;
+        rach_raResponseWindowSize                          = 10;
+        rach_macContentionResolutionTimer                  = 48;
+        rach_maxHARQ_Msg3Tx                                = 4;
+
+        pcch_default_PagingCycle                           = 128;
+        pcch_nB                                            = "oneT";
+        bcch_modificationPeriodCoeff			      = 2;
+        ue_TimersAndConstants_t300			      = 1000;
+        ue_TimersAndConstants_t301			      = 1000;
+        ue_TimersAndConstants_t310			      = 1000;
+        ue_TimersAndConstants_t311			      = 10000;
+        ue_TimersAndConstants_n310			      = 20;
+        ue_TimersAndConstants_n311			      = 1;
+
+	ue_TransmissionMode	   			      = 1;
+      }
+    );
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+    ////////// MME parameters:
+    mme_ip_address      = ( { ipv4       = "192.168.12.148";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.150/24";
+
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.150/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+    log_config :
+    {
+      global_log_level                      ="info";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+  }
+);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.lmssdr.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.lmssdr.conf
index e12acef70340404256fb63ee2538fc7a1f97b130..2d0e0f3702d8a7c43a40392aa068220234419b8f 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.lmssdr.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.lmssdr.conf
@@ -39,8 +39,8 @@ eNBs =
         nb_antenna_ports				      = 1;
         nb_antennas_tx          			      = 1;
         nb_antennas_rx          			      = 1;
-        tx_gain                                            = 100;
-        rx_gain                                            = 111;
+        tx_gain                                            = 20;
+        rx_gain                                            = 116;
         prach_root              			      = 0;
         prach_config_index      			      = 0;
         prach_high_speed        			      = "DISABLE";
@@ -50,7 +50,7 @@ eNBs =
         pucch_nRB_CQI           			      = 1;
         pucch_nCS_AN            			      = 0;
         pucch_n1_AN             			      = 32;
-        pdsch_referenceSignalPower 			      = -30;
+        pdsch_referenceSignalPower 			      = -35;
         pdsch_p_b                  			      = 0;
         pusch_n_SB                 			      = 1;
         pusch_enable64QAM          			      = "DISABLE";
@@ -136,7 +136,7 @@ eNBs =
     };
 
     ////////// MME parameters:
-    mme_ip_address      = ( { ipv4       = "127.0.0.3";
+    mme_ip_address      = ( { ipv4       = "192.168.12.148";
                               ipv6       = "192:168:30::17";
                               active     = "yes";
                               preference = "ipv4";
@@ -145,11 +145,11 @@ eNBs =
 
     NETWORK_INTERFACES :
     {
-        ENB_INTERFACE_NAME_FOR_S1_MME            = "lo";
-        ENB_IPV4_ADDRESS_FOR_S1_MME              = "127.0.0.2/24";
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.150/24";
 
-        ENB_INTERFACE_NAME_FOR_S1U               = "lo";
-        ENB_IPV4_ADDRESS_FOR_S1U                 = "127.0.0.5/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.150/24";
         ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
     };
 
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.rrh.lmssdr.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.rrh.lmssdr.conf
deleted file mode 100644
index 4cd761645b3e339c9b4cff404e974352a5f1f832..0000000000000000000000000000000000000000
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.rrh.lmssdr.conf
+++ /dev/null
@@ -1,192 +0,0 @@
-Active_eNBs = ( "eNB_Eurecom_LTEBox");
-# Asn1_verbosity, choice in: none, info, annoying
-Asn1_verbosity = "none";
-
-eNBs =
-(
- {
-    ////////// Identification parameters:
-    eNB_ID    =  0xe00;
-    
-    cell_type =  "CELL_MACRO_ENB";
-    
-    eNB_name  =  "eNB_Eurecom_LTEBox";
-    
-    // Tracking area code, 0x0000 and 0xfffe are reserved values
-    tracking_area_code  =  "1";
-    
-    mobile_country_code =  "208";
-    
-    mobile_network_code =  "93";
-    
-       ////////// Physical parameters:
-  
-    component_carriers = (
-    		       	 {
-  			   frame_type					      = "FDD";	
-                           tdd_config 					      = 3;
-                           tdd_config_s            			      = 0;
- 			   prefix_type             			      = "NORMAL";
-  			   eutra_band              			      = 7;
-                           downlink_frequency      			      = 2660000000L;
-                           uplink_frequency_offset 			      = -120000000;
-  			   Nid_cell					      = 0;
-                           N_RB_DL                 			      = 50;
-                           Nid_cell_mbsfn          			      = 0;
-                           nb_antennas_tx          			      = 1;
-                           nb_antennas_rx          			      = 1; 
-			   tx_gain                                            = 60;
-			   rx_gain                                            = 111;
-                           prach_root              			      = 0;
-                           prach_config_index      			      = 0;
-                           prach_high_speed        			      = "DISABLE";
-  	                   prach_zero_correlation  			      = 1;
-                           prach_freq_offset       			      = 2;
-			   pucch_delta_shift       			      = 1;
-                           pucch_nRB_CQI           			      = 1;
-                           pucch_nCS_AN            			      = 0;
-                           pucch_n1_AN             			      = 32;
-                           pdsch_referenceSignalPower 			      = -29;
-                           pdsch_p_b                  			      = 0;
-                           pusch_n_SB                 			      = 1; 
-                           pusch_enable64QAM          			      = "DISABLE";
-			   pusch_hoppingMode                                  = "interSubFrame";
-			   pusch_hoppingOffset                                = 0;
-     	                   pusch_groupHoppingEnabled  			      = "ENABLE";
-	                   pusch_groupAssignment      			      = 0;
-	                   pusch_sequenceHoppingEnabled		   	      = "DISABLE";
-	                   pusch_nDMRS1                                       = 1;
-	                   phich_duration                                     = "NORMAL";
-	                   phich_resource                                     = "ONESIXTH";
-	                   srs_enable                                         = "DISABLE";
-	               /*  srs_BandwidthConfig                                =;
-	                   srs_SubframeConfig                                 =;
-	                   srs_ackNackST                                      =;
-	                   srs_MaxUpPts                                       =;*/  
-
-	                   pusch_p0_Nominal                                   = -85; 
-	                   pusch_alpha                                        = "AL1";
-	                   pucch_p0_Nominal                                   = -96;
-	                   msg3_delta_Preamble                                = 6;
-	                   pucch_deltaF_Format1                               = "deltaF2";
-	                   pucch_deltaF_Format1b                              = "deltaF3";
-	                   pucch_deltaF_Format2                               = "deltaF0";
-	                   pucch_deltaF_Format2a                              = "deltaF0";
-  	                   pucch_deltaF_Format2b		    	      = "deltaF0";
-	
-                           rach_numberOfRA_Preambles                          = 64;
-                           rach_preamblesGroupAConfig                         = "DISABLE";
-/*
-                           rach_sizeOfRA_PreamblesGroupA                      = ;
-                           rach_messageSizeGroupA                             = ;
-                           rach_messagePowerOffsetGroupB                      = ; 
-*/
-                           rach_powerRampingStep                              = 4;
-	                   rach_preambleInitialReceivedTargetPower            = -100;
-                           rach_preambleTransMax                              = 10;
-	                   rach_raResponseWindowSize                          = 10;
-	                   rach_macContentionResolutionTimer                  = 48;
-	                   rach_maxHARQ_Msg3Tx                                = 4;
-
-			   pcch_default_PagingCycle                           = 128;
-			   pcch_nB                                            = "oneT";
-			   bcch_modificationPeriodCoeff			      = 2;
-			   ue_TimersAndConstants_t300			      = 1000;
-			   ue_TimersAndConstants_t301			      = 1000;
-			   ue_TimersAndConstants_t310			      = 1000;
-			   ue_TimersAndConstants_t311			      = 10000;
-			   ue_TimersAndConstants_n310			      = 20;
-			   ue_TimersAndConstants_n311			      = 1;
-
-			 }
-			 );
-
-
-    srb1_parameters :
-    {
-        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] 
-        timer_poll_retransmit    = 80;
-        
-        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
-        timer_reordering         = 35;
-        
-        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
-        timer_status_prohibit    = 0;
-        
-        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
-        poll_pdu                 =  4;
-        
-        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
-        poll_byte                =  99999;
-        
-        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
-        max_retx_threshold       =  4;
-    }
- 
-    # ------- SCTP definitions
-    SCTP :
-    {
-        # Number of streams to use in input/output
-        SCTP_INSTREAMS  = 2;
-        SCTP_OUTSTREAMS = 2;
-    };
-
-
-    ////////// MME parameters:
-    mme_ip_address      = ( { ipv4       = "192.168.12.170";
-                              ipv6       = "192:168:30::17";
-                              active     = "yes";
-                              preference = "ipv4";
-                            }
-                          );
-
-rrh_gw_config = (
- {			  
-    local_if_name = "eth0";			  
-    #remote_address = "169.254.10.158";	
-    #local_address = "169.254.8.15";        
-    remote_address = "74:d4:35:cc:88:45";
-    local_address = "d4:be:d9:22:0a:ac";
-    local_port = 50000;	    #for raw option local port must be the same to remote	       
-    remote_port = 50000; 
-    rrh_gw_active = "yes";
-    tr_preference = "raw";
-    rf_preference = "lmssdr";
-    iq_txshift = 0;
-    tx_sample_advance = 45;	
-    tx_scheduling_advance = 8; 	                
-                             
-}
-);  
-
-    NETWORK_INTERFACES :
-    {
-        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth6";
-        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.118/24";
-
-        ENB_INTERFACE_NAME_FOR_S1U               = "eth6";
-
-
-        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.118/24";
-        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
-    };
-
-    log_config :
-    {
-      global_log_level                      ="info";
-      global_log_verbosity                  ="medium";
-      hw_log_level                          ="info";
-      hw_log_verbosity                      ="medium";
-      phy_log_level                         ="info";
-      phy_log_verbosity                     ="medium";
-      mac_log_level                         ="info";
-      mac_log_verbosity                     ="high";
-      rlc_log_level                         ="info";
-      rlc_log_verbosity                     ="medium";
-      pdcp_log_level                        ="info";
-      pdcp_log_verbosity                    ="medium";
-      rrc_log_level                         ="info";
-      rrc_log_verbosity                     ="medium";
-   };
-  }
-);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf
deleted file mode 100644
index d912b1a10213a42d9332a00199e4c3c3a88df14b..0000000000000000000000000000000000000000
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.lmssdr.conf
+++ /dev/null
@@ -1,176 +0,0 @@
-Active_eNBs = ( "eNB_Eurecom_LTEBox");
-# Asn1_verbosity, choice in: none, info, annoying
-Asn1_verbosity = "none";
-
-eNBs =
-(
- {
-    ////////// Identification parameters:
-    eNB_ID    =  0xe00;
-    
-    cell_type =  "CELL_MACRO_ENB";
-    
-    eNB_name  =  "eNB_Eurecom_LTEBox";
-    
-    // Tracking area code, 0x0000 and 0xfffe are reserved values
-    tracking_area_code  =  "1";
-    
-    mobile_country_code =  "208";
-    
-    mobile_network_code =  "92";
-    
-       ////////// Physical parameters:
-  
-    component_carriers = (
-    		       	 {
-                           node_function                                         = "eNodeB_3GPP";
-                           node_timing                                           = "synch_to_ext_device";
-                           node_synch_ref                                        = 0;
-  			   frame_type					      = "FDD";	
-                           tdd_config 					      = 3;
-                           tdd_config_s            			      = 0;
- 			   prefix_type             			      = "NORMAL";
-  			   eutra_band              			      = 7;
-                           downlink_frequency      			      = 2660000000L;
-                           uplink_frequency_offset 			      = -120000000;
-  			   Nid_cell					      = 0;
-                           N_RB_DL                 			      = 25;
-                           Nid_cell_mbsfn          			      = 0;
-			   nb_antennas_ports				      = 1;
-                           nb_antennas_tx          			      = 1;
-                           nb_antennas_rx          			      = 1; 
-			   tx_gain                                            = 100;
-			   rx_gain                                            = 111;
-                           prach_root              			      = 0;
-                           prach_config_index      			      = 0;
-                           prach_high_speed        			      = "DISABLE";
-  	                   prach_zero_correlation  			      = 1;
-                           prach_freq_offset       			      = 2;
-			   pucch_delta_shift       			      = 1;
-                           pucch_nRB_CQI           			      = 1;
-                           pucch_nCS_AN            			      = 0;
-                           pucch_n1_AN             			      = 32;
-                           pdsch_referenceSignalPower 			      = -29;
-                           pdsch_p_b                  			      = 0;
-                           pusch_n_SB                 			      = 1; 
-                           pusch_enable64QAM          			      = "DISABLE";
-			   pusch_hoppingMode                                  = "interSubFrame";
-			   pusch_hoppingOffset                                = 0;
-     	                   pusch_groupHoppingEnabled  			      = "ENABLE";
-	                   pusch_groupAssignment      			      = 0;
-	                   pusch_sequenceHoppingEnabled		   	      = "DISABLE";
-	                   pusch_nDMRS1                                       = 1;
-	                   phich_duration                                     = "NORMAL";
-	                   phich_resource                                     = "ONESIXTH";
-	                   srs_enable                                         = "DISABLE";
-	               /*  srs_BandwidthConfig                                =;
-	                   srs_SubframeConfig                                 =;
-	                   srs_ackNackST                                      =;
-	                   srs_MaxUpPts                                       =;*/  
-
-	                   pusch_p0_Nominal                                   = -85; 
-	                   pusch_alpha                                        = "AL1";
-	                   pucch_p0_Nominal                                   = -96;
-	                   msg3_delta_Preamble                                = 6;
-	                   pucch_deltaF_Format1                               = "deltaF2";
-	                   pucch_deltaF_Format1b                              = "deltaF3";
-	                   pucch_deltaF_Format2                               = "deltaF0";
-	                   pucch_deltaF_Format2a                              = "deltaF0";
-  	                   pucch_deltaF_Format2b		    	      = "deltaF0";
-	
-                           rach_numberOfRA_Preambles                          = 64;
-                           rach_preamblesGroupAConfig                         = "DISABLE";
-/*
-                           rach_sizeOfRA_PreamblesGroupA                      = ;
-                           rach_messageSizeGroupA                             = ;
-                           rach_messagePowerOffsetGroupB                      = ; 
-*/
-                           rach_powerRampingStep                              = 4;
-	                   rach_preambleInitialReceivedTargetPower            = -100;
-                           rach_preambleTransMax                              = 10;
-	                   rach_raResponseWindowSize                          = 10;
-	                   rach_macContentionResolutionTimer                  = 48;
-	                   rach_maxHARQ_Msg3Tx                                = 4;
-
-			   pcch_default_PagingCycle                           = 128;
-			   pcch_nB                                            = "oneT";
-			   bcch_modificationPeriodCoeff			      = 2;
-			   ue_TimersAndConstants_t300			      = 1000;
-			   ue_TimersAndConstants_t301			      = 1000;
-			   ue_TimersAndConstants_t310			      = 1000;
-			   ue_TimersAndConstants_t311			      = 10000;
-			   ue_TimersAndConstants_n310			      = 20;
-			   ue_TimersAndConstants_n311			      = 1;
-
-			   ue_TransmissionMode				      = 1;
-			 }
-			 );
-
-
-    srb1_parameters :
-    {
-        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] 
-        timer_poll_retransmit    = 80;
-        
-        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
-        timer_reordering         = 35;
-        
-        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
-        timer_status_prohibit    = 0;
-        
-        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
-        poll_pdu                 =  4;
-        
-        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
-        poll_byte                =  99999;
-        
-        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
-        max_retx_threshold       =  4;
-    }
-    
-    # ------- SCTP definitions
-    SCTP :
-    {
-        # Number of streams to use in input/output
-        SCTP_INSTREAMS  = 2;
-        SCTP_OUTSTREAMS = 2;
-    };
-        
-    ////////// MME parameters:
-    mme_ip_address      = ( { ipv4       = "192.168.12.170";
-                              ipv6       = "192:168:30::17";
-                              active     = "yes";
-                              preference = "ipv4";
-                            }
-                          );
-
-    NETWORK_INTERFACES : 
-    {
-        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth4";
-        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.242/24";
-
-        ENB_INTERFACE_NAME_FOR_S1U               = "eth4";
-        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.242/24";
-        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
-    };
-    
-    log_config : 
-    {
-	global_log_level                      ="info"; 
-    	global_log_verbosity                  ="medium";
-	hw_log_level                          ="info"; 
-    	hw_log_verbosity                      ="medium";
-	phy_log_level                         ="info"; 
-    	phy_log_verbosity                     ="medium";
-	mac_log_level                         ="info"; 
-    	mac_log_verbosity                     ="high";
-	rlc_log_level                         ="info"; 
-    	rlc_log_verbosity                     ="medium";
-	pdcp_log_level                        ="info"; 
-    	pdcp_log_verbosity                    ="medium";
-	rrc_log_level                         ="info"; 
-    	rrc_log_verbosity                     ="medium";
-   };	
-   
-  }
-);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.lmssdr.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.lmssdr.conf
deleted file mode 100644
index 9b052bf7ba9a888bb1b26cc8f654191513524982..0000000000000000000000000000000000000000
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.rrh.lmssdr.conf
+++ /dev/null
@@ -1,192 +0,0 @@
-Active_eNBs = ( "eNB_Eurecom_LTEBox");
-# Asn1_verbosity, choice in: none, info, annoying
-Asn1_verbosity = "none";
-
-eNBs =
-(
- {
-    ////////// Identification parameters:
-    eNB_ID    =  0xe00;
-    
-    cell_type =  "CELL_MACRO_ENB";
-    
-    eNB_name  =  "eNB_Eurecom_LTEBox";
-    
-    // Tracking area code, 0x0000 and 0xfffe are reserved values
-    tracking_area_code  =  "1";
-    
-    mobile_country_code =  "208";
-    
-    mobile_network_code =  "92";
-    
-       ////////// Physical parameters:
-  
-    component_carriers = (
-    		       	 {
-  			   frame_type					      = "FDD";	
-                           tdd_config 					      = 3;
-                           tdd_config_s            			      = 0;
- 			   prefix_type             			      = "NORMAL";
-  			   eutra_band              			      = 7;
-                           downlink_frequency      			      = 2660000000L;
-                           uplink_frequency_offset 			      = -120000000;
-  			   Nid_cell					      = 0;
-                           N_RB_DL                 			      = 25;
-                           Nid_cell_mbsfn          			      = 0;
-                           nb_antennas_tx          			      = 1;
-                           nb_antennas_rx          			      = 1; 
-			   tx_gain                                            = 60;
-			   rx_gain                                            = 111;
-                           prach_root              			      = 0;
-                           prach_config_index      			      = 0;
-                           prach_high_speed        			      = "DISABLE";
-  	                   prach_zero_correlation  			      = 1;
-                           prach_freq_offset       			      = 2;
-			   pucch_delta_shift       			      = 1;
-                           pucch_nRB_CQI           			      = 1;
-                           pucch_nCS_AN            			      = 0;
-                           pucch_n1_AN             			      = 32;
-                           pdsch_referenceSignalPower 			      = -29;
-                           pdsch_p_b                  			      = 0;
-                           pusch_n_SB                 			      = 1; 
-                           pusch_enable64QAM          			      = "DISABLE";
-			   pusch_hoppingMode                                  = "interSubFrame";
-			   pusch_hoppingOffset                                = 0;
-     	                   pusch_groupHoppingEnabled  			      = "ENABLE";
-	                   pusch_groupAssignment      			      = 0;
-	                   pusch_sequenceHoppingEnabled		   	      = "DISABLE";
-	                   pusch_nDMRS1                                       = 1;
-	                   phich_duration                                     = "NORMAL";
-	                   phich_resource                                     = "ONESIXTH";
-	                   srs_enable                                         = "DISABLE";
-	               /*  srs_BandwidthConfig                                =;
-	                   srs_SubframeConfig                                 =;
-	                   srs_ackNackST                                      =;
-	                   srs_MaxUpPts                                       =;*/  
-
-	                   pusch_p0_Nominal                                   = -85; 
-	                   pusch_alpha                                        = "AL1";
-	                   pucch_p0_Nominal                                   = -96;
-	                   msg3_delta_Preamble                                = 6;
-	                   pucch_deltaF_Format1                               = "deltaF2";
-	                   pucch_deltaF_Format1b                              = "deltaF3";
-	                   pucch_deltaF_Format2                               = "deltaF0";
-	                   pucch_deltaF_Format2a                              = "deltaF0";
-  	                   pucch_deltaF_Format2b		    	      = "deltaF0";
-	
-                           rach_numberOfRA_Preambles                          = 64;
-                           rach_preamblesGroupAConfig                         = "DISABLE";
-/*
-                           rach_sizeOfRA_PreamblesGroupA                      = ;
-                           rach_messageSizeGroupA                             = ;
-                           rach_messagePowerOffsetGroupB                      = ; 
-*/
-                           rach_powerRampingStep                              = 4;
-	                   rach_preambleInitialReceivedTargetPower            = -100;
-                           rach_preambleTransMax                              = 10;
-	                   rach_raResponseWindowSize                          = 10;
-	                   rach_macContentionResolutionTimer                  = 48;
-	                   rach_maxHARQ_Msg3Tx                                = 4;
-
-			   pcch_default_PagingCycle                           = 128;
-			   pcch_nB                                            = "oneT";
-			   bcch_modificationPeriodCoeff			      = 2;
-			   ue_TimersAndConstants_t300			      = 1000;
-			   ue_TimersAndConstants_t301			      = 1000;
-			   ue_TimersAndConstants_t310			      = 1000;
-			   ue_TimersAndConstants_t311			      = 10000;
-			   ue_TimersAndConstants_n310			      = 20;
-			   ue_TimersAndConstants_n311			      = 1;
-
-			 }
-			 );
-
-
-    srb1_parameters :
-    {
-        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] 
-        timer_poll_retransmit    = 80;
-        
-        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
-        timer_reordering         = 35;
-        
-        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
-        timer_status_prohibit    = 0;
-        
-        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
-        poll_pdu                 =  4;
-        
-        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
-        poll_byte                =  99999;
-        
-        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
-        max_retx_threshold       =  4;
-    }
-    
-    # ------- SCTP definitions
-    SCTP :
-    {
-        # Number of streams to use in input/output
-        SCTP_INSTREAMS  = 2;
-        SCTP_OUTSTREAMS = 2;
-    };
-
-
-    ////////// MME parameters:
-    mme_ip_address      = ( { ipv4       = "192.168.12.170";
-                              ipv6       = "192:168:30::17";
-                              active     = "yes";
-                              preference = "ipv4";
-                            }
-                          );
-
-rrh_gw_config = (
- {			  
-    local_if_name = "eth0";			  
-    #remote_address = "169.254.10.158";	
-    #local_address = "169.254.8.15";				  
-    remote_address = "74:d4:35:cc:88:45";
-    local_address = "d4:be:d9:22:0a:ac";
-    local_port = 50000;	    #for raw option local port must be the same to remote	       
-    remote_port = 50000; 
-    rrh_gw_active = "yes";
-    tr_preference = "raw";
-    rf_preference = "lmssdr";
-    iq_txshift = 0;
-    tx_sample_advance = 70;	
-    tx_scheduling_advance = 8; 	                
-                             
-}
-);  
-
-    NETWORK_INTERFACES :
-    {
-        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth6";
-        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.118/24";
-
-        ENB_INTERFACE_NAME_FOR_S1U               = "eth6";
-
-
-        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.118/24";
-        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
-    };
-
-    log_config :
-    {
-      global_log_level                      ="info";
-      global_log_verbosity                  ="medium";
-      hw_log_level                          ="info";
-      hw_log_verbosity                      ="medium";
-      phy_log_level                         ="info";
-      phy_log_verbosity                     ="medium";
-      mac_log_level                         ="info";
-      mac_log_verbosity                     ="high";
-      rlc_log_level                         ="info";
-      rlc_log_verbosity                     ="medium";
-      pdcp_log_level                        ="info";
-      pdcp_log_verbosity                    ="medium";
-      rrc_log_level                         ="info";
-      rrc_log_verbosity                     ="medium";
-   };
-  }
-);
diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c
index 189bb87d497fd3243b1d573229a78edac6d2d178..21d34d40b194720ea2f5fa85cbf9a702707edf92 100644
--- a/targets/RT/USER/lte-enb.c
+++ b/targets/RT/USER/lte-enb.c
@@ -1004,6 +1004,7 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
   start_rf_prev_ts = start_rf_new_ts;
   clock_gettime( CLOCK_MONOTONIC, &start_rf_new);
   start_rf_new_ts = ts;
+  LOG_D(PHY,"rx_rf: first_rx %d received ts %"PRId64" (sptti %d)\n",proc->first_rx,ts,fp->samples_per_tti);
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 );
 
   proc->timestamp_rx = ts-eNB->ts_offset;
@@ -1020,7 +1021,7 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
   else {
 
     if (proc->timestamp_rx - old_ts != fp->samples_per_tti) {
-      LOG_I(PHY,"rx_rf: rfdevice timing drift of %"PRId64" samples\n",proc->timestamp_rx - old_ts - fp->samples_per_tti);
+      LOG_I(PHY,"rx_rf: rfdevice timing drift of %"PRId64" samples (ts_off %"PRId64")\n",proc->timestamp_rx - old_ts - fp->samples_per_tti,eNB->ts_offset);
       eNB->ts_offset += (proc->timestamp_rx - old_ts - fp->samples_per_tti);
       proc->timestamp_rx = ts-eNB->ts_offset;
     }
@@ -1559,7 +1560,7 @@ static void* eNB_thread_single( void* param ) {
   wait_sync("eNB_thread_single");
 
 #if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
-  if (eNB->node_function < NGFI_RRU_IF5)
+  if ((eNB->node_function < NGFI_RRU_IF5) && (eNB->mac_enabled==1))
     wait_system_ready ("Waiting for eNB application to be ready %s\r", &start_eNB);
 #endif 
 
@@ -1723,7 +1724,7 @@ void init_eNB_proc(int inst) {
     proc->CC_id = CC_id;    
     proc->instance_cnt_synch        =  -1;
 
-    proc->first_rx=1;
+    proc->first_rx=2;
     proc->first_tx=1;
     proc->frame_offset = 0;
 
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index 8303d88218fbe0fbf83ab827133e3b29d355f5de..03f6ba1a2eddfbc02ca337d6572457e3ecd10f60 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -321,6 +321,7 @@ void help (void) {
   printf("  --ue-txgain set UE TX gain\n");
   printf("  --ue-nb-ant-rx  set UE number of rx antennas ");
   printf("  --ue-scan_carrier set UE to scan around carrier\n");
+  printf("  --dlsch-demod-shift dynamic shift for LLR compuation for TM3/4 (default 0)\n");
   printf("  --loop-memory get softmodem (UE) to loop through memory instead of acquiring from HW\n");
   printf("  --mmapped-dma sets flag for improved EXMIMO UE performance\n");  
   printf("  --external-clock tells hardware to use an external clock reference\n");
@@ -635,6 +636,7 @@ static void get_options (int argc, char **argv) {
         LONG_OPTION_THREADIQ,
         LONG_OPTION_THREADODDSUBFRAME,
         LONG_OPTION_THREADEVENSUBFRAME,
+        LONG_OPTION_DEMOD_SHIFT,
 #if T_TRACER
         LONG_OPTION_T_PORT,
         LONG_OPTION_T_NOWAIT,
@@ -670,6 +672,7 @@ static void get_options (int argc, char **argv) {
         {"threadIQ",  required_argument, NULL, LONG_OPTION_THREADIQ},
         {"threadOddSubframe",  required_argument, NULL, LONG_OPTION_THREADODDSUBFRAME},
         {"threadEvenSubframe",  required_argument, NULL, LONG_OPTION_THREADEVENSUBFRAME},
+        {"dlsch-demod-shift", required_argument,  NULL, LONG_OPTION_DEMOD_SHIFT},
 #if T_TRACER
         {"T_port",                 required_argument, 0, LONG_OPTION_T_PORT},
         {"T_nowait",               no_argument,       0, LONG_OPTION_T_NOWAIT},
@@ -800,7 +803,11 @@ static void get_options (int argc, char **argv) {
     case LONG_OPTION_THREADEVENSUBFRAME:
        threads.even=atoi(optarg);
        break;
-
+    case LONG_OPTION_DEMOD_SHIFT: {
+        extern int16_t dlsch_demod_shift;
+        dlsch_demod_shift = atof(optarg);
+        break;
+    }
 #if T_TRACER
         case LONG_OPTION_T_PORT: {
             extern int T_port;
@@ -1572,9 +1579,15 @@ int main( int argc, char **argv ) {
                               UE[CC_id]->X_u);
 
             if (UE[CC_id]->mac_enabled == 1)
-                UE[CC_id]->pdcch_vars[0]->crnti = 0x1234;
+            {
+                UE[CC_id]->pdcch_vars[0][0]->crnti = 0x1234;
+                UE[CC_id]->pdcch_vars[1][0]->crnti = 0x1234;
+            }
             else
-                UE[CC_id]->pdcch_vars[0]->crnti = 0x1235;
+            {
+                UE[CC_id]->pdcch_vars[0][0]->crnti = 0x1235;
+                UE[CC_id]->pdcch_vars[1][0]->crnti = 0x1235;
+            }
 
             UE[CC_id]->rx_total_gain_dB =  (int)rx_gain[CC_id][0] + rx_gain_off;
             UE[CC_id]->tx_power_max_dBm = tx_max_power[CC_id];
@@ -1726,7 +1739,7 @@ int main( int argc, char **argv ) {
 #if defined(ENABLE_ITTI)
 
     if ((UE_flag == 1)||
-            (node_function[0]<NGFI_RAU_IF4p5))
+	((node_function[0]<NGFI_RAU_IF4p5)&&(phy_test==0)))
         // don't create if node doesn't connect to RRC/S1/GTP
         if (create_tasks(UE_flag ? 0 : 1, UE_flag ? 1 : 0) < 0) {
             printf("cannot create ITTI tasks\n");
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index 3b6ea9e5c9166b098675de288347bc34f6405e15..8a0b646fc35204a6b136f2202a39b50d5741b87a 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -56,6 +56,8 @@
 
 #include "T.h"
 
+extern double cpuf;
+
 #define FRAME_PERIOD    100000000ULL
 #define DAQ_PERIOD      66667ULL
 #define FIFO_PRIORITY   40
@@ -267,7 +269,7 @@ static void *UE_thread_synch(void *arg) {
         }
     }
 
-    AssertFatal(UE->rfdevice.trx_start_func(&UE->rfdevice) == 0, "Could not start the device\n");
+    //    AssertFatal(UE->rfdevice.trx_start_func(&UE->rfdevice) == 0, "Could not start the device\n");
 
     while (oai_exit==0) {
         AssertFatal ( 0== pthread_mutex_lock(&UE->proc.mutex_synch), "");
@@ -366,13 +368,13 @@ static void *UE_thread_synch(void *arg) {
 
                     UE->rfdevice.trx_set_freq_func(&UE->rfdevice,&openair0_cfg[0],0);
                     //UE->rfdevice.trx_set_gains_func(&openair0,&openair0_cfg[0]);
-                    UE->rfdevice.trx_stop_func(&UE->rfdevice);
+                    //UE->rfdevice.trx_stop_func(&UE->rfdevice);
                     sleep(1);
                     init_frame_parms(&UE->frame_parms,1);
-                    if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) {
+                    /*if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) {
                         LOG_E(HW,"Could not start the device\n");
                         oai_exit=1;
-                    }
+                    }*/
                 } else {
                     AssertFatal ( 0== pthread_mutex_lock(&UE->proc.mutex_synch), "");
                     UE->is_synchronized = 1;
@@ -538,6 +540,9 @@ static void *UE_thread_rxn_txnp4(void *arg) {
             }
             phy_procedures_UE_RX( UE, proc, 0, 0, UE->mode, no_relay, NULL );
         }
+
+        start_meas(&UE->generic_stat);
+
         if (UE->mac_enabled==1) {
 
             ret = mac_xface->ue_scheduler(UE->Mod_id,
@@ -567,6 +572,9 @@ static void *UE_thread_rxn_txnp4(void *arg) {
                        UE->Mod_id, proc->frame_rx, proc->subframe_tx,txt );
             }
         }
+
+        stop_meas(&UE->generic_stat);
+
         // Prepare the future Tx data
 
         if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_UL) ||
@@ -639,6 +647,7 @@ void *UE_thread(void *arg) {
 
     int sub_frame=-1;
     //int cumulated_shift=0;
+    AssertFatal(UE->rfdevice.trx_start_func(&UE->rfdevice) == 0, "Could not start the device\n");
     while (!oai_exit) {
         AssertFatal ( 0== pthread_mutex_lock(&UE->proc.mutex_synch), "");
         int instance_cnt_synch = UE->proc.instance_cnt_synch;
diff --git a/targets/SIMU/USER/channel_sim.c b/targets/SIMU/USER/channel_sim.c
index aff1f789eeefe8486457c3b44a2344fdc1320e3e..3913de60168524e8db18af473563c521e3fd95c1 100644
--- a/targets/SIMU/USER/channel_sim.c
+++ b/targets/SIMU/USER/channel_sim.c
@@ -145,7 +145,7 @@ void do_DL_sig(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_N
 
       // find out which eNB the UE is attached to
       for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) {
-        if (find_ue(PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[0]->crnti,PHY_vars_eNB_g[eNB_id][CC_id])>=0) {
+        if (find_ue(PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[0][0]->crnti,PHY_vars_eNB_g[eNB_id][CC_id])>=0) {
           // UE with UE_id is connected to eNb with eNB_id
           att_eNB_id=eNB_id;
           LOG_D(OCM,"A: UE attached to eNB (UE%d->eNB%d)\n",UE_id,eNB_id);
diff --git a/targets/SIMU/USER/init_lte.c b/targets/SIMU/USER/init_lte.c
index 8ff274be14d14c9e618ba6d9f8b7b22709109a3a..3baf8fdad66b285b0019d4e7fb08cad62a499c4a 100644
--- a/targets/SIMU/USER/init_lte.c
+++ b/targets/SIMU/USER/init_lte.c
@@ -162,29 +162,31 @@ PHY_VARS_UE* init_lte_UE(LTE_DL_FRAME_PARMS *frame_parms,
   phy_init_lte_ue(PHY_vars_UE,1,abstraction_flag);
 
   for (i=0; i<NUMBER_OF_CONNECTED_eNB_MAX; i++) {
-    for (j=0; j<2; j++) {
-      PHY_vars_UE->dlsch[i][j]  = new_ue_dlsch(1,NUMBER_OF_HARQ_PID_MAX,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, abstraction_flag);
-
-      if (!PHY_vars_UE->dlsch[i][j]) {
-        LOG_E(PHY,"Can't get ue dlsch structures\n");
-        exit(-1);
-      } else
-        LOG_D(PHY,"dlsch[%d][%d] => %p\n",UE_id,i,PHY_vars_UE->dlsch[i][j]);
-    }
+      for (j=0; j<2; j++) { // 2CWs
+          for (int l=0; l<2; l++){ // 2Threads
+              PHY_vars_UE->dlsch[l][i][j]  = new_ue_dlsch(1,NUMBER_OF_HARQ_PID_MAX,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, abstraction_flag);
+
+              if (!PHY_vars_UE->dlsch[l][i][j]) {
+                  LOG_E(PHY,"Can't get ue dlsch structures\n");
+                  exit(-1);
+              } else
+                  LOG_D(PHY,"dlsch[%d][%d] => %p\n",UE_id,i,PHY_vars_UE->dlsch[l][i][j]);
+          }
+      }
 
 
 
-    PHY_vars_UE->ulsch[i]  = new_ue_ulsch(frame_parms->N_RB_UL, abstraction_flag);
+      PHY_vars_UE->ulsch[i]  = new_ue_ulsch(frame_parms->N_RB_UL, abstraction_flag);
 
-    if (!PHY_vars_UE->ulsch[i]) {
-      LOG_E(PHY,"Can't get ue ulsch structures\n");
-      exit(-1);
-    }
+      if (!PHY_vars_UE->ulsch[i]) {
+          LOG_E(PHY,"Can't get ue ulsch structures\n");
+          exit(-1);
+      }
 
-    PHY_vars_UE->dlsch_SI[i]  = new_ue_dlsch(1,1,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, abstraction_flag);
-    PHY_vars_UE->dlsch_ra[i]  = new_ue_dlsch(1,1,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, abstraction_flag);
+      PHY_vars_UE->dlsch_SI[i]  = new_ue_dlsch(1,1,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, abstraction_flag);
+      PHY_vars_UE->dlsch_ra[i]  = new_ue_dlsch(1,1,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, abstraction_flag);
 
-    PHY_vars_UE->transmission_mode[i] = frame_parms->nb_antenna_ports_eNB==1 ? 1 : 2;
+      PHY_vars_UE->transmission_mode[i] = frame_parms->nb_antenna_ports_eNB==1 ? 1 : 2;
   }
 
   PHY_vars_UE->frame_parms.pucch_config_common.deltaPUCCH_Shift = 1;
diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c
index 7c1ea1a3c886bc07f2d90f8fc508216c7c073176..f1b3944a164609631d38ad1c6312289f478b1bfd 100644
--- a/targets/SIMU/USER/oaisim.c
+++ b/targets/SIMU/USER/oaisim.c
@@ -1332,6 +1332,8 @@ main (int argc, char **argv)
   if (oai_emulation.info.opp_enabled == 1)
     reset_opp_meas_oaisim ();
 
+  cpuf=get_cpu_freq_GHz();
+
   init_time ();
 
   init_slot_isr ();
diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c
index c47dc10caf11d95cfa71addff2b4de91f6ad2500..c00bb50401b06b11299fd804421683a9123e80b7 100644
--- a/targets/SIMU/USER/oaisim_functions.c
+++ b/targets/SIMU/USER/oaisim_functions.c
@@ -1428,7 +1428,7 @@ void init_openair1(void)
       else
 	PHY_vars_UE_g[UE_id][CC_id]->mac_enabled=1;
 
-      PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[0]->crnti = 0x1235 + UE_id;
+      PHY_vars_UE_g[UE_id][CC_id]->pdcch_vars[0][0]->crnti = 0x1235 + UE_id;
       PHY_vars_UE_g[UE_id][CC_id]->current_dlsch_cqi[0] = 10;
 
       LOG_I(EMU, "UE %d mode is initialized to %d\n", UE_id, PHY_vars_UE_g[UE_id][CC_id]->UE_mode[0] );