From 51581e3597211532df59fdf553fc910a7d23c606 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20Zbyszy=C5=84ski?= <m.zbyszynski@gold.ac.uk>
Date: Mon, 20 Nov 2017 22:10:36 +0000
Subject: [PATCH] everything working except PiPo

---
 CMakeLists.txt         | 55 +++++++++++++++++++++++++++++++-------
 tests/rapidMixTest.cpp | 60 +++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 104 insertions(+), 11 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b8a5ab6..d006c67 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,11 +2,27 @@ cmake_minimum_required(VERSION 2.8.9)
 project (rapidmix)
 
 # The version number.
-set (rapidmix_VERSION_MAJOR 1)
-set (rapidmix_VERSION_MINOR 0)
+set (rapidmix_VERSION_MAJOR 2)
+set (rapidmix_VERSION_MINOR 2)
 
-set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
+include(CheckCXXCompilerFlag)
+CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
+CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
+if(COMPILER_SUPPORTS_CXX11)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+elseif(COMPILER_SUPPORTS_CXX0X)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
+else()
+        message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
+endif()
+
+# Compiler Flags
+set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -fPIC")
+set(CMAKE_CXX_FLAGS_DEBUG "-O0 -DJSON_DEBUG -fPIC")
+if (NOT CMAKE_BUILD_TYPE)
+    message(STATUS "No build type selected, default to Release")
+    set(CMAKE_BUILD_TYPE "Release")
+endif()
 
 # Main lib
 include_directories(${PROJECT_SOURCE_DIR}/src)
@@ -19,37 +35,56 @@ include_directories(dependencies/Maximilian)
 include_directories(dependencies/Maximilian/libs)
 include_directories(dependencies/pipo/src/include)
 include_directories(dependencies/pipo/src/host)
+include_directories(dependencies/pipo/src/modules)
+include_directories(dependencies/pipo/src/dependencies/rta)
+#__cplusplus not defined problem with line below
+#include_directories(dependencies/pipo/src/dependencies/rta/common)
 
 # Third party dependencies
 include_directories(dependencies/third_party/json)
 
+# Source Files
 file(GLOB_RECURSE RAPIDMIX_SRC "${PROJECT_SOURCE_DIR}/src/*.cpp")
 file(GLOB GVF_SRC "${PROJECT_SOURCE_DIR}/dependencies/GVF/GVF.cpp")
+
+# Maximilian
 file(GLOB MAXI_SRC "${PROJECT_SOURCE_DIR}/dependencies/Maximilian/maximilian.cpp")
 file(GLOB MAXI_SRC ${MAXI_SRC} "${PROJECT_SOURCE_DIR}/dependencies/Maximilian/libs/maxiFFT.cpp")
 file(GLOB MAXI_SRC ${MAXI_SRC} "${PROJECT_SOURCE_DIR}/dependencies/Maximilian/libs/fft.cpp")
+
+#PiPofile
+file(GLOB_RECURSE PIPO_SRC "${PROJECT_SOURCE_DIR}/dependencies/pipo/src/*")
+
+# RapidLib
 file(GLOB RAPIDLIB_SRC "${PROJECT_SOURCE_DIR}/dependencies/RapidLib/src/*.cpp")
 file(GLOB RAPIDLIB_DEP "${PROJECT_SOURCE_DIR}/dependencies/RapidLib/dependencies/libsvm/libsvm.cpp")
-file(GLOB JSON_SRC "${PROJECT_SOURCE_DIR}/dependencies/third_party/jsoncpp.cpp")
 
+# XMM
+file(GLOB_RECURSE XMM_SRC "${PROJECT_SOURCE_DIR}/dependencies/xmm/src/*")
+
+file(GLOB JSON_SRC "${PROJECT_SOURCE_DIR}/dependencies/third_party/jsoncpp.cpp")
 
-#Set the source for the main library, using the groups defined above
+# Set the source for the main library, using the groups defined above
 set(RAPIDMIX_FULL_SRC ${RAPIDMIX_SRC} 
 		      ${GVF_SRC} 
-		      ${MAXI_SRC} 
+		      ${MAXI_SRC}
+#		      ${PIPO_SRC} 
 		      ${RAPIDLIB_SRC} 
 		      ${RAPIDLIB_DEP}
+		      ${XMM_SRC}	     
 		      ${JSON_SRC}
 		      )
 
