<pre style='margin:0'>
Michael Dickens (michaelld) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/60ac25f71e8f63ce13fc7ccdc54023fcc1c224ae">https://github.com/macports/macports-ports/commit/60ac25f71e8f63ce13fc7ccdc54023fcc1c224ae</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 60ac25f  gr-ofdm: new port.
</span>60ac25f is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 60ac25f71e8f63ce13fc7ccdc54023fcc1c224ae
</span>Author: Michael Dickens <michaelld@macports.org>
AuthorDate: Thu Aug 17 10:58:43 2017 -0400

<span style='display:block; white-space:pre;color:#404040;'>    gr-ofdm: new port.
</span>---
 science/gr-ofdm/Portfile                           |  83 +++
 science/gr-ofdm/files/patch-build-clang_c++11.diff | 699 +++++++++++++++++++++
 2 files changed, 782 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/science/gr-ofdm/Portfile b/science/gr-ofdm/Portfile
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..7823a63
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/science/gr-ofdm/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,83 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortSystem          1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           cmake 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           github 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           active_variants 1.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           cxx11 1.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup        rwth-ti gr-ofdm ac623e857d8e7abc93403759ee43038ff0f142a0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version             20161220
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums           rmd160 f2565d3e16dcc2f7e419679db7d3974d86b2949d \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256 558b67087086496564662c24d6df97bd0d45244a697f49bcade5623bd7499a5c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# allow gr-ofdm to work with both gnuradio and gnuradio-devel ...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_lib-append  path:lib/libgnuradio-runtime.dylib:gnuradio
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ... but not with gnuradio-next
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+pre-fetch {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![catch {set installed [lindex [registry_active gnuradio-next] 0]}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # gnuradio-next is installed; this version of gr-ofdm does not work with gnuradio-next
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_msg "\nError: ${name} requires the gnuradio or gnuradio-devel port, and will not work with the gnuradio-next port.  deactivate gnuradio-next, and then install or activate gnuradio or gnuradio-devel.\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return -code error "Invalid port dependency: gnuradio-next"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+categories          science comms
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+maintainers         michaelld openmaintainer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description         Provides augmented functionality (blocks, GRC definitions, apps, etc) for GNU Radio.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+long_description    ${description}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+license             GPL-3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+platforms           darwin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_build-append port:pkgconfig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_lib-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    port:boost \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    port:itpp \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    port:py27-pyqt4 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    port:py27-scipy \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    port:py27-numpy \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    path:lib/libuhd.dylib:libuhd \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    path:lib/libzmq.dylib:zmq
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# do VPATH (out of source tree) build
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+cmake.out_of_source yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# remove top-level library path, such that internal libraries are used
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# instead of any already-installed ones.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.ldflags-delete -L${prefix}/lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# specify the Python dependencies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_lib-append port:python27
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# patch to allow building using Clang and C++11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# should also be backward compatible with GCC.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# adds boost::thread and volk finding.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# fixes ITPP finding.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patch-build-clang_c++11.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patch.pre_args -p1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# specify that Python version to use
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.args-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    -DPYTHON_EXECUTABLE=${frameworks_dir}/Python.framework/Versions/2.7/bin/python2.7 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    -DPYTHON_INCLUDE_DIR=${frameworks_dir}/Python.framework/Versions/2.7/Headers \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    -DPYTHON_LIBRARY=${frameworks_dir}/Python.framework/Versions/2.7/Python \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    -DGR_PYTHON_DIR=${frameworks_dir}/Python.framework/Versions/2.7/lib/python2.7/site-packages
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# specify ITPP to use
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.args-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    -DITPP_DIR=${prefix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# use C++11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.args-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    -DCMAKE_CXX_STANDARD=11
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/science/gr-ofdm/files/patch-build-clang_c++11.diff b/science/gr-ofdm/files/patch-build-clang_c++11.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..9673db7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/science/gr-ofdm/files/patch-build-clang_c++11.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,699 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/CMakeLists.txt b/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a21dfde..48b8f3c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -57,7 +57,7 @@ set(Boost_ADDITIONAL_VERSIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-find_package(Boost "1.35" COMPONENTS filesystem system)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++find_package(Boost "1.35" COMPONENTS filesystem system thread)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(NOT Boost_FOUND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     message(FATAL_ERROR "Boost required to compile ofdm")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -83,9 +83,8 @@ set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Find gnuradio build dependencies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#find_package(GnuradioRuntime)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ find_package(CppUnit)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#find_package(GnuradioFFT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++find_package(Volk)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # To run a more advanced search for GNU Radio and it's components and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # versions, use the following. Add any components required to the list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -107,6 +106,9 @@ endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(NOT GNURADIO_BLOCKS_FOUND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     message(FATAL_ERROR "GnuRadio Blocks required to compile ofdm")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++if(NOT VOLK_FOUND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    message(FATAL_ERROR "Volk required to compile ofdm")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a542d59..7af63a3 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/apps/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/apps/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -24,7 +24,8 @@ GR_PYTHON_INSTALL(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     gui/ofdm_rx_gui.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     gui/ofdm_mrrc_rx_gui.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     gui/ofdm_tx_gui.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    DESTINATION bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    DESTINATION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ${CMAKE_INSTALL_PREFIX}/share/gnuradio/examples/ofdm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ install(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -38,7 +39,8 @@ install(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     run_usrp_tx.sh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     run_test_demapper_fbmc.sh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     run_grc.sh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    DESTINATION bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    DESTINATION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ${CMAKE_INSTALL_PREFIX}/share/gnuradio/examples/ofdm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ install(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -48,5 +50,6 @@ install(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     gui/ofdm_rx_gui_window.ui
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     gui/ofdm_mrrc_rx_gui_window.ui
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     gui/ofdm_tx_gui_window.ui
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    DESTINATION bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    DESTINATION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ${CMAKE_INSTALL_PREFIX}/share/gnuradio/examples/ofdm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/cmake/Modules/FindITPP.cmake b/cmake/Modules/FindITPP.cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f4a0540..1f09141 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/cmake/Modules/FindITPP.cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/cmake/Modules/FindITPP.cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -7,25 +7,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # also defined, but not for general use are
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #  ITPP_LIBRARY, where to find the ITPP library.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#MESSAGE("ITPP_DIR set to ${ITPP_DIR}" )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ FIND_PATH(ITPP_INCLUDE_DIR itpp/itbase.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    ${ITPP_DIR}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /usr/pkgs64/include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /usr/include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    NO_DEFAULT_PATH
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ${ITPP_DIR}/include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ FIND_LIBRARY(ITPP_LIBRARY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    NAMES itpp #itpp_debug
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    NAMES itpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     PATHS ${ITPP_DIR}/libs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    ${ITPP_DIR}/itpp/.libs/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    "${ITPP_DIR}\\win32\\lib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /usr/lib/x86_64-linux-gnu
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /usr/pkgs64/lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /usr/lib64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    /usr/lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    NO_DEFAULT_PATH
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ IF (ITPP_LIBRARY AND ITPP_INCLUDE_DIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -35,7 +23,6 @@ ELSE (ITPP_LIBRARY AND ITPP_INCLUDE_DIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     SET(ITPP_FOUND "NO")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ENDIF (ITPP_LIBRARY AND ITPP_INCLUDE_DIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ IF (ITPP_FOUND)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     IF (NOT ITPP_FIND_QUIETLY)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         MESSAGE(STATUS "Found ITPP: ${ITPP_LIBRARIES}")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/include/ofdm/ofdmi_fast_math.h b/include/ofdm/ofdmi_fast_math.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0488d73..085eae7 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/include/ofdm/ofdmi_fast_math.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/include/ofdm/ofdmi_fast_math.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -23,6 +23,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef INCLUDED_OFDMI_FAST_MATH_H_
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define INCLUDED_OFDMI_FAST_MATH_H_
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <pmmintrin.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef float v4sf __attribute__ ((vector_size (16)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef float const v4sfc __attribute__ ((vector_size (16)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -52,31 +53,31 @@ perform_frequency_shift( gr_complex const * const in, gr_complex * const out,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   step_phasor.v[2] = std::cos( 2 * phase_step );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   step_phasor.v[3] = std::sin( 2 * phase_step );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  v4sfc * vin = reinterpret_cast< v4sfc * >( in );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const v4sfc * vin = reinterpret_cast< const v4sfc * >( in );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   v4sf * vout = reinterpret_cast< v4sf * >( out );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // complex multiplication, with gr_expj( phase )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // phase increased for every complex sample
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   for( int j = 0; j < vlen/2; ++j )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    v4sf x0 = __builtin_ia32_movsldup( phasor.vec );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    v4sf x0 = _mm_moveldup_ps( phasor.vec );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     v4sf x1 = vin[ j ];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     x0 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    x1 = __builtin_ia32_shufps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    v4sf x2 = __builtin_ia32_movshdup( phasor.vec );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    x1 = _mm_shuffle_ps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    v4sf x2 = _mm_movehdup_ps( phasor.vec );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     x2 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     x0 = __builtin_ia32_addsubps( x0, x2 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     vout[ j ] = x0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    x0 = __builtin_ia32_movsldup( phasor.vec );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    x0 = _mm_moveldup_ps( phasor.vec );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     x1 = step_phasor.vec;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     x0 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    x1 = __builtin_ia32_shufps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    x2 = __builtin_ia32_movshdup( phasor.vec );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    x1 = _mm_shuffle_ps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    x2 = _mm_movehdup_ps( phasor.vec );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     x2 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     x0 = __builtin_ia32_addsubps( x0, x2 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -101,18 +102,18 @@ void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ multiply_complex_vector( gr_complex const * const x,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   gr_complex const * const y, gr_complex * const out, int vlen )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  v4sfc * vx = reinterpret_cast< v4sfc * >( x );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  v4sfc * vy = reinterpret_cast< v4sfc * >( y );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const v4sfc * vx = reinterpret_cast< const v4sfc * >( x );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const v4sfc * vy = reinterpret_cast< const v4sfc * >( y );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   v4sf * vout = reinterpret_cast< v4sf * >( out );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   for( int j = 0; j < vlen/2; ++j )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    v4sf x0 = __builtin_ia32_movsldup( vx[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    v4sf x0 = _mm_moveldup_ps( vx[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     v4sf x1 = vy[ j ];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     x0 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    x1 = __builtin_ia32_shufps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    v4sf x2 = __builtin_ia32_movshdup( vx[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    x1 = _mm_shuffle_ps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    v4sf x2 = _mm_movehdup_ps( vx[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     x2 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     x0 = __builtin_ia32_addsubps( x0, x2 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/include/ofdm/ofdmi_mod.h b/include/ofdm/ofdmi_mod.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index ce828a4..896f86b 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/include/ofdm/ofdmi_mod.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/include/ofdm/ofdmi_mod.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -207,10 +207,10 @@ private:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const generic_modulation_scheme<3> mod;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  static const float d_pi_8 = M_PI / 8.0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  static const float d_7pi_8 = 7.0 * M_PI / 8.0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  static const float d_3pi_8 = 3.0 * M_PI / 8.0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  static const float d_5pi_8 = 5.0 * M_PI / 8.0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const float d_pi_8 = M_PI / 8.0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const float d_7pi_8 = 7.0 * M_PI / 8.0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const float d_3pi_8 = 3.0 * M_PI / 8.0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const float d_5pi_8 = 5.0 * M_PI / 8.0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   inline m8psk_scheme() : modulation_scheme(3) {};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -250,7 +250,7 @@ class m16qam_scheme : public modulation_scheme
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ private:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const generic_modulation_scheme<4> mod;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  static const float level_0 = 0.6325;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const float level_0 = 0.6325;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   inline m16qam_scheme() : modulation_scheme(4) {};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -350,9 +350,9 @@ class m64qam_scheme : public modulation_scheme
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ private:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const generic_modulation_scheme<6> mod;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  static const float level = 0.3086;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  static const float level2 = 0.3086*2.0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  static const float level3 = 0.3086*3.0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const float level = 0.3086;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const float level2 = 0.3086*2.0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const float level3 = 0.3086*3.0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   inline m64qam_scheme() : modulation_scheme(6) {};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 959c59c..f3a83b9 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -167,7 +167,7 @@ list(APPEND ofdm_sources
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     fbmc_subchannel_processing_mu_vcvc_impl.cc 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     feedback_sink_vf_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     vector_element_vff_impl.cc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-SET ( CMAKE_CXX_FLAGS "-O3 -march=core2 -mfpmath=sse" )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++SET ( CMAKE_CXX_FLAGS "-O3 -msse3 -march=core2 -mfpmath=sse" )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_library(gnuradio-ofdm SHARED ${ofdm_sources})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ target_link_libraries(gnuradio-ofdm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${Boost_LIBRARIES}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/CTF_MSE_enhancer_impl.cc b/lib/CTF_MSE_enhancer_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b681480..ddc1458 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/CTF_MSE_enhancer_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/CTF_MSE_enhancer_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -27,7 +27,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <gnuradio/io_signature.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "CTF_MSE_enhancer_impl.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <pmmintrin.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "malloc16.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <iostream>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -168,12 +168,12 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               for( int j = 0; j < d_vlen/4; ++j )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                v4sf x0 = __builtin_ia32_movsldup( vfbuf4[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                v4sf x0 = _mm_moveldup_ps( vfbuf4[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 v4sf x1 = vffilt[ j ];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 x0 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                x1 = __builtin_ia32_shufps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                v4sf x2 = __builtin_ia32_movshdup( vfbuf4[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                x1 = _mm_shuffle_ps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                v4sf x2 = _mm_movehdup_ps( vfbuf4[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 x2 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 x0 = __builtin_ia32_addsubps( x0, x2 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/accumulator_cc_impl.cc b/lib/accumulator_cc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 5c820ae..4fa6e3a 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/accumulator_cc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/accumulator_cc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -70,6 +70,7 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             d_accum = acc;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return(noutput_items);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } /* namespace ofdm */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/allocation_buffer_impl.cc b/lib/allocation_buffer_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a8368e6..5b7bc1c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/allocation_buffer_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/allocation_buffer_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -51,7 +51,7 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           , d_data_symbols(data_symbols)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           , d_allocation_buffer(256) //TODO: id size hardcoded
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           ,d_coding( coding )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          ,d_bitspermode( {1,2,3,4,6,8,9,10,12})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          ,d_bitspermode{1,2,3,4,6,8,9,10,12}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         std::vector<int> out_sig(3);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         out_sig[0] = sizeof(int);                               // bitcount
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/allocation_src_impl.cc b/lib/allocation_src_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 17dc029..84c8c9b 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/allocation_src_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/allocation_src_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -62,8 +62,8 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         ,d_subcarriers(subcarriers)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         ,d_data_symbols(data_symbols)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         ,d_coding( coding )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        ,d_bitspermode( {1,2,3,4,6,8,9,10,12})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        ,d_modulbitspermode( {1,2,2,4,4,6,6,6,8} )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ,d_bitspermode{1,2,3,4,6,8,9,10,12}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ,d_modulbitspermode{1,2,2,4,4,6,6,6,8}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         ,d_modulbitcount_out(2000)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         ,d_allocation_scheme(CM)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         ,d_power_limit(subcarriers)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/autocorrelator_stage1_impl.cc b/lib/autocorrelator_stage1_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 61d6609..fd95a8e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/autocorrelator_stage1_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/autocorrelator_stage1_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -27,6 +27,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <gnuradio/io_signature.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "autocorrelator_stage1_impl.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <iostream>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <pmmintrin.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   namespace ofdm {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -105,24 +106,24 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               v4sf const in_del0 = *in_del;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               v4sf const in_del1 = *(in_del+1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              v4sf x0 = __builtin_ia32_movsldup( in0 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              v4sf x1 = __builtin_ia32_xorps( in_del0, xsign ); // conjugate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++              v4sf x0 = _mm_moveldup_ps( in0 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++              v4sf x1 = _mm_xor_ps( in_del0, xsign ); // conjugate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               x0 *=  x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              x1 = __builtin_ia32_shufps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              v4sf x2 = __builtin_ia32_movshdup( in0 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++              x1 = _mm_shuffle_ps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++              v4sf x2 = _mm_movehdup_ps( in0 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               x2 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               x0 = __builtin_ia32_addsubps( x0, x2 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               p[0] = x0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              x0 = __builtin_ia32_movsldup( in1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              x1 = __builtin_ia32_xorps( in_del1, xsign ); // conjugate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++              x0 = _mm_moveldup_ps( in1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++              x1 = _mm_xor_ps( in_del1, xsign ); // conjugate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               x0 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              x1 = __builtin_ia32_shufps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-              x2 = __builtin_ia32_movshdup( in1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++              x1 = _mm_shuffle_ps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++              x2 = _mm_movehdup_ps( in1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               x2 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               x0 = __builtin_ia32_addsubps( x0, x2 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/autocorrelator_stage2_impl.cc b/lib/autocorrelator_stage2_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 93b5240..d897b4c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/autocorrelator_stage2_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/autocorrelator_stage2_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -26,6 +26,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <gnuradio/io_signature.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "autocorrelator_stage2_impl.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <xmmintrin.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   namespace ofdm {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -78,8 +79,8 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             float      acc2 = d_acc2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             // use references for simpler access
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            float & x = acc1.real();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            float & y = acc1.imag();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            const float & x = acc1.real();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            const float & y = acc1.imag();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             // NOTE: GCC performs better if we use temporary constants for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             // every expression
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/channel_equalizer_impl.cc b/lib/channel_equalizer_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f77323c..031a077 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/channel_equalizer_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/channel_equalizer_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -31,6 +31,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <algorithm>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "malloc16.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <pmmintrin.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define DEBUG 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -158,12 +159,12 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 for( int j = 0; j < d_vlen/2; ++j )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                  v4sf x0 = __builtin_ia32_movsldup( vin[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  v4sf x0 = _mm_moveldup_ps( vin[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   v4sf x1 = vbuf[ j ];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   x0 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                  x1 = __builtin_ia32_shufps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                  v4sf x2 = __builtin_ia32_movshdup( vin[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  x1 = _mm_shuffle_ps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  v4sf x2 = _mm_movehdup_ps( vin[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   x2 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   x0 = __builtin_ia32_addsubps( x0, x2 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/depuncture_bb_impl.cc b/lib/depuncture_bb_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index efb199c..833703a 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/depuncture_bb_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/depuncture_bb_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -59,7 +59,7 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           , d_need_modemap( 1 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           , d_modemap(new char[vlen])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   //d_rep_per_mode( {1,1,1,1,1,1,1,1,1} ) // test case
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          , d_rep_per_mode( {2,4,1,8,2,4,3,2,4} )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        , d_rep_per_mode{2,4,1,8,2,4,3,2,4} // C++11 only: consider std::array
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     void depuncture_bb_impl::set_punctpat(char c_mode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/depuncture_ff_impl.cc b/lib/depuncture_ff_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index be50800..0c6f2d5 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/depuncture_ff_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/depuncture_ff_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -59,7 +59,7 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           , d_need_modemap( 1 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           , d_modemap(new char[vlen])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   //d_rep_per_mode( {1,1,1,1,1,1,1,1,1} ) // test case
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          , d_rep_per_mode( {2,4,1,8,2,4,3,2,4} )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        , d_rep_per_mode{2,4,1,8,2,4,3,2,4} // C++11 only: consider std::array
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     void depuncture_ff_impl::set_punctpat(char c_mode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/extract_block_from_frame_impl.cc b/lib/extract_block_from_frame_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 42e60c6..4e99573 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/extract_block_from_frame_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/extract_block_from_frame_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -91,7 +91,7 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               if( frame_start[i] != 0 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                d_ctr == 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                d_ctr = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               if( d_ctr < d_block_no )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/fbmc_polyphase_network_vcvc_impl.cc b/lib/fbmc_polyphase_network_vcvc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 98368f0..dfc4eb3 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/fbmc_polyphase_network_vcvc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/fbmc_polyphase_network_vcvc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -91,9 +91,9 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // coefficients
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     float **P = new float*[3];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    float P0[]={1, sqrt(2)/2}; //K=2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    float P0[]={1, sqrtf(2)/2}; //K=2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     float P1[]={1,0.911438,0.411438}; //K=3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    float P2[]={1,0.97195983,sqrt(2)/2,0.23514695}; //K=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    float P2[]={1,0.97195983,sqrtf(2)/2,0.23514695}; //K=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     P[0] = P0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     P[1] = P1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     P[2] = P2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/fbmc_subchannel_processing_mu_vcvc_impl.cc b/lib/fbmc_subchannel_processing_mu_vcvc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index bb96f3d..c364de4 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/fbmc_subchannel_processing_mu_vcvc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/fbmc_subchannel_processing_mu_vcvc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -241,17 +241,18 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           gr_complex EQ1, EQ2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           if(d_sel_eq==1){ // linear interpolation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                                  EQ1 = (EQmin+EQi)/gr_complex(2,0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                                  EQ2 = (EQplus+EQi)/gr_complex(2,0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                                  const float ro = 0.5;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                                  EQ1 = (EQmin+EQi)*ro;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                                  EQ2 = (EQplus+EQi)*ro;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           }else if(d_sel_eq==2){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                                  float ro = 0.5;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                                  EQ1 = (gr_complex)EQmin*pow((EQi/EQmin),ro);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                  EQ2 = (gr_complex)EQi*pow((EQplus/EQi),ro);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                                  const float ro = 0.5;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                                  EQ1 = EQmin*pow((EQi/EQmin),ro);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                                  EQ2 = EQi*pow((EQplus/EQi),ro);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                          d_eq_coef[i]= pow(gr_complex(-1,0),i)*((EQ1-gr_complex(2,0)*EQi+EQ2)+gr_complex(0,1)*(EQ2-EQ1))/gr_complex(4,0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                          d_eq_coef[i+d_M]= (gr_complex)(EQ1+EQ2)/gr_complex(2,0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                          d_eq_coef[i+2*d_M]= pow(gr_complex(-1,0),i)*((EQ1-gr_complex(2,0)*EQi+EQ2)-gr_complex(0,1)*(EQ2-EQ1))/gr_complex(4,0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                          d_eq_coef[i]= powf(-1.0,i)*((EQ1-(float(2.0)*EQi)+EQ2)+(gr_complex(0.0,1.0)*(EQ2-EQ1)))/float(4.0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                          d_eq_coef[i+d_M]= (EQ1+EQ2)/float(2.0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                          d_eq_coef[i+2*d_M]= powf(-1.0,i)*((EQ1-(float(2.0)*EQi)+EQ2)-(gr_complex(0.0,1.0)*(EQ2-EQ1)))/float(4.0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           // //logging
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                           // equalizer_data<<(fr-1)<<"\t"<<i<<"\t"<<real(d_estimation[i])<<"\t"<<imag(d_estimation[i])<<"j\t";//((imag(d_estimation[i])>0)?"+":"-")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/fbmc_subchannel_processing_vcvc_impl.cc b/lib/fbmc_subchannel_processing_vcvc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index df46abd..3625d24 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/fbmc_subchannel_processing_vcvc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/fbmc_subchannel_processing_vcvc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -457,6 +457,7 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           fbmc_subchannel_processing_vcvc_impl::get_estimation(const gr_complex * start)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   // int offset = estimation_point - d_M+1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if 0                  
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*                        for(int i=0;i<d_M;i++){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           d_estimation[i] = *(start-d_M+i+1)/(d_preamble[i]*normalization_factor);//*gr_complex(0.6863,0));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           // // *(start-d_M+i+1) = d_estimation[i];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -480,10 +481,10 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           volk_32f_x2_divide_32f(&d_divide[0],&d_norm_vect[0],&d_squared[0],d_M);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           volk_32fc_32f_multiply_32fc(&d_estimation[0],&d_conj[0],&d_divide[0],d_M);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           volk_32fc_32f_multiply_32fc(&d_conj[0],start,&d_preamble_1[0],d_M);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           volk_32fc_32f_multiply_32fc(&d_estimation[0],&d_conj[0],&d_norm_vect[0],d_M);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           std::cout<<"FRAME: "<<std::endl;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           for(int i=0;i<d_M/2;i++){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -518,6 +519,7 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           volk_32f_x2_add_32f(&d_estimation_q[0],&d_estimation_1_q[0],&d_estimation_2_q[0],d_M);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           volk_32f_x2_interleave_32fc(&d_estimation[0],&d_estimation_i[0],&d_estimation_q[0],d_M);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           //std::cout<<"FRAME: "<<std::endl;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           for(int i=0;i<d_M/2;i++){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           //      std::cout<<d_estimation[i]<<std::endl;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -549,25 +551,26 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           gr_complex EQ1, EQ2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           if(d_sel_eq==1){ // linear interpolation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                  EQ1 = (EQmin+EQi)/gr_complex(2,0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                  EQ2 = (EQplus+EQi)/gr_complex(2,0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  float ro = 0.5;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                        EQ1 = (EQmin+EQi)*ro;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  EQ2 = (EQplus+EQi)*ro;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           }else if(d_sel_eq==2){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                   float ro = 0.5;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                  EQ1 = (gr_complex)EQmin*pow((EQi/EQmin),ro);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                  EQ2 = (gr_complex)EQi*pow((EQplus/EQi),ro);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  EQ1 = EQmin*pow((EQi/EQmin),ro);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  EQ2 = EQi*pow((EQplus/EQi),ro);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           // 0:2-> new implementation, 3< -> old implementation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           if(order == 0){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                  d_eq_coef[i+2*d_M]= pow(gr_complex(-1,0),i)*((EQ1-gr_complex(2,0)*EQi+EQ2)-gr_complex(0,1)*(EQ2-EQ1))/gr_complex(4,0); // change this first
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  d_eq_coef[i+2*d_M]= powf(-1.0,i)*((EQ1-(float(2.0)*EQi)+EQ2)-(gr_complex(0,1)*(EQ2-EQ1)))/float(4.0); // change this first
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           }else if (order == 1){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                  d_eq_coef[i+d_M]= (gr_complex)(EQ1+EQ2)/gr_complex(2,0); // then this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  d_eq_coef[i+d_M]= (EQ1+EQ2)/float(2.0); // then this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           }else if(order == 2){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                  d_eq_coef[i]= pow(gr_complex(-1,0),i)*((EQ1-gr_complex(2,0)*EQi+EQ2)+gr_complex(0,1)*(EQ2-EQ1))/gr_complex(4,0); // lastly this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  d_eq_coef[i]= powf(-1.0,i)*((EQ1-(float(2.0)*EQi)+EQ2)+(gr_complex(0,1)*(EQ2-EQ1)))/float(4.0); // lastly this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           }else{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                  d_eq_coef[i]= pow(gr_complex(-1,0),i)*((EQ1-gr_complex(2,0)*EQi+EQ2)+gr_complex(0,1)*(EQ2-EQ1))/gr_complex(4,0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                  d_eq_coef[i+d_M]= (gr_complex)(EQ1+EQ2)/gr_complex(2,0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                  d_eq_coef[i+2*d_M]= pow(gr_complex(-1,0),i)*((EQ1-gr_complex(2,0)*EQi+EQ2)-gr_complex(0,1)*(EQ2-EQ1))/gr_complex(4,0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  d_eq_coef[i]= powf(-1.0,i)*((EQ1-(float(2.0)*EQi)+EQ2)+(gr_complex(0,1)*(EQ2-EQ1)))/float(4.0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  d_eq_coef[i+d_M]= (EQ1+EQ2)/float(2.0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  d_eq_coef[i+2*d_M]= powf(-1.0,i)*((EQ1-(float(2.0)*EQi)+EQ2)-(gr_complex(0,1)*(EQ2-EQ1)))/float(4.0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           // //logging
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/find_cir_shift_impl.cc b/lib/find_cir_shift_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f3a2500..96f6635 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/find_cir_shift_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/find_cir_shift_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -27,6 +27,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <gnuradio/io_signature.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "find_cir_shift_impl.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <pmmintrin.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "malloc16.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <iostream>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -160,12 +161,12 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               for( int j = 0; j < d_vlen/4; ++j )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                v4sf x0 = __builtin_ia32_movsldup( vfbuf4[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                v4sf x0 = _mm_moveldup_ps( vfbuf4[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 v4sf x1 = vffilt[ j ];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 x0 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                x1 = __builtin_ia32_shufps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                v4sf x2 = __builtin_ia32_movshdup( vfbuf4[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                x1 = _mm_shuffle_ps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                v4sf x2 = _mm_movehdup_ps( vfbuf4[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 x2 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 x0 = __builtin_ia32_addsubps( x0, x2 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/itpp_tdl_channel_impl.cc b/lib/itpp_tdl_channel_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index ee0938f..cb2050f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/itpp_tdl_channel_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/itpp_tdl_channel_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -359,6 +359,7 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       assert(0 && "failed to translate");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      return((T2)(-1));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     template < typename T1, typename T2 >
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -373,6 +374,7 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       assert(0 && "failed to translate");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      return((T1)(-1));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     #define ENUM_FIRST_TO_SECOND( x )     \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/multiply_const_vcc_impl.cc b/lib/multiply_const_vcc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 94bbfff..e8678c9 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/multiply_const_vcc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/multiply_const_vcc_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -27,6 +27,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <gnuradio/io_signature.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "multiply_const_vcc_impl.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <pmmintrin.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "malloc16.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <iostream>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -85,12 +86,12 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               for( int j = 0; j < d_vlen/2; ++j )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                v4sf x0 = __builtin_ia32_movsldup( buf[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                v4sf x0 = _mm_moveldup_ps( buf[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 v4sf x1 = in[ j ];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 x0 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                x1 = __builtin_ia32_shufps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                v4sf x2 = __builtin_ia32_movshdup( buf[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                x1 = _mm_shuffle_ps( x1, x1, 0xB1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                v4sf x2 = _mm_movehdup_ps( buf[ j ] );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 x2 *= x1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 x0 = __builtin_ia32_addsubps( x0, x2 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/puncture_bb_impl.cc b/lib/puncture_bb_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index eac25ca..13cc801 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/puncture_bb_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/puncture_bb_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -58,7 +58,7 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           , d_need_modemap( 1 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           , d_modemap(new char[vlen])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           //d_rep_per_mode( {1,1,1,1,1,1,1,1,1} ) // test case
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          , d_rep_per_mode( {2,4,1,8,2,4,3,2,4} )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        , d_rep_per_mode{2,4,1,8,2,4,3,2,4} // C++11 only: consider std::array
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           set_relative_rate(1.0/6.0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/schmidl_tm_rec_stage2_impl.cc b/lib/schmidl_tm_rec_stage2_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 60835db..ce128af 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/schmidl_tm_rec_stage2_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/schmidl_tm_rec_stage2_impl.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -81,8 +81,8 @@ namespace gr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             float      acc3 = d_acc3;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             // use references for simpler access
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            float & x = acc1.real();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            float & y = acc1.imag();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            const float & x = acc1.real();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            const float & y = acc1.imag();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             // NOTE: GCC performs better if we use temporary constants for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             // every expression
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/lib/util_bmp.cc b/lib/util_bmp.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e151a10..e29b4ed 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/lib/util_bmp.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/lib/util_bmp.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1,6 +1,5 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <stdio.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <cstdlib>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#include <malloc.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <ofdm/util_endian.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <ofdm/util_bmp.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/python/ofdm/CMakeLists.txt b/python/ofdm/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index d30b694..81de326 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/python/ofdm/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/python/ofdm/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -63,13 +63,8 @@ GR_PYTHON_INSTALL(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     transmit_path.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     fbmc_transmit_path.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     scfdma_receiver_cb.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    fbmc_insert_preamble_mu_vcvc.py DESTINATION bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-GR_PYTHON_INSTALL(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    FILES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    configparse.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    DESTINATION ${GR_PYTHON_DIR}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    fbmc_insert_preamble_mu_vcvc.py DESTINATION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ${CMAKE_INSTALL_PREFIX}/share/gnuradio/examples/ofdm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ GR_PYTHON_INSTALL(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -78,6 +73,7 @@ GR_PYTHON_INSTALL(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     autocorrelator.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     channel.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     common_options.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    configparse.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     delaylines.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     file_psd.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     fusb_options.py
</span></pre><pre style='margin:0'>

</pre>