mticatest.cpp
Go to the documentation of this file.00001 #include <iostream>
00002 #include <itpp/base/fastica.h>
00003 #include <itpp/base/mat.h>
00004 #include <itpp/base/sigfun.h>
00005 #include <string>
00006 #include <fstream>
00007 #include "CUniformRNG.h"
00008 #include "TimeSeriesData.h"
00009 #include "statutils.h"
00010 #include <itpp/base/stat.h>
00011 using namespace std;
00012
00013 void WriteToFile(const itpp::Vec<double> &in,const itpp::Vec<double> &out,const string &base)
00014 {
00015 ofstream ints((base+".in").c_str());
00016
00017 ofstream outts((base+".out").c_str());
00018
00019 const int size = in.length();
00020
00021
00022
00023
00024
00025 for (int i = 0; i < size; ++i)
00026 {
00027 ints << in(i) << endl;
00028
00029 outts << out(i) << endl;
00030
00031 }
00032 }
00033
00034
00035 int main()
00036 {
00037 string datafilename, reffilename;
00038 TimeSeriesData MTData, RefData;
00039
00040 cout << "Data filename: ";
00041 cin >> datafilename;
00042 MTData.GetData(datafilename);
00043
00044
00045 cout << "Reference filename: ";
00046 cin >> reffilename;
00047 RefData.GetData(reffilename);
00048
00049 const size_t tslength = MTData.GetData().GetEx().GetData().size();
00050
00051 SubMean(MTData.GetData().GetHx().GetData().begin(),MTData.GetData().GetHx().GetData().end());
00052 SubMean(MTData.GetData().GetHy().GetData().begin(),MTData.GetData().GetHy().GetData().end());
00053 SubMean(RefData.GetData().GetHx().GetData().begin(),RefData.GetData().GetHx().GetData().end());
00054 SubMean(RefData.GetData().GetHy().GetData().begin(),RefData.GetData().GetHy().GetData().end());
00055
00056 const int nchannels =4;
00057 itpp::mat Input(nchannels,tslength);
00058 for (size_t i = 0; i < tslength; ++i)
00059 {
00060 Input(0,i) = MTData.GetData().GetHx().GetData().at(i);
00061 Input(1,i) = MTData.GetData().GetHy().GetData().at(i);
00062 Input(2,i) = RefData.GetData().GetHx().GetData().at(i);
00063 Input(3,i) = RefData.GetData().GetHy().GetData().at(i);
00064 }
00065 for (int i = 0; i < nchannels; ++i)
00066 cout << "Kurt " << i << ": "<< itpp::kurtosis(Input.get_row(i)) << endl;
00067 itpp::Fast_ICA fastica(Input);
00068 fastica.set_stabilization(true);
00069 fastica.set_nrof_independent_components(nchannels);
00070 fastica.set_non_linearity(FICA_NONLIN_GAUSS);
00071 fastica.set_approach(FICA_APPROACH_DEFL);
00072 fastica.separate();
00073 itpp::mat Output = fastica.get_independent_components();
00074 itpp::mat White = fastica.get_white_sig();
00075 WriteToFile(Input.get_row(0),Output.get_row(0),datafilename+".hx");
00076 WriteToFile(Input.get_row(1),Output.get_row(1),datafilename+".hy");
00077 WriteToFile(Input.get_row(2),Output.get_row(2),reffilename+".hx");
00078 WriteToFile(Input.get_row(3),Output.get_row(3),reffilename+".hy");
00079 cout << "Mix Mat: " << endl << fastica.get_mixing_matrix() << endl;
00080 cout << "Whit Mat: " << endl << fastica.get_whitening_matrix() << endl;
00081 }