-add_library(RMIX ${RAPIDMIX_FULL_SRC})
+add_library(RAPID-MIX_API ${RAPIDMIX_FULL_SRC})
 
-add_executable(rapidmix tests/rapidMixTest.cpp )
+add_executable(rapidmixTest tests/rapidMixTest.cpp )
 
 if (APPLE)
    find_library(ACCELERATE Accelerate)
    if (NOT ACCELERATE)
       message(FATAL_ERROR "Accelearate not found")
       endif()
-   target_link_libraries(rapidmix RMIX ${ACCELERATE})
+      target_link_libraries(rapidmixTest RAPID-MIX_API ${ACCELERATE})
+else()
+	target_link_libraries(rapidmixTest RAPID-MIX_API)
 endif()
diff --git a/tests/rapidMixTest.cpp b/tests/rapidMixTest.cpp
index 470109f..2286eca 100644
--- a/tests/rapidMixTest.cpp
+++ b/tests/rapidMixTest.cpp
@@ -54,6 +54,64 @@ int main() {
     assert(myNN.run(inputVec)[0] == 12.596715279688549);
     std::cout << "staticRegression passed." << std::endl;
     
+    //////////////////////////////////////Test XMM
+    
+    rapidmix::xmmConfig xcfg;
+    xcfg.relativeRegularization = 0.1;
+    
+    rapidmix::trainingData myXmmData;
+    std::vector<double> myXmmInput;
+    std::vector<double> myXmmOutput;
+    
+    myXmmData.startRecording("lab1");
+    myXmmInput = { 0.2, 0.7 };
+    myXmmData.addElement(myXmmInput, myXmmOutput);
+    myXmmData.stopRecording();
+    
+    myXmmData.startRecording("lab2");
+    myXmmInput = { 0.8, 0.1 };
+    myXmmData.addElement(myXmmInput, myXmmOutput);
+    myXmmData.stopRecording();
+    
+    myXmmData.writeJSON("/var/tmp/testTrainingData.json");
+    
+    rapidmix::xmmStaticClassification myGmm(xcfg);
+    
+    myGmm.train(myXmmData);
+    
+    std::string filepath = "/var/tmp/modelSetDescription";
+    myGmm.writeJSON(filepath);
+    
+    myXmmInput = { 0.2, 0.7 };
+    
+    rapidmix::xmmStaticClassification myGmmFromFile;
+    myGmmFromFile.readJSON(filepath);
+    
+    assert(myGmm.run(myXmmInput)[0] == myGmmFromFile.run(myXmmInput)[0]);
+    std::cout << "xmm passed." << std::endl;
+    
+    /////////////////////////////////////Test pipo signal processing
+    
+    //rapidmix::pipoHost host;
+    
+    /////////////////////////////////////Test rapidStream signal processing
+    
+    rapidmix::rapidStream myProcessor(5); //create a processor with a window size of 5
+    myProcessor.pushToWindow(0.246);
+    myProcessor.pushToWindow(0.44);
+    myProcessor.pushToWindow(-0.228);
+    myProcessor.pushToWindow(0.402);
+    myProcessor.pushToWindow(-0.382);
+    
+    assert(myProcessor.maximum() == 0.44);
+    assert(myProcessor.minimum() == -0.382);
+    assert(myProcessor.sum() == 0.478);
+    assert(myProcessor.mean() == 0.09559999999999999);
+    assert(myProcessor.standardDeviation() == 0.33702557766436664);
+    assert(myProcessor.rms() == 0.3503221374677884);
+    
+    std::cout << "rapidStream passed." << std::endl;
+    
     /////////////////////////////////////Test Maxi signal processing
     
     rapidmix::FFT myFFT;
@@ -65,7 +123,7 @@ int main() {
     }
     
     assert(myFFT.spectralCentroid() == 3520.84277f);
-    std::cout << "maxi fft passed" << std::endl;
+    std::cout << "maxi fft passed." << std::endl;
     
     return 0;
 }
-- 
GitLab