From 2d326739f9b3f964424f47a61026c3d15fe7bc43 Mon Sep 17 00:00:00 2001 From: ehatzi Date: Fri, 25 Nov 2016 14:51:22 +0200 Subject: [PATCH 1/3] Added documentation --- .../@AggregatorBase/AggregatorBase.m | 20 + .../@ClassifierBase/ClassifierBase.m | 29 +- .../+experiment/@Experimenter/Experimenter.m | 14 +- .../FeatureExtractionBase.m | 18 + .../FeatureSelectionBase.m | 19 +- .../@PreprocessingBase/PreprocessingBase.m | 17 + +eegtoolkit/+util/@InstanceSet/InstanceSet.m | 58 +- +eegtoolkit/+util/@Session/Session.m | 33 +- +eegtoolkit/+util/@Trial/Trial.m | 17 +- .../@AggregatorBase/AggregatorBase.html | 101 +++ .../@AggregatorBase/AggregatorBase.m | 35 ++ .../+aggregation/@AggregatorBase/graph.dot | 6 + .../+aggregation/@AggregatorBase/graph.html | 28 + .../+aggregation/@AggregatorBase/graph.map | 1 + .../+aggregation/@AggregatorBase/graph.png | Bin 0 -> 5615 bytes .../+aggregation/@AggregatorBase/index.html | 32 + .../@ChannelAveraging/ChannelAveraging.html | 83 +++ .../@ChannelAveraging/ChannelAveraging.m | 33 + .../+aggregation/@ChannelAveraging/graph.dot | 6 + .../+aggregation/@ChannelAveraging/graph.html | 28 + .../+aggregation/@ChannelAveraging/graph.map | 1 + .../+aggregation/@ChannelAveraging/graph.png | Bin 0 -> 6156 bytes .../+aggregation/@ChannelAveraging/index.html | 32 + .../@ChannelConcat/ChannelConcat.html | 84 +++ .../@ChannelConcat/ChannelConcat.m | 34 + .../+aggregation/@ChannelConcat/graph.dot | 6 + .../+aggregation/@ChannelConcat/graph.html | 28 + .../+aggregation/@ChannelConcat/graph.map | 1 + .../+aggregation/@ChannelConcat/graph.png | Bin 0 -> 5232 bytes .../+aggregation/@ChannelConcat/index.html | 32 + .../@ChannelRatio/ChannelRatio.html | 83 +++ .../+aggregation/@ChannelRatio/ChannelRatio.m | 33 + .../+aggregation/@ChannelRatio/graph.dot | 6 + .../+aggregation/@ChannelRatio/graph.html | 28 + .../+aggregation/@ChannelRatio/graph.map | 1 + .../+aggregation/@ChannelRatio/graph.png | Bin 0 -> 5235 bytes .../+aggregation/@ChannelRatio/index.html | 32 + .../+aggregation/@Fisher/Fisher.html | 147 +++++ doc/+eegtoolkit/+aggregation/@Fisher/Fisher.m | 97 +++ .../+aggregation/@Fisher/graph.dot | 6 + .../+aggregation/@Fisher/graph.html | 28 + .../+aggregation/@Fisher/graph.map | 1 + .../+aggregation/@Fisher/graph.png | Bin 0 -> 3685 bytes .../+aggregation/@Fisher/index.html | 32 + .../+aggregation/@LateFusion/LateFusion.html | 81 +++ .../+aggregation/@LateFusion/LateFusion.m | 31 + .../+aggregation/@LateFusion/graph.dot | 6 + .../+aggregation/@LateFusion/graph.html | 28 + .../+aggregation/@LateFusion/graph.map | 1 + .../+aggregation/@LateFusion/graph.png | Bin 0 -> 4775 bytes .../+aggregation/@LateFusion/index.html | 32 + doc/+eegtoolkit/+aggregation/@VLAD/VLAD.html | 133 ++++ doc/+eegtoolkit/+aggregation/@VLAD/VLAD.m | 83 +++ doc/+eegtoolkit/+aggregation/@VLAD/graph.dot | 6 + doc/+eegtoolkit/+aggregation/@VLAD/graph.html | 28 + doc/+eegtoolkit/+aggregation/@VLAD/graph.map | 1 + doc/+eegtoolkit/+aggregation/@VLAD/graph.png | Bin 0 -> 3831 bytes doc/+eegtoolkit/+aggregation/@VLAD/index.html | 32 + .../+classification/@Adaboost/Adaboost.html | 181 ++++++ .../+classification/@Adaboost/Adaboost.m | 131 ++++ .../+classification/@Adaboost/graph.dot | 6 + .../+classification/@Adaboost/graph.html | 28 + .../+classification/@Adaboost/graph.map | 1 + .../+classification/@Adaboost/graph.png | Bin 0 -> 4358 bytes .../+classification/@Adaboost/index.html | 32 + .../@CSPWrapper/CSPWrapper.html | 183 ++++++ .../+classification/@CSPWrapper/CSPWrapper.m | 133 ++++ .../+classification/@CSPWrapper/graph.dot | 6 + .../+classification/@CSPWrapper/graph.html | 28 + .../+classification/@CSPWrapper/graph.map | 1 + .../+classification/@CSPWrapper/graph.png | Bin 0 -> 5343 bytes .../+classification/@CSPWrapper/index.html | 32 + .../@ClassifierBase/ClassifierBase.html | 115 ++++ .../@ClassifierBase/ClassifierBase.m | 42 ++ .../+classification/@ClassifierBase/graph.dot | 6 + .../@ClassifierBase/graph.html | 28 + .../+classification/@ClassifierBase/graph.map | 1 + .../+classification/@ClassifierBase/graph.png | Bin 0 -> 5275 bytes .../@ClassifierBase/index.html | 32 + .../+classification/@CombiCCA/CombiCCA.html | 223 +++++++ .../+classification/@CombiCCA/CombiCCA.m | 173 +++++ .../+classification/@CombiCCA/graph.dot | 6 + .../+classification/@CombiCCA/graph.html | 28 + .../+classification/@CombiCCA/graph.map | 1 + .../+classification/@CombiCCA/graph.png | Bin 0 -> 4664 bytes .../+classification/@CombiCCA/index.html | 32 + .../FusionClassifierWrapper.html | 121 ++++ .../FusionClassifierWrapper.m | 71 +++ .../@FusionClassifierWrapper/graph.dot | 6 + .../@FusionClassifierWrapper/graph.html | 28 + .../@FusionClassifierWrapper/graph.map | 1 + .../@FusionClassifierWrapper/graph.png | Bin 0 -> 7050 bytes .../@FusionClassifierWrapper/index.html | 32 + .../+classification/@ITCCA/ITCCA.html | 256 ++++++++ .../+classification/@ITCCA/ITCCA.m | 206 ++++++ .../+classification/@ITCCA/graph.dot | 6 + .../+classification/@ITCCA/graph.html | 28 + .../+classification/@ITCCA/graph.map | 1 + .../+classification/@ITCCA/graph.png | Bin 0 -> 3828 bytes .../+classification/@ITCCA/index.html | 32 + .../+classification/@L1MCCA/L1MCCA.html | 289 +++++++++ .../+classification/@L1MCCA/L1MCCA.m | 239 +++++++ .../+classification/@L1MCCA/graph.dot | 6 + .../+classification/@L1MCCA/graph.html | 28 + .../+classification/@L1MCCA/graph.map | 1 + .../+classification/@L1MCCA/graph.png | Bin 0 -> 4313 bytes .../+classification/@L1MCCA/index.html | 32 + doc/+eegtoolkit/+classification/@LDA/LDA.html | 131 ++++ doc/+eegtoolkit/+classification/@LDA/LDA.m | 81 +++ .../+classification/@LDA/graph.dot | 6 + .../+classification/@LDA/graph.html | 28 + .../+classification/@LDA/graph.map | 1 + .../+classification/@LDA/graph.png | Bin 0 -> 3410 bytes .../+classification/@LDA/index.html | 32 + .../+classification/@LIBSVM/LIBSVM.html | 166 +++++ .../+classification/@LIBSVM/LIBSVM.m | 114 ++++ .../+classification/@LIBSVM/graph.dot | 6 + .../+classification/@LIBSVM/graph.html | 28 + .../+classification/@LIBSVM/graph.map | 1 + .../+classification/@LIBSVM/graph.png | Bin 0 -> 4367 bytes .../+classification/@LIBSVM/index.html | 32 + .../@LIBSVMFast/LIBSVMFast.html | 174 ++++++ .../+classification/@LIBSVMFast/LIBSVMFast.m | 124 ++++ .../+classification/@LIBSVMFast/graph.dot | 6 + .../+classification/@LIBSVMFast/graph.html | 28 + .../+classification/@LIBSVMFast/graph.map | 1 + .../+classification/@LIBSVMFast/graph.png | Bin 0 -> 5360 bytes .../+classification/@LIBSVMFast/index.html | 32 + .../+classification/@MLDA/MLDA.html | 183 ++++++ doc/+eegtoolkit/+classification/@MLDA/MLDA.m | 133 ++++ .../+classification/@MLDA/graph.dot | 6 + .../+classification/@MLDA/graph.html | 28 + .../+classification/@MLDA/graph.map | 1 + .../+classification/@MLDA/graph.png | Bin 0 -> 3961 bytes .../+classification/@MLDA/index.html | 32 + doc/+eegtoolkit/+classification/@MLR/MLR.html | 165 +++++ doc/+eegtoolkit/+classification/@MLR/MLR.m | 115 ++++ .../+classification/@MLR/graph.dot | 6 + .../+classification/@MLR/graph.html | 28 + .../+classification/@MLR/graph.map | 1 + .../+classification/@MLR/graph.png | Bin 0 -> 3476 bytes .../+classification/@MLR/index.html | 32 + .../+classification/@MLTREE/MLTREE.html | 190 ++++++ .../+classification/@MLTREE/MLTREE.m | 140 +++++ .../+classification/@MLTREE/graph.dot | 6 + .../+classification/@MLTREE/graph.html | 28 + .../+classification/@MLTREE/graph.map | 1 + .../+classification/@MLTREE/graph.png | Bin 0 -> 4287 bytes .../+classification/@MLTREE/index.html | 32 + .../@MLTboxMulticlass/MLTboxMulticlass.html | 154 +++++ .../@MLTboxMulticlass/MLTboxMulticlass.m | 104 ++++ .../@MLTboxMulticlass/graph.dot | 6 + .../@MLTboxMulticlass/graph.html | 28 + .../@MLTboxMulticlass/graph.map | 1 + .../@MLTboxMulticlass/graph.png | Bin 0 -> 6135 bytes .../@MLTboxMulticlass/index.html | 32 + .../@MaxChooser/MaxChooser.html | 104 ++++ .../+classification/@MaxChooser/MaxChooser.m | 54 ++ .../+classification/@MaxChooser/graph.dot | 6 + .../+classification/@MaxChooser/graph.html | 28 + .../+classification/@MaxChooser/graph.map | 1 + .../+classification/@MaxChooser/graph.png | Bin 0 -> 5337 bytes .../+classification/@MaxChooser/index.html | 32 + .../+classification/@SBLR/SBLR.html | 138 ++++ doc/+eegtoolkit/+classification/@SBLR/SBLR.m | 88 +++ .../+classification/@SBLR/graph.dot | 6 + .../+classification/@SBLR/graph.html | 28 + .../+classification/@SBLR/graph.map | 1 + .../+classification/@SBLR/graph.png | Bin 0 -> 3710 bytes .../+classification/@SBLR/index.html | 32 + .../+classification/@SMFA/SMFA.html | 193 ++++++ doc/+eegtoolkit/+classification/@SMFA/SMFA.m | 143 +++++ .../+classification/@SMFA/graph.dot | 6 + .../+classification/@SMFA/graph.html | 28 + .../+classification/@SMFA/graph.map | 1 + .../+classification/@SMFA/graph.png | Bin 0 -> 3906 bytes .../+classification/@SMFA/index.html | 32 + .../@Experimenter/Experimenter.html | 455 ++++++++++++++ .../+experiment/@Experimenter/Experimenter.m | 381 +++++++++++ .../+experiment/@Experimenter/graph.dot | 6 + .../+experiment/@Experimenter/graph.html | 28 + .../+experiment/@Experimenter/graph.map | 1 + .../+experiment/@Experimenter/graph.png | Bin 0 -> 4968 bytes .../+experiment/@Experimenter/index.html | 32 + .../@ResultEvaluator/ResultEvaluator.html | 136 ++++ .../@ResultEvaluator/ResultEvaluator.m | 85 +++ .../+experiment/@ResultEvaluator/graph.dot | 6 + .../+experiment/@ResultEvaluator/graph.html | 28 + .../+experiment/@ResultEvaluator/graph.map | 1 + .../+experiment/@ResultEvaluator/graph.png | Bin 0 -> 5619 bytes .../+experiment/@ResultEvaluator/index.html | 32 + doc/+eegtoolkit/+featextraction/@CCA/CCA.html | 195 ++++++ doc/+eegtoolkit/+featextraction/@CCA/CCA.m | 145 +++++ .../+featextraction/@CCA/graph.dot | 6 + .../+featextraction/@CCA/graph.html | 28 + .../+featextraction/@CCA/graph.map | 1 + .../+featextraction/@CCA/graph.png | Bin 0 -> 3321 bytes .../+featextraction/@CCA/index.html | 32 + doc/+eegtoolkit/+featextraction/@DWT/DWT.html | 171 +++++ doc/+eegtoolkit/+featextraction/@DWT/DWT.m | 121 ++++ .../+featextraction/@DWT/graph.dot | 6 + .../+featextraction/@DWT/graph.html | 28 + .../+featextraction/@DWT/graph.map | 1 + .../+featextraction/@DWT/graph.png | Bin 0 -> 3596 bytes .../+featextraction/@DWT/index.html | 32 + .../@ERRPFeatures/ERRPFeatures.html | 86 +++ .../@ERRPFeatures/ERRPFeatures.m | 36 ++ .../+featextraction/@ERRPFeatures/graph.dot | 6 + .../+featextraction/@ERRPFeatures/graph.html | 28 + .../+featextraction/@ERRPFeatures/graph.map | 1 + .../+featextraction/@ERRPFeatures/graph.png | Bin 0 -> 5437 bytes .../+featextraction/@ERRPFeatures/index.html | 32 + doc/+eegtoolkit/+featextraction/@FFT/FFT.html | 139 +++++ doc/+eegtoolkit/+featextraction/@FFT/FFT.m | 89 +++ .../+featextraction/@FFT/graph.dot | 6 + .../+featextraction/@FFT/graph.html | 28 + .../+featextraction/@FFT/graph.map | 1 + .../+featextraction/@FFT/graph.png | Bin 0 -> 3054 bytes .../+featextraction/@FFT/index.html | 32 + .../FeatureExtractionBase.html | 134 ++++ .../FeatureExtractionBase.m | 69 ++ .../@FeatureExtractionBase/graph.dot | 6 + .../@FeatureExtractionBase/graph.html | 28 + .../@FeatureExtractionBase/graph.map | 1 + .../@FeatureExtractionBase/graph.png | Bin 0 -> 6637 bytes .../@FeatureExtractionBase/index.html | 32 + .../+featextraction/@Goertzel/Goertzel.html | 150 +++++ .../+featextraction/@Goertzel/Goertzel.m | 100 +++ .../+featextraction/@Goertzel/graph.dot | 6 + .../+featextraction/@Goertzel/graph.html | 28 + .../+featextraction/@Goertzel/graph.map | 1 + .../+featextraction/@Goertzel/graph.png | Bin 0 -> 4176 bytes .../+featextraction/@Goertzel/index.html | 32 + .../+featextraction/@L1MCCA/L1MCCA.html | 77 +++ .../+featextraction/@L1MCCA/L1MCCA.m | 27 + .../+featextraction/@L1MCCA/graph.dot | 6 + .../+featextraction/@L1MCCA/graph.html | 28 + .../+featextraction/@L1MCCA/graph.map | 1 + .../+featextraction/@L1MCCA/graph.png | Bin 0 -> 4313 bytes .../+featextraction/@L1MCCA/index.html | 32 + .../@MLR_Transf/MLR_Transf.html | 114 ++++ .../+featextraction/@MLR_Transf/MLR_Transf.m | 64 ++ .../+featextraction/@MLR_Transf/graph.dot | 6 + .../+featextraction/@MLR_Transf/graph.html | 28 + .../+featextraction/@MLR_Transf/graph.map | 1 + .../+featextraction/@MLR_Transf/graph.png | Bin 0 -> 5170 bytes .../+featextraction/@MLR_Transf/index.html | 32 + .../@PSDExtractionBase/PSDExtractionBase.html | 55 ++ .../@PSDExtractionBase/PSDExtractionBase.m | 7 + .../@PSDExtractionBase/graph.dot | 6 + .../@PSDExtractionBase/graph.html | 28 + .../@PSDExtractionBase/graph.map | 1 + .../@PSDExtractionBase/graph.png | Bin 0 -> 6642 bytes .../@PSDExtractionBase/index.html | 32 + .../+featextraction/@PWelch/PWelch.html | 167 +++++ .../+featextraction/@PWelch/PWelch.m | 117 ++++ .../+featextraction/@PWelch/graph.dot | 6 + .../+featextraction/@PWelch/graph.html | 28 + .../+featextraction/@PWelch/graph.map | 1 + .../+featextraction/@PWelch/graph.png | Bin 0 -> 4181 bytes .../+featextraction/@PWelch/index.html | 32 + .../PWelchExperimental.html | 183 ++++++ .../@PWelchExperimental/PWelchExperimental.m | 133 ++++ .../@PWelchExperimental/graph.dot | 6 + .../@PWelchExperimental/graph.html | 28 + .../@PWelchExperimental/graph.map | 1 + .../@PWelchExperimental/graph.png | Bin 0 -> 6940 bytes .../@PWelchExperimental/index.html | 32 + .../+featextraction/@PYAR/PYAR.html | 147 +++++ doc/+eegtoolkit/+featextraction/@PYAR/PYAR.m | 97 +++ .../+featextraction/@PYAR/graph.dot | 6 + .../+featextraction/@PYAR/graph.html | 28 + .../+featextraction/@PYAR/graph.map | 1 + .../+featextraction/@PYAR/graph.png | Bin 0 -> 3778 bytes .../+featextraction/@PYAR/index.html | 32 + .../+featextraction/@RawSignal/RawSignal.html | 77 +++ .../+featextraction/@RawSignal/RawSignal.m | 27 + .../+featextraction/@RawSignal/graph.dot | 6 + .../+featextraction/@RawSignal/graph.html | 28 + .../+featextraction/@RawSignal/graph.map | 1 + .../+featextraction/@RawSignal/graph.png | Bin 0 -> 4861 bytes .../+featextraction/@RawSignal/index.html | 32 + .../+featextraction/@STFT/STFT.html | 151 +++++ doc/+eegtoolkit/+featextraction/@STFT/STFT.m | 101 +++ .../+featextraction/@STFT/graph.dot | 6 + .../+featextraction/@STFT/graph.html | 28 + .../+featextraction/@STFT/graph.map | 1 + .../+featextraction/@STFT/graph.png | Bin 0 -> 3374 bytes .../+featextraction/@STFT/index.html | 32 + .../+featselection/@FEAST/FEAST.html | 126 ++++ doc/+eegtoolkit/+featselection/@FEAST/FEAST.m | 76 +++ .../+featselection/@FEAST/graph.dot | 6 + .../+featselection/@FEAST/graph.html | 28 + .../+featselection/@FEAST/graph.map | 1 + .../+featselection/@FEAST/graph.png | Bin 0 -> 3946 bytes .../+featselection/@FEAST/index.html | 32 + .../FeatureSelectionBase.html | 93 +++ .../FeatureSelectionBase.m | 31 + .../@FeatureSelectionBase/graph.dot | 6 + .../@FeatureSelectionBase/graph.html | 28 + .../@FeatureSelectionBase/graph.map | 1 + .../@FeatureSelectionBase/graph.png | Bin 0 -> 6599 bytes .../@FeatureSelectionBase/index.html | 32 + doc/+eegtoolkit/+featselection/@PCA/PCA.html | 82 +++ doc/+eegtoolkit/+featselection/@PCA/PCA.m | 32 + doc/+eegtoolkit/+featselection/@PCA/graph.dot | 6 + .../+featselection/@PCA/graph.html | 28 + doc/+eegtoolkit/+featselection/@PCA/graph.map | 1 + doc/+eegtoolkit/+featselection/@PCA/graph.png | Bin 0 -> 3438 bytes .../+featselection/@PCA/index.html | 32 + doc/+eegtoolkit/+featselection/@SVD/SVD.html | 82 +++ doc/+eegtoolkit/+featselection/@SVD/SVD.m | 32 + doc/+eegtoolkit/+featselection/@SVD/graph.dot | 6 + .../+featselection/@SVD/graph.html | 28 + doc/+eegtoolkit/+featselection/@SVD/graph.map | 1 + doc/+eegtoolkit/+featselection/@SVD/graph.png | Bin 0 -> 3482 bytes .../+featselection/@SVD/index.html | 32 + .../+preprocessing/@Amuse/Amuse.html | 152 +++++ doc/+eegtoolkit/+preprocessing/@Amuse/Amuse.m | 102 +++ .../+preprocessing/@Amuse/graph.dot | 6 + .../+preprocessing/@Amuse/graph.html | 28 + .../+preprocessing/@Amuse/graph.map | 1 + .../+preprocessing/@Amuse/graph.png | Bin 0 -> 3920 bytes .../+preprocessing/@Amuse/index.html | 32 + .../@DigitalFilter/DigitalFilter.html | 100 +++ .../@DigitalFilter/DigitalFilter.m | 50 ++ .../+preprocessing/@DigitalFilter/graph.dot | 6 + .../+preprocessing/@DigitalFilter/graph.html | 28 + .../+preprocessing/@DigitalFilter/graph.map | 1 + .../+preprocessing/@DigitalFilter/graph.png | Bin 0 -> 4874 bytes .../+preprocessing/@DigitalFilter/index.html | 32 + .../+preprocessing/@FastICA/FastICA.html | 97 +++ .../+preprocessing/@FastICA/FastICA.m | 47 ++ .../+preprocessing/@FastICA/graph.dot | 6 + .../+preprocessing/@FastICA/graph.html | 28 + .../+preprocessing/@FastICA/graph.map | 1 + .../+preprocessing/@FastICA/graph.png | Bin 0 -> 4316 bytes .../+preprocessing/@FastICA/index.html | 32 + .../@PreprocessingBase/PreprocessingBase.html | 95 +++ .../@PreprocessingBase/PreprocessingBase.m | 32 + .../@PreprocessingBase/graph.dot | 6 + .../@PreprocessingBase/graph.html | 28 + .../@PreprocessingBase/graph.map | 1 + .../@PreprocessingBase/graph.png | Bin 0 -> 6235 bytes .../@PreprocessingBase/index.html | 32 + .../@Rereferencing/Rereferencing.html | 95 +++ .../@Rereferencing/Rereferencing.m | 45 ++ .../+preprocessing/@Rereferencing/graph.dot | 6 + .../+preprocessing/@Rereferencing/graph.html | 28 + .../+preprocessing/@Rereferencing/graph.map | 1 + .../+preprocessing/@Rereferencing/graph.png | Bin 0 -> 5129 bytes .../+preprocessing/@Rereferencing/index.html | 32 + .../@SampleSelection/SampleSelection.html | 143 +++++ .../@SampleSelection/SampleSelection.m | 93 +++ .../+preprocessing/@SampleSelection/graph.dot | 6 + .../@SampleSelection/graph.html | 28 + .../+preprocessing/@SampleSelection/graph.map | 1 + .../+preprocessing/@SampleSelection/graph.png | Bin 0 -> 5780 bytes .../@SampleSelection/index.html | 32 + .../@Windsorize/Windsorize.html | 114 ++++ .../+preprocessing/@Windsorize/Windsorize.m | 64 ++ .../+preprocessing/@Windsorize/graph.dot | 6 + .../+preprocessing/@Windsorize/graph.html | 28 + .../+preprocessing/@Windsorize/graph.map | 1 + .../+preprocessing/@Windsorize/graph.png | Bin 0 -> 5066 bytes .../+preprocessing/@Windsorize/index.html | 32 + .../@FusionInstanceSet/FusionInstanceSet.html | 83 +++ .../@FusionInstanceSet/FusionInstanceSet.m | 33 + .../+util/@FusionInstanceSet/graph.dot | 6 + .../+util/@FusionInstanceSet/graph.html | 28 + .../+util/@FusionInstanceSet/graph.map | 1 + .../+util/@FusionInstanceSet/graph.png | Bin 0 -> 5944 bytes .../+util/@FusionInstanceSet/index.html | 32 + .../+util/@InstanceSet/InstanceSet.html | 327 ++++++++++ .../+util/@InstanceSet/InstanceSet.m | 238 +++++++ doc/+eegtoolkit/+util/@InstanceSet/graph.dot | 6 + doc/+eegtoolkit/+util/@InstanceSet/graph.html | 28 + doc/+eegtoolkit/+util/@InstanceSet/graph.map | 1 + doc/+eegtoolkit/+util/@InstanceSet/graph.png | Bin 0 -> 4769 bytes doc/+eegtoolkit/+util/@InstanceSet/index.html | 32 + .../@L1MCCAInstanceSet/L1MCCAInstanceSet.html | 125 ++++ .../@L1MCCAInstanceSet/L1MCCAInstanceSet.m | 74 +++ .../+util/@L1MCCAInstanceSet/graph.dot | 6 + .../+util/@L1MCCAInstanceSet/graph.html | 28 + .../+util/@L1MCCAInstanceSet/graph.map | 1 + .../+util/@L1MCCAInstanceSet/graph.png | Bin 0 -> 6710 bytes .../+util/@L1MCCAInstanceSet/index.html | 32 + .../+util/@LSLWrapper/LSLWrapper.html | 310 +++++++++ .../+util/@LSLWrapper/LSLWrapper.m | 260 ++++++++ doc/+eegtoolkit/+util/@LSLWrapper/graph.dot | 6 + doc/+eegtoolkit/+util/@LSLWrapper/graph.html | 28 + doc/+eegtoolkit/+util/@LSLWrapper/graph.map | 1 + doc/+eegtoolkit/+util/@LSLWrapper/graph.png | Bin 0 -> 5124 bytes doc/+eegtoolkit/+util/@LSLWrapper/index.html | 32 + .../+util/@RawSignalSet/RawSignalSet.html | 112 ++++ .../+util/@RawSignalSet/RawSignalSet.m | 62 ++ doc/+eegtoolkit/+util/@RawSignalSet/graph.dot | 6 + .../+util/@RawSignalSet/graph.html | 28 + doc/+eegtoolkit/+util/@RawSignalSet/graph.map | 1 + doc/+eegtoolkit/+util/@RawSignalSet/graph.png | Bin 0 -> 5436 bytes .../+util/@RawSignalSet/index.html | 32 + .../+util/@ResultSet/ResultSet.html | 111 ++++ doc/+eegtoolkit/+util/@ResultSet/ResultSet.m | 60 ++ doc/+eegtoolkit/+util/@ResultSet/graph.dot | 6 + doc/+eegtoolkit/+util/@ResultSet/graph.html | 28 + doc/+eegtoolkit/+util/@ResultSet/graph.map | 1 + doc/+eegtoolkit/+util/@ResultSet/graph.png | Bin 0 -> 4264 bytes doc/+eegtoolkit/+util/@ResultSet/index.html | 32 + doc/+eegtoolkit/+util/@Session/Session.html | 589 ++++++++++++++++++ doc/+eegtoolkit/+util/@Session/Session.m | 506 +++++++++++++++ doc/+eegtoolkit/+util/@Session/graph.dot | 6 + doc/+eegtoolkit/+util/@Session/graph.html | 28 + doc/+eegtoolkit/+util/@Session/graph.map | 1 + doc/+eegtoolkit/+util/@Session/graph.png | Bin 0 -> 3990 bytes doc/+eegtoolkit/+util/@Session/index.html | 32 + doc/+eegtoolkit/+util/@Trial/Trial.html | 115 ++++ doc/+eegtoolkit/+util/@Trial/Trial.m | 52 ++ doc/+eegtoolkit/+util/@Trial/graph.dot | 6 + doc/+eegtoolkit/+util/@Trial/graph.html | 28 + doc/+eegtoolkit/+util/@Trial/graph.map | 1 + doc/+eegtoolkit/+util/@Trial/graph.png | Bin 0 -> 3300 bytes doc/+eegtoolkit/+util/@Trial/index.html | 32 + doc/alpha.png | Bin 0 -> 273 bytes doc/c++.png | Bin 0 -> 327 bytes doc/c.png | Bin 0 -> 252 bytes doc/demoicon.gif | Bin 0 -> 214 bytes doc/down.png | Bin 0 -> 133 bytes doc/doxysearch.php | 329 ++++++++++ doc/exampleCSP.html | 87 +++ doc/exampleCSP.m | 39 ++ doc/exampleCombiCCA.html | 93 +++ doc/exampleCombiCCA.m | 45 ++ doc/exampleDefault.html | 97 +++ doc/exampleDefault.m | 45 ++ doc/exampleEPOCCCASVM.html | 105 ++++ doc/exampleEPOCCCASVM.m | 52 ++ doc/exampleERRP.html | 91 +++ doc/exampleERRP.m | 43 ++ doc/exampleEarlyFusion.html | 123 ++++ doc/exampleEarlyFusion.m | 65 ++ doc/exampleEpoc.html | 106 ++++ doc/exampleEpoc.m | 53 ++ doc/exampleITCCA.html | 90 +++ doc/exampleITCCA.m | 42 ++ doc/exampleL1MCCA.html | 89 +++ doc/exampleL1MCCA.m | 41 ++ doc/exampleLSL.html | 109 ++++ doc/exampleLSL.m | 60 ++ doc/exampleLateFusion.html | 126 ++++ doc/exampleLateFusion.m | 68 ++ doc/exampleMotorPWelch.html | 83 +++ doc/exampleMotorPWelch.m | 35 ++ doc/exampleOptimal.html | 107 ++++ doc/exampleOptimal.m | 55 ++ doc/exampleSMFA.html | 163 +++++ doc/exampleSMFA.m | 115 ++++ doc/fortran.png | Bin 0 -> 265 bytes doc/graph.dot | 18 + doc/graph.html | 41 ++ doc/graph.map | 14 + doc/graph.png | Bin 0 -> 45456 bytes doc/hp.png | Bin 0 -> 255 bytes doc/index.html | 34 + doc/left.png | Bin 0 -> 136 bytes doc/linux.png | Bin 0 -> 272 bytes doc/m2html.css | 90 +++ doc/matlabicon.gif | Bin 0 -> 574 bytes doc/mex.png | Bin 0 -> 242 bytes doc/pcode.png | Bin 0 -> 212 bytes doc/right.png | Bin 0 -> 136 bytes doc/sgi.png | Bin 0 -> 263 bytes doc/simulinkicon.gif | Bin 0 -> 977 bytes doc/solaris.png | Bin 0 -> 286 bytes doc/up.png | Bin 0 -> 162 bytes doc/windows.png | Bin 0 -> 286 bytes 475 files changed, 21889 insertions(+), 33 deletions(-) create mode 100644 doc/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.html create mode 100644 doc/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.m create mode 100644 doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.dot create mode 100644 doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.html create mode 100644 doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.map create mode 100644 doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.png create mode 100644 doc/+eegtoolkit/+aggregation/@AggregatorBase/index.html create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelAveraging/ChannelAveraging.html create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelAveraging/ChannelAveraging.m create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.dot create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.html create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.map create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.png create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelAveraging/index.html create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelConcat/ChannelConcat.html create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelConcat/ChannelConcat.m create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.dot create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.html create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.map create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.png create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelConcat/index.html create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelRatio/ChannelRatio.html create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelRatio/ChannelRatio.m create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.dot create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.html create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.map create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.png create mode 100644 doc/+eegtoolkit/+aggregation/@ChannelRatio/index.html create mode 100644 doc/+eegtoolkit/+aggregation/@Fisher/Fisher.html create mode 100644 doc/+eegtoolkit/+aggregation/@Fisher/Fisher.m create mode 100644 doc/+eegtoolkit/+aggregation/@Fisher/graph.dot create mode 100644 doc/+eegtoolkit/+aggregation/@Fisher/graph.html create mode 100644 doc/+eegtoolkit/+aggregation/@Fisher/graph.map create mode 100644 doc/+eegtoolkit/+aggregation/@Fisher/graph.png create mode 100644 doc/+eegtoolkit/+aggregation/@Fisher/index.html create mode 100644 doc/+eegtoolkit/+aggregation/@LateFusion/LateFusion.html create mode 100644 doc/+eegtoolkit/+aggregation/@LateFusion/LateFusion.m create mode 100644 doc/+eegtoolkit/+aggregation/@LateFusion/graph.dot create mode 100644 doc/+eegtoolkit/+aggregation/@LateFusion/graph.html create mode 100644 doc/+eegtoolkit/+aggregation/@LateFusion/graph.map create mode 100644 doc/+eegtoolkit/+aggregation/@LateFusion/graph.png create mode 100644 doc/+eegtoolkit/+aggregation/@LateFusion/index.html create mode 100644 doc/+eegtoolkit/+aggregation/@VLAD/VLAD.html create mode 100644 doc/+eegtoolkit/+aggregation/@VLAD/VLAD.m create mode 100644 doc/+eegtoolkit/+aggregation/@VLAD/graph.dot create mode 100644 doc/+eegtoolkit/+aggregation/@VLAD/graph.html create mode 100644 doc/+eegtoolkit/+aggregation/@VLAD/graph.map create mode 100644 doc/+eegtoolkit/+aggregation/@VLAD/graph.png create mode 100644 doc/+eegtoolkit/+aggregation/@VLAD/index.html create mode 100644 doc/+eegtoolkit/+classification/@Adaboost/Adaboost.html create mode 100644 doc/+eegtoolkit/+classification/@Adaboost/Adaboost.m create mode 100644 doc/+eegtoolkit/+classification/@Adaboost/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@Adaboost/graph.html create mode 100644 doc/+eegtoolkit/+classification/@Adaboost/graph.map create mode 100644 doc/+eegtoolkit/+classification/@Adaboost/graph.png create mode 100644 doc/+eegtoolkit/+classification/@Adaboost/index.html create mode 100644 doc/+eegtoolkit/+classification/@CSPWrapper/CSPWrapper.html create mode 100644 doc/+eegtoolkit/+classification/@CSPWrapper/CSPWrapper.m create mode 100644 doc/+eegtoolkit/+classification/@CSPWrapper/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@CSPWrapper/graph.html create mode 100644 doc/+eegtoolkit/+classification/@CSPWrapper/graph.map create mode 100644 doc/+eegtoolkit/+classification/@CSPWrapper/graph.png create mode 100644 doc/+eegtoolkit/+classification/@CSPWrapper/index.html create mode 100644 doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.html create mode 100644 doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m create mode 100644 doc/+eegtoolkit/+classification/@ClassifierBase/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@ClassifierBase/graph.html create mode 100644 doc/+eegtoolkit/+classification/@ClassifierBase/graph.map create mode 100644 doc/+eegtoolkit/+classification/@ClassifierBase/graph.png create mode 100644 doc/+eegtoolkit/+classification/@ClassifierBase/index.html create mode 100644 doc/+eegtoolkit/+classification/@CombiCCA/CombiCCA.html create mode 100644 doc/+eegtoolkit/+classification/@CombiCCA/CombiCCA.m create mode 100644 doc/+eegtoolkit/+classification/@CombiCCA/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@CombiCCA/graph.html create mode 100644 doc/+eegtoolkit/+classification/@CombiCCA/graph.map create mode 100644 doc/+eegtoolkit/+classification/@CombiCCA/graph.png create mode 100644 doc/+eegtoolkit/+classification/@CombiCCA/index.html create mode 100644 doc/+eegtoolkit/+classification/@FusionClassifierWrapper/FusionClassifierWrapper.html create mode 100644 doc/+eegtoolkit/+classification/@FusionClassifierWrapper/FusionClassifierWrapper.m create mode 100644 doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.html create mode 100644 doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.map create mode 100644 doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.png create mode 100644 doc/+eegtoolkit/+classification/@FusionClassifierWrapper/index.html create mode 100644 doc/+eegtoolkit/+classification/@ITCCA/ITCCA.html create mode 100644 doc/+eegtoolkit/+classification/@ITCCA/ITCCA.m create mode 100644 doc/+eegtoolkit/+classification/@ITCCA/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@ITCCA/graph.html create mode 100644 doc/+eegtoolkit/+classification/@ITCCA/graph.map create mode 100644 doc/+eegtoolkit/+classification/@ITCCA/graph.png create mode 100644 doc/+eegtoolkit/+classification/@ITCCA/index.html create mode 100644 doc/+eegtoolkit/+classification/@L1MCCA/L1MCCA.html create mode 100644 doc/+eegtoolkit/+classification/@L1MCCA/L1MCCA.m create mode 100644 doc/+eegtoolkit/+classification/@L1MCCA/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@L1MCCA/graph.html create mode 100644 doc/+eegtoolkit/+classification/@L1MCCA/graph.map create mode 100644 doc/+eegtoolkit/+classification/@L1MCCA/graph.png create mode 100644 doc/+eegtoolkit/+classification/@L1MCCA/index.html create mode 100644 doc/+eegtoolkit/+classification/@LDA/LDA.html create mode 100644 doc/+eegtoolkit/+classification/@LDA/LDA.m create mode 100644 doc/+eegtoolkit/+classification/@LDA/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@LDA/graph.html create mode 100644 doc/+eegtoolkit/+classification/@LDA/graph.map create mode 100644 doc/+eegtoolkit/+classification/@LDA/graph.png create mode 100644 doc/+eegtoolkit/+classification/@LDA/index.html create mode 100644 doc/+eegtoolkit/+classification/@LIBSVM/LIBSVM.html create mode 100644 doc/+eegtoolkit/+classification/@LIBSVM/LIBSVM.m create mode 100644 doc/+eegtoolkit/+classification/@LIBSVM/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@LIBSVM/graph.html create mode 100644 doc/+eegtoolkit/+classification/@LIBSVM/graph.map create mode 100644 doc/+eegtoolkit/+classification/@LIBSVM/graph.png create mode 100644 doc/+eegtoolkit/+classification/@LIBSVM/index.html create mode 100644 doc/+eegtoolkit/+classification/@LIBSVMFast/LIBSVMFast.html create mode 100644 doc/+eegtoolkit/+classification/@LIBSVMFast/LIBSVMFast.m create mode 100644 doc/+eegtoolkit/+classification/@LIBSVMFast/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@LIBSVMFast/graph.html create mode 100644 doc/+eegtoolkit/+classification/@LIBSVMFast/graph.map create mode 100644 doc/+eegtoolkit/+classification/@LIBSVMFast/graph.png create mode 100644 doc/+eegtoolkit/+classification/@LIBSVMFast/index.html create mode 100644 doc/+eegtoolkit/+classification/@MLDA/MLDA.html create mode 100644 doc/+eegtoolkit/+classification/@MLDA/MLDA.m create mode 100644 doc/+eegtoolkit/+classification/@MLDA/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@MLDA/graph.html create mode 100644 doc/+eegtoolkit/+classification/@MLDA/graph.map create mode 100644 doc/+eegtoolkit/+classification/@MLDA/graph.png create mode 100644 doc/+eegtoolkit/+classification/@MLDA/index.html create mode 100644 doc/+eegtoolkit/+classification/@MLR/MLR.html create mode 100644 doc/+eegtoolkit/+classification/@MLR/MLR.m create mode 100644 doc/+eegtoolkit/+classification/@MLR/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@MLR/graph.html create mode 100644 doc/+eegtoolkit/+classification/@MLR/graph.map create mode 100644 doc/+eegtoolkit/+classification/@MLR/graph.png create mode 100644 doc/+eegtoolkit/+classification/@MLR/index.html create mode 100644 doc/+eegtoolkit/+classification/@MLTREE/MLTREE.html create mode 100644 doc/+eegtoolkit/+classification/@MLTREE/MLTREE.m create mode 100644 doc/+eegtoolkit/+classification/@MLTREE/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@MLTREE/graph.html create mode 100644 doc/+eegtoolkit/+classification/@MLTREE/graph.map create mode 100644 doc/+eegtoolkit/+classification/@MLTREE/graph.png create mode 100644 doc/+eegtoolkit/+classification/@MLTREE/index.html create mode 100644 doc/+eegtoolkit/+classification/@MLTboxMulticlass/MLTboxMulticlass.html create mode 100644 doc/+eegtoolkit/+classification/@MLTboxMulticlass/MLTboxMulticlass.m create mode 100644 doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.html create mode 100644 doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.map create mode 100644 doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.png create mode 100644 doc/+eegtoolkit/+classification/@MLTboxMulticlass/index.html create mode 100644 doc/+eegtoolkit/+classification/@MaxChooser/MaxChooser.html create mode 100644 doc/+eegtoolkit/+classification/@MaxChooser/MaxChooser.m create mode 100644 doc/+eegtoolkit/+classification/@MaxChooser/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@MaxChooser/graph.html create mode 100644 doc/+eegtoolkit/+classification/@MaxChooser/graph.map create mode 100644 doc/+eegtoolkit/+classification/@MaxChooser/graph.png create mode 100644 doc/+eegtoolkit/+classification/@MaxChooser/index.html create mode 100644 doc/+eegtoolkit/+classification/@SBLR/SBLR.html create mode 100644 doc/+eegtoolkit/+classification/@SBLR/SBLR.m create mode 100644 doc/+eegtoolkit/+classification/@SBLR/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@SBLR/graph.html create mode 100644 doc/+eegtoolkit/+classification/@SBLR/graph.map create mode 100644 doc/+eegtoolkit/+classification/@SBLR/graph.png create mode 100644 doc/+eegtoolkit/+classification/@SBLR/index.html create mode 100644 doc/+eegtoolkit/+classification/@SMFA/SMFA.html create mode 100644 doc/+eegtoolkit/+classification/@SMFA/SMFA.m create mode 100644 doc/+eegtoolkit/+classification/@SMFA/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@SMFA/graph.html create mode 100644 doc/+eegtoolkit/+classification/@SMFA/graph.map create mode 100644 doc/+eegtoolkit/+classification/@SMFA/graph.png create mode 100644 doc/+eegtoolkit/+classification/@SMFA/index.html create mode 100644 doc/+eegtoolkit/+experiment/@Experimenter/Experimenter.html create mode 100644 doc/+eegtoolkit/+experiment/@Experimenter/Experimenter.m create mode 100644 doc/+eegtoolkit/+experiment/@Experimenter/graph.dot create mode 100644 doc/+eegtoolkit/+experiment/@Experimenter/graph.html create mode 100644 doc/+eegtoolkit/+experiment/@Experimenter/graph.map create mode 100644 doc/+eegtoolkit/+experiment/@Experimenter/graph.png create mode 100644 doc/+eegtoolkit/+experiment/@Experimenter/index.html create mode 100644 doc/+eegtoolkit/+experiment/@ResultEvaluator/ResultEvaluator.html create mode 100644 doc/+eegtoolkit/+experiment/@ResultEvaluator/ResultEvaluator.m create mode 100644 doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.dot create mode 100644 doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.html create mode 100644 doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.map create mode 100644 doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.png create mode 100644 doc/+eegtoolkit/+experiment/@ResultEvaluator/index.html create mode 100644 doc/+eegtoolkit/+featextraction/@CCA/CCA.html create mode 100644 doc/+eegtoolkit/+featextraction/@CCA/CCA.m create mode 100644 doc/+eegtoolkit/+featextraction/@CCA/graph.dot create mode 100644 doc/+eegtoolkit/+featextraction/@CCA/graph.html create mode 100644 doc/+eegtoolkit/+featextraction/@CCA/graph.map create mode 100644 doc/+eegtoolkit/+featextraction/@CCA/graph.png create mode 100644 doc/+eegtoolkit/+featextraction/@CCA/index.html create mode 100644 doc/+eegtoolkit/+featextraction/@DWT/DWT.html create mode 100644 doc/+eegtoolkit/+featextraction/@DWT/DWT.m create mode 100644 doc/+eegtoolkit/+featextraction/@DWT/graph.dot create mode 100644 doc/+eegtoolkit/+featextraction/@DWT/graph.html create mode 100644 doc/+eegtoolkit/+featextraction/@DWT/graph.map create mode 100644 doc/+eegtoolkit/+featextraction/@DWT/graph.png create mode 100644 doc/+eegtoolkit/+featextraction/@DWT/index.html create mode 100644 doc/+eegtoolkit/+featextraction/@ERRPFeatures/ERRPFeatures.html create mode 100644 doc/+eegtoolkit/+featextraction/@ERRPFeatures/ERRPFeatures.m create mode 100644 doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.dot create mode 100644 doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.html create mode 100644 doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.map create mode 100644 doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.png create mode 100644 doc/+eegtoolkit/+featextraction/@ERRPFeatures/index.html create mode 100644 doc/+eegtoolkit/+featextraction/@FFT/FFT.html create mode 100644 doc/+eegtoolkit/+featextraction/@FFT/FFT.m create mode 100644 doc/+eegtoolkit/+featextraction/@FFT/graph.dot create mode 100644 doc/+eegtoolkit/+featextraction/@FFT/graph.html create mode 100644 doc/+eegtoolkit/+featextraction/@FFT/graph.map create mode 100644 doc/+eegtoolkit/+featextraction/@FFT/graph.png create mode 100644 doc/+eegtoolkit/+featextraction/@FFT/index.html create mode 100644 doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.html create mode 100644 doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m create mode 100644 doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.dot create mode 100644 doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.html create mode 100644 doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.map create mode 100644 doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.png create mode 100644 doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/index.html create mode 100644 doc/+eegtoolkit/+featextraction/@Goertzel/Goertzel.html create mode 100644 doc/+eegtoolkit/+featextraction/@Goertzel/Goertzel.m create mode 100644 doc/+eegtoolkit/+featextraction/@Goertzel/graph.dot create mode 100644 doc/+eegtoolkit/+featextraction/@Goertzel/graph.html create mode 100644 doc/+eegtoolkit/+featextraction/@Goertzel/graph.map create mode 100644 doc/+eegtoolkit/+featextraction/@Goertzel/graph.png create mode 100644 doc/+eegtoolkit/+featextraction/@Goertzel/index.html create mode 100644 doc/+eegtoolkit/+featextraction/@L1MCCA/L1MCCA.html create mode 100644 doc/+eegtoolkit/+featextraction/@L1MCCA/L1MCCA.m create mode 100644 doc/+eegtoolkit/+featextraction/@L1MCCA/graph.dot create mode 100644 doc/+eegtoolkit/+featextraction/@L1MCCA/graph.html create mode 100644 doc/+eegtoolkit/+featextraction/@L1MCCA/graph.map create mode 100644 doc/+eegtoolkit/+featextraction/@L1MCCA/graph.png create mode 100644 doc/+eegtoolkit/+featextraction/@L1MCCA/index.html create mode 100644 doc/+eegtoolkit/+featextraction/@MLR_Transf/MLR_Transf.html create mode 100644 doc/+eegtoolkit/+featextraction/@MLR_Transf/MLR_Transf.m create mode 100644 doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.dot create mode 100644 doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.html create mode 100644 doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.map create mode 100644 doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.png create mode 100644 doc/+eegtoolkit/+featextraction/@MLR_Transf/index.html create mode 100644 doc/+eegtoolkit/+featextraction/@PSDExtractionBase/PSDExtractionBase.html create mode 100644 doc/+eegtoolkit/+featextraction/@PSDExtractionBase/PSDExtractionBase.m create mode 100644 doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.dot create mode 100644 doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.html create mode 100644 doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.map create mode 100644 doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.png create mode 100644 doc/+eegtoolkit/+featextraction/@PSDExtractionBase/index.html create mode 100644 doc/+eegtoolkit/+featextraction/@PWelch/PWelch.html create mode 100644 doc/+eegtoolkit/+featextraction/@PWelch/PWelch.m create mode 100644 doc/+eegtoolkit/+featextraction/@PWelch/graph.dot create mode 100644 doc/+eegtoolkit/+featextraction/@PWelch/graph.html create mode 100644 doc/+eegtoolkit/+featextraction/@PWelch/graph.map create mode 100644 doc/+eegtoolkit/+featextraction/@PWelch/graph.png create mode 100644 doc/+eegtoolkit/+featextraction/@PWelch/index.html create mode 100644 doc/+eegtoolkit/+featextraction/@PWelchExperimental/PWelchExperimental.html create mode 100644 doc/+eegtoolkit/+featextraction/@PWelchExperimental/PWelchExperimental.m create mode 100644 doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.dot create mode 100644 doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.html create mode 100644 doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.map create mode 100644 doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.png create mode 100644 doc/+eegtoolkit/+featextraction/@PWelchExperimental/index.html create mode 100644 doc/+eegtoolkit/+featextraction/@PYAR/PYAR.html create mode 100644 doc/+eegtoolkit/+featextraction/@PYAR/PYAR.m create mode 100644 doc/+eegtoolkit/+featextraction/@PYAR/graph.dot create mode 100644 doc/+eegtoolkit/+featextraction/@PYAR/graph.html create mode 100644 doc/+eegtoolkit/+featextraction/@PYAR/graph.map create mode 100644 doc/+eegtoolkit/+featextraction/@PYAR/graph.png create mode 100644 doc/+eegtoolkit/+featextraction/@PYAR/index.html create mode 100644 doc/+eegtoolkit/+featextraction/@RawSignal/RawSignal.html create mode 100644 doc/+eegtoolkit/+featextraction/@RawSignal/RawSignal.m create mode 100644 doc/+eegtoolkit/+featextraction/@RawSignal/graph.dot create mode 100644 doc/+eegtoolkit/+featextraction/@RawSignal/graph.html create mode 100644 doc/+eegtoolkit/+featextraction/@RawSignal/graph.map create mode 100644 doc/+eegtoolkit/+featextraction/@RawSignal/graph.png create mode 100644 doc/+eegtoolkit/+featextraction/@RawSignal/index.html create mode 100644 doc/+eegtoolkit/+featextraction/@STFT/STFT.html create mode 100644 doc/+eegtoolkit/+featextraction/@STFT/STFT.m create mode 100644 doc/+eegtoolkit/+featextraction/@STFT/graph.dot create mode 100644 doc/+eegtoolkit/+featextraction/@STFT/graph.html create mode 100644 doc/+eegtoolkit/+featextraction/@STFT/graph.map create mode 100644 doc/+eegtoolkit/+featextraction/@STFT/graph.png create mode 100644 doc/+eegtoolkit/+featextraction/@STFT/index.html create mode 100644 doc/+eegtoolkit/+featselection/@FEAST/FEAST.html create mode 100644 doc/+eegtoolkit/+featselection/@FEAST/FEAST.m create mode 100644 doc/+eegtoolkit/+featselection/@FEAST/graph.dot create mode 100644 doc/+eegtoolkit/+featselection/@FEAST/graph.html create mode 100644 doc/+eegtoolkit/+featselection/@FEAST/graph.map create mode 100644 doc/+eegtoolkit/+featselection/@FEAST/graph.png create mode 100644 doc/+eegtoolkit/+featselection/@FEAST/index.html create mode 100644 doc/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.html create mode 100644 doc/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.m create mode 100644 doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.dot create mode 100644 doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.html create mode 100644 doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.map create mode 100644 doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.png create mode 100644 doc/+eegtoolkit/+featselection/@FeatureSelectionBase/index.html create mode 100644 doc/+eegtoolkit/+featselection/@PCA/PCA.html create mode 100644 doc/+eegtoolkit/+featselection/@PCA/PCA.m create mode 100644 doc/+eegtoolkit/+featselection/@PCA/graph.dot create mode 100644 doc/+eegtoolkit/+featselection/@PCA/graph.html create mode 100644 doc/+eegtoolkit/+featselection/@PCA/graph.map create mode 100644 doc/+eegtoolkit/+featselection/@PCA/graph.png create mode 100644 doc/+eegtoolkit/+featselection/@PCA/index.html create mode 100644 doc/+eegtoolkit/+featselection/@SVD/SVD.html create mode 100644 doc/+eegtoolkit/+featselection/@SVD/SVD.m create mode 100644 doc/+eegtoolkit/+featselection/@SVD/graph.dot create mode 100644 doc/+eegtoolkit/+featselection/@SVD/graph.html create mode 100644 doc/+eegtoolkit/+featselection/@SVD/graph.map create mode 100644 doc/+eegtoolkit/+featselection/@SVD/graph.png create mode 100644 doc/+eegtoolkit/+featselection/@SVD/index.html create mode 100644 doc/+eegtoolkit/+preprocessing/@Amuse/Amuse.html create mode 100644 doc/+eegtoolkit/+preprocessing/@Amuse/Amuse.m create mode 100644 doc/+eegtoolkit/+preprocessing/@Amuse/graph.dot create mode 100644 doc/+eegtoolkit/+preprocessing/@Amuse/graph.html create mode 100644 doc/+eegtoolkit/+preprocessing/@Amuse/graph.map create mode 100644 doc/+eegtoolkit/+preprocessing/@Amuse/graph.png create mode 100644 doc/+eegtoolkit/+preprocessing/@Amuse/index.html create mode 100644 doc/+eegtoolkit/+preprocessing/@DigitalFilter/DigitalFilter.html create mode 100644 doc/+eegtoolkit/+preprocessing/@DigitalFilter/DigitalFilter.m create mode 100644 doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.dot create mode 100644 doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.html create mode 100644 doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.map create mode 100644 doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.png create mode 100644 doc/+eegtoolkit/+preprocessing/@DigitalFilter/index.html create mode 100644 doc/+eegtoolkit/+preprocessing/@FastICA/FastICA.html create mode 100644 doc/+eegtoolkit/+preprocessing/@FastICA/FastICA.m create mode 100644 doc/+eegtoolkit/+preprocessing/@FastICA/graph.dot create mode 100644 doc/+eegtoolkit/+preprocessing/@FastICA/graph.html create mode 100644 doc/+eegtoolkit/+preprocessing/@FastICA/graph.map create mode 100644 doc/+eegtoolkit/+preprocessing/@FastICA/graph.png create mode 100644 doc/+eegtoolkit/+preprocessing/@FastICA/index.html create mode 100644 doc/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.html create mode 100644 doc/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.m create mode 100644 doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.dot create mode 100644 doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.html create mode 100644 doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.map create mode 100644 doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.png create mode 100644 doc/+eegtoolkit/+preprocessing/@PreprocessingBase/index.html create mode 100644 doc/+eegtoolkit/+preprocessing/@Rereferencing/Rereferencing.html create mode 100644 doc/+eegtoolkit/+preprocessing/@Rereferencing/Rereferencing.m create mode 100644 doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.dot create mode 100644 doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.html create mode 100644 doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.map create mode 100644 doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.png create mode 100644 doc/+eegtoolkit/+preprocessing/@Rereferencing/index.html create mode 100644 doc/+eegtoolkit/+preprocessing/@SampleSelection/SampleSelection.html create mode 100644 doc/+eegtoolkit/+preprocessing/@SampleSelection/SampleSelection.m create mode 100644 doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.dot create mode 100644 doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.html create mode 100644 doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.map create mode 100644 doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.png create mode 100644 doc/+eegtoolkit/+preprocessing/@SampleSelection/index.html create mode 100644 doc/+eegtoolkit/+preprocessing/@Windsorize/Windsorize.html create mode 100644 doc/+eegtoolkit/+preprocessing/@Windsorize/Windsorize.m create mode 100644 doc/+eegtoolkit/+preprocessing/@Windsorize/graph.dot create mode 100644 doc/+eegtoolkit/+preprocessing/@Windsorize/graph.html create mode 100644 doc/+eegtoolkit/+preprocessing/@Windsorize/graph.map create mode 100644 doc/+eegtoolkit/+preprocessing/@Windsorize/graph.png create mode 100644 doc/+eegtoolkit/+preprocessing/@Windsorize/index.html create mode 100644 doc/+eegtoolkit/+util/@FusionInstanceSet/FusionInstanceSet.html create mode 100644 doc/+eegtoolkit/+util/@FusionInstanceSet/FusionInstanceSet.m create mode 100644 doc/+eegtoolkit/+util/@FusionInstanceSet/graph.dot create mode 100644 doc/+eegtoolkit/+util/@FusionInstanceSet/graph.html create mode 100644 doc/+eegtoolkit/+util/@FusionInstanceSet/graph.map create mode 100644 doc/+eegtoolkit/+util/@FusionInstanceSet/graph.png create mode 100644 doc/+eegtoolkit/+util/@FusionInstanceSet/index.html create mode 100644 doc/+eegtoolkit/+util/@InstanceSet/InstanceSet.html create mode 100644 doc/+eegtoolkit/+util/@InstanceSet/InstanceSet.m create mode 100644 doc/+eegtoolkit/+util/@InstanceSet/graph.dot create mode 100644 doc/+eegtoolkit/+util/@InstanceSet/graph.html create mode 100644 doc/+eegtoolkit/+util/@InstanceSet/graph.map create mode 100644 doc/+eegtoolkit/+util/@InstanceSet/graph.png create mode 100644 doc/+eegtoolkit/+util/@InstanceSet/index.html create mode 100644 doc/+eegtoolkit/+util/@L1MCCAInstanceSet/L1MCCAInstanceSet.html create mode 100644 doc/+eegtoolkit/+util/@L1MCCAInstanceSet/L1MCCAInstanceSet.m create mode 100644 doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.dot create mode 100644 doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.html create mode 100644 doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.map create mode 100644 doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.png create mode 100644 doc/+eegtoolkit/+util/@L1MCCAInstanceSet/index.html create mode 100644 doc/+eegtoolkit/+util/@LSLWrapper/LSLWrapper.html create mode 100644 doc/+eegtoolkit/+util/@LSLWrapper/LSLWrapper.m create mode 100644 doc/+eegtoolkit/+util/@LSLWrapper/graph.dot create mode 100644 doc/+eegtoolkit/+util/@LSLWrapper/graph.html create mode 100644 doc/+eegtoolkit/+util/@LSLWrapper/graph.map create mode 100644 doc/+eegtoolkit/+util/@LSLWrapper/graph.png create mode 100644 doc/+eegtoolkit/+util/@LSLWrapper/index.html create mode 100644 doc/+eegtoolkit/+util/@RawSignalSet/RawSignalSet.html create mode 100644 doc/+eegtoolkit/+util/@RawSignalSet/RawSignalSet.m create mode 100644 doc/+eegtoolkit/+util/@RawSignalSet/graph.dot create mode 100644 doc/+eegtoolkit/+util/@RawSignalSet/graph.html create mode 100644 doc/+eegtoolkit/+util/@RawSignalSet/graph.map create mode 100644 doc/+eegtoolkit/+util/@RawSignalSet/graph.png create mode 100644 doc/+eegtoolkit/+util/@RawSignalSet/index.html create mode 100644 doc/+eegtoolkit/+util/@ResultSet/ResultSet.html create mode 100644 doc/+eegtoolkit/+util/@ResultSet/ResultSet.m create mode 100644 doc/+eegtoolkit/+util/@ResultSet/graph.dot create mode 100644 doc/+eegtoolkit/+util/@ResultSet/graph.html create mode 100644 doc/+eegtoolkit/+util/@ResultSet/graph.map create mode 100644 doc/+eegtoolkit/+util/@ResultSet/graph.png create mode 100644 doc/+eegtoolkit/+util/@ResultSet/index.html create mode 100644 doc/+eegtoolkit/+util/@Session/Session.html create mode 100644 doc/+eegtoolkit/+util/@Session/Session.m create mode 100644 doc/+eegtoolkit/+util/@Session/graph.dot create mode 100644 doc/+eegtoolkit/+util/@Session/graph.html create mode 100644 doc/+eegtoolkit/+util/@Session/graph.map create mode 100644 doc/+eegtoolkit/+util/@Session/graph.png create mode 100644 doc/+eegtoolkit/+util/@Session/index.html create mode 100644 doc/+eegtoolkit/+util/@Trial/Trial.html create mode 100644 doc/+eegtoolkit/+util/@Trial/Trial.m create mode 100644 doc/+eegtoolkit/+util/@Trial/graph.dot create mode 100644 doc/+eegtoolkit/+util/@Trial/graph.html create mode 100644 doc/+eegtoolkit/+util/@Trial/graph.map create mode 100644 doc/+eegtoolkit/+util/@Trial/graph.png create mode 100644 doc/+eegtoolkit/+util/@Trial/index.html create mode 100644 doc/alpha.png create mode 100644 doc/c++.png create mode 100644 doc/c.png create mode 100644 doc/demoicon.gif create mode 100644 doc/down.png create mode 100644 doc/doxysearch.php create mode 100644 doc/exampleCSP.html create mode 100644 doc/exampleCSP.m create mode 100644 doc/exampleCombiCCA.html create mode 100644 doc/exampleCombiCCA.m create mode 100644 doc/exampleDefault.html create mode 100644 doc/exampleDefault.m create mode 100644 doc/exampleEPOCCCASVM.html create mode 100644 doc/exampleEPOCCCASVM.m create mode 100644 doc/exampleERRP.html create mode 100644 doc/exampleERRP.m create mode 100644 doc/exampleEarlyFusion.html create mode 100644 doc/exampleEarlyFusion.m create mode 100644 doc/exampleEpoc.html create mode 100644 doc/exampleEpoc.m create mode 100644 doc/exampleITCCA.html create mode 100644 doc/exampleITCCA.m create mode 100644 doc/exampleL1MCCA.html create mode 100644 doc/exampleL1MCCA.m create mode 100644 doc/exampleLSL.html create mode 100644 doc/exampleLSL.m create mode 100644 doc/exampleLateFusion.html create mode 100644 doc/exampleLateFusion.m create mode 100644 doc/exampleMotorPWelch.html create mode 100644 doc/exampleMotorPWelch.m create mode 100644 doc/exampleOptimal.html create mode 100644 doc/exampleOptimal.m create mode 100644 doc/exampleSMFA.html create mode 100644 doc/exampleSMFA.m create mode 100644 doc/fortran.png create mode 100644 doc/graph.dot create mode 100644 doc/graph.html create mode 100644 doc/graph.map create mode 100644 doc/graph.png create mode 100644 doc/hp.png create mode 100644 doc/index.html create mode 100644 doc/left.png create mode 100644 doc/linux.png create mode 100644 doc/m2html.css create mode 100644 doc/matlabicon.gif create mode 100644 doc/mex.png create mode 100644 doc/pcode.png create mode 100644 doc/right.png create mode 100644 doc/sgi.png create mode 100644 doc/simulinkicon.gif create mode 100644 doc/solaris.png create mode 100644 doc/up.png create mode 100644 doc/windows.png diff --git a/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.m b/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.m index 8edc02e..031a77f 100644 --- a/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.m +++ b/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.m @@ -1,3 +1,23 @@ +% Abstract class for aggregation. Implement the functions for any +% fusion methodology (e.g. late fusion, VLAD, channel concatenation, etc.) +% +% Properties: +% featextractors: cell array with the the feature extractors to be used on +% the trials. Each cell contains a featextraction object, and the trials +% are given to each of the objects within the Experimenter class +% instanceSet: output - the aggregated features. Can be a simple +% InstanceSet or the extended FusionInstanceSet +% +% Functions: +%Implement this function to process the trials of each featextraction +%object in the cell array featextractors. It should store in the +%instanceSet property the features. +% obj.aggregate(); +%Info & run time so that the experiments are easily documented. configInfo +%is a string with the configuration information and time is of type double. +% configInfo = obj.getConfigInfo(); +% time = obj.getTime(); + classdef (Abstract) AggregatorBase < handle properties diff --git a/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m b/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m index db4f636..ad07e26 100644 --- a/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m +++ b/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m @@ -1,3 +1,30 @@ +% Abstract class for classification. Implement the functions for any +% classifier (e.g. LibSVM, LDA, MLR, Decision trees, Adaboost, etc.) +% +% Properties: +% instanceSet: the training/test set in an InstanceSet structure +% +% Functions: +%Implement this function to train the classification models. Each +%implementation should define the type of models that are to be trained by +%the build function. +% obj = obj.build(); +%Implement this function to apply the classification models to the provided +%instance, where instance is a matrix #instances x #features including the +%instances. The function should return the following three outputs; 1) +%output, the classified labels of the instances (#instances x 1), 2) +%probabilities, the probabilities for the output label (instances x 1) and +%3) ranking, a matrix #instances x #classes with the probabilities of each +%instance for each class (used for multiclass classification). +% [output, probabilities, ranking] = obj.classifyInstance(instance); +%Implement this function to reset the classifier (e.g. delete the stored +%classification models +% obj.reset(); +%Info & run time so that the experiments are easily documented. configInfo +%is a string with the configuration information and time is of type double. +% configInfo = obj.getConfigInfo(); +% time = obj.getTime(); + classdef (Abstract) ClassifierBase < handle properties @@ -5,7 +32,7 @@ end methods (Abstract = true) - obj = classifyInstance(obj); + [output, probabilities, ranking] = classifyInstance(obj,instance); obj = build(obj); obj = reset(obj); configInfo = getConfigInfo(obj); diff --git a/+eegtoolkit/+experiment/@Experimenter/Experimenter.m b/+eegtoolkit/+experiment/@Experimenter/Experimenter.m index ffb7846..9b28677 100644 --- a/+eegtoolkit/+experiment/@Experimenter/Experimenter.m +++ b/+eegtoolkit/+experiment/@Experimenter/Experimenter.m @@ -3,20 +3,22 @@ %Before running an experiment all the required properties must be set. % Required: % - session -% - transformer +% - featextraction % - evalMethod -% - classifier +% - classification % Optional: -% - extractor +% - featselection +% - aggregator +% - preprocessing % % to run the experiment execute the "run()" method. % Example: % experiment = eegtoolkit.experiment.Experimenter; % experiment.session = eegtoolkit.util.Session; % experiment.session.loadSubject(1); -% experiment.transformer = eegtoolkit.transformer.PWelchTransformer; -% experiment.extractor = eegtoolkit.extractor.FEASTFilter; -% experiment.classifier = eegtoolkit.classifier.LIBSVMClassifier; +% experiment.transformer = eegtoolkit.featextraction.PWelch; +% experiment.extractor = eegtoolkit.featselection.FEAST; +% experiment.classification = eegtoolkit.classification.LIBSVM; % experiment.evalMethod = experiment.evalMethod.EVAL_METHOD_LOSO; % experiment.run; % results = experiment.results; diff --git a/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m b/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m index 7e93bbf..29ef454 100644 --- a/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m +++ b/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m @@ -1,3 +1,21 @@ +% Abstract class for feature extraction. Implement the functions for any +% preprocessing step (e.g. filtering, artifact removal, sub-sampling, +% rereferencing, etc. +% +% Properties: +% instanceSet: Output - the features in an InstanceSet structure +% trials: Input - the signals in a cell of Trial structures +% +% Functions: +%Implement this function to extract the features from the input Trials +%and return the features in an instanceSet +% out = obj.extract(in); +%Info & run time so that the experiments are easily documented. configInfo +%is a string with the configuration information and time is of type double. +% configInfo = obj.getConfigInfo(); +% time = obj.getTime(); + + classdef (Abstract) FeatureExtractionBase < handle %Base class for a feature transformer %For writing your own FeatureTransformer extend this class and diff --git a/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.m b/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.m index 3a77365..7101cc1 100644 --- a/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.m +++ b/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.m @@ -1,6 +1,21 @@ +% Abstract class for feature selection. Implement the functions for any +% feature selection method (e.g. PCA, SVD, FEAST, etc.) +% +% Properties: +% originalInstanceSet: Input - the original instanceSet with the features +% filteredInstanceSet: Output - the filtered instanceSet +% +% Functions: +%Implement this function to process the originalInstanceSet trials and +%return the filteredInstanceSet +% obj.compute(); +%Info & run time so that the experiments are easily documented. configInfo +%is a string with the configuration information and time is of type double. +% configInfo = obj.getConfigInfo(); +% time = obj.getTime(); + classdef (Abstract) FeatureSelectionBase < handle - %Base class for a FeatureExtractor - %Subclasses must implement the filter method + properties originalInstanceSet; % Input: The original dataset filteredInstanceSet; % Output: The filtered dataset diff --git a/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.m b/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.m index e426bd3..9abae63 100644 --- a/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.m +++ b/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.m @@ -1,3 +1,20 @@ +% Abstract class for preprocessing. Implement the functions for any +% preprocessing step (e.g. filtering, artifact removal, sub-sampling, +% rereferencing, etc. +% +% Properties: +% originalTrials: cell array with the trials to be processed +% processedTrials: the processed trials to be returned +% +% Functions: +%Implement this function to process the in trials and return the processed +%trials (out) +% out = obj.process(in); +%Info & run time so that the experiments are easily documented. configInfo +%is a string with the configuration information and time is of type double. +% configInfo = obj.getConfigInfo(); +% time = obj.getTime(); + classdef PreprocessingBase < handle properties diff --git a/+eegtoolkit/+util/@InstanceSet/InstanceSet.m b/+eegtoolkit/+util/@InstanceSet/InstanceSet.m index 5e88dbd..fbe2fc4 100644 --- a/+eegtoolkit/+util/@InstanceSet/InstanceSet.m +++ b/+eegtoolkit/+util/@InstanceSet/InstanceSet.m @@ -1,6 +1,45 @@ +% A class for describing a set of instances and labels +% +% Properties: +% -instances : a m x n matrix where m = # instances and n = +% # features +% -labels: a m x 1 matrix containing the labels for each +% instance +% -K: a m x m matrix containing the kernel of the instances +% required only for the Fast vesrion of LibSVM +% +% Functions: +%Construct an instanceSet +% IS = eegtoolkit.util.InstanceSet(instances, labels) +%Compute the kernel +% K = IS.computeKernel(kernel, gamma, maxlag, scaleopt) +% kernel can be one of 'linear' (default),'rbf','chi','xcorr','spearman', +% 'correlation','cosine','euclidean','seuclidean','mahalanobis' +%Get the training kernel with indexes in the trainidx vector +% Ktrain = IS.getTrainKernel(trainidx) +%Get the test kernel with test indexes testidx and train indexes trainidx +% Ktest = IS.getTestKernel(trainidx, testidx) +%Get instances of specific indices in vector idx +% instance = IS.getInstancesWithIndices(idx) +%Get the instances of a specific label +% instances = IS.getInstancesForLabel(label) +%Get the indices corresponding to a specific label +% indices = IS.getInstanceIndicesForLabel(label) +%Get the instances including the labels as the last row +% dataset = getDataset(IS) +%Get the instances with specific indices. The last column of the matrix +%will contain the label. +% dataset = IS.getDatasetWithIndices(idx) +%Remove instances with specific indices. A new InstanceSet object is +%returned by this function without the specified instances +% IS = IS.removeInstancesWithIndices(idx) +% Write the dataset to a csv file +% IS.writeCSV(csvname) +%Write the dataset to a weka-readable file (arff). The whole dataset is +%written if the indices are not given (function called with 1 argument) +% IS.writeArff(fname, indices) + classdef InstanceSet - % A class for describing a set of instances and labels - properties (Access = public) instances; % the instances labels; % the labels @@ -10,10 +49,7 @@ methods function IS = InstanceSet(instances, labels) % obj = InstanceSet(instances, labels) - % -instances : a m x n matrix where m = instances and n = - % features - % -labels: a m x 1 matrix containing the labels for each - % instance + if nargin == 1 [~, cols] = size(instances); IS.instances = instances(:,1:cols-1); @@ -48,13 +84,13 @@ n = size(IS.instances,1); mOnes = ones(1,m); D = zeros(m,n); for i=1:n - yi = IS.instances(i,:); yiRep = yi( mOnes, : ); - s = yiRep + IS.instances; d = yiRep - IS.instances; - D(:,i) = sum( d.^2 ./ (s+eps), 2 ); + yi = IS.instances(i,:); yiRep = yi( mOnes, : ); + s = yiRep + IS.instances; d = yiRep - IS.instances; + D(:,i) = sum( d.^2 ./ (s+eps), 2 ); end D = D/2; K = exp(-gamma.*D); -% error('chi kernel not implemented yet'); + % error('chi kernel not implemented yet'); case 'xcorr' K = zeros(size(IS.instances,1)); if size(IS.instances,2) < 500 % if memory allows it go for the vectorized version @@ -169,7 +205,7 @@ function writeArff(IS, fname, indices) is1.writeArff(sprintf('test%s', fname)); is2.writeArff(sprintf('train%s',fname)); return; - else + else data = IS.getDataset(); end % data = horzcat(IS.instances,floor(IS.labels)); diff --git a/+eegtoolkit/+util/@Session/Session.m b/+eegtoolkit/+util/@Session/Session.m index bc532fa..eb89757 100644 --- a/+eegtoolkit/+util/@Session/Session.m +++ b/+eegtoolkit/+util/@Session/Session.m @@ -1,10 +1,17 @@ % SESSION class % Session I/O, splitting sessions into trials and applying filters % -% Usage: +% Properties: +% trials: A cell array with the Trials of the loaded sessions. +% filt: Filter to be applied when data is loaded +% sessions: Cell array with the filenames of the dataset +% subjectids: Vector with the subject ids corresponding to the loaded trials +% sessionids: Vector with the session ids corresponding to the loaded trials +% +% Functions: %init a session % session = eegtoolkit.util.Session(); -%init a session with a filter (created with 'filterbuilder' function) +%init a session with a filter (created with 'filterbuilder') % session = eegtoolkit.util.Session(filt); %load trials for a subject % session.loadSubject(subjectid); @@ -18,6 +25,14 @@ % session.applyFilter(filt); % % +%DATASETS +%1. SSVEP Dataset I (SINGLE) +%2. SSVEP Dataset II (MULTI) +%3. SSVEP Dataset III (EPOC-MULTI) +%4. SSVEP Dataset SCCN +%5. ERRP Dataset +%6. MI Dataset + classdef Session < handle properties (Constant) @@ -31,13 +46,7 @@ sessionids; end - %DATASETS - %1. SSVEP Dataset I (SINGLE) - %2. SSVEP Dataset II (MULTI) - %3. SSVEP Dataset III (EPOC-MULTI) - %4. SSVEP Dataset SCCN - %5. ERRP Dataset - %6. MI Dataset + methods (Access = public) function S = Session() %S = eegtoolkit.util.Session(); @@ -209,7 +218,7 @@ S.sessions{3,11,3} = 'U011c'; S.sessions{3,11,4} = 'U011d'; S.sessions{3,11,5} = 'U011e'; - + %SCCN dataset S.sessions{4,1,1} = 's1'; S.sessions{4,2,1} = 's2'; @@ -254,7 +263,7 @@ S.sessions{7,9,2} = 'B09T.mat'; %MI dataset -% S.sessions{6,1,1} = ; + % S.sessions{6,1,1} = ; S.subjectids = []; @@ -360,7 +369,7 @@ end case 5 %ERRP Dataset - SAMPLING_RATE = 256; + SAMPLING_RATE = 256; %range of trial in milliseconds based on the stimulus %event range = [200,800]; diff --git a/+eegtoolkit/+util/@Trial/Trial.m b/+eegtoolkit/+util/@Trial/Trial.m index de32cd1..f3a4b06 100644 --- a/+eegtoolkit/+util/@Trial/Trial.m +++ b/+eegtoolkit/+util/@Trial/Trial.m @@ -1,5 +1,20 @@ +% A class that defines a Trial +% +% Properties: +% signal: the signal of the trial, matrix m x n, where m is the channels +% and n the samples +% label: a label for the trial (typically assigned with the frequency that is calculated using DIN data) +% duration: the duration of the trial in seconds +% samplingRate: the samling rate used to capture the signal +% subjectid: the subject from whom the trial was recorded +% sessionid: the session id +% type: the type of the trial. Supported types of trials: +% SSVEP = 1; +% ERRP = 2; +% MI = 3; + classdef Trial < handle - %A class that defines a Trial + properties (Constant) %Type of trial diff --git a/doc/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.html b/doc/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.html new file mode 100644 index 0000000..c987680 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.html @@ -0,0 +1,101 @@ + + + + Description of AggregatorBase + + + + + + + + + +
Home > +eegtoolkit > +aggregation > @AggregatorBase > AggregatorBase.m
+ + + +

AggregatorBase +

+ +

PURPOSE ^

+
Abstract class for aggregation. Implement the functions for any
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
 Abstract class for aggregation. Implement the functions for any
+ fusion methodology (e.g. late fusion, VLAD, channel concatenation, etc.)
+ 
+ Properties:
+ featextractors: cell array with the the feature extractors to be used on
+ the trials. Each cell contains a featextraction object, and the trials
+ are given to each of the objects within the Experimenter class
+ instanceSet: output - the aggregated features. Can be a simple
+ InstanceSet or the extended FusionInstanceSet
+ 
+ Functions:
+Implement this function to process the trials of each featextraction
+object in the cell array featextractors. It should store in the
+instanceSet property the features.
+   obj.aggregate();
+Info & run time so that the experiments are easily documented. configInfo
+is a string with the configuration information and time is of type double.
+   configInfo = obj.getConfigInfo();
+   time = obj.getTime();
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + + +

DOWNLOAD ^

+

AggregatorBase.m

+

SOURCE CODE ^

+
0001 % Abstract class for aggregation. Implement the functions for any
+0002 % fusion methodology (e.g. late fusion, VLAD, channel concatenation, etc.)
+0003 %
+0004 % Properties:
+0005 % featextractors: cell array with the the feature extractors to be used on
+0006 % the trials. Each cell contains a featextraction object, and the trials
+0007 % are given to each of the objects within the Experimenter class
+0008 % instanceSet: output - the aggregated features. Can be a simple
+0009 % InstanceSet or the extended FusionInstanceSet
+0010 %
+0011 % Functions:
+0012 %Implement this function to process the trials of each featextraction
+0013 %object in the cell array featextractors. It should store in the
+0014 %instanceSet property the features.
+0015 %   obj.aggregate();
+0016 %Info & run time so that the experiments are easily documented. configInfo
+0017 %is a string with the configuration information and time is of type double.
+0018 %   configInfo = obj.getConfigInfo();
+0019 %   time = obj.getTime();
+0020 
+0021 classdef (Abstract) AggregatorBase < handle
+0022     
+0023     properties
+0024         featextractors;
+0025         instanceSet;
+0026     end
+0027     
+0028     methods (Abstract = true)
+0029         obj = aggregate(obj);
+0030         configInfo = getConfigInfo(obj);
+0031         time = getTime(obj);
+0032     end
+0033     
+0034 end
+0035
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.m b/doc/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.m new file mode 100644 index 0000000..031a77f --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.m @@ -0,0 +1,35 @@ +% Abstract class for aggregation. Implement the functions for any +% fusion methodology (e.g. late fusion, VLAD, channel concatenation, etc.) +% +% Properties: +% featextractors: cell array with the the feature extractors to be used on +% the trials. Each cell contains a featextraction object, and the trials +% are given to each of the objects within the Experimenter class +% instanceSet: output - the aggregated features. Can be a simple +% InstanceSet or the extended FusionInstanceSet +% +% Functions: +%Implement this function to process the trials of each featextraction +%object in the cell array featextractors. It should store in the +%instanceSet property the features. +% obj.aggregate(); +%Info & run time so that the experiments are easily documented. configInfo +%is a string with the configuration information and time is of type double. +% configInfo = obj.getConfigInfo(); +% time = obj.getTime(); + +classdef (Abstract) AggregatorBase < handle + + properties + featextractors; + instanceSet; + end + + methods (Abstract = true) + obj = aggregate(obj); + configInfo = getConfigInfo(obj); + time = getTime(obj); + end + +end + diff --git a/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.dot b/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.dot new file mode 100644 index 0000000..ed68ee0 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + AggregatorBase -> AggregatorBase; + + AggregatorBase [URL="AggregatorBase.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.html b/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.html new file mode 100644 index 0000000..63f8728 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+aggregation/@AggregatorBase + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+aggregation/@AggregatorBase >
+

Dependency Graph for ./+eegtoolkit/+aggregation/@AggregatorBase

+ +
+Dependency Graph for ./+eegtoolkit/+aggregation/@AggregatorBase + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.map b/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.map new file mode 100644 index 0000000..7ed2ecc --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.png b/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f61dccba7ccbb9a8ec59f75964e59aa6f7945e8b GIT binary patch literal 5615 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

RVV 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 + + + Index for Directory ./+eegtoolkit/+aggregation/@AggregatorBase + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+aggregation/@AggregatorBase >
+ +

Index for ./+eegtoolkit/+aggregation/@AggregatorBase

+ +

Matlab files in this directory:

+ +
 AggregatorBaseAbstract class for aggregation. Implement the functions for any
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelAveraging/ChannelAveraging.html b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/ChannelAveraging.html new file mode 100644 index 0000000..7725575 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/ChannelAveraging.html @@ -0,0 +1,83 @@ + + + + Description of ChannelAveraging + + + + + + + + + +
Home > +eegtoolkit > +aggregation > @ChannelAveraging > ChannelAveraging.m
+ + + +

ChannelAveraging +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

ChannelAveraging.m

+

SOURCE CODE ^

+
0001 classdef ChannelAveraging < eegtoolkit.aggregation.AggregatorBase;
+0002     
+0003     properties
+0004     end
+0005     
+0006     methods
+0007         
+0008         function CA = ChannelAveraging(CA)
+0009         end
+0010         
+0011         function CA = aggregate(CA)
+0012             numExtr = length(CA.featextractors);
+0013             numInstances = CA.featextractors{1}.getInstanceSet.getNumInstances;
+0014             numFeatures = CA.featextractors{1}.getInstanceSet.getNumFeatures;
+0015             fused = zeros(numInstances,numFeatures,numExtr);
+0016             for i=1:numExtr
+0017                 fused(:,:,i) = CA.featextractors{i}.getInstances;
+0018             end
+0019             fusedMean = mean(fused,3);
+0020             CA.instanceSet = eegtoolkit.util.InstanceSet(fusedMean,CA.featextractors{1}.getLabels);
+0021         end
+0022         
+0023         function configInfo = getConfigInfo(CA)
+0024             configInfo = 'ChannelAveraging';
+0025         end
+0026         
+0027         function time = getTime(CA)
+0028             time = 0;
+0029         end
+0030     end
+0031     
+0032 end
+0033
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelAveraging/ChannelAveraging.m b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/ChannelAveraging.m new file mode 100644 index 0000000..70025af --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/ChannelAveraging.m @@ -0,0 +1,33 @@ +classdef ChannelAveraging < eegtoolkit.aggregation.AggregatorBase; + + properties + end + + methods + + function CA = ChannelAveraging(CA) + end + + function CA = aggregate(CA) + numExtr = length(CA.featextractors); + numInstances = CA.featextractors{1}.getInstanceSet.getNumInstances; + numFeatures = CA.featextractors{1}.getInstanceSet.getNumFeatures; + fused = zeros(numInstances,numFeatures,numExtr); + for i=1:numExtr + fused(:,:,i) = CA.featextractors{i}.getInstances; + end + fusedMean = mean(fused,3); + CA.instanceSet = eegtoolkit.util.InstanceSet(fusedMean,CA.featextractors{1}.getLabels); + end + + function configInfo = getConfigInfo(CA) + configInfo = 'ChannelAveraging'; + end + + function time = getTime(CA) + time = 0; + end + end + +end + diff --git a/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.dot b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.dot new file mode 100644 index 0000000..361dae9 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + ChannelAveraging -> ChannelAveraging; + + ChannelAveraging [URL="ChannelAveraging.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.html b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.html new file mode 100644 index 0000000..1f109ac --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelAveraging + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+aggregation/@ChannelAveraging >
+

Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelAveraging

+ +
+Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelAveraging + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.map b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.map new file mode 100644 index 0000000..a81e902 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.png b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..eea5702e679934e8d636b2095cdd5ebcbe989e21 GIT binary patch literal 6156 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+aggregation/@ChannelAveraging/index.html b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/index.html new file mode 100644 index 0000000..43b615a --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+aggregation/@ChannelAveraging + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+aggregation/@ChannelAveraging >
+ +

Index for ./+eegtoolkit/+aggregation/@ChannelAveraging

+ +

Matlab files in this directory:

+ +
 ChannelAveraging
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelConcat/ChannelConcat.html b/doc/+eegtoolkit/+aggregation/@ChannelConcat/ChannelConcat.html new file mode 100644 index 0000000..6e777be --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelConcat/ChannelConcat.html @@ -0,0 +1,84 @@ + + + + Description of ChannelConcat + + + + + + + + + + + + + +

ChannelConcat +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

ChannelConcat.m

+

SOURCE CODE ^

+
0001 classdef ChannelConcat < eegtoolkit.aggregation.AggregatorBase;
+0002     
+0003     properties
+0004     end
+0005     
+0006     methods
+0007         
+0008         function CC = ChannelConcat(CC)
+0009         end
+0010         
+0011         function CC = aggregate(CC)
+0012             numExtract = length(CC.featextractors);
+0013             fused = [];
+0014             for i=1:numExtract
+0015                 fused = horzcat(fused,CC.featextractors{i}.getInstances);
+0016             end
+0017 %             [~,y] = size(fused);
+0018 %             ind = randperm(y);
+0019 %             fused = fused(:,ind);
+0020             CC.instanceSet = eegtoolkit.util.InstanceSet(fused,CC.featextractors{1}.getLabels);
+0021         end
+0022         
+0023         function configInfo = getConfigInfo(CC)
+0024             configInfo = 'ChannelConcat';
+0025         end
+0026         
+0027                 
+0028         function time = getTime(CC)
+0029             time = 0;
+0030         end
+0031     end
+0032     
+0033 end
+0034
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelConcat/ChannelConcat.m b/doc/+eegtoolkit/+aggregation/@ChannelConcat/ChannelConcat.m new file mode 100644 index 0000000..dacd315 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelConcat/ChannelConcat.m @@ -0,0 +1,34 @@ +classdef ChannelConcat < eegtoolkit.aggregation.AggregatorBase; + + properties + end + + methods + + function CC = ChannelConcat(CC) + end + + function CC = aggregate(CC) + numExtract = length(CC.featextractors); + fused = []; + for i=1:numExtract + fused = horzcat(fused,CC.featextractors{i}.getInstances); + end +% [~,y] = size(fused); +% ind = randperm(y); +% fused = fused(:,ind); + CC.instanceSet = eegtoolkit.util.InstanceSet(fused,CC.featextractors{1}.getLabels); + end + + function configInfo = getConfigInfo(CC) + configInfo = 'ChannelConcat'; + end + + + function time = getTime(CC) + time = 0; + end + end + +end + diff --git a/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.dot b/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.dot new file mode 100644 index 0000000..12c8d7e --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + ChannelConcat -> ChannelConcat; + + ChannelConcat [URL="ChannelConcat.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.html b/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.html new file mode 100644 index 0000000..307459e --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelConcat + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+aggregation/@ChannelConcat >
+

Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelConcat

+ +
+Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelConcat + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.map b/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.map new file mode 100644 index 0000000..50dc87b --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.png b/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f487ec7173f8f3d46e16ca85bc423ead78b6b393 GIT binary patch literal 5232 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+aggregation/@ChannelConcat/index.html b/doc/+eegtoolkit/+aggregation/@ChannelConcat/index.html new file mode 100644 index 0000000..1460814 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelConcat/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+aggregation/@ChannelConcat + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+aggregation/@ChannelConcat >
+ +

Index for ./+eegtoolkit/+aggregation/@ChannelConcat

+ +

Matlab files in this directory:

+ +
 ChannelConcat
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelRatio/ChannelRatio.html b/doc/+eegtoolkit/+aggregation/@ChannelRatio/ChannelRatio.html new file mode 100644 index 0000000..e649cb2 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelRatio/ChannelRatio.html @@ -0,0 +1,83 @@ + + + + Description of ChannelRatio + + + + + + + + + + + + + +

ChannelRatio +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

ChannelRatio.m

+

SOURCE CODE ^

+
0001 classdef ChannelRatio < eegtoolkit.aggregation.AggregatorBase;
+0002     
+0003     properties
+0004     end
+0005     
+0006     methods
+0007         
+0008         function CR = ChannelRatio(CR)
+0009         end
+0010         
+0011         function CR = aggregate(CR)
+0012             numExtract = length(CR.featextractors);
+0013             if numExtract ~=2
+0014                 error ('ChannelRatio: Number of transformers should be 2');
+0015             end
+0016             in1 = CR.featextractors{1}.getInstances;
+0017             in2 = CR.featextractors{2}.getInstances;
+0018             ratio = in1./in2;
+0019             CR.instanceSet = eegtoolkit.util.InstanceSet(ratio,CR.featextractors{1}.getLabels);
+0020         end
+0021         
+0022         function configInfo = getConfigInfo(CR)
+0023             configInfo = 'ChannelRatio';
+0024         end
+0025         
+0026                 
+0027         function time = getTime(CR)
+0028             time = 0;
+0029         end
+0030     end
+0031     
+0032 end
+0033
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelRatio/ChannelRatio.m b/doc/+eegtoolkit/+aggregation/@ChannelRatio/ChannelRatio.m new file mode 100644 index 0000000..3ac766a --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelRatio/ChannelRatio.m @@ -0,0 +1,33 @@ +classdef ChannelRatio < eegtoolkit.aggregation.AggregatorBase; + + properties + end + + methods + + function CR = ChannelRatio(CR) + end + + function CR = aggregate(CR) + numExtract = length(CR.featextractors); + if numExtract ~=2 + error ('ChannelRatio: Number of transformers should be 2'); + end + in1 = CR.featextractors{1}.getInstances; + in2 = CR.featextractors{2}.getInstances; + ratio = in1./in2; + CR.instanceSet = eegtoolkit.util.InstanceSet(ratio,CR.featextractors{1}.getLabels); + end + + function configInfo = getConfigInfo(CR) + configInfo = 'ChannelRatio'; + end + + + function time = getTime(CR) + time = 0; + end + end + +end + diff --git a/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.dot b/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.dot new file mode 100644 index 0000000..90f4631 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + ChannelRatio -> ChannelRatio; + + ChannelRatio [URL="ChannelRatio.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.html b/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.html new file mode 100644 index 0000000..afc5774 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelRatio + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+aggregation/@ChannelRatio >
+

Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelRatio

+ +
+Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelRatio + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.map b/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.map new file mode 100644 index 0000000..872ffb5 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.png b/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b78a950ecd2f9855ece4da52d5f690ec75252d69 GIT binary patch literal 5235 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+aggregation/@ChannelRatio/index.html b/doc/+eegtoolkit/+aggregation/@ChannelRatio/index.html new file mode 100644 index 0000000..e3633bb --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@ChannelRatio/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+aggregation/@ChannelRatio + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+aggregation/@ChannelRatio >
+ +

Index for ./+eegtoolkit/+aggregation/@ChannelRatio

+ +

Matlab files in this directory:

+ +
 ChannelRatio
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@Fisher/Fisher.html b/doc/+eegtoolkit/+aggregation/@Fisher/Fisher.html new file mode 100644 index 0000000..8e4d7ee --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@Fisher/Fisher.html @@ -0,0 +1,147 @@ + + + + Description of Fisher + + + + + + + + + + + + + +

Fisher +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

Fisher.m

+

SOURCE CODE ^

+
0001 classdef Fisher < eegtoolkit.aggregation.AggregatorBase
+0002     properties
+0003         codebookInfo;
+0004         numClusters;
+0005         means;
+0006         covariances;
+0007         priors;
+0008         pcanum;
+0009     end
+0010     
+0011     methods
+0012         function FA = Fisher(codebookfilename,pcanum)
+0013             load(codebookfilename);
+0014             FA.means = means;
+0015             FA.covariances = covariances;
+0016             FA.priors = priors;
+0017             FA.numClusters = length(priors);
+0018             FA.codebookInfo = codebookInfo;
+0019             FA.pcanum = pcanum;
+0020         end
+0021         
+0022         function FA = aggregate(FA)
+0023             numExtract = length(FA.featextractors);
+0024             numFeatures = FA.featextractors{1}.instanceSet.getNumFeatures;
+0025             numTrials = length(FA.featextractors{1}.trials);
+0026             instances = zeros(numTrials,numExtract,numFeatures);
+0027             pcainstances = zeros(numTrials,numExtract,FA.pcanum);
+0028             if FA.pcanum > 0
+0029                 fishers = zeros(numTrials, FA.numClusters * FA.pcanum *2);
+0030             else
+0031                 fishers = zeros(numTrials,FA.numClusters*numFeatures*2);
+0032             end
+0033             for i=1:numExtract
+0034                 instances(:,i,:) = FA.featextractors{i}.getInstances;
+0035                 if FA.pcanum > 0
+0036                     [~,pcainstances(:,i,:),~,~,~] = pca(squeeze(instances(:,i,:)),'NumComponents',FA.pcanum);
+0037                 end
+0038             end
+0039             for i=1:numTrials
+0040                 if FA.pcanum > 0
+0041                     dataToBeEncoded = squeeze(pcainstances(i,:,:));
+0042                 else
+0043                     dataToBeEncoded = squeeze(instances(i,:,:));
+0044                 end
+0045                 fishers(i,:) =  vl_fisher(dataToBeEncoded', FA.means, FA.covariances, FA.priors);
+0046             end
+0047             FA.instanceSet = eegtoolkit.util.InstanceSet(fishers,FA.featextractors{1}.getLabels);
+0048         end
+0049         
+0050         function configInfo = getConfigInfo(FA)
+0051             configInfo = sprintf('Fisher:\tcodebook:%s',FA.codebookInfo);
+0052         end
+0053                         
+0054         function time = getTime(FA)
+0055             time = 0;
+0056         end
+0057     end
+0058     
+0059     methods (Static)
+0060         function [] = trainCodebook(session, channels, numCenters, codebookfilename,pcanum)
+0061             nfft = 512;
+0062             extractors = {};
+0063             numChannels = length(channels);
+0064             numTrials = length(session.trials);
+0065             numFeatures = nfft/2+1;
+0066             instances = zeros(numTrials,numChannels,numFeatures);
+0067             h = waitbar(0,'message');
+0068             for i=1:length(channels)
+0069                 waitbar(i/(length(channels)+10),h,sprintf('Computing channel:%d',channels(i)));
+0070                 extractors{i} = eegtoolkit.featextraction.PWelch;
+0071                 extractors{i}.trials = session.trials;
+0072                 extractors{i}.channel = channels(i);
+0073                 extractors{i}.nfft = nfft;
+0074                 extractors{i}.seconds = 5;
+0075                 extractors{i}.extract;
+0076                 instances(:,i,:) = extractors{i}.getInstances;
+0077             end
+0078             instances = reshape(instances,numTrials*numChannels,numFeatures);
+0079             waitbar(i/(length(channels)+10),h,'Computing gmm..');
+0080             if(pcanum > 0)
+0081                 [~,instances,~,~,~] = pca(instances,'NumComponents',pcanum);
+0082             end
+0083             [means, covariances, priors] = vl_gmm(instances', numCenters);
+0084             waitbar(i+5/(length(channels)+10),h,'Saving variables..');
+0085             codebookInfo = sprintf('filename:%s\tnumClusters:%d\tnumPCA:%d\tchannels:',codebookfilename, numCenters, pcanum);
+0086             for i=1:length(channels)
+0087                 codebookInfo = sprintf('%s%d ',codebookInfo,channels(i));
+0088             end
+0089             save(codebookfilename,'means','covariances','priors','codebookInfo');
+0090             close(h);
+0091         end
+0092         
+0093 
+0094     end
+0095     
+0096 end
+0097
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@Fisher/Fisher.m b/doc/+eegtoolkit/+aggregation/@Fisher/Fisher.m new file mode 100644 index 0000000..8c6ffe0 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@Fisher/Fisher.m @@ -0,0 +1,97 @@ +classdef Fisher < eegtoolkit.aggregation.AggregatorBase + properties + codebookInfo; + numClusters; + means; + covariances; + priors; + pcanum; + end + + methods + function FA = Fisher(codebookfilename,pcanum) + load(codebookfilename); + FA.means = means; + FA.covariances = covariances; + FA.priors = priors; + FA.numClusters = length(priors); + FA.codebookInfo = codebookInfo; + FA.pcanum = pcanum; + end + + function FA = aggregate(FA) + numExtract = length(FA.featextractors); + numFeatures = FA.featextractors{1}.instanceSet.getNumFeatures; + numTrials = length(FA.featextractors{1}.trials); + instances = zeros(numTrials,numExtract,numFeatures); + pcainstances = zeros(numTrials,numExtract,FA.pcanum); + if FA.pcanum > 0 + fishers = zeros(numTrials, FA.numClusters * FA.pcanum *2); + else + fishers = zeros(numTrials,FA.numClusters*numFeatures*2); + end + for i=1:numExtract + instances(:,i,:) = FA.featextractors{i}.getInstances; + if FA.pcanum > 0 + [~,pcainstances(:,i,:),~,~,~] = pca(squeeze(instances(:,i,:)),'NumComponents',FA.pcanum); + end + end + for i=1:numTrials + if FA.pcanum > 0 + dataToBeEncoded = squeeze(pcainstances(i,:,:)); + else + dataToBeEncoded = squeeze(instances(i,:,:)); + end + fishers(i,:) = vl_fisher(dataToBeEncoded', FA.means, FA.covariances, FA.priors); + end + FA.instanceSet = eegtoolkit.util.InstanceSet(fishers,FA.featextractors{1}.getLabels); + end + + function configInfo = getConfigInfo(FA) + configInfo = sprintf('Fisher:\tcodebook:%s',FA.codebookInfo); + end + + function time = getTime(FA) + time = 0; + end + end + + methods (Static) + function [] = trainCodebook(session, channels, numCenters, codebookfilename,pcanum) + nfft = 512; + extractors = {}; + numChannels = length(channels); + numTrials = length(session.trials); + numFeatures = nfft/2+1; + instances = zeros(numTrials,numChannels,numFeatures); + h = waitbar(0,'message'); + for i=1:length(channels) + waitbar(i/(length(channels)+10),h,sprintf('Computing channel:%d',channels(i))); + extractors{i} = eegtoolkit.featextraction.PWelch; + extractors{i}.trials = session.trials; + extractors{i}.channel = channels(i); + extractors{i}.nfft = nfft; + extractors{i}.seconds = 5; + extractors{i}.extract; + instances(:,i,:) = extractors{i}.getInstances; + end + instances = reshape(instances,numTrials*numChannels,numFeatures); + waitbar(i/(length(channels)+10),h,'Computing gmm..'); + if(pcanum > 0) + [~,instances,~,~,~] = pca(instances,'NumComponents',pcanum); + end + [means, covariances, priors] = vl_gmm(instances', numCenters); + waitbar(i+5/(length(channels)+10),h,'Saving variables..'); + codebookInfo = sprintf('filename:%s\tnumClusters:%d\tnumPCA:%d\tchannels:',codebookfilename, numCenters, pcanum); + for i=1:length(channels) + codebookInfo = sprintf('%s%d ',codebookInfo,channels(i)); + end + save(codebookfilename,'means','covariances','priors','codebookInfo'); + close(h); + end + + + end + +end + diff --git a/doc/+eegtoolkit/+aggregation/@Fisher/graph.dot b/doc/+eegtoolkit/+aggregation/@Fisher/graph.dot new file mode 100644 index 0000000..b9da3e5 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@Fisher/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + Fisher -> Fisher; + + Fisher [URL="Fisher.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@Fisher/graph.html b/doc/+eegtoolkit/+aggregation/@Fisher/graph.html new file mode 100644 index 0000000..51a136b --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@Fisher/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+aggregation/@Fisher + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+aggregation/@Fisher >
+

Dependency Graph for ./+eegtoolkit/+aggregation/@Fisher

+ +
+Dependency Graph for ./+eegtoolkit/+aggregation/@Fisher + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@Fisher/graph.map b/doc/+eegtoolkit/+aggregation/@Fisher/graph.map new file mode 100644 index 0000000..09f0a4e --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@Fisher/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+aggregation/@Fisher/graph.png b/doc/+eegtoolkit/+aggregation/@Fisher/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4f3fa9dba8278195da5067e3b103feeb3f1e4fbc GIT binary patch literal 3685 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 + + + Index for Directory ./+eegtoolkit/+aggregation/@Fisher + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+aggregation/@Fisher >
+ +

Index for ./+eegtoolkit/+aggregation/@Fisher

+ +

Matlab files in this directory:

+ +
 Fisher
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@LateFusion/LateFusion.html b/doc/+eegtoolkit/+aggregation/@LateFusion/LateFusion.html new file mode 100644 index 0000000..a1115e5 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@LateFusion/LateFusion.html @@ -0,0 +1,81 @@ + + + + Description of LateFusion + + + + + + + + + + + + + +

LateFusion +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

LateFusion.m

+

SOURCE CODE ^

+
0001 classdef LateFusion < eegtoolkit.aggregation.AggregatorBase;
+0002     
+0003     properties
+0004     end
+0005     
+0006     methods
+0007         
+0008         function LFA = LateFusion(LFA)
+0009         end
+0010         
+0011         function LFA = aggregate(LFA)
+0012             numTransf = length(LFA.featextractors);
+0013             LFA.instanceSet = eegtoolkit.util.FusionInstanceSet(LFA.featextractors{1}.instanceSet);
+0014             
+0015             for i=1:numTransf
+0016                 LFA.instanceSet = LFA.instanceSet.addInstanceSet(LFA.featextractors{i}.instanceSet);
+0017             end
+0018         end
+0019         
+0020         function configInfo = getConfigInfo(LFA)
+0021             configInfo = 'LateFusion';
+0022         end
+0023         
+0024                 
+0025         function time = getTime(LFA)
+0026             time = 0;
+0027         end
+0028     end
+0029     
+0030 end
+0031
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@LateFusion/LateFusion.m b/doc/+eegtoolkit/+aggregation/@LateFusion/LateFusion.m new file mode 100644 index 0000000..c3aa6c7 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@LateFusion/LateFusion.m @@ -0,0 +1,31 @@ +classdef LateFusion < eegtoolkit.aggregation.AggregatorBase; + + properties + end + + methods + + function LFA = LateFusion(LFA) + end + + function LFA = aggregate(LFA) + numTransf = length(LFA.featextractors); + LFA.instanceSet = eegtoolkit.util.FusionInstanceSet(LFA.featextractors{1}.instanceSet); + + for i=1:numTransf + LFA.instanceSet = LFA.instanceSet.addInstanceSet(LFA.featextractors{i}.instanceSet); + end + end + + function configInfo = getConfigInfo(LFA) + configInfo = 'LateFusion'; + end + + + function time = getTime(LFA) + time = 0; + end + end + +end + diff --git a/doc/+eegtoolkit/+aggregation/@LateFusion/graph.dot b/doc/+eegtoolkit/+aggregation/@LateFusion/graph.dot new file mode 100644 index 0000000..41a4220 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@LateFusion/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + LateFusion -> LateFusion; + + LateFusion [URL="LateFusion.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@LateFusion/graph.html b/doc/+eegtoolkit/+aggregation/@LateFusion/graph.html new file mode 100644 index 0000000..42fda6d --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@LateFusion/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+aggregation/@LateFusion + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+aggregation/@LateFusion >
+

Dependency Graph for ./+eegtoolkit/+aggregation/@LateFusion

+ +
+Dependency Graph for ./+eegtoolkit/+aggregation/@LateFusion + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@LateFusion/graph.map b/doc/+eegtoolkit/+aggregation/@LateFusion/graph.map new file mode 100644 index 0000000..ab3767d --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@LateFusion/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+aggregation/@LateFusion/graph.png b/doc/+eegtoolkit/+aggregation/@LateFusion/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..7b85f0add6e4fc89516793f843c970d7201e0455 GIT binary patch literal 4775 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 + + + Index for Directory ./+eegtoolkit/+aggregation/@LateFusion + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+aggregation/@LateFusion >
+ +

Index for ./+eegtoolkit/+aggregation/@LateFusion

+ +

Matlab files in this directory:

+ +
 LateFusion
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@VLAD/VLAD.html b/doc/+eegtoolkit/+aggregation/@VLAD/VLAD.html new file mode 100644 index 0000000..9b3acf6 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@VLAD/VLAD.html @@ -0,0 +1,133 @@ + + + + Description of VLAD + + + + + + + + + + + + + +

VLAD +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

VLAD.m

+

SOURCE CODE ^

+
0001 classdef VLAD < eegtoolkit.aggregation.AggregatorBase;
+0002     
+0003     properties
+0004         kdtree;
+0005         centers;
+0006         codebookInfo;
+0007         numClusters;
+0008     end
+0009     
+0010     methods
+0011         
+0012         function VA = VLAD(codebookfilename)
+0013             load(codebookfilename);
+0014             VA.kdtree = kdtree;
+0015             VA.centers = centers;
+0016             VA.codebookInfo = codebookInfo;
+0017             [~,VA.numClusters] = size(centers);
+0018         end
+0019         
+0020         function VA = aggregate(VA)
+0021             numExtract = length(VA.transformers);
+0022             numFeatures = VA.featextractors{1}.instanceSet.getNumFeatures;
+0023             numTrials = length(VA.featextractors{1}.trials);
+0024             instances = zeros(numTrials,numExtract,numFeatures);
+0025             vlads = zeros(numTrials,VA.kdtree.numData*numFeatures);
+0026             for i=1:numExtract
+0027                 instances(:,i,:) = VA.featextractors{i}.getInstances;
+0028             end
+0029             for i=1:numTrials
+0030                 dataToBeEncoded = squeeze(instances(i,:,:));
+0031                 nn = vl_kdtreequery(VA.kdtree, VA.centers, dataToBeEncoded');
+0032                 assignments = zeros(VA.numClusters, numExtract);
+0033                 assignments(sub2ind(size(assignments), nn, 1:length(nn))) = 1;
+0034                 vlads(i,:) = vl_vlad(dataToBeEncoded',VA.centers,assignments);
+0035             end
+0036             VA.instanceSet = eegtoolkit.util.InstanceSet(vlads,VA.featextractors{1}.getLabels);
+0037         end
+0038         
+0039         function configInfo = getConfigInfo(VA)
+0040             configInfo = sprintf('VLAD:\tcodebook:%s',VA.codebookInfo);
+0041         end
+0042         
+0043                 
+0044         function time = getTime(VA)
+0045             time = 0;
+0046         end
+0047     end
+0048     
+0049     methods (Static)
+0050         function [] = trainCodebook(session, channels, numCenters, codebookfilename)
+0051             nfft = 512;
+0052             extractors = {};
+0053             numChannels = length(channels);
+0054             numTrials = length(session.trials);
+0055             numFeatures = nfft/2+1;
+0056             instances = zeros(numTrials,numChannels,numFeatures);
+0057             h = waitbar(0,'message');
+0058             for i=1:length(channels)
+0059                 waitbar(i/(length(channels)+10),h,sprintf('Computing channel:%d',channels(i)));
+0060                 extractors{i} = eegtoolkit.transformer.PWelchTransformer;
+0061                 extractors{i}.trials = session.trials;
+0062                 extractors{i}.channel = channels(i);
+0063                 extractors{i}.nfft = nfft;
+0064                 extractors{i}.seconds = 5;
+0065                 extractors{i}.transform;
+0066                 instances(:,i,:) = extractors{i}.getInstances;
+0067             end
+0068             instances = reshape(instances,numTrials*numChannels,numFeatures);
+0069             waitbar(i/(length(channels)+10),h,'Clustering..');
+0070             centers = vl_kmeans(instances',numCenters);
+0071             waitbar(i+4/(length(channels)+10),h,'Building kdtree..');
+0072             kdtree = vl_kdtreebuild(centers);
+0073             waitbar(i+5/(length(channels)+10),h,'Saving variables..');
+0074             codebookInfo = sprintf('filename:%s\tnumClusters:%d\tchannels:',codebookfilename, numCenters);
+0075             for i=1:length(channels)
+0076                 codebookInfo = sprintf('%s%d ',codebookInfo,channels(i));
+0077             end
+0078             save(codebookfilename,'centers','kdtree','codebookInfo');
+0079             close(h);
+0080         end
+0081     end
+0082 end
+0083
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@VLAD/VLAD.m b/doc/+eegtoolkit/+aggregation/@VLAD/VLAD.m new file mode 100644 index 0000000..7657d89 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@VLAD/VLAD.m @@ -0,0 +1,83 @@ +classdef VLAD < eegtoolkit.aggregation.AggregatorBase; + + properties + kdtree; + centers; + codebookInfo; + numClusters; + end + + methods + + function VA = VLAD(codebookfilename) + load(codebookfilename); + VA.kdtree = kdtree; + VA.centers = centers; + VA.codebookInfo = codebookInfo; + [~,VA.numClusters] = size(centers); + end + + function VA = aggregate(VA) + numExtract = length(VA.transformers); + numFeatures = VA.featextractors{1}.instanceSet.getNumFeatures; + numTrials = length(VA.featextractors{1}.trials); + instances = zeros(numTrials,numExtract,numFeatures); + vlads = zeros(numTrials,VA.kdtree.numData*numFeatures); + for i=1:numExtract + instances(:,i,:) = VA.featextractors{i}.getInstances; + end + for i=1:numTrials + dataToBeEncoded = squeeze(instances(i,:,:)); + nn = vl_kdtreequery(VA.kdtree, VA.centers, dataToBeEncoded'); + assignments = zeros(VA.numClusters, numExtract); + assignments(sub2ind(size(assignments), nn, 1:length(nn))) = 1; + vlads(i,:) = vl_vlad(dataToBeEncoded',VA.centers,assignments); + end + VA.instanceSet = eegtoolkit.util.InstanceSet(vlads,VA.featextractors{1}.getLabels); + end + + function configInfo = getConfigInfo(VA) + configInfo = sprintf('VLAD:\tcodebook:%s',VA.codebookInfo); + end + + + function time = getTime(VA) + time = 0; + end + end + + methods (Static) + function [] = trainCodebook(session, channels, numCenters, codebookfilename) + nfft = 512; + extractors = {}; + numChannels = length(channels); + numTrials = length(session.trials); + numFeatures = nfft/2+1; + instances = zeros(numTrials,numChannels,numFeatures); + h = waitbar(0,'message'); + for i=1:length(channels) + waitbar(i/(length(channels)+10),h,sprintf('Computing channel:%d',channels(i))); + extractors{i} = eegtoolkit.transformer.PWelchTransformer; + extractors{i}.trials = session.trials; + extractors{i}.channel = channels(i); + extractors{i}.nfft = nfft; + extractors{i}.seconds = 5; + extractors{i}.transform; + instances(:,i,:) = extractors{i}.getInstances; + end + instances = reshape(instances,numTrials*numChannels,numFeatures); + waitbar(i/(length(channels)+10),h,'Clustering..'); + centers = vl_kmeans(instances',numCenters); + waitbar(i+4/(length(channels)+10),h,'Building kdtree..'); + kdtree = vl_kdtreebuild(centers); + waitbar(i+5/(length(channels)+10),h,'Saving variables..'); + codebookInfo = sprintf('filename:%s\tnumClusters:%d\tchannels:',codebookfilename, numCenters); + for i=1:length(channels) + codebookInfo = sprintf('%s%d ',codebookInfo,channels(i)); + end + save(codebookfilename,'centers','kdtree','codebookInfo'); + close(h); + end + end +end + diff --git a/doc/+eegtoolkit/+aggregation/@VLAD/graph.dot b/doc/+eegtoolkit/+aggregation/@VLAD/graph.dot new file mode 100644 index 0000000..a7489f3 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@VLAD/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + VLAD -> VLAD; + + VLAD [URL="VLAD.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@VLAD/graph.html b/doc/+eegtoolkit/+aggregation/@VLAD/graph.html new file mode 100644 index 0000000..09f3963 --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@VLAD/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+aggregation/@VLAD + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+aggregation/@VLAD >
+

Dependency Graph for ./+eegtoolkit/+aggregation/@VLAD

+ +
+Dependency Graph for ./+eegtoolkit/+aggregation/@VLAD + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@VLAD/graph.map b/doc/+eegtoolkit/+aggregation/@VLAD/graph.map new file mode 100644 index 0000000..06ab2bd --- /dev/null +++ b/doc/+eegtoolkit/+aggregation/@VLAD/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+aggregation/@VLAD/graph.png b/doc/+eegtoolkit/+aggregation/@VLAD/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..29937e241e1d7fd93437fa7a5275329d6790f912 GIT binary patch literal 3831 zcmWkx1wa#R7#<-Eq(M?r1O!1+q@*^Gt^txFb979)Q=~%?gaINg!bnF+hbSN|(ji^a zKOymdY`5L*Zg=0^`#$wW>uRf#lQNS+AP{o3Cop}m4gnt-C=vLs77GgmDa8wC{=?gB78Epv-~v;R@uL08`y=azcZ`vV~Og46C)H*q@rR)y^Szo7FeTZ zJVr~aPpE+@GUlaAZyzFR;#_%^JS7L|!Xsu$C9DbO317}K(GmUS#x@2*{nO-IC{0%JOfclBWF^c>t78Dkyy1cwhdSZ!H(W_W4 zhrHzz5Ky+XWFx(KGe^G|z4(n>TvAe*KgD`?zK!vr6XR=2_JoCw$c~W_T1!jI-TnPA zrJNA3GzG4*jXB^3?Zm<2vpbLH;OMAlW)>S0LyABkK2}xH7#bQ5I^fV=Uf;$mk<`r0 zF}u5H%@49nii(O&9^y{QIE+u7Q66eUr$ETpEh=<_6Wol-&u)ZGsBboQk!-w=@w*9ZNv!9jQZ3y~x zK_Vg|zW4QY78?|yFU~yczJ9&K!$XwJtD}NI(6x7Ta3=pK73{b_IW?uHs~d8D95Inu5N3+`>HBsx=UL z?>=4kvN7nQ0ehFJ%ZXrX5*I6)9+%9c^#>fr=ByXwHa2GJ>FIf((N?CW80<3RAd0{a zXIf^8i=l~rWmfAFc(?pu243>Z?O^369bu^B@3I2En3~l5A`K!tN5@6b6e+7#2q41n zB*xNIR8*AjeJ>L``<(6Hn;#q@SfgIwgO#DKt_aYOCNSR0{&Mf_M`#XO8k#ehz}a-! zJgPU9Q%;W6wm-8iUoF|M$bbJXFKD`$ODd&w@^GxUcpHx?B^|+uNIrO_mYh0t$sHSXps|g@p;b zEj@vT4c=kpAx9towctxpzi-*d_|gV24Z1u9_Pgn{BOG!!AEzvx3{1pf6>|4C@W-A^$G$F*&M?zF899w zYF=nmvfLR>t2MURmo64?JmY<|heRToXlXkD_xjUB!tL$t1NN8H5;vSWbQ_XQ($mvZ z@IzZ$+sVmE9AkTavZtw|^E)_be~APSJznwL=Djx<1AiXSOKZj6#bu1WH5d@e#Kh#b zh&3U&w28U7lh=gB0=QLhA^w!lsxQ^m)$3elq$${B)518=-{P3=-@E7g_c)H(YN857 zMnO?Cx%2DvU^U~s2w`mOKKeF0!5Eij-)^Veia>w+-hlPz|79h9v&T` z+}*1umgOn+=$Po}I&TRWJ>~uY>a#vl#6(T4=0aB$$y%FKKed>N3;BP`sCbNmhc*sV2ukoGuG8gDmI{&H||d-tXg&#p zJVhWzu_vH19`5d&Zl^08Fn`4JUt~Eo0|O3|LyxW zo~~p-DJi=rs%?RTKp_7AZMF5J2nf<#b+ZR|el{#Q%r-8!BnQ@YjkTE=TUXb_ganFM zJAe9U7{05kE5gvwQ@`5k_mAZ`H1BqSslB^(fmxb*gk z38qAL`5JX6KyZix5}Bun3B_w{Y}7R{K;GgUpkZgHl$V#kE#pPT^3bUjNXOTi{n4?p zje)_qII@8Az3%y|2QSaI2XmBxqm4KD*P2ugWXoSaMQ2x+r-qsFwE=>9U}?U7`UHhg zF*4evooq>PiistMaXiHyESl&W7?6Y{BqWrUmrG()i$*;C;>XrK;t~^!_+myKaAYJT zB7S!!CMVUw9a1ohM_rvC3>erK{;930(Jw~0eNW;vVp$xYp4L>PN=r#W?Tt%kC5#m5 ztiB?ljhp?=^aTRM6%qnkY|<4!u-`_^-U>vFgoFeQ8igsUuV;b`j*b#$X&)m@k;pqn zrBCrxRaKvG(*S%Cy12OP9v+HEEzZw}q>I_+R#sBWcx?^tTzOkQcXZq|IK6rErik;T zIC#w;u8%N^+vz55IK))j4k%F(UQ|k|08oyVKcg(rk5)}&^SoEa7jv?fmzb2570)W; z#pr4gU$0V(*zcf}|5C@IRcSxMv$DF%qV?5dorXck{L{{7awycw$>}~2At}E@JM{v6 z{Q1j^e?UjnbaZt5e0D& z|NKeAV0sD*c}m8DyJBv|MMVi?y#7v0^=C>Y1CIewiEyxhtvN%|bw6Hm_G5A~txoo1 zXVGju0;idV6d@rYo{XiS``sOplv3z(gv+Z80)4_Y4mYYxhbzgn)th=}3bvPgiG3jpQwss|OzE6&3Na%LnzneM@s~ z(EKSI1766fU{#bo&eXEWFJ-F6d2zG6rEKT992oJv3Tt`*bDi&jjkJu+0Z{cSO|5?- zAAxZa5Rq9aDdF>KrYS(qG%&?K`}-3FjLVkJjy6yGWp)OE?LpQS7dw8H7-t;izuS5N z(^XX^&dtjknx2j;F)nW(8miQgWV`T)Pfevi`S&lcxtR@6CFuz_k!0Psq#rK;f$~%n zRbVi}+}vC$TH5fCkdVJ5>wT;R1qB{%ZX3T?+KnS_+@zQFG|Ee^zHG?|4-bbw_?aaX zNqzfv904)Kd?b5NYoS&~!)iqk84!1Z;gOLyZ{CE0z!R|lgBQfAP!4ECb#*v`U*gmv zOWXE~YWb8$*WG{rZRf$bo&#OKIxJ`VII>>%a#01y8Jo1ncaDp;aAMh@^GC^V-#!BM z!T+eq1O7Zz3!#bb+@gkM4J}7=US9ygkJ8uIzd}^F41zq;*$L};A<8D}vs-^UH96^X zdG1?gR-1tQ7MH^TJ#(J?VoyJU8XK(u@Erz)TkKA>_4Tdqf;Db|j48s!6$a?gh+a^t zwVrMX&i;42V{2{w#~_eMu4}746oo?FmUOud;vCS|iD0!gLOr^AWH$wfaw4LlRXQKU zXE3bOv$Oq6OD_P9wbO({eSLkeqf&Bma>w`YPry!KC=slztTm}G-mwW%0m*#ixq-l+ zZ}dIz*&GwpSoeE=Pe1@^Zk`$R#lZM%+c_GZ8ug>6#~S!pQ1m;{_orN2H@mWfFN>dX z@d^tk6=`Qx;qrx^S4xC^F%=XO6+N`T7!+zQfYdH1U724#1d0+)ObHSM2Eusj*7ce7 zI$BpjY(^$LLcF|@z}r1MJn}O#Sbmq9bex}`GiWU4Q}r4Z<3S40j0yZ%`Ggb z>FHmC2ouL7Mg-#%ln+yl28TwGqRs;5T{>>dDA7o@BGeYXonxpYmUXV0Ep zs4vJ_2sRcL5*`1YQTF$jfwT?{QHO?xLdnVDPo6-Pl$CQ3{0l29Hb)Ipn8(i{$RwDj zC$8-uzJr5 + + + Index for Directory ./+eegtoolkit/+aggregation/@VLAD + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+aggregation/@VLAD >
+ +

Index for ./+eegtoolkit/+aggregation/@VLAD

+ +

Matlab files in this directory:

+ +
 VLAD
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@Adaboost/Adaboost.html b/doc/+eegtoolkit/+classification/@Adaboost/Adaboost.html new file mode 100644 index 0000000..27f3d17 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@Adaboost/Adaboost.html @@ -0,0 +1,181 @@ + + + + Description of Adaboost + + + + + + + + + + + + + +

Adaboost +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

Adaboost.m

+

SOURCE CODE ^

+
0001 classdef Adaboost < eegtoolkit.classification.ClassifierBase
+0002     
+0003     properties (Constant)
+0004 
+0005     end
+0006     
+0007     properties
+0008         Method % AdaboostM2 (default), TotalBoost, LPBoost, Subspace, etc
+0009         NLearn % Number of learners (default 100)
+0010         Learners % Tree (default), KNN (only for Subspace), Discriminant(recommended for subspace), Custom
+0011         models;
+0012         totalTime;
+0013         totalCount;
+0014     end
+0015     
+0016     methods (Access = public)
+0017         function BOOST = Adaboost(instanceSet, Method, NLearn, Learners)
+0018             %set default parameters
+0019             BOOST.Method = 'AdaBoostM2';
+0020             BOOST.NLearn=100;
+0021             BOOST.Learners = 'Tree';
+0022             if nargin > 0
+0023                 BOOST.instanceSet = instanceSet;
+0024             end
+0025             if nargin > 1
+0026                 BOOST.Method = Method;
+0027             end
+0028             if nargin > 2 
+0029                 BOOST.NLearn=NLearn;
+0030             end
+0031             if nargin > 3
+0032                 BOOST.Learners = Learners;
+0033             end
+0034             BOOST.totalTime = 0;
+0035             BOOST.totalCount = 0;
+0036         end
+0037         
+0038         function BOOST = build(BOOST)
+0039             %clear all from previous calls to "build"
+0040             BOOST.reset;
+0041             numLabels = BOOST.instanceSet.getNumLabels;
+0042             uniqueLabels = unique(BOOST.instanceSet.getLabels);
+0043             
+0044             % ---- Multi-Class ----- %
+0045             instances=BOOST.instanceSet.instances;
+0046             labels=BOOST.instanceSet.labels;
+0047             
+0048             BOOST.models{1} = fitensemble(instances,labels,BOOST.Method, BOOST.NLearn, BOOST.Learners,...
+0049                 'Type','Classification');
+0050 
+0051 %             for i=1:numLabels
+0052 %                 currentLabel = uniqueLabels(i);
+0053 %                 labels = zeros(BOOST.instanceSet.getNumInstances,1)-1;
+0054 %                 labels(BOOST.instanceSet.getInstanceIndicesForLabel(currentLabel)) = 1;
+0055 %                 instances = sparse(BOOST.instanceSet.getInstances);
+0056 %                 N = length(labels); % X training labels
+0057 %                 W = 1/N * ones(N,1); %Weights initialization
+0058 %                 M = 10; % Number of boosting iterations
+0059 %                 for m=1:M
+0060 %                     C = 1; %The cost parameters of the linear SVM, you can...
+0061 %                     % perform a grid search for the optimal value as well
+0062 %
+0063 %                     %Calculate the error and alpha in adaBoost with cross validation
+0064 %                     cmd = ['-c ', num2str(C), ' -b 1'];
+0065 %                     model = svmtrain(W,labels, instances, cmd);
+0066 %                     [Xout, acc, ~] = svmpredict(labels, instances,model);
+0067 %
+0068 %                     err = sum(.5 * W .* acc * N)/sum(W);
+0069 %                     alpha = log( (1-err)/err );
+0070 %
+0071 %                     % update the weight
+0072 %                     W = W.*exp( - alpha.*Xout.*X );
+0073 %                     W = W/norm(W);
+0074 %                 end
+0075 %                 BOOST.models{i} = model;
+0076 %
+0077 %             end
+0078             
+0079         end
+0080         
+0081         function [output, probabilities, ranking] = classifyInstance(BOOST,instance)
+0082             %input = instance matrix rows = instances, cols = attributes
+0083             %output = predicted class
+0084             %probabilities = probability for predicted class
+0085             %ranking = propabilities for all classes (e.g. to use with mAP)
+0086             
+0087             
+0088             %TODO:should print an error if 'build' has not been called
+0089             numModels = length(BOOST.models);
+0090             [numinstance, ~] = size(instance);
+0091             scores = zeros(numModels,numinstance);
+0092              
+0093             % ---- Multi-class ----- %
+0094             tic
+0095             [label,scores] = predict(BOOST.models{1},instance); 
+0096             BOOST.totalTime = BOOST.totalTime + toc;
+0097             BOOST.totalCount = BOOST.totalCount + numinstance;
+0098 
+0099              output = zeros(numinstance,1);
+0100              probabilities = zeros(numinstance,1);
+0101              %we need these for ranking metrics (e.g. mAP)
+0102              ranking = scores;
+0103              for i=1:numinstance
+0104                  %select the class with the highest probability
+0105                  [prob, idx] = max(scores(i,:));
+0106                  uniqueLabels = unique(BOOST.instanceSet.getLabels);
+0107                  %output the label with highest probability
+0108                  output(i,1) = uniqueLabels(idx);
+0109                  %return the probability for the output label
+0110                  probabilities(i,1) = prob;
+0111              end
+0112         end
+0113         
+0114         function BOOST = reset(BOOST)
+0115             %delete all stored models
+0116             BOOST.models = {};
+0117         end
+0118         
+0119         function configInfo = getConfigInfo(BOOST)
+0120             configInfo = sprintf('Adaboost: Method: %s NLearn: %d Learners: %s',...
+0121                 BOOST.Method, BOOST.NLearn, BOOST.Learners);
+0122         end
+0123         
+0124                         
+0125         function time = getTime(BOOST)
+0126             time = BOOST.totalTime / BOOST.totalCount;
+0127         end
+0128                 
+0129     end
+0130 end
+0131
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@Adaboost/Adaboost.m b/doc/+eegtoolkit/+classification/@Adaboost/Adaboost.m new file mode 100644 index 0000000..cd27623 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@Adaboost/Adaboost.m @@ -0,0 +1,131 @@ +classdef Adaboost < eegtoolkit.classification.ClassifierBase + + properties (Constant) + + end + + properties + Method % AdaboostM2 (default), TotalBoost, LPBoost, Subspace, etc + NLearn % Number of learners (default 100) + Learners % Tree (default), KNN (only for Subspace), Discriminant(recommended for subspace), Custom + models; + totalTime; + totalCount; + end + + methods (Access = public) + function BOOST = Adaboost(instanceSet, Method, NLearn, Learners) + %set default parameters + BOOST.Method = 'AdaBoostM2'; + BOOST.NLearn=100; + BOOST.Learners = 'Tree'; + if nargin > 0 + BOOST.instanceSet = instanceSet; + end + if nargin > 1 + BOOST.Method = Method; + end + if nargin > 2 + BOOST.NLearn=NLearn; + end + if nargin > 3 + BOOST.Learners = Learners; + end + BOOST.totalTime = 0; + BOOST.totalCount = 0; + end + + function BOOST = build(BOOST) + %clear all from previous calls to "build" + BOOST.reset; + numLabels = BOOST.instanceSet.getNumLabels; + uniqueLabels = unique(BOOST.instanceSet.getLabels); + + % ---- Multi-Class ----- % + instances=BOOST.instanceSet.instances; + labels=BOOST.instanceSet.labels; + + BOOST.models{1} = fitensemble(instances,labels,BOOST.Method, BOOST.NLearn, BOOST.Learners,... + 'Type','Classification'); + +% for i=1:numLabels +% currentLabel = uniqueLabels(i); +% labels = zeros(BOOST.instanceSet.getNumInstances,1)-1; +% labels(BOOST.instanceSet.getInstanceIndicesForLabel(currentLabel)) = 1; +% instances = sparse(BOOST.instanceSet.getInstances); +% N = length(labels); % X training labels +% W = 1/N * ones(N,1); %Weights initialization +% M = 10; % Number of boosting iterations +% for m=1:M +% C = 1; %The cost parameters of the linear SVM, you can... +% % perform a grid search for the optimal value as well +% +% %Calculate the error and alpha in adaBoost with cross validation +% cmd = ['-c ', num2str(C), ' -b 1']; +% model = svmtrain(W,labels, instances, cmd); +% [Xout, acc, ~] = svmpredict(labels, instances,model); +% +% err = sum(.5 * W .* acc * N)/sum(W); +% alpha = log( (1-err)/err ); +% +% % update the weight +% W = W.*exp( - alpha.*Xout.*X ); +% W = W/norm(W); +% end +% BOOST.models{i} = model; +% +% end + + end + + function [output, probabilities, ranking] = classifyInstance(BOOST,instance) + %input = instance matrix rows = instances, cols = attributes + %output = predicted class + %probabilities = probability for predicted class + %ranking = propabilities for all classes (e.g. to use with mAP) + + + %TODO:should print an error if 'build' has not been called + numModels = length(BOOST.models); + [numinstance, ~] = size(instance); + scores = zeros(numModels,numinstance); + + % ---- Multi-class ----- % + tic + [label,scores] = predict(BOOST.models{1},instance); + BOOST.totalTime = BOOST.totalTime + toc; + BOOST.totalCount = BOOST.totalCount + numinstance; + + output = zeros(numinstance,1); + probabilities = zeros(numinstance,1); + %we need these for ranking metrics (e.g. mAP) + ranking = scores; + for i=1:numinstance + %select the class with the highest probability + [prob, idx] = max(scores(i,:)); + uniqueLabels = unique(BOOST.instanceSet.getLabels); + %output the label with highest probability + output(i,1) = uniqueLabels(idx); + %return the probability for the output label + probabilities(i,1) = prob; + end + end + + function BOOST = reset(BOOST) + %delete all stored models + BOOST.models = {}; + end + + function configInfo = getConfigInfo(BOOST) + configInfo = sprintf('Adaboost: Method: %s NLearn: %d Learners: %s',... + BOOST.Method, BOOST.NLearn, BOOST.Learners); + end + + + function time = getTime(BOOST) + time = BOOST.totalTime / BOOST.totalCount; + end + + end +end + diff --git a/doc/+eegtoolkit/+classification/@Adaboost/graph.dot b/doc/+eegtoolkit/+classification/@Adaboost/graph.dot new file mode 100644 index 0000000..3b7d0bf --- /dev/null +++ b/doc/+eegtoolkit/+classification/@Adaboost/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + Adaboost -> Adaboost; + + Adaboost [URL="Adaboost.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@Adaboost/graph.html b/doc/+eegtoolkit/+classification/@Adaboost/graph.html new file mode 100644 index 0000000..3ed3a88 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@Adaboost/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@Adaboost + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@Adaboost >
+

Dependency Graph for ./+eegtoolkit/+classification/@Adaboost

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@Adaboost + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@Adaboost/graph.map b/doc/+eegtoolkit/+classification/@Adaboost/graph.map new file mode 100644 index 0000000..7cb3dd1 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@Adaboost/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@Adaboost/graph.png b/doc/+eegtoolkit/+classification/@Adaboost/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f260a25bfbe16208e72e9d8a720e772aa4fe41 GIT binary patch literal 4358 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+classification/@Adaboost/index.html b/doc/+eegtoolkit/+classification/@Adaboost/index.html new file mode 100644 index 0000000..85d8290 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@Adaboost/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+classification/@Adaboost + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@Adaboost >
+ +

Index for ./+eegtoolkit/+classification/@Adaboost

+ +

Matlab files in this directory:

+ +
 Adaboost
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CSPWrapper/CSPWrapper.html b/doc/+eegtoolkit/+classification/@CSPWrapper/CSPWrapper.html new file mode 100644 index 0000000..951bf5c --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CSPWrapper/CSPWrapper.html @@ -0,0 +1,183 @@ + + + + Description of CSPWrapper + + + + + + + + + + + + + +

CSPWrapper +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

CSPWrapper.m

+

SOURCE CODE ^

+
0001 classdef CSPWrapper < eegtoolkit.classification.ClassifierBase;
+0002     properties (Constant)
+0003         
+0004     end
+0005     properties
+0006         baseClassifier;
+0007         channel;
+0008         cspFilter;
+0009     end
+0010     
+0011     methods (Access = public)
+0012         function CSP = CSPWrapper(instanceSet)
+0013 %             if(isa(instanceSet,'eegtoolkit.util.RawSignalSet')
+0014 %                 CSP.instanceSet = instanceSet;
+0015 %             else
+0016 %                 error('RawSignal extractor should be used with CSPWrapper');
+0017 %             end
+0018         end
+0019         
+0020         
+0021         function CSP = build(CSP)
+0022             % Builds the classification models
+0023             CSP.learnCSPMatrix(CSP.instanceSet.sMatrix,CSP.instanceSet.labels);
+0024             instanceLocal = CSP.extract(CSP.instanceSet.sMatrix);
+0025             CSP.baseClassifier.instanceSet = eegtoolkit.util.InstanceSet(instanceLocal,CSP.instanceSet.labels);
+0026             CSP.baseClassifier.build;
+0027             CSP.reset;
+0028         end
+0029         
+0030         function [output, probabilities, ranking] = classifyInstance(CSP,instance)
+0031 %             instance = CSP.extract
+0032             %input = instance matrix rows = instances, cols = attributes
+0033             %output = predicted class
+0034             %probabilities = probability for predicted class
+0035             %ranking = propabilities for all classes (e.g. to use with mAP)
+0036             
+0037             %TODO:should print an error if 'build' has not been called
+0038             testInstances = CSP.extract(instance);
+0039             [output, probabilities, ranking] = CSP.baseClassifier.classifyInstance(testInstances);
+0040 %             numModels = length(LSVM.models);
+0041 %             [numinstance, ~] = size(testInstances);
+0042 %             scores = zeros(numModels,numinstance);
+0043 %             for i=1:numModels
+0044 %                 %predict using the stored models
+0045 %                 [~, ~, t] = svmpredict(eye(numinstance,1),testInstances, LSVM.models{i},'-b 1 -q');
+0046 %                 %store probability for each class
+0047 %                 scores(i,:) = t(:,1);
+0048 %             end
+0049 %             output = zeros(numinstance,1);
+0050 %             probabilities = zeros(numinstance,1);
+0051 %             ranking = scores;
+0052 %             for i=1:numinstance
+0053 %                 %select the class with the highest probability
+0054 %                 [prob, idx] = max(scores(:,i));
+0055 %                 uniqueLabels = unique(LSVM.instanceSet.getLabels);
+0056 %                 %output the label with highest probability
+0057 %                 output(i,1) = uniqueLabels(idx);
+0058 %                 %return the probability for the output label
+0059 %                 probabilities(i,1) = prob;
+0060 %             end
+0061         end
+0062         
+0063         function CSP = reset(CSP)
+0064             % 'Resets' the classifier.
+0065 %             CSP.models = {};
+0066         end
+0067         
+0068         function configInfo = getConfigInfo(CSP)
+0069             configInfo = '\n';
+0070         end
+0071         
+0072                         
+0073         function time = getTime(CSP)
+0074             time = 0;
+0075         end
+0076     end
+0077     methods (Access = private)
+0078         function [] = learnCSPMatrix(CSP, sMatrix, labels)
+0079             [numTrials,numChannels,~] = size(sMatrix);
+0080 %             labels = CSP.instanceSet.getLabels;
+0081 %             sMatrix = permute(sMatrix,[2,3,1]);
+0082 %             sMatrix = permute(sMatrix,[2 1 3]);
+0083             sMatrix = permute(sMatrix,[3,2,1]);
+0084             for i=1:numChannels
+0085                 for j=1:numTrials
+0086                     sMatrix(:,i,j) = (sMatrix(:,i,j) - mean(sMatrix(:,i,j)));
+0087                 end
+0088             end
+0089             trialCov = zeros(numChannels,numChannels,numTrials);
+0090             for t=1:length(labels)
+0091                 E = sMatrix(:,:,t)';
+0092                 EE = E * E';
+0093                 trialCov(:,:,t) = EE ./trace(EE);
+0094             end
+0095             %TODO: works only for 2 labels, [1,2]
+0096             for c=1:2
+0097                 covMat{c} = mean(trialCov(:,:,labels == c),3);
+0098             end
+0099             [U, D] = eig(covMat{1},covMat{2},'qz');
+0100             eigenvalues = diag(D);
+0101             [~,ind] = sort(eigenvalues,'descend');
+0102             U = U(:,ind);
+0103             CSP.cspFilter = U';
+0104 %             for i=1:size(sMatrix,3);
+0105 %                 sMatrix(:,:,i) = (cspFilter*sMatrix(:,:,i)')';
+0106 %             end
+0107 %             instances = zeros(numTrials,numChannels);
+0108 %             for i=1:numTrials
+0109 %                 projectedTrial = sMatrix(:,:,i);
+0110 %                 variances = var(projectedTrial,0,1);
+0111 %                 instances(i,:) = log(variances)';
+0112 %             end
+0113 %             instanceSet = eegtoolkit.util.InstanceSet(instances,labels);
+0114         end
+0115         
+0116         function instances = extract(CSP,sMatrix)
+0117             
+0118             [numTrials,numChannels,~] = size(sMatrix);
+0119             sMatrix = permute(sMatrix,[3,2,1]);
+0120             for i=1:size(sMatrix,3);
+0121                 sMatrix(:,:,i) = (CSP.cspFilter*sMatrix(:,:,i)')';
+0122             end
+0123             instances = zeros(numTrials,numChannels);
+0124             for i=1:numTrials
+0125                 projectedTrial = sMatrix(:,:,i);
+0126                 variances = var(projectedTrial,0,1);
+0127                 instances(i,:) = log(variances)';
+0128             end
+0129 %             instanceSet = eegtoolkit.util.InstanceSet(instances,labels);
+0130         end
+0131     end
+0132 end
+0133
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CSPWrapper/CSPWrapper.m b/doc/+eegtoolkit/+classification/@CSPWrapper/CSPWrapper.m new file mode 100644 index 0000000..e9765cc --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CSPWrapper/CSPWrapper.m @@ -0,0 +1,133 @@ +classdef CSPWrapper < eegtoolkit.classification.ClassifierBase; + properties (Constant) + + end + properties + baseClassifier; + channel; + cspFilter; + end + + methods (Access = public) + function CSP = CSPWrapper(instanceSet) +% if(isa(instanceSet,'eegtoolkit.util.RawSignalSet') +% CSP.instanceSet = instanceSet; +% else +% error('RawSignal extractor should be used with CSPWrapper'); +% end + end + + + function CSP = build(CSP) + % Builds the classification models + CSP.learnCSPMatrix(CSP.instanceSet.sMatrix,CSP.instanceSet.labels); + instanceLocal = CSP.extract(CSP.instanceSet.sMatrix); + CSP.baseClassifier.instanceSet = eegtoolkit.util.InstanceSet(instanceLocal,CSP.instanceSet.labels); + CSP.baseClassifier.build; + CSP.reset; + end + + function [output, probabilities, ranking] = classifyInstance(CSP,instance) +% instance = CSP.extract + %input = instance matrix rows = instances, cols = attributes + %output = predicted class + %probabilities = probability for predicted class + %ranking = propabilities for all classes (e.g. to use with mAP) + + %TODO:should print an error if 'build' has not been called + testInstances = CSP.extract(instance); + [output, probabilities, ranking] = CSP.baseClassifier.classifyInstance(testInstances); +% numModels = length(LSVM.models); +% [numinstance, ~] = size(testInstances); +% scores = zeros(numModels,numinstance); +% for i=1:numModels +% %predict using the stored models +% [~, ~, t] = svmpredict(eye(numinstance,1),testInstances, LSVM.models{i},'-b 1 -q'); +% %store probability for each class +% scores(i,:) = t(:,1); +% end +% output = zeros(numinstance,1); +% probabilities = zeros(numinstance,1); +% ranking = scores; +% for i=1:numinstance +% %select the class with the highest probability +% [prob, idx] = max(scores(:,i)); +% uniqueLabels = unique(LSVM.instanceSet.getLabels); +% %output the label with highest probability +% output(i,1) = uniqueLabels(idx); +% %return the probability for the output label +% probabilities(i,1) = prob; +% end + end + + function CSP = reset(CSP) + % 'Resets' the classifier. +% CSP.models = {}; + end + + function configInfo = getConfigInfo(CSP) + configInfo = '\n'; + end + + + function time = getTime(CSP) + time = 0; + end + end + methods (Access = private) + function [] = learnCSPMatrix(CSP, sMatrix, labels) + [numTrials,numChannels,~] = size(sMatrix); +% labels = CSP.instanceSet.getLabels; +% sMatrix = permute(sMatrix,[2,3,1]); +% sMatrix = permute(sMatrix,[2 1 3]); + sMatrix = permute(sMatrix,[3,2,1]); + for i=1:numChannels + for j=1:numTrials + sMatrix(:,i,j) = (sMatrix(:,i,j) - mean(sMatrix(:,i,j))); + end + end + trialCov = zeros(numChannels,numChannels,numTrials); + for t=1:length(labels) + E = sMatrix(:,:,t)'; + EE = E * E'; + trialCov(:,:,t) = EE ./trace(EE); + end + %TODO: works only for 2 labels, [1,2] + for c=1:2 + covMat{c} = mean(trialCov(:,:,labels == c),3); + end + [U, D] = eig(covMat{1},covMat{2},'qz'); + eigenvalues = diag(D); + [~,ind] = sort(eigenvalues,'descend'); + U = U(:,ind); + CSP.cspFilter = U'; +% for i=1:size(sMatrix,3); +% sMatrix(:,:,i) = (cspFilter*sMatrix(:,:,i)')'; +% end +% instances = zeros(numTrials,numChannels); +% for i=1:numTrials +% projectedTrial = sMatrix(:,:,i); +% variances = var(projectedTrial,0,1); +% instances(i,:) = log(variances)'; +% end +% instanceSet = eegtoolkit.util.InstanceSet(instances,labels); + end + + function instances = extract(CSP,sMatrix) + + [numTrials,numChannels,~] = size(sMatrix); + sMatrix = permute(sMatrix,[3,2,1]); + for i=1:size(sMatrix,3); + sMatrix(:,:,i) = (CSP.cspFilter*sMatrix(:,:,i)')'; + end + instances = zeros(numTrials,numChannels); + for i=1:numTrials + projectedTrial = sMatrix(:,:,i); + variances = var(projectedTrial,0,1); + instances(i,:) = log(variances)'; + end +% instanceSet = eegtoolkit.util.InstanceSet(instances,labels); + end + end +end + diff --git a/doc/+eegtoolkit/+classification/@CSPWrapper/graph.dot b/doc/+eegtoolkit/+classification/@CSPWrapper/graph.dot new file mode 100644 index 0000000..e4db5e4 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CSPWrapper/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + CSPWrapper -> CSPWrapper; + + CSPWrapper [URL="CSPWrapper.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CSPWrapper/graph.html b/doc/+eegtoolkit/+classification/@CSPWrapper/graph.html new file mode 100644 index 0000000..1365d5e --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CSPWrapper/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@CSPWrapper + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@CSPWrapper >
+

Dependency Graph for ./+eegtoolkit/+classification/@CSPWrapper

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@CSPWrapper + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CSPWrapper/graph.map b/doc/+eegtoolkit/+classification/@CSPWrapper/graph.map new file mode 100644 index 0000000..04ea233 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CSPWrapper/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@CSPWrapper/graph.png b/doc/+eegtoolkit/+classification/@CSPWrapper/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8007750bebbf552e13fcbcf5d34f714d19087b7d GIT binary patch literal 5343 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 + + + Index for Directory ./+eegtoolkit/+classification/@CSPWrapper + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@CSPWrapper >
+ +

Index for ./+eegtoolkit/+classification/@CSPWrapper

+ +

Matlab files in this directory:

+ +
 CSPWrapper
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.html b/doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.html new file mode 100644 index 0000000..0a4685a --- /dev/null +++ b/doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.html @@ -0,0 +1,115 @@ + + + + Description of ClassifierBase + + + + + + + + + + + + + +

ClassifierBase +

+ +

PURPOSE ^

+
Abstract class for classification. Implement the functions for any
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
 Abstract class for classification. Implement the functions for any
+ classifier (e.g. LibSVM, LDA, MLR, Decision trees, Adaboost, etc.)
+ 
+ Properties:
+ instanceSet: the training/test set in an InstanceSet structure
+ 
+ Functions:
+Implement this function to train the classification models. Each
+implementation should define the type of models that are to be trained by
+the build function.
+   obj = obj.build();
+Implement this function to apply the classification models to the provided
+instance, where instance is a matrix #instances x #features including the
+instances. The function should return the following three outputs; 1)
+output, the classified labels of the instances (#instances x 1), 2)
+probabilities, the probabilities for the output label (instances x 1) and
+3) ranking, a matrix #instances x #classes with the probabilities of each
+instance for each class (used for multiclass classification).
+   [output, probabilities, ranking] = obj.classifyInstance(instance);
+Implement this function to reset the classifier (e.g. delete the stored
+classification models
+   obj.reset();
+Info & run time so that the experiments are easily documented. configInfo
+is a string with the configuration information and time is of type double.
+   configInfo = obj.getConfigInfo();
+   time = obj.getTime();
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: +
    +
  • ClassifierBase Abstract class for classification. Implement the functions for any
+This function is called by: +
    +
  • ClassifierBase Abstract class for classification. Implement the functions for any
+ + + +

DOWNLOAD ^

+

ClassifierBase.m

+

SOURCE CODE ^

+
0001 % Abstract class for classification. Implement the functions for any
+0002 % classifier (e.g. LibSVM, LDA, MLR, Decision trees, Adaboost, etc.)
+0003 %
+0004 % Properties:
+0005 % instanceSet: the training/test set in an InstanceSet structure
+0006 %
+0007 % Functions:
+0008 %Implement this function to train the classification models. Each
+0009 %implementation should define the type of models that are to be trained by
+0010 %the build function.
+0011 %   obj = obj.build();
+0012 %Implement this function to apply the classification models to the provided
+0013 %instance, where instance is a matrix #instances x #features including the
+0014 %instances. The function should return the following three outputs; 1)
+0015 %output, the classified labels of the instances (#instances x 1), 2)
+0016 %probabilities, the probabilities for the output label (instances x 1) and
+0017 %3) ranking, a matrix #instances x #classes with the probabilities of each
+0018 %instance for each class (used for multiclass classification).
+0019 %   [output, probabilities, ranking] = obj.classifyInstance(instance);
+0020 %Implement this function to reset the classifier (e.g. delete the stored
+0021 %classification models
+0022 %   obj.reset();
+0023 %Info & run time so that the experiments are easily documented. configInfo
+0024 %is a string with the configuration information and time is of type double.
+0025 %   configInfo = obj.getConfigInfo();
+0026 %   time = obj.getTime();
+0027 
+0028 classdef (Abstract) ClassifierBase < handle
+0029     
+0030     properties
+0031         instanceSet;
+0032     end
+0033     
+0034     methods (Abstract = true)
+0035         [output, probabilities, ranking] = classifyInstance(obj,instance);
+0036         obj = build(obj);
+0037         obj = reset(obj);
+0038         configInfo = getConfigInfo(obj);
+0039         time = getTime(obj);
+0040     end
+0041     
+0042 end
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m b/doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m new file mode 100644 index 0000000..ad07e26 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m @@ -0,0 +1,42 @@ +% Abstract class for classification. Implement the functions for any +% classifier (e.g. LibSVM, LDA, MLR, Decision trees, Adaboost, etc.) +% +% Properties: +% instanceSet: the training/test set in an InstanceSet structure +% +% Functions: +%Implement this function to train the classification models. Each +%implementation should define the type of models that are to be trained by +%the build function. +% obj = obj.build(); +%Implement this function to apply the classification models to the provided +%instance, where instance is a matrix #instances x #features including the +%instances. The function should return the following three outputs; 1) +%output, the classified labels of the instances (#instances x 1), 2) +%probabilities, the probabilities for the output label (instances x 1) and +%3) ranking, a matrix #instances x #classes with the probabilities of each +%instance for each class (used for multiclass classification). +% [output, probabilities, ranking] = obj.classifyInstance(instance); +%Implement this function to reset the classifier (e.g. delete the stored +%classification models +% obj.reset(); +%Info & run time so that the experiments are easily documented. configInfo +%is a string with the configuration information and time is of type double. +% configInfo = obj.getConfigInfo(); +% time = obj.getTime(); + +classdef (Abstract) ClassifierBase < handle + + properties + instanceSet; + end + + methods (Abstract = true) + [output, probabilities, ranking] = classifyInstance(obj,instance); + obj = build(obj); + obj = reset(obj); + configInfo = getConfigInfo(obj); + time = getTime(obj); + end + +end diff --git a/doc/+eegtoolkit/+classification/@ClassifierBase/graph.dot b/doc/+eegtoolkit/+classification/@ClassifierBase/graph.dot new file mode 100644 index 0000000..83eb9bc --- /dev/null +++ b/doc/+eegtoolkit/+classification/@ClassifierBase/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + ClassifierBase -> ClassifierBase; + + ClassifierBase [URL="ClassifierBase.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@ClassifierBase/graph.html b/doc/+eegtoolkit/+classification/@ClassifierBase/graph.html new file mode 100644 index 0000000..225726d --- /dev/null +++ b/doc/+eegtoolkit/+classification/@ClassifierBase/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@ClassifierBase + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@ClassifierBase >
+

Dependency Graph for ./+eegtoolkit/+classification/@ClassifierBase

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@ClassifierBase + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@ClassifierBase/graph.map b/doc/+eegtoolkit/+classification/@ClassifierBase/graph.map new file mode 100644 index 0000000..d23b2fe --- /dev/null +++ b/doc/+eegtoolkit/+classification/@ClassifierBase/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@ClassifierBase/graph.png b/doc/+eegtoolkit/+classification/@ClassifierBase/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d388ebd15908d0bbe7e2cf7184abae03f825bb8c GIT binary patch literal 5275 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 bb^=eOuQc8m=w|}mMu>)ruJUI^+gJYu02xQM literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+classification/@ClassifierBase/index.html b/doc/+eegtoolkit/+classification/@ClassifierBase/index.html new file mode 100644 index 0000000..bdd3187 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@ClassifierBase/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+classification/@ClassifierBase + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@ClassifierBase >
+ +

Index for ./+eegtoolkit/+classification/@ClassifierBase

+ +

Matlab files in this directory:

+ +
 ClassifierBaseAbstract class for classification. Implement the functions for any
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CombiCCA/CombiCCA.html b/doc/+eegtoolkit/+classification/@CombiCCA/CombiCCA.html new file mode 100644 index 0000000..ae526ea --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CombiCCA/CombiCCA.html @@ -0,0 +1,223 @@ + + + + Description of CombiCCA + + + + + + + + + + + + + +

CombiCCA +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

CombiCCA.m

+

SOURCE CODE ^

+
0001 classdef CombiCCA < eegtoolkit.classification.ClassifierBase;
+0002     %COMBICCA Summary of this class goes here
+0003     %   Detailed explanation goes here
+0004     %     fprintf('CombitCCA Processing TW %fs, No.crossvalidation %d \n',TW(tw_length),run);
+0005     %                         it=cell(12,1);
+0006     %                         for iN = 1:nClasses
+0007     %                             it{iN} = mean(SSVEPdata(chan_used,1:TW_p(tw_length),idx_traindata,iN),3);
+0008     %                         end
+0009     %                         % recognize SSVEP
+0010     properties
+0011         individualTemplates;
+0012         refSignals;
+0013         %         sti_f;
+0014         baseClassifier;
+0015     end
+0016     
+0017     methods
+0018         function CoCCA = CombiCCA( sti_f, numHarmonics, sampleLength, samplingRate)
+0019             %             CoCCA.sti_f = sti_f;
+0020             %             CoCCA.numHarmonics = numHarmonics;
+0021             CoCCA.refSignals = CoCCA.ck_signalTrans(sti_f,sampleLength, samplingRate, numHarmonics);
+0022         end
+0023         
+0024         function CoCCA = build(CoCCA)
+0025             numLabels = length(unique(CoCCA.instanceSet.labels));
+0026             CoCCA.individualTemplates = cell(numLabels,1);
+0027             unLabels = unique(CoCCA.instanceSet.labels);
+0028             for i=1:numLabels
+0029                 trialsIndices = CoCCA.instanceSet.labels==unLabels(i);
+0030                 CoCCA.individualTemplates{i} = squeeze(mean(CoCCA.instanceSet.sMatrix(trialsIndices,:,:),1));
+0031             end
+0032             
+0033         end
+0034         
+0035         function [output, probabilities, ranking] = classifyInstance(CoCCA,instance)
+0036             testInstances = CoCCA.extract(instance);
+0037             [output, probabilities, ranking] = CoCCA.baseClassifier.classifyInstance(testInstances);
+0038         end
+0039         
+0040         function CSP = reset(CSP)
+0041             % 'Resets' the classifier.
+0042             %             CSP.models = {};
+0043         end
+0044         
+0045         function configInfo = getConfigInfo(CSP)
+0046             configInfo = '\n';
+0047         end
+0048         
+0049         
+0050         function time = getTime(CSP)
+0051             time = 0;
+0052         end
+0053         
+0054     end
+0055     methods (Access = private)
+0056         
+0057         function [Wx, Wy, r] = cca(CCA,X,Y)
+0058             %
+0059             % CCA calculate canonical correlations
+0060             %
+0061             % [Wx Wy r] = cca(X,Y) where Wx and Wy contains the canonical correlation
+0062             
+0063             % vectors as columns and r is a vector with corresponding canonical
+0064             % correlations. The correlations are sorted in descending order. X and Y
+0065             % are matrices where each column is a sample. Hence, X and Y must have
+0066             % the same number of columns.
+0067             %
+0068             % Example: If X is M*K and Y is N*K there are L=MIN(M,N) solutions. Wx is
+0069             % then M*L, Wy is N*L and r is L*1.
+0070             %
+0071             %
+0072             % ?? 2000 Magnus Borga, Link?pings universitet
+0073             
+0074             % --- Calculate covariance matrices ---??????????????
+0075             
+0076             z = [X;Y];
+0077             C = cov(z.');
+0078             sx = size(X,1);   %X??????(??),
+0079             sy = size(Y,1);
+0080             Cxx = C(1:sx, 1:sx) + 10^(-8)*eye(sx);
+0081             Cxy = C(1:sx, sx+1:sx+sy);
+0082             Cyx = Cxy';
+0083             Cyy = C(sx+1:sx+sy, sx+1:sx+sy) + 10^(-8)*eye(sy);%eye()????????
+0084             invCyy = inv(Cyy);
+0085             
+0086             % --- Calcualte Wx and r ---
+0087             
+0088             [Wx,r] = eig(inv(Cxx)*Cxy*invCyy*Cyx); % Basis in X eig????????????
+0089             r = sqrt(real(r));      % Canonical correlations
+0090             
+0091             % --- Sort correlations ---
+0092             
+0093             V = fliplr(Wx);        % reverse order of eigenvectors??????????????????????i??????????i??????
+0094             r = flipud(diag(r));    % extract eigenvalues and reverse their order
+0095             [r,I]= sort((real(r)));    % sort reversed eigenvalues in ascending order
+0096             r = flipud(r);        % restore sorted eigenvalues into descending order??????????????
+0097             for j = 1:length(I)
+0098                 Wx(:,j) = V(:,I(j));  % sort reversed eigenvectors in ascending order
+0099             end
+0100             Wx = fliplr(Wx);    % restore sorted eigenvectors into descending order
+0101             
+0102             % --- Calcualte Wy  ---
+0103             
+0104             Wy = invCyy*Cyx*Wx;     % Basis in Y
+0105             % Wy = Wy./repmat(sqrt(sum(abs(Wy).^2)),sy,1); % Normalize Wy
+0106             
+0107         end
+0108         function instancesOutput = extract(CoCCA,sMatrix)
+0109             numClasses = length(CoCCA.individualTemplates);
+0110             numInstances = size(sMatrix,1);
+0111             instancesOutput = zeros(numInstances,numClasses);
+0112             for i=1:numInstances
+0113                 for j=1:numClasses
+0114                     [wxit,wyit,rit] = CoCCA.cca(squeeze(sMatrix(i,:,:)),CoCCA.individualTemplates{j});
+0115                     [wxref,wyref,rref] = CoCCA.cca(squeeze(sMatrix(i,:,:)),CoCCA.refSignals(:,:,j));
+0116                     [wxitref,wyitref,ritref] = CoCCA.cca(CoCCA.individualTemplates{j},CoCCA.refSignals(:,:,j));
+0117                     q1 = squeeze(sMatrix(i,:,:))'*wxref;
+0118                     q2 = CoCCA.refSignals(:,:,j)'*wyref;
+0119                     q3 = squeeze(sMatrix(i,:,:))'*wxit;
+0120                     q4 = CoCCA.individualTemplates{j}'*wxit;
+0121                     q5 = q1;
+0122                     q6 = CoCCA.individualTemplates{j}'*wxref;
+0123                     q7 = squeeze(sMatrix(i,:,:))'*wxitref;
+0124                     q8 = CoCCA.individualTemplates{j}'*wxitref;
+0125                     r_n = [corr(q1(:),q2(:)) corr(q3(:),q4(:)) corr(q5(:),q6(:)) corr(q7(:), q8(:))];
+0126                     rho_n = sum(sign(r_n).*r_n.^2);
+0127                     instancesOutput(i,j) = rho_n;
+0128                 end
+0129             end
+0130         end
+0131         %                         for j=1:nClasses
+0132         %                             tempvec=zeros(nClasses,1);
+0133         %                             for jj=1:nClasses
+0134         %                                 [wxit,wyit,rit ]=cca(SSVEPdata(chan_used,1:TW_p(tw_length),run,j),it{jj}(:,1:TW_p(tw_length)));
+0135         %                                 [wxref,wyref,rref ]=cca(SSVEPdata(chan_used,1:TW_p(tw_length),run,j),sc{jj}(:,1:TW_p(tw_length)));
+0136         %                                 [wxitref,wyitref,ritref ]=cca(it{jj}(:,1:TW_p(tw_length)),sc{jj}(:,1:TW_p(tw_length)));
+0137         %                                 q1 = SSVEPdata(chan_used,1:TW_p(tw_length),run,j)'*wxref;
+0138         %                                 q2 = sc{jj}(:,1:TW_p(tw_length))'*wyref;
+0139         %                                 q3 = SSVEPdata(chan_used,1:TW_p(tw_length),run,j)'*wxit;
+0140         %                                 q4 = it{jj}(:,1:TW_p(tw_length))'*wxit;
+0141         %                                 q5 = q1;
+0142         %                                 q6 = it{jj}(:,1:TW_p(tw_length))'*wxref;
+0143         %                                 q7 = SSVEPdata(chan_used,1:TW_p(tw_length),run,j)'*wxitref;
+0144         %                                 q8 = it{jj}(:,1:TW_p(tw_length))'*wxitref;
+0145         %                                 r_n = [corr(q1(:),q2(:)) corr(q3(:),q4(:)) corr(q5(:),q6(:)) corr(q7(:),q8(:))];
+0146         %                                 rho_n = sum(sign(r_n).*r_n.^2);
+0147         %                                 tempvec(jj) = rho_n;%max(r1);
+0148         %                             end
+0149         %
+0150         %                             [v,idx]=max(tempvec);
+0151         %                             sub_lab(mth,(run-1)*nClasses+j,tw_length)=idx;
+0152         %                             if idx==j
+0153         %                                 n_correct(tw_length,mth)=n_correct(tw_length,mth)+1;
+0154         %                             end
+0155         %                         end
+0156         function refSignal=ck_signalTrans(CCA,f,mLen,FreqSamp,NumHarm)
+0157             
+0158             p=mLen;%1250;
+0159             fs=FreqSamp;%250;
+0160             TP=1/fs:1/fs:p/fs;
+0161             for j=1:length(f)
+0162                 tempComp=[];
+0163                 for k=1:NumHarm
+0164                     Sinh1=sin(2*pi*k*f(j)*TP);
+0165                     Cosh1=cos(2*pi*k*f(j)*TP);
+0166                     tempComp = [tempComp; Sinh1;Cosh1;];
+0167                 end
+0168                 refSignal(:,:,j)=tempComp;
+0169             end
+0170         end
+0171     end
+0172 end
+0173
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CombiCCA/CombiCCA.m b/doc/+eegtoolkit/+classification/@CombiCCA/CombiCCA.m new file mode 100644 index 0000000..585d5a0 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CombiCCA/CombiCCA.m @@ -0,0 +1,173 @@ +classdef CombiCCA < eegtoolkit.classification.ClassifierBase; + %COMBICCA Summary of this class goes here + % Detailed explanation goes here + % fprintf('CombitCCA Processing TW %fs, No.crossvalidation %d \n',TW(tw_length),run); + % it=cell(12,1); + % for iN = 1:nClasses + % it{iN} = mean(SSVEPdata(chan_used,1:TW_p(tw_length),idx_traindata,iN),3); + % end + % % recognize SSVEP + properties + individualTemplates; + refSignals; + % sti_f; + baseClassifier; + end + + methods + function CoCCA = CombiCCA( sti_f, numHarmonics, sampleLength, samplingRate) + % CoCCA.sti_f = sti_f; + % CoCCA.numHarmonics = numHarmonics; + CoCCA.refSignals = CoCCA.ck_signalTrans(sti_f,sampleLength, samplingRate, numHarmonics); + end + + function CoCCA = build(CoCCA) + numLabels = length(unique(CoCCA.instanceSet.labels)); + CoCCA.individualTemplates = cell(numLabels,1); + unLabels = unique(CoCCA.instanceSet.labels); + for i=1:numLabels + trialsIndices = CoCCA.instanceSet.labels==unLabels(i); + CoCCA.individualTemplates{i} = squeeze(mean(CoCCA.instanceSet.sMatrix(trialsIndices,:,:),1)); + end + + end + + function [output, probabilities, ranking] = classifyInstance(CoCCA,instance) + testInstances = CoCCA.extract(instance); + [output, probabilities, ranking] = CoCCA.baseClassifier.classifyInstance(testInstances); + end + + function CSP = reset(CSP) + % 'Resets' the classifier. + % CSP.models = {}; + end + + function configInfo = getConfigInfo(CSP) + configInfo = '\n'; + end + + + function time = getTime(CSP) + time = 0; + end + + end + methods (Access = private) + + function [Wx, Wy, r] = cca(CCA,X,Y) + % + % CCA calculate canonical correlations + % + % [Wx Wy r] = cca(X,Y) where Wx and Wy contains the canonical correlation + + % vectors as columns and r is a vector with corresponding canonical + % correlations. The correlations are sorted in descending order. X and Y + % are matrices where each column is a sample. Hence, X and Y must have + % the same number of columns. + % + % Example: If X is M*K and Y is N*K there are L=MIN(M,N) solutions. Wx is + % then M*L, Wy is N*L and r is L*1. + % + % + % ?? 2000 Magnus Borga, Link?pings universitet + + % --- Calculate covariance matrices ---?????????????? + + z = [X;Y]; + C = cov(z.'); + sx = size(X,1); %X??????(??), + sy = size(Y,1); + Cxx = C(1:sx, 1:sx) + 10^(-8)*eye(sx); + Cxy = C(1:sx, sx+1:sx+sy); + Cyx = Cxy'; + Cyy = C(sx+1:sx+sy, sx+1:sx+sy) + 10^(-8)*eye(sy);%eye()???????? + invCyy = inv(Cyy); + + % --- Calcualte Wx and r --- + + [Wx,r] = eig(inv(Cxx)*Cxy*invCyy*Cyx); % Basis in X eig???????????? + r = sqrt(real(r)); % Canonical correlations + + % --- Sort correlations --- + + V = fliplr(Wx); % reverse order of eigenvectors??????????????????????i??????????i?????? + r = flipud(diag(r)); % extract eigenvalues and reverse their order + [r,I]= sort((real(r))); % sort reversed eigenvalues in ascending order + r = flipud(r); % restore sorted eigenvalues into descending order?????????????? + for j = 1:length(I) + Wx(:,j) = V(:,I(j)); % sort reversed eigenvectors in ascending order + end + Wx = fliplr(Wx); % restore sorted eigenvectors into descending order + + % --- Calcualte Wy --- + + Wy = invCyy*Cyx*Wx; % Basis in Y + % Wy = Wy./repmat(sqrt(sum(abs(Wy).^2)),sy,1); % Normalize Wy + + end + function instancesOutput = extract(CoCCA,sMatrix) + numClasses = length(CoCCA.individualTemplates); + numInstances = size(sMatrix,1); + instancesOutput = zeros(numInstances,numClasses); + for i=1:numInstances + for j=1:numClasses + [wxit,wyit,rit] = CoCCA.cca(squeeze(sMatrix(i,:,:)),CoCCA.individualTemplates{j}); + [wxref,wyref,rref] = CoCCA.cca(squeeze(sMatrix(i,:,:)),CoCCA.refSignals(:,:,j)); + [wxitref,wyitref,ritref] = CoCCA.cca(CoCCA.individualTemplates{j},CoCCA.refSignals(:,:,j)); + q1 = squeeze(sMatrix(i,:,:))'*wxref; + q2 = CoCCA.refSignals(:,:,j)'*wyref; + q3 = squeeze(sMatrix(i,:,:))'*wxit; + q4 = CoCCA.individualTemplates{j}'*wxit; + q5 = q1; + q6 = CoCCA.individualTemplates{j}'*wxref; + q7 = squeeze(sMatrix(i,:,:))'*wxitref; + q8 = CoCCA.individualTemplates{j}'*wxitref; + r_n = [corr(q1(:),q2(:)) corr(q3(:),q4(:)) corr(q5(:),q6(:)) corr(q7(:), q8(:))]; + rho_n = sum(sign(r_n).*r_n.^2); + instancesOutput(i,j) = rho_n; + end + end + end + % for j=1:nClasses + % tempvec=zeros(nClasses,1); + % for jj=1:nClasses + % [wxit,wyit,rit ]=cca(SSVEPdata(chan_used,1:TW_p(tw_length),run,j),it{jj}(:,1:TW_p(tw_length))); + % [wxref,wyref,rref ]=cca(SSVEPdata(chan_used,1:TW_p(tw_length),run,j),sc{jj}(:,1:TW_p(tw_length))); + % [wxitref,wyitref,ritref ]=cca(it{jj}(:,1:TW_p(tw_length)),sc{jj}(:,1:TW_p(tw_length))); + % q1 = SSVEPdata(chan_used,1:TW_p(tw_length),run,j)'*wxref; + % q2 = sc{jj}(:,1:TW_p(tw_length))'*wyref; + % q3 = SSVEPdata(chan_used,1:TW_p(tw_length),run,j)'*wxit; + % q4 = it{jj}(:,1:TW_p(tw_length))'*wxit; + % q5 = q1; + % q6 = it{jj}(:,1:TW_p(tw_length))'*wxref; + % q7 = SSVEPdata(chan_used,1:TW_p(tw_length),run,j)'*wxitref; + % q8 = it{jj}(:,1:TW_p(tw_length))'*wxitref; + % r_n = [corr(q1(:),q2(:)) corr(q3(:),q4(:)) corr(q5(:),q6(:)) corr(q7(:),q8(:))]; + % rho_n = sum(sign(r_n).*r_n.^2); + % tempvec(jj) = rho_n;%max(r1); + % end + % + % [v,idx]=max(tempvec); + % sub_lab(mth,(run-1)*nClasses+j,tw_length)=idx; + % if idx==j + % n_correct(tw_length,mth)=n_correct(tw_length,mth)+1; + % end + % end + function refSignal=ck_signalTrans(CCA,f,mLen,FreqSamp,NumHarm) + + p=mLen;%1250; + fs=FreqSamp;%250; + TP=1/fs:1/fs:p/fs; + for j=1:length(f) + tempComp=[]; + for k=1:NumHarm + Sinh1=sin(2*pi*k*f(j)*TP); + Cosh1=cos(2*pi*k*f(j)*TP); + tempComp = [tempComp; Sinh1;Cosh1;]; + end + refSignal(:,:,j)=tempComp; + end + end + end +end + diff --git a/doc/+eegtoolkit/+classification/@CombiCCA/graph.dot b/doc/+eegtoolkit/+classification/@CombiCCA/graph.dot new file mode 100644 index 0000000..9da7469 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CombiCCA/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + CombiCCA -> CombiCCA; + + CombiCCA [URL="CombiCCA.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CombiCCA/graph.html b/doc/+eegtoolkit/+classification/@CombiCCA/graph.html new file mode 100644 index 0000000..aa35708 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CombiCCA/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@CombiCCA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@CombiCCA >
+

Dependency Graph for ./+eegtoolkit/+classification/@CombiCCA

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@CombiCCA + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CombiCCA/graph.map b/doc/+eegtoolkit/+classification/@CombiCCA/graph.map new file mode 100644 index 0000000..4f27966 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CombiCCA/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@CombiCCA/graph.png b/doc/+eegtoolkit/+classification/@CombiCCA/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..33e680a0a6e7c9a1435deca205f7872cdbfbe1bd GIT binary patch literal 4664 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 + + + Index for Directory ./+eegtoolkit/+classification/@CombiCCA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@CombiCCA >
+ +

Index for ./+eegtoolkit/+classification/@CombiCCA

+ +

Matlab files in this directory:

+ +
 CombiCCA
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/FusionClassifierWrapper.html b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/FusionClassifierWrapper.html new file mode 100644 index 0000000..3bc50b3 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/FusionClassifierWrapper.html @@ -0,0 +1,121 @@ + + + + Description of FusionClassifierWrapper + + + + + + + + + +
Home > +eegtoolkit > +classification > @FusionClassifierWrapper > FusionClassifierWrapper.m
+ + + +

FusionClassifierWrapper +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

FusionClassifierWrapper.m

+

SOURCE CODE ^

+
0001 classdef FusionClassifierWrapper < eegtoolkit.classification.ClassifierBase & eegtoolkit.experiment.Experimenter;
+0002     
+0003     properties
+0004         baseClassifier;
+0005         classifiers;
+0006     end
+0007     
+0008     methods
+0009         function FCW = FusionClassifierWrapper(baseClassifier, fusionInstanceSet)
+0010             if nargin>0
+0011                 FCW.baseClassifier = baseClassifier;
+0012             end
+0013             if nargin>1
+0014                 FCW.instanceSet = fusionInstanceSet;
+0015             end
+0016         end
+0017         
+0018         function FCW = build(FCW)
+0019             numFusion = FCW.instanceSet.numFusion;
+0020             FCW.reset;
+0021             if ~isa(FCW.baseClassifier,'eegtoolkit.classification.LIBSVM')
+0022                 error ('Only LIBSVMClassifier supported as base classifier');
+0023             else
+0024                 for i=1:numFusion
+0025                     FCW.classifiers{i} = FCW.baseClassifier.copy;
+0026                     FCW.classifiers{i} = eegtoolkit.classification.LIBSVM;
+0027                     FCW.classifiers{i}.instanceSet = FCW.instanceSet.instanceSets{i};
+0028                     FCW.classifiers{i}.build;
+0029                 end
+0030             end
+0031         end
+0032         
+0033         function [output, probabilities, ranking]  = classifyInstance(FCW,instance)
+0034             [numInstances,~] = size(instance);
+0035             numClass = length(FCW.classifiers);
+0036             out = zeros(numInstances,numClass);
+0037             output = zeros(numInstances,1);
+0038             for i=1:length(FCW.classifiers)
+0039                 [out(:,i), probabilities, ranking] = FCW.classifiers{i}.classifyInstance(instance(:,:,i));
+0040             end
+0041             for i=1:numInstances
+0042                 x = out(i,:);
+0043                 [a,b] = hist(x,unique(x));
+0044                 [~,idx] = max(a);
+0045                 output(i,:) = b(idx);
+0046             end
+0047             probabilities = [];
+0048             ranking = [];
+0049             %TODO:*****
+0050             
+0051         end
+0052         
+0053         function configInfo = getConfigInfo(FCW)
+0054             configInfo = 'FusionClassifierWrapper';
+0055         end
+0056         
+0057                         
+0058         function time = getTime(FCW)
+0059             time = 0;
+0060         end
+0061         
+0062         function FCW = reset(FCW)
+0063             FCW.classifiers = {};
+0064         end
+0065         
+0066         
+0067         
+0068     end
+0069     
+0070 end
+0071
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/FusionClassifierWrapper.m b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/FusionClassifierWrapper.m new file mode 100644 index 0000000..6da94ff --- /dev/null +++ b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/FusionClassifierWrapper.m @@ -0,0 +1,71 @@ +classdef FusionClassifierWrapper < eegtoolkit.classification.ClassifierBase & eegtoolkit.experiment.Experimenter; + + properties + baseClassifier; + classifiers; + end + + methods + function FCW = FusionClassifierWrapper(baseClassifier, fusionInstanceSet) + if nargin>0 + FCW.baseClassifier = baseClassifier; + end + if nargin>1 + FCW.instanceSet = fusionInstanceSet; + end + end + + function FCW = build(FCW) + numFusion = FCW.instanceSet.numFusion; + FCW.reset; + if ~isa(FCW.baseClassifier,'eegtoolkit.classification.LIBSVM') + error ('Only LIBSVMClassifier supported as base classifier'); + else + for i=1:numFusion + FCW.classifiers{i} = FCW.baseClassifier.copy; + FCW.classifiers{i} = eegtoolkit.classification.LIBSVM; + FCW.classifiers{i}.instanceSet = FCW.instanceSet.instanceSets{i}; + FCW.classifiers{i}.build; + end + end + end + + function [output, probabilities, ranking] = classifyInstance(FCW,instance) + [numInstances,~] = size(instance); + numClass = length(FCW.classifiers); + out = zeros(numInstances,numClass); + output = zeros(numInstances,1); + for i=1:length(FCW.classifiers) + [out(:,i), probabilities, ranking] = FCW.classifiers{i}.classifyInstance(instance(:,:,i)); + end + for i=1:numInstances + x = out(i,:); + [a,b] = hist(x,unique(x)); + [~,idx] = max(a); + output(i,:) = b(idx); + end + probabilities = []; + ranking = []; + %TODO:***** + + end + + function configInfo = getConfigInfo(FCW) + configInfo = 'FusionClassifierWrapper'; + end + + + function time = getTime(FCW) + time = 0; + end + + function FCW = reset(FCW) + FCW.classifiers = {}; + end + + + + end + +end + diff --git a/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.dot b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.dot new file mode 100644 index 0000000..14ffcbc --- /dev/null +++ b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + FusionClassifierWrapper -> FusionClassifierWrapper; + + FusionClassifierWrapper [URL="FusionClassifierWrapper.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.html b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.html new file mode 100644 index 0000000..4d5449b --- /dev/null +++ b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@FusionClassifierWrapper + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@FusionClassifierWrapper >
+

Dependency Graph for ./+eegtoolkit/+classification/@FusionClassifierWrapper

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@FusionClassifierWrapper + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.map b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.map new file mode 100644 index 0000000..edb3bf2 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.png b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7dd89864aa5efee18550fadb2bbc82c49a3841 GIT binary patch literal 7050 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 E06@Dvga7~l literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/index.html b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/index.html new file mode 100644 index 0000000..0491c84 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+classification/@FusionClassifierWrapper + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@FusionClassifierWrapper >
+ +

Index for ./+eegtoolkit/+classification/@FusionClassifierWrapper

+ +

Matlab files in this directory:

+ +
 FusionClassifierWrapper
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@ITCCA/ITCCA.html b/doc/+eegtoolkit/+classification/@ITCCA/ITCCA.html new file mode 100644 index 0000000..4d13209 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@ITCCA/ITCCA.html @@ -0,0 +1,256 @@ + + + + Description of ITCCA + + + + + + + + + + + + + +

ITCCA +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

ITCCA.m

+

SOURCE CODE ^

+
0001 classdef ITCCA < eegtoolkit.classification.ClassifierBase;
+0002     %                 instanceStruct = struct('sMatrix',sMatrix, 'labels', labels);
+0003     %     it=cell(12,1);
+0004     %                         for iN = 1:nClasses
+0005     %                             it{iN} = mean(SSVEPdata(chan_used,1:TW_p(tw_length),idx_traindata,iN),3);
+0006     %                         end
+0007     %                         % recognize SSVEP
+0008     %                         for j=1:nClasses
+0009     %                             tempvec=zeros(nClasses,1);
+0010     %                             for jj=1:nClasses
+0011     %                                 [wx1,wy1,r1]=cca(SSVEPdata(chan_used,1:TW_p(tw_length),run,j),it{jj}(:,1:TW_p(tw_length)));
+0012     %                                 tempvec(jj) = max(r1);
+0013     %                             end
+0014     %
+0015     %                             [v,idx]=max(tempvec);
+0016     %                             sub_lab(mth,(run-1)*nClasses+j,tw_length)=idx;
+0017     %                             if idx==j
+0018     %                                 n_correct(tw_length,mth)=n_correct(tw_length,mth)+1;
+0019     %                             end
+0020     %                         end
+0021     properties (Constant)
+0022         
+0023     end
+0024     properties
+0025         baseClassifier;
+0026         individualTemplates;
+0027     end
+0028     
+0029     methods (Access = public)
+0030         function IT = ITCCA(instanceSet)
+0031             %             if(isa(instanceSet,'eegtoolkit.util.RawSignalSet')
+0032             %                 CSP.instanceSet = instanceSet;
+0033             %             else
+0034             %                 error('RawSignal extractor should be used with CSPWrapper');
+0035             %             end
+0036         end
+0037         
+0038         
+0039         function IT = build(IT)
+0040             % Builds the classification models
+0041             %             IT.learnCSPMatrix(IT.instanceSet.sMatrix,IT.instanceSet.labels);
+0042             numLabels = length(unique(IT.instanceSet.labels));
+0043             IT.individualTemplates = cell(numLabels,1);
+0044             unLabels = unique(IT.instanceSet.labels);
+0045             for i = 1:numLabels
+0046                 trialsIndices = IT.instanceSet.labels==unLabels(i);
+0047                 IT.individualTemplates{i} = squeeze(mean(IT.instanceSet.sMatrix(trialsIndices,:,:),1));
+0048             end
+0049             %             instances = IT.extract(IT.instanceSet.sMatrix);
+0050             %             instanceSet = eegtoolkit.util.InstanceSet(instances,IT.instanceSet.labels);
+0051             %             IT.baseClassifier.instanceSet = instanceSet;
+0052             %             IT.baseClassifier.build();
+0053         end
+0054         
+0055         function [output, probabilities, ranking] = classifyInstance(CSP,instance)
+0056             %                         for j=1:nClasses
+0057             %                             tempvec=zeros(nClasses,1);
+0058             %                             for jj=1:nClasses
+0059             %                                 [wx1,wy1,r1]=cca(SSVEPdata(chan_used,1:TW_p(tw_length),run,j),it{jj}(:,1:TW_p(tw_length)));
+0060             %                                 tempvec(jj) = max(r1);
+0061             %                             end
+0062             %
+0063             %                             [v,idx]=max(tempvec);
+0064             %                             sub_lab(mth,(run-1)*nClasses+j,tw_length)=idx;
+0065             %                             if idx==j
+0066             %                                 n_correct(tw_length,mth)=n_correct(tw_length,mth)+1;
+0067             %                             end
+0068             %                         end
+0069             %             instance = CSP.extract
+0070             %input = instance matrix rows = instances, cols = attributes
+0071             %output = predicted class
+0072             %probabilities = probability for predicted class
+0073             %ranking = propabilities for all classes (e.g. to use with mAP)
+0074             
+0075             %TODO:should print an error if 'build' has not been called
+0076             testInstances = CSP.extract(instance);
+0077             [output, probabilities, ranking] = CSP.baseClassifier.classifyInstance(testInstances);
+0078             %             numModels = length(LSVM.models);
+0079             %             [numinstance, ~] = size(testInstances);
+0080             %             scores = zeros(numModels,numinstance);
+0081             %             for i=1:numModels
+0082             %                 %predict using the stored models
+0083             %                 [~, ~, t] = svmpredict(eye(numinstance,1),testInstances, LSVM.models{i},'-b 1 -q');
+0084             %                 %store probability for each class
+0085             %                 scores(i,:) = t(:,1);
+0086             %             end
+0087             %             output = zeros(numinstance,1);
+0088             %             probabilities = zeros(numinstance,1);
+0089             %             ranking = scores;
+0090             %             for i=1:numinstance
+0091             %                 %select the class with the highest probability
+0092             %                 [prob, idx] = max(scores(:,i));
+0093             %                 uniqueLabels = unique(LSVM.instanceSet.getLabels);
+0094             %                 %output the label with highest probability
+0095             %                 output(i,1) = uniqueLabels(idx);
+0096             %                 %return the probability for the output label
+0097             %                 probabilities(i,1) = prob;
+0098             %             end
+0099         end
+0100         
+0101         function CSP = reset(CSP)
+0102             % 'Resets' the classifier.
+0103             %             CSP.models = {};
+0104         end
+0105         
+0106         function configInfo = getConfigInfo(CSP)
+0107             configInfo = '\n';
+0108         end
+0109         
+0110         
+0111         function time = getTime(CSP)
+0112             time = 0;
+0113         end
+0114     end
+0115     
+0116     
+0117     methods (Access = private)
+0118         function [Wx, Wy, r] = cca(CCA,X,Y)
+0119             %
+0120             % CCA calculate canonical correlations
+0121             %
+0122             % [Wx Wy r] = cca(X,Y) where Wx and Wy contains the canonical correlation
+0123             
+0124             % vectors as columns and r is a vector with corresponding canonical
+0125             % correlations. The correlations are sorted in descending order. X and Y
+0126             % are matrices where each column is a sample. Hence, X and Y must have
+0127             % the same number of columns.
+0128             %
+0129             % Example: If X is M*K and Y is N*K there are L=MIN(M,N) solutions. Wx is
+0130             % then M*L, Wy is N*L and r is L*1.
+0131             %
+0132             %
+0133             % ?? 2000 Magnus Borga, Link?pings universitet
+0134             
+0135             % --- Calculate covariance matrices ---??????????????
+0136             
+0137             z = [X;Y];
+0138             C = cov(z.');
+0139             sx = size(X,1);   %X??????(??),
+0140             sy = size(Y,1);
+0141             Cxx = C(1:sx, 1:sx) + 10^(-8)*eye(sx);
+0142             Cxy = C(1:sx, sx+1:sx+sy);
+0143             Cyx = Cxy';
+0144             Cyy = C(sx+1:sx+sy, sx+1:sx+sy) + 10^(-8)*eye(sy);%eye()????????
+0145             invCyy = inv(Cyy);
+0146             
+0147             % --- Calcualte Wx and r ---
+0148             
+0149             [Wx,r] = eig(inv(Cxx)*Cxy*invCyy*Cyx); % Basis in X eig????????????
+0150             r = sqrt(real(r));      % Canonical correlations
+0151             
+0152             % --- Sort correlations ---
+0153             
+0154             V = fliplr(Wx);        % reverse order of eigenvectors??????????????????????i??????????i??????
+0155             r = flipud(diag(r));    % extract eigenvalues and reverse their order
+0156             [r,I]= sort((real(r)));    % sort reversed eigenvalues in ascending order
+0157             r = flipud(r);        % restore sorted eigenvalues into descending order??????????????
+0158             for j = 1:length(I)
+0159                 Wx(:,j) = V(:,I(j));  % sort reversed eigenvectors in ascending order
+0160             end
+0161             Wx = fliplr(Wx);    % restore sorted eigenvectors into descending order
+0162             
+0163             % --- Calcualte Wy  ---
+0164             
+0165             Wy = invCyy*Cyx*Wx;     % Basis in Y
+0166             % Wy = Wy./repmat(sqrt(sum(abs(Wy).^2)),sy,1); % Normalize Wy
+0167             
+0168         end
+0169         
+0170         
+0171         function instancesOutput = extract(IT,sMatrix)
+0172             
+0173             numClasses = length(IT.individualTemplates);
+0174             numInstances = size(sMatrix,1);
+0175             tempvec=zeros(numClasses,1);
+0176             instancesOutput = zeros(numInstances,numClasses);
+0177             for i=1:numInstances
+0178                 for j=1:numClasses
+0179                     [~,~,r1] = IT.cca(squeeze(sMatrix(i,:,:)),IT.individualTemplates{j});
+0180                     %                     [wx1,wy1,r1]=cca(SSVEPdata(chan_used,1:TW_p(tw_length),run,j),IT.individualTemplates{j});
+0181                     instancesOutput(i,j) = max(r1);
+0182                 end
+0183             end
+0184             
+0185             %             [v,idx]=max(tempvec);
+0186             %             sub_lab(mth,(run-1)*nClasses+j,tw_length)=idx;
+0187             %             if idx==j
+0188             %                 n_correct(tw_length,mth)=n_correct(tw_length,mth)+1;
+0189             %             end
+0190             %
+0191             %             [numTrials,numChannels,~] = size(sMatrix);
+0192             %             sMatrix = permute(sMatrix,[3,2,1]);
+0193             %             for i=1:size(sMatrix,3);
+0194             %                 sMatrix(:,:,i) = (CSP.cspFilter*sMatrix(:,:,i)')';
+0195             %             end
+0196             %             instances = zeros(numTrials,numChannels);
+0197             %             for i=1:numTrials
+0198             %                 projectedTrial = sMatrix(:,:,i);
+0199             %                 variances = var(projectedTrial,0,1);
+0200             %                 instances(i,:) = log(variances)';
+0201             %             end
+0202             %             instanceSet = eegtoolkit.util.InstanceSet(instances,labels);
+0203         end
+0204     end
+0205 end
+0206
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@ITCCA/ITCCA.m b/doc/+eegtoolkit/+classification/@ITCCA/ITCCA.m new file mode 100644 index 0000000..2ff83dd --- /dev/null +++ b/doc/+eegtoolkit/+classification/@ITCCA/ITCCA.m @@ -0,0 +1,206 @@ +classdef ITCCA < eegtoolkit.classification.ClassifierBase; + % instanceStruct = struct('sMatrix',sMatrix, 'labels', labels); + % it=cell(12,1); + % for iN = 1:nClasses + % it{iN} = mean(SSVEPdata(chan_used,1:TW_p(tw_length),idx_traindata,iN),3); + % end + % % recognize SSVEP + % for j=1:nClasses + % tempvec=zeros(nClasses,1); + % for jj=1:nClasses + % [wx1,wy1,r1]=cca(SSVEPdata(chan_used,1:TW_p(tw_length),run,j),it{jj}(:,1:TW_p(tw_length))); + % tempvec(jj) = max(r1); + % end + % + % [v,idx]=max(tempvec); + % sub_lab(mth,(run-1)*nClasses+j,tw_length)=idx; + % if idx==j + % n_correct(tw_length,mth)=n_correct(tw_length,mth)+1; + % end + % end + properties (Constant) + + end + properties + baseClassifier; + individualTemplates; + end + + methods (Access = public) + function IT = ITCCA(instanceSet) + % if(isa(instanceSet,'eegtoolkit.util.RawSignalSet') + % CSP.instanceSet = instanceSet; + % else + % error('RawSignal extractor should be used with CSPWrapper'); + % end + end + + + function IT = build(IT) + % Builds the classification models + % IT.learnCSPMatrix(IT.instanceSet.sMatrix,IT.instanceSet.labels); + numLabels = length(unique(IT.instanceSet.labels)); + IT.individualTemplates = cell(numLabels,1); + unLabels = unique(IT.instanceSet.labels); + for i = 1:numLabels + trialsIndices = IT.instanceSet.labels==unLabels(i); + IT.individualTemplates{i} = squeeze(mean(IT.instanceSet.sMatrix(trialsIndices,:,:),1)); + end + % instances = IT.extract(IT.instanceSet.sMatrix); + % instanceSet = eegtoolkit.util.InstanceSet(instances,IT.instanceSet.labels); + % IT.baseClassifier.instanceSet = instanceSet; + % IT.baseClassifier.build(); + end + + function [output, probabilities, ranking] = classifyInstance(CSP,instance) + % for j=1:nClasses + % tempvec=zeros(nClasses,1); + % for jj=1:nClasses + % [wx1,wy1,r1]=cca(SSVEPdata(chan_used,1:TW_p(tw_length),run,j),it{jj}(:,1:TW_p(tw_length))); + % tempvec(jj) = max(r1); + % end + % + % [v,idx]=max(tempvec); + % sub_lab(mth,(run-1)*nClasses+j,tw_length)=idx; + % if idx==j + % n_correct(tw_length,mth)=n_correct(tw_length,mth)+1; + % end + % end + % instance = CSP.extract + %input = instance matrix rows = instances, cols = attributes + %output = predicted class + %probabilities = probability for predicted class + %ranking = propabilities for all classes (e.g. to use with mAP) + + %TODO:should print an error if 'build' has not been called + testInstances = CSP.extract(instance); + [output, probabilities, ranking] = CSP.baseClassifier.classifyInstance(testInstances); + % numModels = length(LSVM.models); + % [numinstance, ~] = size(testInstances); + % scores = zeros(numModels,numinstance); + % for i=1:numModels + % %predict using the stored models + % [~, ~, t] = svmpredict(eye(numinstance,1),testInstances, LSVM.models{i},'-b 1 -q'); + % %store probability for each class + % scores(i,:) = t(:,1); + % end + % output = zeros(numinstance,1); + % probabilities = zeros(numinstance,1); + % ranking = scores; + % for i=1:numinstance + % %select the class with the highest probability + % [prob, idx] = max(scores(:,i)); + % uniqueLabels = unique(LSVM.instanceSet.getLabels); + % %output the label with highest probability + % output(i,1) = uniqueLabels(idx); + % %return the probability for the output label + % probabilities(i,1) = prob; + % end + end + + function CSP = reset(CSP) + % 'Resets' the classifier. + % CSP.models = {}; + end + + function configInfo = getConfigInfo(CSP) + configInfo = '\n'; + end + + + function time = getTime(CSP) + time = 0; + end + end + + + methods (Access = private) + function [Wx, Wy, r] = cca(CCA,X,Y) + % + % CCA calculate canonical correlations + % + % [Wx Wy r] = cca(X,Y) where Wx and Wy contains the canonical correlation + + % vectors as columns and r is a vector with corresponding canonical + % correlations. The correlations are sorted in descending order. X and Y + % are matrices where each column is a sample. Hence, X and Y must have + % the same number of columns. + % + % Example: If X is M*K and Y is N*K there are L=MIN(M,N) solutions. Wx is + % then M*L, Wy is N*L and r is L*1. + % + % + % ?? 2000 Magnus Borga, Link?pings universitet + + % --- Calculate covariance matrices ---?????????????? + + z = [X;Y]; + C = cov(z.'); + sx = size(X,1); %X??????(??), + sy = size(Y,1); + Cxx = C(1:sx, 1:sx) + 10^(-8)*eye(sx); + Cxy = C(1:sx, sx+1:sx+sy); + Cyx = Cxy'; + Cyy = C(sx+1:sx+sy, sx+1:sx+sy) + 10^(-8)*eye(sy);%eye()???????? + invCyy = inv(Cyy); + + % --- Calcualte Wx and r --- + + [Wx,r] = eig(inv(Cxx)*Cxy*invCyy*Cyx); % Basis in X eig???????????? + r = sqrt(real(r)); % Canonical correlations + + % --- Sort correlations --- + + V = fliplr(Wx); % reverse order of eigenvectors??????????????????????i??????????i?????? + r = flipud(diag(r)); % extract eigenvalues and reverse their order + [r,I]= sort((real(r))); % sort reversed eigenvalues in ascending order + r = flipud(r); % restore sorted eigenvalues into descending order?????????????? + for j = 1:length(I) + Wx(:,j) = V(:,I(j)); % sort reversed eigenvectors in ascending order + end + Wx = fliplr(Wx); % restore sorted eigenvectors into descending order + + % --- Calcualte Wy --- + + Wy = invCyy*Cyx*Wx; % Basis in Y + % Wy = Wy./repmat(sqrt(sum(abs(Wy).^2)),sy,1); % Normalize Wy + + end + + + function instancesOutput = extract(IT,sMatrix) + + numClasses = length(IT.individualTemplates); + numInstances = size(sMatrix,1); + tempvec=zeros(numClasses,1); + instancesOutput = zeros(numInstances,numClasses); + for i=1:numInstances + for j=1:numClasses + [~,~,r1] = IT.cca(squeeze(sMatrix(i,:,:)),IT.individualTemplates{j}); + % [wx1,wy1,r1]=cca(SSVEPdata(chan_used,1:TW_p(tw_length),run,j),IT.individualTemplates{j}); + instancesOutput(i,j) = max(r1); + end + end + + % [v,idx]=max(tempvec); + % sub_lab(mth,(run-1)*nClasses+j,tw_length)=idx; + % if idx==j + % n_correct(tw_length,mth)=n_correct(tw_length,mth)+1; + % end + % + % [numTrials,numChannels,~] = size(sMatrix); + % sMatrix = permute(sMatrix,[3,2,1]); + % for i=1:size(sMatrix,3); + % sMatrix(:,:,i) = (CSP.cspFilter*sMatrix(:,:,i)')'; + % end + % instances = zeros(numTrials,numChannels); + % for i=1:numTrials + % projectedTrial = sMatrix(:,:,i); + % variances = var(projectedTrial,0,1); + % instances(i,:) = log(variances)'; + % end + % instanceSet = eegtoolkit.util.InstanceSet(instances,labels); + end + end +end + diff --git a/doc/+eegtoolkit/+classification/@ITCCA/graph.dot b/doc/+eegtoolkit/+classification/@ITCCA/graph.dot new file mode 100644 index 0000000..c21624b --- /dev/null +++ b/doc/+eegtoolkit/+classification/@ITCCA/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + ITCCA -> ITCCA; + + ITCCA [URL="ITCCA.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@ITCCA/graph.html b/doc/+eegtoolkit/+classification/@ITCCA/graph.html new file mode 100644 index 0000000..986bd8d --- /dev/null +++ b/doc/+eegtoolkit/+classification/@ITCCA/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@ITCCA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@ITCCA >
+

Dependency Graph for ./+eegtoolkit/+classification/@ITCCA

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@ITCCA + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@ITCCA/graph.map b/doc/+eegtoolkit/+classification/@ITCCA/graph.map new file mode 100644 index 0000000..3226b8d --- /dev/null +++ b/doc/+eegtoolkit/+classification/@ITCCA/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@ITCCA/graph.png b/doc/+eegtoolkit/+classification/@ITCCA/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ec55bcf11f104c5cac06bdb214d09f3dc8226c62 GIT binary patch literal 3828 zcmYM1cQn=iAIGm`W+$#|h9qTgW$$&3i+rz{aYNaJD=SF|NtY{|?v-#ev$C$e$4v=I zGNWv=e{X;N&i&l`Ip?0we7&Bp=kxK7GllEY)52&W5D2}#o|ZY-$AIr`YD(~H3DZ{u zJ4z=*T`kDj`6sWbC=~)>DAw0fw+PPqlO1Y=SUT(eA-Xfiq+YL?aK%MfgX1z)RNGye zA$Pox{hUx;ifg54YW?6~X9vCAG~P?h9>rSQvC6`|eSxD-iu)cvV)IFX4)cPOWu63c zshaot58k713N|k_3^VpHS!z?mAvybsVYz#X!wU#9ePUc{ERzy4GBqle#0nqqc|(lj zASAJkup^Pkk%@`tc)ZYbO9U^(XaBDqG_fn9v%ayheSG{1fk4>U+mrJo5YATGYdOjH zN|ytaZ0r3fEG;eH6&I@;8`HlpDKSGJ$ZL>^;3CTb4JzY57ZxbIy}d6|Q91wH_-QK4 z3N~tbdTlMOi_hpdoC*sMystv3gLq+yl&-F>3gO2JA|fI_KZz8!&5t>dWo%9rP<3_n zm%T1fmB$J$QXI#}$FqO_(DU;0lFq!mypqdwi%1!CIIEJ;i3#c&Bt6D}0%H)<(4aJ3 z=S%MC=?OZa5!KV9r=_FAFDJ)FLqkJNOG2B+UW|*2 z(=#w2&iAHXP3=9jw22t;#=k2o>x?3&^4XYGXJu#C{P0x(+<9|z^Lavo=HthAbY4J5 zdCk$;M@PON5ocjJDq)kO zTZd2WjC@azLr^X*rXm<~{uH0C7aRlq{e@N~HM)W1Pqw!F!Z+Hec6N8KL4>Yf_dh#5 zk%7`BrJ-cyWII7|6y3)JX)j(-Ia;f-Z3$P-%*^!suQO7&WL!#Id^muINF>(z{?hqa zTYDRcOs!QazAN29E`cdt`Kqhm;om9ysfQmx*_o9F1o4E zRXI&1qkuq2szMDGfaf+hXE8J|c!*n#n_C>re7uw$B+L@0fEs|Fo*u0yrF|A{l8R|_ zoZbHsVGH ziGa4YcJKn`t^_Fbr@hGsKK}mE*0<#7k3!LCVt03ugN|3DtTvEaS0ZO@z5kLE32*#} zeY+ZAZT%bwC9iSSLXf4czyFfGz5T}izHV@^f=)6|;>L#0)7V%|vGo0rW1Jx(ARvHG zOpJjg?&7s;*O(GI!`}Dk4_h|`+-N@8vteapJC`yLKV)Qj`o-cRN=8;T<8-DW@Y4Bc zmzHXUg(*W?ySu6M_4W1Oa2-ECsn-VAY;A2z$3}2BtUlN$iZ}nez%FJRsgb`tm2#@8 zo6MuFu1;oEhNOUCK|N7JS#ei2pYdJ0M)CLWUtj@H88;?)&K;UKttZRNZf-I#3roxV zs;bMiUf(s;)F5<}0!I!ZVapVEx1?h1>F{@Dx%2Jr6vd!j?cNzB}w6Bx$A{Cu*gs3<){ z!}iq=ElE8+JvmoU#rdPt(?*PpjHvtfr*Ky9EDRXVrKZq*BS{F9hsO&& z{rPi8ih%CcWX*$80s(Jc>|$ZTI-I5G>~RdEqx?HvpW6P6{#T}Vv-{-N$$z@vS|U`* zHez|h%U42{v$JYi%K%F5ZIqM~+PHZt14j((t5 zMKh@@I|}h5ZZfF-zg1FPV!I`wJk;0sM2mlAORV!t&w}4O3z5dx-0bYJSS*y4l@;5BLdAdl zC|6fsuP)4mP3YE1gi%21{1)Qv=6LhQJt}}Vc64;8@iBpokB<+Mot-_=6k7XzrZm?*|&oRa^ypoKu>*^hPbP1Yp0Bj9Iy(${E)o2Z#%>`8GAtb7icH6 zMoik_JwXS6#wW_}MF$c?+x|?|GDD$m>6N=^Wssf{=pDChc3w}H*BA^l zt-oMzbP6l_pW#Q{TtL^Am6bzI4g(X8YHMr#r#^Z%#b4KNvNyq*_da_@Sv8TA#DESB zCAGIlmz9-$=eh3?7au?O>YCx2`CdcdsxZbtH0N?vkWR_?7>Sh1Dfh5E0s0Ea?&8LW zq4%-w4;~0WD5EM=LLCVvO}24Y^wuqz>;TB|4#^~BZ9=lD62xo0 zQzxy;{ai&}brpo(=N)q?&GzfUx zdcOq&&MXdpIq#W)wrHx%!3*+Gx`E;0rL)t0RS=I2b#+V--~-zeQk*atHZ4sDVq5KI zmhQ`DToJTx4?-bFHDabu)7RZUg)FMU33}-<2(M|5||4YnS`L=)77sZ)<;Y0#f*KIN3LE7E-lHL zNSmtlCjI!4TU=cHA|avbU-8DW5Qtn5)!{p%x<n z_@~JEd6%a#F}rZRpd@#1@B2nZbQpt$NV~!f!IX>)_lCp9!}sOY`hqOsTfNuiNTZ&$ zI13SNdwU*`$+7yWLisoxE@;Sq%bHEx{zaKhEx)`xdl5XFIEFI>&_o}l2FW*__%k36 zYyc$KRNP9OzsG|I94suvi3#iX79yF7V>HF26)Xm$oucPbae}uhIoKXnm6n!HB_kud zs8(V9a8F;#b5bVL{r6@=GC;_#j*byf9S~+U8IeU9U0pg!ys9}oJUq&8itb53gSY1O z3Dy-)Kqvw>klnSM@X%mzU!avt)M;1rUo;hD@$HPiViM3y6Y392-nZcQEGA|XJZ_Un zVOd$?!NI{mU*8-EvxoS>-!*S_3R50@CEzkMIYC)k8e+5W@YEm&L2oZOB9XAO(<5(P zL#e{A#nc3cmZ7-I*T*_LV>mcCN{fptaD?kgNBiskyT8Y|o( z(@mlB?L?w*ie8=1PmP&RAtbBG9BL&cC2VS{W`ow zq=dvvrwZ)$;^68iWH8l8QK-rx4;au*Or%ksz2G^`+DciylQPlctQh2(FBr+ZdJioe{)uRU1s*0E@EGS^QawW#BQ0HF9 zb7sIg09>p-`t(A=#hW~Bi-)CdKewA3KvUU2Xm~F yBXk4rGj>Kd;OYqHivRzT5aP!zO6+Z&JA+)27Kk%kpTmG + + + Index for Directory ./+eegtoolkit/+classification/@ITCCA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@ITCCA >
+ +

Index for ./+eegtoolkit/+classification/@ITCCA

+ +

Matlab files in this directory:

+ +
 ITCCA
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@L1MCCA/L1MCCA.html b/doc/+eegtoolkit/+classification/@L1MCCA/L1MCCA.html new file mode 100644 index 0000000..05b37d7 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@L1MCCA/L1MCCA.html @@ -0,0 +1,289 @@ + + + + Description of L1MCCA + + + + + + + + + + + + + +

L1MCCA +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

L1MCCA.m

+

SOURCE CODE ^

+
0001 classdef L1MCCA< eegtoolkit.classification.ClassifierBase
+0002     
+0003     properties (Constant)
+0004         
+0005     end
+0006     properties
+0007         samplingRate;
+0008         numHarmonics;
+0009         numSeconds;
+0010         stimulusFrequencies;
+0011         models;
+0012         maxIterations;
+0013         nProjectionComponents;
+0014         lambda;
+0015     end
+0016     
+0017     properties (Access = private)
+0018         referenceSignals;
+0019         optimalReferenceSignals;
+0020         projections;
+0021     end
+0022     
+0023     methods (Access = public)
+0024         function L1MCCA = L1MCCA(samplingRate,numSeconds,numHarmonics,stimulusFrequencies)
+0025             L1MCCA.samplingRate = samplingRate;
+0026             L1MCCA.numSeconds = numSeconds;
+0027             L1MCCA.numHarmonics = numHarmonics;
+0028             L1MCCA.stimulusFrequencies = stimulusFrequencies;
+0029             
+0030             L1MCCA.maxIterations = 200;
+0031             L1MCCA.nProjectionComponents = 1;
+0032             L1MCCA.lambda = 0.02;
+0033             
+0034             L1MCCA.referenceSignals = {};
+0035             L1MCCA.projections = {};
+0036             L1MCCA.optimalReferenceSignals = {};
+0037             
+0038         end
+0039         
+0040         function L1MCCA = build(L1MCCA)
+0041             L1MCCA.reset;
+0042             n_sti = length(L1MCCA.stimulusFrequencies);
+0043             TW = 0.5:0.5:L1MCCA.numSeconds;
+0044             TW_p = round(TW*L1MCCA.samplingRate);
+0045             
+0046             for i=1:n_sti
+0047                 L1MCCA.referenceSignals{i} = L1MCCA.squarewave(L1MCCA.stimulusFrequencies(i)...
+0048                     ,L1MCCA.samplingRate,L1MCCA.numSeconds*L1MCCA.samplingRate,L1MCCA.numHarmonics);
+0049             end
+0050             for i=1:n_sti
+0051                 a = L1MCCA.instanceSet.matrix4D(:,:,L1MCCA.instanceSet.labelss==i);
+0052                 [~,~,numIns] = size(a);
+0053                 iniw3 = ones(numIns,1);
+0054                 L1MCCA.projections{i} = {};
+0055                 [L1MCCA.projections{i}{1},L1MCCA.projections{i}{2},L1MCCA.projections{i}{3}] = L1MCCA.smcca(L1MCCA.referenceSignals{i},...
+0056                     a,L1MCCA.maxIterations,iniw3,L1MCCA.nProjectionComponents,L1MCCA.lambda);
+0057             end
+0058             for i=1:n_sti
+0059                 L1MCCA.optimalReferenceSignals{i} = ttm(tensor(L1MCCA.instanceSet.matrix4D(:,:,L1MCCA.instanceSet.labelss==i)),L1MCCA.projections{i}{2}',3);
+0060                 L1MCCA.optimalReferenceSignals{i} = tenmat(L1MCCA.optimalReferenceSignals{i},1);
+0061                 L1MCCA.optimalReferenceSignals{i} = L1MCCA.optimalReferenceSignals{i}.data;
+0062                 L1MCCA.optimalReferenceSignals{i} = L1MCCA.projections{i}{1}'*L1MCCA.optimalReferenceSignals{i};
+0063             end
+0064         end
+0065         
+0066         function [output, probabilities, ranking] = classifyInstance(L1MCCA,instance)
+0067             %input = instance matrix rows = instances, cols = attributes
+0068             %output = predicted class
+0069             %probabilities = probability for predicted class
+0070             %ranking = propabilities for all classes (e.g. to use with mAP)
+0071             
+0072             %TODO:should print an error if 'build' has not been called
+0073             [~, ~,numInstance] = size(instance);
+0074             numLabels = length(L1MCCA.optimalReferenceSignals);
+0075             output = zeros(numInstance,1);
+0076             scores = zeros(numLabels,numInstance);
+0077             for i=1:numInstance
+0078                 for j=1:numLabels
+0079                     [~,~,r] = L1MCCA.cca(instance(:,:,i),L1MCCA.optimalReferenceSignals{j});
+0080                     scores(j,i) = max(r);
+0081                     
+0082                 end
+0083                 [~,output(i,1)] = max(scores(:,i));
+0084             end
+0085             ranking = scores;
+0086             probabilities = max(scores);
+0087         end
+0088         
+0089         function L1MCCA = reset(L1MCCA)
+0090 %             'Resets' the classifier.
+0091             L1MCCA.referenceSignals = {};
+0092             L1MCCA.projections = {};
+0093             L1MCCA.optimalReferenceSignals = {};
+0094         end
+0095         
+0096         function configInfo = getConfigInfo(L1MCCA)
+0097             % Prints the parameters of the classifier
+0098             configInfo = 'L1MCCA';
+0099         end
+0100         
+0101         function [Wx, Wy, r] = cca(L1MCCA,X,Y)
+0102             
+0103             % CCA calculate canonical correlations
+0104             %
+0105             % [Wx Wy r] = cca(X,Y) where Wx and Wy contains the canonical correlation
+0106             % vectors as columns and r is a vector with corresponding canonical
+0107             % correlations. The correlations are sorted in descending order. X and Y
+0108             % are matrices where each column is a sample. Hence, X and Y must have
+0109             % the same number of columns.
+0110             %
+0111             % Example: If X is M*K and Y is N*K there are L=MIN(M,N) solutions. Wx is
+0112             % then M*L, Wy is N*L and r is L*1.
+0113             %
+0114             %
+0115             % ?? 2000 Magnus Borga, Link?pings universitet
+0116             
+0117             % --- Calculate covariance matrices ---
+0118             
+0119             z = [X;Y];
+0120             C = cov(z.');
+0121             sx = size(X,1);
+0122             sy = size(Y,1);
+0123             Cxx = C(1:sx, 1:sx) + 10^(-8)*eye(sx);
+0124             Cxy = C(1:sx, sx+1:sx+sy);
+0125             Cyx = Cxy';
+0126             Cyy = C(sx+1:sx+sy, sx+1:sx+sy) + 10^(-8)*eye(sy);
+0127             invCyy = inv(Cyy);
+0128             
+0129             % --- Calcualte Wx and r ---
+0130             
+0131             [Wx,r] = eig(inv(Cxx)*Cxy*invCyy*Cyx); % Basis in X
+0132             r = sqrt(real(r));      % Canonical correlations
+0133             
+0134             % --- Sort correlations ---
+0135             
+0136             V = fliplr(Wx);        % reverse order of eigenvectors
+0137             r = flipud(diag(r));    % extract eigenvalues and reverse their order
+0138             [r,I]= sort((real(r)));    % sort reversed eigenvalues in ascending order
+0139             r = flipud(r);        % restore sorted eigenvalues into descending order
+0140             for j = 1:length(I)
+0141                 Wx(:,j) = V(:,I(j));  % sort reversed eigenvectors in ascending order
+0142             end
+0143             Wx = fliplr(Wx);    % restore sorted eigenvectors into descending order
+0144             
+0145             % --- Calcualte Wy  ---
+0146             
+0147             Wy = invCyy*Cyx*Wx;     % Basis in Y
+0148             % Wy = Wy./repmat(sqrt(sum(abs(Wy).^2)),sy,1); % Normalize Wy
+0149         end
+0150         function  [w1,w3,v1] = smcca(L1MCCA,refdata,traindata,max_iter,iniw3,n_comp,lmbda)
+0151             % L1-regualrized (Sparse) Multiway CCA
+0152             % traindata:    channel x time x trial
+0153             % refdata:      references by sine-cosine waveforms
+0154             %
+0155             % Rerefence:
+0156             % [1] Y. Zhang, G. Zhou, J. Jin, M. Wang, X. Wang, A. Cichocki.
+0157             %     L1-regularized multiway canonical correlation analysis for SSVEP-based BCI.
+0158             %     IEEE Trans. Neural Syst. Rehabil. Eng., 21(6): 887-896 (2013)
+0159             % [2] T.K. Kim, R. Cipolla. Canonical correlation analysis of video volume tensor for
+0160             %     action categorization and detection. IEEE Trans. PAMI, 31(8): 1415-1428 (2009)
+0161             %
+0162             %
+0163             % by Yu Zhang, ECUST, 2014.4.29
+0164             %
+0165             
+0166             iter=1;
+0167             w3=iniw3;
+0168             w3=w3./norm(w3);
+0169             traindata=tensor(traindata);
+0170             refdata=tensor(refdata);
+0171             
+0172             er=0.00001;     % error for iteration stop
+0173             
+0174             while iter<max_iter
+0175                 projx3=ttm(traindata,w3',3);
+0176                 projx3=tenmat(projx3,1);                        % unfolding each trial tensor into i-mode matrix
+0177                 projx3=projx3.data;
+0178                 [v1,w1,r1]=L1MCCA.cca(refdata.data,projx3);
+0179                 v1=v1(:,1:n_comp); w1=w1(:,1:n_comp);
+0180                 v1=v1./norm(v1); w1=w1./norm(w1);
+0181                 projx1=ttm(traindata,w1',1);
+0182                 projx1=tenmat(projx1,3);                        % unfolding each trial tensor into i-mode matrix
+0183                 projx1=projx1.data;
+0184                 projref1=ttm(refdata,v1',1);
+0185                 projref1=projref1.data(:)';
+0186                 w3=lasso(projx1',projref1','Lambda',lmbda);
+0187                 w3=w3./norm(w3);
+0188                 if iter>1
+0189                     if all(sign(w1)==-sign(prew1))
+0190                         errw(1,iter-1)=norm(w1+prew1);
+0191                     else
+0192                         errw(1,iter-1)=norm(w1-prew1);
+0193                     end
+0194                     if all(sign(w3)==-sign(prew3))
+0195                         errw(2,iter-1)=norm(w3+prew3);
+0196                     else
+0197                         errw(2,iter-1)=norm(w3-prew3);
+0198                     end
+0199                     if all(sign(v1)==-sign(prev1))
+0200                         errw(3,iter-1)=norm(v1+prev1);
+0201                     else
+0202                         errw(3,iter-1)=norm(v1-prev1);
+0203                     end
+0204                     if errw(1,iter-1)<er && errw(2,iter-1)<er && errw(3,iter-1)<er
+0205                         break
+0206                     end
+0207                 end
+0208                 prew1=w1;
+0209                 prew3=w3;
+0210                 prev1=v1;
+0211                 iter=iter+1;
+0212             end
+0213             
+0214             fprintf('L1MCCA Iteration is %d \n',iter);
+0215         end
+0216         
+0217         
+0218         function y=squarewave(L1MCCA,f, S, T, H)
+0219             
+0220             % f-- the fundermental frequency
+0221             % S-- the sampling rate
+0222             % T-- the number of sampling points
+0223             % H-- the number of harmonics
+0224             
+0225             
+0226             for i=1:H
+0227                 for j=1:T
+0228                     t= j/S;
+0229                     y(2*i-1,j)=sin(2*pi*(i*f)*t);
+0230                     y(2*i,j)=cos(2*pi*(i*f)*t);
+0231                 end
+0232             end
+0233         end
+0234         
+0235         function time = getTime(L1MCCA)
+0236             time = 0;
+0237         end
+0238     end
+0239 end
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@L1MCCA/L1MCCA.m b/doc/+eegtoolkit/+classification/@L1MCCA/L1MCCA.m new file mode 100644 index 0000000..3c65968 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@L1MCCA/L1MCCA.m @@ -0,0 +1,239 @@ +classdef L1MCCA< eegtoolkit.classification.ClassifierBase + + properties (Constant) + + end + properties + samplingRate; + numHarmonics; + numSeconds; + stimulusFrequencies; + models; + maxIterations; + nProjectionComponents; + lambda; + end + + properties (Access = private) + referenceSignals; + optimalReferenceSignals; + projections; + end + + methods (Access = public) + function L1MCCA = L1MCCA(samplingRate,numSeconds,numHarmonics,stimulusFrequencies) + L1MCCA.samplingRate = samplingRate; + L1MCCA.numSeconds = numSeconds; + L1MCCA.numHarmonics = numHarmonics; + L1MCCA.stimulusFrequencies = stimulusFrequencies; + + L1MCCA.maxIterations = 200; + L1MCCA.nProjectionComponents = 1; + L1MCCA.lambda = 0.02; + + L1MCCA.referenceSignals = {}; + L1MCCA.projections = {}; + L1MCCA.optimalReferenceSignals = {}; + + end + + function L1MCCA = build(L1MCCA) + L1MCCA.reset; + n_sti = length(L1MCCA.stimulusFrequencies); + TW = 0.5:0.5:L1MCCA.numSeconds; + TW_p = round(TW*L1MCCA.samplingRate); + + for i=1:n_sti + L1MCCA.referenceSignals{i} = L1MCCA.squarewave(L1MCCA.stimulusFrequencies(i)... + ,L1MCCA.samplingRate,L1MCCA.numSeconds*L1MCCA.samplingRate,L1MCCA.numHarmonics); + end + for i=1:n_sti + a = L1MCCA.instanceSet.matrix4D(:,:,L1MCCA.instanceSet.labelss==i); + [~,~,numIns] = size(a); + iniw3 = ones(numIns,1); + L1MCCA.projections{i} = {}; + [L1MCCA.projections{i}{1},L1MCCA.projections{i}{2},L1MCCA.projections{i}{3}] = L1MCCA.smcca(L1MCCA.referenceSignals{i},... + a,L1MCCA.maxIterations,iniw3,L1MCCA.nProjectionComponents,L1MCCA.lambda); + end + for i=1:n_sti + L1MCCA.optimalReferenceSignals{i} = ttm(tensor(L1MCCA.instanceSet.matrix4D(:,:,L1MCCA.instanceSet.labelss==i)),L1MCCA.projections{i}{2}',3); + L1MCCA.optimalReferenceSignals{i} = tenmat(L1MCCA.optimalReferenceSignals{i},1); + L1MCCA.optimalReferenceSignals{i} = L1MCCA.optimalReferenceSignals{i}.data; + L1MCCA.optimalReferenceSignals{i} = L1MCCA.projections{i}{1}'*L1MCCA.optimalReferenceSignals{i}; + end + end + + function [output, probabilities, ranking] = classifyInstance(L1MCCA,instance) + %input = instance matrix rows = instances, cols = attributes + %output = predicted class + %probabilities = probability for predicted class + %ranking = propabilities for all classes (e.g. to use with mAP) + + %TODO:should print an error if 'build' has not been called + [~, ~,numInstance] = size(instance); + numLabels = length(L1MCCA.optimalReferenceSignals); + output = zeros(numInstance,1); + scores = zeros(numLabels,numInstance); + for i=1:numInstance + for j=1:numLabels + [~,~,r] = L1MCCA.cca(instance(:,:,i),L1MCCA.optimalReferenceSignals{j}); + scores(j,i) = max(r); + + end + [~,output(i,1)] = max(scores(:,i)); + end + ranking = scores; + probabilities = max(scores); + end + + function L1MCCA = reset(L1MCCA) +% 'Resets' the classifier. + L1MCCA.referenceSignals = {}; + L1MCCA.projections = {}; + L1MCCA.optimalReferenceSignals = {}; + end + + function configInfo = getConfigInfo(L1MCCA) + % Prints the parameters of the classifier + configInfo = 'L1MCCA'; + end + + function [Wx, Wy, r] = cca(L1MCCA,X,Y) + + % CCA calculate canonical correlations + % + % [Wx Wy r] = cca(X,Y) where Wx and Wy contains the canonical correlation + % vectors as columns and r is a vector with corresponding canonical + % correlations. The correlations are sorted in descending order. X and Y + % are matrices where each column is a sample. Hence, X and Y must have + % the same number of columns. + % + % Example: If X is M*K and Y is N*K there are L=MIN(M,N) solutions. Wx is + % then M*L, Wy is N*L and r is L*1. + % + % + % ?? 2000 Magnus Borga, Link?pings universitet + + % --- Calculate covariance matrices --- + + z = [X;Y]; + C = cov(z.'); + sx = size(X,1); + sy = size(Y,1); + Cxx = C(1:sx, 1:sx) + 10^(-8)*eye(sx); + Cxy = C(1:sx, sx+1:sx+sy); + Cyx = Cxy'; + Cyy = C(sx+1:sx+sy, sx+1:sx+sy) + 10^(-8)*eye(sy); + invCyy = inv(Cyy); + + % --- Calcualte Wx and r --- + + [Wx,r] = eig(inv(Cxx)*Cxy*invCyy*Cyx); % Basis in X + r = sqrt(real(r)); % Canonical correlations + + % --- Sort correlations --- + + V = fliplr(Wx); % reverse order of eigenvectors + r = flipud(diag(r)); % extract eigenvalues and reverse their order + [r,I]= sort((real(r))); % sort reversed eigenvalues in ascending order + r = flipud(r); % restore sorted eigenvalues into descending order + for j = 1:length(I) + Wx(:,j) = V(:,I(j)); % sort reversed eigenvectors in ascending order + end + Wx = fliplr(Wx); % restore sorted eigenvectors into descending order + + % --- Calcualte Wy --- + + Wy = invCyy*Cyx*Wx; % Basis in Y + % Wy = Wy./repmat(sqrt(sum(abs(Wy).^2)),sy,1); % Normalize Wy + end + function [w1,w3,v1] = smcca(L1MCCA,refdata,traindata,max_iter,iniw3,n_comp,lmbda) + % L1-regualrized (Sparse) Multiway CCA + % traindata: channel x time x trial + % refdata: references by sine-cosine waveforms + % + % Rerefence: + % [1] Y. Zhang, G. Zhou, J. Jin, M. Wang, X. Wang, A. Cichocki. + % L1-regularized multiway canonical correlation analysis for SSVEP-based BCI. + % IEEE Trans. Neural Syst. Rehabil. Eng., 21(6): 887-896 (2013) + % [2] T.K. Kim, R. Cipolla. Canonical correlation analysis of video volume tensor for + % action categorization and detection. IEEE Trans. PAMI, 31(8): 1415-1428 (2009) + % + % + % by Yu Zhang, ECUST, 2014.4.29 + % + + iter=1; + w3=iniw3; + w3=w3./norm(w3); + traindata=tensor(traindata); + refdata=tensor(refdata); + + er=0.00001; % error for iteration stop + + while iter1 + if all(sign(w1)==-sign(prew1)) + errw(1,iter-1)=norm(w1+prew1); + else + errw(1,iter-1)=norm(w1-prew1); + end + if all(sign(w3)==-sign(prew3)) + errw(2,iter-1)=norm(w3+prew3); + else + errw(2,iter-1)=norm(w3-prew3); + end + if all(sign(v1)==-sign(prev1)) + errw(3,iter-1)=norm(v1+prev1); + else + errw(3,iter-1)=norm(v1-prev1); + end + if errw(1,iter-1) L1MCCA; + + L1MCCA [URL="L1MCCA.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@L1MCCA/graph.html b/doc/+eegtoolkit/+classification/@L1MCCA/graph.html new file mode 100644 index 0000000..73b2da2 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@L1MCCA/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@L1MCCA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@L1MCCA >
+

Dependency Graph for ./+eegtoolkit/+classification/@L1MCCA

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@L1MCCA + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@L1MCCA/graph.map b/doc/+eegtoolkit/+classification/@L1MCCA/graph.map new file mode 100644 index 0000000..55100c7 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@L1MCCA/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@L1MCCA/graph.png b/doc/+eegtoolkit/+classification/@L1MCCA/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..99fba2909ad049496bf3eaebe4b34db6eb159336 GIT binary patch literal 4313 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+classification/@L1MCCA/index.html b/doc/+eegtoolkit/+classification/@L1MCCA/index.html new file mode 100644 index 0000000..bb4d8ac --- /dev/null +++ b/doc/+eegtoolkit/+classification/@L1MCCA/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+classification/@L1MCCA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@L1MCCA >
+ +

Index for ./+eegtoolkit/+classification/@L1MCCA

+ +

Matlab files in this directory:

+ +
 L1MCCA
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LDA/LDA.html b/doc/+eegtoolkit/+classification/@LDA/LDA.html new file mode 100644 index 0000000..e8c6922 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LDA/LDA.html @@ -0,0 +1,131 @@ + + + + Description of LDA + + + + + + + + + + + + + +

LDA +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

LDA.m

+

SOURCE CODE ^

+
0001 classdef LDA < eegtoolkit.classification.ClassifierBase
+0002     
+0003     properties (Constant)
+0004 
+0005     end
+0006     
+0007     properties (Access = public)
+0008       W_LDA;
+0009       PCA_mat;
+0010       trainFeat;
+0011     end
+0012     
+0013     methods (Access = public)
+0014         function LDA = LDA(instanceSet)
+0015             if nargin > 0
+0016                 LDA.instanceSet = instanceSet;
+0017             end
+0018            
+0019         end
+0020         
+0021         function LDA = build(LDA)
+0022             LDA.reset();
+0023             data = LDA.instanceSet.getInstances;
+0024             data = data';  
+0025             labels = LDA.instanceSet.getLabels;   
+0026             unique(labels)           
+0027             numTrials = length(labels);
+0028 
+0029             PCA_W=pca_func(data);
+0030 %             PCA_W=eye(8000);
+0031             train_Data=PCA_W'*data; 
+0032             
+0033             Par.mode = 'LDA';
+0034             dim = length(unique(labels))-1;
+0035             [W,Wp] = SGE_GraphConstruct(labels,Par);
+0036             [TransMatrix,~] = SGE_Mapping(train_Data,dim,W,Wp);
+0037             LDA.W_LDA = TransMatrix;
+0038             LDA.PCA_mat=PCA_W;
+0039             mtrainFeat=SGE_Projection(train_Data,1:dim,TransMatrix);
+0040             LDA.trainFeat=mtrainFeat;                       
+0041 %             figure,gplotmatrix(mtrainFeat',[],labels)
+0042         end
+0043         
+0044         function [output, probabilities, ranking] = classifyInstance(LDA,instance)
+0045             
+0046             N = size(instance,1);            
+0047             instance = instance'; 
+0048 
+0049             test_Data=LDA.PCA_mat'*instance;               
+0050 %             test_Data=[ones(1,N);test_Data];
+0051 
+0052             testFeat=LDA.W_LDA'*test_Data;  
+0053             X = LDA.trainFeat;
+0054             y = LDA.instanceSet.getLabels;
+0055             [~,output] = SGE_Classification(X,y',testFeat,0,'euc');
+0056             output = output(1,:)';
+0057             probabilities=zeros(N,1);
+0058             ranking=zeros(N,1);
+0059 %             figure,gplotmatrix(testFeat',[],output)
+0060           
+0061         end
+0062         
+0063         function LDA = reset(LDA)
+0064             %delete all stored models
+0065             LDA.W_LDA=[];
+0066             LDA.PCA_mat=[];
+0067             LDA.trainFeat=[];
+0068         end
+0069         
+0070         function configInfo = getConfigInfo(LDA)
+0071             configInfo = sprintf('MLR_Classifier');
+0072         end
+0073         
+0074                         
+0075         function time = getTime(LDA)
+0076             
+0077         end
+0078                 
+0079     end
+0080 end
+0081
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LDA/LDA.m b/doc/+eegtoolkit/+classification/@LDA/LDA.m new file mode 100644 index 0000000..f5e762a --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LDA/LDA.m @@ -0,0 +1,81 @@ +classdef LDA < eegtoolkit.classification.ClassifierBase + + properties (Constant) + + end + + properties (Access = public) + W_LDA; + PCA_mat; + trainFeat; + end + + methods (Access = public) + function LDA = LDA(instanceSet) + if nargin > 0 + LDA.instanceSet = instanceSet; + end + + end + + function LDA = build(LDA) + LDA.reset(); + data = LDA.instanceSet.getInstances; + data = data'; + labels = LDA.instanceSet.getLabels; + unique(labels) + numTrials = length(labels); + + PCA_W=pca_func(data); +% PCA_W=eye(8000); + train_Data=PCA_W'*data; + + Par.mode = 'LDA'; + dim = length(unique(labels))-1; + [W,Wp] = SGE_GraphConstruct(labels,Par); + [TransMatrix,~] = SGE_Mapping(train_Data,dim,W,Wp); + LDA.W_LDA = TransMatrix; + LDA.PCA_mat=PCA_W; + mtrainFeat=SGE_Projection(train_Data,1:dim,TransMatrix); + LDA.trainFeat=mtrainFeat; +% figure,gplotmatrix(mtrainFeat',[],labels) + end + + function [output, probabilities, ranking] = classifyInstance(LDA,instance) + + N = size(instance,1); + instance = instance'; + + test_Data=LDA.PCA_mat'*instance; +% test_Data=[ones(1,N);test_Data]; + + testFeat=LDA.W_LDA'*test_Data; + X = LDA.trainFeat; + y = LDA.instanceSet.getLabels; + [~,output] = SGE_Classification(X,y',testFeat,0,'euc'); + output = output(1,:)'; + probabilities=zeros(N,1); + ranking=zeros(N,1); +% figure,gplotmatrix(testFeat',[],output) + + end + + function LDA = reset(LDA) + %delete all stored models + LDA.W_LDA=[]; + LDA.PCA_mat=[]; + LDA.trainFeat=[]; + end + + function configInfo = getConfigInfo(LDA) + configInfo = sprintf('MLR_Classifier'); + end + + + function time = getTime(LDA) + + end + + end +end + diff --git a/doc/+eegtoolkit/+classification/@LDA/graph.dot b/doc/+eegtoolkit/+classification/@LDA/graph.dot new file mode 100644 index 0000000..89a5dcc --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LDA/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + LDA -> LDA; + + LDA [URL="LDA.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LDA/graph.html b/doc/+eegtoolkit/+classification/@LDA/graph.html new file mode 100644 index 0000000..8c50b7b --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LDA/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@LDA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@LDA >
+

Dependency Graph for ./+eegtoolkit/+classification/@LDA

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@LDA + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LDA/graph.map b/doc/+eegtoolkit/+classification/@LDA/graph.map new file mode 100644 index 0000000..85fcbaf --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LDA/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@LDA/graph.png b/doc/+eegtoolkit/+classification/@LDA/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..14d442d2a12fab23f17f0c6404252b5efc86de30 GIT binary patch literal 3410 zcmW+(by!pH+ees!)JT!WA)quO2vQ1zQA0}UW^{Lqk`Sb%rIGF)AUH`0nbag4`4uGO zhjgpFkMFhX?EG<_`&{Sw)O|m3+FA%Iau#wTA|fg^Rk$v=yMjxG><0Mv6oGsIw;R?P z2sqKzzh4oyA`Pr0Rf9j(56Iie3)W1V; z_N4Um^zNpORMynQtEi}`mg!EOopneq&&|D^sWUx)&nV!VyoN2n!3ZZEtJjO1i>0IXTJ6$zf1v zGD_Fo@NGtp95p4Sww2YLjEoE&6pBaU;lnp7C3g%A3=R$sU@5BbarsL@X=&+{++0@I zxyA?=S6BPGXYaJN?d|z|{r&Y22vT1kA8l`MaR~_t9Ssc%q?T4{S{i+HRMf=D&b;Gz zf!x~84wepS=9f9$T2R388HX!<`I5N0w)QSJH#a#IRoTvbyPl!pZBX&1tc+*FbJ|Hl ztxUJNva;y)YjS=80q$%~m4bo-26lENB8lxzlOZl}fsur*WYWRoa2?4e8$bhqYQ$ia zt*v2R-ri#J@?*Xo*Tp0xqCbCDFD)QTv|-8j30_$(%4bH8gpiyGwHa%Erd1Z{4~TaJuL}`R$vdgAs*_JN_XH)yK3NN=hV5gv|W^{{3$6Z*CL(}ArJ`Dk7#C=#KDPXJCs^E0PZ_3TinvFw>UdN-A?6Cs>YUCkd0ht18+aVaP) zPk8wlraMkgPkZ?Iz%4DgSXf!JH1PBhroux_HbXtD`)>*g+#ICwhK-I2e~##JU%t?? zvt#*%XH56cHwq)iH&(w^>BVFgqn?&CGBNezaFin>BhS_tLf?;!jz*@W&@P2tg(zuU zYb3%~*VI_Kxg`w@z%`M`x~Ou#)Vw@4u-!Zv|FH?(bxBtT2Qm&0jyY`b>D3Ri;Jkzc zO7Qge@5AvM(_$OgAp?t$3_$T#vcg}k;NVNf5ARRb=r}o_p-?EFUklR4-JyS4KOAq* zrj?cbXziYvnHdnJtYEQ|sB3I|V;*{r;^*ft9v)WJimbO&K_EuP$CEodJ8$VP;cy9X zSjvf7Ohbc6^s86+!9>=qS}PU2K0o96S{Z|;O!Zq|1EYIm`K84#4>*W z>&X-{X$(Gfv$eIgw6?Zhdh3K?>Fw>+zQ+)>U3fE5g#<|U?CearP#|km$J8_ds_>fz zl!Z4niPhHDdi*}~)Hg5?sZ3%t6;31|YFyZf?7CGxV~>HkpTIlN=gmt5dv0-Ydco1+ni`FUprGJj&%eI|&(6;y zVjIJ*LR&GIFM&x(jypR$mbY)rHdxGRBxrHL0)m6LpSN{&u_h%YdHDOkG8Ha7{=K>B z(9zl1H#_V9Ewo%yQ?qAq@P-9?|GK^JQimsrxw$zF8RYComW7>AMGH$!Yil}KQ!qU8 z3ZzBI!3f{c>2es}zA!}6hPg^#9T?u{;>gj-!J(+HuMah8ZD*&_<+oEjHKjZDbD_l^ zIz2O^3x`8?7Q3?kp(}jW5f4;KMnSP!d-|KgQ*8JM8f`8G_)m$Lb;8}d|FoT4`7Z^&0yu2`K0h2SUR`FT z4had#o5gyrsu0>-Su?V-w%4}aN{Wd!bu3c~;MUgej@Ui`f}#8O z@Bh=Yr>7@=s=*wqUh%AuS2l;%IT?r3)UBC50$h332U=Q&$8v<&nUaLFu(0?%-ssN8 z$Hv7yRa7LdV0w|LBEGSvSTeb?(i=(GI(I>3sPnYBEs`@aF;POH&UldJ#Kgp0X(M*B z2rinQ&!5RlN=n!;o3yj_W+eThZ}aljTFr@u$Hz(gMLU8|>$M8TR4FJaOLKBqw1N{& zh52B`K<-lx5Ag>e!H8(MYjc1lFz~K?o}yttKm^f+i*@A|MbC zx)dPoDPLP$+)dD4lK<7p$>rnyK%ab5SO_f6{Ke?kuf?vT858#uILt^J8}{dz346Yt z>$5p==iu~oR%ovy{*n61gto=fAIUY5SL{hbaQfYGB!Rw5)PXTbSlWrr646GC4&&7kEabD?{{DQ4UYX} zO+yRzl9HJ@sMbZqB`EkWWX0F-GmxV%ciIVal>IB8m@M+z$AIEx4{_o&@t;~k#W&wd zN=nA~ZqGc0r3g0Pyt44|@d-y6t*x(XX*AT-DCz3b;c&Q~jl*8igf{xupS~My*EBRB z09j{fd205@QK0!4jgAHEib+c|%gf6@@VG-&;;k^ z=efbF)zs7)8yks|he!&?3ny#Cpb<~P1q|v}u%}CrhJrVehav$p)SU7O#l^+fp{Yh$ ztOG+sO7|EPtMt8Q<}iKE4cHs>^z?fHvWkypi-Vx$IhB=_gGh~mvM77{ z`$=?kbO5POwX~?|=;$o1tggYP#-cVJcLXdtFY);7@9#IZw_6+vyxvf%(uX~GKv!R1 zzqzxMpIPyuM#tPd>FZa0m!%KPaEN>%lq0#q#@OG#eaU!T!WE5X0}k`>^n9wJ5x;cJ zfSW&q9H7|P+}xKhlA*r8RZ$4Ldlw?h0j2DBXb3?fkwM!=6XdHvt`G>M2L$x- z@o^BT8FKiC*TCRl-@*c0_uq@{;_=6719I#1yL4d_#GE4hYEtXwfTn5@) z=Pf}Jrl+SnCab^T29?>_*&g2Bk@@-T%`GidLXIzvf;NJjoXE3;&0b=$auDKcQ&Uq? zVRo1Whlea{8ynpB?vVjv__Xq#goSm#Lw&i)XQE3?V14o{xgrNdE7cjg*vB&+srAz_}yz&qcHBH#2_SDh9r1 z1ySHz5)u>lfo@mF6|Nq()++a&C&~4cEJA@-Y3S)mGEr72RP@$`q*d|X#~tKRU0>dVFDWmQp8IH<4e=y;p1&T}(bG3f94 z#@73d0`9P|u!F-xZhL!stW9E4k}enx7rXqEot&MkIy-Ypb?;Z{^Mm2Ln1qyiB7%g} z0bh<}YsGog&I$X#;j62wK9?u1U@k75Z+F*w{+y8t3Z@|W)@E<#ee#QB7`O@zI$VM z5;q@~E>7u20A~%nT!O*>A2wtqTp9c5CZ8+C2Ymj1#%aArtmZf|p9Bs`L~6=f@Onkd Gm;VR7xri + + + Index for Directory ./+eegtoolkit/+classification/@LDA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@LDA >
+ +

Index for ./+eegtoolkit/+classification/@LDA

+ +

Matlab files in this directory:

+ +
 LDA
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVM/LIBSVM.html b/doc/+eegtoolkit/+classification/@LIBSVM/LIBSVM.html new file mode 100644 index 0000000..76995a2 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LIBSVM/LIBSVM.html @@ -0,0 +1,166 @@ + + + + Description of LIBSVM + + + + + + + + + + + + + +

LIBSVM +

+ +

PURPOSE ^

+
LIBSVMCLASSIFIER class
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
 LIBSVMCLASSIFIER class
+ Wrapper class of the libsvm library (libsvm) .mex files must be added to
+ your matlab path before using this class
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: +
    +
  • LIBSVM LIBSVMCLASSIFIER class
+This function is called by: +
    +
  • LIBSVM LIBSVMCLASSIFIER class
+ + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

LIBSVM.m

+

SOURCE CODE ^

+
0001 
+0002 % LIBSVMCLASSIFIER class
+0003 % Wrapper class of the libsvm library (libsvm) .mex files must be added to
+0004 % your matlab path before using this class
+0005 classdef LIBSVM < eegtoolkit.classification.ClassifierBase
+0006     
+0007     properties (Constant)
+0008         KERNEL_LINEAR = 0; 
+0009 %         KERNEL_POLYNOMIAL = 1; not supported yet
+0010         KERNEL_RBF = 2;
+0011 %         KERNEL_SIGMOID = 3; not supported yet
+0012     end
+0013     properties
+0014         kernel; % The svm kernel
+0015         cost; % The cost parameter
+0016         gamma; % The gamma parameter (used only with rbf kernel)
+0017         models; % The trained models
+0018     end
+0019     
+0020     methods (Access = public)
+0021         function LSVM = LIBSVM(instanceSet)
+0022             if nargin > 0
+0023                 LSVM.kernel = LSVM.KERNEL_LINEAR;
+0024                 LSVM.cost = 1.0;
+0025                 LSVM.instanceSet = instanceSet;
+0026                 LSVM.gamma = 1/instanceSet.getNumFeatures;
+0027             else
+0028                 LSVM.kernel = LSVM.KERNEL_LINEAR;
+0029                 LSVM.cost = 1.0;
+0030                 LSVM.gamma = 1;
+0031             end
+0032         end
+0033         
+0034         function LSVM = build(LSVM)
+0035             % Builds the classification models
+0036             LSVM.reset;
+0037             numLabels = LSVM.instanceSet.getNumLabels;
+0038             uniqueLabels = unique(LSVM.instanceSet.getLabels);
+0039             for i=1:numLabels
+0040                 currentLabel = uniqueLabels(i);
+0041                 labels = zeros(LSVM.instanceSet.getNumInstances,1)-1;
+0042                 labels(LSVM.instanceSet.getInstanceIndicesForLabel(currentLabel)) = 1;
+0043                 instances = sparse(LSVM.instanceSet.getInstances);
+0044                 if LSVM.kernel == LSVM.KERNEL_LINEAR;
+0045                     %store the models in an instance variable
+0046                     LSVM.models{i} = svmtrain(labels, instances, sprintf('-t %d -c %f  -q', LSVM.kernel, LSVM.cost));
+0047                 elseif LSVM.kernel == LSVM.KERNEL_RBF;
+0048                     LSVM.models{i} = svmtrain(labels, instances, sprintf('-t %d -c %f -g %f  -q', LSVM.kernel, LSVM.cost, LSVM.gamma));
+0049                 else
+0050                     error('invalid kernel parameter');
+0051                 end
+0052             end
+0053         end
+0054         
+0055         function [output, probabilities, ranking] = classifyInstance(LSVM,instance)
+0056             %input = instance matrix rows = instances, cols = attributes
+0057             %output = predicted class
+0058             %probabilities = probability for predicted class
+0059             %ranking = propabilities for all classes (e.g. to use with mAP)
+0060             
+0061             %TODO:should print an error if 'build' has not been called
+0062             numModels = length(LSVM.models);
+0063             [numinstance, ~] = size(instance);
+0064             scores = zeros(numModels,numinstance);
+0065             for i=1:numModels
+0066                 %predict using the stored models
+0067                 [~, ~, t] = svmpredict(eye(numinstance,1),instance, LSVM.models{i},' -q');
+0068                 %store probability for each class
+0069                 scores(i,:) = t(:,1);
+0070             end
+0071             output = zeros(numinstance,1);
+0072             probabilities = zeros(numinstance,1);
+0073             ranking = scores';
+0074             for i=1:numinstance
+0075                 %select the class with the highest probability
+0076                 [prob, idx] = max(scores(:,i));
+0077                 uniqueLabels = unique(LSVM.instanceSet.getLabels);
+0078                 %output the label with highest probability
+0079                 output(i,1) = uniqueLabels(idx);
+0080                 %return the probability for the output label
+0081                 probabilities(i,1) = prob;
+0082             end
+0083         end
+0084         
+0085         function LSVM = reset(LSVM)
+0086             % 'Resets' the classifier.
+0087             LSVM.models = {};
+0088         end
+0089         
+0090         function configInfo = getConfigInfo(LSVM)
+0091             % Prints the parameters of the classifier
+0092             switch LSVM.kernel
+0093                 case LSVM.KERNEL_LINEAR
+0094                     configInfo = sprintf('LIBSVM\tkernel:linear\tcost:%d', LSVM.cost);
+0095                 case LSVM.KERNEL_RBF
+0096                     configInfo = sprintf('LIBSVM\tkernel:rbf\tcost:%d\tgamma:%d', LSVM.cost, LSVM.gamma);
+0097                 otherwise 
+0098                     configInfo = 'Error in configuration (only linear and rbf kernels supported for now)';
+0099             end
+0100         end
+0101         
+0102         function newLSVM = copy(LSVM)
+0103             newLSVM = eegtoolkit.classification.LIBSVM;
+0104             newLSVM.kernel = LSVM.kernel;
+0105             newLSVM.cost = LSVM.cost;
+0106             newLSVM.gamma = LSVM.gamma;
+0107         end
+0108         
+0109                         
+0110         function time = getTime(LSVM)
+0111             time = 0;
+0112         end
+0113     end
+0114 end
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVM/LIBSVM.m b/doc/+eegtoolkit/+classification/@LIBSVM/LIBSVM.m new file mode 100644 index 0000000..1db8ec3 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LIBSVM/LIBSVM.m @@ -0,0 +1,114 @@ + +% LIBSVMCLASSIFIER class +% Wrapper class of the libsvm library (libsvm) .mex files must be added to +% your matlab path before using this class +classdef LIBSVM < eegtoolkit.classification.ClassifierBase + + properties (Constant) + KERNEL_LINEAR = 0; +% KERNEL_POLYNOMIAL = 1; not supported yet + KERNEL_RBF = 2; +% KERNEL_SIGMOID = 3; not supported yet + end + properties + kernel; % The svm kernel + cost; % The cost parameter + gamma; % The gamma parameter (used only with rbf kernel) + models; % The trained models + end + + methods (Access = public) + function LSVM = LIBSVM(instanceSet) + if nargin > 0 + LSVM.kernel = LSVM.KERNEL_LINEAR; + LSVM.cost = 1.0; + LSVM.instanceSet = instanceSet; + LSVM.gamma = 1/instanceSet.getNumFeatures; + else + LSVM.kernel = LSVM.KERNEL_LINEAR; + LSVM.cost = 1.0; + LSVM.gamma = 1; + end + end + + function LSVM = build(LSVM) + % Builds the classification models + LSVM.reset; + numLabels = LSVM.instanceSet.getNumLabels; + uniqueLabels = unique(LSVM.instanceSet.getLabels); + for i=1:numLabels + currentLabel = uniqueLabels(i); + labels = zeros(LSVM.instanceSet.getNumInstances,1)-1; + labels(LSVM.instanceSet.getInstanceIndicesForLabel(currentLabel)) = 1; + instances = sparse(LSVM.instanceSet.getInstances); + if LSVM.kernel == LSVM.KERNEL_LINEAR; + %store the models in an instance variable + LSVM.models{i} = svmtrain(labels, instances, sprintf('-t %d -c %f -q', LSVM.kernel, LSVM.cost)); + elseif LSVM.kernel == LSVM.KERNEL_RBF; + LSVM.models{i} = svmtrain(labels, instances, sprintf('-t %d -c %f -g %f -q', LSVM.kernel, LSVM.cost, LSVM.gamma)); + else + error('invalid kernel parameter'); + end + end + end + + function [output, probabilities, ranking] = classifyInstance(LSVM,instance) + %input = instance matrix rows = instances, cols = attributes + %output = predicted class + %probabilities = probability for predicted class + %ranking = propabilities for all classes (e.g. to use with mAP) + + %TODO:should print an error if 'build' has not been called + numModels = length(LSVM.models); + [numinstance, ~] = size(instance); + scores = zeros(numModels,numinstance); + for i=1:numModels + %predict using the stored models + [~, ~, t] = svmpredict(eye(numinstance,1),instance, LSVM.models{i},' -q'); + %store probability for each class + scores(i,:) = t(:,1); + end + output = zeros(numinstance,1); + probabilities = zeros(numinstance,1); + ranking = scores'; + for i=1:numinstance + %select the class with the highest probability + [prob, idx] = max(scores(:,i)); + uniqueLabels = unique(LSVM.instanceSet.getLabels); + %output the label with highest probability + output(i,1) = uniqueLabels(idx); + %return the probability for the output label + probabilities(i,1) = prob; + end + end + + function LSVM = reset(LSVM) + % 'Resets' the classifier. + LSVM.models = {}; + end + + function configInfo = getConfigInfo(LSVM) + % Prints the parameters of the classifier + switch LSVM.kernel + case LSVM.KERNEL_LINEAR + configInfo = sprintf('LIBSVM\tkernel:linear\tcost:%d', LSVM.cost); + case LSVM.KERNEL_RBF + configInfo = sprintf('LIBSVM\tkernel:rbf\tcost:%d\tgamma:%d', LSVM.cost, LSVM.gamma); + otherwise + configInfo = 'Error in configuration (only linear and rbf kernels supported for now)'; + end + end + + function newLSVM = copy(LSVM) + newLSVM = eegtoolkit.classification.LIBSVM; + newLSVM.kernel = LSVM.kernel; + newLSVM.cost = LSVM.cost; + newLSVM.gamma = LSVM.gamma; + end + + + function time = getTime(LSVM) + time = 0; + end + end +end \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVM/graph.dot b/doc/+eegtoolkit/+classification/@LIBSVM/graph.dot new file mode 100644 index 0000000..94bc240 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LIBSVM/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + LIBSVM -> LIBSVM; + + LIBSVM [URL="LIBSVM.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVM/graph.html b/doc/+eegtoolkit/+classification/@LIBSVM/graph.html new file mode 100644 index 0000000..07b031c --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LIBSVM/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@LIBSVM + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@LIBSVM >
+

Dependency Graph for ./+eegtoolkit/+classification/@LIBSVM

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@LIBSVM + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVM/graph.map b/doc/+eegtoolkit/+classification/@LIBSVM/graph.map new file mode 100644 index 0000000..01d58f1 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LIBSVM/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@LIBSVM/graph.png b/doc/+eegtoolkit/+classification/@LIBSVM/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..bc3bc603080cf9f87203819980ad6772359cc168 GIT binary patch literal 4367 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+classification/@LIBSVM/index.html b/doc/+eegtoolkit/+classification/@LIBSVM/index.html new file mode 100644 index 0000000..f419c46 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LIBSVM/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+classification/@LIBSVM + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@LIBSVM >
+ +

Index for ./+eegtoolkit/+classification/@LIBSVM

+ +

Matlab files in this directory:

+ +
 LIBSVMLIBSVMCLASSIFIER class
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVMFast/LIBSVMFast.html b/doc/+eegtoolkit/+classification/@LIBSVMFast/LIBSVMFast.html new file mode 100644 index 0000000..abda037 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LIBSVMFast/LIBSVMFast.html @@ -0,0 +1,174 @@ + + + + Description of LIBSVMFast + + + + + + + + + + + + + +

LIBSVMFast +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

LIBSVMFast.m

+

SOURCE CODE ^

+
0001 classdef LIBSVMFast < eegtoolkit.classification.ClassifierBase
+0002     
+0003     properties (Constant)
+0004 
+0005     end
+0006     properties
+0007         kernel;
+0008         cost;
+0009         gamma;
+0010         models;
+0011         Ktrain;
+0012         Ktest;
+0013         maxlag;
+0014         scaleopt;
+0015         predictTotalTime;
+0016         predictCount;
+0017     end
+0018     
+0019     methods (Access = public)
+0020         function LSVM = LIBSVMFast (instanceSet,kernel,cost,gamma,maxlag,scaleopt)
+0021             %set default parameters
+0022             LSVM.predictTotalTime = 0;
+0023             LSVM.predictCount = 0;
+0024             LSVM.kernel = 'linear';
+0025             LSVM.cost = 1.0;
+0026             LSVM.gamma = 0.01;
+0027             LSVM.maxlag = 150;
+0028             LSVM.scaleopt = 'coeff';
+0029             if nargin > 0
+0030                 LSVM.instanceSet = instanceSet;
+0031                 LSVM.gamma = 1/instanceSet.getNumFeatures;
+0032             end
+0033             if nargin > 1
+0034                 LSVM.kernel = kernel;
+0035             end
+0036             if nargin > 2
+0037                 LSVM.cost = cost;
+0038             end
+0039             if nargin > 3
+0040                 LSVM.gamma = gamma;
+0041             end
+0042             if nargin > 4
+0043                 LSVM.maxlag = maxlag;
+0044             end
+0045             if nargin > 5
+0046                 LSVM.scaleopt = scaleopt;
+0047             end
+0048         end
+0049         
+0050         function LSVM = build(LSVM)
+0051             %clear all from previous calls to "build"
+0052             LSVM.reset;
+0053             numLabels = LSVM.instanceSet.getNumLabels;
+0054             uniqueLabels = unique(LSVM.instanceSet.getLabels);
+0055             for i=1:numLabels
+0056                 currentLabel = uniqueLabels(i);
+0057                 labels = zeros(LSVM.instanceSet.getNumInstances,1)-1;
+0058                 labels(LSVM.instanceSet.getInstanceIndicesForLabel(currentLabel)) = 1;
+0059                 LSVM.models{i} = svmtrain(labels, [(1:size(LSVM.Ktrain,1))', ...
+0060                     LSVM.Ktrain+eye(size(LSVM.Ktrain,1))*realmin], ...
+0061                     sprintf(' -t 4 -c %f -b 1 -q', LSVM.cost));
+0062             end
+0063         end
+0064         
+0065         function [output, probabilities, ranking] = classifyInstance(LSVM)
+0066             %input = instance matrix rows = instances, cols = attributes
+0067             %output = predicted class
+0068             %probabilities = probability for predicted class
+0069             %ranking = propabilities for all classes (e.g. to use with mAP)
+0070             
+0071             %TODO:should print an error if 'build' has not been called
+0072             numModels = length(LSVM.models);
+0073             [numinstance, ~] = size(LSVM.Ktest);
+0074             scores = zeros(numModels,numinstance);
+0075             for i=1:numModels
+0076                 %predict using the stored models
+0077                 tic
+0078                 [~, ~, t] = svmpredict(eye(numinstance,1),...
+0079                     [(1:numinstance)', LSVM.Ktest], LSVM.models{i},'-b 1 -q');
+0080                 LSVM.predictTotalTime = LSVM.predictTotalTime + toc;
+0081                 LSVM.predictCount = LSVM.predictCount + numinstance;
+0082                 %svmpredict(labels(~idx), [(1:sum(~idx))', K(~idx,idx)], model);
+0083                 %store probability for each class
+0084                 scores(i,:) = t(:,1);
+0085             end
+0086             output = zeros(numinstance,1);
+0087             probabilities = zeros(numinstance,1);
+0088             %we need these for ranking metrics (e.g. mAP)
+0089             ranking = scores;
+0090             for i=1:numinstance
+0091                 %select the class with the highest probability
+0092                 [prob, idx] = max(scores(:,i));
+0093                 uniqueLabels = unique(LSVM.instanceSet.getLabels);
+0094                 %output the label with highest probability
+0095                 output(i,1) = uniqueLabels(idx);
+0096                 %return the probability for the output label
+0097                 probabilities(i,1) = prob;
+0098             end
+0099         end
+0100         
+0101         function LSVM = reset(LSVM)
+0102             %delete all stored models
+0103             LSVM.models = {};
+0104         end
+0105         
+0106         function configInfo = getConfigInfo(LSVM)
+0107             switch LSVM.kernel
+0108                 case {'linear','spearman','correlation','cosine'}
+0109                     configInfo = sprintf('LIBSVMFast\tkernel:%s\tcost:%d', LSVM.kernel, LSVM.cost);
+0110                 case 'xcorr'
+0111                     configInfo = sprintf('LIBSVMFast\tkernel:%s\tcost:%d\tgamma:%d\tmaxlag:%d\tscaleopt:%s', LSVM.kernel, LSVM.cost, LSVM.maxlag,LSVM.scaleopt);
+0112                 otherwise
+0113                     configInfo = sprintf('LIBSVMFast\tkernel:%s\tcost:%d\tgamma:%d', LSVM.kernel, LSVM.cost, LSVM.gamma);
+0114 %                 otherwise
+0115 %                     configInfo = 'Error in configuration (only linear and rbf kernels supported for now)';
+0116             end
+0117         end
+0118         
+0119         function time = getTime(LSVM)
+0120             time = LSVM.predictTotalTime/LSVM.predictCount;
+0121         end
+0122     end
+0123 end
+0124
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVMFast/LIBSVMFast.m b/doc/+eegtoolkit/+classification/@LIBSVMFast/LIBSVMFast.m new file mode 100644 index 0000000..429d32f --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LIBSVMFast/LIBSVMFast.m @@ -0,0 +1,124 @@ +classdef LIBSVMFast < eegtoolkit.classification.ClassifierBase + + properties (Constant) + + end + properties + kernel; + cost; + gamma; + models; + Ktrain; + Ktest; + maxlag; + scaleopt; + predictTotalTime; + predictCount; + end + + methods (Access = public) + function LSVM = LIBSVMFast (instanceSet,kernel,cost,gamma,maxlag,scaleopt) + %set default parameters + LSVM.predictTotalTime = 0; + LSVM.predictCount = 0; + LSVM.kernel = 'linear'; + LSVM.cost = 1.0; + LSVM.gamma = 0.01; + LSVM.maxlag = 150; + LSVM.scaleopt = 'coeff'; + if nargin > 0 + LSVM.instanceSet = instanceSet; + LSVM.gamma = 1/instanceSet.getNumFeatures; + end + if nargin > 1 + LSVM.kernel = kernel; + end + if nargin > 2 + LSVM.cost = cost; + end + if nargin > 3 + LSVM.gamma = gamma; + end + if nargin > 4 + LSVM.maxlag = maxlag; + end + if nargin > 5 + LSVM.scaleopt = scaleopt; + end + end + + function LSVM = build(LSVM) + %clear all from previous calls to "build" + LSVM.reset; + numLabels = LSVM.instanceSet.getNumLabels; + uniqueLabels = unique(LSVM.instanceSet.getLabels); + for i=1:numLabels + currentLabel = uniqueLabels(i); + labels = zeros(LSVM.instanceSet.getNumInstances,1)-1; + labels(LSVM.instanceSet.getInstanceIndicesForLabel(currentLabel)) = 1; + LSVM.models{i} = svmtrain(labels, [(1:size(LSVM.Ktrain,1))', ... + LSVM.Ktrain+eye(size(LSVM.Ktrain,1))*realmin], ... + sprintf(' -t 4 -c %f -b 1 -q', LSVM.cost)); + end + end + + function [output, probabilities, ranking] = classifyInstance(LSVM) + %input = instance matrix rows = instances, cols = attributes + %output = predicted class + %probabilities = probability for predicted class + %ranking = propabilities for all classes (e.g. to use with mAP) + + %TODO:should print an error if 'build' has not been called + numModels = length(LSVM.models); + [numinstance, ~] = size(LSVM.Ktest); + scores = zeros(numModels,numinstance); + for i=1:numModels + %predict using the stored models + tic + [~, ~, t] = svmpredict(eye(numinstance,1),... + [(1:numinstance)', LSVM.Ktest], LSVM.models{i},'-b 1 -q'); + LSVM.predictTotalTime = LSVM.predictTotalTime + toc; + LSVM.predictCount = LSVM.predictCount + numinstance; + %svmpredict(labels(~idx), [(1:sum(~idx))', K(~idx,idx)], model); + %store probability for each class + scores(i,:) = t(:,1); + end + output = zeros(numinstance,1); + probabilities = zeros(numinstance,1); + %we need these for ranking metrics (e.g. mAP) + ranking = scores; + for i=1:numinstance + %select the class with the highest probability + [prob, idx] = max(scores(:,i)); + uniqueLabels = unique(LSVM.instanceSet.getLabels); + %output the label with highest probability + output(i,1) = uniqueLabels(idx); + %return the probability for the output label + probabilities(i,1) = prob; + end + end + + function LSVM = reset(LSVM) + %delete all stored models + LSVM.models = {}; + end + + function configInfo = getConfigInfo(LSVM) + switch LSVM.kernel + case {'linear','spearman','correlation','cosine'} + configInfo = sprintf('LIBSVMFast\tkernel:%s\tcost:%d', LSVM.kernel, LSVM.cost); + case 'xcorr' + configInfo = sprintf('LIBSVMFast\tkernel:%s\tcost:%d\tgamma:%d\tmaxlag:%d\tscaleopt:%s', LSVM.kernel, LSVM.cost, LSVM.maxlag,LSVM.scaleopt); + otherwise + configInfo = sprintf('LIBSVMFast\tkernel:%s\tcost:%d\tgamma:%d', LSVM.kernel, LSVM.cost, LSVM.gamma); +% otherwise +% configInfo = 'Error in configuration (only linear and rbf kernels supported for now)'; + end + end + + function time = getTime(LSVM) + time = LSVM.predictTotalTime/LSVM.predictCount; + end + end +end + diff --git a/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.dot b/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.dot new file mode 100644 index 0000000..d41268e --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + LIBSVMFast -> LIBSVMFast; + + LIBSVMFast [URL="LIBSVMFast.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.html b/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.html new file mode 100644 index 0000000..804d0a1 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@LIBSVMFast + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@LIBSVMFast >
+

Dependency Graph for ./+eegtoolkit/+classification/@LIBSVMFast

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@LIBSVMFast + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.map b/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.map new file mode 100644 index 0000000..e20b900 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.png b/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..173a524accb0b2eefe00c8202bf5c78f55d1f309 GIT binary patch literal 5360 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 hrW=Oh5UwrXK=R$iG`N1A5uk+$DLsEFSNhB>_ + + + Index for Directory ./+eegtoolkit/+classification/@LIBSVMFast + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@LIBSVMFast >
+ +

Index for ./+eegtoolkit/+classification/@LIBSVMFast

+ +

Matlab files in this directory:

+ +
 LIBSVMFast
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLDA/MLDA.html b/doc/+eegtoolkit/+classification/@MLDA/MLDA.html new file mode 100644 index 0000000..5365bc8 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLDA/MLDA.html @@ -0,0 +1,183 @@ + + + + Description of MLDA + + + + + + + + + + + + + +

MLDA +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

MLDA.m

+

SOURCE CODE ^

+
0001 classdef MLDA < eegtoolkit.classification.ClassifierBase
+0002     
+0003     properties (Constant)
+0004 
+0005     end
+0006     
+0007     properties
+0008        DiscrimType; % 'linear' (default) | 'quadratic' | 'diagLinear' | 'diagQuadratic' | 'pseudoLinear' | 'pseudoQuadratic'
+0009        Delta % 0 (default) | nonnegative scalar value that acts as a linear coefficient threshold. Delta must be 0 for quadratic discriminant models.
+0010        Gamma % scalar value in the range [0,1]. Parameter for regularizing the correlation matrix of predictors.
+0011        FillCoeffs % on (default) Coeffs property flag, specified as the comma-separated pair consisting of 'FillCoeffs' and 'on' or 'off
+0012        ScoreTransform % 'none' (default). Score transform function. Check http://www.mathworks.com/help/stats/fitcdiscr.html
+0013        Prior % 'empirical' (default) or 'uniform'.  Prior probabilities for each class.
+0014        models;
+0015        totalTime;
+0016        totalCount;
+0017     end
+0018     
+0019     methods (Access = public)
+0020         function MLDA = MLDA(instanceSet, discrimType, delta, gamma, fillCoeffs, scoreTransform,prior)
+0021             %set default parameters
+0022             if nargin > 0
+0023                 MLDA.instanceSet = instanceSet;
+0024             end
+0025             if nargin > 1
+0026                 MLDA.DiscrimType = discrimType;
+0027             end
+0028             if nargin > 2 
+0029                 MLDA.Delta=delta;
+0030             end
+0031             if nargin > 3
+0032                 MLDA.Gamma = gamma;
+0033             end
+0034             if nargin > 4
+0035                 MLDA.FillCoeffs = fillCoeffs;
+0036             end
+0037             if nargin > 5
+0038                 MLDA.ScoreTransform = scoreTransform;
+0039             end
+0040             if nargin > 6
+0041                 MLDA.Prior = prior;
+0042             end
+0043         end
+0044         
+0045         function MLDA = build(MLDA)
+0046             %clear all from previous calls to "build"
+0047             MLDA.reset;
+0048             numLabels = MLDA.instanceSet.getNumLabels;
+0049             uniqueLabels = unique(MLDA.instanceSet.getLabels);
+0050            
+0051             % ---- Multi-Class ----- %
+0052             instances=MLDA.instanceSet.instances;
+0053             labels=MLDA.instanceSet.labels;
+0054             
+0055             %LDA.models{1}=fitcecoc(instances,labels,'Coding','ternarycomplete');
+0056             MLDA.models{1} = fitcdiscr(instances,labels,'DiscrimType',MLDA.DiscrimType,'Delta',MLDA.Delta,'Gamma',MLDA.Gamma,'FillCoeffs',MLDA.FillCoeffs,'ScoreTransform',MLDA.ScoreTransform, 'Prior',MLDA.Prior);
+0057             
+0058             % ---- One (vs) All ----- %
+0059 %             for i=1:numLabels
+0060 %                 currentLabel = uniqueLabels(i);
+0061 %                 labels = zeros(LDA.instanceSet.getNumInstances,1)-1;
+0062 %                 labels(LDA.instanceSet.getInstanceIndicesForLabel(currentLabel)) = 1;
+0063 %                 instances = sparse(LDA.instanceSet.getInstances);
+0064 %                 LDA.models{i} = libsvmtrain(labels,instances, '-t 0 -c 1 -b 1');
+0065 %                 if LDA.kernel == LDA.KERNEL_LINEAR;
+0066 %                    %store the models in an instance variable
+0067 %                    LDA.models{i} = libsvmtrain(labels, instances, sprintf('-t %d -c %f -b 1 -q', LDA.kernel, LDA.cost));
+0068 %                 elseif LDA.kernel == LDA.KERNEL_RBF;
+0069 %                    LDA.models{i} = libsvmtrain(labels, instances, sprintf('-t %d -c %f -g %f -b 1 -q', LDA.kernel, LDA.cost, LDA.gamma));
+0070 %                 else
+0071 %                    error('invalid kernel parameter');
+0072 %                 end
+0073 %             end
+0074         end
+0075         
+0076         function [output, probabilities, ranking] = classifyInstance(MLDA,instance)
+0077             %input = instance matrix rows = instances, cols = attributes
+0078             %output = predicted class
+0079             %probabilities = probability for predicted class
+0080             %ranking = propabilities for all classes (e.g. to use with mAP)
+0081             
+0082             
+0083             %TODO:should print an error if 'build' has not been called
+0084             numModels = length(MLDA.models);
+0085             [numinstance, ~] = size(instance);
+0086             scores = zeros(numModels,numinstance);
+0087              
+0088             % ---- Multi-class ----- %
+0089             tic
+0090             [label,scores,cost] = predict(MLDA.models{1},instance); 
+0091             MLDA.totalTime = MLDA.totalTime + toc;
+0092             MLDA.totalCount = MLDA.totalCount  + numinstance;
+0093             % ---- One (vs) All -----%
+0094 %              for i=1:numModels
+0095 %                  %predict using the stored models
+0096 %                  [label,score,cost] = predict(LDA.models{i},instance);
+0097 %                  %libsvmpredict(eye(numinstance,1),instance, LSVM.models{i},'-b 1 -q');
+0098 %                 %store probability for each class
+0099 %                 scores(i,:) = score(:,1);
+0100 %             end
+0101 
+0102              output = zeros(numinstance,1);
+0103              probabilities = zeros(numinstance,1);
+0104              %we need these for ranking metrics (e.g. mAP)
+0105              ranking = scores;
+0106              for i=1:numinstance
+0107                  %select the class with the highest probability
+0108                  [prob, idx] = max(scores(i,:));
+0109                  uniqueLabels = unique(MLDA.instanceSet.getLabels);
+0110                  %output the label with highest probability
+0111                  output(i,1) = uniqueLabels(idx);
+0112                  %return the probability for the output label
+0113                  probabilities(i,1) = prob;
+0114              end
+0115         end
+0116         
+0117         function MLDA = reset(MLDA)
+0118             %delete all stored models
+0119             MLDA.models = {};
+0120         end
+0121         
+0122         function configInfo = getConfigInfo(MLDA)
+0123             configInfo = sprintf('MLDA\tdiscrimtype:%s\tdelta:%f\tgamma:%f\tfillcoeffs:%d\tscoretransform:%s\tprior:%s',MLDA.DiscrimType, MLDA.Delta, MLDA.Gamma, MLDA.FillCoeffs, MLDA.ScoreTransform, MLDA.Prior);
+0124         end
+0125         
+0126                         
+0127         function time = getTime(MLDA)
+0128             time = MLDA.totalTime/MLDA.totalCount;
+0129         end
+0130                 
+0131     end
+0132 end
+0133
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLDA/MLDA.m b/doc/+eegtoolkit/+classification/@MLDA/MLDA.m new file mode 100644 index 0000000..92261f4 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLDA/MLDA.m @@ -0,0 +1,133 @@ +classdef MLDA < eegtoolkit.classification.ClassifierBase + + properties (Constant) + + end + + properties + DiscrimType; % 'linear' (default) | 'quadratic' | 'diagLinear' | 'diagQuadratic' | 'pseudoLinear' | 'pseudoQuadratic' + Delta % 0 (default) | nonnegative scalar value that acts as a linear coefficient threshold. Delta must be 0 for quadratic discriminant models. + Gamma % scalar value in the range [0,1]. Parameter for regularizing the correlation matrix of predictors. + FillCoeffs % on (default) Coeffs property flag, specified as the comma-separated pair consisting of 'FillCoeffs' and 'on' or 'off + ScoreTransform % 'none' (default). Score transform function. Check http://www.mathworks.com/help/stats/fitcdiscr.html + Prior % 'empirical' (default) or 'uniform'. Prior probabilities for each class. + models; + totalTime; + totalCount; + end + + methods (Access = public) + function MLDA = MLDA(instanceSet, discrimType, delta, gamma, fillCoeffs, scoreTransform,prior) + %set default parameters + if nargin > 0 + MLDA.instanceSet = instanceSet; + end + if nargin > 1 + MLDA.DiscrimType = discrimType; + end + if nargin > 2 + MLDA.Delta=delta; + end + if nargin > 3 + MLDA.Gamma = gamma; + end + if nargin > 4 + MLDA.FillCoeffs = fillCoeffs; + end + if nargin > 5 + MLDA.ScoreTransform = scoreTransform; + end + if nargin > 6 + MLDA.Prior = prior; + end + end + + function MLDA = build(MLDA) + %clear all from previous calls to "build" + MLDA.reset; + numLabels = MLDA.instanceSet.getNumLabels; + uniqueLabels = unique(MLDA.instanceSet.getLabels); + + % ---- Multi-Class ----- % + instances=MLDA.instanceSet.instances; + labels=MLDA.instanceSet.labels; + + %LDA.models{1}=fitcecoc(instances,labels,'Coding','ternarycomplete'); + MLDA.models{1} = fitcdiscr(instances,labels,'DiscrimType',MLDA.DiscrimType,'Delta',MLDA.Delta,'Gamma',MLDA.Gamma,'FillCoeffs',MLDA.FillCoeffs,'ScoreTransform',MLDA.ScoreTransform, 'Prior',MLDA.Prior); + + % ---- One (vs) All ----- % +% for i=1:numLabels +% currentLabel = uniqueLabels(i); +% labels = zeros(LDA.instanceSet.getNumInstances,1)-1; +% labels(LDA.instanceSet.getInstanceIndicesForLabel(currentLabel)) = 1; +% instances = sparse(LDA.instanceSet.getInstances); +% LDA.models{i} = libsvmtrain(labels,instances, '-t 0 -c 1 -b 1'); +% if LDA.kernel == LDA.KERNEL_LINEAR; +% %store the models in an instance variable +% LDA.models{i} = libsvmtrain(labels, instances, sprintf('-t %d -c %f -b 1 -q', LDA.kernel, LDA.cost)); +% elseif LDA.kernel == LDA.KERNEL_RBF; +% LDA.models{i} = libsvmtrain(labels, instances, sprintf('-t %d -c %f -g %f -b 1 -q', LDA.kernel, LDA.cost, LDA.gamma)); +% else +% error('invalid kernel parameter'); +% end +% end + end + + function [output, probabilities, ranking] = classifyInstance(MLDA,instance) + %input = instance matrix rows = instances, cols = attributes + %output = predicted class + %probabilities = probability for predicted class + %ranking = propabilities for all classes (e.g. to use with mAP) + + + %TODO:should print an error if 'build' has not been called + numModels = length(MLDA.models); + [numinstance, ~] = size(instance); + scores = zeros(numModels,numinstance); + + % ---- Multi-class ----- % + tic + [label,scores,cost] = predict(MLDA.models{1},instance); + MLDA.totalTime = MLDA.totalTime + toc; + MLDA.totalCount = MLDA.totalCount + numinstance; + % ---- One (vs) All -----% +% for i=1:numModels +% %predict using the stored models +% [label,score,cost] = predict(LDA.models{i},instance); +% %libsvmpredict(eye(numinstance,1),instance, LSVM.models{i},'-b 1 -q'); +% %store probability for each class +% scores(i,:) = score(:,1); +% end + + output = zeros(numinstance,1); + probabilities = zeros(numinstance,1); + %we need these for ranking metrics (e.g. mAP) + ranking = scores; + for i=1:numinstance + %select the class with the highest probability + [prob, idx] = max(scores(i,:)); + uniqueLabels = unique(MLDA.instanceSet.getLabels); + %output the label with highest probability + output(i,1) = uniqueLabels(idx); + %return the probability for the output label + probabilities(i,1) = prob; + end + end + + function MLDA = reset(MLDA) + %delete all stored models + MLDA.models = {}; + end + + function configInfo = getConfigInfo(MLDA) + configInfo = sprintf('MLDA\tdiscrimtype:%s\tdelta:%f\tgamma:%f\tfillcoeffs:%d\tscoretransform:%s\tprior:%s',MLDA.DiscrimType, MLDA.Delta, MLDA.Gamma, MLDA.FillCoeffs, MLDA.ScoreTransform, MLDA.Prior); + end + + + function time = getTime(MLDA) + time = MLDA.totalTime/MLDA.totalCount; + end + + end +end + diff --git a/doc/+eegtoolkit/+classification/@MLDA/graph.dot b/doc/+eegtoolkit/+classification/@MLDA/graph.dot new file mode 100644 index 0000000..4680b13 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLDA/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + MLDA -> MLDA; + + MLDA [URL="MLDA.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLDA/graph.html b/doc/+eegtoolkit/+classification/@MLDA/graph.html new file mode 100644 index 0000000..90ac050 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLDA/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@MLDA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@MLDA >
+

Dependency Graph for ./+eegtoolkit/+classification/@MLDA

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@MLDA + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLDA/graph.map b/doc/+eegtoolkit/+classification/@MLDA/graph.map new file mode 100644 index 0000000..42801a4 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLDA/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@MLDA/graph.png b/doc/+eegtoolkit/+classification/@MLDA/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..77d0c31ab63ba997a5151bcb0e3f626877bed97b GIT binary patch literal 3961 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 E4;eM2LjV8( literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+classification/@MLDA/index.html b/doc/+eegtoolkit/+classification/@MLDA/index.html new file mode 100644 index 0000000..fe5ce3b --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLDA/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+classification/@MLDA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@MLDA >
+ +

Index for ./+eegtoolkit/+classification/@MLDA

+ +

Matlab files in this directory:

+ +
 MLDA
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLR/MLR.html b/doc/+eegtoolkit/+classification/@MLR/MLR.html new file mode 100644 index 0000000..8a9a4c0 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLR/MLR.html @@ -0,0 +1,165 @@ + + + + Description of MLR + + + + + + + + + + + + + +

MLR +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

MLR.m

+

SOURCE CODE ^

+
0001 classdef MLR < eegtoolkit.classification.ClassifierBase
+0002     
+0003     properties (Constant)
+0004         
+0005     end
+0006     
+0007     properties
+0008         W_mlr;
+0009         PCA_mat;
+0010         trainFeat;
+0011     end
+0012     
+0013     methods (Access = public)
+0014         function MLR = MLR(instanceSet)
+0015             if nargin > 0
+0016                 MLR.instanceSet = instanceSet;
+0017             end
+0018             
+0019         end
+0020         
+0021         function MLR = build(MLR)
+0022             MLR.reset();
+0023             data = MLR.instanceSet.getInstances;
+0024             data = data';
+0025             labels = MLR.instanceSet.getLabels;
+0026             numTrials = length(labels);
+0027             train_Y = zeros(length(unique(labels)),numTrials);
+0028             for i = 1 : numTrials
+0029                 train_Y(labels(i),i) = 1;
+0030             end
+0031             [Ydim,Num]=size(train_Y);
+0032             PCA_W=MLR.pca_func(data);
+0033             train_Data=PCA_W'*data;
+0034             train_Data=[ones(1,numTrials);train_Data];
+0035             MLR.W_mlr = MLR.MultiLR(train_Data,train_Y);%inv(train_Data*train_Data')*train_Data*train_Y';%(train_Data'*train_Data)\train_Data'*train_Y;%MultiLR(train_Data,train_Y);
+0036             MLR.PCA_mat=PCA_W;
+0037             mtrainFeat=MLR.W_mlr'*train_Data;
+0038             MLR.trainFeat=mtrainFeat;
+0039         end
+0040         
+0041         function [output, probabilities, ranking] = classifyInstance(MLR,instance)
+0042             
+0043             N = size(instance,1);
+0044             instance = instance';
+0045             test_Data=MLR.PCA_mat'*instance;
+0046             test_Data=[ones(1,N);test_Data];
+0047             testFeat=MLR.W_mlr'*test_Data;
+0048             output=knnclassify(testFeat',MLR.trainFeat',MLR.instanceSet.getLabels,5,'euclidean');
+0049             probabilities=zeros(N,1);
+0050             ranking=zeros(N,1);
+0051             
+0052         end
+0053         
+0054         function MLR = reset(MLR)
+0055             %delete all stored models
+0056             MLR.W_mlr=[];
+0057             MLR.PCA_mat=[];
+0058             MLR.trainFeat=[];
+0059         end
+0060         
+0061         function configInfo = getConfigInfo(MLR)
+0062             configInfo = sprintf('MLR');
+0063         end
+0064         
+0065         
+0066         function time = getTime(MLR)
+0067             time = 0;
+0068         end
+0069         
+0070     end
+0071     
+0072     methods (Access = private)
+0073         function Proj_W=pca_func(MLR,data)
+0074             Proj_W=[];
+0075             meanData=mean(data,2);
+0076             data=data-repmat(meanData,1,size(data,2));
+0077             % stdVar=std(data')';
+0078             % staData=(data-repmat(meanData,1,size(data,2)))./repmat(stdVar,1,size(data,2));
+0079             % data=staData;
+0080             [V,S]=eig(data'*data);
+0081             [sorted_diagS,sorted_rank]=sort(diag(S),'descend');
+0082             sorted_S=diag(sorted_diagS);
+0083             V=V(:,sorted_rank);
+0084             r=rank(sorted_S);
+0085             S1=sorted_S(1:r,1:r);
+0086             V1=V(:,1:r);
+0087             U=data*V1*S1^(-0.5);
+0088             %[sorted_S,sorted_rank]=sort(diag(S),'descend');
+0089             All_energy=sum(diag(S1));
+0090             sorted_energy=diag(S1);
+0091             for j=1:r
+0092                 if (sum(sorted_energy(1:j))/All_energy)>0.99
+0093                     break
+0094                 end
+0095             end
+0096             Proj_W=U(:,1:j);
+0097         end
+0098         function W_mlr=MultiLR(MLR,train_Feat,train_Y)
+0099             
+0100             % Multiple linear regression
+0101             % train_Feat: training samples
+0102             % train_Y: label matrix
+0103             
+0104             [U,Sigma,V]=svd(train_Feat,'econ');
+0105             r=rank(Sigma);
+0106             U1=U(:,1:r);
+0107             V1=V(:,1:r);
+0108             Sigma_r=diag(Sigma(1:r, 1:r));
+0109             W_mlr=U1*diag(1./Sigma_r)*V1'*train_Y';
+0110             
+0111             
+0112         end
+0113     end
+0114 end
+0115
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLR/MLR.m b/doc/+eegtoolkit/+classification/@MLR/MLR.m new file mode 100644 index 0000000..a9eb9b5 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLR/MLR.m @@ -0,0 +1,115 @@ +classdef MLR < eegtoolkit.classification.ClassifierBase + + properties (Constant) + + end + + properties + W_mlr; + PCA_mat; + trainFeat; + end + + methods (Access = public) + function MLR = MLR(instanceSet) + if nargin > 0 + MLR.instanceSet = instanceSet; + end + + end + + function MLR = build(MLR) + MLR.reset(); + data = MLR.instanceSet.getInstances; + data = data'; + labels = MLR.instanceSet.getLabels; + numTrials = length(labels); + train_Y = zeros(length(unique(labels)),numTrials); + for i = 1 : numTrials + train_Y(labels(i),i) = 1; + end + [Ydim,Num]=size(train_Y); + PCA_W=MLR.pca_func(data); + train_Data=PCA_W'*data; + train_Data=[ones(1,numTrials);train_Data]; + MLR.W_mlr = MLR.MultiLR(train_Data,train_Y);%inv(train_Data*train_Data')*train_Data*train_Y';%(train_Data'*train_Data)\train_Data'*train_Y;%MultiLR(train_Data,train_Y); + MLR.PCA_mat=PCA_W; + mtrainFeat=MLR.W_mlr'*train_Data; + MLR.trainFeat=mtrainFeat; + end + + function [output, probabilities, ranking] = classifyInstance(MLR,instance) + + N = size(instance,1); + instance = instance'; + test_Data=MLR.PCA_mat'*instance; + test_Data=[ones(1,N);test_Data]; + testFeat=MLR.W_mlr'*test_Data; + output=knnclassify(testFeat',MLR.trainFeat',MLR.instanceSet.getLabels,5,'euclidean'); + probabilities=zeros(N,1); + ranking=zeros(N,1); + + end + + function MLR = reset(MLR) + %delete all stored models + MLR.W_mlr=[]; + MLR.PCA_mat=[]; + MLR.trainFeat=[]; + end + + function configInfo = getConfigInfo(MLR) + configInfo = sprintf('MLR'); + end + + + function time = getTime(MLR) + time = 0; + end + + end + + methods (Access = private) + function Proj_W=pca_func(MLR,data) + Proj_W=[]; + meanData=mean(data,2); + data=data-repmat(meanData,1,size(data,2)); + % stdVar=std(data')'; + % staData=(data-repmat(meanData,1,size(data,2)))./repmat(stdVar,1,size(data,2)); + % data=staData; + [V,S]=eig(data'*data); + [sorted_diagS,sorted_rank]=sort(diag(S),'descend'); + sorted_S=diag(sorted_diagS); + V=V(:,sorted_rank); + r=rank(sorted_S); + S1=sorted_S(1:r,1:r); + V1=V(:,1:r); + U=data*V1*S1^(-0.5); + %[sorted_S,sorted_rank]=sort(diag(S),'descend'); + All_energy=sum(diag(S1)); + sorted_energy=diag(S1); + for j=1:r + if (sum(sorted_energy(1:j))/All_energy)>0.99 + break + end + end + Proj_W=U(:,1:j); + end + function W_mlr=MultiLR(MLR,train_Feat,train_Y) + + % Multiple linear regression + % train_Feat: training samples + % train_Y: label matrix + + [U,Sigma,V]=svd(train_Feat,'econ'); + r=rank(Sigma); + U1=U(:,1:r); + V1=V(:,1:r); + Sigma_r=diag(Sigma(1:r, 1:r)); + W_mlr=U1*diag(1./Sigma_r)*V1'*train_Y'; + + + end + end +end + diff --git a/doc/+eegtoolkit/+classification/@MLR/graph.dot b/doc/+eegtoolkit/+classification/@MLR/graph.dot new file mode 100644 index 0000000..a73f6b1 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLR/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + MLR -> MLR; + + MLR [URL="MLR.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLR/graph.html b/doc/+eegtoolkit/+classification/@MLR/graph.html new file mode 100644 index 0000000..2412fbb --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLR/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@MLR + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@MLR >
+

Dependency Graph for ./+eegtoolkit/+classification/@MLR

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@MLR + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLR/graph.map b/doc/+eegtoolkit/+classification/@MLR/graph.map new file mode 100644 index 0000000..68a65dc --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLR/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@MLR/graph.png b/doc/+eegtoolkit/+classification/@MLR/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6ced205e0154c42793a756ad6c2dbb01672e8890 GIT binary patch literal 3476 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 + + + Index for Directory ./+eegtoolkit/+classification/@MLR + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@MLR >
+ +

Index for ./+eegtoolkit/+classification/@MLR

+ +

Matlab files in this directory:

+ +
 MLR
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLTREE/MLTREE.html b/doc/+eegtoolkit/+classification/@MLTREE/MLTREE.html new file mode 100644 index 0000000..2018789 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLTREE/MLTREE.html @@ -0,0 +1,190 @@ + + + + Description of MLTREE + + + + + + + + + + + + + +

MLTREE +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

MLTREE.m

+

SOURCE CODE ^

+
0001 classdef MLTREE < eegtoolkit.classification.ClassifierBase
+0002     
+0003     properties (Constant)
+0004 
+0005     end
+0006     
+0007     properties
+0008        AlgorithmForCategorical; % Algorithm for best categorical predictor split 'Exact' | 'PullLeft' | 'PCA' | 'OVAbyClass'
+0009        MaxNumSplits; % Maximal number of decision splits. size(X,1) - 1 (default) | positive integer
+0010        MinLeafSize; % Minimum number of leaf node observations 1 (default) | positive integer value
+0011        MinParentSize; % Minimum number of branch node observations 10 (default) | positive integer value
+0012        NumVariablesToSample; % Number of predictors to select at random for each split 'all' | positive integer value
+0013        ScoreTransform % 'none' (default). Score transform function. Check http://www.mathworks.com/help/stats/fitcdiscr.html
+0014        Prior; % Prior probabilities 'empirical' (default) | 'uniform' | vector of scalar values | structure
+0015        models;
+0016        totalTime;
+0017        totalCount;
+0018     end
+0019     
+0020     methods (Access = public)
+0021         function MLTREE = MLTREE(instanceSet, algorithmForCategorical, maxNumSplits, minLeafSize, minParentSize, numVariablesToSample, scoreTransform, prior)
+0022             %set default parameters
+0023             if nargin > 0
+0024                 MLTREE.instanceSet = instanceSet;
+0025             end
+0026             if nargin > 1
+0027                 MLTREE.AlgorithmForCategorical = algorithmForCategorical;
+0028             end
+0029             if nargin > 2 
+0030                 MLTREE.MaxNumSplits=maxNumSplits;
+0031             end
+0032             if nargin > 3
+0033                 MLTREE.MinLeafSize = minLeafSize;
+0034             end
+0035             if nargin > 4
+0036                 MLTREE.MinParentSize = minParentSize;
+0037             end
+0038             if nargin > 5
+0039                 MLTREE.NumVariablesToSample = numVariablesToSample;
+0040             end
+0041             if nargin > 6
+0042                 MLTREE.ScoreTransform = scoreTransform;
+0043             end
+0044             if nargin > 7
+0045                 MLTREE.Prior = prior;
+0046             end
+0047             MLTREE.totalTime = 0;
+0048             MLTREE.totalCount = 0;
+0049         end
+0050         
+0051         function MLTREE = build(MLTREE)
+0052             %clear all from previous calls to "build"
+0053             MLTREE.reset;
+0054             numLabels = MLTREE.instanceSet.getNumLabels;
+0055             uniqueLabels = unique(MLTREE.instanceSet.getLabels);
+0056            
+0057             % ---- Multi-Class ----- %
+0058             instances=MLTREE.instanceSet.instances;
+0059             labels=MLTREE.instanceSet.labels;
+0060             
+0061             %LDA.models{1}=fitcecoc(instances,labels,'Coding','ternarycomplete');
+0062             MLTREE.models{1} = fitctree(instances,labels,'AlgorithmForCategorical',MLTREE.AlgorithmForCategorical,'MaxNumSplits',MLTREE.MaxNumSplits,'MinLeafSize',MLTREE.MinLeafSize,'MinParentSize',MLTREE.MinParentSize,'NumVariablesToSample', MLTREE.NumVariablesToSample,'ScoreTransform',MLTREE.ScoreTransform, 'Prior',MLTREE.Prior);
+0063      
+0064             
+0065             % ---- One (vs) All ----- %
+0066 %             for i=1:numLabels
+0067 %                 currentLabel = uniqueLabels(i);
+0068 %                 labels = zeros(LDA.instanceSet.getNumInstances,1)-1;
+0069 %                 labels(LDA.instanceSet.getInstanceIndicesForLabel(currentLabel)) = 1;
+0070 %                 instances = sparse(LDA.instanceSet.getInstances);
+0071 %                 LDA.models{i} = libsvmtrain(labels,instances, '-t 0 -c 1 -b 1');
+0072 %                 if LDA.kernel == LDA.KERNEL_LINEAR;
+0073 %                    %store the models in an instance variable
+0074 %                    LDA.models{i} = libsvmtrain(labels, instances, sprintf('-t %d -c %f -b 1 -q', LDA.kernel, LDA.cost));
+0075 %                 elseif LDA.kernel == LDA.KERNEL_RBF;
+0076 %                    LDA.models{i} = libsvmtrain(labels, instances, sprintf('-t %d -c %f -g %f -b 1 -q', LDA.kernel, LDA.cost, LDA.gamma));
+0077 %                 else
+0078 %                    error('invalid kernel parameter');
+0079 %                 end
+0080 %             end
+0081         end
+0082         
+0083         function [output, probabilities, ranking] = classifyInstance(MLTREE,instance)
+0084             %input = instance matrix rows = instances, cols = attributes
+0085             %output = predicted class
+0086             %probabilities = probability for predicted class
+0087             %ranking = propabilities for all classes (e.g. to use with mAP)
+0088             
+0089             
+0090             %TODO:should print an error if 'build' has not been called
+0091             numModels = length(MLTREE.models);
+0092             [numinstance, ~] = size(instance);
+0093             scores = zeros(numModels,numinstance);
+0094              
+0095             % ---- Multi-class ----- %
+0096             tic
+0097             [label,scores,cost] = predict(MLTREE.models{1},instance); 
+0098             MLTREE.totalTime = MLTREE.totalTime + toc;
+0099             MLTREE.totalCount = MLTREE.totalCount + numinstance;
+0100             % ---- One (vs) All -----%
+0101 %              for i=1:numModels
+0102 %                  %predict using the stored models
+0103 %                  [label,score,cost] = predict(LDA.models{i},instance);
+0104 %                  %libsvmpredict(eye(numinstance,1),instance, LSVM.models{i},'-b 1 -q');
+0105 %                 %store probability for each class
+0106 %                 scores(i,:) = score(:,1);
+0107 %             end
+0108 
+0109              output = zeros(numinstance,1);
+0110              probabilities = zeros(numinstance,1);
+0111              %we need these for ranking metrics (e.g. mAP)
+0112              ranking = scores;
+0113              for i=1:numinstance
+0114                  %select the class with the highest probability
+0115                  [prob, idx] = max(scores(i,:));
+0116                  uniqueLabels = unique(MLTREE.instanceSet.getLabels);
+0117                  %output the label with highest probability
+0118                  output(i,1) = uniqueLabels(idx);
+0119                  %return the probability for the output label
+0120                  probabilities(i,1) = prob;
+0121              end
+0122         end
+0123         
+0124         function MLTREE = reset(MLTREE)
+0125             %delete all stored models
+0126             MLTREE.models = {};
+0127         end
+0128         
+0129         function configInfo = getConfigInfo(MLTREE)
+0130             configInfo = 'MLTREE (Config info not supported yet)';
+0131         end
+0132         
+0133                         
+0134         function time = getTime(MLTREE)
+0135             time = MLTREE.totalTime/MLTREE.totalCount;
+0136         end
+0137                 
+0138     end
+0139 end
+0140
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLTREE/MLTREE.m b/doc/+eegtoolkit/+classification/@MLTREE/MLTREE.m new file mode 100644 index 0000000..e1cd769 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLTREE/MLTREE.m @@ -0,0 +1,140 @@ +classdef MLTREE < eegtoolkit.classification.ClassifierBase + + properties (Constant) + + end + + properties + AlgorithmForCategorical; % Algorithm for best categorical predictor split 'Exact' | 'PullLeft' | 'PCA' | 'OVAbyClass' + MaxNumSplits; % Maximal number of decision splits. size(X,1) - 1 (default) | positive integer + MinLeafSize; % Minimum number of leaf node observations 1 (default) | positive integer value + MinParentSize; % Minimum number of branch node observations 10 (default) | positive integer value + NumVariablesToSample; % Number of predictors to select at random for each split 'all' | positive integer value + ScoreTransform % 'none' (default). Score transform function. Check http://www.mathworks.com/help/stats/fitcdiscr.html + Prior; % Prior probabilities 'empirical' (default) | 'uniform' | vector of scalar values | structure + models; + totalTime; + totalCount; + end + + methods (Access = public) + function MLTREE = MLTREE(instanceSet, algorithmForCategorical, maxNumSplits, minLeafSize, minParentSize, numVariablesToSample, scoreTransform, prior) + %set default parameters + if nargin > 0 + MLTREE.instanceSet = instanceSet; + end + if nargin > 1 + MLTREE.AlgorithmForCategorical = algorithmForCategorical; + end + if nargin > 2 + MLTREE.MaxNumSplits=maxNumSplits; + end + if nargin > 3 + MLTREE.MinLeafSize = minLeafSize; + end + if nargin > 4 + MLTREE.MinParentSize = minParentSize; + end + if nargin > 5 + MLTREE.NumVariablesToSample = numVariablesToSample; + end + if nargin > 6 + MLTREE.ScoreTransform = scoreTransform; + end + if nargin > 7 + MLTREE.Prior = prior; + end + MLTREE.totalTime = 0; + MLTREE.totalCount = 0; + end + + function MLTREE = build(MLTREE) + %clear all from previous calls to "build" + MLTREE.reset; + numLabels = MLTREE.instanceSet.getNumLabels; + uniqueLabels = unique(MLTREE.instanceSet.getLabels); + + % ---- Multi-Class ----- % + instances=MLTREE.instanceSet.instances; + labels=MLTREE.instanceSet.labels; + + %LDA.models{1}=fitcecoc(instances,labels,'Coding','ternarycomplete'); + MLTREE.models{1} = fitctree(instances,labels,'AlgorithmForCategorical',MLTREE.AlgorithmForCategorical,'MaxNumSplits',MLTREE.MaxNumSplits,'MinLeafSize',MLTREE.MinLeafSize,'MinParentSize',MLTREE.MinParentSize,'NumVariablesToSample', MLTREE.NumVariablesToSample,'ScoreTransform',MLTREE.ScoreTransform, 'Prior',MLTREE.Prior); + + + % ---- One (vs) All ----- % +% for i=1:numLabels +% currentLabel = uniqueLabels(i); +% labels = zeros(LDA.instanceSet.getNumInstances,1)-1; +% labels(LDA.instanceSet.getInstanceIndicesForLabel(currentLabel)) = 1; +% instances = sparse(LDA.instanceSet.getInstances); +% LDA.models{i} = libsvmtrain(labels,instances, '-t 0 -c 1 -b 1'); +% if LDA.kernel == LDA.KERNEL_LINEAR; +% %store the models in an instance variable +% LDA.models{i} = libsvmtrain(labels, instances, sprintf('-t %d -c %f -b 1 -q', LDA.kernel, LDA.cost)); +% elseif LDA.kernel == LDA.KERNEL_RBF; +% LDA.models{i} = libsvmtrain(labels, instances, sprintf('-t %d -c %f -g %f -b 1 -q', LDA.kernel, LDA.cost, LDA.gamma)); +% else +% error('invalid kernel parameter'); +% end +% end + end + + function [output, probabilities, ranking] = classifyInstance(MLTREE,instance) + %input = instance matrix rows = instances, cols = attributes + %output = predicted class + %probabilities = probability for predicted class + %ranking = propabilities for all classes (e.g. to use with mAP) + + + %TODO:should print an error if 'build' has not been called + numModels = length(MLTREE.models); + [numinstance, ~] = size(instance); + scores = zeros(numModels,numinstance); + + % ---- Multi-class ----- % + tic + [label,scores,cost] = predict(MLTREE.models{1},instance); + MLTREE.totalTime = MLTREE.totalTime + toc; + MLTREE.totalCount = MLTREE.totalCount + numinstance; + % ---- One (vs) All -----% +% for i=1:numModels +% %predict using the stored models +% [label,score,cost] = predict(LDA.models{i},instance); +% %libsvmpredict(eye(numinstance,1),instance, LSVM.models{i},'-b 1 -q'); +% %store probability for each class +% scores(i,:) = score(:,1); +% end + + output = zeros(numinstance,1); + probabilities = zeros(numinstance,1); + %we need these for ranking metrics (e.g. mAP) + ranking = scores; + for i=1:numinstance + %select the class with the highest probability + [prob, idx] = max(scores(i,:)); + uniqueLabels = unique(MLTREE.instanceSet.getLabels); + %output the label with highest probability + output(i,1) = uniqueLabels(idx); + %return the probability for the output label + probabilities(i,1) = prob; + end + end + + function MLTREE = reset(MLTREE) + %delete all stored models + MLTREE.models = {}; + end + + function configInfo = getConfigInfo(MLTREE) + configInfo = 'MLTREE (Config info not supported yet)'; + end + + + function time = getTime(MLTREE) + time = MLTREE.totalTime/MLTREE.totalCount; + end + + end +end + diff --git a/doc/+eegtoolkit/+classification/@MLTREE/graph.dot b/doc/+eegtoolkit/+classification/@MLTREE/graph.dot new file mode 100644 index 0000000..4ad5e85 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLTREE/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + MLTREE -> MLTREE; + + MLTREE [URL="MLTREE.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLTREE/graph.html b/doc/+eegtoolkit/+classification/@MLTREE/graph.html new file mode 100644 index 0000000..17463a8 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLTREE/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@MLTREE + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@MLTREE >
+

Dependency Graph for ./+eegtoolkit/+classification/@MLTREE

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@MLTREE + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLTREE/graph.map b/doc/+eegtoolkit/+classification/@MLTREE/graph.map new file mode 100644 index 0000000..ff76d66 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLTREE/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@MLTREE/graph.png b/doc/+eegtoolkit/+classification/@MLTREE/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..952a5e78328465fffa222fd5bb9df97219e0b846 GIT binary patch literal 4287 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 A&Hw-a literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+classification/@MLTREE/index.html b/doc/+eegtoolkit/+classification/@MLTREE/index.html new file mode 100644 index 0000000..8f9c555 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLTREE/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+classification/@MLTREE + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@MLTREE >
+ +

Index for ./+eegtoolkit/+classification/@MLTREE

+ +

Matlab files in this directory:

+ +
 MLTREE
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLTboxMulticlass/MLTboxMulticlass.html b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/MLTboxMulticlass.html new file mode 100644 index 0000000..e824f30 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/MLTboxMulticlass.html @@ -0,0 +1,154 @@ + + + + Description of MLTboxMulticlass + + + + + + + + + + + + + +

MLTboxMulticlass +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

MLTboxMulticlass.m

+

SOURCE CODE ^

+
0001 classdef MLTboxMulticlass < eegtoolkit.classification.ClassifierBase
+0002     
+0003     properties (Constant)
+0004         
+0005     end
+0006     
+0007     properties
+0008         Learners; %'discriminant': Discriminant analysis. | 'knn': k-nearest neighbors. | 'naivebayes': Naive Bayes.
+0009         % 'svm': SVM. | 'tree': Classification trees. | any Matlab template classifier
+0010         Coding; % Coding design 'onevsall' (default) | 'allpairs' | 'binarycomplete' | 'denserandom' | 'onevsone' | 'ordinal' | 'sparserandom' | 'ternarycomplete' | numeric matrix
+0011         FitPosterior; % Flag indicating whether to transform scores to posterior probabilities false or 0 (default) | true or 1
+0012         Prior % 'empirical' (default) or 'uniform'.  Prior probabilities for each class.
+0013         models;
+0014         totalTime;
+0015         totalCount;
+0016     end
+0017     
+0018     methods (Access = public)
+0019         function MLC = MLTboxMulticlass(instanceSet, learners, coding, fitPosterior, prior)
+0020             %set default parameters
+0021             MLC.Learners = 'svm';
+0022             MLC.Coding='onevsall';
+0023             MLC.FitPosterior='off';
+0024             MLC.Prior='empirical';
+0025             
+0026             if nargin > 0
+0027                 MLC.instanceSet = instanceSet;
+0028             end
+0029             if nargin > 1
+0030                 MLC.Learners = learners;
+0031             end
+0032             if nargin > 2
+0033                 MLC.Coding=coding;
+0034             end
+0035             if nargin > 3
+0036                 MLC.FitPosterior=fitPosterior;
+0037             end
+0038             if nargin > 4
+0039                 MLC.Prior=prior;
+0040             end
+0041             MLC.totalTime = 0;
+0042             MLC.totalCount = 0;
+0043         end
+0044         
+0045         function MLC = build(MLC)
+0046             %clear all from previous calls to "build"
+0047             MLC.reset;
+0048             numLabels = MLC.instanceSet.getNumLabels;
+0049             uniqueLabels = unique(MLC.instanceSet.getLabels);
+0050             
+0051             % ---- Multi-Class ----- %
+0052             instances=MLC.instanceSet.instances;
+0053             labels=MLC.instanceSet.labels;
+0054             
+0055             %t=templateSVM('KernelFunction','linear');
+0056             MLC.models{1}=fitcecoc(instances,labels,'Coding', MLC.Coding,'FitPosterior', MLC.FitPosterior,'Prior',MLC.Prior,'Learners',MLC.Learners);
+0057         end
+0058         
+0059         function [output, probabilities, ranking] = classifyInstance(MLC,instance)
+0060 
+0061             %TODO:should print an error if 'build' has not been called
+0062             numModels = length(MLC.models);
+0063             [numinstance, ~] = size(instance);
+0064             %scores = zeros(numModels,numinstance);
+0065             
+0066             % ---- Multi-class ----- %
+0067             tic
+0068             [label,scores,loss] = predict(MLC.models{1},instance);
+0069             MLC.totalTime = MLC.totalTime + toc;
+0070             MLC.totalCount = MLC.totalCount + numinstance;
+0071             output = zeros(numinstance,1);
+0072             probabilities = zeros(numinstance,1);
+0073             %we need these for ranking metrics (e.g. mAP)
+0074             ranking = scores;
+0075             for i=1:numinstance
+0076                 %select the class with the highest probability
+0077                 [prob, idx] = max(scores(i,:));
+0078                 uniqueLabels = unique(MLC.instanceSet.getLabels);
+0079                 %output the label with highest probability
+0080                 output(i,1) = uniqueLabels(idx);
+0081                 %return the probability for the output label
+0082                 probabilities(i,1) = prob;
+0083             end
+0084         end
+0085         
+0086         function MLC = reset(MLC)
+0087             %delete all stored models
+0088             MLC.models = {};
+0089         end
+0090         
+0091         function configInfo = getConfigInfo(MLC)
+0092             configInfo=sprintf('MLTboxMulticlass\tCoding:%s\tFitPosterior:%s\tPrior:%s\n\tLearners:', MLC.Coding, MLC.FitPosterior,MLC.Prior);
+0093             disp(MLC.Learners)
+0094             %configInfo = 'MLSVMClassifier (Config info not supported yet)';
+0095         end
+0096         
+0097                         
+0098         function time = getTime(MLC)
+0099             time = MLC.totalTime/MLC.totalCount;
+0100         end
+0101         
+0102     end
+0103 end
+0104
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLTboxMulticlass/MLTboxMulticlass.m b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/MLTboxMulticlass.m new file mode 100644 index 0000000..07c37e3 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/MLTboxMulticlass.m @@ -0,0 +1,104 @@ +classdef MLTboxMulticlass < eegtoolkit.classification.ClassifierBase + + properties (Constant) + + end + + properties + Learners; %'discriminant': Discriminant analysis. | 'knn': k-nearest neighbors. | 'naivebayes': Naive Bayes. + % 'svm': SVM. | 'tree': Classification trees. | any Matlab template classifier + Coding; % Coding design 'onevsall' (default) | 'allpairs' | 'binarycomplete' | 'denserandom' | 'onevsone' | 'ordinal' | 'sparserandom' | 'ternarycomplete' | numeric matrix + FitPosterior; % Flag indicating whether to transform scores to posterior probabilities false or 0 (default) | true or 1 + Prior % 'empirical' (default) or 'uniform'. Prior probabilities for each class. + models; + totalTime; + totalCount; + end + + methods (Access = public) + function MLC = MLTboxMulticlass(instanceSet, learners, coding, fitPosterior, prior) + %set default parameters + MLC.Learners = 'svm'; + MLC.Coding='onevsall'; + MLC.FitPosterior='off'; + MLC.Prior='empirical'; + + if nargin > 0 + MLC.instanceSet = instanceSet; + end + if nargin > 1 + MLC.Learners = learners; + end + if nargin > 2 + MLC.Coding=coding; + end + if nargin > 3 + MLC.FitPosterior=fitPosterior; + end + if nargin > 4 + MLC.Prior=prior; + end + MLC.totalTime = 0; + MLC.totalCount = 0; + end + + function MLC = build(MLC) + %clear all from previous calls to "build" + MLC.reset; + numLabels = MLC.instanceSet.getNumLabels; + uniqueLabels = unique(MLC.instanceSet.getLabels); + + % ---- Multi-Class ----- % + instances=MLC.instanceSet.instances; + labels=MLC.instanceSet.labels; + + %t=templateSVM('KernelFunction','linear'); + MLC.models{1}=fitcecoc(instances,labels,'Coding', MLC.Coding,'FitPosterior', MLC.FitPosterior,'Prior',MLC.Prior,'Learners',MLC.Learners); + end + + function [output, probabilities, ranking] = classifyInstance(MLC,instance) + + %TODO:should print an error if 'build' has not been called + numModels = length(MLC.models); + [numinstance, ~] = size(instance); + %scores = zeros(numModels,numinstance); + + % ---- Multi-class ----- % + tic + [label,scores,loss] = predict(MLC.models{1},instance); + MLC.totalTime = MLC.totalTime + toc; + MLC.totalCount = MLC.totalCount + numinstance; + output = zeros(numinstance,1); + probabilities = zeros(numinstance,1); + %we need these for ranking metrics (e.g. mAP) + ranking = scores; + for i=1:numinstance + %select the class with the highest probability + [prob, idx] = max(scores(i,:)); + uniqueLabels = unique(MLC.instanceSet.getLabels); + %output the label with highest probability + output(i,1) = uniqueLabels(idx); + %return the probability for the output label + probabilities(i,1) = prob; + end + end + + function MLC = reset(MLC) + %delete all stored models + MLC.models = {}; + end + + function configInfo = getConfigInfo(MLC) + configInfo=sprintf('MLTboxMulticlass\tCoding:%s\tFitPosterior:%s\tPrior:%s\n\tLearners:', MLC.Coding, MLC.FitPosterior,MLC.Prior); + disp(MLC.Learners) + %configInfo = 'MLSVMClassifier (Config info not supported yet)'; + end + + + function time = getTime(MLC) + time = MLC.totalTime/MLC.totalCount; + end + + end +end + diff --git a/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.dot b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.dot new file mode 100644 index 0000000..7256ede --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + MLTboxMulticlass -> MLTboxMulticlass; + + MLTboxMulticlass [URL="MLTboxMulticlass.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.html b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.html new file mode 100644 index 0000000..4dbb14d --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@MLTboxMulticlass + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@MLTboxMulticlass >
+

Dependency Graph for ./+eegtoolkit/+classification/@MLTboxMulticlass

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@MLTboxMulticlass + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.map b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.map new file mode 100644 index 0000000..f63cb88 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.png b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..521c0ebc119df693c6200cc8b0281719d31db82b GIT binary patch literal 6135 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 + + + Index for Directory ./+eegtoolkit/+classification/@MLTboxMulticlass + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@MLTboxMulticlass >
+ +

Index for ./+eegtoolkit/+classification/@MLTboxMulticlass

+ +

Matlab files in this directory:

+ +
 MLTboxMulticlass
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MaxChooser/MaxChooser.html b/doc/+eegtoolkit/+classification/@MaxChooser/MaxChooser.html new file mode 100644 index 0000000..c7cdfc3 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MaxChooser/MaxChooser.html @@ -0,0 +1,104 @@ + + + + Description of MaxChooser + + + + + + + + + + + + + +

MaxChooser +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

MaxChooser.m

+

SOURCE CODE ^

+
0001 classdef MaxChooser < eegtoolkit.classification.ClassifierBase
+0002     
+0003     properties (Constant)
+0004 
+0005     end
+0006     
+0007     properties
+0008       
+0009     end
+0010     
+0011     methods (Access = public)
+0012         function MaxChooser =MaxChooser(instanceSet)
+0013             if nargin > 0
+0014                 MaxChooser.instanceSet = instanceSet;
+0015             end
+0016            
+0017         end
+0018         
+0019         function MaxChooser = build(MaxChooser)
+0020             
+0021         end
+0022         
+0023         function [output, probabilities, ranking] = classifyInstance(MaxChooser,instance)
+0024             
+0025             dd_ins=instance;
+0026             N = size(instance,1);
+0027             pred_lab=zeros(N,1);
+0028             for i=1:N
+0029                 [v,idx]=max(dd_ins(i,:));                
+0030                 pred_lab(i)=idx;   
+0031                 ranking(i,:) = dd_ins(i,:);
+0032             end
+0033             
+0034             output = pred_lab;%sum(pred_lab)/length(pred_lab)
+0035             probabilities=zeros(N,1);
+0036 %             ranking=zeros(N,1);
+0037         end
+0038         
+0039         function MaxChooser = reset(MaxChooser)
+0040             %delete all stored models
+0041         end
+0042         
+0043         function configInfo = getConfigInfo(MaxChooser)
+0044             configInfo = sprintf('MaxChooser');
+0045         end
+0046         
+0047                         
+0048         function time = getTime(MaxChooser)
+0049             time = 0;
+0050         end
+0051                 
+0052     end
+0053 end
+0054
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MaxChooser/MaxChooser.m b/doc/+eegtoolkit/+classification/@MaxChooser/MaxChooser.m new file mode 100644 index 0000000..4d90bd9 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MaxChooser/MaxChooser.m @@ -0,0 +1,54 @@ +classdef MaxChooser < eegtoolkit.classification.ClassifierBase + + properties (Constant) + + end + + properties + + end + + methods (Access = public) + function MaxChooser =MaxChooser(instanceSet) + if nargin > 0 + MaxChooser.instanceSet = instanceSet; + end + + end + + function MaxChooser = build(MaxChooser) + + end + + function [output, probabilities, ranking] = classifyInstance(MaxChooser,instance) + + dd_ins=instance; + N = size(instance,1); + pred_lab=zeros(N,1); + for i=1:N + [v,idx]=max(dd_ins(i,:)); + pred_lab(i)=idx; + ranking(i,:) = dd_ins(i,:); + end + + output = pred_lab;%sum(pred_lab)/length(pred_lab) + probabilities=zeros(N,1); +% ranking=zeros(N,1); + end + + function MaxChooser = reset(MaxChooser) + %delete all stored models + end + + function configInfo = getConfigInfo(MaxChooser) + configInfo = sprintf('MaxChooser'); + end + + + function time = getTime(MaxChooser) + time = 0; + end + + end +end + diff --git a/doc/+eegtoolkit/+classification/@MaxChooser/graph.dot b/doc/+eegtoolkit/+classification/@MaxChooser/graph.dot new file mode 100644 index 0000000..9227aa8 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MaxChooser/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + MaxChooser -> MaxChooser; + + MaxChooser [URL="MaxChooser.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MaxChooser/graph.html b/doc/+eegtoolkit/+classification/@MaxChooser/graph.html new file mode 100644 index 0000000..d822156 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MaxChooser/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@MaxChooser + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@MaxChooser >
+

Dependency Graph for ./+eegtoolkit/+classification/@MaxChooser

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@MaxChooser + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MaxChooser/graph.map b/doc/+eegtoolkit/+classification/@MaxChooser/graph.map new file mode 100644 index 0000000..36ff2c4 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@MaxChooser/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@MaxChooser/graph.png b/doc/+eegtoolkit/+classification/@MaxChooser/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0ddd75a217e4adaff5361dd0cad216391ffcd717 GIT binary patch literal 5337 zcmZ8lcRbbq_rDj}5z73akP+D<*|JGUWRGO;y~&oDQDkI~>>_()@9gX?TSoT!9*^ID zzw2`E<8iO|>%7l-p67W!PpFcj^lfZ%Yy<*vTUJIw1zxM*R{#?o{&tdxmca|Up}e#N z;`-(%tv)vvfw&tfDb%3B|&SU=rz zK0ZHhS-6-+U}O6kiE#bhns7)xNc}r;knA#dQ1{nEmq4~TAe8C7YsRevc8=79|E62x z+L!0)bGTzdiPsN6rtHVuyjJAK{mD#pT3TAY$^1k|M@P|J zMmJBnYOW0FUW(ZtDzCPxM&y`AHOhGq{Ya_ zChg|N4{1U)wYQ^FQBm2txOBkXFYN4C$1U5RqJ8fD$H-O*-QTyLu5rSV%O-^9t5>fOh(Pgo(b0F%FfeGJ zJR$uhc!2w-FNv=#gTWWeWp{Q~cX@gFJ|7>6da<^cm>3dbXLRq?Hn!14aBnBh5955xZr7M zXjIuQpiE9q-v87?Kt&a~yK5^UB}K!+f;%=g_Cj+qE~}sb=XbFV5%!0R3s0y*)7TjC zFX3~RkB_y2vgJQ1cAZ@i+1bW){`w^?C58U&+c(?GGpE;DTD0`^=<**~#EgvSE-o$< z2K^WUe(H;AXpq_4+uL4UxM^3}B4=i1UYF`4KeFn)Z*7%e(JaTL`CyunEzG;LG0$f` z-4smi9fB`%aR(B#yT9MOztU6Yd1@~qEuCc89E(<@7S{8Ljh2gxC^0cHFE6hNN?2yx zM_#B~Pkyla>x*e<6kbQd(UEh*LBD`DoP!*gm`D_G-kLw${M~V;MBg476GM1)u_}@q z8%u;_fAS>3=d?#}d~lFsa7d~zf&T<5aJo@YqVgzysJr_;6BAQ!e}9f{33b7<1lQ&@ z$EV(B>$%#M)|8J~Se`(KSZqcRTfU@E8Xv)&c ziW0|)o}S=Q{ChJqGbjM7Bn`nQHobm}-^I_%3xoGN@pRSH+LxD&-b>I(NlEQ*O?=N8 zI@9viEm=+EG9jg+Qv4v(8qci0Ur^HU*;J#2(;UOb!eXgCf`W-SjEs=5xwp4>Z{Y1B z(|uZ6e?SU17uOO1iQz4!mnxq3(U!(j0fFJJuF&=Mb#7AJrR<*8mwrF>=euGV_$|g* zYHDf}Yfx+?@QO#xs|{MvQRZu$HWi#KiTr^Sw7(nQM%uzrg?V}U^71_aB!2i2{*^y| z(D3t<{Vvh#z@YZ@ZEbC3AgJfwi?cubXO@+fl~!9z@iYYw0q9CsVoXzFoL^hRWME*Z zs;X)l9lfWhsF=WIf+r{>)R8^agi2ZW;|H;wo!#2bPCLUFPZS@YYYr0jduwZJz6$h7 zrev`}LqjU9ZEZiBn^9_A{sz5fk+QI02JjAyj0Ci|OO1?Ie~_79SU`%1h@`6< zNl2hgPft_H_mtwz&dfw~cFO!aK3=*wJy@E2@qn2b2NL0WeR+&Tkg#eu;d}4;Kd>s% zuJ(iP0XalalzCse2LuO4Om0)?)c05~8Eo z3unH*DgYjoMQp9FlQ~ev$H(L1;u?vHBEsIk4|tjdfDyUc!-w41w*=kxGY%C0Y2e*% zBLuBfURh~kZ@-_nxp;Yb$->AuKV{R{2mRN*V*kF)P)b_*U?BaOrI{I-vhXwA#HEg? zmn_5w!!JZA?dJv{|qJ-X+z zH7-U%LP90r98Q-Q9W9Eu*zaMJE_4%>fByXT(&8dxyc`)ZvGGWCVSRnd4b>Fu)K+<& zJGZyD+n*n8ORe$|CQ_gQ&+L~zT?v_gx^7x1# zB_orKQ7st#_wV2GY`sUI7dZt5^ix;0!|J!9A}a}Ay7kpn=|J%ZaRFFZSeBNSSwJ+47K#Yz+1@OKEAnSlP_NFpLE^L#?8lF*?q1&q1ilo4@TD= zwQC%iP*G5VwjObI$`cY2Ryl7^a*%Kmq9^|-DvE$<%$K+;g&F)&5VuP193?9J3r7$O*LF!{v|?OA2(h{ygu;#_>Nk=sn`0T((17E3t`;g z`Fcde%o#=dPfbiL?99|I(HL=O<>ZLd5iUgeT+qU0Lq`3a6bsru(5kGg4B-o8%pnkk>>wxI7WU1|q(z9*$KJ%K3w#k5 z7dJm)@N{R_V(@D@miOX(#J5$!iXO?r#}l;($L^v<|x;E4AtjdJRoNb6ggcc z$~>&7s6gz@sM3}pedn%@DtG_=lW=zCjieUAOHmBgyWCKR<0PRHLqkL1N7tYpZ0DQa z5m->NIX4p$;-)=LUUVAmScem_P^brVN&gN&I_vGSE`Tz z>tXhSsi`TcDt`T5}?A;6p0A(ovUPP;id^fAX9XZF>}VI*wE zHZ~Hb$pH2uS z=2%k|(3U^EE;EZ0ds{FXIWNyv-^#3BjCopjJnNy#c=tx=vFSDRJ`2WEPFG@QWsMBR zr_M=9q4YT${(^nfc+$p(>C2heyY}v7k=j87->klp(w!B1exMdoV&eASx*pF%Okof` zm_+rR`eBs`$CGLi`p*4Y`3jXtZYN{ue;RPo*cN}4802E|vdz*61TLwe@ zQG9u6={)cR)k2&CSh=H}8F_f9sj7lx2!d~xmzQTr(2(8T0}3YN#IMlo^SM5s^E_So zv_3yC8Y8P;dt-7IM|2EpU9J=rE1MyyQpL5Yr#gN`l$?(pg6#)eek!aJ*8txD_c z>gwu&A(Q4-8Gid^OmL(Ds~<41SxH3Vyl>SFb+6ij=U~Mon(|+UJ&6MGN<*a)c z&4&;mJ@+isgcD~2cG8o@Fg9}j?Uw(}uN>!_kh<_$dP<&DcZfUIB|rs`_Ge?XU}Ab& zkRF4VY5Qne5^@X4$A#zro8ZMHH=$nVWVLAyn?)xM+-v*Db*HWEE<^93#r9wv}=FloWaE3&b%r9O2s zS3u{yaV${xH^R7kWx*N$4iES0k7wc7`$*e`=D>@2fBbOGc?H24nCH8f$8#pYsYrH4 z#t`W!s+4Hs>p{+(H$}qN7Y^2w<)JVm0a-?%iiU@WsmJ5Y4ec{V%@b2o`%g|>HDA9T z7#fO6;n}z_Z)C~p+>rzfZK^Tmy+uow&P5a>C z;h~B8`1oAyxHP`8vf7sD@t|w>!j1*Ami)vH1%#xyjt(VwsWQt6PC9ye!>*WzIV67+ z*kKkw@wpQ0Pv-Y8EMzIKsQ3vMqd={wd9uQSfRyyfAR%=a125J+*}Ehpw4nW=z>JKH zzThIjC1hk|+#w)%2WpGrd7zcy*819-sID#*Ncrg4SpT{@!RXcu$*@v5l11wWE?BFV zhTc^AD7gd>NE?WjAfP8u`J(x%;K6WVHxLpY-r5|91124Xn)(X{FKz-U6^sbLU3y*~ z=B-<|I{W%0!4Ko2qk4LJ-nn-#5OiiMpvdvb{BU=`uULLj*uj8XzBwO^Zf0R2E?6lw zH8o6JTnSrSc5!j>J9qD*L49A!Uf&)u=ZTYhC?_YUq^%vEkwFvp@nc4AE(T#J8WM>N ziHwv2dja>@Zgnzl^k(SE2_GmmF*CD#_F+3^WrFVR?zB;JBmxYX6c^?B$w|}945hWT zHIcBXdmY#@Dd4lOU%v)SL|_;{r7~UoQCcc0D(b6r|7Kxv|GxgX3#y_MeUU$YpknSb zNy)%L?L*X_NAYr{N&F7<+B!NMCjI|aRaf5>Br-A*#7b~|z0m(HlK9M6-CBGJ^;4Di~56&J=8Hmt&o zI1@{El;^Z&{{Nauwn#0rqT*g(U!T8jF1y#6Ak_`Y#?`S&l${*870sZYx3!v#cVf(l&^E1Av}``!eO zmNoR4o)y@7H8+MrGT`Refnmk|N^|V3c^1HeuM&TFc^5W(^cZ{`*&O^;p-d5IO&vs! fVG+2uc#UBAxM{zHC(8%BN`$PWqC~N{zTf` + + + Index for Directory ./+eegtoolkit/+classification/@MaxChooser + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@MaxChooser >
+ +

Index for ./+eegtoolkit/+classification/@MaxChooser

+ +

Matlab files in this directory:

+ +
 MaxChooser
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@SBLR/SBLR.html b/doc/+eegtoolkit/+classification/@SBLR/SBLR.html new file mode 100644 index 0000000..d82eff8 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@SBLR/SBLR.html @@ -0,0 +1,138 @@ + + + + Description of SBLR + + + + + + + + + + + + + +

SBLR +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

SBLR.m

+

SOURCE CODE ^

+
0001 classdef SBLR < eegtoolkit.classification.ClassifierBase
+0002     
+0003     properties (Constant)
+0004 
+0005     end
+0006     
+0007     properties
+0008        %Coding; % Coding design 'onevsall' (default) | 'allpairs' | 'binarycomplete' | 'denserandom' | 'onevsone' | 'ordinal' | 'sparserandom' | 'ternarycomplete' | numeric matrix
+0009        %FitPosterior; % Flag indicating whether to transform scores to posterior probabilities false or 0 (default) | true or 1
+0010        %Prior % 'empirical' (default) or 'uniform'.  Prior probabilities for each class.
+0011        models;
+0012        Wmatrix;
+0013     end
+0014     
+0015     methods (Access = public)
+0016         function SBLR = SBLR(instanceSet)
+0017             %set default parameters
+0018             if nargin > 0
+0019                 SBLR.instanceSet = instanceSet;
+0020             end                   
+0021         end
+0022         
+0023         function SBLR = build(SBLR)
+0024             %clear all from previous calls to "build"
+0025             SBLR.reset;
+0026             numLabels = SBLR.instanceSet.getNumLabels;
+0027             uniqueLabels = unique(SBLR.instanceSet.getLabels);
+0028            
+0029             % ---- Multi-Class ----- %
+0030             instances=SBLR.instanceSet.instances;
+0031             labels=SBLR.instanceSet.labels;
+0032             [~,Nfeat] = size(instances)
+0033             size(instances)
+0034             %X = instances*instances;
+0035           %[w, ix_eff, W, AX] = slr_learning_var2(labels, instances,'nlearn', 100, 'nstep', 10);
+0036           [w, ix_eff, W, AXall] = smlr_learning(labels, instances, Nfeat,'nlearn', 0,'gamma0', 0);%,...
+0037               %'wdisp_mode', 'off', 'nlearn',10,'mean_mode', 'none', 'scale_mode', 'none');%, ...
+0038             %'wdisplay', wdisp_mode, 'wmaxiter', wmaxiter', 'nlearn', Nlearn, 'nstep', Nstep,...
+0039             %'amax', AMAX, 'isplot', isplot', 'gamma0', gamma0);
+0040         
+0041           SBLR.Wmatrix = reshape(w, [Nfeat, 5]);           
+0042         
+0043         end
+0044         
+0045         function [output, probabilities, ranking] = classifyInstance(SBLR,instance)
+0046             %input = instance matrix rows = instances, cols = attributes
+0047             %output = predicted class
+0048             %probabilities = probability for predicted class
+0049             %ranking = propabilities for all classes (e.g. to use with mAP)
+0050             
+0051             
+0052             %TODO:should print an error if 'build' has not been called
+0053 %             numModels = length(MLSVM.models);
+0054             [numinstance, ~] = size(instance);
+0055             %scores = zeros(numModels,numinstance);
+0056             
+0057             [output, Pte] = calc_label(instance, SBLR.Wmatrix);
+0058             % ---- One (vs) All -----%
+0059 %              for i=1:numModels
+0060 %                  %predict using the stored models
+0061 %                  [label,score,cost] = predict(LDA.models{i},instance);
+0062 %                  %libsvmpredict(eye(numinstance,1),instance, LSVM.models{i},'-b 1 -q');
+0063 %                 %store probability for each class
+0064 %                 scores(i,:) = score(:,1);
+0065 %             end
+0066 
+0067             ranking=zeros(5,1)';
+0068             probabilities=0;          
+0069         end
+0070         
+0071         function SBLR = reset(SBLR)
+0072             %delete all stored models
+0073             SBLR.models = {};
+0074             SBLR.Wmatrix=[];
+0075         end
+0076         
+0077         function configInfo = getConfigInfo(SBLR)
+0078            
+0079             configInfo = 'SBLR_Classifier (Config info not supported yet)';
+0080         end
+0081         
+0082         function time = getTime(MLR_Classifier)
+0083             time = 0;
+0084         end
+0085                 
+0086     end
+0087 end
+0088
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@SBLR/SBLR.m b/doc/+eegtoolkit/+classification/@SBLR/SBLR.m new file mode 100644 index 0000000..30f315d --- /dev/null +++ b/doc/+eegtoolkit/+classification/@SBLR/SBLR.m @@ -0,0 +1,88 @@ +classdef SBLR < eegtoolkit.classification.ClassifierBase + + properties (Constant) + + end + + properties + %Coding; % Coding design 'onevsall' (default) | 'allpairs' | 'binarycomplete' | 'denserandom' | 'onevsone' | 'ordinal' | 'sparserandom' | 'ternarycomplete' | numeric matrix + %FitPosterior; % Flag indicating whether to transform scores to posterior probabilities false or 0 (default) | true or 1 + %Prior % 'empirical' (default) or 'uniform'. Prior probabilities for each class. + models; + Wmatrix; + end + + methods (Access = public) + function SBLR = SBLR(instanceSet) + %set default parameters + if nargin > 0 + SBLR.instanceSet = instanceSet; + end + end + + function SBLR = build(SBLR) + %clear all from previous calls to "build" + SBLR.reset; + numLabels = SBLR.instanceSet.getNumLabels; + uniqueLabels = unique(SBLR.instanceSet.getLabels); + + % ---- Multi-Class ----- % + instances=SBLR.instanceSet.instances; + labels=SBLR.instanceSet.labels; + [~,Nfeat] = size(instances) + size(instances) + %X = instances*instances; + %[w, ix_eff, W, AX] = slr_learning_var2(labels, instances,'nlearn', 100, 'nstep', 10); + [w, ix_eff, W, AXall] = smlr_learning(labels, instances, Nfeat,'nlearn', 0,'gamma0', 0);%,... + %'wdisp_mode', 'off', 'nlearn',10,'mean_mode', 'none', 'scale_mode', 'none');%, ... + %'wdisplay', wdisp_mode, 'wmaxiter', wmaxiter', 'nlearn', Nlearn, 'nstep', Nstep,... + %'amax', AMAX, 'isplot', isplot', 'gamma0', gamma0); + + SBLR.Wmatrix = reshape(w, [Nfeat, 5]); + + end + + function [output, probabilities, ranking] = classifyInstance(SBLR,instance) + %input = instance matrix rows = instances, cols = attributes + %output = predicted class + %probabilities = probability for predicted class + %ranking = propabilities for all classes (e.g. to use with mAP) + + + %TODO:should print an error if 'build' has not been called +% numModels = length(MLSVM.models); + [numinstance, ~] = size(instance); + %scores = zeros(numModels,numinstance); + + [output, Pte] = calc_label(instance, SBLR.Wmatrix); + % ---- One (vs) All -----% +% for i=1:numModels +% %predict using the stored models +% [label,score,cost] = predict(LDA.models{i},instance); +% %libsvmpredict(eye(numinstance,1),instance, LSVM.models{i},'-b 1 -q'); +% %store probability for each class +% scores(i,:) = score(:,1); +% end + + ranking=zeros(5,1)'; + probabilities=0; + end + + function SBLR = reset(SBLR) + %delete all stored models + SBLR.models = {}; + SBLR.Wmatrix=[]; + end + + function configInfo = getConfigInfo(SBLR) + + configInfo = 'SBLR_Classifier (Config info not supported yet)'; + end + + function time = getTime(MLR_Classifier) + time = 0; + end + + end +end + diff --git a/doc/+eegtoolkit/+classification/@SBLR/graph.dot b/doc/+eegtoolkit/+classification/@SBLR/graph.dot new file mode 100644 index 0000000..6ecd254 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@SBLR/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + SBLR -> SBLR; + + SBLR [URL="SBLR.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@SBLR/graph.html b/doc/+eegtoolkit/+classification/@SBLR/graph.html new file mode 100644 index 0000000..77be386 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@SBLR/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@SBLR + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@SBLR >
+

Dependency Graph for ./+eegtoolkit/+classification/@SBLR

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@SBLR + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@SBLR/graph.map b/doc/+eegtoolkit/+classification/@SBLR/graph.map new file mode 100644 index 0000000..bc7b84e --- /dev/null +++ b/doc/+eegtoolkit/+classification/@SBLR/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@SBLR/graph.png b/doc/+eegtoolkit/+classification/@SBLR/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..eb58da10ba695076f396b64017ee74cb09a740ec GIT binary patch literal 3710 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+classification/@SBLR/index.html b/doc/+eegtoolkit/+classification/@SBLR/index.html new file mode 100644 index 0000000..00e437a --- /dev/null +++ b/doc/+eegtoolkit/+classification/@SBLR/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+classification/@SBLR + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@SBLR >
+ +

Index for ./+eegtoolkit/+classification/@SBLR

+ +

Matlab files in this directory:

+ +
 SBLR
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@SMFA/SMFA.html b/doc/+eegtoolkit/+classification/@SMFA/SMFA.html new file mode 100644 index 0000000..cd760e3 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@SMFA/SMFA.html @@ -0,0 +1,193 @@ + + + + Description of SMFA + + + + + + + + + + + + + +

SMFA +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

SMFA.m

+

SOURCE CODE ^

+
0001 classdef SMFA < eegtoolkit.classification.ClassifierBase
+0002     
+0003     properties (Constant)
+0004 
+0005     end
+0006     
+0007     properties (Access = public)
+0008       W_SMFA;
+0009       PCA_mat;
+0010       trainFeat;
+0011       NumSubclasses;
+0012       SigmaCoeff;
+0013       kInt;
+0014       kPen;
+0015     end
+0016     
+0017     methods (Access = public)
+0018         function SMFA = SMFA(instanceSet,NumS,S,kInt,kPen)%,NumSubclasses,SigmaCoeff,kInt,kPen)
+0019             if nargin == 1
+0020                 SMFA.instanceSet = instanceSet;
+0021             else
+0022                 SMFA.NumSubclasses = NumS;
+0023                 SMFA.SigmaCoeff = S;
+0024                 SMFA.kInt = kInt;
+0025                 SMFA.kPen = kPen;
+0026             end
+0027            
+0028         end
+0029             
+0030         
+0031         function SMFA = build(SMFA)
+0032             SMFA.reset();
+0033             data = SMFA.instanceSet.getInstances;
+0034             data = data';  
+0035             labels = SMFA.instanceSet.getLabels;    
+0036             unique(labels)           
+0037             numTrials = length(labels);
+0038 
+0039             PCA_W=SMFA.pca_func(data);
+0040 %             PCA_W=eye(size(data,1));
+0041             train_Data=PCA_W'*data; 
+0042             
+0043 %             Sigma = SMFA_Classifier.SigmaCoeff;
+0044             NSubClasses = SMFA.NumSubclasses;
+0045             D=pdist2(train_Data',train_Data');
+0046 %             STrain = SGE_GramMatrix(train_Data,'gau',Sigma*mean(D(:)));
+0047             STrain = 1-(D/max(D(:)));
+0048             
+0049             pt=0;
+0050             ct=0;
+0051             ClustersOfClasses = SGE_SubclassExtract(train_Data,labels,NSubClasses,pt,ct);
+0052             [yyTrain,~,~] = SGE_SubclassLabels(ClustersOfClasses,labels);
+0053            
+0054             
+0055             Par.mode = 'SMFA';
+0056             Par.SimilMatrix = STrain;
+0057             Par.kInt = SMFA.kInt;
+0058             Par.kPen = SMFA.kPen;
+0059             dim = min([Par.kPen,size(train_Data,1)]);
+0060             
+0061             [W,Wp] = SGE_GraphConstruct(yyTrain,Par);
+0062             [TransMatrix,~] = SGE_Mapping(train_Data,dim,W,Wp);
+0063             SMFA.W_SMFA = TransMatrix;
+0064             SMFA.PCA_mat=PCA_W;
+0065             mtrainFeat=SGE_Projection(train_Data,1:dim,TransMatrix);
+0066             SMFA.trainFeat=mtrainFeat;                       
+0067 %             figure,gplotmatrix(mtrainFeat',[],labels)
+0068         end
+0069         
+0070         function [output, probabilities, ranking] = classifyInstance(SMFA,instance)
+0071             
+0072             N = size(instance,1);            
+0073             instance = instance'; 
+0074             
+0075             test_Data=SMFA.PCA_mat'*instance;               
+0076 %             test_Data=[ones(1,N);test_Data];
+0077             testFeat=SMFA.W_SMFA'*test_Data;
+0078 %             output=knnclassify(testFeat',SMFA_Classifier.trainFeat',SMFA_Classifier.instanceSet.getLabels,5,'euclidean');
+0079             X = SMFA.trainFeat;
+0080             y = SMFA.instanceSet.getLabels;
+0081             
+0082             %Nearest Centroid
+0083             [~,output] = SGE_Classification(X,y',testFeat,0,'euc');
+0084             
+0085 %             %SVM Linear
+0086 %             [~,output] = SGE_Classification(X,y',testFeat,[1,1,1,0,1],'euc');
+0087 
+0088 %             %SVM RBF
+0089 %             [~,output] = SGE_Classification(X,y',testFeat,[2,3,2/size(X,1),0,1],'euc');
+0090             
+0091             output = output(1,:)';
+0092             probabilities=zeros(N,1);
+0093             ranking=zeros(N,1);
+0094 %             figure,gplotmatrix(testFeat',[],output)
+0095           
+0096         end
+0097         
+0098         function SMFA = reset(SMFA)
+0099             %delete all stored models
+0100             SMFA.W_SMFA=[];
+0101             SMFA.PCA_mat=[];
+0102             SMFA.trainFeat=[];
+0103         end
+0104         
+0105         function configInfo = getConfigInfo(SMFA)
+0106             configInfo = sprintf('MLR_Classifier');
+0107         end
+0108         
+0109                         
+0110         function time = getTime(SMFA)
+0111             
+0112         end
+0113                 
+0114     end
+0115     methods (Access = private)
+0116         function Proj_W=pca_func(MLR,data)
+0117             Proj_W=[];
+0118             meanData=mean(data,2);
+0119             data=data-repmat(meanData,1,size(data,2));
+0120             % stdVar=std(data')';
+0121             % staData=(data-repmat(meanData,1,size(data,2)))./repmat(stdVar,1,size(data,2));
+0122             % data=staData;
+0123             [V,S]=eig(data'*data);
+0124             [sorted_diagS,sorted_rank]=sort(diag(S),'descend');
+0125             sorted_S=diag(sorted_diagS);
+0126             V=V(:,sorted_rank);
+0127             r=rank(sorted_S);
+0128             S1=sorted_S(1:r,1:r);
+0129             V1=V(:,1:r);
+0130             U=data*V1*S1^(-0.5);
+0131             %[sorted_S,sorted_rank]=sort(diag(S),'descend');
+0132             All_energy=sum(diag(S1));
+0133             sorted_energy=diag(S1);
+0134             for j=1:r
+0135                 if (sum(sorted_energy(1:j))/All_energy)>0.99
+0136                     break
+0137                 end
+0138             end
+0139             Proj_W=U(:,1:j);
+0140         end
+0141     end
+0142 end
+0143
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@SMFA/SMFA.m b/doc/+eegtoolkit/+classification/@SMFA/SMFA.m new file mode 100644 index 0000000..f16f2c7 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@SMFA/SMFA.m @@ -0,0 +1,143 @@ +classdef SMFA < eegtoolkit.classification.ClassifierBase + + properties (Constant) + + end + + properties (Access = public) + W_SMFA; + PCA_mat; + trainFeat; + NumSubclasses; + SigmaCoeff; + kInt; + kPen; + end + + methods (Access = public) + function SMFA = SMFA(instanceSet,NumS,S,kInt,kPen)%,NumSubclasses,SigmaCoeff,kInt,kPen) + if nargin == 1 + SMFA.instanceSet = instanceSet; + else + SMFA.NumSubclasses = NumS; + SMFA.SigmaCoeff = S; + SMFA.kInt = kInt; + SMFA.kPen = kPen; + end + + end + + + function SMFA = build(SMFA) + SMFA.reset(); + data = SMFA.instanceSet.getInstances; + data = data'; + labels = SMFA.instanceSet.getLabels; + unique(labels) + numTrials = length(labels); + + PCA_W=SMFA.pca_func(data); +% PCA_W=eye(size(data,1)); + train_Data=PCA_W'*data; + +% Sigma = SMFA_Classifier.SigmaCoeff; + NSubClasses = SMFA.NumSubclasses; + D=pdist2(train_Data',train_Data'); +% STrain = SGE_GramMatrix(train_Data,'gau',Sigma*mean(D(:))); + STrain = 1-(D/max(D(:))); + + pt=0; + ct=0; + ClustersOfClasses = SGE_SubclassExtract(train_Data,labels,NSubClasses,pt,ct); + [yyTrain,~,~] = SGE_SubclassLabels(ClustersOfClasses,labels); + + + Par.mode = 'SMFA'; + Par.SimilMatrix = STrain; + Par.kInt = SMFA.kInt; + Par.kPen = SMFA.kPen; + dim = min([Par.kPen,size(train_Data,1)]); + + [W,Wp] = SGE_GraphConstruct(yyTrain,Par); + [TransMatrix,~] = SGE_Mapping(train_Data,dim,W,Wp); + SMFA.W_SMFA = TransMatrix; + SMFA.PCA_mat=PCA_W; + mtrainFeat=SGE_Projection(train_Data,1:dim,TransMatrix); + SMFA.trainFeat=mtrainFeat; +% figure,gplotmatrix(mtrainFeat',[],labels) + end + + function [output, probabilities, ranking] = classifyInstance(SMFA,instance) + + N = size(instance,1); + instance = instance'; + + test_Data=SMFA.PCA_mat'*instance; +% test_Data=[ones(1,N);test_Data]; + testFeat=SMFA.W_SMFA'*test_Data; +% output=knnclassify(testFeat',SMFA_Classifier.trainFeat',SMFA_Classifier.instanceSet.getLabels,5,'euclidean'); + X = SMFA.trainFeat; + y = SMFA.instanceSet.getLabels; + + %Nearest Centroid + [~,output] = SGE_Classification(X,y',testFeat,0,'euc'); + +% %SVM Linear +% [~,output] = SGE_Classification(X,y',testFeat,[1,1,1,0,1],'euc'); + +% %SVM RBF +% [~,output] = SGE_Classification(X,y',testFeat,[2,3,2/size(X,1),0,1],'euc'); + + output = output(1,:)'; + probabilities=zeros(N,1); + ranking=zeros(N,1); +% figure,gplotmatrix(testFeat',[],output) + + end + + function SMFA = reset(SMFA) + %delete all stored models + SMFA.W_SMFA=[]; + SMFA.PCA_mat=[]; + SMFA.trainFeat=[]; + end + + function configInfo = getConfigInfo(SMFA) + configInfo = sprintf('MLR_Classifier'); + end + + + function time = getTime(SMFA) + + end + + end + methods (Access = private) + function Proj_W=pca_func(MLR,data) + Proj_W=[]; + meanData=mean(data,2); + data=data-repmat(meanData,1,size(data,2)); + % stdVar=std(data')'; + % staData=(data-repmat(meanData,1,size(data,2)))./repmat(stdVar,1,size(data,2)); + % data=staData; + [V,S]=eig(data'*data); + [sorted_diagS,sorted_rank]=sort(diag(S),'descend'); + sorted_S=diag(sorted_diagS); + V=V(:,sorted_rank); + r=rank(sorted_S); + S1=sorted_S(1:r,1:r); + V1=V(:,1:r); + U=data*V1*S1^(-0.5); + %[sorted_S,sorted_rank]=sort(diag(S),'descend'); + All_energy=sum(diag(S1)); + sorted_energy=diag(S1); + for j=1:r + if (sum(sorted_energy(1:j))/All_energy)>0.99 + break + end + end + Proj_W=U(:,1:j); + end + end +end + diff --git a/doc/+eegtoolkit/+classification/@SMFA/graph.dot b/doc/+eegtoolkit/+classification/@SMFA/graph.dot new file mode 100644 index 0000000..125d60e --- /dev/null +++ b/doc/+eegtoolkit/+classification/@SMFA/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + SMFA -> SMFA; + + SMFA [URL="SMFA.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@SMFA/graph.html b/doc/+eegtoolkit/+classification/@SMFA/graph.html new file mode 100644 index 0000000..d7fccb1 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@SMFA/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+classification/@SMFA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@SMFA >
+

Dependency Graph for ./+eegtoolkit/+classification/@SMFA

+ +
+Dependency Graph for ./+eegtoolkit/+classification/@SMFA + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@SMFA/graph.map b/doc/+eegtoolkit/+classification/@SMFA/graph.map new file mode 100644 index 0000000..d632bbb --- /dev/null +++ b/doc/+eegtoolkit/+classification/@SMFA/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@SMFA/graph.png b/doc/+eegtoolkit/+classification/@SMFA/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..edb8b2713b6012ddfab850c20a5cb82904b81b4b GIT binary patch literal 3906 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+classification/@SMFA/index.html b/doc/+eegtoolkit/+classification/@SMFA/index.html new file mode 100644 index 0000000..7b64ac1 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@SMFA/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+classification/@SMFA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+classification/@SMFA >
+ +

Index for ./+eegtoolkit/+classification/@SMFA

+ +

Matlab files in this directory:

+ +
 SMFA
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+experiment/@Experimenter/Experimenter.html b/doc/+eegtoolkit/+experiment/@Experimenter/Experimenter.html new file mode 100644 index 0000000..6bc6b1d --- /dev/null +++ b/doc/+eegtoolkit/+experiment/@Experimenter/Experimenter.html @@ -0,0 +1,455 @@ + + + + Description of Experimenter + + + + + + + + + +
Home > +eegtoolkit > +experiment > @Experimenter > Experimenter.m
+ + + +

Experimenter +

+ +

PURPOSE ^

+
EXPERIMENTER class
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
 EXPERIMENTER class
+ Wraps all the necessary objects for performing an experiment. 
+Before running an experiment all the required properties must be set.
+ Required:
+ - session
+ - featextraction
+ - evalMethod
+ - classification
+ Optional:
+ - featselection
+ - aggregator
+ - preprocessing
+
+ to run the experiment execute the "run()" method.
+ Example:
+ experiment = eegtoolkit.experiment.Experimenter;
+ experiment.session = eegtoolkit.util.Session;
+ experiment.session.loadSubject(1);
+ experiment.transformer = eegtoolkit.featextraction.PWelch;
+ experiment.extractor = eegtoolkit.featselection.FEAST;
+ experiment.classification = eegtoolkit.classification.LIBSVM;
+ experiment.evalMethod = experiment.evalMethod.EVAL_METHOD_LOSO;
+ experiment.run;
+ results = experiment.results;
+ confmatrix = results{1}.getConfusionMatrix;
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

Experimenter.m

+

SOURCE CODE ^

+
0001 % EXPERIMENTER class
+0002 % Wraps all the necessary objects for performing an experiment.
+0003 %Before running an experiment all the required properties must be set.
+0004 % Required:
+0005 % - session
+0006 % - featextraction
+0007 % - evalMethod
+0008 % - classification
+0009 % Optional:
+0010 % - featselection
+0011 % - aggregator
+0012 % - preprocessing
+0013 %
+0014 % to run the experiment execute the "run()" method.
+0015 % Example:
+0016 % experiment = eegtoolkit.experiment.Experimenter;
+0017 % experiment.session = eegtoolkit.util.Session;
+0018 % experiment.session.loadSubject(1);
+0019 % experiment.transformer = eegtoolkit.featextraction.PWelch;
+0020 % experiment.extractor = eegtoolkit.featselection.FEAST;
+0021 % experiment.classification = eegtoolkit.classification.LIBSVM;
+0022 % experiment.evalMethod = experiment.evalMethod.EVAL_METHOD_LOSO;
+0023 % experiment.run;
+0024 % results = experiment.results;
+0025 % confmatrix = results{1}.getConfusionMatrix;
+0026 classdef Experimenter < handle
+0027     properties (Constant)
+0028         EVAL_METHOD_LOOCV = 0; % Leave One Out Cross-Validation
+0029         EVAL_METHOD_LOSO = 1; % Leave One Subject Out
+0030         EVAL_METHOD_LOBO = 2;
+0031         EVAL_METHOD_SPLIT = 3;
+0032         EVAL_METHOD_XFOLD_CV = 4;
+0033         EVAL_METHOD_LOSO_LOBO = 5;
+0034     end
+0035     
+0036     properties (Access = public)
+0037         session; % The Session object. Trials must be loaded before run() is executed
+0038         preprocessing;
+0039         featextraction; % A transformer object
+0040         aggregator;
+0041         featselection; % An extractor object
+0042         evalMethod; % The evaluation method
+0043         classification; % A classifier object
+0044         results; % A cell array containing objects of the 'ResultEvaluator' class.
+0045         trainresults;
+0046         subjectids;
+0047         sessionids;
+0048     end
+0049     
+0050     methods
+0051         function E = Experimenter(evalMethod)
+0052             if nargin > 0
+0053                 E.evalMethod = evalMethod;
+0054             else E.evalMethod = 0;
+0055             end
+0056             E.results = {};
+0057         end
+0058         function E = run(E,varargin)
+0059             if(length(varargin)==1)
+0060                 numFolds = varargin{1};
+0061             elseif(length(varargin)==2)
+0062                 trainIDx = varargin{1};
+0063                 testIDx = varargin{2};
+0064             end
+0065             % Runs an experiment
+0066             E.checkCompatibility;
+0067             E.subjectids = E.session.subjectids;
+0068             E.sessionids = E.session.sessionids;
+0069             trials = {};
+0070             for i=1:length(E.session.trials)
+0071                 trials{i} = eegtoolkit.util.Trial(E.session.trials{i}.signal,...
+0072                             E.session.trials{i}.label,E.session.trials{i}.samplingRate,E.session.trials{i}.subjectid,E.session.trials{i}.sessionid,E.session.trials{i}.type);
+0073             end
+0074             if ~isempty(E.preprocessing)
+0075                 for i=1:length(E.preprocessing)
+0076                     if isa(E.preprocessing{i},'eegtoolkit.preprocessing.Windsorize')
+0077                         E.preprocessing{i}.subjectids = E.subjectids;
+0078                     end
+0079                     trials = E.preprocessing{i}.process(trials);
+0080                 end
+0081             end
+0082             disp('feature extraction ...');
+0083             if iscell(E.featextraction)
+0084                 numExtract = length(E.featextraction);
+0085                 for i=1:numExtract
+0086                     E.featextraction{i}.trials = trials;
+0087                     E.featextraction{i}.extract;    
+0088                 end
+0089                 E.aggregator.featextractors = E.featextraction;
+0090                 E.aggregator.aggregate;
+0091                 instanceSet = E.aggregator.instanceSet;
+0092             else
+0093                 E.featextraction.trials = trials;
+0094                 E.featextraction.extract;
+0095                 instanceSet = E.featextraction.getInstanceSet;
+0096             end
+0097             if ~isempty(E.featselection)
+0098                 E.featselection.originalInstanceSet = instanceSet;
+0099                 disp('feature selection ...');
+0100                 E.featselection.compute;
+0101                 E.classification.instanceSet = E.featselection.filteredInstanceSet;
+0102             else
+0103                 E.classification.instanceSet = instanceSet;
+0104             end
+0105             disp('evaluating..');
+0106             switch E.evalMethod
+0107                 case E.EVAL_METHOD_LOOCV
+0108                     E.leaveOneOutCV();
+0109                 case E.EVAL_METHOD_LOSO
+0110                     subjects = unique(E.subjectids);
+0111                     instanceSet = E.classification.instanceSet;
+0112                     if isa(E.classification,'eegtoolkit.classification.LIBSVMFast')
+0113                         instanceSet.K = instanceSet.computeKernel(E.classification.kernel,E.classification.gamma,E.classification.maxlag,E.classification.scaleopt);
+0114                     end
+0115                     for i=1:length(subjects)
+0116                         fprintf('leaving subject #%d out\n', i);
+0117                         if isa(E.classification,'eegtoolkit.classification.LIBSVMFast')
+0118                             E.leaveOneSubjectOutFast(subjects(i), instanceSet);
+0119                         else
+0120                             
+0121                             E.leaveOneSubjectOut(subjects(i), instanceSet);
+0122                         end
+0123                         
+0124                     end
+0125                 case E.EVAL_METHOD_LOBO
+0126                     sessions = unique(E.sessionids);
+0127                     instanceSet = E.classification.instanceSet;
+0128                     for i=1:length(sessions)
+0129                         fprintf('leaving session #%d out\n', i);
+0130                         E.leaveOneSessionOut(sessions(i), instanceSet);
+0131                     end
+0132                 case E.EVAL_METHOD_SPLIT
+0133                     instanceSet = E.classification.instanceSet;
+0134                     E.splitTest(trainIDx,testIDx,instanceSet);
+0135                 case E.EVAL_METHOD_XFOLD_CV
+0136                     instanceSet = E.classification.instanceSet;
+0137                     E.kfoldCrossValidation(instanceSet,numFolds);
+0138                 case E.EVAL_METHOD_LOSO_LOBO
+0139                     instanceSet = E.classification.instanceSet;
+0140                     E.leaveOneSubjectOutLeaveOneBlockOut(instanceSet);
+0141                 otherwise
+0142                     error ('eval method not set or invalid');
+0143             end
+0144         end
+0145         
+0146         function itrs = getITR(E)
+0147             for i=1:length(E.preprocessing)
+0148                 if isa(E.preprocessing{i},'eegtoolkit.preprocessing.SampleSelection')
+0149                     %T = time in seconds;
+0150                     T = (E.preprocessing{i}.sampleRange(2)-E.preprocessing{i}.sampleRange(1)+1)/E.preprocessing{i}.samplingRate;
+0151                 end
+0152             end
+0153             if isempty(T)
+0154                 error('to calculate ITR the SampleSelection preprocessing step must be added to the experiment');
+0155             end
+0156             for i=1:length(E.results)
+0157                 itrs(i) = E.results{i}.getITR(T);
+0158             end
+0159         end
+0160         function time = getTime(E)
+0161             info = 'Average time elapsed for trial:\n';
+0162             total = 0;
+0163             if ~isempty(E.preprocessing)
+0164                 info = strcat(info, 'Preprocessing:\n');
+0165                 for i=1:length(E.preprocessing)
+0166                     info = strcat(info, num2str(E.preprocessing{i}.getTime));
+0167                     total = total + E.preprocessing{i}.getTime;
+0168                     info = strcat(info, '\n');
+0169                 end
+0170             end
+0171             if ~isempty(E.featextraction)
+0172                 info = strcat(info, 'Feature Extraction:\n');
+0173                 if ~iscell(E.featextraction)
+0174                     info = strcat(info, num2str(E.featextraction.getTime));
+0175                     total = total + E.featextraction.getTime;
+0176                     info = strcat(info, '\n');
+0177                 else
+0178                     for i=1:length(E.featextraction)
+0179                         info = strcat(info, num2str(E.featextraction{i}.getTime));
+0180                         total = total + E.featextraction{i}.getTime;
+0181                         info = strcat(info,'\n');
+0182                     end
+0183                 end
+0184             end
+0185             if ~isempty(E.aggregator)
+0186                 info = strcat(info, 'Aggregation:\n');
+0187                 info = strcat(info, num2str(E.aggregator.getTime));
+0188                 total = total + E.aggregator.getTime;
+0189                 info = strcat(info, '\n');
+0190             end
+0191             if ~isempty(E.featselection)
+0192                 info = strcat(info, 'FeatureSelection:\n');
+0193                 info = strcat(info, num2str(E.featselection.getTime));
+0194                 total = total + E.featselection.getTime;
+0195                 info = strcat(info, '\n');
+0196             end
+0197             if ~isempty(E.classification)
+0198                 info = strcat(info, 'Classification (Prediction):\n');
+0199                 info = strcat(info, num2str(E.classification.getTime));
+0200                 total = total + E.classification.getTime;
+0201                 info = strcat(info, '\n');
+0202             end
+0203             info = strcat(info, 'Total:\n');
+0204             info = strcat(info, num2str(total));
+0205             time = sprintf(info);
+0206         end
+0207         
+0208         function info = getExperimentInfo(E)
+0209             % Prints the configuration info of the experiment
+0210             info = 'Experiment Configuration:\n';
+0211             if ~isempty(E.preprocessing)
+0212                 for i=1:length(E.preprocessing)
+0213                     info = strcat(info, E.preprocessing{i}.getConfigInfo);
+0214                     info = strcat(info,'\n');
+0215                 end
+0216             end
+0217             if ~isempty(E.featextraction)
+0218                 if ~iscell(E.featextraction)
+0219                     info = strcat(info, E.featextraction.getConfigInfo);
+0220                     info = strcat(info,'\n');
+0221                 else
+0222                     for i=1:length(E.featextraction)
+0223                         info = strcat(info, E.featextraction{i}.getConfigInfo);
+0224                         info = strcat(info,'\n');
+0225                     end
+0226                 end
+0227             end
+0228             if ~isempty(E.aggregator)
+0229                 info = strcat(info, E.aggregator.getConfigInfo);
+0230                 info = strcat(info, '\n');
+0231             end
+0232             if ~isempty(E.featselection)
+0233                 info = strcat(info, E.featselection.getConfigInfo);
+0234                 info = strcat(info, '\n');
+0235             end
+0236             if ~isempty(E.classification)
+0237                 info = strcat(info, E.classification.getConfigInfo);
+0238                 info = strcat(info, '\n');
+0239             end
+0240             info = sprintf(info);
+0241         end
+0242         
+0243     end
+0244     
+0245     methods (Access = private)
+0246         
+0247         function E = checkCompatibility(E)
+0248             if iscell(E.featextraction)
+0249                 if isempty(E.aggregator)
+0250                     error ('Provided many feature extractors but not an Aggregator');
+0251                 end
+0252             end
+0253             if isa(E.classification,'eegtoolkit.classification.LIBSVMFast') && E.evalMethod == 0
+0254                 error('LIBSVMFast not supported for LOOCV eval method');
+0255             end
+0256         end
+0257             
+0258         function E = leaveOneOutCV(E)
+0259             %leave one out cross validation
+0260             instanceSet = E.classification.instanceSet;
+0261             numInstances = instanceSet.getNumInstances;
+0262             outputLabels = zeros(numInstances,1);
+0263             outputScores = zeros(numInstances,1);
+0264             outputRanking = zeros(numInstances, instanceSet.getNumLabels);
+0265             h = waitbar(0,'Cross-validating..');
+0266             for i=1:numInstances
+0267                 waitbar(i/numInstances,h,sprintf('Cross-validating fold: %d/%d', i, numInstances));
+0268                 %train the classifier without 1 instance
+0269                 E.classification.instanceSet = instanceSet.removeInstancesWithIndices(i);
+0270                 E.classification.build();
+0271                 %predict the label of the omitted instance
+0272                 [outputLabels(i,1), outputScores(i,1), outputRanking(i,:)] = E.classification.classifyInstance(instanceSet.getInstancesWithIndices(i));
+0273             end
+0274             resultSet = eegtoolkit.util.ResultSet(instanceSet.getDataset, outputLabels, outputScores, outputRanking);
+0275             E.results{length(E.results)+1} = eegtoolkit.experiment.ResultEvaluator(resultSet);
+0276             close(h);
+0277         end
+0278         
+0279         function E = kfoldCrossValidation(E,instanceSet,numFolds)
+0280             numInstances = instanceSet.getNumInstances;
+0281             indices = crossvalind('Kfold', numInstances, numFolds);
+0282             outputLabels = zeros(numInstances,1);
+0283             outputScores = zeros(numInstances,1);
+0284             outputRanking = zeros(numInstances,instanceSet.getNumLabels);
+0285             h = waitbar(0,'Cross-validating..');
+0286             for i=1:numFolds
+0287                 waitbar(i/numFolds,h,sprintf('Cross-validating fold: %d/%d',i,numFolds));
+0288                 testSet = find(indices==i);
+0289                 E.classification.instanceSet = instanceSet.removeInstancesWithIndices(testSet);
+0290                 E.classification.build();
+0291                 
+0292                 [outputLabels(testSet,1), outputScores(testSet,1), outputRanking(testSet,:)] = E.classification.classifyInstance(instanceSet.getInstancesWithIndices(testSet));
+0293             end
+0294             resultSet = eegtoolkit.util.ResultSet(instanceSet.getDataset, outputLabels, outputScores, outputRanking);
+0295             E.results{length(E.results)+1} = eegtoolkit.experiment.ResultEvaluator(resultSet);
+0296             close(h);
+0297         end
+0298         
+0299         function resultSet = leaveOneSubjectOut(E, subjectid, instanceSet)
+0300             testingset = find(E.subjectids == subjectid);
+0301             E.classification.instanceSet = instanceSet.removeInstancesWithIndices(testingset);
+0302             E.classification.build();
+0303             [outputLabels, outputScores, outputRanking] = E.classification.classifyInstance(instanceSet.getInstancesWithIndices(testingset));
+0304             resultSet = eegtoolkit.util.ResultSet(instanceSet.getDatasetWithIndices(testingset), outputLabels, outputScores, outputRanking);
+0305             E.results{length(E.results)+1} = eegtoolkit.experiment.ResultEvaluator(resultSet);
+0306         end
+0307         
+0308                 
+0309         function resultSet = leaveOneSubjectOutLeaveOneBlockOut(E, instanceSet)
+0310             subjects = unique(E.subjectids);
+0311             sessions = unique(E.sessionids);
+0312             for i=1:length(subjects)
+0313                 numInstancesForSubject = sum(E.subjectids==subjects(i));
+0314                 outputLabels = zeros(numInstancesForSubject,1);
+0315                 outputScores = zeros(numInstancesForSubject,1);
+0316                 outputRanking = zeros(numInstancesForSubject,instanceSet.getNumLabels());
+0317                 for j=1:length(sessions)
+0318 %                     tempResults{j} = E.leaveOneSessionOut(sessions(j),tempInstanceSet);
+0319                     sessionidsSubset = E.sessionids(E.subjectids==subjects(i));
+0320                     testIndices = sessionidsSubset==sessions(j);
+0321                     numInstancesForSession = sum(E.sessionids==sessions(j)&E.subjectids==subjects(i));
+0322                     testingset = find(E.sessionids==sessions(j)&E.subjectids==subjects(i));
+0323                     nottrainset = find(E.sessionids==sessions(j)|E.subjectids~=subjects(i));
+0324                     E.classification.instanceSet = instanceSet.removeInstancesWithIndices(nottrainset);
+0325                     E.classification.build();
+0326                     [outputLabels(testIndices,:), outputScores(testIndices,:), outputRanking(testIndices,:)] = ...
+0327                         E.classification.classifyInstance(instanceSet.getInstancesWithIndices(testingset));
+0328                     
+0329                 end
+0330                 sIndices = find(E.subjectids==subjects(i));
+0331                 resultSet = eegtoolkit.util.ResultSet(instanceSet.getDatasetWithIndices(sIndices),outputLabels,outputScores,outputRanking);
+0332                 E.results{length(E.results)+1} = eegtoolkit.experiment.ResultEvaluator(resultSet);
+0333                 %merge the results
+0334             end
+0335         end
+0336         
+0337         
+0338         function resultSet = leaveOneSessionOut(E, sessionId, instanceSet)
+0339             testingset = find(E.sessionids == sessionId);
+0340             trainset = find(E.sessionids ~= sessionId);
+0341             E.classification.instanceSet = instanceSet.removeInstancesWithIndices(testingset);
+0342             E.classification.build();
+0343             [outputLabels, outputScores, outputRanking] = E.classification.classifyInstance(instanceSet.getInstancesWithIndices(testingset));
+0344             [trainoutputLabels, trainoutputScores, trainoutputRanking] = E.classification.classifyInstance(instanceSet.getInstancesWithIndices(trainset));
+0345             resultSet = eegtoolkit.util.ResultSet(instanceSet.getDatasetWithIndices(testingset), outputLabels, outputScores, outputRanking);
+0346             trainresultSet = eegtoolkit.util.ResultSet(instanceSet.getDatasetWithIndices(trainset), trainoutputLabels, trainoutputScores, trainoutputRanking);
+0347             E.results{length(E.results)+1} = eegtoolkit.experiment.ResultEvaluator(resultSet);
+0348             E.trainresults{length(E.trainresults)+1} = eegtoolkit.experiment.ResultEvaluator(trainresultSet);
+0349         end
+0350         
+0351         function resultSet = leaveOneSubjectOutFast(E, subjectid, instanceSet)
+0352             testingset = E.subjectids == subjectid;
+0353             E.classification.Ktrain = instanceSet.getTrainKernel(~testingset);
+0354             E.classification.Ktest = instanceSet.getTestKernel(~testingset,testingset);
+0355             testingset = find(E.subjectids == subjectid);
+0356             E.classification.instanceSet = instanceSet.removeInstancesWithIndices(testingset);
+0357             E.classification.build();
+0358             [outputLabels, outputScores, outputRanking] = E.classification.classifyInstance();
+0359             resultSet = eegtoolkit.util.ResultSet(instanceSet.getDatasetWithIndices(testingset), outputLabels, outputScores, outputRanking);
+0360             resultEvaluator = eegtoolkit.experiment.ResultEvaluator(resultSet);
+0361             resultEvaluator.subjectid = E.subjectids(E.subjectids==subjectid);
+0362             resultEvaluator.sessionid = E.session.sessionids(E.subjectids==subjectid);
+0363             E.results{length(E.results)+1} = resultEvaluator;
+0364         end
+0365 
+0366         function resultSet = splitTest(E,trainIDx,testIDx, instanceSet)
+0367             E.classification.instanceSet = instanceSet.removeInstancesWithIndices(testIDx);
+0368             E.classification.build();
+0369             [outputLabels, outputScores, outputRanking] = E.classification.classifyInstance(instanceSet.getInstancesWithIndices(testIDx));
+0370             resultSet = eegtoolkit.util.ResultSet(instanceSet.getDatasetWithIndices(testIDx), outputLabels, outputScores, outputRanking);
+0371             resultEvaluator = eegtoolkit.experiment.ResultEvaluator(resultSet);
+0372             E.results{length(E.results) + 1} = resultEvaluator;
+0373         end
+0374         
+0375 
+0376                 
+0377             
+0378     end
+0379     
+0380 end
+0381
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+experiment/@Experimenter/Experimenter.m b/doc/+eegtoolkit/+experiment/@Experimenter/Experimenter.m new file mode 100644 index 0000000..9b28677 --- /dev/null +++ b/doc/+eegtoolkit/+experiment/@Experimenter/Experimenter.m @@ -0,0 +1,381 @@ +% EXPERIMENTER class +% Wraps all the necessary objects for performing an experiment. +%Before running an experiment all the required properties must be set. +% Required: +% - session +% - featextraction +% - evalMethod +% - classification +% Optional: +% - featselection +% - aggregator +% - preprocessing +% +% to run the experiment execute the "run()" method. +% Example: +% experiment = eegtoolkit.experiment.Experimenter; +% experiment.session = eegtoolkit.util.Session; +% experiment.session.loadSubject(1); +% experiment.transformer = eegtoolkit.featextraction.PWelch; +% experiment.extractor = eegtoolkit.featselection.FEAST; +% experiment.classification = eegtoolkit.classification.LIBSVM; +% experiment.evalMethod = experiment.evalMethod.EVAL_METHOD_LOSO; +% experiment.run; +% results = experiment.results; +% confmatrix = results{1}.getConfusionMatrix; +classdef Experimenter < handle + properties (Constant) + EVAL_METHOD_LOOCV = 0; % Leave One Out Cross-Validation + EVAL_METHOD_LOSO = 1; % Leave One Subject Out + EVAL_METHOD_LOBO = 2; + EVAL_METHOD_SPLIT = 3; + EVAL_METHOD_XFOLD_CV = 4; + EVAL_METHOD_LOSO_LOBO = 5; + end + + properties (Access = public) + session; % The Session object. Trials must be loaded before run() is executed + preprocessing; + featextraction; % A transformer object + aggregator; + featselection; % An extractor object + evalMethod; % The evaluation method + classification; % A classifier object + results; % A cell array containing objects of the 'ResultEvaluator' class. + trainresults; + subjectids; + sessionids; + end + + methods + function E = Experimenter(evalMethod) + if nargin > 0 + E.evalMethod = evalMethod; + else E.evalMethod = 0; + end + E.results = {}; + end + function E = run(E,varargin) + if(length(varargin)==1) + numFolds = varargin{1}; + elseif(length(varargin)==2) + trainIDx = varargin{1}; + testIDx = varargin{2}; + end + % Runs an experiment + E.checkCompatibility; + E.subjectids = E.session.subjectids; + E.sessionids = E.session.sessionids; + trials = {}; + for i=1:length(E.session.trials) + trials{i} = eegtoolkit.util.Trial(E.session.trials{i}.signal,... + E.session.trials{i}.label,E.session.trials{i}.samplingRate,E.session.trials{i}.subjectid,E.session.trials{i}.sessionid,E.session.trials{i}.type); + end + if ~isempty(E.preprocessing) + for i=1:length(E.preprocessing) + if isa(E.preprocessing{i},'eegtoolkit.preprocessing.Windsorize') + E.preprocessing{i}.subjectids = E.subjectids; + end + trials = E.preprocessing{i}.process(trials); + end + end + disp('feature extraction ...'); + if iscell(E.featextraction) + numExtract = length(E.featextraction); + for i=1:numExtract + E.featextraction{i}.trials = trials; + E.featextraction{i}.extract; + end + E.aggregator.featextractors = E.featextraction; + E.aggregator.aggregate; + instanceSet = E.aggregator.instanceSet; + else + E.featextraction.trials = trials; + E.featextraction.extract; + instanceSet = E.featextraction.getInstanceSet; + end + if ~isempty(E.featselection) + E.featselection.originalInstanceSet = instanceSet; + disp('feature selection ...'); + E.featselection.compute; + E.classification.instanceSet = E.featselection.filteredInstanceSet; + else + E.classification.instanceSet = instanceSet; + end + disp('evaluating..'); + switch E.evalMethod + case E.EVAL_METHOD_LOOCV + E.leaveOneOutCV(); + case E.EVAL_METHOD_LOSO + subjects = unique(E.subjectids); + instanceSet = E.classification.instanceSet; + if isa(E.classification,'eegtoolkit.classification.LIBSVMFast') + instanceSet.K = instanceSet.computeKernel(E.classification.kernel,E.classification.gamma,E.classification.maxlag,E.classification.scaleopt); + end + for i=1:length(subjects) + fprintf('leaving subject #%d out\n', i); + if isa(E.classification,'eegtoolkit.classification.LIBSVMFast') + E.leaveOneSubjectOutFast(subjects(i), instanceSet); + else + + E.leaveOneSubjectOut(subjects(i), instanceSet); + end + + end + case E.EVAL_METHOD_LOBO + sessions = unique(E.sessionids); + instanceSet = E.classification.instanceSet; + for i=1:length(sessions) + fprintf('leaving session #%d out\n', i); + E.leaveOneSessionOut(sessions(i), instanceSet); + end + case E.EVAL_METHOD_SPLIT + instanceSet = E.classification.instanceSet; + E.splitTest(trainIDx,testIDx,instanceSet); + case E.EVAL_METHOD_XFOLD_CV + instanceSet = E.classification.instanceSet; + E.kfoldCrossValidation(instanceSet,numFolds); + case E.EVAL_METHOD_LOSO_LOBO + instanceSet = E.classification.instanceSet; + E.leaveOneSubjectOutLeaveOneBlockOut(instanceSet); + otherwise + error ('eval method not set or invalid'); + end + end + + function itrs = getITR(E) + for i=1:length(E.preprocessing) + if isa(E.preprocessing{i},'eegtoolkit.preprocessing.SampleSelection') + %T = time in seconds; + T = (E.preprocessing{i}.sampleRange(2)-E.preprocessing{i}.sampleRange(1)+1)/E.preprocessing{i}.samplingRate; + end + end + if isempty(T) + error('to calculate ITR the SampleSelection preprocessing step must be added to the experiment'); + end + for i=1:length(E.results) + itrs(i) = E.results{i}.getITR(T); + end + end + function time = getTime(E) + info = 'Average time elapsed for trial:\n'; + total = 0; + if ~isempty(E.preprocessing) + info = strcat(info, 'Preprocessing:\n'); + for i=1:length(E.preprocessing) + info = strcat(info, num2str(E.preprocessing{i}.getTime)); + total = total + E.preprocessing{i}.getTime; + info = strcat(info, '\n'); + end + end + if ~isempty(E.featextraction) + info = strcat(info, 'Feature Extraction:\n'); + if ~iscell(E.featextraction) + info = strcat(info, num2str(E.featextraction.getTime)); + total = total + E.featextraction.getTime; + info = strcat(info, '\n'); + else + for i=1:length(E.featextraction) + info = strcat(info, num2str(E.featextraction{i}.getTime)); + total = total + E.featextraction{i}.getTime; + info = strcat(info,'\n'); + end + end + end + if ~isempty(E.aggregator) + info = strcat(info, 'Aggregation:\n'); + info = strcat(info, num2str(E.aggregator.getTime)); + total = total + E.aggregator.getTime; + info = strcat(info, '\n'); + end + if ~isempty(E.featselection) + info = strcat(info, 'FeatureSelection:\n'); + info = strcat(info, num2str(E.featselection.getTime)); + total = total + E.featselection.getTime; + info = strcat(info, '\n'); + end + if ~isempty(E.classification) + info = strcat(info, 'Classification (Prediction):\n'); + info = strcat(info, num2str(E.classification.getTime)); + total = total + E.classification.getTime; + info = strcat(info, '\n'); + end + info = strcat(info, 'Total:\n'); + info = strcat(info, num2str(total)); + time = sprintf(info); + end + + function info = getExperimentInfo(E) + % Prints the configuration info of the experiment + info = 'Experiment Configuration:\n'; + if ~isempty(E.preprocessing) + for i=1:length(E.preprocessing) + info = strcat(info, E.preprocessing{i}.getConfigInfo); + info = strcat(info,'\n'); + end + end + if ~isempty(E.featextraction) + if ~iscell(E.featextraction) + info = strcat(info, E.featextraction.getConfigInfo); + info = strcat(info,'\n'); + else + for i=1:length(E.featextraction) + info = strcat(info, E.featextraction{i}.getConfigInfo); + info = strcat(info,'\n'); + end + end + end + if ~isempty(E.aggregator) + info = strcat(info, E.aggregator.getConfigInfo); + info = strcat(info, '\n'); + end + if ~isempty(E.featselection) + info = strcat(info, E.featselection.getConfigInfo); + info = strcat(info, '\n'); + end + if ~isempty(E.classification) + info = strcat(info, E.classification.getConfigInfo); + info = strcat(info, '\n'); + end + info = sprintf(info); + end + + end + + methods (Access = private) + + function E = checkCompatibility(E) + if iscell(E.featextraction) + if isempty(E.aggregator) + error ('Provided many feature extractors but not an Aggregator'); + end + end + if isa(E.classification,'eegtoolkit.classification.LIBSVMFast') && E.evalMethod == 0 + error('LIBSVMFast not supported for LOOCV eval method'); + end + end + + function E = leaveOneOutCV(E) + %leave one out cross validation + instanceSet = E.classification.instanceSet; + numInstances = instanceSet.getNumInstances; + outputLabels = zeros(numInstances,1); + outputScores = zeros(numInstances,1); + outputRanking = zeros(numInstances, instanceSet.getNumLabels); + h = waitbar(0,'Cross-validating..'); + for i=1:numInstances + waitbar(i/numInstances,h,sprintf('Cross-validating fold: %d/%d', i, numInstances)); + %train the classifier without 1 instance + E.classification.instanceSet = instanceSet.removeInstancesWithIndices(i); + E.classification.build(); + %predict the label of the omitted instance + [outputLabels(i,1), outputScores(i,1), outputRanking(i,:)] = E.classification.classifyInstance(instanceSet.getInstancesWithIndices(i)); + end + resultSet = eegtoolkit.util.ResultSet(instanceSet.getDataset, outputLabels, outputScores, outputRanking); + E.results{length(E.results)+1} = eegtoolkit.experiment.ResultEvaluator(resultSet); + close(h); + end + + function E = kfoldCrossValidation(E,instanceSet,numFolds) + numInstances = instanceSet.getNumInstances; + indices = crossvalind('Kfold', numInstances, numFolds); + outputLabels = zeros(numInstances,1); + outputScores = zeros(numInstances,1); + outputRanking = zeros(numInstances,instanceSet.getNumLabels); + h = waitbar(0,'Cross-validating..'); + for i=1:numFolds + waitbar(i/numFolds,h,sprintf('Cross-validating fold: %d/%d',i,numFolds)); + testSet = find(indices==i); + E.classification.instanceSet = instanceSet.removeInstancesWithIndices(testSet); + E.classification.build(); + + [outputLabels(testSet,1), outputScores(testSet,1), outputRanking(testSet,:)] = E.classification.classifyInstance(instanceSet.getInstancesWithIndices(testSet)); + end + resultSet = eegtoolkit.util.ResultSet(instanceSet.getDataset, outputLabels, outputScores, outputRanking); + E.results{length(E.results)+1} = eegtoolkit.experiment.ResultEvaluator(resultSet); + close(h); + end + + function resultSet = leaveOneSubjectOut(E, subjectid, instanceSet) + testingset = find(E.subjectids == subjectid); + E.classification.instanceSet = instanceSet.removeInstancesWithIndices(testingset); + E.classification.build(); + [outputLabels, outputScores, outputRanking] = E.classification.classifyInstance(instanceSet.getInstancesWithIndices(testingset)); + resultSet = eegtoolkit.util.ResultSet(instanceSet.getDatasetWithIndices(testingset), outputLabels, outputScores, outputRanking); + E.results{length(E.results)+1} = eegtoolkit.experiment.ResultEvaluator(resultSet); + end + + + function resultSet = leaveOneSubjectOutLeaveOneBlockOut(E, instanceSet) + subjects = unique(E.subjectids); + sessions = unique(E.sessionids); + for i=1:length(subjects) + numInstancesForSubject = sum(E.subjectids==subjects(i)); + outputLabels = zeros(numInstancesForSubject,1); + outputScores = zeros(numInstancesForSubject,1); + outputRanking = zeros(numInstancesForSubject,instanceSet.getNumLabels()); + for j=1:length(sessions) +% tempResults{j} = E.leaveOneSessionOut(sessions(j),tempInstanceSet); + sessionidsSubset = E.sessionids(E.subjectids==subjects(i)); + testIndices = sessionidsSubset==sessions(j); + numInstancesForSession = sum(E.sessionids==sessions(j)&E.subjectids==subjects(i)); + testingset = find(E.sessionids==sessions(j)&E.subjectids==subjects(i)); + nottrainset = find(E.sessionids==sessions(j)|E.subjectids~=subjects(i)); + E.classification.instanceSet = instanceSet.removeInstancesWithIndices(nottrainset); + E.classification.build(); + [outputLabels(testIndices,:), outputScores(testIndices,:), outputRanking(testIndices,:)] = ... + E.classification.classifyInstance(instanceSet.getInstancesWithIndices(testingset)); + + end + sIndices = find(E.subjectids==subjects(i)); + resultSet = eegtoolkit.util.ResultSet(instanceSet.getDatasetWithIndices(sIndices),outputLabels,outputScores,outputRanking); + E.results{length(E.results)+1} = eegtoolkit.experiment.ResultEvaluator(resultSet); + %merge the results + end + end + + + function resultSet = leaveOneSessionOut(E, sessionId, instanceSet) + testingset = find(E.sessionids == sessionId); + trainset = find(E.sessionids ~= sessionId); + E.classification.instanceSet = instanceSet.removeInstancesWithIndices(testingset); + E.classification.build(); + [outputLabels, outputScores, outputRanking] = E.classification.classifyInstance(instanceSet.getInstancesWithIndices(testingset)); + [trainoutputLabels, trainoutputScores, trainoutputRanking] = E.classification.classifyInstance(instanceSet.getInstancesWithIndices(trainset)); + resultSet = eegtoolkit.util.ResultSet(instanceSet.getDatasetWithIndices(testingset), outputLabels, outputScores, outputRanking); + trainresultSet = eegtoolkit.util.ResultSet(instanceSet.getDatasetWithIndices(trainset), trainoutputLabels, trainoutputScores, trainoutputRanking); + E.results{length(E.results)+1} = eegtoolkit.experiment.ResultEvaluator(resultSet); + E.trainresults{length(E.trainresults)+1} = eegtoolkit.experiment.ResultEvaluator(trainresultSet); + end + + function resultSet = leaveOneSubjectOutFast(E, subjectid, instanceSet) + testingset = E.subjectids == subjectid; + E.classification.Ktrain = instanceSet.getTrainKernel(~testingset); + E.classification.Ktest = instanceSet.getTestKernel(~testingset,testingset); + testingset = find(E.subjectids == subjectid); + E.classification.instanceSet = instanceSet.removeInstancesWithIndices(testingset); + E.classification.build(); + [outputLabels, outputScores, outputRanking] = E.classification.classifyInstance(); + resultSet = eegtoolkit.util.ResultSet(instanceSet.getDatasetWithIndices(testingset), outputLabels, outputScores, outputRanking); + resultEvaluator = eegtoolkit.experiment.ResultEvaluator(resultSet); + resultEvaluator.subjectid = E.subjectids(E.subjectids==subjectid); + resultEvaluator.sessionid = E.session.sessionids(E.subjectids==subjectid); + E.results{length(E.results)+1} = resultEvaluator; + end + + function resultSet = splitTest(E,trainIDx,testIDx, instanceSet) + E.classification.instanceSet = instanceSet.removeInstancesWithIndices(testIDx); + E.classification.build(); + [outputLabels, outputScores, outputRanking] = E.classification.classifyInstance(instanceSet.getInstancesWithIndices(testIDx)); + resultSet = eegtoolkit.util.ResultSet(instanceSet.getDatasetWithIndices(testIDx), outputLabels, outputScores, outputRanking); + resultEvaluator = eegtoolkit.experiment.ResultEvaluator(resultSet); + E.results{length(E.results) + 1} = resultEvaluator; + end + + + + + end + +end + diff --git a/doc/+eegtoolkit/+experiment/@Experimenter/graph.dot b/doc/+eegtoolkit/+experiment/@Experimenter/graph.dot new file mode 100644 index 0000000..c2a7d3c --- /dev/null +++ b/doc/+eegtoolkit/+experiment/@Experimenter/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + Experimenter -> Experimenter; + + Experimenter [URL="Experimenter.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+experiment/@Experimenter/graph.html b/doc/+eegtoolkit/+experiment/@Experimenter/graph.html new file mode 100644 index 0000000..13301f1 --- /dev/null +++ b/doc/+eegtoolkit/+experiment/@Experimenter/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+experiment/@Experimenter + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+experiment/@Experimenter >
+

Dependency Graph for ./+eegtoolkit/+experiment/@Experimenter

+ +
+Dependency Graph for ./+eegtoolkit/+experiment/@Experimenter + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+experiment/@Experimenter/graph.map b/doc/+eegtoolkit/+experiment/@Experimenter/graph.map new file mode 100644 index 0000000..1e7afc3 --- /dev/null +++ b/doc/+eegtoolkit/+experiment/@Experimenter/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+experiment/@Experimenter/graph.png b/doc/+eegtoolkit/+experiment/@Experimenter/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..58fd336eff6f0115e429e0fed62cb236d250f79e GIT binary patch literal 4968 zcmW+)1z1yG8y}#A(jlRY6qFnxEt3}H4>FMME(t+GQc^kw($Xy;JsPAW1?ldR91RlR z;d^#=@1EV~#C^~E{^EqZRgxokK=S|sfe^^QmPUYkEBK1yVuLGZNZ=f}VH>}ZlZM>h zeKMNzkq`(Ot-Q2^np^5_n#WtU35>3mhKHLK54m<25A$#X3R-Kv+0|Uzgc9m0IGBf@`Z;Qv?7OH{k^8VtYp`)Ig zn~LU7eo`uJ+03P3A%Z`n7pU6s!-;((wnORwwb8~aieQQIO{IBKZ zNp7{!X!OC+kyGued|;=s#JhL#iG{lL&Uj{KWjlV*2tWt(BFP+j0nNbZY8O;X&P((o(Lt z`1mFG?L`!owT%r!yaIZx%$s6rYHG;3TC>p&9p_aPS&UIsT!LL9#HiMe*x9l5TzS0Ut6nT)X<5Loyl)f- zQVPr&qHK-q35bg$|E}LeQ>;-Y>+D?B@HCRJ-gkUl{pPf`#mw584dZPtf`^+sD&70? zxyPqZx{eA&E3cH5iNeCdE)M&+`CzbUKYAD^XT-nL-Rvn_m)b@Wo;+-n!xE;T?c^&1 z1B1)U%MaI=Ct}`LLJjrxU5ETo7Komn-c>jJrmfm$0>Oe*;Yv7KOE6gP45OUme6JZk z4IvEnmy3d$DJVR^fIWX6^6zXvy-L_GcxhyMy4UO9DGv`%33zNw>@4(T@9XJn zSzAcM+#r)&Bn&(x4GFLr|868N-=k@L1j7?{-Fu=@rvG1v^v~7RRXqCu66!?|Z$$-# zEP7ney}Avzwchyh@in7ZRTY)Ccyi zwVW?M)Yv+N$voraTvJtkDFcSp(030kDJj|ey4n#vRx$!ok5|>fiv|=uc{og5M;n7mv+VypEOnMD)XTU%&C@a$B?3j`nnKPV_G{2Aaoe zUP=8}&`#ROh~c#)Tl~+31v-UXQg3f>kh@Zvnp6NYNI+RfM-vAG2Q#s;Js=?=;Tq;I zz}RsSJv=%>C$wDM-*5iMC15wZNlF6EqtvOj>nzo4h)zq3pwxH6aNVDmv9V#-*3lUr z8uFc~wa+duC&BiY*qQsgu@M{)aF3apc@f=BCkLwG5x2hBC58;vOPVKyICuM6r#nc- zs)V{ysj~PDEgG}N%#da@Qc@yJcVDOGGH6asN=gd<@`WBUJ~mdT+xJ$h%95nkc52y< z8X2oBei6{z+}!{BH=RTJ-kzNRKmS4HZ}F9VpIeWcO*yzR2(gru6rQgiy#uJ~{=UAI z&saE<<&i&dnNoCqRZmI(tUAW-vL0PMcSH}{~iv9XoB4VCYj z<$m@p*EJ1hLMjFZ`*wIz>nl<4JT=ZTHO~hMV(lc%E!_rW#wWBFoCr zZ}{&h@yjn~dvlKwV%Ibo6&11b^Yfk?X|6$>wpEZtlc<;D`!xVq{usi-E3>xwom4CbJG+UC zivR{pP%wc78KP5TYXs=v;e!X84nl5wv%+@MRUs-WD&LEXR}RS$~f3knK41ha5!l}BC> zUVu`${@tE-XG#S>i&yAw^w!YP=>v$3jg5VHd9r=IH_{E+Z#sjneW;re`GG+NJErk% z^l5*2bG{ND8fq*jhokXblR=~@KR>uTl6Iv(i4V^gL}&>>>|M>Wkw5t4?v4f{0esP| zwM!f6?CI%Q+L@}H8Xc8RQ)2BZciK?;CgvW?-E>UK`RHLvN=jP4b?uDSyLU2xp5nzE zm+x(FZ{ztoZ49n~va=LO(Nb5Jg^XHPFAL+07zw0I4Gp~tl$3yYZkN=$ZI5$8;ohkb zlpESO-{#D4ohSJ?f;BBIEw0D(YK880GZvM=p(Pn1J7S*@E{=WPqwM|j`1qKIl2`50 z19P^{DVUm?S_zwe|4ckyAy@Iun-v^7&mq=Q6iNuwp@?{Qt|0-En2^xTXEBIxS!2>2 zDcp&6C>mg^*&5F&s=4cH6CS#~f&zZMrR=!$ z^S&j2vUk+|MgE+_DU0;`5Z$^D_bIvcI~v`OTK`dhR{b?F@G+DL1{-?5hXZ$cF)31~ zJ8zMOD3rFbDMpEr(-L)a;$p@rJgu*)6>gwui zZ%FaklauSdYlT@K%zj?X+1c3;Ac@kyyUu{Z=>FZq zZ`J&}xwYje-&opV2wUvqZjsj3)^3?$XJ>a@?@uD>)YH}u)iCg)fL|>UWg-eM_YNGA zewkOQ6smpL7);}O9z_t;Y0LnTm6JQ08Xq2R`!7WReX)_wD*rVu?x1et8yUL*{Jf3m zSzUJUl#5E4s~|!T@1A)T7T9eA0m^ z$ki@cKWn-5VjVd5;WM-kL{0p^%p+u(Ky%%j-Qw3SX>R_uaJ4Q7a=8^K?De&^^1{Lp zfJydECtnLT#xx8l8hmt0)SJ;=kC$tjJkBbLib7Ka?O7m~=jR8jJ;mYj7R0ihXFl6s;D%Ou{c}kkFfZqgx~=_CU0Zvk>~l$mg^7v!xIM0t zYcDpueR6zuwgH0f6nmy~aHpkIvWJNwO^uBmdpuIq%JTp*fwqH*h$QnSh1)k@tY@t6 zO+Y~8%}h<1tF=pX^n)TOny?RGJX>2^M&{-$+1c4slas$dnyKU>REY2KthmAOM;|Vp z?#_7LUY{kUq`aY{qhpI#xI^cNh={0B*y5ZD0`ZfY&m0Da`$!U5J;sm1VBrEqz3^}T zOvt1Qzf`L-2vBjHLN56|qt?6`plEBVt5xzx&;a;pCrWf!AEANAX*nseFVD!xP*$;q zVK<3JLSHHrs`Ua5VWb(OL=NR*@<^nbv=uNnHwU^&ftj>C@u+~9l$4Q1nk#`1FyKth zdlN@T9#K(Ixtz6_sgCJ?SWz^I> zQifmikC*5K&(7*n;bYG>c~G({rM9jQq?8-BVdDBhB#18?cYUI9ScR$ig0>U0vKR-` zL=!&LrGmX<(b3lKnvI9%VFQ-6Z$x8zd3jM&Qg#C$gK_rW*47kAID=1HPaTib0bPev z^Wo0YU01v8PV-C%WwFGbp1RmAG^Z)###WjSEOYx@^pOzA9l>7kqzqhja(hbvro1CH zjh0IaQ4x_K3OPMJT0r9G%VFH15!CGJ->IBRvaOl;QwC<6y+lD4Qc+R;0>BXQ$uugs zrw?fC^J$y1khAtkTG1{JlkX)ZAA7>4c&wNOL62%1N)uz_XSkRNoH||pI7E>stKRn2 z%&5jnYH^26n&;i~FtkRiTx zb#*}VvY7Ew9~~WOX>0$rvuf`$BQxa}5Lhnrxn?J%6A%CM2XTIJ!5}C|S*%_nsjmLj z!f#Vv7AVosurTyeFx~PwdgX^EhbEAW>Sg*7FKou?IXL>~NaZ?EiZN=cs!W5VPJn%0 z=OQ??t8leT9)SkjSF}QI>DMJADnN>hR~JXiJ1{^o0dscU6V0bD99Ub#Up+k%N=k!qDHf9@BRL{Z2mww}cXoCPIj!R>C@2g8Hw&tfLl;FH zM#(J;Y!p8Y0kFgQySgR*Xf)F zbXoE*cSSs2HeCUJ7WL_bZF**g0hoC@x~Su0XYitTZWUnbb>#bRMT*a`j)Oam?<`M8 z(sCbI(ONHsV`?#?&^h_JxVShJIIS12gkI z;8<{ph~$8oVPs;;R4)dNgq%DeBZIzR%=-N9pyAyh02Y2h!R*39JlSj#Ao^fQiUq~R zWG&xx4Gf6<+vxKqW@a7(?)nlDLBZ!gzW{!!)<5Gzu;gN3XE!uFJ~=rV+CEuc2=+-) zWN~(N6{TfG_DGvNBY(j2EWTH~FT2fFpxwGU^zLR{-fCU_)4a0HlovEm1npZw_V)H* zF~h%zQtDmj4AXkVj?H?h4GTajWP&xZAm#h@Jbd7u{^F=vogB#CgjT=#QO1S}TfCB) zH8?D))8(RJqo;4R(kfAx%0+~js}-t&bD5x)mX^NKPG|FJnpS_DjP!j>_XAkk0aa^z qRhJ2bXoQ9vA~(zV(;vqb4Hu;`ZS}bMFaVCuAo4Ow(xsAye*XiI_{2g0 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+experiment/@Experimenter/index.html b/doc/+eegtoolkit/+experiment/@Experimenter/index.html new file mode 100644 index 0000000..7bbd635 --- /dev/null +++ b/doc/+eegtoolkit/+experiment/@Experimenter/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+experiment/@Experimenter + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+experiment/@Experimenter >
+ +

Index for ./+eegtoolkit/+experiment/@Experimenter

+ +

Matlab files in this directory:

+ +
 ExperimenterEXPERIMENTER class
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+experiment/@ResultEvaluator/ResultEvaluator.html b/doc/+eegtoolkit/+experiment/@ResultEvaluator/ResultEvaluator.html new file mode 100644 index 0000000..abf7cae --- /dev/null +++ b/doc/+eegtoolkit/+experiment/@ResultEvaluator/ResultEvaluator.html @@ -0,0 +1,136 @@ + + + + Description of ResultEvaluator + + + + + + + + + +
Home > +eegtoolkit > +experiment > @ResultEvaluator > ResultEvaluator.m
+ + + +

ResultEvaluator +

+ +

PURPOSE ^

+
RESULTEVALUATOR class
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
 RESULTEVALUATOR class
+ Parses the results of an experiment and calculates various metrics
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

ResultEvaluator.m

+

SOURCE CODE ^

+
0001 % RESULTEVALUATOR class
+0002 % Parses the results of an experiment and calculates various metrics
+0003 classdef  ResultEvaluator < handle
+0004     properties
+0005         resultSet; % A 'ResultSet' object containing the results of an experiment
+0006         subjectid; % The subject ids corresponding
+0007         sessionid;
+0008     end
+0009     
+0010     methods 
+0011         function RE = ResultEvaluator(resultSet)
+0012             if nargin > 0
+0013                 RE.resultSet = resultSet;
+0014             end
+0015         end
+0016         
+0017         function acc = getAccuracy(RE)
+0018             conf = RE.resultSet.confusionMatrix;
+0019             acc = sum(diag(conf))/sum(sum(conf))*100;
+0020         end
+0021         
+0022         function confusionMatrix = getConfusionMatrix(RE)
+0023             %Returns the confusion matrix with labels as the last row
+0024             %if you want the confusion matrix without labels then
+0025             %access the confusionMatrix property of the resultSet directly
+0026             labels = unique(RE.resultSet.getLabels);
+0027             confusionMatrix = horzcat(RE.resultSet.confusionMatrix, labels);
+0028         end
+0029         
+0030         function acc = getAccuracyForSession(RE,session)
+0031             conf = RE.resultSet.subset(RE.sessionid==session).confusionMatrix;
+0032             acc = sum(diag(conf))/sum(sum(conf))*100;
+0033         end
+0034         
+0035         function accuracies = getAccuracyBySession(RE)
+0036             unsessions = unique(RE.sessionid);
+0037             for i=1:length(unsessions)
+0038                 accuracies(i) = RE.getAccuracyForSession(unsessions(i));
+0039             end
+0040         end
+0041         
+0042         function accuracies = getAccuracyByLabel(RE)
+0043             [rows,~] = size(RE.resultSet.confusionMatrix);
+0044             for i=1:rows
+0045                 accuracies(i) = RE.resultSet.confusionMatrix(i,i)/sum(RE.resultSet.confusionMatrix(i,:))*100;
+0046             end
+0047         end
+0048         
+0049         
+0050         function ITR = getITR(RE,T)
+0051             P = RE.getAccuracy/100;
+0052             M = RE.resultSet.getNumLabels;
+0053 %             fprintf('T = %f',T);
+0054 %             fprintf('P = %f',P);
+0055 %             fprintf('M = %f',M);
+0056 %             fprintf('\n');
+0057             ITR = (log2(M) + P*log2(P)+(1-P)*log2((1-P)/(M-1)))/T;
+0058         end
+0059         
+0060 %         function TP = getNumTruePositives(RE)
+0061 %             conf = RE.resultSet.confusionMatrix;
+0062 %             TP = diag(conf)';
+0063 %         end
+0064 %
+0065 %         function TN = getNumTrueNegatives(RE)
+0066 %             numInstances = RE.resultSet.getNumInstances;
+0067 %             FN = RE.getNumFalseNegatives;
+0068 %             TP = RE.getNumTruePositives;
+0069 %             FP = RE.getNumFalsePositives;
+0070 %             TN = numInstances - FN - TP - FP;
+0071 %         end
+0072 %
+0073 %         function FP = getNumFalsePositives(RE)
+0074 %             conf = RE.resultSet.confusionMatrix;
+0075 %             FP = sum(conf') - diag(conf)';
+0076 %         end
+0077 %
+0078 %         function FN = getNumFalseNegatives(RE)
+0079 %             conf = RE.resultSet.confusionMatrix;
+0080 %             FN = sum(conf) - diag(conf)';
+0081 %         end
+0082         
+0083     end
+0084 end
+0085
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+experiment/@ResultEvaluator/ResultEvaluator.m b/doc/+eegtoolkit/+experiment/@ResultEvaluator/ResultEvaluator.m new file mode 100644 index 0000000..95999bd --- /dev/null +++ b/doc/+eegtoolkit/+experiment/@ResultEvaluator/ResultEvaluator.m @@ -0,0 +1,85 @@ +% RESULTEVALUATOR class +% Parses the results of an experiment and calculates various metrics +classdef ResultEvaluator < handle + properties + resultSet; % A 'ResultSet' object containing the results of an experiment + subjectid; % The subject ids corresponding + sessionid; + end + + methods + function RE = ResultEvaluator(resultSet) + if nargin > 0 + RE.resultSet = resultSet; + end + end + + function acc = getAccuracy(RE) + conf = RE.resultSet.confusionMatrix; + acc = sum(diag(conf))/sum(sum(conf))*100; + end + + function confusionMatrix = getConfusionMatrix(RE) + %Returns the confusion matrix with labels as the last row + %if you want the confusion matrix without labels then + %access the confusionMatrix property of the resultSet directly + labels = unique(RE.resultSet.getLabels); + confusionMatrix = horzcat(RE.resultSet.confusionMatrix, labels); + end + + function acc = getAccuracyForSession(RE,session) + conf = RE.resultSet.subset(RE.sessionid==session).confusionMatrix; + acc = sum(diag(conf))/sum(sum(conf))*100; + end + + function accuracies = getAccuracyBySession(RE) + unsessions = unique(RE.sessionid); + for i=1:length(unsessions) + accuracies(i) = RE.getAccuracyForSession(unsessions(i)); + end + end + + function accuracies = getAccuracyByLabel(RE) + [rows,~] = size(RE.resultSet.confusionMatrix); + for i=1:rows + accuracies(i) = RE.resultSet.confusionMatrix(i,i)/sum(RE.resultSet.confusionMatrix(i,:))*100; + end + end + + + function ITR = getITR(RE,T) + P = RE.getAccuracy/100; + M = RE.resultSet.getNumLabels; +% fprintf('T = %f',T); +% fprintf('P = %f',P); +% fprintf('M = %f',M); +% fprintf('\n'); + ITR = (log2(M) + P*log2(P)+(1-P)*log2((1-P)/(M-1)))/T; + end + +% function TP = getNumTruePositives(RE) +% conf = RE.resultSet.confusionMatrix; +% TP = diag(conf)'; +% end +% +% function TN = getNumTrueNegatives(RE) +% numInstances = RE.resultSet.getNumInstances; +% FN = RE.getNumFalseNegatives; +% TP = RE.getNumTruePositives; +% FP = RE.getNumFalsePositives; +% TN = numInstances - FN - TP - FP; +% end +% +% function FP = getNumFalsePositives(RE) +% conf = RE.resultSet.confusionMatrix; +% FP = sum(conf') - diag(conf)'; +% end +% +% function FN = getNumFalseNegatives(RE) +% conf = RE.resultSet.confusionMatrix; +% FN = sum(conf) - diag(conf)'; +% end + + end +end + diff --git a/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.dot b/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.dot new file mode 100644 index 0000000..9eaf551 --- /dev/null +++ b/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + ResultEvaluator -> ResultEvaluator; + + ResultEvaluator [URL="ResultEvaluator.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.html b/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.html new file mode 100644 index 0000000..551dd9b --- /dev/null +++ b/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+experiment/@ResultEvaluator + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+experiment/@ResultEvaluator >
+

Dependency Graph for ./+eegtoolkit/+experiment/@ResultEvaluator

+ +
+Dependency Graph for ./+eegtoolkit/+experiment/@ResultEvaluator + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.map b/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.map new file mode 100644 index 0000000..34331ac --- /dev/null +++ b/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.png b/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5a636b3c22ba95545f8409c853c9eb6c42455277 GIT binary patch literal 5619 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+experiment/@ResultEvaluator/index.html b/doc/+eegtoolkit/+experiment/@ResultEvaluator/index.html new file mode 100644 index 0000000..20c55e3 --- /dev/null +++ b/doc/+eegtoolkit/+experiment/@ResultEvaluator/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+experiment/@ResultEvaluator + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+experiment/@ResultEvaluator >
+ +

Index for ./+eegtoolkit/+experiment/@ResultEvaluator

+ +

Matlab files in this directory:

+ +
 ResultEvaluatorRESULTEVALUATOR class
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@CCA/CCA.html b/doc/+eegtoolkit/+featextraction/@CCA/CCA.html new file mode 100644 index 0000000..69ae510 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@CCA/CCA.html @@ -0,0 +1,195 @@ + + + + Description of CCA + + + + + + + + + + + + + +

CCA +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

CCA.m

+

SOURCE CODE ^

+
0001 classdef CCA < eegtoolkit.featextraction.PSDExtractionBase%FeatureExtractionBase
+0002     %
+0003     % works only on our datasets, for other datasets needs modifications
+0004     %
+0005     properties (Access = public)
+0006         channel;
+0007         avgTime;
+0008         stimulus_freqs;
+0009         FreqSamp;
+0010         NumHarm;
+0011         allFeatures;
+0012     end
+0013     methods (Access = public)
+0014         function CCA = CCA(sti_f,chans,fs,numH)
+0015             if ( nargin ~= 4 )
+0016                 error('It is needed to define the simulus freqs, the channels, frequency sampling and number of harmonics');
+0017             else
+0018                 CCA.stimulus_freqs = sti_f;
+0019                 CCA.channel = chans;
+0020                 CCA.FreqSamp = fs;
+0021                 CCA.NumHarm = numH;
+0022                 CCA.allFeatures = 0;
+0023             end
+0024         end
+0025         
+0026         function extract(CCA)
+0027             sti_f = CCA.stimulus_freqs;
+0028             mLen=size(CCA.trials{1}.signal,2);
+0029             refSignals=CCA.ck_signalTrans(sti_f,mLen,CCA.FreqSamp,CCA.NumHarm);
+0030             NumStim = size(refSignals,3);
+0031             numTrials = length(CCA.trials);
+0032             for i=1:numTrials
+0033                 data = CCA.trials{i}.signal(CCA.channel,:);
+0034                 if(CCA.allFeatures == 1)
+0035                     features=NaN*ones(NumStim,min(rank(data),CCA.NumHarm*2));
+0036                     for j=1:NumStim
+0037                         [wx1,wy1,r1] = canoncorr(data',refSignals(:,:,j)');
+0038                         features(j,:) = r1;
+0039                     end
+0040                     tempfeatures = features(1,:);
+0041                     for j=2:NumStim
+0042                         tempfeatures = horzcat(tempfeatures,features(j,:));
+0043                     end
+0044                     instances(i,:) = tempfeatures(:);
+0045                     labels(i,1) = floor(CCA.trials{i}.label);
+0046                 else
+0047                     features=NaN*ones(NumStim,1);
+0048                     for j=1:NumStim
+0049                         %                     [wx1,wy1,r1] = CCA.cca(data,refSignals(:,:,j));
+0050                         [wx1,wy1,r1] = canoncorr(data',refSignals(:,:,j)');
+0051                         features(j) = max(r1);
+0052                     end
+0053                     instances(i,:) = features(:);
+0054                     labels(i,1) = floor(CCA.trials{i}.label);
+0055                 end
+0056             end
+0057 %             unique(labels)
+0058             if (sum(unique(labels)) == 41)
+0059                 labels(labels==6)=1;
+0060                 labels(labels==7)=2;
+0061                 labels(labels==8)=3;
+0062                 labels(labels==9)=4;
+0063                 labels(labels==11)=5;
+0064             end
+0065 %             unique(labels)
+0066             CCA.instanceSet = eegtoolkit.util.InstanceSet(instances, labels);
+0067         end
+0068         
+0069         function configInfo = getConfigInfo(CCA)
+0070             configInfo = sprintf('CCA');
+0071         end
+0072         
+0073 %         function [Wx, Wy, r] = cca(CCA,X,Y)
+0074 %
+0075 %             % CCA calculate canonical correlations
+0076 %             %
+0077 %             % [Wx Wy r] = cca(X,Y) where Wx and Wy contains the canonical correlation
+0078 %
+0079 %             % vectors as columns and r is a vector with corresponding canonical
+0080 %             % correlations. The correlations are sorted in descending order. X and Y
+0081 %             % are matrices where each column is a sample. Hence, X and Y must have
+0082 %             % the same number of columns.
+0083 %             %
+0084 %             % Example: If X is M*K and Y is N*K there are L=MIN(M,N) solutions. Wx is
+0085 %             % then M*L, Wy is N*L and r is L*1.
+0086 %             %
+0087 %             %
+0088 %             % ?? 2000 Magnus Borga, Link?pings universitet
+0089 %
+0090 %             % --- Calculate covariance matrices ---??????????????
+0091 %
+0092 %             z = [X;Y];
+0093 %             C = cov(z.');
+0094 %             sx = size(X,1);   %X??????(??),
+0095 %             sy = size(Y,1);
+0096 %             Cxx = C(1:sx, 1:sx) + 10^(-8)*eye(sx);
+0097 %             Cxy = C(1:sx, sx+1:sx+sy);
+0098 %             Cyx = Cxy';
+0099 %             Cyy = C(sx+1:sx+sy, sx+1:sx+sy) + 10^(-8)*eye(sy);%eye()????????
+0100 %             invCyy = inv(Cyy);
+0101 %
+0102 %             % --- Calcualte Wx and r ---
+0103 %
+0104 %             [Wx,r] = eig(inv(Cxx)*Cxy*invCyy*Cyx); % Basis in X eig????????????
+0105 %             r = sqrt(real(r));      % Canonical correlations
+0106 %
+0107 %             % --- Sort correlations ---
+0108 %
+0109 %             V = fliplr(Wx);        % reverse order of eigenvectors??????????????????????i??????????i??????
+0110 %             r = flipud(diag(r));    % extract eigenvalues and reverse their order
+0111 %             [r,I]= sort((real(r)));    % sort reversed eigenvalues in ascending order
+0112 %             r = flipud(r);        % restore sorted eigenvalues into descending order??????????????
+0113 %             for j = 1:length(I)
+0114 %                 Wx(:,j) = V(:,I(j));  % sort reversed eigenvectors in ascending order
+0115 %             end
+0116 %             Wx = fliplr(Wx);    % restore sorted eigenvectors into descending order
+0117 %
+0118 %             % --- Calcualte Wy  ---
+0119 %
+0120 %             Wy = invCyy*Cyx*Wx;     % Basis in Y
+0121 %             % Wy = Wy./repmat(sqrt(sum(abs(Wy).^2)),sy,1); % Normalize Wy
+0122 %
+0123 %         end
+0124         
+0125         function refSignal=ck_signalTrans(CCA,f,mLen,FreqSamp,NumHarm)
+0126             
+0127             p=mLen;%1250;
+0128             fs=FreqSamp;%250;
+0129             TP=1/fs:1/fs:p/fs;
+0130             for j=1:length(f)
+0131                 tempComp=[];
+0132                 for k=1:NumHarm
+0133                     Sinh1=sin(2*pi*k*f(j)*TP);
+0134                     Cosh1=cos(2*pi*k*f(j)*TP);
+0135                     tempComp = [tempComp; Sinh1;Cosh1;];
+0136                 end
+0137                 refSignal(:,:,j)=tempComp;
+0138             end
+0139         end
+0140         function time = getTime(CCA)
+0141             time = CCA.avgTime;
+0142         end
+0143     end
+0144     
+0145 end
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@CCA/CCA.m b/doc/+eegtoolkit/+featextraction/@CCA/CCA.m new file mode 100644 index 0000000..fae91b4 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@CCA/CCA.m @@ -0,0 +1,145 @@ +classdef CCA < eegtoolkit.featextraction.PSDExtractionBase%FeatureExtractionBase + % + % works only on our datasets, for other datasets needs modifications + % + properties (Access = public) + channel; + avgTime; + stimulus_freqs; + FreqSamp; + NumHarm; + allFeatures; + end + methods (Access = public) + function CCA = CCA(sti_f,chans,fs,numH) + if ( nargin ~= 4 ) + error('It is needed to define the simulus freqs, the channels, frequency sampling and number of harmonics'); + else + CCA.stimulus_freqs = sti_f; + CCA.channel = chans; + CCA.FreqSamp = fs; + CCA.NumHarm = numH; + CCA.allFeatures = 0; + end + end + + function extract(CCA) + sti_f = CCA.stimulus_freqs; + mLen=size(CCA.trials{1}.signal,2); + refSignals=CCA.ck_signalTrans(sti_f,mLen,CCA.FreqSamp,CCA.NumHarm); + NumStim = size(refSignals,3); + numTrials = length(CCA.trials); + for i=1:numTrials + data = CCA.trials{i}.signal(CCA.channel,:); + if(CCA.allFeatures == 1) + features=NaN*ones(NumStim,min(rank(data),CCA.NumHarm*2)); + for j=1:NumStim + [wx1,wy1,r1] = canoncorr(data',refSignals(:,:,j)'); + features(j,:) = r1; + end + tempfeatures = features(1,:); + for j=2:NumStim + tempfeatures = horzcat(tempfeatures,features(j,:)); + end + instances(i,:) = tempfeatures(:); + labels(i,1) = floor(CCA.trials{i}.label); + else + features=NaN*ones(NumStim,1); + for j=1:NumStim + % [wx1,wy1,r1] = CCA.cca(data,refSignals(:,:,j)); + [wx1,wy1,r1] = canoncorr(data',refSignals(:,:,j)'); + features(j) = max(r1); + end + instances(i,:) = features(:); + labels(i,1) = floor(CCA.trials{i}.label); + end + end +% unique(labels) + if (sum(unique(labels)) == 41) + labels(labels==6)=1; + labels(labels==7)=2; + labels(labels==8)=3; + labels(labels==9)=4; + labels(labels==11)=5; + end +% unique(labels) + CCA.instanceSet = eegtoolkit.util.InstanceSet(instances, labels); + end + + function configInfo = getConfigInfo(CCA) + configInfo = sprintf('CCA'); + end + +% function [Wx, Wy, r] = cca(CCA,X,Y) +% +% % CCA calculate canonical correlations +% % +% % [Wx Wy r] = cca(X,Y) where Wx and Wy contains the canonical correlation +% +% % vectors as columns and r is a vector with corresponding canonical +% % correlations. The correlations are sorted in descending order. X and Y +% % are matrices where each column is a sample. Hence, X and Y must have +% % the same number of columns. +% % +% % Example: If X is M*K and Y is N*K there are L=MIN(M,N) solutions. Wx is +% % then M*L, Wy is N*L and r is L*1. +% % +% % +% % ?? 2000 Magnus Borga, Link?pings universitet +% +% % --- Calculate covariance matrices ---?????????????? +% +% z = [X;Y]; +% C = cov(z.'); +% sx = size(X,1); %X??????(??), +% sy = size(Y,1); +% Cxx = C(1:sx, 1:sx) + 10^(-8)*eye(sx); +% Cxy = C(1:sx, sx+1:sx+sy); +% Cyx = Cxy'; +% Cyy = C(sx+1:sx+sy, sx+1:sx+sy) + 10^(-8)*eye(sy);%eye()???????? +% invCyy = inv(Cyy); +% +% % --- Calcualte Wx and r --- +% +% [Wx,r] = eig(inv(Cxx)*Cxy*invCyy*Cyx); % Basis in X eig???????????? +% r = sqrt(real(r)); % Canonical correlations +% +% % --- Sort correlations --- +% +% V = fliplr(Wx); % reverse order of eigenvectors??????????????????????i??????????i?????? +% r = flipud(diag(r)); % extract eigenvalues and reverse their order +% [r,I]= sort((real(r))); % sort reversed eigenvalues in ascending order +% r = flipud(r); % restore sorted eigenvalues into descending order?????????????? +% for j = 1:length(I) +% Wx(:,j) = V(:,I(j)); % sort reversed eigenvectors in ascending order +% end +% Wx = fliplr(Wx); % restore sorted eigenvectors into descending order +% +% % --- Calcualte Wy --- +% +% Wy = invCyy*Cyx*Wx; % Basis in Y +% % Wy = Wy./repmat(sqrt(sum(abs(Wy).^2)),sy,1); % Normalize Wy +% +% end + + function refSignal=ck_signalTrans(CCA,f,mLen,FreqSamp,NumHarm) + + p=mLen;%1250; + fs=FreqSamp;%250; + TP=1/fs:1/fs:p/fs; + for j=1:length(f) + tempComp=[]; + for k=1:NumHarm + Sinh1=sin(2*pi*k*f(j)*TP); + Cosh1=cos(2*pi*k*f(j)*TP); + tempComp = [tempComp; Sinh1;Cosh1;]; + end + refSignal(:,:,j)=tempComp; + end + end + function time = getTime(CCA) + time = CCA.avgTime; + end + end + +end diff --git a/doc/+eegtoolkit/+featextraction/@CCA/graph.dot b/doc/+eegtoolkit/+featextraction/@CCA/graph.dot new file mode 100644 index 0000000..d44325c --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@CCA/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + CCA -> CCA; + + CCA [URL="CCA.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@CCA/graph.html b/doc/+eegtoolkit/+featextraction/@CCA/graph.html new file mode 100644 index 0000000..ec6c2f3 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@CCA/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featextraction/@CCA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@CCA >
+

Dependency Graph for ./+eegtoolkit/+featextraction/@CCA

+ +
+Dependency Graph for ./+eegtoolkit/+featextraction/@CCA + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@CCA/graph.map b/doc/+eegtoolkit/+featextraction/@CCA/graph.map new file mode 100644 index 0000000..e39843d --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@CCA/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featextraction/@CCA/graph.png b/doc/+eegtoolkit/+featextraction/@CCA/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c6b3372610a5bae84d062660bc53a4902fae44d2 GIT binary patch literal 3321 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+featextraction/@CCA/index.html b/doc/+eegtoolkit/+featextraction/@CCA/index.html new file mode 100644 index 0000000..d997e1b --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@CCA/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+featextraction/@CCA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@CCA >
+ +

Index for ./+eegtoolkit/+featextraction/@CCA

+ +

Matlab files in this directory:

+ +
 CCA
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@DWT/DWT.html b/doc/+eegtoolkit/+featextraction/@DWT/DWT.html new file mode 100644 index 0000000..5e1cd17 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@DWT/DWT.html @@ -0,0 +1,171 @@ + + + + Description of DWT + + + + + + + + + + + + + +

DWT +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

DWT.m

+

SOURCE CODE ^

+
0001 classdef DWT < eegtoolkit.featextraction.FeatureExtractionBase
+0002     
+0003     properties (Access = public)
+0004         channel;
+0005         seconds;
+0006         levelWT;
+0007         WavFamily;
+0008         avgTime;
+0009     end
+0010     
+0011     methods (Access = public)
+0012         function mDWT = DWT(trials, seconds, channel,levWT,WavFam)
+0013             if nargin == 0
+0014                 mDWT.seconds = 0;
+0015                 mDWT.channel = 1;
+0016                 mDWT.levelWT = 5;
+0017                 mDWT.WavFamily = 'db1';
+0018             elseif nargin == 1
+0019                 mDWT.trials = trials;
+0020                 mDWT.seconds = 0;
+0021                 mDWT.channel = 1;
+0022                 mDWT.levelWT = 5;
+0023                 mDWT.WavFamily = 'db1';
+0024             elseif nargin == 2
+0025                 mDWT.trials = trials;
+0026                 mDWT.channel = 1;
+0027                 mDWT.seconds = seconds;
+0028                 mDWT.levelWT = 5;
+0029                 mDWT.WavFamily = 'db1';
+0030             elseif nargin == 3
+0031                 mDWT.trials = trials;
+0032                 mDWT.channel = channel;
+0033                 mDWT.seconds = seconds;
+0034                 mDWT.levelWT = 5;
+0035                 mDWT.WavFamily = 'db1';
+0036             elseif nargin == 4
+0037                 mDWT.trials = trials;
+0038                 mDWT.channel = channel;
+0039                 mDWT.seconds = seconds;
+0040                 mDWT.levelWT = levWT;
+0041                 mDWT.WavFamily = 'db1';
+0042             elseif nargin ==5
+0043                 mDWT.trials = trials;
+0044                 mDWT.channel = channel;
+0045                 mDWT.seconds = seconds;
+0046                 mDWT.levelWT = levWT;
+0047                 mDWT.WavFamily = WavFam;
+0048             else
+0049                 error('invalid number of arguments');
+0050             end
+0051             mDWT.avgTime = 0;
+0052         end
+0053         
+0054         function extract(mDWT)
+0055             if length(mDWT.seconds)==1
+0056                 numsamples = mDWT.trials{1}.samplingRate * mDWT.seconds;
+0057                 if (numsamples == 0)
+0058                     numsamples = size(mDWT.trials{1}.signal(mDWT.channel,:),2);
+0059                 end
+0060                 numTrials = length(mDWT.trials);
+0061                 
+0062                 [C L] = wavedec(mDWT.trials{1}.signal(mDWT.channel, 1:numsamples),mDWT.levelWT,mDWT.WavFamily);
+0063                 instances = zeros(numTrials, length(C));
+0064                 labels = zeros(numTrials,1);
+0065             elseif length(mDWT.seconds) == 2
+0066                 sampleA = mDWT.trials{1}.samplingRate * mDWT.seconds(1) + 1;
+0067                 sampleB = mDWT.trials{1}.samplingRate * mDWT.seconds(2);
+0068                 numTrials = length(mDWT.trials);
+0069                 [C L] = wavedec(mDWT.trials{1}.signal(mDWT.channel, sampleA:sampleB),mDWT.levelWT,mDWT.WavFamily);
+0070                 instances = zeros(numTrials, length(C));
+0071                 labels = zeros(numTrials,1);
+0072             else
+0073                 error('invalid seconds parameter');
+0074             end
+0075             tic
+0076             for i=1:numTrials
+0077                 if length(mDWT.seconds) == 1
+0078                     numsamples = mDWT.trials{i}.samplingRate * mDWT.seconds;
+0079                     if(numsamples == 0)
+0080                         y = mDWT.trials{i}.signal(mDWT.channel,:);
+0081                     else
+0082                         y = mDWT.trials{i}.signal(mDWT.channel, 1:numsamples);
+0083                     end
+0084                     % zero padding to nearest power of 2
+0085                     if isa(mDWT.filter,'dfilt.df2sos')
+0086                         y = filter(mDWT.filter,y);
+0087                     elseif isa(mDWT.filter,'dfilt.dffir')
+0088                         y = filtfilt(mDWT.filter.Numerator,1,y);
+0089                     end
+0090                     [C L] = wavedec(y,mDWT.levelWT,mDWT.WavFamily);%pwelch(y,[],[],512,mDWT.trials{i}.samplingRate,'onesided');
+0091                 elseif length(mDWT.seconds) == 2
+0092                     sampleA = mDWT.trials{i}.samplingRate * mDWT.seconds(1) + 1;
+0093                     sampleB = mDWT.trials{i}.samplingRate * mDWT.seconds(2);
+0094                     y = mDWT.trials{i}.signal(mDWT.channel,sampleA:sampleB);
+0095                     if isa(mDWT.filter,'dfilt.df2sos') || isa(mDWT.filter,'dfilt.df2')
+0096                         y = filter(mDWT.filter,y);
+0097                     elseif isa(mDWT.filter,'dfilt.dffir')
+0098                         y = filtfilt(mDWT.filter.Numerator,1,y);
+0099                     end
+0100                     [C L] = wavedec(y,mDWT.levelWT,mDWT.WavFamily);%pwelch(y,[],[],512,mDWT.trials{i}.samplingRate,'onesided');
+0101                 else
+0102                     error('invalid seconds parameter');
+0103                 end
+0104                 instances(i,:) = C;
+0105                 labels(i,1) = floor(mDWT.trials{i}.label);
+0106             end
+0107             mDWT.avgTime = toc/numTrials;
+0108             mDWT.instanceSet = eegtoolkit.util.InstanceSet(instances,labels);
+0109         end
+0110         
+0111         function configInfo = getConfigInfo(mDWT)
+0112             configInfo = sprintf('DWT\tchannel:%d\tseconds:%d\tlevelWT:%d\tWavFamily:%s',mDWT.channel,mDWT.seconds,mDWT.levelWT,mDWT.WavFamily);
+0113         end
+0114         
+0115                         
+0116         function time = getTime(mDWT)
+0117             time = mDWT.avgTime;
+0118         end
+0119     end
+0120     
+0121 end
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@DWT/DWT.m b/doc/+eegtoolkit/+featextraction/@DWT/DWT.m new file mode 100644 index 0000000..6918d53 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@DWT/DWT.m @@ -0,0 +1,121 @@ +classdef DWT < eegtoolkit.featextraction.FeatureExtractionBase + + properties (Access = public) + channel; + seconds; + levelWT; + WavFamily; + avgTime; + end + + methods (Access = public) + function mDWT = DWT(trials, seconds, channel,levWT,WavFam) + if nargin == 0 + mDWT.seconds = 0; + mDWT.channel = 1; + mDWT.levelWT = 5; + mDWT.WavFamily = 'db1'; + elseif nargin == 1 + mDWT.trials = trials; + mDWT.seconds = 0; + mDWT.channel = 1; + mDWT.levelWT = 5; + mDWT.WavFamily = 'db1'; + elseif nargin == 2 + mDWT.trials = trials; + mDWT.channel = 1; + mDWT.seconds = seconds; + mDWT.levelWT = 5; + mDWT.WavFamily = 'db1'; + elseif nargin == 3 + mDWT.trials = trials; + mDWT.channel = channel; + mDWT.seconds = seconds; + mDWT.levelWT = 5; + mDWT.WavFamily = 'db1'; + elseif nargin == 4 + mDWT.trials = trials; + mDWT.channel = channel; + mDWT.seconds = seconds; + mDWT.levelWT = levWT; + mDWT.WavFamily = 'db1'; + elseif nargin ==5 + mDWT.trials = trials; + mDWT.channel = channel; + mDWT.seconds = seconds; + mDWT.levelWT = levWT; + mDWT.WavFamily = WavFam; + else + error('invalid number of arguments'); + end + mDWT.avgTime = 0; + end + + function extract(mDWT) + if length(mDWT.seconds)==1 + numsamples = mDWT.trials{1}.samplingRate * mDWT.seconds; + if (numsamples == 0) + numsamples = size(mDWT.trials{1}.signal(mDWT.channel,:),2); + end + numTrials = length(mDWT.trials); + + [C L] = wavedec(mDWT.trials{1}.signal(mDWT.channel, 1:numsamples),mDWT.levelWT,mDWT.WavFamily); + instances = zeros(numTrials, length(C)); + labels = zeros(numTrials,1); + elseif length(mDWT.seconds) == 2 + sampleA = mDWT.trials{1}.samplingRate * mDWT.seconds(1) + 1; + sampleB = mDWT.trials{1}.samplingRate * mDWT.seconds(2); + numTrials = length(mDWT.trials); + [C L] = wavedec(mDWT.trials{1}.signal(mDWT.channel, sampleA:sampleB),mDWT.levelWT,mDWT.WavFamily); + instances = zeros(numTrials, length(C)); + labels = zeros(numTrials,1); + else + error('invalid seconds parameter'); + end + tic + for i=1:numTrials + if length(mDWT.seconds) == 1 + numsamples = mDWT.trials{i}.samplingRate * mDWT.seconds; + if(numsamples == 0) + y = mDWT.trials{i}.signal(mDWT.channel,:); + else + y = mDWT.trials{i}.signal(mDWT.channel, 1:numsamples); + end + % zero padding to nearest power of 2 + if isa(mDWT.filter,'dfilt.df2sos') + y = filter(mDWT.filter,y); + elseif isa(mDWT.filter,'dfilt.dffir') + y = filtfilt(mDWT.filter.Numerator,1,y); + end + [C L] = wavedec(y,mDWT.levelWT,mDWT.WavFamily);%pwelch(y,[],[],512,mDWT.trials{i}.samplingRate,'onesided'); + elseif length(mDWT.seconds) == 2 + sampleA = mDWT.trials{i}.samplingRate * mDWT.seconds(1) + 1; + sampleB = mDWT.trials{i}.samplingRate * mDWT.seconds(2); + y = mDWT.trials{i}.signal(mDWT.channel,sampleA:sampleB); + if isa(mDWT.filter,'dfilt.df2sos') || isa(mDWT.filter,'dfilt.df2') + y = filter(mDWT.filter,y); + elseif isa(mDWT.filter,'dfilt.dffir') + y = filtfilt(mDWT.filter.Numerator,1,y); + end + [C L] = wavedec(y,mDWT.levelWT,mDWT.WavFamily);%pwelch(y,[],[],512,mDWT.trials{i}.samplingRate,'onesided'); + else + error('invalid seconds parameter'); + end + instances(i,:) = C; + labels(i,1) = floor(mDWT.trials{i}.label); + end + mDWT.avgTime = toc/numTrials; + mDWT.instanceSet = eegtoolkit.util.InstanceSet(instances,labels); + end + + function configInfo = getConfigInfo(mDWT) + configInfo = sprintf('DWT\tchannel:%d\tseconds:%d\tlevelWT:%d\tWavFamily:%s',mDWT.channel,mDWT.seconds,mDWT.levelWT,mDWT.WavFamily); + end + + + function time = getTime(mDWT) + time = mDWT.avgTime; + end + end + +end \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@DWT/graph.dot b/doc/+eegtoolkit/+featextraction/@DWT/graph.dot new file mode 100644 index 0000000..f950fda --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@DWT/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + DWT -> DWT; + + DWT [URL="DWT.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@DWT/graph.html b/doc/+eegtoolkit/+featextraction/@DWT/graph.html new file mode 100644 index 0000000..3982477 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@DWT/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featextraction/@DWT + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@DWT >
+

Dependency Graph for ./+eegtoolkit/+featextraction/@DWT

+ +
+Dependency Graph for ./+eegtoolkit/+featextraction/@DWT + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@DWT/graph.map b/doc/+eegtoolkit/+featextraction/@DWT/graph.map new file mode 100644 index 0000000..a91e458 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@DWT/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featextraction/@DWT/graph.png b/doc/+eegtoolkit/+featextraction/@DWT/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..312c91176e6c6df3e49045c3ba341d61c147bca9 GIT binary patch literal 3596 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+featextraction/@DWT/index.html b/doc/+eegtoolkit/+featextraction/@DWT/index.html new file mode 100644 index 0000000..b9380d7 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@DWT/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+featextraction/@DWT + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@DWT >
+ +

Index for ./+eegtoolkit/+featextraction/@DWT

+ +

Matlab files in this directory:

+ +
 DWT
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@ERRPFeatures/ERRPFeatures.html b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/ERRPFeatures.html new file mode 100644 index 0000000..8c3656b --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/ERRPFeatures.html @@ -0,0 +1,86 @@ + + + + Description of ERRPFeatures + + + + + + + + + + + + + +

ERRPFeatures +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

ERRPFeatures.m

+

SOURCE CODE ^

+
0001 classdef ERRPFeatures < eegtoolkit.featextraction.PSDExtractionBase%FeatureExtractionBase
+0002     properties (Access = public)
+0003         channel;
+0004         avgTime;
+0005 %         downSampleFactor;
+0006     end
+0007     methods (Access = public)
+0008         function ERRP = ERRPFeatures()
+0009 %             ERRP.downSampleFactor = 8;
+0010             ERRP.channel = 1;
+0011         end
+0012         
+0013         function extract(ERRP)
+0014             
+0015             numTrials = length(ERRP.trials);
+0016             [~,numSamples]  =  size(ERRP.trials{1}.signal(ERRP.channel,:));
+0017 %             numFeatures = floor(numSamples/ERRP.downSampleFactor);
+0018             instances = zeros(numTrials,numSamples);
+0019             labels = zeros(numTrials,1);
+0020             for i=1:numTrials
+0021                 instances(i,:) = ERRP.trials{i}.signal(ERRP.channel,:);
+0022                 labels(i) = ERRP.trials{i}.label;
+0023             end
+0024             ERRP.instanceSet = eegtoolkit.util.InstanceSet(instances, labels);
+0025         end
+0026         
+0027         function configInfo = getConfigInfo(ERRP)
+0028             configInfo = sprintf('ERRP features');
+0029         end
+0030         
+0031         function time = getTime(ERRP)
+0032             time = ERRP.avgTime;
+0033         end
+0034     end
+0035     
+0036 end
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@ERRPFeatures/ERRPFeatures.m b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/ERRPFeatures.m new file mode 100644 index 0000000..11474dc --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/ERRPFeatures.m @@ -0,0 +1,36 @@ +classdef ERRPFeatures < eegtoolkit.featextraction.PSDExtractionBase%FeatureExtractionBase + properties (Access = public) + channel; + avgTime; +% downSampleFactor; + end + methods (Access = public) + function ERRP = ERRPFeatures() +% ERRP.downSampleFactor = 8; + ERRP.channel = 1; + end + + function extract(ERRP) + + numTrials = length(ERRP.trials); + [~,numSamples] = size(ERRP.trials{1}.signal(ERRP.channel,:)); +% numFeatures = floor(numSamples/ERRP.downSampleFactor); + instances = zeros(numTrials,numSamples); + labels = zeros(numTrials,1); + for i=1:numTrials + instances(i,:) = ERRP.trials{i}.signal(ERRP.channel,:); + labels(i) = ERRP.trials{i}.label; + end + ERRP.instanceSet = eegtoolkit.util.InstanceSet(instances, labels); + end + + function configInfo = getConfigInfo(ERRP) + configInfo = sprintf('ERRP features'); + end + + function time = getTime(ERRP) + time = ERRP.avgTime; + end + end + +end diff --git a/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.dot b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.dot new file mode 100644 index 0000000..1fef1ce --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + ERRPFeatures -> ERRPFeatures; + + ERRPFeatures [URL="ERRPFeatures.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.html b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.html new file mode 100644 index 0000000..488795b --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featextraction/@ERRPFeatures + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@ERRPFeatures >
+

Dependency Graph for ./+eegtoolkit/+featextraction/@ERRPFeatures

+ +
+Dependency Graph for ./+eegtoolkit/+featextraction/@ERRPFeatures + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.map b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.map new file mode 100644 index 0000000..41fb9c2 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.png b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f00fcd3ecec6177f092101b306dd18d5173c46 GIT binary patch literal 5437 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 L9sOSR$; + + + Index for Directory ./+eegtoolkit/+featextraction/@ERRPFeatures + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@ERRPFeatures >
+ +

Index for ./+eegtoolkit/+featextraction/@ERRPFeatures

+ +

Matlab files in this directory:

+ +
 ERRPFeatures
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FFT/FFT.html b/doc/+eegtoolkit/+featextraction/@FFT/FFT.html new file mode 100644 index 0000000..e9f760a --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@FFT/FFT.html @@ -0,0 +1,139 @@ + + + + Description of FFT + + + + + + + + + + + + + +

FFT +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

FFT.m

+

SOURCE CODE ^

+
0001 classdef FFT < eegtoolkit.featextraction.FeatureExtractionBase
+0002     
+0003     properties (Access = public)
+0004         channel;
+0005         seconds;
+0006         nfft;
+0007         avgTime;
+0008     end
+0009     
+0010     methods (Access = public)
+0011         function mFFT = FFT(trials, seconds, channel,nfft)
+0012             if nargin == 0
+0013                 mFFT.seconds = 0;
+0014                 mFFT.channel = 1;
+0015                 mFFT.nfft = 512;
+0016             elseif nargin == 1
+0017                 mFFT.trials = trials;
+0018                 mFFT.seconds = 0;
+0019                 mFFT.channel = 1;
+0020                 mFFT.nfft = 512;
+0021             elseif nargin == 2
+0022                 mFFT.trials = trials;
+0023                 mFFT.channel = 1;
+0024                 mFFT.seconds = seconds;
+0025                 mFFT.nfft = 512;
+0026             elseif nargin == 3
+0027                 mFFT.trials = trials;
+0028                 mFFT.channel = channel;
+0029                 mFFT.seconds = seconds;
+0030                 mFFT.nfft = 512;
+0031             elseif nargin == 4
+0032                 mFFT.trials = trials;
+0033                 mFFT.channel = channel;
+0034                 mFFT.seconds = seconds;
+0035                 mFFT.nfft = nfft;
+0036                 error('invalid number of arguments');
+0037             end
+0038         end
+0039         
+0040         function extract(mFFT)
+0041             NUM_FEATURES = mFFT.nfft/2+1;
+0042             numTrials = length(mFFT.trials);
+0043             instances = zeros(numTrials, NUM_FEATURES);
+0044             labels = zeros(numTrials,1);
+0045             tic
+0046             for i=1:numTrials
+0047                 if length(mFFT.seconds) == 1
+0048                 numsamples = mFFT.trials{i}.samplingRate * mFFT.seconds;
+0049                 if(numsamples == 0)
+0050                     y = mFFT.trials{i}.signal(mFFT.channel,:);
+0051                 else
+0052                     y = mFFT.trials{i}.signal(mFFT.channel, 1:numsamples);
+0053                 end
+0054                 elseif length(mFFT.seconds) == 2
+0055                     sampleA = mFFT.trials{i}.samplingRate * mFFT.seconds(1) + 1;
+0056                     sampleB = mFFT.trials{i}.samplingRate * mFFT.seconds(2);
+0057                     y = mFFT.trials{i}.signal(mFFT.channel, sampleA:sampleB);
+0058                 else
+0059                     
+0060                     error ('invalid seconds parameter');
+0061                 end
+0062                 if isa(mFFT.filter,'dfilt.df2sos') || isa(mFFT.filter,'dfilt.df2')
+0063                     y = filter(mFFT.filter,y);
+0064                 elseif isa(mFFT.filter,'dfilt.dffir')
+0065                     y = filtfilt(mFFT.filter.Numerator,1,y);
+0066                 end
+0067                 %Y = fft(y,(NUM_FEATURES-1)*2)/((NUM_FEATURES-1)*2);
+0068                 %f = Fs/2*linspace(0,1,NFFT/2+1);
+0069                 %pyy = abs(Y(1:(NUM_FEATURES-1)*2/2+1)).^2;
+0070                 [pyy,f] = periodogram(y,[],mFFT.nfft,mFFT.trials{i}.samplingRate);
+0071                 instances(i,:) = pyy;
+0072                 labels(i,1) = floor(mFFT.trials{i}.label);
+0073             end
+0074             mFFT.avgTime = toc/numTrials;
+0075             mFFT.instanceSet = eegtoolkit.util.InstanceSet(instances,labels);
+0076         end
+0077         
+0078         function configInfo = getConfigInfo(mFFT)
+0079             configInfo = sprintf('FFT\tchannel:%d\tseconds:%d\tnfft:%d',mFFT.channel,mFFT.seconds,mFFT.nfft);
+0080         end
+0081         
+0082                         
+0083         function time = getTime(mFFT)
+0084             time = mFFT.avgTime;
+0085         end
+0086     end
+0087    
+0088 end
+0089
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FFT/FFT.m b/doc/+eegtoolkit/+featextraction/@FFT/FFT.m new file mode 100644 index 0000000..f0f986f --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@FFT/FFT.m @@ -0,0 +1,89 @@ +classdef FFT < eegtoolkit.featextraction.FeatureExtractionBase + + properties (Access = public) + channel; + seconds; + nfft; + avgTime; + end + + methods (Access = public) + function mFFT = FFT(trials, seconds, channel,nfft) + if nargin == 0 + mFFT.seconds = 0; + mFFT.channel = 1; + mFFT.nfft = 512; + elseif nargin == 1 + mFFT.trials = trials; + mFFT.seconds = 0; + mFFT.channel = 1; + mFFT.nfft = 512; + elseif nargin == 2 + mFFT.trials = trials; + mFFT.channel = 1; + mFFT.seconds = seconds; + mFFT.nfft = 512; + elseif nargin == 3 + mFFT.trials = trials; + mFFT.channel = channel; + mFFT.seconds = seconds; + mFFT.nfft = 512; + elseif nargin == 4 + mFFT.trials = trials; + mFFT.channel = channel; + mFFT.seconds = seconds; + mFFT.nfft = nfft; + error('invalid number of arguments'); + end + end + + function extract(mFFT) + NUM_FEATURES = mFFT.nfft/2+1; + numTrials = length(mFFT.trials); + instances = zeros(numTrials, NUM_FEATURES); + labels = zeros(numTrials,1); + tic + for i=1:numTrials + if length(mFFT.seconds) == 1 + numsamples = mFFT.trials{i}.samplingRate * mFFT.seconds; + if(numsamples == 0) + y = mFFT.trials{i}.signal(mFFT.channel,:); + else + y = mFFT.trials{i}.signal(mFFT.channel, 1:numsamples); + end + elseif length(mFFT.seconds) == 2 + sampleA = mFFT.trials{i}.samplingRate * mFFT.seconds(1) + 1; + sampleB = mFFT.trials{i}.samplingRate * mFFT.seconds(2); + y = mFFT.trials{i}.signal(mFFT.channel, sampleA:sampleB); + else + + error ('invalid seconds parameter'); + end + if isa(mFFT.filter,'dfilt.df2sos') || isa(mFFT.filter,'dfilt.df2') + y = filter(mFFT.filter,y); + elseif isa(mFFT.filter,'dfilt.dffir') + y = filtfilt(mFFT.filter.Numerator,1,y); + end + %Y = fft(y,(NUM_FEATURES-1)*2)/((NUM_FEATURES-1)*2); + %f = Fs/2*linspace(0,1,NFFT/2+1); + %pyy = abs(Y(1:(NUM_FEATURES-1)*2/2+1)).^2; + [pyy,f] = periodogram(y,[],mFFT.nfft,mFFT.trials{i}.samplingRate); + instances(i,:) = pyy; + labels(i,1) = floor(mFFT.trials{i}.label); + end + mFFT.avgTime = toc/numTrials; + mFFT.instanceSet = eegtoolkit.util.InstanceSet(instances,labels); + end + + function configInfo = getConfigInfo(mFFT) + configInfo = sprintf('FFT\tchannel:%d\tseconds:%d\tnfft:%d',mFFT.channel,mFFT.seconds,mFFT.nfft); + end + + + function time = getTime(mFFT) + time = mFFT.avgTime; + end + end + +end + diff --git a/doc/+eegtoolkit/+featextraction/@FFT/graph.dot b/doc/+eegtoolkit/+featextraction/@FFT/graph.dot new file mode 100644 index 0000000..8f0dec4 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@FFT/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + FFT -> FFT; + + FFT [URL="FFT.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FFT/graph.html b/doc/+eegtoolkit/+featextraction/@FFT/graph.html new file mode 100644 index 0000000..c0a8cd9 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@FFT/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featextraction/@FFT + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@FFT >
+

Dependency Graph for ./+eegtoolkit/+featextraction/@FFT

+ +
+Dependency Graph for ./+eegtoolkit/+featextraction/@FFT + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FFT/graph.map b/doc/+eegtoolkit/+featextraction/@FFT/graph.map new file mode 100644 index 0000000..a5a5801 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@FFT/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featextraction/@FFT/graph.png b/doc/+eegtoolkit/+featextraction/@FFT/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..7c701eebc8aa3fbc0bd04a8a52d02e01f5df84f3 GIT binary patch literal 3054 zcmVYC@WAu%RXmNn;{lY|_TwphiuLrmbznf=xgKw172;waCR%E&^rIa=+~E z^L{WAlm!+z%YrYzKXaZr&z@msc4h>U#2TxCA_sdbSi^eO%vwdPnYD^=w6}oi z7>!2s^z@*utqmh1BN!bW#n{-`RQeN7JONP@;p5{2KR-WsdV1PX?eb$6v&P5AQCnM! z>({TNp`igcZrngqQxm$oyJ0e!tS-md*%=y*2EoC>2n`KIcz8G>A|enJ6l6p7_Cr{X z-k{lRMpac6ii?X;QBi@Kni`CajltX78$m%q2nq^9U|=9L8VxiW4gCH6p;Rg@mPHcX z-QDQu=s-tD2in@&(Ad~Gb&ZaW!pFx4QBhIYzI{7(@7|4d>(<%2ipxQfP0cDRE5nHs zCvf)cS@ibyA}A;b&pr1XVq#(t9UTo{UtdY@XEvMB(9nSL@^X}ym!qt#3RZjrn>@8_77H5{(Y-WCbKIL*bV`F1iRCBi&PMtc%C!c(hfq{Xnsj0EIoY`2oS@-VU zSw6lHgQ`spXSxVSJe zF_Dv#llGSL0PDNo3OeT|B#_SWh6B82%2?@co&pwM&r%p+I<5h*hV1QPug;J?RTU*<_@uDa~tyW|G z`t?)SmMvSbZQC|DJ3B8{#_VS0<>etOD+@Po-h5nsVptNnxw$xS-~g^%xiVwsetdi! zgM)(@7#P6ayLZvw-;b7-7PPdqpt-pjO-)Vc>gs}AE=Oc!Bw}M@@#?FuA~-mBArdUl zx|>WUYBU<|+qX}W#`e;sOH4^gApkl!IPm%BpJ!ZL9AA9#MaIU)Qlrrj08gGgX;oZ7 zK>-0!sZ=sNJe-k{kpw`wT+YbINQQ=nQZAPh0K2-nB&oyL*cjDnHQ#^#{YB-!efu^G z3k#W+mPUVne*&ORr{l3>$2c@JWK9v4I~eEAoueQKY;0^?lrT#S4Gj?h0|NtRq?t@6 z#>K_4xw+Y@xFbi7aQpV{4^JUl#OX2DXP(a}+kkB=`^_Csj3T7LN9hmw{_k|$4|q)aAbW@hGWAv4YD z?d_!?2rMoxmR!)I4|IHdob~nfjEag{RNP#7Y(+{+3U}<-VUw~83JU1p;K1tYYD>v8 z&8n%XApo|vwn{DrfW=FtQY|X((LBpxR!&Zi#s8;L5fc-`q@*NEN#D;{LqtS?4w{9UIAYjpP%Z-DDlDeWFl%IF1OS#Yc(WQ& z6tQvRMr34UND{XkxVX4XJtJG-?(U9(fdPwYGtBbv@BjeZy?fVYf*xh>-o28>*^>VL z{;6kV3;z7`Pi)w*!D8C1W=Z|3)5_(E*2XP0&tm!a-+$rd}!RLIcK(3Bu4;-)h^JPZIB9UWbyI_s&ct3y~=*t~JW!^8OU%P*0h zo^I8b$!s#-y`Ihk9w zY?=C8T3X7)#6&tdIZ+hFsW<7-tEs7JDv!xz;^oVi`OZ7<(8I%nN~Mz7+1b{tS)BdH z$LQ#2C=?2ml$6Zd-u^$(-rf$aR*RgR986A5;;XN|LQ_){oSd96IXO9J-hzSx3=9mQ zy1E*rrKRZW>qBsGFy46M4Wy=~T05qlePcp-c{u^_mtTHa+Sl#ccBA4>)X2JqTzuVLrTofsS(L}_U$-hTUS`1$z( zxWE2F5QJIt3xWVQH#cd-%xC9!-+f0x5P0Uy87aOUs|u6J#H6Go`uh5^x3_mjdP_?S z^Yil=6B9Gl!FcfYJ-9?slm-+ue;k{3eSijIyB>h*fMy1LTG$A@`&d7PM- zu(vF0knS7|@_v)@peN<+?M=O2|Im!Hy)YV$EGa2rLP7!^9UbZG>&wH34|8~U*xu3> zg0yBmpr@yYhYlU$#*G`NPMP`m5!7n6P^;DO_xE4Wsc3)y{WqGMn_)B>;ppgy;NW0HM@J(n zDhe?%F_ItVWk;6JEK3*+hKJ4@?Ck7BXJ@C?heN8>>W9u73=R&4TrRg)b!?4&&01qY wterl+npiVy6|rX4D#8&!k-bH%VHKDE2XD<=?+k^#*Z=?k07*qoM6N<$g7Ej_@c;k- literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+featextraction/@FFT/index.html b/doc/+eegtoolkit/+featextraction/@FFT/index.html new file mode 100644 index 0000000..0e4fd7b --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@FFT/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+featextraction/@FFT + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@FFT >
+ +

Index for ./+eegtoolkit/+featextraction/@FFT

+ +

Matlab files in this directory:

+ +
 FFT
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.html b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.html new file mode 100644 index 0000000..1c93476 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.html @@ -0,0 +1,134 @@ + + + + Description of FeatureExtractionBase + + + + + + + + + +
Home > +eegtoolkit > +featextraction > @FeatureExtractionBase > FeatureExtractionBase.m
+ + + +

FeatureExtractionBase +

+ +

PURPOSE ^

+
Abstract class for feature extraction. Implement the functions for any
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
 Abstract class for feature extraction. Implement the functions for any
+ preprocessing step (e.g. filtering, artifact removal, sub-sampling,
+ rereferencing, etc.
+ 
+ Properties:
+ instanceSet: Output - the features in an InstanceSet structure
+ trials: Input - the signals in a cell of Trial structures
+ 
+ Functions:
+Implement this function to extract the features from the input Trials 
+and return the features in an instanceSet
+   out = obj.extract(in);
+Info & run time so that the experiments are easily documented. configInfo
+is a string with the configuration information and time is of type double.
+   configInfo = obj.getConfigInfo();
+   time = obj.getTime();
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

FeatureExtractionBase.m

+

SOURCE CODE ^

+
0001 % Abstract class for feature extraction. Implement the functions for any
+0002 % preprocessing step (e.g. filtering, artifact removal, sub-sampling,
+0003 % rereferencing, etc.
+0004 %
+0005 % Properties:
+0006 % instanceSet: Output - the features in an InstanceSet structure
+0007 % trials: Input - the signals in a cell of Trial structures
+0008 %
+0009 % Functions:
+0010 %Implement this function to extract the features from the input Trials
+0011 %and return the features in an instanceSet
+0012 %   out = obj.extract(in);
+0013 %Info & run time so that the experiments are easily documented. configInfo
+0014 %is a string with the configuration information and time is of type double.
+0015 %   configInfo = obj.getConfigInfo();
+0016 %   time = obj.getTime();
+0017 
+0018 
+0019 classdef (Abstract) FeatureExtractionBase < handle
+0020     %Base class for a feature transformer
+0021     %For writing your own FeatureTransformer extend this class and
+0022     %implement the 'transform' function
+0023     properties (Access = public)
+0024         instanceSet; % Output: The dataset
+0025         trials;% Input: The trial signals
+0026         filter;
+0027     end
+0028     
+0029     methods (Abstract = true)
+0030         obj = extract(obj);
+0031         configInfo = getConfigInfo(obj);
+0032         time = getTime(obj);
+0033     end
+0034     
+0035     methods (Access = public)
+0036         function instances = getInstances(obj)
+0037             %Get the instances (no class labels)
+0038             instances = obj.instanceSet.getInstances;
+0039         end
+0040         function labels = getLabels(obj)
+0041             %Get the labels
+0042             labels = obj.instanceSet.getLabels;
+0043         end
+0044         
+0045         function dataset = getDataset(obj)
+0046             % same with getInstances but includes the labels as the last
+0047             % row
+0048             dataset = obj.instanceSet.getDataset;
+0049         end
+0050         
+0051         function instanceSet = getInstanceSet(obj)
+0052             % Get the dataset as an 'InstanceSet' class object
+0053             instanceSet = obj.instanceSet;
+0054         end
+0055         function writeCSV(obj, csvname)
+0056             % write the dataset to a csv file
+0057             % Example:
+0058             %   obj.writeCSV('data.csv');
+0059             obj.instanceSet.writeCSV(csvname);
+0060         end
+0061         function writeArff(obj, fname)
+0062             % write the dataset to a weka-readable file (arff)
+0063             % Caution: filename without extension
+0064             % Example:
+0065             %   obj.writeArff('data')
+0066             obj.instanceSet.writeArff(fname);
+0067         end
+0068     end
+0069 end
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m new file mode 100644 index 0000000..29ef454 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m @@ -0,0 +1,69 @@ +% Abstract class for feature extraction. Implement the functions for any +% preprocessing step (e.g. filtering, artifact removal, sub-sampling, +% rereferencing, etc. +% +% Properties: +% instanceSet: Output - the features in an InstanceSet structure +% trials: Input - the signals in a cell of Trial structures +% +% Functions: +%Implement this function to extract the features from the input Trials +%and return the features in an instanceSet +% out = obj.extract(in); +%Info & run time so that the experiments are easily documented. configInfo +%is a string with the configuration information and time is of type double. +% configInfo = obj.getConfigInfo(); +% time = obj.getTime(); + + +classdef (Abstract) FeatureExtractionBase < handle + %Base class for a feature transformer + %For writing your own FeatureTransformer extend this class and + %implement the 'transform' function + properties (Access = public) + instanceSet; % Output: The dataset + trials;% Input: The trial signals + filter; + end + + methods (Abstract = true) + obj = extract(obj); + configInfo = getConfigInfo(obj); + time = getTime(obj); + end + + methods (Access = public) + function instances = getInstances(obj) + %Get the instances (no class labels) + instances = obj.instanceSet.getInstances; + end + function labels = getLabels(obj) + %Get the labels + labels = obj.instanceSet.getLabels; + end + + function dataset = getDataset(obj) + % same with getInstances but includes the labels as the last + % row + dataset = obj.instanceSet.getDataset; + end + + function instanceSet = getInstanceSet(obj) + % Get the dataset as an 'InstanceSet' class object + instanceSet = obj.instanceSet; + end + function writeCSV(obj, csvname) + % write the dataset to a csv file + % Example: + % obj.writeCSV('data.csv'); + obj.instanceSet.writeCSV(csvname); + end + function writeArff(obj, fname) + % write the dataset to a weka-readable file (arff) + % Caution: filename without extension + % Example: + % obj.writeArff('data') + obj.instanceSet.writeArff(fname); + end + end +end \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.dot b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.dot new file mode 100644 index 0000000..699ad24 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + FeatureExtractionBase -> FeatureExtractionBase; + + FeatureExtractionBase [URL="FeatureExtractionBase.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.html b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.html new file mode 100644 index 0000000..10916ea --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featextraction/@FeatureExtractionBase + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@FeatureExtractionBase >
+

Dependency Graph for ./+eegtoolkit/+featextraction/@FeatureExtractionBase

+ +
+Dependency Graph for ./+eegtoolkit/+featextraction/@FeatureExtractionBase + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.map b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.map new file mode 100644 index 0000000..374407a --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.png b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c008c8bd37bd1da3989db6a3d5590d5a4923950c GIT binary patch literal 6637 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 Wm-nWzPZ55 + + + Index for Directory ./+eegtoolkit/+featextraction/@FeatureExtractionBase + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@FeatureExtractionBase >
+ +

Index for ./+eegtoolkit/+featextraction/@FeatureExtractionBase

+ +

Matlab files in this directory:

+ +
 FeatureExtractionBaseAbstract class for feature extraction. Implement the functions for any
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@Goertzel/Goertzel.html b/doc/+eegtoolkit/+featextraction/@Goertzel/Goertzel.html new file mode 100644 index 0000000..a39e790 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@Goertzel/Goertzel.html @@ -0,0 +1,150 @@ + + + + Description of Goertzel + + + + + + + + + + + + + +

Goertzel +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

Goertzel.m

+

SOURCE CODE ^

+
0001 classdef Goertzel < eegtoolkit.featextraction.FeatureExtractionBase
+0002 %Computes the psd using the welch method
+0003 %Usage:
+0004 %   session = eegtoolkit.util.Session();
+0005 %   session.loadSubject(1);
+0006 %   pwt = ssveptolkit.transform.PWelchTransformer(session.trials);
+0007 %Specify the channel to be used (default = 126)
+0008 %   pwt.channel = 150;
+0009 %Specify the number of seconds to be used (default = 0, use all signal)
+0010 %   pwt.seconds = 3;
+0011 %Specify the nfft parameter (default = 512, computes 257 features)
+0012 %   pwt.nfft = 512;
+0013 %Transform the signal
+0014 %   pwt.transform();
+0015     properties (Access = public)
+0016         channel;
+0017         seconds;
+0018         nfft;
+0019         pff;
+0020         avgTime;
+0021     end
+0022     
+0023     methods (Access = public)
+0024         function GT = Goertzel(trials, seconds, channel, nfft)
+0025 %             if ~iscell(trials)
+0026 %                 error('trials must be cell array of Trial object');
+0027 %             end
+0028             if nargin == 0
+0029                 GT.trials = {};
+0030                 GT.seconds = 0;
+0031                 GT.channel = 1;
+0032                 GT.nfft = 512;
+0033             elseif nargin == 1
+0034                 GT.trials = trials;
+0035                 GT.seconds = 0;
+0036                 GT.channel = 1;
+0037                 GT.nfft = 512;
+0038             elseif nargin == 2
+0039                 GT.trials = trials;
+0040                 GT.channel = 1;
+0041                 GT.seconds = seconds;
+0042                 GT.nfft = 512;
+0043             elseif nargin == 3
+0044                 GT.trials = trials;
+0045                 GT.channel = channel;
+0046                 GT.seconds = seconds;
+0047                 GT.nfft = 512;
+0048             elseif nargin == 4
+0049                 GT.trials = trials;
+0050                 GT.channel = channel;
+0051                 GT.seconds = seconds;
+0052                 GT.nfft = nfft;
+0053             else
+0054 %                 error('invalid number of arguments');
+0055             end
+0056         end
+0057         
+0058         function extract(GT)
+0059            
+0060             numFeatures = length(GT.nfft);
+0061             numTrials = length(GT.trials);
+0062             instances = zeros(numTrials, numFeatures);
+0063             labels = zeros(numTrials,1);
+0064 %             PWT.instances = zeros(numTrials, numFeatures);
+0065 %             PWT.labels = zeros(numTrials,1);
+0066             tic;
+0067             for i=1:numTrials
+0068                 numsamples = GT.trials{i}.samplingRate * GT.seconds;
+0069                 if(numsamples == 0)
+0070                     y = GT.trials{i}.signal(GT.channel,:);
+0071                 else
+0072                     y = GT.trials{i}.signal(GT.channel, 1:numsamples);
+0073                 end
+0074 %                 N = (length(y)+1)/2;
+0075 %                 f = (PWT.trials{i}.samplingRate/2)/N*(0:N-1);
+0076 %                 indxs = find(f>1.2e3 & f<1.3e3);
+0077 %                 X = goertzel(x,indxs);
+0078                 freq_indices = round(GT.nfft/GT.trials{i}.samplingRate*length(y)) + 1;
+0079 %                 ff = [0:1/512:1/2]*250;
+0080 %                 freq_indices = round(ff/PWT.trials{i}.samplingRate*length(y))+1
+0081                 dft_data = goertzel(y,freq_indices);%goertzel(y,freq_indices); general_shortened
+0082                 instances(i,:) = abs(dft_data) ./ length(y);
+0083                 labels(i,1) = floor(GT.trials{i}.label);
+0084             end
+0085             GT.avgTime = toc/numTrials;
+0086             GT.instanceSet = eegtoolkit.util.InstanceSet(instances, labels);
+0087             GT.pff = GT.nfft;
+0088         end
+0089         
+0090         function configInfo = getConfigInfo(GT)
+0091             configInfo = sprintf('Goertzel\tchannel:%d\tseconds:%d\tfreq range:%.3f to %.3f',GT.channel,GT.seconds,GT.nfft(1),GT.nfft(end));
+0092         end
+0093         
+0094         function time = getTime(GT)
+0095             time = GT.avgTime;
+0096         end
+0097     end
+0098    
+0099 end
+0100
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@Goertzel/Goertzel.m b/doc/+eegtoolkit/+featextraction/@Goertzel/Goertzel.m new file mode 100644 index 0000000..09e61a4 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@Goertzel/Goertzel.m @@ -0,0 +1,100 @@ +classdef Goertzel < eegtoolkit.featextraction.FeatureExtractionBase +%Computes the psd using the welch method +%Usage: +% session = eegtoolkit.util.Session(); +% session.loadSubject(1); +% pwt = ssveptolkit.transform.PWelchTransformer(session.trials); +%Specify the channel to be used (default = 126) +% pwt.channel = 150; +%Specify the number of seconds to be used (default = 0, use all signal) +% pwt.seconds = 3; +%Specify the nfft parameter (default = 512, computes 257 features) +% pwt.nfft = 512; +%Transform the signal +% pwt.transform(); + properties (Access = public) + channel; + seconds; + nfft; + pff; + avgTime; + end + + methods (Access = public) + function GT = Goertzel(trials, seconds, channel, nfft) +% if ~iscell(trials) +% error('trials must be cell array of Trial object'); +% end + if nargin == 0 + GT.trials = {}; + GT.seconds = 0; + GT.channel = 1; + GT.nfft = 512; + elseif nargin == 1 + GT.trials = trials; + GT.seconds = 0; + GT.channel = 1; + GT.nfft = 512; + elseif nargin == 2 + GT.trials = trials; + GT.channel = 1; + GT.seconds = seconds; + GT.nfft = 512; + elseif nargin == 3 + GT.trials = trials; + GT.channel = channel; + GT.seconds = seconds; + GT.nfft = 512; + elseif nargin == 4 + GT.trials = trials; + GT.channel = channel; + GT.seconds = seconds; + GT.nfft = nfft; + else +% error('invalid number of arguments'); + end + end + + function extract(GT) + + numFeatures = length(GT.nfft); + numTrials = length(GT.trials); + instances = zeros(numTrials, numFeatures); + labels = zeros(numTrials,1); +% PWT.instances = zeros(numTrials, numFeatures); +% PWT.labels = zeros(numTrials,1); + tic; + for i=1:numTrials + numsamples = GT.trials{i}.samplingRate * GT.seconds; + if(numsamples == 0) + y = GT.trials{i}.signal(GT.channel,:); + else + y = GT.trials{i}.signal(GT.channel, 1:numsamples); + end +% N = (length(y)+1)/2; +% f = (PWT.trials{i}.samplingRate/2)/N*(0:N-1); +% indxs = find(f>1.2e3 & f<1.3e3); +% X = goertzel(x,indxs); + freq_indices = round(GT.nfft/GT.trials{i}.samplingRate*length(y)) + 1; +% ff = [0:1/512:1/2]*250; +% freq_indices = round(ff/PWT.trials{i}.samplingRate*length(y))+1 + dft_data = goertzel(y,freq_indices);%goertzel(y,freq_indices); general_shortened + instances(i,:) = abs(dft_data) ./ length(y); + labels(i,1) = floor(GT.trials{i}.label); + end + GT.avgTime = toc/numTrials; + GT.instanceSet = eegtoolkit.util.InstanceSet(instances, labels); + GT.pff = GT.nfft; + end + + function configInfo = getConfigInfo(GT) + configInfo = sprintf('Goertzel\tchannel:%d\tseconds:%d\tfreq range:%.3f to %.3f',GT.channel,GT.seconds,GT.nfft(1),GT.nfft(end)); + end + + function time = getTime(GT) + time = GT.avgTime; + end + end + +end + diff --git a/doc/+eegtoolkit/+featextraction/@Goertzel/graph.dot b/doc/+eegtoolkit/+featextraction/@Goertzel/graph.dot new file mode 100644 index 0000000..6759e88 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@Goertzel/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + Goertzel -> Goertzel; + + Goertzel [URL="Goertzel.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@Goertzel/graph.html b/doc/+eegtoolkit/+featextraction/@Goertzel/graph.html new file mode 100644 index 0000000..04a3c86 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@Goertzel/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featextraction/@Goertzel + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@Goertzel >
+

Dependency Graph for ./+eegtoolkit/+featextraction/@Goertzel

+ +
+Dependency Graph for ./+eegtoolkit/+featextraction/@Goertzel + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@Goertzel/graph.map b/doc/+eegtoolkit/+featextraction/@Goertzel/graph.map new file mode 100644 index 0000000..c134b8a --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@Goertzel/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featextraction/@Goertzel/graph.png b/doc/+eegtoolkit/+featextraction/@Goertzel/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..481b76bfc9933fff583156c99993d4ca9f5e0e1c GIT binary patch literal 4176 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 R75qg2(N@=2D^{@!{Xd1Q2r2*o literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+featextraction/@Goertzel/index.html b/doc/+eegtoolkit/+featextraction/@Goertzel/index.html new file mode 100644 index 0000000..a9985e3 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@Goertzel/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+featextraction/@Goertzel + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@Goertzel >
+ +

Index for ./+eegtoolkit/+featextraction/@Goertzel

+ +

Matlab files in this directory:

+ +
 Goertzel
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@L1MCCA/L1MCCA.html b/doc/+eegtoolkit/+featextraction/@L1MCCA/L1MCCA.html new file mode 100644 index 0000000..a32cc8c --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@L1MCCA/L1MCCA.html @@ -0,0 +1,77 @@ + + + + Description of L1MCCA + + + + + + + + + + + + + +

L1MCCA +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

L1MCCA.m

+

SOURCE CODE ^

+
0001 classdef L1MCCA < eegtoolkit.featextraction.PSDExtractionBase%FeatureExtractionBase
+0002     %
+0003     % works only on our datasets, for other datasets needs modifications
+0004     %
+0005     properties (Access = public)
+0006         channel;
+0007         avgTime;
+0008         stimulus_freqs;
+0009         FreqSamp;
+0010         NumHarm;
+0011     end
+0012     methods (Access = public)
+0013         function L1MCCA = L1MCCA()
+0014         end
+0015         
+0016         function extract(L1MCCA)
+0017             L1MCCA.instanceSet = eegtoolkit.util.L1MCCAInstanceSet(L1MCCA.trials);
+0018         end
+0019         
+0020         function configInfo = getConfigInfo(L1MCCA)
+0021             configInfo = sprintf('L1MCCA');
+0022         end
+0023         function time = getTime(L1MCCA)
+0024             time = 0;
+0025         end
+0026     end
+0027 end
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@L1MCCA/L1MCCA.m b/doc/+eegtoolkit/+featextraction/@L1MCCA/L1MCCA.m new file mode 100644 index 0000000..ed3a795 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@L1MCCA/L1MCCA.m @@ -0,0 +1,27 @@ +classdef L1MCCA < eegtoolkit.featextraction.PSDExtractionBase%FeatureExtractionBase + % + % works only on our datasets, for other datasets needs modifications + % + properties (Access = public) + channel; + avgTime; + stimulus_freqs; + FreqSamp; + NumHarm; + end + methods (Access = public) + function L1MCCA = L1MCCA() + end + + function extract(L1MCCA) + L1MCCA.instanceSet = eegtoolkit.util.L1MCCAInstanceSet(L1MCCA.trials); + end + + function configInfo = getConfigInfo(L1MCCA) + configInfo = sprintf('L1MCCA'); + end + function time = getTime(L1MCCA) + time = 0; + end + end +end \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.dot b/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.dot new file mode 100644 index 0000000..5dff22f --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + L1MCCA -> L1MCCA; + + L1MCCA [URL="L1MCCA.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.html b/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.html new file mode 100644 index 0000000..f1e9037 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featextraction/@L1MCCA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@L1MCCA >
+

Dependency Graph for ./+eegtoolkit/+featextraction/@L1MCCA

+ +
+Dependency Graph for ./+eegtoolkit/+featextraction/@L1MCCA + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.map b/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.map new file mode 100644 index 0000000..55100c7 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.png b/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..99fba2909ad049496bf3eaebe4b34db6eb159336 GIT binary patch literal 4313 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+featextraction/@L1MCCA/index.html b/doc/+eegtoolkit/+featextraction/@L1MCCA/index.html new file mode 100644 index 0000000..73d7594 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@L1MCCA/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+featextraction/@L1MCCA + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@L1MCCA >
+ +

Index for ./+eegtoolkit/+featextraction/@L1MCCA

+ +

Matlab files in this directory:

+ +
 L1MCCA
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@MLR_Transf/MLR_Transf.html b/doc/+eegtoolkit/+featextraction/@MLR_Transf/MLR_Transf.html new file mode 100644 index 0000000..ad43195 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@MLR_Transf/MLR_Transf.html @@ -0,0 +1,114 @@ + + + + Description of MLR_Transf + + + + + + + + + + + + + +

MLR_Transf +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

MLR_Transf.m

+

SOURCE CODE ^

+
0001 classdef MLR_Transf < eegtoolkit.featextraction.PSDExtractionBase%FeatureExtractionBase
+0002     %Computes the psd using the welch method
+0003     %Usage:
+0004     %   session = eegtoolkit.util.Session();
+0005     %   session.loadSubject(1);
+0006     %   pwt = ssveptolkit.transform.PWelchTransformer(session.trials);
+0007     %Specify the channel to be used (default = 126)
+0008     %   pwt.channel = 150;
+0009     %Specify the number of seconds to be used (default = 0, use all signal)
+0010     %   pwt.seconds = 3;
+0011     %Specify the nfft parameter (default = 512, computes 257 features)
+0012     %   pwt.nfft = 512;
+0013     %Transform the signal
+0014     %   pwt.transform();
+0015     properties (Access = public)
+0016         channel;
+0017         avgTime;
+0018     end
+0019     methods (Access = public)
+0020         function PWT = MLR_Transf(chns)
+0021             if nargin == 1
+0022                 PWT.trials = {};
+0023                 PWT.channel = [1:length(chns)];
+0024             else
+0025                 error('invalid number of arguments');
+0026             end
+0027         end
+0028         
+0029         function extract(PWT)
+0030             
+0031             numTrials = length(PWT.trials);
+0032             [m n]=size(PWT.trials{1}.signal(PWT.channel,:));
+0033             data = zeros(m,n,numTrials);
+0034             labels = zeros(numTrials,1);
+0035             
+0036             for i = 1 : numTrials   %
+0037                 for j=1:m
+0038                     data(j,:,i) = PWT.trials{i}.signal(j,:);%data(j,:,i)./norm(data(j,:,i));
+0039                     data(j,:,i) = (data(j,:,i) - mean(data(j,:,i)))./std(data(j,:,i));
+0040 %                     data(j,:,i) = data(j,:,i)./norm(data(j,:,i));
+0041                 end%
+0042                 labels(i) = floor(PWT.trials{i}.label);
+0043             end
+0044             %data= reshape(data,m*n,size(data,3));
+0045             for i=1:numTrials
+0046                 newData(i,:) = [data(1,:,i) data(2,:,i)];
+0047             end
+0048             %             MeanTrainData=mean(data,2);
+0049             %             data=data-repmat(MeanTrainData,1,numTrials);
+0050             data = newData;
+0051             PWT.instanceSet = eegtoolkit.util.InstanceSet(data, labels);
+0052         end
+0053         
+0054         function configInfo = getConfigInfo(PWT)
+0055             configInfo = sprintf('MLR_Transf_rawdata');
+0056         end
+0057         
+0058         function time = getTime(PWT)
+0059             time = PWT.avgTime;
+0060         end
+0061     end
+0062     
+0063 end
+0064
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@MLR_Transf/MLR_Transf.m b/doc/+eegtoolkit/+featextraction/@MLR_Transf/MLR_Transf.m new file mode 100644 index 0000000..4c1c6e5 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@MLR_Transf/MLR_Transf.m @@ -0,0 +1,64 @@ +classdef MLR_Transf < eegtoolkit.featextraction.PSDExtractionBase%FeatureExtractionBase + %Computes the psd using the welch method + %Usage: + % session = eegtoolkit.util.Session(); + % session.loadSubject(1); + % pwt = ssveptolkit.transform.PWelchTransformer(session.trials); + %Specify the channel to be used (default = 126) + % pwt.channel = 150; + %Specify the number of seconds to be used (default = 0, use all signal) + % pwt.seconds = 3; + %Specify the nfft parameter (default = 512, computes 257 features) + % pwt.nfft = 512; + %Transform the signal + % pwt.transform(); + properties (Access = public) + channel; + avgTime; + end + methods (Access = public) + function PWT = MLR_Transf(chns) + if nargin == 1 + PWT.trials = {}; + PWT.channel = [1:length(chns)]; + else + error('invalid number of arguments'); + end + end + + function extract(PWT) + + numTrials = length(PWT.trials); + [m n]=size(PWT.trials{1}.signal(PWT.channel,:)); + data = zeros(m,n,numTrials); + labels = zeros(numTrials,1); + + for i = 1 : numTrials % + for j=1:m + data(j,:,i) = PWT.trials{i}.signal(j,:);%data(j,:,i)./norm(data(j,:,i)); + data(j,:,i) = (data(j,:,i) - mean(data(j,:,i)))./std(data(j,:,i)); +% data(j,:,i) = data(j,:,i)./norm(data(j,:,i)); + end% + labels(i) = floor(PWT.trials{i}.label); + end + %data= reshape(data,m*n,size(data,3)); + for i=1:numTrials + newData(i,:) = [data(1,:,i) data(2,:,i)]; + end + % MeanTrainData=mean(data,2); + % data=data-repmat(MeanTrainData,1,numTrials); + data = newData; + PWT.instanceSet = eegtoolkit.util.InstanceSet(data, labels); + end + + function configInfo = getConfigInfo(PWT) + configInfo = sprintf('MLR_Transf_rawdata'); + end + + function time = getTime(PWT) + time = PWT.avgTime; + end + end + +end + diff --git a/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.dot b/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.dot new file mode 100644 index 0000000..3031a6a --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + MLR_Transf -> MLR_Transf; + + MLR_Transf [URL="MLR_Transf.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.html b/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.html new file mode 100644 index 0000000..12815ea --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featextraction/@MLR_Transf + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@MLR_Transf >
+

Dependency Graph for ./+eegtoolkit/+featextraction/@MLR_Transf

+ +
+Dependency Graph for ./+eegtoolkit/+featextraction/@MLR_Transf + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.map b/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.map new file mode 100644 index 0000000..e86c677 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.png b/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1598e2238b64cb5097bba947c1debb74c67bb079 GIT binary patch literal 5170 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 H-Yn#Q=;|hn literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+featextraction/@MLR_Transf/index.html b/doc/+eegtoolkit/+featextraction/@MLR_Transf/index.html new file mode 100644 index 0000000..64166c1 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@MLR_Transf/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+featextraction/@MLR_Transf + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@MLR_Transf >
+ +

Index for ./+eegtoolkit/+featextraction/@MLR_Transf

+ +

Matlab files in this directory:

+ +
 MLR_Transf
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/PSDExtractionBase.html b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/PSDExtractionBase.html new file mode 100644 index 0000000..88fe395 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/PSDExtractionBase.html @@ -0,0 +1,55 @@ + + + + Description of PSDExtractionBase + + + + + + + + + + + + + +

PSDExtractionBase +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + + +

DOWNLOAD ^

+

PSDExtractionBase.m

+

SOURCE CODE ^

+
0001 classdef (Abstract) PSDExtractionBase < eegtoolkit.featextraction.FeatureExtractionBase
+0002     %Base class for a feature transformer based on power spectral density
+0003     %estimates
+0004     properties (Access = public)
+0005         pff; % The frequencies of the spectrum
+0006     end
+0007 end
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/PSDExtractionBase.m b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/PSDExtractionBase.m new file mode 100644 index 0000000..d2a71a7 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/PSDExtractionBase.m @@ -0,0 +1,7 @@ +classdef (Abstract) PSDExtractionBase < eegtoolkit.featextraction.FeatureExtractionBase + %Base class for a feature transformer based on power spectral density + %estimates + properties (Access = public) + pff; % The frequencies of the spectrum + end +end \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.dot b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.dot new file mode 100644 index 0000000..246d58e --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + PSDExtractionBase -> PSDExtractionBase; + + PSDExtractionBase [URL="PSDExtractionBase.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.html b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.html new file mode 100644 index 0000000..6467381 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featextraction/@PSDExtractionBase + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@PSDExtractionBase >
+

Dependency Graph for ./+eegtoolkit/+featextraction/@PSDExtractionBase

+ +
+Dependency Graph for ./+eegtoolkit/+featextraction/@PSDExtractionBase + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.map b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.map new file mode 100644 index 0000000..5c6e47e --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.png b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..674167ea24b3daacf9dd13b71c85623eaae13eb5 GIT binary patch literal 6642 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 + + + Index for Directory ./+eegtoolkit/+featextraction/@PSDExtractionBase + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@PSDExtractionBase >
+ +

Index for ./+eegtoolkit/+featextraction/@PSDExtractionBase

+ +

Matlab files in this directory:

+ +
 PSDExtractionBase
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PWelch/PWelch.html b/doc/+eegtoolkit/+featextraction/@PWelch/PWelch.html new file mode 100644 index 0000000..07f77f4 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PWelch/PWelch.html @@ -0,0 +1,167 @@ + + + + Description of PWelch + + + + + + + + + + + + + +

PWelch +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

PWelch.m

+

SOURCE CODE ^

+
0001 classdef PWelch < eegtoolkit.featextraction.PSDExtractionBase
+0002 %Computes the psd using the welch method
+0003 %Usage:
+0004 %   session = eegtoolkit.util.Session();
+0005 %   session.loadSubject(1);
+0006 %   pwt = ssveptolkit.transform.PWelchTransformer(session.trials);
+0007 %Specify the channel to be used (default = 126)
+0008 %   pwt.channel = 150;
+0009 %Specify the number of seconds to be used (default = 0, use all signal)
+0010 %   pwt.seconds = 3;
+0011 %Specify the nfft parameter (default = 512, computes 257 features)
+0012 %   pwt.nfft = 512;
+0013 %Transform the signal
+0014 %   pwt.transform();
+0015     properties (Access = public)
+0016         channel;
+0017         seconds;
+0018         nfft;
+0019         avgTime;
+0020     end
+0021     
+0022     methods (Access = public)
+0023         function PW = PWelch(trials, seconds, channel, nfft)
+0024 %             if ~iscell(trials)
+0025 %                 error('trials must be cell array of Trial object');
+0026 %             end
+0027             if nargin == 0
+0028                 PW.trials = {};
+0029                 PW.seconds = 0;
+0030                 PW.channel = 1;
+0031                 PW.nfft = 512;
+0032             elseif nargin == 1
+0033                 PW.trials = trials;
+0034                 PW.seconds = 0;
+0035                 PW.channel = 1;
+0036                 PW.nfft = 512;
+0037             elseif nargin == 2
+0038                 PW.trials = trials;
+0039                 PW.channel = 1;
+0040                 PW.seconds = seconds;
+0041                 PW.nfft = 512;
+0042             elseif nargin == 3
+0043                 PW.trials = trials;
+0044                 PW.channel = channel;
+0045                 PW.seconds = seconds;
+0046                 PW.nfft = 512;
+0047             elseif nargin == 4
+0048                 PW.trials = trials;
+0049                 PW.channel = channel;
+0050                 PW.seconds = seconds;
+0051                 PW.nfft = nfft;
+0052             else
+0053 %                 error('invalid number of arguments');
+0054             end
+0055         end
+0056         
+0057         function extract(PW)
+0058             if length(PW.nfft)==1
+0059                 numFeatures = PW.nfft/2+1;
+0060             else
+0061                 numFeatures = length(PW.nfft);
+0062             end
+0063             numTrials = length(PW.trials);
+0064             instances = zeros(numTrials, numFeatures);
+0065             labels = zeros(numTrials,1);
+0066 %             PWT.instances = zeros(numTrials, numFeatures);
+0067 %             PWT.labels = zeros(numTrials,1);
+0068             tic;
+0069             for i=1:numTrials
+0070                 if length(PW.seconds) == 1
+0071                     numsamples = PW.trials{i}.samplingRate * PW.seconds;
+0072                     if(numsamples == 0)
+0073                         y = PW.trials{i}.signal(PW.channel,:);
+0074                     else
+0075                         y = PW.trials{i}.signal(PW.channel, 1:numsamples);
+0076                     end
+0077                 elseif length(PW.seconds) == 2
+0078                     sampleA = PW.trials{i}.samplingRate*PW.seconds(1) +1;
+0079                     sampleB = PW.trials{i}.samplingRate*PW.seconds(2);
+0080                     y = PW.trials{i}.signal(PW.channel, sampleA:sampleB);
+0081                 else 
+0082                     error('invalid seconds parameter');
+0083                 end
+0084                 if isa(PW.filter,'dfilt.df2sos') || isa(PW.filter,'dfilt.df2')
+0085                     y = filter(PW.filter,y);
+0086                 elseif isa(PW.filter,'dfilt.dffir')
+0087                     y = filtfilt(PW.filter.Numerator,1,y);
+0088                 end
+0089                 if length(PW.nfft>1)
+0090                     [pxx, pff]=pwelch(y,[],[],PW.nfft,PW.trials{i}.samplingRate);
+0091                 else
+0092                     [pxx, pff]=pwelch(y,[],[],PW.nfft,PW.trials{i}.samplingRate,'onesided');
+0093                 end
+0094                 instances(i,:) = pxx;
+0095                 labels(i,1) = floor(PW.trials{i}.label);
+0096             end
+0097             total = toc;
+0098             PW.avgTime = total/numTrials;
+0099             PW.instanceSet = eegtoolkit.util.InstanceSet(instances, labels);
+0100             PW.pff = pff;
+0101         end
+0102         
+0103         function configInfo = getConfigInfo(PW)
+0104             if length(PW.nfft)>1
+0105                 configInfo = sprintf('PWelch\tchannel:%d\tseconds:%d\t freq range:%.3f to %.3f',PW.channel,PW.seconds,PW.nfft(1),PW.nfft(end));
+0106             else
+0107                 configInfo = sprintf('PWelch\tchannel:%d\tseconds:%d\tnfft:%d',PW.channel,PW.seconds,PW.nfft);
+0108             end
+0109         end
+0110         
+0111         function time = getTime(PW)
+0112             time = PW.avgTime;
+0113         end
+0114     end
+0115    
+0116 end
+0117
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PWelch/PWelch.m b/doc/+eegtoolkit/+featextraction/@PWelch/PWelch.m new file mode 100644 index 0000000..0dc4a92 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PWelch/PWelch.m @@ -0,0 +1,117 @@ +classdef PWelch < eegtoolkit.featextraction.PSDExtractionBase +%Computes the psd using the welch method +%Usage: +% session = eegtoolkit.util.Session(); +% session.loadSubject(1); +% pwt = ssveptolkit.transform.PWelchTransformer(session.trials); +%Specify the channel to be used (default = 126) +% pwt.channel = 150; +%Specify the number of seconds to be used (default = 0, use all signal) +% pwt.seconds = 3; +%Specify the nfft parameter (default = 512, computes 257 features) +% pwt.nfft = 512; +%Transform the signal +% pwt.transform(); + properties (Access = public) + channel; + seconds; + nfft; + avgTime; + end + + methods (Access = public) + function PW = PWelch(trials, seconds, channel, nfft) +% if ~iscell(trials) +% error('trials must be cell array of Trial object'); +% end + if nargin == 0 + PW.trials = {}; + PW.seconds = 0; + PW.channel = 1; + PW.nfft = 512; + elseif nargin == 1 + PW.trials = trials; + PW.seconds = 0; + PW.channel = 1; + PW.nfft = 512; + elseif nargin == 2 + PW.trials = trials; + PW.channel = 1; + PW.seconds = seconds; + PW.nfft = 512; + elseif nargin == 3 + PW.trials = trials; + PW.channel = channel; + PW.seconds = seconds; + PW.nfft = 512; + elseif nargin == 4 + PW.trials = trials; + PW.channel = channel; + PW.seconds = seconds; + PW.nfft = nfft; + else +% error('invalid number of arguments'); + end + end + + function extract(PW) + if length(PW.nfft)==1 + numFeatures = PW.nfft/2+1; + else + numFeatures = length(PW.nfft); + end + numTrials = length(PW.trials); + instances = zeros(numTrials, numFeatures); + labels = zeros(numTrials,1); +% PWT.instances = zeros(numTrials, numFeatures); +% PWT.labels = zeros(numTrials,1); + tic; + for i=1:numTrials + if length(PW.seconds) == 1 + numsamples = PW.trials{i}.samplingRate * PW.seconds; + if(numsamples == 0) + y = PW.trials{i}.signal(PW.channel,:); + else + y = PW.trials{i}.signal(PW.channel, 1:numsamples); + end + elseif length(PW.seconds) == 2 + sampleA = PW.trials{i}.samplingRate*PW.seconds(1) +1; + sampleB = PW.trials{i}.samplingRate*PW.seconds(2); + y = PW.trials{i}.signal(PW.channel, sampleA:sampleB); + else + error('invalid seconds parameter'); + end + if isa(PW.filter,'dfilt.df2sos') || isa(PW.filter,'dfilt.df2') + y = filter(PW.filter,y); + elseif isa(PW.filter,'dfilt.dffir') + y = filtfilt(PW.filter.Numerator,1,y); + end + if length(PW.nfft>1) + [pxx, pff]=pwelch(y,[],[],PW.nfft,PW.trials{i}.samplingRate); + else + [pxx, pff]=pwelch(y,[],[],PW.nfft,PW.trials{i}.samplingRate,'onesided'); + end + instances(i,:) = pxx; + labels(i,1) = floor(PW.trials{i}.label); + end + total = toc; + PW.avgTime = total/numTrials; + PW.instanceSet = eegtoolkit.util.InstanceSet(instances, labels); + PW.pff = pff; + end + + function configInfo = getConfigInfo(PW) + if length(PW.nfft)>1 + configInfo = sprintf('PWelch\tchannel:%d\tseconds:%d\t freq range:%.3f to %.3f',PW.channel,PW.seconds,PW.nfft(1),PW.nfft(end)); + else + configInfo = sprintf('PWelch\tchannel:%d\tseconds:%d\tnfft:%d',PW.channel,PW.seconds,PW.nfft); + end + end + + function time = getTime(PW) + time = PW.avgTime; + end + end + +end + diff --git a/doc/+eegtoolkit/+featextraction/@PWelch/graph.dot b/doc/+eegtoolkit/+featextraction/@PWelch/graph.dot new file mode 100644 index 0000000..806a74c --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PWelch/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + PWelch -> PWelch; + + PWelch [URL="PWelch.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PWelch/graph.html b/doc/+eegtoolkit/+featextraction/@PWelch/graph.html new file mode 100644 index 0000000..9d3d176 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PWelch/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featextraction/@PWelch + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@PWelch >
+

Dependency Graph for ./+eegtoolkit/+featextraction/@PWelch

+ +
+Dependency Graph for ./+eegtoolkit/+featextraction/@PWelch + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PWelch/graph.map b/doc/+eegtoolkit/+featextraction/@PWelch/graph.map new file mode 100644 index 0000000..de91879 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PWelch/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featextraction/@PWelch/graph.png b/doc/+eegtoolkit/+featextraction/@PWelch/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b2fb95811d052a2b85bef46268aad896b2722fff GIT binary patch literal 4181 zcmX9?1z3|^8{QD(nyGO!x#tyQEGscbR!_BfPgSkru0aieiH#vS_zSo9-T^e zhe-d2>tCFA@oqcMdG0zxBMo(_DPR;32!vV>u4Mv_vEZ&qMgqqC`6e_tkl5?%YC$e8 zulaQ!UPB<)DDr1U|P3%DAhO^9{SW01bhR7+i*(in++6^~*vHQ!uUX;3}h5%BYkuvVMs z?NUr=^MBGawslg!q`VZ`Lzlu=?y^Gc8%EhD^_c*RO%wnBu;LA^!`0Tpn3$M?|83ux z_mhX@S5`9Ly?fVlmKr8QMnVGW(A3n-$jtoF)I`+U+WM^INZVeGEfyu-R%})EDm^`> zsY!#8k&$d9l9U!{VS!#;T(n8Ok&3W;^oT@ST6%P1;^&Va(7?dJ&s9}zv2?uC^Yg^u z8)b)X4dQb@e!}ILP8XJu=0`f^Ny(cr>ss+POsp6J^=wy z;MCS+E?O2Amg?&2#*U7UrTjz?guZ@CN=gKnC#vB&$4IHIZeZYTMvAMBQmjf!O4ADq zSHr@>!1-!?^at^Vcl(`5cISUFoSvU-!QpT<4Gp4>j*f@!?vxS|65n@P*?fY6+M>uA zNKWTa;^}ka74C3-eN8tvVa)5-#wZk3roqd`Mm1s*68rITR|%s(FJbR$YqL%cw>~s9 zsPfa3Cnh9Zr>AeK3q6#QlQVm*eJE5@Q#1K3NJ3LX!^P223$3LArnC8{A#Z4C=uE8C z%%xe)&(H5VC#N9;14CSk{qga!lz_m?WKQLNE#E6~y2+fk6cn;lR8$z_TiB%>$#{8q zf|q)7&eMi@2i>@xd$2R#w(9lE%nd?AL%qh!(b3V-tD>{fh57m6Y_~n8w`YC|F~=YM z4&B=6RlQjEwwTfoBf(^3z`eb_iSqOExRTlBo6^#lA3L6z^i587{fwa<7#T^2+>aLv*k{#Ow#w;)!f|OYaVsO z5I7UVOsQxV2^-U@lJs0k7V*B$&Uh32o3-I$2WxBVF#Xk6UTp0x@htN8&15uew-ZkO zZoDCH0)ZeSE4$F1!kdZ3PX57+7kr7hnTmLRvQhO0fx{|?-WCxSmcg&7 zYCm}*56aiWn|9FK@Rxh~M7XiAYYS{Zw51 zO``Daq2b-T)Wx4Z{rf@6_20p>v^Q^>tNuLChTNn_FK=xb0hojY2TO{ICWM_Gu;}@L zE)EV2@k5SJPWGCjDMf{aXJfdY!y&|tV_%*3*2lhT{08WJ`{9G2HV>WIC-VXmK?xC& zc&=yrbkIHm!5F9DF;$!T`}glRa6V=CD6cQUJNDzFqn|4)AK?B0dF$%xa(wz!$*k0- zTko}iv94|my{Hr zMPveOV^CFI98jNw)gjM*Qc_X|NZ9F4Ti}z6?Vq$%l$2{}xqxI|tZ-{YzU@i-f?ux6v#f%G0#GWhtnAj$pFb^3Om-*BH{2|&tn_(#c>&Y# zZ7*`ITu4>h6WQd*!neNf(ddDd#)O1~l$VvcN|*X?jLX{fELmu1YGz_Eh0My$%#K`b5hUB$_jSo1$IgEnZmcXUx*QxFD#6?NBlZen z<&j*MDg#+wSm2KmGyfb83ErL8yJ1j(Bn#RexVJ1TD;wbJyF%a|P?LKF`j6nF=al!; z@_aHpG9oP{g`r1B6+I|km9hEeMB8xomkq#}N?Q8sW{^vWI*>L<WL+O0AH^!w8dMTB+wF&hLTw*^|45*8UX#@XTv~0dg2$hFj(BFV zrZ%py1kf%aH{7lFs>VtlGgz40f%&TbaZIl&Yy~kiOsC6pdH$h@M1rh`0OteJX~F8fG8cUl{WPE^dxD<&^X!H zx;;8CZRbEr{O+-XQ zE_QZ51dVdb2?NK(u3lb`)YL9L6py?K#~2$M6E}j1rJNp;)3dVv3O(H1X+|>;HwxW* z?~-3}KJ&F#We&U`n^u*YdOwEaB#^}3%d1B@^skFnEOPmxK?{O3GfM|{imLRmi1CVb zAO3U$;`RG`W@>6GR??0r6~PZQ(Ey_K^q-`^pWpJ#3_;uzXlVAA-1;Og)!#ZsMG;^z zb0EPde?4a|va_Rxx2donk z6OFB{i&MULcXvZirR#S^H>k7(UKf;?oAPReym?siHjCi)+4T9=?|Fd*p}z~M-t zKY(mKnbI)=0s>v_?aPveidR7Ecp>L!hkt}S%yLA`O2{18Ak~2zmhW*m{F}gE7=Di0 zg~!al5q5SroVzl96llf(H^OwLi7{Yv{QUh{IXT6b$I2W?i#~qLNKbE*_h0Pm=!kp& z{yh*$2jDwQ6j!S}Cj^?4V`Cozlc@3-iI);btv#>JrGSneu~p749we#B%z*-V-ktlZ)s^!@|lLPh@;>R z4i4ablB-worxSq+Q>q~00HsIO2I%>i68ftKM@D`Q3^3T2U4QW40f;}00RaKEle-#x z^gp`0so&}(Y5=L+-QDF*Ma(QLL{CpYjEag1DEc~qk6>hCx;)3b?tuCE`O(tmh@pPz z&fcD;pPv*UEq4k$A9>Rh;q2sem6n$F`}y(OrHba|+4k1;)`ooNJ1gXVX@f3_j5J(E`t$>fTyQ>y+aTFODh2(g}TN5*5Ss4;5xgc z`>-es2BY90lu)&T-0x{=n)NjajRw6~#PI76&c4paIjpX(UT0?3DKnoe&@|Q8r!2Lp z>j3d>psg*&1YbU7Ms@zj_&$rUqUW8e$rDtU!%*@O{B~m;*vo*Yamgl&4@1kaAX4sX2B?S$!|Lq27hV_ZG zbu2DE($Ur?0LK7cf4V4WH2~5xTcz*@d`1$ikaU~@z zFtPc$wq#i`bqA&Arx~E|>D`4+dAGrvKgbpD+{pmcxe{oF-|YKf5 zXQW-Ow2i9gw8etTEG9qQp1Q96&1}bEk7QV$Hc`^Ffub!EOo*8=)sm0 zb!TB_rQw4AA_MBgokIYcK07;0(;JWf^l5!4LZevc@A{KlKwbL?tbJ`O`{WW)5iTpL t<<7&dEA++S;r|B?$XQh`vNL=s3}d+!kg_=61^y?1=xG~jm1sPC@joK@{;B`~ literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+featextraction/@PWelch/index.html b/doc/+eegtoolkit/+featextraction/@PWelch/index.html new file mode 100644 index 0000000..e8b3357 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PWelch/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+featextraction/@PWelch + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@PWelch >
+ +

Index for ./+eegtoolkit/+featextraction/@PWelch

+ +

Matlab files in this directory:

+ +
 PWelch
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PWelchExperimental/PWelchExperimental.html b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/PWelchExperimental.html new file mode 100644 index 0000000..9619064 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/PWelchExperimental.html @@ -0,0 +1,183 @@ + + + + Description of PWelchExperimental + + + + + + + + + + + + + +

PWelchExperimental +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

PWelchExperimental.m

+

SOURCE CODE ^

+
0001 classdef PWelchExperimental < eegtoolkit.featextraction.FeatureExtractionBase
+0002 %Computes the psd using the welch method
+0003 %Usage:
+0004 %   session = eegtoolkit.util.Session();
+0005 %   session.loadSubject(1);
+0006 %   pwt = ssveptolkit.transform.PWelchTransformer(session.trials);
+0007 %Specify the channel to be used (default = 126)
+0008 %   pwt.channel = 150;
+0009 %Specify the number of seconds to be used (default = 0, use all signal)
+0010 %   pwt.seconds = 3;
+0011 %Specify the nfft parameter (default = 512, computes 257 features)
+0012 %   pwt.nfft = 512;
+0013 %Transform the signal
+0014 %   pwt.transform();
+0015     properties (Access = public)
+0016         channel;
+0017         seconds;
+0018         nfft;
+0019         pff;
+0020         win_len;
+0021         over_len;
+0022         avgTime;
+0023     end
+0024     
+0025     methods (Access = public)
+0026         function PWT = PWelchExperimental(trials, seconds, channel, nfft,win_len,over_len)
+0027 %             if ~iscell(trials)
+0028 %                 error('trials must be cell array of Trial object');
+0029 %             end
+0030             if nargin == 0
+0031                 PWT.trials = {};
+0032                 PWT.seconds = 0;
+0033                 PWT.channel = 1;
+0034                 PWT.nfft = 512;
+0035                 PWT.win_len=[];
+0036                 PWT.over_len=[];
+0037             elseif nargin == 1
+0038                 PWT.trials = trials;
+0039                 PWT.seconds = 0;
+0040                 PWT.channel = 1;
+0041                 PWT.nfft = 512;
+0042                 PWT.win_len=[];
+0043                 PWT.over_len=[];
+0044             elseif nargin == 2
+0045                 PWT.trials = trials;
+0046                 PWT.channel = 1;
+0047                 PWT.seconds = seconds;
+0048                 PWT.nfft = 512;
+0049                 PWT.win_len=[];
+0050                 PWT.over_len=[];
+0051             elseif nargin == 3
+0052                 PWT.trials = trials;
+0053                 PWT.channel = channel;
+0054                 PWT.seconds = seconds;
+0055                 PWT.nfft = 512;
+0056                 PWT.win_len=[];
+0057                 PWT.over_len=[];
+0058             elseif nargin == 4
+0059                 PWT.trials = trials;
+0060                 PWT.channel = channel;
+0061                 PWT.seconds = seconds;
+0062                 PWT.nfft = nfft;
+0063                 PWT.win_len=[];
+0064                 PWT.over_len=[];
+0065             elseif nargin == 5
+0066                 PWT.trials = trials;
+0067                 PWT.channel = channel;
+0068                 PWT.seconds = seconds;
+0069                 PWT.nfft = nfft;
+0070                 PWT.win_len=win_len;
+0071                 PWT.over_len=[];
+0072             elseif nargin == 6
+0073                 PWT.trials = trials;
+0074                 PWT.channel = channel;
+0075                 PWT.seconds = seconds;
+0076                 PWT.nfft = nfft;
+0077                 PWT.win_len=win_len;
+0078                 PWT.over_len=over_len;
+0079             else
+0080 %                 error('invalid number of arguments');
+0081             end
+0082         end
+0083         
+0084         function extract(PWT)
+0085             if length(PWT.nfft)==1
+0086                 numFeatures = PWT.nfft/2+1;
+0087             else
+0088                 numFeatures = length(PWT.nfft);
+0089             end
+0090             numTrials = length(PWT.trials);
+0091             instances = zeros(numTrials, numFeatures);
+0092             labels = zeros(numTrials,1);
+0093 %             PWT.instances = zeros(numTrials, numFeatures);
+0094 %             PWT.labels = zeros(numTrials,1);
+0095             tic;
+0096             for i=1:numTrials
+0097                 numsamples = PWT.trials{i}.samplingRate * PWT.seconds;
+0098                 if(numsamples == 0)
+0099                     y = PWT.trials{i}.signal(PWT.channel,:);
+0100                 else
+0101                     y = PWT.trials{i}.signal(PWT.channel, 1:numsamples);
+0102                 end
+0103 %                 if length(PWT.nfft>1)
+0104 %                     [pxx, pff]=pwelch(y,[],[],PWT.nfft,PWT.trials{i}.samplingRate);
+0105 %                 else
+0106                     [pxx, pff]=pwelch(y,PWT.win_len,round(PWT.over_len*PWT.win_len),PWT.nfft,PWT.trials{i}.samplingRate,'onesided');
+0107 %                 end
+0108                 %xv = [1 -2 1 zeros(1,length(pxx)-3)];
+0109 %                 xv = [1/5 1/5 1/5 1/5 1/5 zeros(1,length(pxx)-5)];
+0110 %                 A = gallery('circul',xv);
+0111                 instances(i,:) = pxx;
+0112                 labels(i,1) = floor(PWT.trials{i}.label);
+0113             end
+0114             PWT.avgTime = toc/numTrials;
+0115             PWT.instanceSet = eegtoolkit.util.InstanceSet(instances, labels);
+0116             PWT.pff = pff;
+0117         end
+0118         
+0119         function configInfo = getConfigInfo(PWT)
+0120             if length(PWT.nfft)>1
+0121                 configInfo = sprintf('PWelchExperimental\tchannel:%d\tseconds:%d\t freq range:%.3f to %.3f',PWT.channel,PWT.seconds,PWT.nfft(1),PWT.nfft(end));
+0122             else
+0123                 configInfo = sprintf('PWelchExperimental\tchannel:%d\tseconds:%d\tnfft:%d',PWT.channel,PWT.seconds,PWT.nfft);
+0124             end
+0125         end
+0126         
+0127         function time = getTime(PWT)
+0128             time = PWT.avgTime;
+0129         end
+0130     end
+0131    
+0132 end
+0133
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PWelchExperimental/PWelchExperimental.m b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/PWelchExperimental.m new file mode 100644 index 0000000..d01cb0e --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/PWelchExperimental.m @@ -0,0 +1,133 @@ +classdef PWelchExperimental < eegtoolkit.featextraction.FeatureExtractionBase +%Computes the psd using the welch method +%Usage: +% session = eegtoolkit.util.Session(); +% session.loadSubject(1); +% pwt = ssveptolkit.transform.PWelchTransformer(session.trials); +%Specify the channel to be used (default = 126) +% pwt.channel = 150; +%Specify the number of seconds to be used (default = 0, use all signal) +% pwt.seconds = 3; +%Specify the nfft parameter (default = 512, computes 257 features) +% pwt.nfft = 512; +%Transform the signal +% pwt.transform(); + properties (Access = public) + channel; + seconds; + nfft; + pff; + win_len; + over_len; + avgTime; + end + + methods (Access = public) + function PWT = PWelchExperimental(trials, seconds, channel, nfft,win_len,over_len) +% if ~iscell(trials) +% error('trials must be cell array of Trial object'); +% end + if nargin == 0 + PWT.trials = {}; + PWT.seconds = 0; + PWT.channel = 1; + PWT.nfft = 512; + PWT.win_len=[]; + PWT.over_len=[]; + elseif nargin == 1 + PWT.trials = trials; + PWT.seconds = 0; + PWT.channel = 1; + PWT.nfft = 512; + PWT.win_len=[]; + PWT.over_len=[]; + elseif nargin == 2 + PWT.trials = trials; + PWT.channel = 1; + PWT.seconds = seconds; + PWT.nfft = 512; + PWT.win_len=[]; + PWT.over_len=[]; + elseif nargin == 3 + PWT.trials = trials; + PWT.channel = channel; + PWT.seconds = seconds; + PWT.nfft = 512; + PWT.win_len=[]; + PWT.over_len=[]; + elseif nargin == 4 + PWT.trials = trials; + PWT.channel = channel; + PWT.seconds = seconds; + PWT.nfft = nfft; + PWT.win_len=[]; + PWT.over_len=[]; + elseif nargin == 5 + PWT.trials = trials; + PWT.channel = channel; + PWT.seconds = seconds; + PWT.nfft = nfft; + PWT.win_len=win_len; + PWT.over_len=[]; + elseif nargin == 6 + PWT.trials = trials; + PWT.channel = channel; + PWT.seconds = seconds; + PWT.nfft = nfft; + PWT.win_len=win_len; + PWT.over_len=over_len; + else +% error('invalid number of arguments'); + end + end + + function extract(PWT) + if length(PWT.nfft)==1 + numFeatures = PWT.nfft/2+1; + else + numFeatures = length(PWT.nfft); + end + numTrials = length(PWT.trials); + instances = zeros(numTrials, numFeatures); + labels = zeros(numTrials,1); +% PWT.instances = zeros(numTrials, numFeatures); +% PWT.labels = zeros(numTrials,1); + tic; + for i=1:numTrials + numsamples = PWT.trials{i}.samplingRate * PWT.seconds; + if(numsamples == 0) + y = PWT.trials{i}.signal(PWT.channel,:); + else + y = PWT.trials{i}.signal(PWT.channel, 1:numsamples); + end +% if length(PWT.nfft>1) +% [pxx, pff]=pwelch(y,[],[],PWT.nfft,PWT.trials{i}.samplingRate); +% else + [pxx, pff]=pwelch(y,PWT.win_len,round(PWT.over_len*PWT.win_len),PWT.nfft,PWT.trials{i}.samplingRate,'onesided'); +% end + %xv = [1 -2 1 zeros(1,length(pxx)-3)]; +% xv = [1/5 1/5 1/5 1/5 1/5 zeros(1,length(pxx)-5)]; +% A = gallery('circul',xv); + instances(i,:) = pxx; + labels(i,1) = floor(PWT.trials{i}.label); + end + PWT.avgTime = toc/numTrials; + PWT.instanceSet = eegtoolkit.util.InstanceSet(instances, labels); + PWT.pff = pff; + end + + function configInfo = getConfigInfo(PWT) + if length(PWT.nfft)>1 + configInfo = sprintf('PWelchExperimental\tchannel:%d\tseconds:%d\t freq range:%.3f to %.3f',PWT.channel,PWT.seconds,PWT.nfft(1),PWT.nfft(end)); + else + configInfo = sprintf('PWelchExperimental\tchannel:%d\tseconds:%d\tnfft:%d',PWT.channel,PWT.seconds,PWT.nfft); + end + end + + function time = getTime(PWT) + time = PWT.avgTime; + end + end + +end + diff --git a/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.dot b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.dot new file mode 100644 index 0000000..335d08e --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + PWelchExperimental -> PWelchExperimental; + + PWelchExperimental [URL="PWelchExperimental.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.html b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.html new file mode 100644 index 0000000..2dff583 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featextraction/@PWelchExperimental + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@PWelchExperimental >
+

Dependency Graph for ./+eegtoolkit/+featextraction/@PWelchExperimental

+ +
+Dependency Graph for ./+eegtoolkit/+featextraction/@PWelchExperimental + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.map b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.map new file mode 100644 index 0000000..16c5e9c --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.png b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b1f7ae55a8086e388b6ac876833756012a9287ba GIT binary patch literal 6940 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 + + + Index for Directory ./+eegtoolkit/+featextraction/@PWelchExperimental + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@PWelchExperimental >
+ +

Index for ./+eegtoolkit/+featextraction/@PWelchExperimental

+ +

Matlab files in this directory:

+ +
 PWelchExperimental
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PYAR/PYAR.html b/doc/+eegtoolkit/+featextraction/@PYAR/PYAR.html new file mode 100644 index 0000000..48d8c20 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PYAR/PYAR.html @@ -0,0 +1,147 @@ + + + + Description of PYAR + + + + + + + + + + + + + +

PYAR +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

PYAR.m

+

SOURCE CODE ^

+
0001 classdef PYAR < eegtoolkit.featextraction.FeatureExtractionBase
+0002     
+0003     properties (Access = public)
+0004         channel;
+0005         seconds;
+0006         order;
+0007         nfft;
+0008         avgTime;
+0009     end
+0010     
+0011     methods (Access = public)
+0012         function mAR = PYAR(trials, seconds, channel,m_ord, nfft)
+0013             if nargin == 0
+0014                 mAR.seconds = 0;
+0015                 mAR.channel = 1;
+0016                 mAR.order = 20;
+0017                 mAR.nfft = 512;
+0018             elseif nargin == 1
+0019                 mAR.trials = trials;
+0020                 mAR.seconds = 0;
+0021                 mAR.channel = 1;
+0022                 mAR.order = 20;
+0023                 mAR.nfft = 512;
+0024             elseif nargin == 2
+0025                 mAR.trials = trials;
+0026                 mAR.channel = 1;
+0027                 mAR.seconds = seconds;
+0028                 mAR.order = 20;
+0029                 mAR.nfft = 512;
+0030             elseif nargin == 3
+0031                 mAR.trials = trials;
+0032                 mAR.channel = channel;
+0033                 mAR.seconds = seconds;
+0034                 mAR.order=20;
+0035                 mAR.nfft = 512;
+0036             elseif nargin == 4
+0037                 mAR.trials = trials;
+0038                 mAR.channel = channel;
+0039                 mAR.seconds = seconds;
+0040                 mAR.order = m_ord;
+0041                 mAR.nfft = 512;
+0042             elseif nargin == 5
+0043                 mAR.trials = trials;
+0044                 mAR.channel = channel;
+0045                 mAR.seconds = seconds;
+0046                 mAR.order = m_ord;
+0047                 mAR.nfft = nfft;
+0048             else
+0049                 error('invalid number of arguments');
+0050             end
+0051         end
+0052         
+0053         function extract(mAR)
+0054             NUM_FEATURES = mAR.nfft/2+1;
+0055             numTrials = length(mAR.trials);
+0056             instances = zeros(numTrials, NUM_FEATURES);
+0057             labels = zeros(numTrials,1);
+0058             tic
+0059             for i=1:numTrials
+0060                 if length(mAR.seconds) ==1
+0061                 numsamples = mAR.trials{i}.samplingRate * mAR.seconds;
+0062                 if(numsamples == 0)
+0063                     y = mAR.trials{i}.signal(mAR.channel,:);
+0064                 else
+0065                     y = mAR.trials{i}.signal(mAR.channel, 1:numsamples);
+0066                 end
+0067                 elseif length(mAR.seconds) ==2
+0068                     sampleA = mAR.trials{i}.samplingRate*mAR.seconds(1) + 1;
+0069                     sampleB = mAR.trials{i}.samplingRate*mAR.seconds(2);
+0070                 else
+0071                     error('invalid seconds parameter');
+0072                 end
+0073                 if isa(mAR.filter,'dfilt.df2sos') || isa(mAR.filter,'dfilt.df2')
+0074                     y = filter(mAR.filter,y);
+0075                 elseif isa(mAR.filter,'dfilt.dffir')
+0076                     y = filtfilt(mAR.filter.Numerator,1,y);
+0077                 end
+0078                 [pyy pff] = pyulear(y,mAR.order,mAR.nfft,mAR.trials{i}.samplingRate);
+0079                 instances(i,:) = pyy;
+0080                 labels(i,1) = floor(mAR.trials{i}.label);
+0081             end
+0082             mAR.avgTime = toc/numTrials;
+0083             mAR.instanceSet = eegtoolkit.util.InstanceSet(instances,labels);
+0084         end
+0085         
+0086         function configInfo = getConfigInfo(mAR)
+0087             configInfo = sprintf('PYAR\tchannel:%d\tseconds:%d\tnfft:%d\torder:%d',mAR.channel,mAR.seconds,mAR.nfft,mAR.order);
+0088         end
+0089         
+0090                         
+0091         function time = getTime(mAR)
+0092             time = mAR.avgTime;
+0093         end
+0094     end
+0095    
+0096 end
+0097
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PYAR/PYAR.m b/doc/+eegtoolkit/+featextraction/@PYAR/PYAR.m new file mode 100644 index 0000000..9148f94 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PYAR/PYAR.m @@ -0,0 +1,97 @@ +classdef PYAR < eegtoolkit.featextraction.FeatureExtractionBase + + properties (Access = public) + channel; + seconds; + order; + nfft; + avgTime; + end + + methods (Access = public) + function mAR = PYAR(trials, seconds, channel,m_ord, nfft) + if nargin == 0 + mAR.seconds = 0; + mAR.channel = 1; + mAR.order = 20; + mAR.nfft = 512; + elseif nargin == 1 + mAR.trials = trials; + mAR.seconds = 0; + mAR.channel = 1; + mAR.order = 20; + mAR.nfft = 512; + elseif nargin == 2 + mAR.trials = trials; + mAR.channel = 1; + mAR.seconds = seconds; + mAR.order = 20; + mAR.nfft = 512; + elseif nargin == 3 + mAR.trials = trials; + mAR.channel = channel; + mAR.seconds = seconds; + mAR.order=20; + mAR.nfft = 512; + elseif nargin == 4 + mAR.trials = trials; + mAR.channel = channel; + mAR.seconds = seconds; + mAR.order = m_ord; + mAR.nfft = 512; + elseif nargin == 5 + mAR.trials = trials; + mAR.channel = channel; + mAR.seconds = seconds; + mAR.order = m_ord; + mAR.nfft = nfft; + else + error('invalid number of arguments'); + end + end + + function extract(mAR) + NUM_FEATURES = mAR.nfft/2+1; + numTrials = length(mAR.trials); + instances = zeros(numTrials, NUM_FEATURES); + labels = zeros(numTrials,1); + tic + for i=1:numTrials + if length(mAR.seconds) ==1 + numsamples = mAR.trials{i}.samplingRate * mAR.seconds; + if(numsamples == 0) + y = mAR.trials{i}.signal(mAR.channel,:); + else + y = mAR.trials{i}.signal(mAR.channel, 1:numsamples); + end + elseif length(mAR.seconds) ==2 + sampleA = mAR.trials{i}.samplingRate*mAR.seconds(1) + 1; + sampleB = mAR.trials{i}.samplingRate*mAR.seconds(2); + else + error('invalid seconds parameter'); + end + if isa(mAR.filter,'dfilt.df2sos') || isa(mAR.filter,'dfilt.df2') + y = filter(mAR.filter,y); + elseif isa(mAR.filter,'dfilt.dffir') + y = filtfilt(mAR.filter.Numerator,1,y); + end + [pyy pff] = pyulear(y,mAR.order,mAR.nfft,mAR.trials{i}.samplingRate); + instances(i,:) = pyy; + labels(i,1) = floor(mAR.trials{i}.label); + end + mAR.avgTime = toc/numTrials; + mAR.instanceSet = eegtoolkit.util.InstanceSet(instances,labels); + end + + function configInfo = getConfigInfo(mAR) + configInfo = sprintf('PYAR\tchannel:%d\tseconds:%d\tnfft:%d\torder:%d',mAR.channel,mAR.seconds,mAR.nfft,mAR.order); + end + + + function time = getTime(mAR) + time = mAR.avgTime; + end + end + +end + diff --git a/doc/+eegtoolkit/+featextraction/@PYAR/graph.dot b/doc/+eegtoolkit/+featextraction/@PYAR/graph.dot new file mode 100644 index 0000000..ce88b22 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PYAR/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + PYAR -> PYAR; + + PYAR [URL="PYAR.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PYAR/graph.html b/doc/+eegtoolkit/+featextraction/@PYAR/graph.html new file mode 100644 index 0000000..205339d --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PYAR/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featextraction/@PYAR + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@PYAR >
+

Dependency Graph for ./+eegtoolkit/+featextraction/@PYAR

+ +
+Dependency Graph for ./+eegtoolkit/+featextraction/@PYAR + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PYAR/graph.map b/doc/+eegtoolkit/+featextraction/@PYAR/graph.map new file mode 100644 index 0000000..9efd3ae --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PYAR/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featextraction/@PYAR/graph.png b/doc/+eegtoolkit/+featextraction/@PYAR/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..51303b40520953de077c29069db0837677377d4e GIT binary patch literal 3778 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 l|6?AJO}ga{{yE9ce?-p literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+featextraction/@PYAR/index.html b/doc/+eegtoolkit/+featextraction/@PYAR/index.html new file mode 100644 index 0000000..b95fd23 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@PYAR/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+featextraction/@PYAR + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@PYAR >
+ +

Index for ./+eegtoolkit/+featextraction/@PYAR

+ +

Matlab files in this directory:

+ +
 PYAR
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@RawSignal/RawSignal.html b/doc/+eegtoolkit/+featextraction/@RawSignal/RawSignal.html new file mode 100644 index 0000000..873d3ac --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@RawSignal/RawSignal.html @@ -0,0 +1,77 @@ + + + + Description of RawSignal + + + + + + + + + + + + + +

RawSignal +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

RawSignal.m

+

SOURCE CODE ^

+
0001 classdef RawSignal < eegtoolkit.featextraction.FeatureExtractionBase
+0002     %RAWSIGNAL Summary of this class goes here
+0003     %   Detailed explanation goes here
+0004     
+0005     properties (Access = public)
+0006     end
+0007     
+0008     methods (Access = public)
+0009         function RS = RawSignal()
+0010 %             RS.instanceSet = eegtoolkit.util.RawSignalSet(RS.trials);
+0011         end
+0012         
+0013         function RS = extract(RS)
+0014             RS.instanceSet = eegtoolkit.util.RawSignalSet(RS.trials);
+0015         end
+0016         
+0017         function configInfo = getConfigInfo(RS)
+0018             configInfo = '\n';
+0019         end
+0020         
+0021         function time = getTime(RS)
+0022             time = 0;
+0023         end
+0024     end
+0025     
+0026 end
+0027
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@RawSignal/RawSignal.m b/doc/+eegtoolkit/+featextraction/@RawSignal/RawSignal.m new file mode 100644 index 0000000..c08003a --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@RawSignal/RawSignal.m @@ -0,0 +1,27 @@ +classdef RawSignal < eegtoolkit.featextraction.FeatureExtractionBase + %RAWSIGNAL Summary of this class goes here + % Detailed explanation goes here + + properties (Access = public) + end + + methods (Access = public) + function RS = RawSignal() +% RS.instanceSet = eegtoolkit.util.RawSignalSet(RS.trials); + end + + function RS = extract(RS) + RS.instanceSet = eegtoolkit.util.RawSignalSet(RS.trials); + end + + function configInfo = getConfigInfo(RS) + configInfo = '\n'; + end + + function time = getTime(RS) + time = 0; + end + end + +end + diff --git a/doc/+eegtoolkit/+featextraction/@RawSignal/graph.dot b/doc/+eegtoolkit/+featextraction/@RawSignal/graph.dot new file mode 100644 index 0000000..effc195 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@RawSignal/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + RawSignal -> RawSignal; + + RawSignal [URL="RawSignal.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@RawSignal/graph.html b/doc/+eegtoolkit/+featextraction/@RawSignal/graph.html new file mode 100644 index 0000000..14a5ac5 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@RawSignal/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featextraction/@RawSignal + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@RawSignal >
+

Dependency Graph for ./+eegtoolkit/+featextraction/@RawSignal

+ +
+Dependency Graph for ./+eegtoolkit/+featextraction/@RawSignal + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@RawSignal/graph.map b/doc/+eegtoolkit/+featextraction/@RawSignal/graph.map new file mode 100644 index 0000000..9455564 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@RawSignal/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featextraction/@RawSignal/graph.png b/doc/+eegtoolkit/+featextraction/@RawSignal/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f6bcd9a48e0071bd1205d69838d368e25d0a95 GIT binary patch literal 4861 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 bT;uP3VCP@lyf+S>XF=4J;g72oZKD1M>VB5> literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+featextraction/@RawSignal/index.html b/doc/+eegtoolkit/+featextraction/@RawSignal/index.html new file mode 100644 index 0000000..8f53713 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@RawSignal/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+featextraction/@RawSignal + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@RawSignal >
+ +

Index for ./+eegtoolkit/+featextraction/@RawSignal

+ +

Matlab files in this directory:

+ +
 RawSignal
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@STFT/STFT.html b/doc/+eegtoolkit/+featextraction/@STFT/STFT.html new file mode 100644 index 0000000..83bc874 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@STFT/STFT.html @@ -0,0 +1,151 @@ + + + + Description of STFT + + + + + + + + + + + + + +

STFT +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

STFT.m

+

SOURCE CODE ^

+
0001 classdef STFT < eegtoolkit.featextraction.FeatureExtractionBase
+0002     
+0003     properties (Access = public)
+0004         channel;
+0005         seconds;
+0006         Frange;
+0007         avgTime;
+0008     end
+0009     
+0010     methods (Access = public)   
+0011         function mSTFT = STFT(trials, seconds, channel,rangeFreq)
+0012             if nargin == 0
+0013                 mSTFT.seconds = 0;
+0014                 mSTFT.channel = 1;
+0015                 mSTFT.Frange(1) = 0;
+0016 %                 mSTFT.Frange(2) = mSTFT.trials{1}.samplingRate;
+0017             elseif nargin == 1
+0018                 mSTFT.trials = trials;
+0019                 mSTFT.seconds = 0;
+0020                 mSTFT.channel = 1;
+0021                 mSTFT.Frange(1) = 0;
+0022                 mSTFT.Frange(2) = mSTFT.trials{1}.samplingRate;
+0023             elseif nargin == 2
+0024                 mSTFT.trials = trials;
+0025                 mSTFT.channel = 1;
+0026                 mSTFT.seconds = seconds;
+0027                 mSTFT.Frange(1) = 0;
+0028                 mSTFT.Frange(2) = mSTFT.trials{1}.samplingRate;
+0029             elseif nargin == 3
+0030                 mSTFT.trials = trials;
+0031                 mSTFT.channel = channel;
+0032                 mSTFT.seconds = seconds;
+0033                 mSTFT.Frange(1) = 0;
+0034                 mSTFT.Frange(2) = mSTFT.trials{1}.samplingRate;
+0035             elseif nargin==4
+0036                 
+0037                 mSTFT.trials = trials;
+0038                 
+0039                 if prod(size(rangeFreq)) ~=2
+0040                     error('vector for frequency range must has two elements')
+0041                 end
+0042                 if rangeFreq(1)>=rangeFreq(2)
+0043                     error('first element must be smaller.');
+0044                 end
+0045                 if (rangeFreq(1)<0 || rangeFreq(2)>mSTFT.trials{1}.samplingRate)
+0046                     error('invalid values for frequency range');
+0047                 end
+0048                 
+0049                 mSTFT.channel = channel;
+0050                 mSTFT.seconds = seconds;
+0051                 mSTFT.Frange(1) = rangeFreq(1);
+0052                 mSTFT.Frange(2) = rangeFreq(2);
+0053             else
+0054                 error('invalid number of arguments');
+0055             end
+0056         end
+0057         
+0058         function extract(mSTFT)
+0059             mSTFT.Frange(2) = mSTFT.trials{1}.samplingRate;
+0060             numsamples = mSTFT.trials{1}.samplingRate * mSTFT.seconds;
+0061             if (numsamples == 0)                    
+0062                 numsamples = size(mSTFT.trials{1}.signal(mSTFT.channel,:),2);                             
+0063             end
+0064             tic
+0065             numTrials = length(mSTFT.trials);
+0066             y = mSTFT.trials{1}.signal(mSTFT.channel, 1:numsamples);
+0067             [S,F,T,P]=spectrogram(y,[],[],[mSTFT.Frange(1):0.5:mSTFT.Frange(2)],mSTFT.trials{1}.samplingRate);
+0068             instances = zeros(numTrials, length(P(:)));
+0069             labels = zeros(numTrials,1);
+0070             for i=1:numTrials
+0071                 numsamples = mSTFT.trials{i}.samplingRate * mSTFT.seconds;
+0072                 if(numsamples == 0)
+0073                     y = mSTFT.trials{i}.signal(mSTFT.channel,:);
+0074                 else
+0075                     y = mSTFT.trials{i}.signal(mSTFT.channel, 1:numsamples);
+0076                 end                
+0077                 
+0078                 [S,F,T,P]=spectrogram(y,[],[],[mSTFT.Frange(1):0.5:mSTFT.Frange(2)],mSTFT.trials{i}.samplingRate);
+0079                 instances(i,:) = P(:);
+0080                 labels(i,1) = floor(mSTFT.trials{i}.label);
+0081             end
+0082             mSTFT.avgTime = toc/numTrials;
+0083             mSTFT.instanceSet = eegtoolkit.util.InstanceSet(instances,labels);
+0084         end
+0085         
+0086         function configInfo = getConfigInfo(mSTFT)
+0087             if length(mSTFT.Frange) == 2
+0088                 configInfo = sprintf('STFT\tchannel:%d\tseconds:%d\tfrange1:%d\tfrange2:%d',mSTFT.channel,mSTFT.seconds,mSTFT.Frange(1),mSTFT.Frange(2));
+0089             else
+0090                 configInfo = sprintf('STFT\tchannel:%d\tseconds:%d\tfrange1:%d\tfrange2:unset',mSTFT.channel,mSTFT.seconds,mSTFT.Frange(1));
+0091             end
+0092         end
+0093         
+0094                         
+0095         function time = getTime(mSTFT)
+0096             time = mSTFT.avgTime;
+0097         end
+0098     end
+0099    
+0100 end
+0101
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@STFT/STFT.m b/doc/+eegtoolkit/+featextraction/@STFT/STFT.m new file mode 100644 index 0000000..e7bde00 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@STFT/STFT.m @@ -0,0 +1,101 @@ +classdef STFT < eegtoolkit.featextraction.FeatureExtractionBase + + properties (Access = public) + channel; + seconds; + Frange; + avgTime; + end + + methods (Access = public) + function mSTFT = STFT(trials, seconds, channel,rangeFreq) + if nargin == 0 + mSTFT.seconds = 0; + mSTFT.channel = 1; + mSTFT.Frange(1) = 0; +% mSTFT.Frange(2) = mSTFT.trials{1}.samplingRate; + elseif nargin == 1 + mSTFT.trials = trials; + mSTFT.seconds = 0; + mSTFT.channel = 1; + mSTFT.Frange(1) = 0; + mSTFT.Frange(2) = mSTFT.trials{1}.samplingRate; + elseif nargin == 2 + mSTFT.trials = trials; + mSTFT.channel = 1; + mSTFT.seconds = seconds; + mSTFT.Frange(1) = 0; + mSTFT.Frange(2) = mSTFT.trials{1}.samplingRate; + elseif nargin == 3 + mSTFT.trials = trials; + mSTFT.channel = channel; + mSTFT.seconds = seconds; + mSTFT.Frange(1) = 0; + mSTFT.Frange(2) = mSTFT.trials{1}.samplingRate; + elseif nargin==4 + + mSTFT.trials = trials; + + if prod(size(rangeFreq)) ~=2 + error('vector for frequency range must has two elements') + end + if rangeFreq(1)>=rangeFreq(2) + error('first element must be smaller.'); + end + if (rangeFreq(1)<0 || rangeFreq(2)>mSTFT.trials{1}.samplingRate) + error('invalid values for frequency range'); + end + + mSTFT.channel = channel; + mSTFT.seconds = seconds; + mSTFT.Frange(1) = rangeFreq(1); + mSTFT.Frange(2) = rangeFreq(2); + else + error('invalid number of arguments'); + end + end + + function extract(mSTFT) + mSTFT.Frange(2) = mSTFT.trials{1}.samplingRate; + numsamples = mSTFT.trials{1}.samplingRate * mSTFT.seconds; + if (numsamples == 0) + numsamples = size(mSTFT.trials{1}.signal(mSTFT.channel,:),2); + end + tic + numTrials = length(mSTFT.trials); + y = mSTFT.trials{1}.signal(mSTFT.channel, 1:numsamples); + [S,F,T,P]=spectrogram(y,[],[],[mSTFT.Frange(1):0.5:mSTFT.Frange(2)],mSTFT.trials{1}.samplingRate); + instances = zeros(numTrials, length(P(:))); + labels = zeros(numTrials,1); + for i=1:numTrials + numsamples = mSTFT.trials{i}.samplingRate * mSTFT.seconds; + if(numsamples == 0) + y = mSTFT.trials{i}.signal(mSTFT.channel,:); + else + y = mSTFT.trials{i}.signal(mSTFT.channel, 1:numsamples); + end + + [S,F,T,P]=spectrogram(y,[],[],[mSTFT.Frange(1):0.5:mSTFT.Frange(2)],mSTFT.trials{i}.samplingRate); + instances(i,:) = P(:); + labels(i,1) = floor(mSTFT.trials{i}.label); + end + mSTFT.avgTime = toc/numTrials; + mSTFT.instanceSet = eegtoolkit.util.InstanceSet(instances,labels); + end + + function configInfo = getConfigInfo(mSTFT) + if length(mSTFT.Frange) == 2 + configInfo = sprintf('STFT\tchannel:%d\tseconds:%d\tfrange1:%d\tfrange2:%d',mSTFT.channel,mSTFT.seconds,mSTFT.Frange(1),mSTFT.Frange(2)); + else + configInfo = sprintf('STFT\tchannel:%d\tseconds:%d\tfrange1:%d\tfrange2:unset',mSTFT.channel,mSTFT.seconds,mSTFT.Frange(1)); + end + end + + + function time = getTime(mSTFT) + time = mSTFT.avgTime; + end + end + +end + diff --git a/doc/+eegtoolkit/+featextraction/@STFT/graph.dot b/doc/+eegtoolkit/+featextraction/@STFT/graph.dot new file mode 100644 index 0000000..b300e03 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@STFT/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + STFT -> STFT; + + STFT [URL="STFT.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@STFT/graph.html b/doc/+eegtoolkit/+featextraction/@STFT/graph.html new file mode 100644 index 0000000..97c3e7e --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@STFT/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featextraction/@STFT + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@STFT >
+

Dependency Graph for ./+eegtoolkit/+featextraction/@STFT

+ +
+Dependency Graph for ./+eegtoolkit/+featextraction/@STFT + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@STFT/graph.map b/doc/+eegtoolkit/+featextraction/@STFT/graph.map new file mode 100644 index 0000000..1a17266 --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@STFT/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featextraction/@STFT/graph.png b/doc/+eegtoolkit/+featextraction/@STFT/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1ed663395fbfedeb3043246eeeb15b4ec8a336b8 GIT binary patch literal 3374 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 g^yspZc<%+|vTRw%D3aC&`~X2pF literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+featextraction/@STFT/index.html b/doc/+eegtoolkit/+featextraction/@STFT/index.html new file mode 100644 index 0000000..46bed9b --- /dev/null +++ b/doc/+eegtoolkit/+featextraction/@STFT/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+featextraction/@STFT + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featextraction/@STFT >
+ +

Index for ./+eegtoolkit/+featextraction/@STFT

+ +

Matlab files in this directory:

+ +
 STFT
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FEAST/FEAST.html b/doc/+eegtoolkit/+featselection/@FEAST/FEAST.html new file mode 100644 index 0000000..8f4c41f --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@FEAST/FEAST.html @@ -0,0 +1,126 @@ + + + + Description of FEAST + + + + + + + + + + + + + +

FEAST +

+ +

PURPOSE ^

+
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + +

SUBFUNCTIONS ^

+ +

DOWNLOAD ^

+

FEAST.m

+

SOURCE CODE ^

+
0001 classdef FEAST < eegtoolkit.featselection.FeatureSelectionBase
+0002     properties (Constant)
+0003         ALGORITHM_MIM = 'mim';
+0004         ALGORITHM_MRMR = 'mrmr';
+0005         ALGORITHM_CMIM = 'cmim';
+0006         ALGORITHM_JMI = 'jmi';
+0007         ALGORITHM_DISR = 'disr';
+0008         ALGORITHM_CIFE = 'cife';
+0009         ALGORITHM_ICAP = 'icap';
+0010         ALGORITHM_CONDRED = 'condred';
+0011         ALGORITHM_CMI = 'cmi';
+0012         ALGORITHM_RELIEF = 'relief';
+0013         ALGORITHM_MIFS = 'mifs' %beta parameter required
+0014         ALGORITHM_BETAGAMMA = 'betagamma'; %beta and gamma parameters required
+0015         ALGORITHM_FCBF = 'fcbf'; %threshold parameter required
+0016     end
+0017     properties (Access = public)
+0018         algorithm;
+0019         numToSelect;
+0020         parameter1;
+0021         parameter2;
+0022         avgTime;
+0023     end
+0024     
+0025     methods
+0026         function FF = FEAST(instanceSet,algorithm, numtoSelect, param1, param2)
+0027             if nargin == 0
+0028                 FF.algorithm = 'icap';
+0029                 FF.numToSelect = 85;
+0030             end
+0031             if nargin > 1
+0032                 FF.originalInstanceSet = instanceSet;
+0033                 FF.algorithm = algorithm;
+0034             end
+0035             if nargin > 2
+0036                 FF.numToSelect = numtoSelect;
+0037             end
+0038             if nargin > 3
+0039                 FF.parameter1 = param1;
+0040             end
+0041             if nargin > 4
+0042                 FF.parameter2 = param2;
+0043             end
+0044         end
+0045         
+0046         function FF = compute(FF)
+0047             tic
+0048             if (strcmp(FF.algorithm,FF.ALGORITHM_MIFS) == 1) || (strcmp(FF.algorithm, FF.ALGORITHM_FCBF) == 1)
+0049                 indices = feast(FF.algorithm, FF.numToSelect, FF.originalInstanceSet.getInstances, FF.originalInstanceSet.getLabels, FF.parameter1);
+0050             elseif strcmp(FF.algorithm, FF.ALGORITHM_BETAGAMMA) == 1
+0051                 indices = feast(FF.algorithm, FF.numToSelect, FF.originalInstanceSet.getInstances, FF.originalInstanceSet.getLabels, FF.parameter1, FF.parameter2);
+0052             else
+0053                 indices = feast(FF.algorithm, FF.numToSelect, FF.originalInstanceSet.getInstances, FF.originalInstanceSet.getLabels);
+0054             end
+0055             dataset = FF.originalInstanceSet.getInstances;
+0056             [inst, ~] = size(dataset);
+0057             FF.avgTime = toc/inst;
+0058             FF.filteredInstanceSet = eegtoolkit.util.InstanceSet([dataset(:,indices) FF.originalInstanceSet.getLabels]);
+0059         end
+0060         
+0061         function configInfo = getConfigInfo(FF)
+0062             if (strcmp(FF.algorithm,FF.ALGORITHM_MIFS) == 1) || (strcmp(FF.algorithm, FF.ALGORITHM_FCBF) == 1)
+0063                 configInfo = sprintf('FEAST\talgorithm:%s\tnumtoselect:%d\tparam1:%d',FF.algorithm, FF.numToSelect, FF.parameter1);
+0064             elseif strcmp(FF.algorithm, FF.ALGORITHM_BETAGAMMA) == 1
+0065                 configInfo = sprintf('FEAST\talgorithm:%s\tnumtoselect:%d\tparam1:%d\tparam2:%d',FF.algorithm, FF.numToSelect, FF.parameter1, FF.parameter2);
+0066             else
+0067                 configInfo = sprintf('FEAST\talgorithm:%s\tnumtoselect:%d',FF.algorithm, FF.numToSelect);
+0068             end
+0069         end
+0070         
+0071         function time = getTime(FF)
+0072             time = FF.avgTime;
+0073         end
+0074     end
+0075     
+0076 end
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FEAST/FEAST.m b/doc/+eegtoolkit/+featselection/@FEAST/FEAST.m new file mode 100644 index 0000000..bdfeb64 --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@FEAST/FEAST.m @@ -0,0 +1,76 @@ +classdef FEAST < eegtoolkit.featselection.FeatureSelectionBase + properties (Constant) + ALGORITHM_MIM = 'mim'; + ALGORITHM_MRMR = 'mrmr'; + ALGORITHM_CMIM = 'cmim'; + ALGORITHM_JMI = 'jmi'; + ALGORITHM_DISR = 'disr'; + ALGORITHM_CIFE = 'cife'; + ALGORITHM_ICAP = 'icap'; + ALGORITHM_CONDRED = 'condred'; + ALGORITHM_CMI = 'cmi'; + ALGORITHM_RELIEF = 'relief'; + ALGORITHM_MIFS = 'mifs' %beta parameter required + ALGORITHM_BETAGAMMA = 'betagamma'; %beta and gamma parameters required + ALGORITHM_FCBF = 'fcbf'; %threshold parameter required + end + properties (Access = public) + algorithm; + numToSelect; + parameter1; + parameter2; + avgTime; + end + + methods + function FF = FEAST(instanceSet,algorithm, numtoSelect, param1, param2) + if nargin == 0 + FF.algorithm = 'icap'; + FF.numToSelect = 85; + end + if nargin > 1 + FF.originalInstanceSet = instanceSet; + FF.algorithm = algorithm; + end + if nargin > 2 + FF.numToSelect = numtoSelect; + end + if nargin > 3 + FF.parameter1 = param1; + end + if nargin > 4 + FF.parameter2 = param2; + end + end + + function FF = compute(FF) + tic + if (strcmp(FF.algorithm,FF.ALGORITHM_MIFS) == 1) || (strcmp(FF.algorithm, FF.ALGORITHM_FCBF) == 1) + indices = feast(FF.algorithm, FF.numToSelect, FF.originalInstanceSet.getInstances, FF.originalInstanceSet.getLabels, FF.parameter1); + elseif strcmp(FF.algorithm, FF.ALGORITHM_BETAGAMMA) == 1 + indices = feast(FF.algorithm, FF.numToSelect, FF.originalInstanceSet.getInstances, FF.originalInstanceSet.getLabels, FF.parameter1, FF.parameter2); + else + indices = feast(FF.algorithm, FF.numToSelect, FF.originalInstanceSet.getInstances, FF.originalInstanceSet.getLabels); + end + dataset = FF.originalInstanceSet.getInstances; + [inst, ~] = size(dataset); + FF.avgTime = toc/inst; + FF.filteredInstanceSet = eegtoolkit.util.InstanceSet([dataset(:,indices) FF.originalInstanceSet.getLabels]); + end + + function configInfo = getConfigInfo(FF) + if (strcmp(FF.algorithm,FF.ALGORITHM_MIFS) == 1) || (strcmp(FF.algorithm, FF.ALGORITHM_FCBF) == 1) + configInfo = sprintf('FEAST\talgorithm:%s\tnumtoselect:%d\tparam1:%d',FF.algorithm, FF.numToSelect, FF.parameter1); + elseif strcmp(FF.algorithm, FF.ALGORITHM_BETAGAMMA) == 1 + configInfo = sprintf('FEAST\talgorithm:%s\tnumtoselect:%d\tparam1:%d\tparam2:%d',FF.algorithm, FF.numToSelect, FF.parameter1, FF.parameter2); + else + configInfo = sprintf('FEAST\talgorithm:%s\tnumtoselect:%d',FF.algorithm, FF.numToSelect); + end + end + + function time = getTime(FF) + time = FF.avgTime; + end + end + +end \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FEAST/graph.dot b/doc/+eegtoolkit/+featselection/@FEAST/graph.dot new file mode 100644 index 0000000..a790ffe --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@FEAST/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + FEAST -> FEAST; + + FEAST [URL="FEAST.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FEAST/graph.html b/doc/+eegtoolkit/+featselection/@FEAST/graph.html new file mode 100644 index 0000000..079ad91 --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@FEAST/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featselection/@FEAST + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featselection/@FEAST >
+

Dependency Graph for ./+eegtoolkit/+featselection/@FEAST

+ +
+Dependency Graph for ./+eegtoolkit/+featselection/@FEAST + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FEAST/graph.map b/doc/+eegtoolkit/+featselection/@FEAST/graph.map new file mode 100644 index 0000000..9bbd9b1 --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@FEAST/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featselection/@FEAST/graph.png b/doc/+eegtoolkit/+featselection/@FEAST/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..01bc3c699eb45bde9a07a1caada8cde14bf9c6c2 GIT binary patch literal 3946 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 + + + Index for Directory ./+eegtoolkit/+featselection/@FEAST + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featselection/@FEAST >
+ +

Index for ./+eegtoolkit/+featselection/@FEAST

+ +

Matlab files in this directory:

+ +
 FEAST
+ + + +

Dependency Graph

+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.html b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.html new file mode 100644 index 0000000..b7b4bf9 --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.html @@ -0,0 +1,93 @@ + + + + Description of FeatureSelectionBase + + + + + + + + + +
Home > +eegtoolkit > +featselection > @FeatureSelectionBase > FeatureSelectionBase.m
+ + + +

FeatureSelectionBase +

+ +

PURPOSE ^

+
Abstract class for feature selection. Implement the functions for any
+ +

SYNOPSIS ^

+
This is a script file.
+ +

DESCRIPTION ^

+
 Abstract class for feature selection. Implement the functions for any
+ feature selection method (e.g. PCA, SVD, FEAST, etc.)
+ 
+ Properties:
+ originalInstanceSet: Input - the original instanceSet with the features
+ filteredInstanceSet: Output - the filtered instanceSet
+ 
+ Functions:
+Implement this function to process the originalInstanceSet trials and 
+return the filteredInstanceSet
+   obj.compute();
+Info & run time so that the experiments are easily documented. configInfo
+is a string with the configuration information and time is of type double.
+   configInfo = obj.getConfigInfo();
+   time = obj.getTime();
+ + +

CROSS-REFERENCE INFORMATION ^

+This function calls: + +This function is called by: + + + + +

DOWNLOAD ^

+

FeatureSelectionBase.m

+

SOURCE CODE ^

+
0001 % Abstract class for feature selection. Implement the functions for any
+0002 % feature selection method (e.g. PCA, SVD, FEAST, etc.)
+0003 %
+0004 % Properties:
+0005 % originalInstanceSet: Input - the original instanceSet with the features
+0006 % filteredInstanceSet: Output - the filtered instanceSet
+0007 %
+0008 % Functions:
+0009 %Implement this function to process the originalInstanceSet trials and
+0010 %return the filteredInstanceSet
+0011 %   obj.compute();
+0012 %Info & run time so that the experiments are easily documented. configInfo
+0013 %is a string with the configuration information and time is of type double.
+0014 %   configInfo = obj.getConfigInfo();
+0015 %   time = obj.getTime();
+0016 
+0017 classdef (Abstract) FeatureSelectionBase < handle
+0018     
+0019     properties
+0020         originalInstanceSet; % Input: The original dataset
+0021         filteredInstanceSet; % Output: The filtered dataset
+0022     end
+0023     
+0024     methods (Abstract = true)
+0025         obj = compute(obj);
+0026         configInfo = getConfigInfo(obj);
+0027         time = getTime(obj);
+0028     end
+0029     
+0030 end
+0031
+
Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.m b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.m new file mode 100644 index 0000000..7101cc1 --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.m @@ -0,0 +1,31 @@ +% Abstract class for feature selection. Implement the functions for any +% feature selection method (e.g. PCA, SVD, FEAST, etc.) +% +% Properties: +% originalInstanceSet: Input - the original instanceSet with the features +% filteredInstanceSet: Output - the filtered instanceSet +% +% Functions: +%Implement this function to process the originalInstanceSet trials and +%return the filteredInstanceSet +% obj.compute(); +%Info & run time so that the experiments are easily documented. configInfo +%is a string with the configuration information and time is of type double. +% configInfo = obj.getConfigInfo(); +% time = obj.getTime(); + +classdef (Abstract) FeatureSelectionBase < handle + + properties + originalInstanceSet; % Input: The original dataset + filteredInstanceSet; % Output: The filtered dataset + end + + methods (Abstract = true) + obj = compute(obj); + configInfo = getConfigInfo(obj); + time = getTime(obj); + end + +end + diff --git a/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.dot b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.dot new file mode 100644 index 0000000..9de1c9a --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + FeatureSelectionBase -> FeatureSelectionBase; + + FeatureSelectionBase [URL="FeatureSelectionBase.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.html b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.html new file mode 100644 index 0000000..4ea287e --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featselection/@FeatureSelectionBase + + + + + + + + + + +
< Master indexIndex for ./+eegtoolkit/+featselection/@FeatureSelectionBase >
+

Dependency Graph for ./+eegtoolkit/+featselection/@FeatureSelectionBase

+ +
+Dependency Graph for ./+eegtoolkit/+featselection/@FeatureSelectionBase + + + +
+ +
Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
+ + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.map b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.map new file mode 100644 index 0000000..fa3a33d --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.png b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5b6f809b29d4772a726c492ace44733de3bfa490 GIT binary patch literal 6599 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:&@KmIk@5%z=7FqDRLY|p_4CsM*5*ba2;JBIO;|k3vLDL6^}_Xo$GU_4w)#3c3WyqeVywnVPdp1ZDEhW@X&K8?B@j~IzketG z@!x`z<-d~y#6L&Z5N3_3IV^FfUX6_<9>@?Unwy(Dnhzthw6ha`_~fPSP_4^^$NIPc z&NH+TM))BJP_WQjZ|0>RU%!4uf`PfwcE8ygX67{R@Fp`H#h};`p{ci1l`SW{!57Jw zh5j^Zs;MbFeJW>dZJm&r8RNINywDj<8E=rCbQiR&rlzKl+mu*A$t-kp+H%LZiHV6} z=kf~tCtPiu+}w<_bT$eFX<33aF_?A_=#=g#_4Vud)sX@u`0@I9NXNo_ed|Ag;0rUR zf1?x5wRpRyT-XP+dbP&4^36CVJ687404rg))Pv^^SX9`_-(+Q}W>un@WjHx;k)4G| z77-H;q**dZU7c|6bfMZeZFSWV`P>ylOLFGo?2I5#W*yxu0-(AO%PP`kwUs{|Wb)5J zpg%p^RSo=iFfqL5?R)X>FH4y$cP1sb7AqH5x20q~P|2r*aT5X}BF3?Q!gSD1L`6p{ zK7K4Nce?SR4TofW&Zzb2t!Pxf=Q`~zQuU%&NW!~!>j_r={{Cs`F!{3uGVhapC+I!$ z0p#rG)p@8W0MQ2qG*1>|Zlp!?f$a6ZI1d8eVTZObO!pww;%PcET<11j`sve~IHsFQ zP_Vec=chj}Ufq9pjf{*8+j7U(g);!a8Y|b(A}E=jo0Z*uXZu}c3&Z0UX=!N!q_L?f zo>vPxs>|U@*a}26{J90H@!tZrn^kvrcQq$$tEyLJ$OHui2Rt3VW~jgc-hVVu#DXd+ zD#A+(TU%NPG2SY~_c8+fa)n$sAV3C-6>=`jqqeqI%xB9~L{zjO=h=DsF3Xzf)a0bD zjSUC+L7Wo-F7}J4D7t%oa(CX`^oo#TA}uN@q14@`iUa{mp4xv+FjdB~+*M4Clft;^ zi2#P!Jv@YF8@(J#bHn7N-Q3)Y0EKi=sLraO$!IP)9*l@nPG9 zJ>R~4>(~~03BwB*b^^u*k-%JGT>GNsXpsoE$l5jF@2t=D8#mm)AA)ui(MD+ajT9hp zF!vlrpT$w+wLN#se;Z!}f@HKH2!82qEx>^Sj-F z9A9T-sDr$r=p>`4Q*wObr<2spwl|V^jL2}tc1u&{LLTeu(_wFZkWi3 zHaZnn`{_0K?QuOYHvVSf-mKyAC@X;{5SSPGm_5cgyLPjAoYf0Xc&t7zFVe{{GVDPmk>y zK7Ldx(#r$&Ybxk7?3vu3dV@nkBIUTkfHyHUH4>UnTL*{#pasMj1Yuz~5TdHU<3|HI z^3TM!r-(1uCz}KQ?qvQv!^_IbI{MRpeSExb31-KuR}`<4lk=*pDNwl3Ar24gbar;KN=VQsDk=`-?(@(eSB$=YFX%ec zKn{GQ?CQ!-dQ}=1Z6uo#hB2ZNl_Ne5RH78S(dosfQ!bUdT3T`F#HCnnLx(IbPMs6@ z=kmjuhLGG`R(^{Xrv4NG8^a@eEBfax0$79Dw_;wurYbeyEjL1AKRfQXxWd37{Z
    7KXUx!o4K4xrurbHR&wmkb zUa4wt&xM)Rz2z8BB%RpG%E}0Bed&IsIf;x+Q;)iZU@8ZA4?wkHMMc-n&;PbE_C3Oh zZ4I)r!0-iT!7pFFBp@d4gkIK9J1;LG0Hp6)QR@7E|A|i8%aKyn$4Db$;^GUx$KD-5pXRx{sPcV$yuG^{ z4_f@F7cZ=z+@mGHrL?0U>gUkCcP|{c7fcd%K0c!G@Ni(1G*JgqYa5$g0DG`rn2L*w z!EQjO8KGC>@4xH%nkku>o*rFZ&JV>>P*!$%d3l+Dl+-@u1{vHpq)(6ZbZmH+qxa*- z3(!D7*P*PXMOyvggRZ$bDYCP-rwoqA^4H8run8UfET8@9v=-u|_@7M%hQatA6w$aS zTu_RT*c_~^NJvNsCZZdYA4tqc?W}|`8v_gF;o(tGRKx;QWJ^?ouvk8P7?+T61!L<# zOn}JaZ%G|f?b=3nb?_vs0}zS4&&@@Awq_K4d?bPR=QlS=&_=|V0y;jn0)f19a1g}s zq|iRy7C@LaQ4NNUo*s5IDir(}F)=X&fz~el1*k|CSQ6YwK*~pIo25RQm^ScXz#vn# zvSI^8g87}X@r!`JTf#9t7)xT}gDV$gMU zG*B46JM&n3lXG(quM7ZN1q)3lGO7VXjZ16^EYsXjxNF#CZ@$sWj?3$SpFUdU<)ofXpK^TG>^naP%W&f+$ojc-~t5-HW zKHlBQNX#6M4=Ib|8D!*mimDqLf*y=Igd6`pKUe6vxXT6OyVe|~ykM=8Fuk(pw+j?O zo_u!}2jv4h6b8=`ynTGY@F9X&z#|5Fk2iT|k?mi;I1gu{E5~eXY;eGr2X`LsI8TQF zUg4OMlG4b;M6`W;!ua<#G)!Q3L+Dfkn=_W8xtAtg@a04HXJx^76Wyp$gXbH%Z7(hX vq?cNDg@%XQ8KhyW(F;?-2bEcGE^uV0ntEuCCw<__401 + + + Index for Directory ./+eegtoolkit/+featselection/@FeatureSelectionBase + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+featselection/@FeatureSelectionBase >
    + +

    Index for ./+eegtoolkit/+featselection/@FeatureSelectionBase

    + +

    Matlab files in this directory:

    + +
     FeatureSelectionBaseAbstract class for feature selection. Implement the functions for any
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@PCA/PCA.html b/doc/+eegtoolkit/+featselection/@PCA/PCA.html new file mode 100644 index 0000000..41fbbc6 --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@PCA/PCA.html @@ -0,0 +1,82 @@ + + + + Description of PCA + + + + + + + + + + + + + +

    PCA +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    PCA.m

    +

    SOURCE CODE ^

    +
    0001 classdef PCA < eegtoolkit.featselection.FeatureSelectionBase
    +0002     properties (Access = public)
    +0003         componentNum;
    +0004         avgTime;
    +0005     end
    +0006     methods
    +0007         function PCA = PCA(instanceSet,componentNum)
    +0008             if nargin == 0
    +0009                 PCA.componentNum = 50;
    +0010             else
    +0011                 PCA.componentNum = componentNum;
    +0012                 PCA.originalInstanceSet = instanceSet;
    +0013             end
    +0014         end
    +0015         
    +0016         function PCA = compute(PCA)
    +0017             ins = PCA.originalInstanceSet.getInstances;
    +0018             [numInst,~] = size(ins);
    +0019             tic
    +0020             [~,score,~,~,~] = pca(ins,'NumComponents',PCA.componentNum);
    +0021             PCA.avgTime = toc/numInst;
    +0022             PCA.filteredInstanceSet = eegtoolkit.util.InstanceSet(score,PCA.originalInstanceSet.getLabels);
    +0023         end
    +0024         function configInfo = getConfigInfo(PCA)
    +0025             configInfo = sprintf('PCA\tcomponents:%d', PCA.componentNum);
    +0026         end
    +0027         
    +0028         function time = getTime(PCA)
    +0029             time = PCA.avgTime;
    +0030         end
    +0031     end
    +0032 end
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@PCA/PCA.m b/doc/+eegtoolkit/+featselection/@PCA/PCA.m new file mode 100644 index 0000000..d0f8d4f --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@PCA/PCA.m @@ -0,0 +1,32 @@ +classdef PCA < eegtoolkit.featselection.FeatureSelectionBase + properties (Access = public) + componentNum; + avgTime; + end + methods + function PCA = PCA(instanceSet,componentNum) + if nargin == 0 + PCA.componentNum = 50; + else + PCA.componentNum = componentNum; + PCA.originalInstanceSet = instanceSet; + end + end + + function PCA = compute(PCA) + ins = PCA.originalInstanceSet.getInstances; + [numInst,~] = size(ins); + tic + [~,score,~,~,~] = pca(ins,'NumComponents',PCA.componentNum); + PCA.avgTime = toc/numInst; + PCA.filteredInstanceSet = eegtoolkit.util.InstanceSet(score,PCA.originalInstanceSet.getLabels); + end + function configInfo = getConfigInfo(PCA) + configInfo = sprintf('PCA\tcomponents:%d', PCA.componentNum); + end + + function time = getTime(PCA) + time = PCA.avgTime; + end + end +end \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@PCA/graph.dot b/doc/+eegtoolkit/+featselection/@PCA/graph.dot new file mode 100644 index 0000000..476a8be --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@PCA/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + PCA -> PCA; + + PCA [URL="PCA.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@PCA/graph.html b/doc/+eegtoolkit/+featselection/@PCA/graph.html new file mode 100644 index 0000000..905c0d7 --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@PCA/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featselection/@PCA + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+featselection/@PCA >
    +

    Dependency Graph for ./+eegtoolkit/+featselection/@PCA

    + +
    +Dependency Graph for ./+eegtoolkit/+featselection/@PCA + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@PCA/graph.map b/doc/+eegtoolkit/+featselection/@PCA/graph.map new file mode 100644 index 0000000..c747cc7 --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@PCA/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featselection/@PCA/graph.png b/doc/+eegtoolkit/+featselection/@PCA/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9cdb495dcaca1f3f93c09f7d2e426796078be6ff GIT binary patch literal 3438 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 + + + Index for Directory ./+eegtoolkit/+featselection/@PCA + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+featselection/@PCA >
    + +

    Index for ./+eegtoolkit/+featselection/@PCA

    + +

    Matlab files in this directory:

    + +
     PCA
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@SVD/SVD.html b/doc/+eegtoolkit/+featselection/@SVD/SVD.html new file mode 100644 index 0000000..61e1deb --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@SVD/SVD.html @@ -0,0 +1,82 @@ + + + + Description of SVD + + + + + + + + + + + + + +

    SVD +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    SVD.m

    +

    SOURCE CODE ^

    +
    0001 classdef SVD < eegtoolkit.featselection.FeatureSelectionBase;
    +0002     properties (Access = public)
    +0003         modes;
    +0004         avgTime;
    +0005     end
    +0006     methods
    +0007         function SVD = SVD(instanceSet,modes)
    +0008             if nargin == 0
    +0009                 SVD.modes = 80;
    +0010             else
    +0011                 SVD.modes = modes;
    +0012                 SVD.originalInstanceSet = instanceSet;
    +0013             end
    +0014         end
    +0015         
    +0016         function SVD = compute(SVD)
    +0017             tic
    +0018             [U, S, V] = svd(SVD.originalInstanceSet.getInstances);
    +0019             data_svd = U*S(:,1:SVD.modes)*V(1:SVD.modes,1:SVD.modes)';
    +0020             [numInst, ~] = size(data_svd);
    +0021             SVD.avgTime = toc/numInst;
    +0022             SVD.filteredInstanceSet = eegtoolkit.util.InstanceSet(data_svd, SVD.originalInstanceSet.getLabels);
    +0023         end
    +0024         function configInfo = getConfigInfo(SVD)
    +0025             configInfo = sprintf('SVD\tmodes:%d', SVD.modes);
    +0026         end
    +0027         
    +0028         function time = getTime(SVD)
    +0029             time = SVD.avgTime;
    +0030         end
    +0031     end
    +0032 end
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@SVD/SVD.m b/doc/+eegtoolkit/+featselection/@SVD/SVD.m new file mode 100644 index 0000000..e84a121 --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@SVD/SVD.m @@ -0,0 +1,32 @@ +classdef SVD < eegtoolkit.featselection.FeatureSelectionBase; + properties (Access = public) + modes; + avgTime; + end + methods + function SVD = SVD(instanceSet,modes) + if nargin == 0 + SVD.modes = 80; + else + SVD.modes = modes; + SVD.originalInstanceSet = instanceSet; + end + end + + function SVD = compute(SVD) + tic + [U, S, V] = svd(SVD.originalInstanceSet.getInstances); + data_svd = U*S(:,1:SVD.modes)*V(1:SVD.modes,1:SVD.modes)'; + [numInst, ~] = size(data_svd); + SVD.avgTime = toc/numInst; + SVD.filteredInstanceSet = eegtoolkit.util.InstanceSet(data_svd, SVD.originalInstanceSet.getLabels); + end + function configInfo = getConfigInfo(SVD) + configInfo = sprintf('SVD\tmodes:%d', SVD.modes); + end + + function time = getTime(SVD) + time = SVD.avgTime; + end + end +end \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@SVD/graph.dot b/doc/+eegtoolkit/+featselection/@SVD/graph.dot new file mode 100644 index 0000000..4c18e29 --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@SVD/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + SVD -> SVD; + + SVD [URL="SVD.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@SVD/graph.html b/doc/+eegtoolkit/+featselection/@SVD/graph.html new file mode 100644 index 0000000..c601b51 --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@SVD/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+featselection/@SVD + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+featselection/@SVD >
    +

    Dependency Graph for ./+eegtoolkit/+featselection/@SVD

    + +
    +Dependency Graph for ./+eegtoolkit/+featselection/@SVD + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@SVD/graph.map b/doc/+eegtoolkit/+featselection/@SVD/graph.map new file mode 100644 index 0000000..d61dd1c --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@SVD/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+featselection/@SVD/graph.png b/doc/+eegtoolkit/+featselection/@SVD/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6946a19110ab4e55a7e764c4efe43882b804f224 GIT binary patch literal 3482 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+featselection/@SVD/index.html b/doc/+eegtoolkit/+featselection/@SVD/index.html new file mode 100644 index 0000000..865923a --- /dev/null +++ b/doc/+eegtoolkit/+featselection/@SVD/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+featselection/@SVD + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+featselection/@SVD >
    + +

    Index for ./+eegtoolkit/+featselection/@SVD

    + +

    Matlab files in this directory:

    + +
     SVD
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Amuse/Amuse.html b/doc/+eegtoolkit/+preprocessing/@Amuse/Amuse.html new file mode 100644 index 0000000..6491268 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Amuse/Amuse.html @@ -0,0 +1,152 @@ + + + + Description of Amuse + + + + + + + + + + + + + +

    Amuse +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    Amuse.m

    +

    SOURCE CODE ^

    +
    0001 classdef Amuse < eegtoolkit.preprocessing.PreprocessingBase
    +0002     
    +0003     properties
    +0004         first;
    +0005         last;
    +0006         avgTime;
    +0007     end
    +0008     
    +0009     methods
    +0010         function AM = Amuse()
    +0011             AM.first = 2;
    +0012             AM.last = 256;
    +0013         end
    +0014         
    +0015         function out = process(AM,in )
    +0016             out = {};
    +0017             total = 0;
    +0018             for i=1:length(in)
    +0019                 %                 i
    +0020                 %                 in{i}.signal(end,:) = [];
    +0021                 tic
    +0022                 signal = in{i}.signal;
    +0023                 %                 signal(end,:) = [];
    +0024                 [W,~,yest] = AM.amuse(signal);
    +0025                 signal = pinv(W(AM.first:AM.last,:))*yest(AM.first:AM.last,: );
    +0026                 total = total + toc;
    +0027                 in{i}.signal = signal;
    +0028                 %                 out{i} = eegtoolkit.util.Trial(signal,in{i}.label,in{i}.samplingRate,in{i}.subjectid);
    +0029             end
    +0030             out = in;
    +0031             %             total = toc;
    +0032             AM.avgTime = total/length(in);
    +0033         end
    +0034         
    +0035         function configInfo = getConfigInfo(AM)
    +0036             configInfo = sprintf('Amuse:\t%d-%d',AM.first,AM.last);
    +0037         end
    +0038         
    +0039         function time = getTime(AM)
    +0040             time = AM.avgTime;
    +0041         end
    +0042     end
    +0043     
    +0044     methods (Access = private)
    +0045         function [W,D1,y] = amuse(AM,X)
    +0046             % BSS using eigenvalue value decomposition
    +0047             % Program written by A. Cichocki and R. Szupiluk
    +0048             %
    +0049             % X [m x N] matrix of observed (measured) signals,
    +0050             % W separating matrix,
    +0051             % y estimated separated sources
    +0052             % p time delay used in computation of covariance matrices
    +0053             % optimal time-delay default p= 1
    +0054             %
    +0055             % First stage: Standard prewhitening
    +0056             
    +0057             [m,N]=size(X);
    +0058             if nargin==2,
    +0059                 n=m; %
    +0060             end;
    +0061             
    +0062             Rxx=(X*X')/N;
    +0063             
    +0064             [Ux,Dx,Vx]=svd(Rxx);
    +0065             Dx=diag(Dx);
    +0066             % n=xxx;
    +0067             if n<m, % under assumption of additive white noise and
    +0068                 %when the number of sources are known or can a priori estimated
    +0069                 Dx=Dx-real((mean(Dx(n+1:m))));
    +0070                 Q= diag(real(sqrt(1./Dx(1:n))))*Ux(:,1:n)';
    +0071                 %
    +0072             else    % under assumption of no additive noise and when the
    +0073                 % number of sources is unknown
    +0074                 n=max(find(Dx>1e-199)); %Detection the number of sources
    +0075                 Q= diag(real(sqrt(1./Dx(1:n))))*Ux(:,1:n)';
    +0076             end;
    +0077 
    +0078             %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    +0079             % Second stage: Fast separation using sorting EVD
    +0080             % notation the same as used in the Chapter 4
    +0081             Xb=Q*X;
    +0082             p=1;
    +0083             % paramter p can take here value different than 1
    +0084             % for example -1 or 2.
    +0085             N=max(size(Xb));
    +0086             Xb=Xb-kron(mean(Xb')',ones(1,N));
    +0087             
    +0088             Rxbxbp=(Xb(:,1:N-1)*Xb(:,2:N)')/(N-1);
    +0089             Rxbxbp= Rxbxbp+Rxbxbp';
    +0090             [Vxb Dxb]=eig(Rxbxbp);
    +0091             [D1 perm]=sort(diag(Dxb));
    +0092             D1=flipud(D1);
    +0093             Vxb=Vxb(:,flipud(perm));
    +0094             W = Vxb'*Q;
    +0095             y = Vxb' * Xb;%change Xb instead of x1
    +0096         end
    +0097     end
    +0098     
    +0099     
    +0100     
    +0101 end
    +0102
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Amuse/Amuse.m b/doc/+eegtoolkit/+preprocessing/@Amuse/Amuse.m new file mode 100644 index 0000000..06e5302 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Amuse/Amuse.m @@ -0,0 +1,102 @@ +classdef Amuse < eegtoolkit.preprocessing.PreprocessingBase + + properties + first; + last; + avgTime; + end + + methods + function AM = Amuse() + AM.first = 2; + AM.last = 256; + end + + function out = process(AM,in ) + out = {}; + total = 0; + for i=1:length(in) + % i + % in{i}.signal(end,:) = []; + tic + signal = in{i}.signal; + % signal(end,:) = []; + [W,~,yest] = AM.amuse(signal); + signal = pinv(W(AM.first:AM.last,:))*yest(AM.first:AM.last,: ); + total = total + toc; + in{i}.signal = signal; + % out{i} = eegtoolkit.util.Trial(signal,in{i}.label,in{i}.samplingRate,in{i}.subjectid); + end + out = in; + % total = toc; + AM.avgTime = total/length(in); + end + + function configInfo = getConfigInfo(AM) + configInfo = sprintf('Amuse:\t%d-%d',AM.first,AM.last); + end + + function time = getTime(AM) + time = AM.avgTime; + end + end + + methods (Access = private) + function [W,D1,y] = amuse(AM,X) + % BSS using eigenvalue value decomposition + % Program written by A. Cichocki and R. Szupiluk + % + % X [m x N] matrix of observed (measured) signals, + % W separating matrix, + % y estimated separated sources + % p time delay used in computation of covariance matrices + % optimal time-delay default p= 1 + % + % First stage: Standard prewhitening + + [m,N]=size(X); + if nargin==2, + n=m; % + end; + + Rxx=(X*X')/N; + + [Ux,Dx,Vx]=svd(Rxx); + Dx=diag(Dx); + % n=xxx; + if n1e-199)); %Detection the number of sources + Q= diag(real(sqrt(1./Dx(1:n))))*Ux(:,1:n)'; + end; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Second stage: Fast separation using sorting EVD + % notation the same as used in the Chapter 4 + Xb=Q*X; + p=1; + % paramter p can take here value different than 1 + % for example -1 or 2. + N=max(size(Xb)); + Xb=Xb-kron(mean(Xb')',ones(1,N)); + + Rxbxbp=(Xb(:,1:N-1)*Xb(:,2:N)')/(N-1); + Rxbxbp= Rxbxbp+Rxbxbp'; + [Vxb Dxb]=eig(Rxbxbp); + [D1 perm]=sort(diag(Dxb)); + D1=flipud(D1); + Vxb=Vxb(:,flipud(perm)); + W = Vxb'*Q; + y = Vxb' * Xb;%change Xb instead of x1 + end + end + + + +end + diff --git a/doc/+eegtoolkit/+preprocessing/@Amuse/graph.dot b/doc/+eegtoolkit/+preprocessing/@Amuse/graph.dot new file mode 100644 index 0000000..8736430 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Amuse/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + Amuse -> Amuse; + + Amuse [URL="Amuse.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Amuse/graph.html b/doc/+eegtoolkit/+preprocessing/@Amuse/graph.html new file mode 100644 index 0000000..48d9378 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Amuse/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+preprocessing/@Amuse + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@Amuse >
    +

    Dependency Graph for ./+eegtoolkit/+preprocessing/@Amuse

    + +
    +Dependency Graph for ./+eegtoolkit/+preprocessing/@Amuse + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Amuse/graph.map b/doc/+eegtoolkit/+preprocessing/@Amuse/graph.map new file mode 100644 index 0000000..92cf9a4 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Amuse/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+preprocessing/@Amuse/graph.png b/doc/+eegtoolkit/+preprocessing/@Amuse/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c72cc09a1aaba8496c47cfc2c17757dc22f5ff48 GIT binary patch literal 3920 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 + + + Index for Directory ./+eegtoolkit/+preprocessing/@Amuse + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@Amuse >
    + +

    Index for ./+eegtoolkit/+preprocessing/@Amuse

    + +

    Matlab files in this directory:

    + +
     Amuse
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@DigitalFilter/DigitalFilter.html b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/DigitalFilter.html new file mode 100644 index 0000000..76b4074 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/DigitalFilter.html @@ -0,0 +1,100 @@ + + + + Description of DigitalFilter + + + + + + + + + + + + + +

    DigitalFilter +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    DigitalFilter.m

    +

    SOURCE CODE ^

    +
    0001 classdef DigitalFilter < eegtoolkit.preprocessing.PreprocessingBase
    +0002     properties
    +0003         filt;
    +0004         info;
    +0005         avgTime;
    +0006     end
    +0007     
    +0008     methods
    +0009         function DF = DigitalFilter(filt)
    +0010             if(nargin > 0)
    +0011                 DF.filt = filt;
    +0012             end
    +0013         end
    +0014         
    +0015         function out = process(DF,in )
    +0016             tic;
    +0017             for i=1:length(in)
    +0018 %                 i
    +0019                 signal = in{i}.signal;
    +0020                 [numChannels, ~] = size(signal);
    +0021                 for j=1:numChannels
    +0022                     if isa(DF.filt,'dfilt.df2sos') || isa(DF.filt,'dfilt.df2')
    +0023 %                         signal(j,:) = filter(DF.filt,signal(j,:));
    +0024                         signal(j,:) = filtfilt(DF.filt.sosMatrix,DF.filt.ScaleValues,signal(j,:));
    +0025                     elseif isa(DF.filt,'dfilt.dffir')
    +0026                         signal(j,:) = filtfilt(DF.filt.Numerator,1,signal(j,:));
    +0027                     end
    +0028                 end
    +0029                   in{i}.signal = signal;
    +0030             end
    +0031             out = in;
    +0032             total = toc;
    +0033             DF.avgTime = total/length(in);
    +0034         end
    +0035         
    +0036         function configInfo = getConfigInfo(DF)
    +0037             if isempty(DF.info)
    +0038                 configInfo = 'DigitalFilter';
    +0039             else
    +0040                 configInfo = strcat('DigitalFilter:\t',info);
    +0041             end
    +0042         end
    +0043         
    +0044         function time = getTime(DF)
    +0045             time = DF.avgTime;
    +0046         end
    +0047     end
    +0048     
    +0049 end
    +0050
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@DigitalFilter/DigitalFilter.m b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/DigitalFilter.m new file mode 100644 index 0000000..e3390be --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/DigitalFilter.m @@ -0,0 +1,50 @@ +classdef DigitalFilter < eegtoolkit.preprocessing.PreprocessingBase + properties + filt; + info; + avgTime; + end + + methods + function DF = DigitalFilter(filt) + if(nargin > 0) + DF.filt = filt; + end + end + + function out = process(DF,in ) + tic; + for i=1:length(in) +% i + signal = in{i}.signal; + [numChannels, ~] = size(signal); + for j=1:numChannels + if isa(DF.filt,'dfilt.df2sos') || isa(DF.filt,'dfilt.df2') +% signal(j,:) = filter(DF.filt,signal(j,:)); + signal(j,:) = filtfilt(DF.filt.sosMatrix,DF.filt.ScaleValues,signal(j,:)); + elseif isa(DF.filt,'dfilt.dffir') + signal(j,:) = filtfilt(DF.filt.Numerator,1,signal(j,:)); + end + end + in{i}.signal = signal; + end + out = in; + total = toc; + DF.avgTime = total/length(in); + end + + function configInfo = getConfigInfo(DF) + if isempty(DF.info) + configInfo = 'DigitalFilter'; + else + configInfo = strcat('DigitalFilter:\t',info); + end + end + + function time = getTime(DF) + time = DF.avgTime; + end + end + +end + diff --git a/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.dot b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.dot new file mode 100644 index 0000000..ef63f77 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + DigitalFilter -> DigitalFilter; + + DigitalFilter [URL="DigitalFilter.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.html b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.html new file mode 100644 index 0000000..7a752d9 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+preprocessing/@DigitalFilter + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@DigitalFilter >
    +

    Dependency Graph for ./+eegtoolkit/+preprocessing/@DigitalFilter

    + +
    +Dependency Graph for ./+eegtoolkit/+preprocessing/@DigitalFilter + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.map b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.map new file mode 100644 index 0000000..7c4f4d2 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.png b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e2921261455869062923203df4aeead64bface79 GIT binary patch literal 4874 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 + + + Index for Directory ./+eegtoolkit/+preprocessing/@DigitalFilter + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@DigitalFilter >
    + +

    Index for ./+eegtoolkit/+preprocessing/@DigitalFilter

    + +

    Matlab files in this directory:

    + +
     DigitalFilter
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@FastICA/FastICA.html b/doc/+eegtoolkit/+preprocessing/@FastICA/FastICA.html new file mode 100644 index 0000000..90734ba --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@FastICA/FastICA.html @@ -0,0 +1,97 @@ + + + + Description of FastICA + + + + + + + + + + + + + +

    FastICA +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    FastICA.m

    +

    SOURCE CODE ^

    +
    0001 classdef FastICA < eegtoolkit.preprocessing.PreprocessingBase
    +0002     
    +0003     properties
    +0004         first;
    +0005         last;
    +0006         avgTime;
    +0007     end
    +0008     
    +0009     methods
    +0010         function ICA = FastICA()
    +0011             ICA.first = 2;
    +0012             ICA.last = 256;
    +0013         end
    +0014         
    +0015         function out = process(ICA,in )
    +0016             out = {};
    +0017             total = 0;
    +0018             for i=1:length(in)
    +0019                 i
    +0020 %                 in{i}.signal(end,:) = [];
    +0021                 tic
    +0022                 signal = in{i}.signal;
    +0023 %                 signal(end,:) = [];
    +0024 %                 [W,~,yest] = amuse(signal);
    +0025 %                 signal = pinv(W(ICA.first:ICA.last,:))*yest(ICA.first:ICA.last,: );
    +0026                 [icasig, A, W] = fastica (signal);
    +0027                 signal = A(:,ICA.first:end)*icasig(ICA.first:end,:);
    +0028                 total = total + toc;
    +0029 %                 in{i}.signal = signal;
    +0030                 out{i} = eegtoolkit.util.Trial(signal,in{i}.label,in{i}.samplingRate,in{i}.subjectid,in{i}.sessionid,in{i}.type);
    +0031             end
    +0032 %             out = in;
    +0033 %             total = toc;
    +0034             ICA.avgTime = total/length(in);
    +0035         end
    +0036         
    +0037         function configInfo = getConfigInfo(ICA)
    +0038             configInfo = sprintf('FastICA:\t%d-%d',ICA.first,ICA.last);
    +0039         end
    +0040         
    +0041         function time = getTime(ICA)
    +0042             time = ICA.avgTime;
    +0043         end
    +0044     end
    +0045     
    +0046 end
    +0047
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@FastICA/FastICA.m b/doc/+eegtoolkit/+preprocessing/@FastICA/FastICA.m new file mode 100644 index 0000000..dbc3ac3 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@FastICA/FastICA.m @@ -0,0 +1,47 @@ +classdef FastICA < eegtoolkit.preprocessing.PreprocessingBase + + properties + first; + last; + avgTime; + end + + methods + function ICA = FastICA() + ICA.first = 2; + ICA.last = 256; + end + + function out = process(ICA,in ) + out = {}; + total = 0; + for i=1:length(in) + i +% in{i}.signal(end,:) = []; + tic + signal = in{i}.signal; +% signal(end,:) = []; +% [W,~,yest] = amuse(signal); +% signal = pinv(W(ICA.first:ICA.last,:))*yest(ICA.first:ICA.last,: ); + [icasig, A, W] = fastica (signal); + signal = A(:,ICA.first:end)*icasig(ICA.first:end,:); + total = total + toc; +% in{i}.signal = signal; + out{i} = eegtoolkit.util.Trial(signal,in{i}.label,in{i}.samplingRate,in{i}.subjectid,in{i}.sessionid,in{i}.type); + end +% out = in; +% total = toc; + ICA.avgTime = total/length(in); + end + + function configInfo = getConfigInfo(ICA) + configInfo = sprintf('FastICA:\t%d-%d',ICA.first,ICA.last); + end + + function time = getTime(ICA) + time = ICA.avgTime; + end + end + +end + diff --git a/doc/+eegtoolkit/+preprocessing/@FastICA/graph.dot b/doc/+eegtoolkit/+preprocessing/@FastICA/graph.dot new file mode 100644 index 0000000..22490a9 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@FastICA/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + FastICA -> FastICA; + + FastICA [URL="FastICA.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@FastICA/graph.html b/doc/+eegtoolkit/+preprocessing/@FastICA/graph.html new file mode 100644 index 0000000..a8abb55 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@FastICA/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+preprocessing/@FastICA + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@FastICA >
    +

    Dependency Graph for ./+eegtoolkit/+preprocessing/@FastICA

    + +
    +Dependency Graph for ./+eegtoolkit/+preprocessing/@FastICA + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@FastICA/graph.map b/doc/+eegtoolkit/+preprocessing/@FastICA/graph.map new file mode 100644 index 0000000..ae66e9d --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@FastICA/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+preprocessing/@FastICA/graph.png b/doc/+eegtoolkit/+preprocessing/@FastICA/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..eae8defc454830c5b0b920655f9a71198c64aabb GIT binary patch literal 4316 zcmWldcRbX89LG;+*kqFw*(C0=XS%q^NXFqZ%FHG+WoJe@o5L9yC#4)&+1bw74&i6- z$cXrTJZ^mNaesWipU=JDuh;YSz9_v%4```4sUQ#tt(K;S0l3D2m%`K_Co?S{iDGzL^_YetOIuGwm4DkWNe&-7VY6RI&K#ok2$4gY!$B`2qdMDYZE8ukG)tpIAtfgQ=z_BVa(+BT|o`5WS@ zPYs_u$t^3>CJi~lH1q1}>eQwsEWZC}ZKZ%%T3L}fIXRh_nl_P0b-3p~n(|=|BBG*+ zSy^!;lKFp2OEH+Eqaz^^5p`2j4iOO%qN8Xq6;=H;dF z3041Vbv1f(s&;KQR{m~t_mKb1sLV|6{KCSUN=nz#($ao*b*a0!NNDCgE_zgf$4A!J zD{*sk=jaK6Cs^;+w0O3QfdlcBr>nbL-@w3NOX3L<8GUjRNUHI?L`g|0Bqr7xdWjwa zF)}jJ6G6LqdWP24DqN)Hq;Pe0^;#V&hTZOcc)vEiu%v`4Dk@6$)n6!BWqb7L>)g6J zZi8ZGL;({I56|}AURY6);NL%Mmo8n3+<#AnMuc~#+~xzDJUiK?A0!eJlanu^5tKGI zHoks-P5u4!_abPTQt#MU+Sm|XkY*WoWpv>1i$Q1qd|Ep?=GVt7eNPVWfTR4{+M-uc zQ8_$1YU=2?Wbxh0;h|}-I+nmIDoQOZEUc-erRL!wCGoU@=Kc2X-_2v6Z5WxE!x;JC z(4)RlMtg5!f`)+sleLYF`}Qxj{}vXSIyb5#{Z8< zOG}F|8Zln$;~Mm5*tjm>puC~^tmtEL@$Bu!lV*J^T%UpB@6plD&qTfr@zTz(W6<#M z@H|t})KraKKTpZ9<171sTh(r}7mBpg)YTZ4*Vej|1a+(M`D}wPh(kj|ZoTQS^@(qy zQzTOL>$9LxQ=}>q$yxL$3jxWz>&!__O+9I5fQ5ELU!VPxK_hPU_ViTy|8X1{8d^3R z6@3^OsAyqfG5*cT*k!t|rhdWxz97*a%31!jF8zQ@3iKYRe@=BZ`_9e|Xlm!d z75iUjexRS!@7;4>9THwA)m-(cG3TBpfc*NiHV8x+QpkmouFmO&CJZk#>bob`sgGiB;35c!%Is=Q2`sU zdPVYpa)&%DmXU=eJS>cY=9>K1wr~!64*KiLVHnKy?_Mh*V`C->VTghdB(5FwN!tyc zf`S4eQPGx-Nqiz29qu$*o?BJLDwRe9gmsyQrgeL^g^_^)0!(Ep9J*hN&dSmOG7380 z!2ADGGOx6y#o=&Q-Y`Xlsi~>a(9tb&xz;s-h9D3Ki4fnl5%K!ufW;mTxP}G;gv{;l z-io5{c1|kF*tkR7tjcX~nc(H)v$Xc9v9B{p&~v)Z&%DOtmdd|9BHU(lco?XrDe&a* zGYaN3--Q;1!e9%l!=)L4+MtY;m6aT9Y#ndkUIvY)FM>8;prGS~zRkGnZ0+FSkTef- zOebI;crFj*;sy~S!ooKo`zypEwR9xT76|K;MeWF($M4_2IoH?5D+S3a^77P4K0rVI z{{Dk4Eum}@<_!I&I3sBRfrzQ^-t(~>(wyQ;z<6#!TqdhFEfFqW7v{<^B2!%Qv88NFvkKtEPsA zLwScXE+k7;Rn^dc;OmnE+NzS0Xz&T>Fz|3Ycf>?cH~T+@tvaH;=~cl;`B*F;P{>5S zaov|M?}1ClzI{9Jur4~9s=c*!pra!)gx778R0GWX1+>wK*n?5Q{QLWd7?T61c4>vO z-A27|UkBzZf=1wWFtA>Fl@nD6>C5wOPn*q|#;0qi4^t%En?fi_6;|YA+o0~^S7$Vm z#m(RW0Ri>thBzb7wGkXtMy9B-@ijIp8mU9XKA@K{tI~G0{>pk1>rhf!nwFeww6&R# zl+xf@Zwo(S(WooV^l3qBaTh4Llqiq`j{q-yK!Y|D0)8d0M4i1j5 zm6h`ut_{Vo`d|le2wjNc%k|Xhwjt5OGm-p$7gknQ>+FVC$6tK5rui|3i(+D8%ZrNw zg`#N0%e4`mvQX`GXjEHUoApT{$pL`$@|$-&N`pt-o745(Y0`GlGkkn}S5$BNbQfB> zxJ*0#`4|=!1}_z&MJ0Fl_g{j@%FC}#GZPuv*x0tC-1Uu(BSnqNe{^IG@g?CMGie-QS3L zr*djSlCkUK4vUDe284MV9j)%|4O?AZZQbk5kZBnjVy0#ld-LhjZNPl5k&V?=D#*{y zPQprcdOBy|!IaPT{(c1SWd;f|s_+ZL!^2~>KDVi;sJx;_xdB1ijGd6@rh~i9byqSD zP#%&~QBg76s`zfa(k|vqIbdH5SUmyn`c%xUipJK~_RsHzKO<(rTBPx zAqqa5L&bGDIlK^6YwNs69c}IH*0aswb6LMvssavNhK7e{K`9BsC{K_JUVIz%cXV`g z1C3K%Qv=fu+&?G*+F**xCyazB57dm>=;-DSlwbX2cw-V76(7$^++QER z2l42nnEuT2M6B+!3~tm1Js_Z6k%GoyuH2m_V$?9bk9J@ zh#nak0nM0$DDdAr`WCjj>e%&6>hxr{AIJ21p$iTCXITE^zSEj8FYlYJ#L0e zVq`g3?7Zi0=Yj`*&BYG1myzGaMC zrK6`8gn+zZj;F?wN77x(1NGk`)e!BoiAB1egZWxukI%t9lja-&|3DT1mOw1jLGIea zdOJ=1(RR0x3RegXoBNgo12@Hwfq6OUbU~_I}tYh#43f`T&Q+nJIEn#_fOs-`Yz+Z~<_T z1D*^@w!b#|4urXW@kWB3uBcI2PECzpOzkf1GUm!v0kr13O1^@z^yF}0P!hqfrTj+PVedD~M0|R<31AQrP zfspkWC?rsIsoB}t6spCB6CX{p3nRnB&sp*6?_RFP&0Ir~g2qOb#>2T7I2R;thqMC) z5K*dMXKnIcF!Z)i@sSZ+y_?2f5o$`s^;va%fqZ*u>-{@#oLCkk8s_mTzA2lgZ2myoTb!ze_TD+rnIzl{B;%7 z8hgrvcRY8Lm9rTc8G!`zc`t(ve&~GmXY($ggg-H#*zHm4vsIXu#!+8amztG@lVQBb zX<%yFX4_1T`C{yV3% z_u9zkswyK_YZ}E_P)9FMPi#$%95Ca_by?212#^@gsb^zty;u0jbj!o|$&))$QtyG7 z_xAULtn3nk3&H%-yuIy474idk$1c#)hPalfc)BAfMkFv?tj0|%dwU_^Fna}S=(*|o zfD_;wU|lURRJFIYeZ%K3<)vuFf#4)_o>PD>yFLgMG>+_bWA z+KlP8sDGC724L{s?k*n$G+P458Cwi&x#9$SsJ5o&uSwU&^Be|J{%??;HuXk}p9nZA z`fPHyG&chQsDqT>mkx`0eX`Rbs`L)T8u=7)GlBS}or8lVFwvPlc``gb=v6pud%)kB zmv=MhXdz{9dz%*muoyQxI~yAlGY=*+WaaY9qN=K7EiEm8?R*e3$p+fnBS1EG_7c*3 zklQPO>Ferh283nc;)?0%(FS>zhDVY8e8vH-F*`rcC*eV0yb%Ss_zV2*vM<-!L6X%& zq3D1GXs1b0=H}+IgZvCupD=TbaY%94be;Mhet776K8UqOT?NrJR9hevkN2rJ?as=| zvU>4?H1a!LLrskg%yn(!U5_6>cHf#-`uR+XhC_-1bPl`1OR>PfK;Fa?ypg8k0VNE| zNqg>?TXS}{w(2;edjd(ht}_iFnxBuHFJH16KUe`~P|8*E@#AGM8~^O?z6XZdFJHbS zBqjy}o$QE1z+8Fw_iwcAby+vdT?~&8!^9MH!gp_(QA%36?TJZt(Bi_vd2EL8CTgC~ zzOJsH4xX4G5Qv17l*p12kvkZ$b=m&zMq?{|A!eKhEy@;!AVMSHST%k9#F0PQ*;DD2 znq!T4yU_rDbn>Df + + + Index for Directory ./+eegtoolkit/+preprocessing/@FastICA + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@FastICA >
    + +

    Index for ./+eegtoolkit/+preprocessing/@FastICA

    + +

    Matlab files in this directory:

    + +
     FastICA
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.html b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.html new file mode 100644 index 0000000..87198d7 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.html @@ -0,0 +1,95 @@ + + + + Description of PreprocessingBase + + + + + + + + + + + + + +

    PreprocessingBase +

    + +

    PURPOSE ^

    +
    Abstract class for preprocessing. Implement the functions for any
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
     Abstract class for preprocessing. Implement the functions for any
    + preprocessing step (e.g. filtering, artifact removal, sub-sampling,
    + rereferencing, etc.
    + 
    + Properties:
    + originalTrials: cell array with the trials to be processed
    + processedTrials: the processed trials to be returned
    + 
    + Functions:
    +Implement this function to process the in trials and return the processed
    +trials (out)
    +   out = obj.process(in);
    +Info & run time so that the experiments are easily documented. configInfo
    +is a string with the configuration information and time is of type double.
    +   configInfo = obj.getConfigInfo();
    +   time = obj.getTime();
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    • PreprocessingBase Abstract class for preprocessing. Implement the functions for any
    +This function is called by: +
      +
    • PreprocessingBase Abstract class for preprocessing. Implement the functions for any
    + + + +

    DOWNLOAD ^

    +

    PreprocessingBase.m

    +

    SOURCE CODE ^

    +
    0001 % Abstract class for preprocessing. Implement the functions for any
    +0002 % preprocessing step (e.g. filtering, artifact removal, sub-sampling,
    +0003 % rereferencing, etc.
    +0004 %
    +0005 % Properties:
    +0006 % originalTrials: cell array with the trials to be processed
    +0007 % processedTrials: the processed trials to be returned
    +0008 %
    +0009 % Functions:
    +0010 %Implement this function to process the in trials and return the processed
    +0011 %trials (out)
    +0012 %   out = obj.process(in);
    +0013 %Info & run time so that the experiments are easily documented. configInfo
    +0014 %is a string with the configuration information and time is of type double.
    +0015 %   configInfo = obj.getConfigInfo();
    +0016 %   time = obj.getTime();
    +0017 
    +0018 classdef PreprocessingBase < handle
    +0019     
    +0020     properties
    +0021         originalTrials;
    +0022         processedTrials;
    +0023     end
    +0024     
    +0025     methods (Abstract = true)
    +0026         out = process(obj,in);
    +0027         configInfo = getConfigInfo(obj);
    +0028         time = getTime(obj);
    +0029     end
    +0030     
    +0031 end
    +0032
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.m b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.m new file mode 100644 index 0000000..9abae63 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.m @@ -0,0 +1,32 @@ +% Abstract class for preprocessing. Implement the functions for any +% preprocessing step (e.g. filtering, artifact removal, sub-sampling, +% rereferencing, etc. +% +% Properties: +% originalTrials: cell array with the trials to be processed +% processedTrials: the processed trials to be returned +% +% Functions: +%Implement this function to process the in trials and return the processed +%trials (out) +% out = obj.process(in); +%Info & run time so that the experiments are easily documented. configInfo +%is a string with the configuration information and time is of type double. +% configInfo = obj.getConfigInfo(); +% time = obj.getTime(); + +classdef PreprocessingBase < handle + + properties + originalTrials; + processedTrials; + end + + methods (Abstract = true) + out = process(obj,in); + configInfo = getConfigInfo(obj); + time = getTime(obj); + end + +end + diff --git a/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.dot b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.dot new file mode 100644 index 0000000..c7affe5 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + PreprocessingBase -> PreprocessingBase; + + PreprocessingBase [URL="PreprocessingBase.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.html b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.html new file mode 100644 index 0000000..e0191c3 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+preprocessing/@PreprocessingBase + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@PreprocessingBase >
    +

    Dependency Graph for ./+eegtoolkit/+preprocessing/@PreprocessingBase

    + +
    +Dependency Graph for ./+eegtoolkit/+preprocessing/@PreprocessingBase + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.map b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.map new file mode 100644 index 0000000..9d7c117 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.png b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..170392e2a02802f82a4fbb279e6bb7d6ca728f1e GIT binary patch literal 6235 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 HIN*N(p#uQR literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/index.html b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/index.html new file mode 100644 index 0000000..a2d767b --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+preprocessing/@PreprocessingBase + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@PreprocessingBase >
    + +

    Index for ./+eegtoolkit/+preprocessing/@PreprocessingBase

    + +

    Matlab files in this directory:

    + +
     PreprocessingBaseAbstract class for preprocessing. Implement the functions for any
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Rereferencing/Rereferencing.html b/doc/+eegtoolkit/+preprocessing/@Rereferencing/Rereferencing.html new file mode 100644 index 0000000..26c098e --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Rereferencing/Rereferencing.html @@ -0,0 +1,95 @@ + + + + Description of Rereferencing + + + + + + + + + + + + + +

    Rereferencing +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    Rereferencing.m

    +

    SOURCE CODE ^

    +
    0001 classdef Rereferencing < eegtoolkit.preprocessing.PreprocessingBase
    +0002     
    +0003     properties
    +0004         %meanSignal=1: Subtract the mean from the signal
    +0005         %meanSignal=2: Average rereferencing
    +0006         meanSignal;
    +0007         avgTime;
    +0008     end
    +0009     
    +0010     methods
    +0011         function RR = Rereferencing()
    +0012             RR.meanSignal = 1;
    +0013         end
    +0014         
    +0015         function out = process(RR,in)
    +0016             out = {};
    +0017             tic;
    +0018             for i=1:length(in)
    +0019                 if RR.meanSignal == 1
    +0020                     [numChannels,~] = size(in{i}.signal);
    +0021                     for j=1:numChannels
    +0022                         in{i}.signal(j,:) = in{i}.signal(j,:) - mean(in{i}.signal(j,:));
    +0023                     end
    +0024                 elseif RR.meanSignal == 2
    +0025                     meanChann = mean(in{i}.signal);
    +0026                       in{i}.signal = in{i}.signal-repmat(meanChann,257,1);
    +0027                 end
    +0028                 out = in;
    +0029             end
    +0030             RR.avgTime = toc/length(in);
    +0031         end
    +0032         
    +0033         function configInfo = getConfigInfo(RR)
    +0034             configInfo = sprintf('Rereferencing:\tmeanSignal:%d',RR.meanSignal);
    +0035         end
    +0036         
    +0037                         
    +0038         function time = getTime(RR)
    +0039             time = RR.avgTime;
    +0040         end
    +0041         
    +0042     end
    +0043     
    +0044 end
    +0045
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Rereferencing/Rereferencing.m b/doc/+eegtoolkit/+preprocessing/@Rereferencing/Rereferencing.m new file mode 100644 index 0000000..06c48e7 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Rereferencing/Rereferencing.m @@ -0,0 +1,45 @@ +classdef Rereferencing < eegtoolkit.preprocessing.PreprocessingBase + + properties + %meanSignal=1: Subtract the mean from the signal + %meanSignal=2: Average rereferencing + meanSignal; + avgTime; + end + + methods + function RR = Rereferencing() + RR.meanSignal = 1; + end + + function out = process(RR,in) + out = {}; + tic; + for i=1:length(in) + if RR.meanSignal == 1 + [numChannels,~] = size(in{i}.signal); + for j=1:numChannels + in{i}.signal(j,:) = in{i}.signal(j,:) - mean(in{i}.signal(j,:)); + end + elseif RR.meanSignal == 2 + meanChann = mean(in{i}.signal); + in{i}.signal = in{i}.signal-repmat(meanChann,257,1); + end + out = in; + end + RR.avgTime = toc/length(in); + end + + function configInfo = getConfigInfo(RR) + configInfo = sprintf('Rereferencing:\tmeanSignal:%d',RR.meanSignal); + end + + + function time = getTime(RR) + time = RR.avgTime; + end + + end + +end + diff --git a/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.dot b/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.dot new file mode 100644 index 0000000..03cfa28 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + Rereferencing -> Rereferencing; + + Rereferencing [URL="Rereferencing.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.html b/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.html new file mode 100644 index 0000000..c91e1a3 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+preprocessing/@Rereferencing + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@Rereferencing >
    +

    Dependency Graph for ./+eegtoolkit/+preprocessing/@Rereferencing

    + +
    +Dependency Graph for ./+eegtoolkit/+preprocessing/@Rereferencing + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.map b/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.map new file mode 100644 index 0000000..9e51d40 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.png b/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6c4894f1aab2268f71d56e9d7a4f993a48797694 GIT binary patch literal 5129 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+preprocessing/@Rereferencing/index.html b/doc/+eegtoolkit/+preprocessing/@Rereferencing/index.html new file mode 100644 index 0000000..b56a4f6 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Rereferencing/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+preprocessing/@Rereferencing + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@Rereferencing >
    + +

    Index for ./+eegtoolkit/+preprocessing/@Rereferencing

    + +

    Matlab files in this directory:

    + +
     Rereferencing
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@SampleSelection/SampleSelection.html b/doc/+eegtoolkit/+preprocessing/@SampleSelection/SampleSelection.html new file mode 100644 index 0000000..3b1cfb2 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@SampleSelection/SampleSelection.html @@ -0,0 +1,143 @@ + + + + Description of SampleSelection + + + + + + + + + + + + + +

    SampleSelection +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    SampleSelection.m

    +

    SOURCE CODE ^

    +
    0001 classdef SampleSelection < eegtoolkit.preprocessing.PreprocessingBase
    +0002     properties
    +0003         channels;
    +0004         sampleRange;
    +0005         samplingRate;
    +0006     end
    +0007     
    +0008     methods
    +0009         function CS = SampleSelection(channels,sampleRange)
    +0010             if(nargin == 0)
    +0011                 CS.channels = 126;
    +0012                 CS.sampleRange = [1,1250];
    +0013             end
    +0014             if(nargin > 0)
    +0015                 CS.channels = channels;
    +0016             end
    +0017             if nargin > 1
    +0018                 CS.sampleRange = sampleRange;
    +0019             end
    +0020         end
    +0021         
    +0022         function out = process(CS,in)
    +0023             out = {};
    +0024             CS.samplingRate = in{1}.samplingRate;
    +0025             for i=1:length(in)
    +0026                 if(length(CS.channels) > 0)
    +0027                     if(length(CS.sampleRange) > 2)
    +0028                         signal = in{i}.signal(CS.channels,CS.sampleRange);
    +0029                         out{i} = eegtoolkit.util.Trial(signal ...
    +0030                             ,in{i}.label,in{i}.samplingRate,in{i}.subjectid,in{i}.sessionid);
    +0031                     elseif(length(CS.sampleRange) > 0)
    +0032                         %channels AND sampleRange
    +0033                         signal = in{i}.signal(CS.channels,CS.sampleRange(1):CS.sampleRange(2));
    +0034                         out{i} = eegtoolkit.util.Trial(signal ...
    +0035                             ,in{i}.label,in{i}.samplingRate,in{i}.subjectid,in{i}.sessionid);
    +0036                     else
    +0037                         %ONLY channels
    +0038                         signal = in{i}.signal(CS.channels,:);
    +0039                         out{i} = eegtoolkit.util.Trial(signal ...
    +0040                             ,in{i}.label,in{i}.samplingRate,in{i}.subjectid,in{i}.sessionid);
    +0041                     end
    +0042                 else
    +0043                     if(length(CS.sampleRange) > 2)
    +0044                         signal = in{i}.signal(:,CS.sampleRange);
    +0045                         out{i} = eegtoolkit.util.Trial(signal ...
    +0046                             ,in{i}.label,in{i}.samplingRate,in{i}.subjectid,in{i}.sessionid);
    +0047                     elseif(length(CS.sampleRange) > 0)
    +0048                         %ONLY sampleRange
    +0049                         signal = in{i}.signal(:,CS.sampleRange(1):CS.sampleRange(2));
    +0050                         out{i} = eegtoolkit.util.Trial(signal ...
    +0051                             ,in{i}.label,in{i}.samplingRate,in{i}.subjectid,in{i}.sessionid);
    +0052                     else
    +0053                         %NOTHING (?)
    +0054                         disp('Warning: No parameter specified for SampleSelection, using all channels and samples');
    +0055                     end
    +0056                 end
    +0057             end
    +0058         end
    +0059         
    +0060         function configInfo = getConfigInfo(CS)
    +0061             if(length(CS.channels) > 0)
    +0062                 if(length(CS.sampleRange) > 0)
    +0063                     configInfo = 'SampleSelection\tChannels:';
    +0064                     for i=1:length(CS.channels)
    +0065                         configInfo = strcat(configInfo,sprintf('%d+',CS.channels(i)));
    +0066                     end
    +0067                     configInfo = strcat(configInfo,sprintf('\tsampleRange:%d-%d',CS.sampleRange(1),CS.sampleRange(2)));
    +0068                 else
    +0069                     configInfo = 'SampleSelection\tChannels:';
    +0070                     for i=1:length(CS.channels)
    +0071                         configInfo = strcat(configInfo,sprintf('%d+',CS.channels(i)));
    +0072                     end
    +0073                 end
    +0074             else
    +0075                 if(length(CS.sampleRange) > 0)
    +0076                     configInfo = sprintf('SampleSelection\tSampleRange:%d-%d',CS.sampleRange(1),CS.sampleRange(2));
    +0077                     %ONLY sampleRange
    +0078                 else
    +0079                     %NOTHING (?)
    +0080                     configInfo = sprintf('SampleSelection\tNothing specified');
    +0081                 end
    +0082             end
    +0083         end
    +0084         
    +0085         
    +0086         function time = getTime(CS)
    +0087             time = 0;
    +0088         end
    +0089         
    +0090     end
    +0091     
    +0092 end
    +0093
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@SampleSelection/SampleSelection.m b/doc/+eegtoolkit/+preprocessing/@SampleSelection/SampleSelection.m new file mode 100644 index 0000000..fad7d87 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@SampleSelection/SampleSelection.m @@ -0,0 +1,93 @@ +classdef SampleSelection < eegtoolkit.preprocessing.PreprocessingBase + properties + channels; + sampleRange; + samplingRate; + end + + methods + function CS = SampleSelection(channels,sampleRange) + if(nargin == 0) + CS.channels = 126; + CS.sampleRange = [1,1250]; + end + if(nargin > 0) + CS.channels = channels; + end + if nargin > 1 + CS.sampleRange = sampleRange; + end + end + + function out = process(CS,in) + out = {}; + CS.samplingRate = in{1}.samplingRate; + for i=1:length(in) + if(length(CS.channels) > 0) + if(length(CS.sampleRange) > 2) + signal = in{i}.signal(CS.channels,CS.sampleRange); + out{i} = eegtoolkit.util.Trial(signal ... + ,in{i}.label,in{i}.samplingRate,in{i}.subjectid,in{i}.sessionid); + elseif(length(CS.sampleRange) > 0) + %channels AND sampleRange + signal = in{i}.signal(CS.channels,CS.sampleRange(1):CS.sampleRange(2)); + out{i} = eegtoolkit.util.Trial(signal ... + ,in{i}.label,in{i}.samplingRate,in{i}.subjectid,in{i}.sessionid); + else + %ONLY channels + signal = in{i}.signal(CS.channels,:); + out{i} = eegtoolkit.util.Trial(signal ... + ,in{i}.label,in{i}.samplingRate,in{i}.subjectid,in{i}.sessionid); + end + else + if(length(CS.sampleRange) > 2) + signal = in{i}.signal(:,CS.sampleRange); + out{i} = eegtoolkit.util.Trial(signal ... + ,in{i}.label,in{i}.samplingRate,in{i}.subjectid,in{i}.sessionid); + elseif(length(CS.sampleRange) > 0) + %ONLY sampleRange + signal = in{i}.signal(:,CS.sampleRange(1):CS.sampleRange(2)); + out{i} = eegtoolkit.util.Trial(signal ... + ,in{i}.label,in{i}.samplingRate,in{i}.subjectid,in{i}.sessionid); + else + %NOTHING (?) + disp('Warning: No parameter specified for SampleSelection, using all channels and samples'); + end + end + end + end + + function configInfo = getConfigInfo(CS) + if(length(CS.channels) > 0) + if(length(CS.sampleRange) > 0) + configInfo = 'SampleSelection\tChannels:'; + for i=1:length(CS.channels) + configInfo = strcat(configInfo,sprintf('%d+',CS.channels(i))); + end + configInfo = strcat(configInfo,sprintf('\tsampleRange:%d-%d',CS.sampleRange(1),CS.sampleRange(2))); + else + configInfo = 'SampleSelection\tChannels:'; + for i=1:length(CS.channels) + configInfo = strcat(configInfo,sprintf('%d+',CS.channels(i))); + end + end + else + if(length(CS.sampleRange) > 0) + configInfo = sprintf('SampleSelection\tSampleRange:%d-%d',CS.sampleRange(1),CS.sampleRange(2)); + %ONLY sampleRange + else + %NOTHING (?) + configInfo = sprintf('SampleSelection\tNothing specified'); + end + end + end + + + function time = getTime(CS) + time = 0; + end + + end + +end + diff --git a/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.dot b/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.dot new file mode 100644 index 0000000..f1cd68a --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + SampleSelection -> SampleSelection; + + SampleSelection [URL="SampleSelection.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.html b/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.html new file mode 100644 index 0000000..6bad530 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+preprocessing/@SampleSelection + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@SampleSelection >
    +

    Dependency Graph for ./+eegtoolkit/+preprocessing/@SampleSelection

    + +
    +Dependency Graph for ./+eegtoolkit/+preprocessing/@SampleSelection + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.map b/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.map new file mode 100644 index 0000000..03d491b --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.png b/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..11ac01fce5f62907c5c4916ae9cd4739f932d5aa GIT binary patch literal 5780 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 D)UZ#G literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+preprocessing/@SampleSelection/index.html b/doc/+eegtoolkit/+preprocessing/@SampleSelection/index.html new file mode 100644 index 0000000..95496df --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@SampleSelection/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+preprocessing/@SampleSelection + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@SampleSelection >
    + +

    Index for ./+eegtoolkit/+preprocessing/@SampleSelection

    + +

    Matlab files in this directory:

    + +
     SampleSelection
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Windsorize/Windsorize.html b/doc/+eegtoolkit/+preprocessing/@Windsorize/Windsorize.html new file mode 100644 index 0000000..33241d4 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Windsorize/Windsorize.html @@ -0,0 +1,114 @@ + + + + Description of Windsorize + + + + + + + + + + + + + +

    Windsorize +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    Windsorize.m

    +

    SOURCE CODE ^

    +
    0001 classdef Windsorize < eegtoolkit.preprocessing.PreprocessingBase
    +0002     properties
    +0003         limit_l;
    +0004         limit_h;
    +0005         subjectids;
    +0006     end
    +0007     
    +0008     methods
    +0009         function obj = Windsorize(low,high)
    +0010             if nargin == 0
    +0011                 obj.limit_l = 0.05;
    +0012                 obj.limit_h = 0.95;
    +0013             elseif nargin == 2
    +0014                 obj.limit_l = low;
    +0015                 obj.limit_h = high;
    +0016             else
    +0017                 error('2 inputs are required for windsorize, the low and high limits');
    +0018             end
    +0019         end
    +0020         
    +0021         function trials = process(obj,trials)
    +0022             subs = unique(obj.subjectids);
    +0023             nchannels = size(trials{1}.signal,1);
    +0024             trial_length = size(trials{1}.signal,2);
    +0025             for i=1:numel(subs)
    +0026                 ids = find(obj.subjectids == subs(i));
    +0027                 ntrials = numel(ids);
    +0028                 % Concatenate signal
    +0029                 signal = [];
    +0030                 for j=1:numel(ids)
    +0031                     signal = [signal trials{ids(j)}.signal];
    +0032                 end
    +0033                 %windsorize
    +0034                 sorted_sig = sort(signal,2);
    +0035                 upbound = sorted_sig(:,round(obj.limit_h*size(signal,2)));
    +0036                 uprep = sorted_sig(:,round(obj.limit_h*size(signal,2))-1);
    +0037                 lowbound = sorted_sig(:,round(obj.limit_l*size(signal,2)));
    +0038                 lowrep = sorted_sig(:,round(obj.limit_l*size(signal,2))+1);
    +0039                 for ch=1:nchannels
    +0040                     signal(ch,signal(ch,:)>upbound(ch)) = uprep(ch);
    +0041                     signal(ch,signal(ch,:)<lowbound(ch)) = lowrep(ch);
    +0042                 end
    +0043                 temp = mat2cell(signal,nchannels,trial_length*ones(ntrials,1));
    +0044                 for j=1:numel(ids)
    +0045                     trials{ids(j)}.signal = temp{j};
    +0046                 end
    +0047             end
    +0048             
    +0049         end
    +0050         
    +0051         
    +0052         function configInfo = getConfigInfo(CS)
    +0053             configInfo = sprintf('Windsorizing\tLow limit: %f, High limit: %f',CS.limit_l,CS.limit_l);
    +0054         end
    +0055         
    +0056         
    +0057         function time = getTime(CS)
    +0058             time = 0;
    +0059         end
    +0060         
    +0061     end
    +0062     
    +0063 end
    +0064
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Windsorize/Windsorize.m b/doc/+eegtoolkit/+preprocessing/@Windsorize/Windsorize.m new file mode 100644 index 0000000..6aafe6d --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Windsorize/Windsorize.m @@ -0,0 +1,64 @@ +classdef Windsorize < eegtoolkit.preprocessing.PreprocessingBase + properties + limit_l; + limit_h; + subjectids; + end + + methods + function obj = Windsorize(low,high) + if nargin == 0 + obj.limit_l = 0.05; + obj.limit_h = 0.95; + elseif nargin == 2 + obj.limit_l = low; + obj.limit_h = high; + else + error('2 inputs are required for windsorize, the low and high limits'); + end + end + + function trials = process(obj,trials) + subs = unique(obj.subjectids); + nchannels = size(trials{1}.signal,1); + trial_length = size(trials{1}.signal,2); + for i=1:numel(subs) + ids = find(obj.subjectids == subs(i)); + ntrials = numel(ids); + % Concatenate signal + signal = []; + for j=1:numel(ids) + signal = [signal trials{ids(j)}.signal]; + end + %windsorize + sorted_sig = sort(signal,2); + upbound = sorted_sig(:,round(obj.limit_h*size(signal,2))); + uprep = sorted_sig(:,round(obj.limit_h*size(signal,2))-1); + lowbound = sorted_sig(:,round(obj.limit_l*size(signal,2))); + lowrep = sorted_sig(:,round(obj.limit_l*size(signal,2))+1); + for ch=1:nchannels + signal(ch,signal(ch,:)>upbound(ch)) = uprep(ch); + signal(ch,signal(ch,:) Windsorize; + + Windsorize [URL="Windsorize.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Windsorize/graph.html b/doc/+eegtoolkit/+preprocessing/@Windsorize/graph.html new file mode 100644 index 0000000..f1c260b --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Windsorize/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+preprocessing/@Windsorize + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@Windsorize >
    +

    Dependency Graph for ./+eegtoolkit/+preprocessing/@Windsorize

    + +
    +Dependency Graph for ./+eegtoolkit/+preprocessing/@Windsorize + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Windsorize/graph.map b/doc/+eegtoolkit/+preprocessing/@Windsorize/graph.map new file mode 100644 index 0000000..c1acd95 --- /dev/null +++ b/doc/+eegtoolkit/+preprocessing/@Windsorize/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+preprocessing/@Windsorize/graph.png b/doc/+eegtoolkit/+preprocessing/@Windsorize/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6dac85ed6c922a7dfed9fae4e5bc4215a9d595ee GIT binary patch literal 5066 zcmWky1z3|?7#_`(M*0effG9C~fV7l!N!O5+7~MTeK~d=jM|Vg|moz9yOM}uOUH9

    40B^YFO7b$0+q*|r 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 + + + Index for Directory ./+eegtoolkit/+preprocessing/@Windsorize + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@Windsorize >
    + +

    Index for ./+eegtoolkit/+preprocessing/@Windsorize

    + +

    Matlab files in this directory:

    + +
     Windsorize
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@FusionInstanceSet/FusionInstanceSet.html b/doc/+eegtoolkit/+util/@FusionInstanceSet/FusionInstanceSet.html new file mode 100644 index 0000000..777c40c --- /dev/null +++ b/doc/+eegtoolkit/+util/@FusionInstanceSet/FusionInstanceSet.html @@ -0,0 +1,83 @@ + + + + Description of FusionInstanceSet + + + + + + + + + +
    Home > +eegtoolkit > +util > @FusionInstanceSet > FusionInstanceSet.m
    + + + +

    FusionInstanceSet +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    FusionInstanceSet.m

    +

    SOURCE CODE ^

    +
    0001 classdef FusionInstanceSet < eegtoolkit.util.InstanceSet
    +0002     properties
    +0003         numFusion;
    +0004         instanceSets;
    +0005     end
    +0006     
    +0007     methods 
    +0008         function FIS = FusionInstanceSet(baseInstanceSet)
    +0009             FIS = FIS@eegtoolkit.util.InstanceSet(baseInstanceSet.getDataset);
    +0010             FIS.numFusion = 0;
    +0011             FIS.instanceSets = {};
    +0012         end
    +0013         
    +0014         function FIS = addInstanceSet(FIS, instanceSet)
    +0015             FIS.numFusion = FIS.numFusion + 1;
    +0016             FIS.instanceSets{FIS.numFusion} = instanceSet;
    +0017         end
    +0018         
    +0019         function FIS = removeInstancesWithIndices(FIS, indices)
    +0020             for i=1:length(FIS.instanceSets)
    +0021                 FIS.instanceSets{i} = FIS.instanceSets{i}.removeInstancesWithIndices(indices);
    +0022             end
    +0023         end
    +0024         
    +0025         function instances = getInstancesWithIndices(FIS, indices)
    +0026             instances = zeros(length(indices),FIS.getNumFeatures,FIS.numFusion);
    +0027             for i=1:length(FIS.instanceSets)
    +0028                 instances(:,:,i) = FIS.instanceSets{i}.getInstancesWithIndices(indices);
    +0029             end
    +0030         end
    +0031     end
    +0032     
    +0033 end
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@FusionInstanceSet/FusionInstanceSet.m b/doc/+eegtoolkit/+util/@FusionInstanceSet/FusionInstanceSet.m new file mode 100644 index 0000000..f6cc0e0 --- /dev/null +++ b/doc/+eegtoolkit/+util/@FusionInstanceSet/FusionInstanceSet.m @@ -0,0 +1,33 @@ +classdef FusionInstanceSet < eegtoolkit.util.InstanceSet + properties + numFusion; + instanceSets; + end + + methods + function FIS = FusionInstanceSet(baseInstanceSet) + FIS = FIS@eegtoolkit.util.InstanceSet(baseInstanceSet.getDataset); + FIS.numFusion = 0; + FIS.instanceSets = {}; + end + + function FIS = addInstanceSet(FIS, instanceSet) + FIS.numFusion = FIS.numFusion + 1; + FIS.instanceSets{FIS.numFusion} = instanceSet; + end + + function FIS = removeInstancesWithIndices(FIS, indices) + for i=1:length(FIS.instanceSets) + FIS.instanceSets{i} = FIS.instanceSets{i}.removeInstancesWithIndices(indices); + end + end + + function instances = getInstancesWithIndices(FIS, indices) + instances = zeros(length(indices),FIS.getNumFeatures,FIS.numFusion); + for i=1:length(FIS.instanceSets) + instances(:,:,i) = FIS.instanceSets{i}.getInstancesWithIndices(indices); + end + end + end + +end diff --git a/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.dot b/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.dot new file mode 100644 index 0000000..f8c92f9 --- /dev/null +++ b/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + FusionInstanceSet -> FusionInstanceSet; + + FusionInstanceSet [URL="FusionInstanceSet.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.html b/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.html new file mode 100644 index 0000000..fed1895 --- /dev/null +++ b/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+util/@FusionInstanceSet + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@FusionInstanceSet >
    +

    Dependency Graph for ./+eegtoolkit/+util/@FusionInstanceSet

    + +
    +Dependency Graph for ./+eegtoolkit/+util/@FusionInstanceSet + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.map b/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.map new file mode 100644 index 0000000..35af42a --- /dev/null +++ b/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.png b/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d2373a843b4ec1dcb9afcaa08f15f59ebf3e563c GIT binary patch literal 5944 zcmY+I1yqz@wDyPYE@=crq)VjLVdzH0p&N!26{ICb98y3!hZdy&G>AxxG(&fYNJ^)` zclhpFcdZMD8D`DA@0@e?+0XOaJ6u;=g^ZYq7y^Nisj0&B!SfdQlO@Clk7*JC7vKrs zT0;c}xw-w#ZuuM!fza=$!JZm;XY6G9=^9M3_O$l>*QarE7rXBOZUs-k!_u(LgHy+r z33ek^@@l)4O|@0jB?z^p&!aHDqSorFFm$C z8!w;g7>gVC22Z=Swf2yOq5jNy`O~b$^URi0zrn`!EI)Eo7@>fGfK8^bX~qr~2}$3Q zW!KMkG420(boZ>o(ILS{V#&+PBV1jTR8$C>nwxVbxAxtWgGUhWyQ~?9vrs64x%qk5 z_PM#arHu`umoH!Lo%<7pLK~W!JHStlkJT&kQaAzlJj~Tq&_jlm6d&ivHvm0gDUw}K z5PE)9DUvzRflVI{qXdIEwEuKLOMqS+eSLkscYM6_Or$bOA>(uHqbV23yt+Dirf7WQ zGWyfqc||ibRwgETSLkkH3wnvKm(sDs1(C}l299vV`7q!wI9hXTAhY_6?MeBkdJ$Q-R~ z??(w1go}&&eR7iF+qZAAs@!{rhe$M<9SVg~vam#DXLD$#N%UHsTU9Mb-Zw0@uVx${ zALkVoR#8&I+nsAfrlm0n=wK7Z+GSfc)m>rml%eFMdIQfzE&vAwp0 z#KcftT}oRqMlgQ8mgeN-Tv}gW?_`N~?rw!UJ3H%{nnoQQyiQ0?&MPe?rK6)O`tl{D z*A^S1nIT0bmP*>z)+WiIuc}H2R>P5~zP$N!fr>QwzpVMJv zs0eXm`_{l9q@YlN!Eg&TQ$vc1c)fjmq^0lMr0sJ}6c+N(($nYW=i}nx;qeLzDj69u z8k?B3ExS`PF-25Xir7Enr45USfLdB|fU}aZbNx(5LxY5mpI^_&DE!kW>V%}E-2eXj zB#nYlQc?zioAc5VclPvf@$nIljErobHxEtGmQ1@StEmwk93IA@(G<1D(dmy~w!28$ zw7)0P1$Pe*x6-!v@Q~o94zHfKXT%55NK8!R<>P~biy|T;UtL{z8WKh+oisGB`Rd`Eh>^hcx9&6StNZRR=ps~-C-at)BznpFUK}C zEfga$NL6B9(Np~Fb8LEgO_fzEkB&lg=?k1|M%sxyKjhc4p zE;FfjUv9_CcpS*KK7>{QVK6l_qhe-`92+ypFDzWS&0p#+Szqh2^78Ke)t>!G9 z=ZA4gNhkRprqQMFmkVFROG^c8?d)>E@)Z;mR5dhgaG9v7#q`yxbP?4)$#xGu=6j9{MKjOH+4uyh@G56iL zCtzGd*xTE?%|)H0msea&G(9~n^>+J?Hd=v<6YAu|XIN$&ibp~pG_)=|+m*9)r^>j@ z(EoJa>+EbbW`F#Jg%t=iyv~I&Nysc>y4nHRwW|sk^o4hqu3w6Z+-u$l2yjJo zS?9#x*BSllb4Uoe$HOz)8-G7@XCm)T8eEW`WM{TMhRV_2p68*YF(*-RcciIeeHD)W@C7GI0)!xO?|z1&*8a0 zP$pag0xmHzYT{6Aka-}n2uVpj5=^eVL_9q_hI5r7!-m!|gPF3uE|M`&*PFnFz?*C3ADuI5 zAjoh89Y3$E>}-x>loC0+f+ps(&S&Z$+G3IQ|IAW z49$#>E4^7Cyceem1BbUmYpH5v!vi;{y`$rDyBaQVJ7bim+W`78y6)xTE~Nzex1zylA{7lEa4)*8#x zBDt_3X<~K}^8p~+KQ}cs>75|{Xr_vV?$%ebsMy)v8_1HM&5>k%s;^Itm7SDCpS~A( zwPm5mN7|!*E%|amQ%FcCX53_MYD)FKc1HF?=ZV;g3SlgcQ0PcB))c2kd16E+op}RUr+gLP{{$R1Iv~(xUX$t5-E18>2mMf9S~x zOziHu@$vCltIr2qo`{|j!eIEw;J3STjx@?J1ATocUt)xqxOi$|^az5xdRh}5crAUk z`Jy$K{pPHvf8VzyOVVZP2{{w1u&S~f4uSB8H-zk-ql?o3hJFJL9LwK|^R1HfK!@}qV;7^W^k72N} zu`%0cymz9NKlQC0?Kb}v+uz#SQWHvkhCuK>eDo;Zu%v*9hKCX|)8xtj{KX5*q(z_> z1Tj%+B>4^Oep~m>kb|Efd84Vem6a8^8wR5Y&57mY;v&c_?6u`gR9C9_dO*xIcy)P7 z1Nk{P2&6-u->@{B`H`E5;}-)y;IdrEw(su)uFuys*Rz|OWnJf+#_erqEw_)nE>{I6 zDlBv`g<8y1v*3_)uI?jluCGqsp3-gQD58E~F!7C2-Pjap2@qO4J3Cq$nvVC=&h`o{ z6Mp;KGqsTd^dtaCL>WGeJJqV)7Z;C*47d25y11|@_@_Wb?peZM@3ok~e*C+-3LjcO z-RiSkJz1}AiS$|g7SP{Y2NwXepsp6?mC6HC(^j&G0nOZF54xJyy$}L*606T5(TzH{T;{_YG52rq2R!EZT~!NnyK#_12-r{V1m6I4-gAFv6RygV!9 zgRO(WUFz^BFp)c?T-Je`W5vT89&b;NsY(p^lx%GB1{4>oemYmQNan9H2%AT>w?o0w z2>_bik_I`O9O86p;oQHZq{Ow|Po;z~v^_^wj`YKdI3z>Xi(F4n51^hmFkVsMxOWRC z$Hs6W0BY--Tg%GGonrxBEIrnllGpV9*@N zeQ|(}h7>MI=_Bz1&pOz*XST|owq9R2r@NOKl0bBe4HSQL?J@pXCvet+z-yi8fU=H` zjza$3w6kyDob`(jiEIF9;Q89r#AM;Wk4H<4CnGDn57KhFlV4D?f(IsQ~bl*#nNKv@)dP zAj9>G?=Um1?Jf?5!#LBV-xO-e1P2GhJX%#G`1m5Qad2FBO%}aZ$<#G9 zZL=bKZN;!H-^47+h7>e6rxR_lx*l8B-&n4ktiO5k1mffEJv?6WBK6F=D#g^)^bbI} zqx~Ls@u5Q@vnCi*wEcI9zw^y1;9ZFB>(^pC)77YVHQ0mA){lXK=nYL~Vz3=YBP#51Fiyaa+1L0S(}5n(^z@!$2Y=r%`^_L^n*F@QP?VJd zAW3dW2zGOi;q&KuU}`?TzWPuoHXS|v==OB=M&b+e9B>GtfDIBtZi(#H&s#6&|03E# z@NRL!$=NwiD_v4_<5o&QMG25#rr{M=u>qg&R$2Y6=+?N-N)}SiRy$D8IP@h6=1*=p zPL`W#P64j^)BN{a9*9Re(dC+Opc;TsWW?;q$i6B%JWS#0=ovMDh(X!EA~zlP(f&}d zdjO<1z_e<-{+i#u7mxn;9yqRCkpw?KzvKQ&7eGVAN@w^HU`{dlVc4k(ogln2sMA{X z{PObFsZy{*!&EurC?S9vZn+b8wGpsaVyY|UJb?>w2nv#c!aJTvs~xaq+uG~P9o*ZU zJ@Z!pRfRjKs%U9xzgvoY@9QH`Q&UTk^%8n_QjI3_lt~S?h?50`4-7OsCFKr_lshCY zE>2M`DAaE5zrdS!`JX>`*ow7*(bd&eh#6pGAt!+0QczH6X3Ee38PerTysf@K0N5Sc zzqbvvd7SQ=-NN9loQsKxO-U!gvk-3cO-i7Y15$uxsX$P@fA0UYzu#6lP&)P-l5-mr zRdJb_(XH3V6;sV#!i75MkAeSI*=;U-?vV89I)Y*wAo|Mc>d3^z2e31DWn`GXUopL@ zBvC(|XeW0lI+#F6)c77dt?YYC*!`rHdHw50QES3r`-&>)Kk#yKA$c@Yo`7Pi#_!ZE zy~hpkgvaij^h}iv!M%I;sL(_AA;26j#+m@2)%c$u#JRumu4bm551g!gQM0_fd`pC1 z%E~WyR?hze9Qi>YtJBXyykB3RxiLhf#?g z%ewmdqpA(E{#7UXMn-BI8ymk?R~3ON)>yV-|LpCxayCg4RkN|-+F58x&&|stf`DBf zS!nTNFJbRSNQ?p%R0M!^1XMF>?CgEpked|c{QUfnpFi7!aR~MnZ>|}r!*PXMj;QH@ zhvesTpHxvqVi1mwZQ(Tc-M6PiGvs`z{T0|-&$@&w?FX3pQ$#zacgd3Cj8eYj=3)a$ zQ8F~72lh&CVPPR)+CUjeF9=mv{~6!F!rpgB@iRtrYYwaw#2)X>@BX%xuE;9e-cNU1 zmqhUIoZn*yRQm1e#N^knUrUc~&M6>Mr3I-82@(tRgw~8miARrCk2Wxp&estz&VKY` zcA(I~>IF<5FL&?Qc`!WNrE_z069NU(FfcE6c6Pa&e}}5t+RE0}oM0!W6Mw_;I}s94 zP;CJ<{L$B^`0kwoXaoT~ic3o)PE-$-e)Ib~27{R{mmyv+^(UW0%YCh^jD0}l#{fS$ zIDq>5%Yp353OF(11x34dLcbV!63`^*!!{0j=6ciRJ z^iD<`c3z0^#1n;vhU%7#{}>uV8J8)8P6>oVM1&F)KPoOR0^qPy(a<3G_T1|*n?(67 zEvz7FxBg#l*8Cwim(#Sxm(JDI)!oah2W$YK5lDePQGtFq=&?97%Na+pR?XxA$8xG= za;i;}_5mFb4o+`hUrx|S0el|z@nd(wgJ-~L@5cASsbX+uW@q)x%|C)Z(Oi>fq;zZj z%SFIsp`fpqo104sCbEI~tXOQoDI~P(xSPQ;Yh9~iV!{l9`tf!y&2PyjD=bt%2js|C zKIn4mGn!UYJ*(#g(jl!#w_v)5njhR0FD z+}yZ;Bo#F^NinYh?7HMQ_npyf9X zn4{)hzT`ge?{eo{6mu3!)rpFkS>`}j{sr*KA% z0w5iNM5aP@c;ZFzay5C7nmjfn-+R_KD7T)ZX!4AWkLQ$^@5V7W{BOThMn-0P#z*%D zNHy$W2x$I+*rRlLabtS6Xny~w7Y8;uJUva6H$oWSi;HZtq?y2AaPmgN1_!m36Ry^j z1n4^!7ts$Yx9QAVnES#yB0Qz!;LP%H{@R)vkybxn-{F~=h>su1J-oa+EJcopFk8m~ z_N)?2(MaFp$`^YSE5Co^gVlkCDspIDk(ai8ex4P~BA|V{mb}}Kf0+nH$4}BHwH!(1 wt(X)VYRCP5y2yBYq1Bm|R#uF$8aFs%FaCUqb}YdLt#F8%k~XXyY8mqX0O@aQ4FCWD literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+util/@FusionInstanceSet/index.html b/doc/+eegtoolkit/+util/@FusionInstanceSet/index.html new file mode 100644 index 0000000..cd20d6c --- /dev/null +++ b/doc/+eegtoolkit/+util/@FusionInstanceSet/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+util/@FusionInstanceSet + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@FusionInstanceSet >
    + +

    Index for ./+eegtoolkit/+util/@FusionInstanceSet

    + +

    Matlab files in this directory:

    + +
     FusionInstanceSet
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@InstanceSet/InstanceSet.html b/doc/+eegtoolkit/+util/@InstanceSet/InstanceSet.html new file mode 100644 index 0000000..3fed654 --- /dev/null +++ b/doc/+eegtoolkit/+util/@InstanceSet/InstanceSet.html @@ -0,0 +1,327 @@ + + + + Description of InstanceSet + + + + + + + + + +
    Home > +eegtoolkit > +util > @InstanceSet > InstanceSet.m
    + + + +

    InstanceSet +

    + +

    PURPOSE ^

    +
    A class for describing a set of instances and labels
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
     A class for describing a set of instances and labels
    + 
    + Properties:
    + -instances : a m x n matrix where m = # instances and n =
    + # features
    + -labels: a m x 1 matrix containing the labels for each
    + instance
    + -K: a m x m matrix containing the kernel of the instances
    + required only for the Fast vesrion of LibSVM
    +
    + Functions:
    +Construct an instanceSet
    +   IS = eegtoolkit.util.InstanceSet(instances, labels)
    +Compute the kernel
    +   K = IS.computeKernel(kernel, gamma, maxlag, scaleopt)
    + kernel can be one of 'linear' (default),'rbf','chi','xcorr','spearman',
    + 'correlation','cosine','euclidean','seuclidean','mahalanobis'
    +Get the training kernel with indexes in the trainidx vector
    +   Ktrain = IS.getTrainKernel(trainidx)
    +Get the test kernel with test indexes testidx and train indexes trainidx
    +   Ktest = IS.getTestKernel(trainidx, testidx)
    +Get instances of specific indices in vector idx
    +   instance = IS.getInstancesWithIndices(idx)
    +Get the instances of a specific label
    +   instances = IS.getInstancesForLabel(label)
    +Get the indices corresponding to a specific label
    +   indices = IS.getInstanceIndicesForLabel(label)
    +Get the instances including the labels as the last row
    +   dataset = getDataset(IS)
    +Get the instances with specific indices. The last column of the matrix 
    +will contain the label.
    +   dataset = IS.getDatasetWithIndices(idx)
    +Remove instances with specific indices. A new InstanceSet object is 
    +returned by this function without the specified instances
    +   IS = IS.removeInstancesWithIndices(idx)
    + Write the dataset to a csv file
    +   IS.writeCSV(csvname)
    +Write the dataset to a weka-readable file (arff). The whole dataset is
    +written if the indices are not given (function called with 1 argument)
    +   IS.writeArff(fname, indices)
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    • InstanceSet A class for describing a set of instances and labels
    +This function is called by: +
      +
    • InstanceSet A class for describing a set of instances and labels
    + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    InstanceSet.m

    +

    SOURCE CODE ^

    +
    0001 % A class for describing a set of instances and labels
    +0002 %
    +0003 % Properties:
    +0004 % -instances : a m x n matrix where m = # instances and n =
    +0005 % # features
    +0006 % -labels: a m x 1 matrix containing the labels for each
    +0007 % instance
    +0008 % -K: a m x m matrix containing the kernel of the instances
    +0009 % required only for the Fast vesrion of LibSVM
    +0010 %
    +0011 % Functions:
    +0012 %Construct an instanceSet
    +0013 %   IS = eegtoolkit.util.InstanceSet(instances, labels)
    +0014 %Compute the kernel
    +0015 %   K = IS.computeKernel(kernel, gamma, maxlag, scaleopt)
    +0016 % kernel can be one of 'linear' (default),'rbf','chi','xcorr','spearman',
    +0017 % 'correlation','cosine','euclidean','seuclidean','mahalanobis'
    +0018 %Get the training kernel with indexes in the trainidx vector
    +0019 %   Ktrain = IS.getTrainKernel(trainidx)
    +0020 %Get the test kernel with test indexes testidx and train indexes trainidx
    +0021 %   Ktest = IS.getTestKernel(trainidx, testidx)
    +0022 %Get instances of specific indices in vector idx
    +0023 %   instance = IS.getInstancesWithIndices(idx)
    +0024 %Get the instances of a specific label
    +0025 %   instances = IS.getInstancesForLabel(label)
    +0026 %Get the indices corresponding to a specific label
    +0027 %   indices = IS.getInstanceIndicesForLabel(label)
    +0028 %Get the instances including the labels as the last row
    +0029 %   dataset = getDataset(IS)
    +0030 %Get the instances with specific indices. The last column of the matrix
    +0031 %will contain the label.
    +0032 %   dataset = IS.getDatasetWithIndices(idx)
    +0033 %Remove instances with specific indices. A new InstanceSet object is
    +0034 %returned by this function without the specified instances
    +0035 %   IS = IS.removeInstancesWithIndices(idx)
    +0036 % Write the dataset to a csv file
    +0037 %   IS.writeCSV(csvname)
    +0038 %Write the dataset to a weka-readable file (arff). The whole dataset is
    +0039 %written if the indices are not given (function called with 1 argument)
    +0040 %   IS.writeArff(fname, indices)
    +0041 
    +0042 classdef InstanceSet
    +0043     properties (Access = public)
    +0044         instances; % the instances
    +0045         labels; % the labels
    +0046         K; % the kernel of the instances
    +0047     end
    +0048     
    +0049     methods
    +0050         function IS = InstanceSet(instances, labels)
    +0051             % obj = InstanceSet(instances, labels)
    +0052             
    +0053             if nargin == 1
    +0054                 [~, cols] = size(instances);
    +0055                 IS.instances = instances(:,1:cols-1);
    +0056                 IS.labels = instances(:,cols);
    +0057             elseif nargin==2
    +0058                 IS.instances = instances;
    +0059                 IS.labels = floor(labels);
    +0060             end
    +0061             %             for i=1:size(IS.instances,1)
    +0062             %                 IS.instances(i,:) = IS.instances(i,:)./norm(IS.instances(i,:));
    +0063             %             end
    +0064         end
    +0065         
    +0066         function instances = getInstances(IS)
    +0067             % get the instances
    +0068             instances = IS.instances;
    +0069         end
    +0070         
    +0071         function K = computeKernel(IS,kernel, gamma, maxlag, scaleopt)
    +0072             switch kernel
    +0073                 case 'linear'
    +0074                     K = IS.instances*IS.instances';
    +0075                 case 'rbf'
    +0076                     dist = pdist2(IS.instances,IS.instances).^2;
    +0077                     %                     N = size(IS.instances,1);
    +0078                     %                     dist = repmat(sum(IS.instances.^2, 2)', [N 1])' + ...
    +0079                     %                         repmat(sum(IS.instances.^2,2)', [N 1]) - ...
    +0080                     %                         2.*IS.instances*IS.instances';
    +0081                     K = exp(-gamma.*dist);
    +0082                 case 'chi'
    +0083                     m = size(IS.instances,1);
    +0084                     n = size(IS.instances,1);
    +0085                     mOnes = ones(1,m); D = zeros(m,n);
    +0086                     for i=1:n
    +0087                         yi = IS.instances(i,:);  yiRep = yi( mOnes, : );
    +0088                         s = yiRep + IS.instances;    d = yiRep - IS.instances;
    +0089                         D(:,i) = sum( d.^2 ./ (s+eps), 2 );
    +0090                     end
    +0091                     D = D/2;
    +0092                     K = exp(-gamma.*D);
    +0093                     %                     error('chi kernel not implemented yet');
    +0094                 case 'xcorr'
    +0095                     K = zeros(size(IS.instances,1));
    +0096                     if size(IS.instances,2) < 500 % if memory allows it go for the vectorized version
    +0097                         a = xcorr(IS.instances',maxlag,scaleopt);
    +0098                         c = reshape(a, 2*maxlag+1, size(IS.instances,1), size(IS.instances,1));
    +0099                         if size(c,1) == 1 % no max is required
    +0100                             K = squeeze(c);
    +0101                         else
    +0102                             K = squeeze(max(c));
    +0103                         end
    +0104                     else
    +0105                         for i=1:size(IS.instances,1)
    +0106                             for j=i:size(IS.instances,1)
    +0107                                 K(i,j)=max(xcorr(IS.instances(i,:),IS.instances(j,:),maxlag,scaleopt));
    +0108                                 K(j,i)=K(i,j);
    +0109                             end
    +0110                         end
    +0111                     end
    +0112                 case {'spearman','correlation','cosine'}
    +0113                     dist = pdist2(IS.instances,IS.instances,kernel);
    +0114                     K = 1-dist;
    +0115                 case {'euclidean','seuclidean','mahalanobis'}
    +0116                     dist = pdist2(IS.instances,IS.instances,kernel).^2;
    +0117                     K = exp(-gamma.*dist);
    +0118                 otherwise % if not one of the above, it can either be any value of distance in pdist2 or a function handle
    +0119                     dist = pdist2(IS.instances,IS.instances,kernel);
    +0120                     K = exp(-gamma.*dist);
    +0121             end
    +0122         end
    +0123         
    +0124         function Ktrain = getTrainKernel(IS, trainidx)
    +0125             Ktrain = IS.K(trainidx,trainidx);
    +0126         end
    +0127         
    +0128         function Ktest = getTestKernel(IS, trainidx, testidx)
    +0129             Ktest = IS.K(testidx,trainidx);
    +0130         end
    +0131         
    +0132         function instance = getInstancesWithIndices(IS, idx)
    +0133             % get instances of specific indices
    +0134             instance = IS.instances(idx,:);
    +0135         end
    +0136         function labels = getLabels(IS)
    +0137             % get the labels
    +0138             labels = IS.labels;
    +0139         end
    +0140         
    +0141         function numLabels = getNumLabels(IS)
    +0142             % get the number of labels
    +0143             numLabels = length(unique(IS.getLabels()));
    +0144         end
    +0145         
    +0146         function numInstances = getNumInstances(IS)
    +0147             % get the number of instances
    +0148             [numInstances,~] = size(IS.instances);
    +0149         end
    +0150         
    +0151         function numFeatures = getNumFeatures(IS)
    +0152             % get the number of features
    +0153             [~, numFeatures] = size(IS.instances);
    +0154         end
    +0155         
    +0156         
    +0157         function instances = getInstancesForLabel(IS, label)
    +0158             % get the instances of a specific label
    +0159             indices = IS.getInstanceIndicesForLabel(label);
    +0160             instances = IS.getInstances();
    +0161             instances = instances(indices,:);
    +0162         end
    +0163         
    +0164         function indices = getInstanceIndicesForLabel(IS,label)
    +0165             % get the indices corresponding to a specific label
    +0166             [indices, ~] = find(IS.getDataset()==label);
    +0167         end
    +0168         
    +0169         function dataset = getDataset(IS)
    +0170             % same with getInstances but includes the labels as the last
    +0171             % row
    +0172             dataset = horzcat(IS.instances,IS.labels);
    +0173         end
    +0174         
    +0175         function dataset = getDatasetWithIndices(IS,idx)
    +0176             % get the instances with specific indices. The last column of
    +0177             % the matrix will contain the label.
    +0178             instance = IS.instances(idx,:);
    +0179             label = IS.labels(idx,:);
    +0180             dataset = horzcat(instance,label);
    +0181         end
    +0182         function IS = removeInstancesWithIndices(IS, idx)
    +0183             % remove instances with specific indices. A new InstanceSet
    +0184             % object is returned by this functioned without the specified
    +0185             % instances
    +0186             IS.instances(idx,:) = [];
    +0187             IS.labels(idx,:) = [];
    +0188         end
    +0189         function writeCSV(IS, csvname)
    +0190             % write the dataset to a csv file
    +0191             % Example:
    +0192             %   obj.writeCSV('data.csv');
    +0193             csvwrite(csvname, IS.getDataset());
    +0194         end
    +0195         function writeArff(IS, fname, indices)
    +0196             % write the dataset to a weka-readable file (arff)
    +0197             % Caution: filename without extension
    +0198             % Example:
    +0199             %   obj.writeArff('data')
    +0200             if nargin==3
    +0201                 data1 = IS.getDatasetWithIndices(indices);
    +0202                 is1 = eegtoolkit.util.InstanceSet(data1);
    +0203                 data2 = IS.getDatasetWithIndices(~indices);
    +0204                 is2 = eegtoolkit.util.InstanceSet(data2);
    +0205                 is1.writeArff(sprintf('test%s', fname));
    +0206                 is2.writeArff(sprintf('train%s',fname));
    +0207                 return;
    +0208             else
    +0209                 data = IS.getDataset();
    +0210             end
    +0211             %             data = horzcat(IS.instances,floor(IS.labels));
    +0212             sss=size(data,2)-1;
    +0213             filename1=strcat(fname,'.arff');
    +0214             out1 = fopen (filename1, 'w+');
    +0215             aa1=strcat('@relation',{' '},fname,'-weka.filters.unsupervised.attribute.NumericToNominal-Rlast');
    +0216             fprintf (out1, '%s\n', char(aa1));
    +0217             for jj=1:sss
    +0218                 fprintf (out1, '@attribute %s numeric\n',num2str(jj));
    +0219             end
    +0220             n_classes=max(unique(data(:,end)));
    +0221             txt1=strcat('@attribute',{' '},num2str(sss+1),{' {'});
    +0222             
    +0223             for ii=1:n_classes
    +0224                 txt1=strcat(txt1,num2str(ii),{','});
    +0225             end
    +0226             txt1=strcat(txt1,{'}'});
    +0227             
    +0228             fprintf (out1, '%s\n\n',char(txt1));
    +0229             fprintf (out1,'@data\n');
    +0230             
    +0231             fclose(out1);
    +0232             
    +0233             dlmwrite (filename1, data, '-append' );
    +0234         end
    +0235     end
    +0236     
    +0237 end
    +0238
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@InstanceSet/InstanceSet.m b/doc/+eegtoolkit/+util/@InstanceSet/InstanceSet.m new file mode 100644 index 0000000..fbe2fc4 --- /dev/null +++ b/doc/+eegtoolkit/+util/@InstanceSet/InstanceSet.m @@ -0,0 +1,238 @@ +% A class for describing a set of instances and labels +% +% Properties: +% -instances : a m x n matrix where m = # instances and n = +% # features +% -labels: a m x 1 matrix containing the labels for each +% instance +% -K: a m x m matrix containing the kernel of the instances +% required only for the Fast vesrion of LibSVM +% +% Functions: +%Construct an instanceSet +% IS = eegtoolkit.util.InstanceSet(instances, labels) +%Compute the kernel +% K = IS.computeKernel(kernel, gamma, maxlag, scaleopt) +% kernel can be one of 'linear' (default),'rbf','chi','xcorr','spearman', +% 'correlation','cosine','euclidean','seuclidean','mahalanobis' +%Get the training kernel with indexes in the trainidx vector +% Ktrain = IS.getTrainKernel(trainidx) +%Get the test kernel with test indexes testidx and train indexes trainidx +% Ktest = IS.getTestKernel(trainidx, testidx) +%Get instances of specific indices in vector idx +% instance = IS.getInstancesWithIndices(idx) +%Get the instances of a specific label +% instances = IS.getInstancesForLabel(label) +%Get the indices corresponding to a specific label +% indices = IS.getInstanceIndicesForLabel(label) +%Get the instances including the labels as the last row +% dataset = getDataset(IS) +%Get the instances with specific indices. The last column of the matrix +%will contain the label. +% dataset = IS.getDatasetWithIndices(idx) +%Remove instances with specific indices. A new InstanceSet object is +%returned by this function without the specified instances +% IS = IS.removeInstancesWithIndices(idx) +% Write the dataset to a csv file +% IS.writeCSV(csvname) +%Write the dataset to a weka-readable file (arff). The whole dataset is +%written if the indices are not given (function called with 1 argument) +% IS.writeArff(fname, indices) + +classdef InstanceSet + properties (Access = public) + instances; % the instances + labels; % the labels + K; % the kernel of the instances + end + + methods + function IS = InstanceSet(instances, labels) + % obj = InstanceSet(instances, labels) + + if nargin == 1 + [~, cols] = size(instances); + IS.instances = instances(:,1:cols-1); + IS.labels = instances(:,cols); + elseif nargin==2 + IS.instances = instances; + IS.labels = floor(labels); + end + % for i=1:size(IS.instances,1) + % IS.instances(i,:) = IS.instances(i,:)./norm(IS.instances(i,:)); + % end + end + + function instances = getInstances(IS) + % get the instances + instances = IS.instances; + end + + function K = computeKernel(IS,kernel, gamma, maxlag, scaleopt) + switch kernel + case 'linear' + K = IS.instances*IS.instances'; + case 'rbf' + dist = pdist2(IS.instances,IS.instances).^2; + % N = size(IS.instances,1); + % dist = repmat(sum(IS.instances.^2, 2)', [N 1])' + ... + % repmat(sum(IS.instances.^2,2)', [N 1]) - ... + % 2.*IS.instances*IS.instances'; + K = exp(-gamma.*dist); + case 'chi' + m = size(IS.instances,1); + n = size(IS.instances,1); + mOnes = ones(1,m); D = zeros(m,n); + for i=1:n + yi = IS.instances(i,:); yiRep = yi( mOnes, : ); + s = yiRep + IS.instances; d = yiRep - IS.instances; + D(:,i) = sum( d.^2 ./ (s+eps), 2 ); + end + D = D/2; + K = exp(-gamma.*D); + % error('chi kernel not implemented yet'); + case 'xcorr' + K = zeros(size(IS.instances,1)); + if size(IS.instances,2) < 500 % if memory allows it go for the vectorized version + a = xcorr(IS.instances',maxlag,scaleopt); + c = reshape(a, 2*maxlag+1, size(IS.instances,1), size(IS.instances,1)); + if size(c,1) == 1 % no max is required + K = squeeze(c); + else + K = squeeze(max(c)); + end + else + for i=1:size(IS.instances,1) + for j=i:size(IS.instances,1) + K(i,j)=max(xcorr(IS.instances(i,:),IS.instances(j,:),maxlag,scaleopt)); + K(j,i)=K(i,j); + end + end + end + case {'spearman','correlation','cosine'} + dist = pdist2(IS.instances,IS.instances,kernel); + K = 1-dist; + case {'euclidean','seuclidean','mahalanobis'} + dist = pdist2(IS.instances,IS.instances,kernel).^2; + K = exp(-gamma.*dist); + otherwise % if not one of the above, it can either be any value of distance in pdist2 or a function handle + dist = pdist2(IS.instances,IS.instances,kernel); + K = exp(-gamma.*dist); + end + end + + function Ktrain = getTrainKernel(IS, trainidx) + Ktrain = IS.K(trainidx,trainidx); + end + + function Ktest = getTestKernel(IS, trainidx, testidx) + Ktest = IS.K(testidx,trainidx); + end + + function instance = getInstancesWithIndices(IS, idx) + % get instances of specific indices + instance = IS.instances(idx,:); + end + function labels = getLabels(IS) + % get the labels + labels = IS.labels; + end + + function numLabels = getNumLabels(IS) + % get the number of labels + numLabels = length(unique(IS.getLabels())); + end + + function numInstances = getNumInstances(IS) + % get the number of instances + [numInstances,~] = size(IS.instances); + end + + function numFeatures = getNumFeatures(IS) + % get the number of features + [~, numFeatures] = size(IS.instances); + end + + + function instances = getInstancesForLabel(IS, label) + % get the instances of a specific label + indices = IS.getInstanceIndicesForLabel(label); + instances = IS.getInstances(); + instances = instances(indices,:); + end + + function indices = getInstanceIndicesForLabel(IS,label) + % get the indices corresponding to a specific label + [indices, ~] = find(IS.getDataset()==label); + end + + function dataset = getDataset(IS) + % same with getInstances but includes the labels as the last + % row + dataset = horzcat(IS.instances,IS.labels); + end + + function dataset = getDatasetWithIndices(IS,idx) + % get the instances with specific indices. The last column of + % the matrix will contain the label. + instance = IS.instances(idx,:); + label = IS.labels(idx,:); + dataset = horzcat(instance,label); + end + function IS = removeInstancesWithIndices(IS, idx) + % remove instances with specific indices. A new InstanceSet + % object is returned by this functioned without the specified + % instances + IS.instances(idx,:) = []; + IS.labels(idx,:) = []; + end + function writeCSV(IS, csvname) + % write the dataset to a csv file + % Example: + % obj.writeCSV('data.csv'); + csvwrite(csvname, IS.getDataset()); + end + function writeArff(IS, fname, indices) + % write the dataset to a weka-readable file (arff) + % Caution: filename without extension + % Example: + % obj.writeArff('data') + if nargin==3 + data1 = IS.getDatasetWithIndices(indices); + is1 = eegtoolkit.util.InstanceSet(data1); + data2 = IS.getDatasetWithIndices(~indices); + is2 = eegtoolkit.util.InstanceSet(data2); + is1.writeArff(sprintf('test%s', fname)); + is2.writeArff(sprintf('train%s',fname)); + return; + else + data = IS.getDataset(); + end + % data = horzcat(IS.instances,floor(IS.labels)); + sss=size(data,2)-1; + filename1=strcat(fname,'.arff'); + out1 = fopen (filename1, 'w+'); + aa1=strcat('@relation',{' '},fname,'-weka.filters.unsupervised.attribute.NumericToNominal-Rlast'); + fprintf (out1, '%s\n', char(aa1)); + for jj=1:sss + fprintf (out1, '@attribute %s numeric\n',num2str(jj)); + end + n_classes=max(unique(data(:,end))); + txt1=strcat('@attribute',{' '},num2str(sss+1),{' {'}); + + for ii=1:n_classes + txt1=strcat(txt1,num2str(ii),{','}); + end + txt1=strcat(txt1,{'}'}); + + fprintf (out1, '%s\n\n',char(txt1)); + fprintf (out1,'@data\n'); + + fclose(out1); + + dlmwrite (filename1, data, '-append' ); + end + end + +end + diff --git a/doc/+eegtoolkit/+util/@InstanceSet/graph.dot b/doc/+eegtoolkit/+util/@InstanceSet/graph.dot new file mode 100644 index 0000000..4199c12 --- /dev/null +++ b/doc/+eegtoolkit/+util/@InstanceSet/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + InstanceSet -> InstanceSet; + + InstanceSet [URL="InstanceSet.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@InstanceSet/graph.html b/doc/+eegtoolkit/+util/@InstanceSet/graph.html new file mode 100644 index 0000000..61ce11e --- /dev/null +++ b/doc/+eegtoolkit/+util/@InstanceSet/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+util/@InstanceSet + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@InstanceSet >
    +

    Dependency Graph for ./+eegtoolkit/+util/@InstanceSet

    + +
    +Dependency Graph for ./+eegtoolkit/+util/@InstanceSet + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@InstanceSet/graph.map b/doc/+eegtoolkit/+util/@InstanceSet/graph.map new file mode 100644 index 0000000..9544beb --- /dev/null +++ b/doc/+eegtoolkit/+util/@InstanceSet/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+util/@InstanceSet/graph.png b/doc/+eegtoolkit/+util/@InstanceSet/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d6e38953721f7ff012c4d5f3ca174a973fba4bc9 GIT binary patch literal 4769 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 + + + Index for Directory ./+eegtoolkit/+util/@InstanceSet + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@InstanceSet >
    + +

    Index for ./+eegtoolkit/+util/@InstanceSet

    + +

    Matlab files in this directory:

    + +
     InstanceSetA class for describing a set of instances and labels
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/L1MCCAInstanceSet.html b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/L1MCCAInstanceSet.html new file mode 100644 index 0000000..aca3de6 --- /dev/null +++ b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/L1MCCAInstanceSet.html @@ -0,0 +1,125 @@ + + + + Description of L1MCCAInstanceSet + + + + + + + + + +
    Home > +eegtoolkit > +util > @L1MCCAInstanceSet > L1MCCAInstanceSet.m
    + + + +

    L1MCCAInstanceSet +

    + +

    PURPOSE ^

    +
    RESULTSET class
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
     RESULTSET class
    + Stores the results of an experiment
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    L1MCCAInstanceSet.m

    +

    SOURCE CODE ^

    +
    0001 % RESULTSET class
    +0002 % Stores the results of an experiment
    +0003 classdef L1MCCAInstanceSet < eegtoolkit.util.InstanceSet
    +0004     
    +0005     properties
    +0006         matrix4D;
    +0007         labelss;
    +0008     end
    +0009     
    +0010     methods
    +0011         function L1 = L1MCCAInstanceSet(trials)
    +0012             %Constructor method
    +0013             %Input:
    +0014             %(InstanceSet object): the original instanceSet
    +0015             %Labels: a vector containing the output labels of the
    +0016             %experiment
    +0017             %Proababilities: a vector containing the probabilities of each
    +0018             %label
    +0019             %Ranking (optional): a matrix containing a score for each label
    +0020             L1 = L1@eegtoolkit.util.InstanceSet(zeros(1,1000),ones(1,1000));
    +0021             if(nargin>0)
    +0022                 numTrials = length(trials);
    +0023                 lbls = zeros(numTrials,1);
    +0024                 for i=1:numTrials
    +0025                     lbls(i) = trials{i}.label;
    +0026                 end
    +0027 
    +0028                 L1.labelss = lbls;
    +0029                 [numChannels, numSamples] = size(trials{1}.signal);
    +0030                 
    +0031                 L1.matrix4D = zeros(numChannels,numSamples,numTrials,1);
    +0032                 
    +0033                 for i=1:numTrials
    +0034                     L1.matrix4D(:,:,i) = trials{i}.signal;
    +0035                 end
    +0036             end
    +0037 
    +0038         end
    +0039         
    +0040         function newL1 = removeInstancesWithIndices(L1,indices)
    +0041             newL1 = eegtoolkit.util.L1MCCAInstanceSet;
    +0042             newL1.labelss = L1.labelss;
    +0043             newL1.labelss(indices) = [];
    +0044             newL1.matrix4D = L1.matrix4D;
    +0045             newL1.matrix4D(:,:,indices) = [];
    +0046         end
    +0047         
    +0048         function instances = getInstancesWithIndices(L1,indices)
    +0049             instances = L1.matrix4D(:,:,indices);
    +0050         end
    +0051         
    +0052         function dataset = getDatasetWithIndices(L1,indices)
    +0053             instances = zeros(length(indices),1000);
    +0054             labels = L1.labelss(indices);
    +0055             dataset = horzcat(instances,labels);
    +0056         end
    +0057         
    +0058         function numInstances = getNumInstances(L1)
    +0059             [~,~,numInstances] = size(L1.matrix4D);
    +0060         end
    +0061         
    +0062         function dataset = getDataset(L1)
    +0063             instances = zeros(L1.getNumInstances,1000);
    +0064             labels = L1.labelss;
    +0065             dataset = horzcat(instances,labels);
    +0066         end
    +0067             
    +0068         function numLabels = getNumLabels(L1)
    +0069             numLabels = length(unique(L1.labelss));
    +0070         end
    +0071     end
    +0072     
    +0073 end
    +0074
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/L1MCCAInstanceSet.m b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/L1MCCAInstanceSet.m new file mode 100644 index 0000000..bda3877 --- /dev/null +++ b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/L1MCCAInstanceSet.m @@ -0,0 +1,74 @@ +% RESULTSET class +% Stores the results of an experiment +classdef L1MCCAInstanceSet < eegtoolkit.util.InstanceSet + + properties + matrix4D; + labelss; + end + + methods + function L1 = L1MCCAInstanceSet(trials) + %Constructor method + %Input: + %(InstanceSet object): the original instanceSet + %Labels: a vector containing the output labels of the + %experiment + %Proababilities: a vector containing the probabilities of each + %label + %Ranking (optional): a matrix containing a score for each label + L1 = L1@eegtoolkit.util.InstanceSet(zeros(1,1000),ones(1,1000)); + if(nargin>0) + numTrials = length(trials); + lbls = zeros(numTrials,1); + for i=1:numTrials + lbls(i) = trials{i}.label; + end + + L1.labelss = lbls; + [numChannels, numSamples] = size(trials{1}.signal); + + L1.matrix4D = zeros(numChannels,numSamples,numTrials,1); + + for i=1:numTrials + L1.matrix4D(:,:,i) = trials{i}.signal; + end + end + + end + + function newL1 = removeInstancesWithIndices(L1,indices) + newL1 = eegtoolkit.util.L1MCCAInstanceSet; + newL1.labelss = L1.labelss; + newL1.labelss(indices) = []; + newL1.matrix4D = L1.matrix4D; + newL1.matrix4D(:,:,indices) = []; + end + + function instances = getInstancesWithIndices(L1,indices) + instances = L1.matrix4D(:,:,indices); + end + + function dataset = getDatasetWithIndices(L1,indices) + instances = zeros(length(indices),1000); + labels = L1.labelss(indices); + dataset = horzcat(instances,labels); + end + + function numInstances = getNumInstances(L1) + [~,~,numInstances] = size(L1.matrix4D); + end + + function dataset = getDataset(L1) + instances = zeros(L1.getNumInstances,1000); + labels = L1.labelss; + dataset = horzcat(instances,labels); + end + + function numLabels = getNumLabels(L1) + numLabels = length(unique(L1.labelss)); + end + end + +end + diff --git a/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.dot b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.dot new file mode 100644 index 0000000..0498a3e --- /dev/null +++ b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + L1MCCAInstanceSet -> L1MCCAInstanceSet; + + L1MCCAInstanceSet [URL="L1MCCAInstanceSet.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.html b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.html new file mode 100644 index 0000000..fd2a3f3 --- /dev/null +++ b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+util/@L1MCCAInstanceSet + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@L1MCCAInstanceSet >
    +

    Dependency Graph for ./+eegtoolkit/+util/@L1MCCAInstanceSet

    + +
    +Dependency Graph for ./+eegtoolkit/+util/@L1MCCAInstanceSet + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.map b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.map new file mode 100644 index 0000000..69774f9 --- /dev/null +++ b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.png b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..84c4f28e262bb58f6b8fabbf564013b51c9d1c7a GIT binary patch literal 6710 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 + + + Index for Directory ./+eegtoolkit/+util/@L1MCCAInstanceSet + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@L1MCCAInstanceSet >
    + +

    Index for ./+eegtoolkit/+util/@L1MCCAInstanceSet

    + +

    Matlab files in this directory:

    + +
     L1MCCAInstanceSetRESULTSET class
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@LSLWrapper/LSLWrapper.html b/doc/+eegtoolkit/+util/@LSLWrapper/LSLWrapper.html new file mode 100644 index 0000000..dc45675 --- /dev/null +++ b/doc/+eegtoolkit/+util/@LSLWrapper/LSLWrapper.html @@ -0,0 +1,310 @@ + + + + Description of LSLWrapper + + + + + + + + + +
    Home > +eegtoolkit > +util > @LSLWrapper > LSLWrapper.m
    + + + +

    LSLWrapper +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    LSLWrapper.m

    +

    SOURCE CODE ^

    +
    0001 classdef LSLWrapper < handle
    +0002     %LSLWRAPPER Summary of this class goes here
    +0003     %   Detailed explanation goes here
    +0004     
    +0005     properties
    +0006         lib;
    +0007         datastreaminfo;
    +0008         datainlet;
    +0009         dataoutlet;
    +0010         eventstreaminfo;
    +0011         eventinlet;
    +0012         eventoutlet;
    +0013         preprocessing;
    +0014         featextraction;
    +0015         results;
    +0016         trials;
    +0017         classification; %pre-trained object required
    +0018     end
    +0019     
    +0020     properties (Access = private)
    +0021         streamsOK;
    +0022         samplingRate;
    +0023     end
    +0024     
    +0025     methods
    +0026         function LSL = LSLWrapper()
    +0027             LSL.lib = lsl_loadlib;
    +0028             LSL.streamsOK = 0;
    +0029         end
    +0030         
    +0031         function LSL = resolveStreams(LSL,datastream,maxbuffer,eventstream)
    +0032             LSL.datastreaminfo = lsl_resolve_byprop(LSL.lib, 'name', datastream);
    +0033             LSL.eventstreaminfo = lsl_resolve_byprop(LSL.lib, 'name', eventstream);
    +0034             %get samplingRate from stream info
    +0035             %samplingRate = ?
    +0036             if(length(LSL.datastreaminfo) > 0)
    +0037                 LSL.datainlet = lsl_inlet(LSL.datastreaminfo{1},maxbuffer);
    +0038                 LSL.datainlet.pull_chunk;
    +0039             else
    +0040                 error('Cannot resolve data stream');
    +0041             end
    +0042             if(length(LSL.eventstreaminfo) > 0)
    +0043                 LSL.eventinlet = lsl_inlet(LSL.eventstreaminfo{1},1);
    +0044             else
    +0045                 error('Cannot resolve event stream');
    +0046             end
    +0047             eventoutletInfo = lsl_streaminfo(LSL.lib,'CommandStream','Markers',1,0,'cf_int32','myuniquesourceid23442');
    +0048             LSL.eventoutlet = lsl_outlet(eventoutletInfo);
    +0049             LSL.samplingRate = LSL.datastreaminfo{1}.nominal_srate;
    +0050             LSL.streamsOK = 1;
    +0051         end
    +0052         function LSL = runExperiment(LSL)
    +0053             if(LSL.streamsOK ~=1)
    +0054                 error('error: Did you call \"resolveStreams\"?');
    +0055             end
    +0056             strings = {'abstract','concept','objectives','structure','consortium'};
    +0057             labels = {4,2,3,5,1,2,5,4,2,3,1,5,4,3,2,4,1,2,5,3,4,1,3,1,3};
    +0058             [12 6.66 7.5 8.57 10];
    +0059             8.57,6.66,7.5,10,12
    +0060             %structure,concept,objectives,consortiu,abstract
    +0061             LSL.trials = {};
    +0062             [y,Fs] = audioread('beep-07.wav');
    +0063             tts('get ready');
    +0064             pause(10);
    +0065             for i=1:length(labels)
    +0066                 tts(strings{labels{i}});
    +0067                 pause(1);
    +0068                 sound(y,Fs);
    +0069                 pause(5);
    +0070                 
    +0071                 chunk = LSL.datainlet.pull_chunk;
    +0072                 trial = eegtoolkit.util.Trial(chunk,0,LSL.samplingRate,0,0);
    +0073                 LSL.trials{length(LSL.trials)+1} = trial;
    +0074                 tts('ok');
    +0075                 pause(4);
    +0076             end
    +0077         end
    +0078         %EBNeuro_BePLusLTM_192.168.171.81
    +0079         function LSL = visualizeDataStream(LSL,windowlength,datastreamname,channel)
    +0080             %             import java.util.Qu
    +0081             LSL.datastreaminfo = lsl_resolve_byprop(LSL.lib, 'name', datastreamname);
    +0082             LSL.datainlet = lsl_inlet(LSL.datastreaminfo{1},windowlength/LSL.datastreaminfo{1}.nominal_srate);
    +0083             %             LSL.eventstreaminfo = lsl_resolve_byprop(LSL.lib,'name',eventstreamname);
    +0084             
    +0085             %             buffer = eegtoolkit.util.CQueue(windowlength);
    +0086             % %             buffer.capacity = windowlength;
    +0087             buffer = zeros(1,windowlength);
    +0088             timestampBuffer = zeros(1,windowlength);
    +0089             eventBuffer = zeros(1,windowlength);
    +0090             indices = 1:windowlength;
    +0091             t = 0 ;
    +0092             x = 0 ;
    +0093             startSpot = 0;
    +0094             %             interv = windowlength; % considering 1000 samples
    +0095             step = 0.1 ; % lowering step has a number of cycles and then acquire more data
    +0096             k =1;
    +0097             firstTimestamp = [];
    +0098             while ( 1 )
    +0099                 %                 sample = LSL.datainlet.pull_sample;
    +0100                 [samples,timestamps] = LSL.datainlet.pull_chunk;
    +0101                 if isempty(firstTimestamp)
    +0102                     firstTimestamp = timestamps;
    +0103                 end
    +0104                 [~,numPulled] = size(samples);
    +0105                 if(numPulled==0)
    +0106                     continue;
    +0107                 end
    +0108                 %                 buffer.push(sample(1));
    +0109                 %                 buffermat = cell2mat(buffer.content);
    +0110                 buffer = circshift(buffer,[1,-numPulled]);
    +0111                 timestampBuffer = circshift(timestampBuffer,[1,-numPulled]);
    +0112                 buffer(windowlength-numPulled+1:end) = samples(channel,:);
    +0113                 timestampBuffer(windowlength-numPulled+1:end) = timestamps-firstTimestamp;
    +0114                 %                 buffer(windowlength) = sample(1);
    +0115                 minBuff = min(buffer(buffer~=0));
    +0116                 maxBuff = max(buffer(buffer~=0));
    +0117                 plot(timestampBuffer,buffer);
    +0118                 axis([ timestampBuffer(1), timestampBuffer(end)+1, minBuff , maxBuff+1 ]);
    +0119                 xlabel('Seconds');
    +0120                 %                 axis([ timestampBuffer(1), timestampBuffer(end), minBuff , maxBuff ]);
    +0121                 grid
    +0122                 
    +0123                 t = t + step;
    +0124                 drawnow;
    +0125                 k = k+1;
    +0126                 %                 indices = indices + 1;
    +0127                 %                 pause(0.01)
    +0128             end
    +0129         end
    +0130         
    +0131         function streams = findStreams(LSL,timeout)
    +0132             streams = {};
    +0133             if(nargin>1)
    +0134                 allInfo = lsl_resolve_all(LSL.lib,timeout);
    +0135             else
    +0136                 allInfo = lsl_resolve_all(LSL.lib);
    +0137             end
    +0138             for i=1:length(allInfo)
    +0139                 streams{i} = allInfo{i}.name;
    +0140             end
    +0141         end
    +0142         function LSL = runSSVEP(LSL,eventStopCode)
    +0143             if (LSL.streamsOK ~=1)
    +0144                 error('error: Did you call \"resolveStreams\" ?');
    +0145             end
    +0146             while 1
    +0147                 sample = LSL.eventinlet.pull_sample;
    +0148                 disp(['sample = ', num2str(sample)]);
    +0149                 if(sample==eventStopCode)
    +0150                     %                     disp('Collecting signal...');
    +0151                     pause(5);
    +0152                     %                     disp('Processing...');
    +0153                     chunk = LSL.datainlet.pull_chunk;
    +0154                     trial = {eegtoolkit.util.Trial(chunk,0,LSL.samplingRate,0,0)};
    +0155                     for i=1:length(LSL.preprocessing)
    +0156                         trial = LSL.preprocessing{i}.process(trial);
    +0157                     end
    +0158                     LSL.featextraction.trials = trial;
    +0159                     LSL.featextraction.extract;
    +0160                     [output, prob, rank] = LSL.classification.classifyInstance(LSL.featextraction.getInstances);
    +0161                     result = 0;
    +0162                     %                     plot(chunk')
    +0163                     rank
    +0164                     LSL.results = [LSL.results,output];
    +0165                     disp(['classif output = ', num2str(output)]);
    +0166                     %                     LSL.eventoutlet.push_sample(output);
    +0167                     LSL.eventoutlet.push_sample(output-1);
    +0168                     %                     disp(['prob = ', num2str(prob)]);
    +0169                 end
    +0170             end
    +0171         end
    +0172         
    +0173     end
    +0174     
    +0175     methods(Access = private)
    +0176         function wav = tts(txt,voice,pace,fs)
    +0177             %TTS text to speech.
    +0178             %   TTS (TXT) synthesizes speech from string TXT, and speaks it. The audio
    +0179             %   format is mono, 16 bit, 16k Hz by default.
    +0180             %
    +0181             %   WAV = TTS(TXT) does not vocalize but output to the variable WAV.
    +0182             %
    +0183             %   TTS(TXT,VOICE) uses the specific voice. Use TTS('','List') to see a
    +0184             %   list of availble voices. Default is the first voice.
    +0185             %
    +0186             %   TTS(...,PACE) set the pace of speech to PACE. PACE ranges from
    +0187             %   -10 (slowest) to 10 (fastest). Default 0.
    +0188             %
    +0189             %   TTS(...,FS) set the sampling rate of the speech to FS kHz. FS must be
    +0190             %   one of the following: 8000, 11025, 12000, 16000, 22050, 24000, 32000,
    +0191             %       44100, 48000. Default 16.
    +0192             %
    +0193             %   This function requires the Microsoft Win32 Speech API (SAPI).
    +0194             %
    +0195             %   Examples:
    +0196             %       % Speak the text;
    +0197             %       tts('I can speak.');
    +0198             %       % List availble voices;
    +0199             %       tts('I can speak.','List');
    +0200             %       % Do not speak out, store the speech in a variable;
    +0201             %       w = tts('I can speak.',[],-4,44100);
    +0202             %       wavplay(w,44100);
    +0203             %
    +0204             %   See also WAVREAD, WAVWRITE, WAVPLAY.
    +0205             
    +0206             % Written by Siyi Deng; 12-21-2007;
    +0207             
    +0208             if ~ispc, error('Microsoft Win32 SAPI is required.'); end
    +0209             if ~ischar(txt), error('First input must be string.'); end
    +0210             
    +0211             SV = actxserver('SAPI.SpVoice');
    +0212             TK = invoke(SV,'GetVoices');
    +0213             
    +0214             if nargin > 1
    +0215                 % Select voice;
    +0216                 for k = 0:TK.Count-1
    +0217                     if strcmpi(voice,TK.Item(k).GetDescription)
    +0218                         SV.Voice = TK.Item(k);
    +0219                         break;
    +0220                     elseif strcmpi(voice,'list')
    +0221                         disp(TK.Item(k).GetDescription);
    +0222                     end
    +0223                 end
    +0224                 % Set pace;
    +0225                 if nargin > 2
    +0226                     if isempty(pace), pace = 0; end
    +0227                     if abs(pace) > 10, pace = sign(pace)*10; end
    +0228                     SV.Rate = pace;
    +0229                 end
    +0230             end
    +0231             
    +0232             if nargin < 4 || ~ismember(fs,[8000,11025,12000,16000,22050,24000,32000,...
    +0233                     44100,48000]), fs = 16000; end
    +0234             
    +0235             if nargout > 0
    +0236                 % Output variable;
    +0237                 MS = actxserver('SAPI.SpMemoryStream');
    +0238                 MS.Format.Type = sprintf('SAFT%dkHz16BitMono',fix(fs/1000));
    +0239                 SV.AudioOutputStream = MS;
    +0240             end
    +0241             
    +0242             invoke(SV,'Speak',txt);
    +0243             
    +0244             if nargout > 0
    +0245                 % Convert uint8 to double precision;
    +0246                 wav = reshape(double(invoke(MS,'GetData')),2,[])';
    +0247                 wav = (wav(:,2)*256+wav(:,1))/32768;
    +0248                 wav(wav >= 1) = wav(wav >= 1)-2;
    +0249                 delete(MS);
    +0250                 clear MS;
    +0251             end
    +0252             
    +0253             delete(SV);
    +0254             clear SV TK;
    +0255             pause(0.2);
    +0256             
    +0257         end % TTS;
    +0258     end
    +0259 end
    +0260
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@LSLWrapper/LSLWrapper.m b/doc/+eegtoolkit/+util/@LSLWrapper/LSLWrapper.m new file mode 100644 index 0000000..92166c1 --- /dev/null +++ b/doc/+eegtoolkit/+util/@LSLWrapper/LSLWrapper.m @@ -0,0 +1,260 @@ +classdef LSLWrapper < handle + %LSLWRAPPER Summary of this class goes here + % Detailed explanation goes here + + properties + lib; + datastreaminfo; + datainlet; + dataoutlet; + eventstreaminfo; + eventinlet; + eventoutlet; + preprocessing; + featextraction; + results; + trials; + classification; %pre-trained object required + end + + properties (Access = private) + streamsOK; + samplingRate; + end + + methods + function LSL = LSLWrapper() + LSL.lib = lsl_loadlib; + LSL.streamsOK = 0; + end + + function LSL = resolveStreams(LSL,datastream,maxbuffer,eventstream) + LSL.datastreaminfo = lsl_resolve_byprop(LSL.lib, 'name', datastream); + LSL.eventstreaminfo = lsl_resolve_byprop(LSL.lib, 'name', eventstream); + %get samplingRate from stream info + %samplingRate = ? + if(length(LSL.datastreaminfo) > 0) + LSL.datainlet = lsl_inlet(LSL.datastreaminfo{1},maxbuffer); + LSL.datainlet.pull_chunk; + else + error('Cannot resolve data stream'); + end + if(length(LSL.eventstreaminfo) > 0) + LSL.eventinlet = lsl_inlet(LSL.eventstreaminfo{1},1); + else + error('Cannot resolve event stream'); + end + eventoutletInfo = lsl_streaminfo(LSL.lib,'CommandStream','Markers',1,0,'cf_int32','myuniquesourceid23442'); + LSL.eventoutlet = lsl_outlet(eventoutletInfo); + LSL.samplingRate = LSL.datastreaminfo{1}.nominal_srate; + LSL.streamsOK = 1; + end + function LSL = runExperiment(LSL) + if(LSL.streamsOK ~=1) + error('error: Did you call \"resolveStreams\"?'); + end + strings = {'abstract','concept','objectives','structure','consortium'}; + labels = {4,2,3,5,1,2,5,4,2,3,1,5,4,3,2,4,1,2,5,3,4,1,3,1,3}; + [12 6.66 7.5 8.57 10]; + 8.57,6.66,7.5,10,12 + %structure,concept,objectives,consortiu,abstract + LSL.trials = {}; + [y,Fs] = audioread('beep-07.wav'); + tts('get ready'); + pause(10); + for i=1:length(labels) + tts(strings{labels{i}}); + pause(1); + sound(y,Fs); + pause(5); + + chunk = LSL.datainlet.pull_chunk; + trial = eegtoolkit.util.Trial(chunk,0,LSL.samplingRate,0,0); + LSL.trials{length(LSL.trials)+1} = trial; + tts('ok'); + pause(4); + end + end + %EBNeuro_BePLusLTM_192.168.171.81 + function LSL = visualizeDataStream(LSL,windowlength,datastreamname,channel) + % import java.util.Qu + LSL.datastreaminfo = lsl_resolve_byprop(LSL.lib, 'name', datastreamname); + LSL.datainlet = lsl_inlet(LSL.datastreaminfo{1},windowlength/LSL.datastreaminfo{1}.nominal_srate); + % LSL.eventstreaminfo = lsl_resolve_byprop(LSL.lib,'name',eventstreamname); + + % buffer = eegtoolkit.util.CQueue(windowlength); + % % buffer.capacity = windowlength; + buffer = zeros(1,windowlength); + timestampBuffer = zeros(1,windowlength); + eventBuffer = zeros(1,windowlength); + indices = 1:windowlength; + t = 0 ; + x = 0 ; + startSpot = 0; + % interv = windowlength; % considering 1000 samples + step = 0.1 ; % lowering step has a number of cycles and then acquire more data + k =1; + firstTimestamp = []; + while ( 1 ) + % sample = LSL.datainlet.pull_sample; + [samples,timestamps] = LSL.datainlet.pull_chunk; + if isempty(firstTimestamp) + firstTimestamp = timestamps; + end + [~,numPulled] = size(samples); + if(numPulled==0) + continue; + end + % buffer.push(sample(1)); + % buffermat = cell2mat(buffer.content); + buffer = circshift(buffer,[1,-numPulled]); + timestampBuffer = circshift(timestampBuffer,[1,-numPulled]); + buffer(windowlength-numPulled+1:end) = samples(channel,:); + timestampBuffer(windowlength-numPulled+1:end) = timestamps-firstTimestamp; + % buffer(windowlength) = sample(1); + minBuff = min(buffer(buffer~=0)); + maxBuff = max(buffer(buffer~=0)); + plot(timestampBuffer,buffer); + axis([ timestampBuffer(1), timestampBuffer(end)+1, minBuff , maxBuff+1 ]); + xlabel('Seconds'); + % axis([ timestampBuffer(1), timestampBuffer(end), minBuff , maxBuff ]); + grid + + t = t + step; + drawnow; + k = k+1; + % indices = indices + 1; + % pause(0.01) + end + end + + function streams = findStreams(LSL,timeout) + streams = {}; + if(nargin>1) + allInfo = lsl_resolve_all(LSL.lib,timeout); + else + allInfo = lsl_resolve_all(LSL.lib); + end + for i=1:length(allInfo) + streams{i} = allInfo{i}.name; + end + end + function LSL = runSSVEP(LSL,eventStopCode) + if (LSL.streamsOK ~=1) + error('error: Did you call \"resolveStreams\" ?'); + end + while 1 + sample = LSL.eventinlet.pull_sample; + disp(['sample = ', num2str(sample)]); + if(sample==eventStopCode) + % disp('Collecting signal...'); + pause(5); + % disp('Processing...'); + chunk = LSL.datainlet.pull_chunk; + trial = {eegtoolkit.util.Trial(chunk,0,LSL.samplingRate,0,0)}; + for i=1:length(LSL.preprocessing) + trial = LSL.preprocessing{i}.process(trial); + end + LSL.featextraction.trials = trial; + LSL.featextraction.extract; + [output, prob, rank] = LSL.classification.classifyInstance(LSL.featextraction.getInstances); + result = 0; + % plot(chunk') + rank + LSL.results = [LSL.results,output]; + disp(['classif output = ', num2str(output)]); + % LSL.eventoutlet.push_sample(output); + LSL.eventoutlet.push_sample(output-1); + % disp(['prob = ', num2str(prob)]); + end + end + end + + end + + methods(Access = private) + function wav = tts(txt,voice,pace,fs) + %TTS text to speech. + % TTS (TXT) synthesizes speech from string TXT, and speaks it. The audio + % format is mono, 16 bit, 16k Hz by default. + % + % WAV = TTS(TXT) does not vocalize but output to the variable WAV. + % + % TTS(TXT,VOICE) uses the specific voice. Use TTS('','List') to see a + % list of availble voices. Default is the first voice. + % + % TTS(...,PACE) set the pace of speech to PACE. PACE ranges from + % -10 (slowest) to 10 (fastest). Default 0. + % + % TTS(...,FS) set the sampling rate of the speech to FS kHz. FS must be + % one of the following: 8000, 11025, 12000, 16000, 22050, 24000, 32000, + % 44100, 48000. Default 16. + % + % This function requires the Microsoft Win32 Speech API (SAPI). + % + % Examples: + % % Speak the text; + % tts('I can speak.'); + % % List availble voices; + % tts('I can speak.','List'); + % % Do not speak out, store the speech in a variable; + % w = tts('I can speak.',[],-4,44100); + % wavplay(w,44100); + % + % See also WAVREAD, WAVWRITE, WAVPLAY. + + % Written by Siyi Deng; 12-21-2007; + + if ~ispc, error('Microsoft Win32 SAPI is required.'); end + if ~ischar(txt), error('First input must be string.'); end + + SV = actxserver('SAPI.SpVoice'); + TK = invoke(SV,'GetVoices'); + + if nargin > 1 + % Select voice; + for k = 0:TK.Count-1 + if strcmpi(voice,TK.Item(k).GetDescription) + SV.Voice = TK.Item(k); + break; + elseif strcmpi(voice,'list') + disp(TK.Item(k).GetDescription); + end + end + % Set pace; + if nargin > 2 + if isempty(pace), pace = 0; end + if abs(pace) > 10, pace = sign(pace)*10; end + SV.Rate = pace; + end + end + + if nargin < 4 || ~ismember(fs,[8000,11025,12000,16000,22050,24000,32000,... + 44100,48000]), fs = 16000; end + + if nargout > 0 + % Output variable; + MS = actxserver('SAPI.SpMemoryStream'); + MS.Format.Type = sprintf('SAFT%dkHz16BitMono',fix(fs/1000)); + SV.AudioOutputStream = MS; + end + + invoke(SV,'Speak',txt); + + if nargout > 0 + % Convert uint8 to double precision; + wav = reshape(double(invoke(MS,'GetData')),2,[])'; + wav = (wav(:,2)*256+wav(:,1))/32768; + wav(wav >= 1) = wav(wav >= 1)-2; + delete(MS); + clear MS; + end + + delete(SV); + clear SV TK; + pause(0.2); + + end % TTS; + end +end + diff --git a/doc/+eegtoolkit/+util/@LSLWrapper/graph.dot b/doc/+eegtoolkit/+util/@LSLWrapper/graph.dot new file mode 100644 index 0000000..8119234 --- /dev/null +++ b/doc/+eegtoolkit/+util/@LSLWrapper/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + LSLWrapper -> LSLWrapper; + + LSLWrapper [URL="LSLWrapper.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@LSLWrapper/graph.html b/doc/+eegtoolkit/+util/@LSLWrapper/graph.html new file mode 100644 index 0000000..1e471f6 --- /dev/null +++ b/doc/+eegtoolkit/+util/@LSLWrapper/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+util/@LSLWrapper + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@LSLWrapper >
    +

    Dependency Graph for ./+eegtoolkit/+util/@LSLWrapper

    + +
    +Dependency Graph for ./+eegtoolkit/+util/@LSLWrapper + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@LSLWrapper/graph.map b/doc/+eegtoolkit/+util/@LSLWrapper/graph.map new file mode 100644 index 0000000..b230ed0 --- /dev/null +++ b/doc/+eegtoolkit/+util/@LSLWrapper/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+util/@LSLWrapper/graph.png b/doc/+eegtoolkit/+util/@LSLWrapper/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..fcee22c5a0807278bb288e5a946a07a4154652e6 GIT binary patch literal 5124 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 + + + Index for Directory ./+eegtoolkit/+util/@LSLWrapper + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@LSLWrapper >
    + +

    Index for ./+eegtoolkit/+util/@LSLWrapper

    + +

    Matlab files in this directory:

    + +
     LSLWrapper
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@RawSignalSet/RawSignalSet.html b/doc/+eegtoolkit/+util/@RawSignalSet/RawSignalSet.html new file mode 100644 index 0000000..8cbbe7c --- /dev/null +++ b/doc/+eegtoolkit/+util/@RawSignalSet/RawSignalSet.html @@ -0,0 +1,112 @@ + + + + Description of RawSignalSet + + + + + + + + + +
    Home > +eegtoolkit > +util > @RawSignalSet > RawSignalSet.m
    + + + +

    RawSignalSet +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    RawSignalSet.m

    +

    SOURCE CODE ^

    +
    0001 classdef RawSignalSet < eegtoolkit.util.InstanceSet
    +0002     %RAWSIGNALSET Summary of this class goes here
    +0003     %   Detailed explanation goes here
    +0004     
    +0005     properties
    +0006         %numTrials X numChannels X numSamples
    +0007         signalMatrix;
    +0008     end
    +0009     
    +0010     methods
    +0011         function RSS = RawSignalSet(trials)
    +0012             %             RSS = RSS@eegtoolkit.util.InstanceSet(zeros(1,1000),ones(1,1000));
    +0013             if(nargin~=1)
    +0014                 error('trials parameter not set');
    +0015             end
    +0016             %             if(nargin>0)
    +0017             numTrials = length(trials);
    +0018             labels = zeros(numTrials,1);
    +0019             for i=1:numTrials
    +0020                 labels(i) = trials{i}.label;
    +0021             end
    +0022             [numChannels, numSamples] = size(trials{i}.signal);
    +0023             sMatrix = zeros(numTrials,numChannels,numSamples);
    +0024             for i=1:numTrials
    +0025                 sMatrix(i,:,:) = trials{i}.signal;
    +0026             end
    +0027             RSS = RSS@eegtoolkit.util.InstanceSet(squeeze(sMatrix(:,1,:)),labels);
    +0028             RSS.signalMatrix = sMatrix;
    +0029             %             end
    +0030         end
    +0031         
    +0032         function sMatrix = get(indices)
    +0033             sMatrix = squeeze(RSS.signalMatrix(indices,:,:));
    +0034         end
    +0035         
    +0036         function sMatrix = getInstancesWithIndices(RSS,indices)
    +0037             sMatrix = RSS.signalMatrix(indices,:,:);
    +0038         end
    +0039         
    +0040         function instanceStruct = removeInstancesWithIndices(RSS,indices)
    +0041 %             newRSS = eegtoolkit.util.RawSignalSet;
    +0042 %             newRSS.labels = RSS.labels;
    +0043 %             newRSS.labels(indices) = [];
    +0044 %             newRSS.signalMatrix = RSS.signalMatrix;
    +0045 %             newRSS.signalMatrix(indices,:,:) = [];
    +0046             sMatrix = RSS.signalMatrix;
    +0047             sMatrix(indices,:,:) = [];
    +0048             
    +0049             labels = RSS.labels;
    +0050             labels(indices) = [];
    +0051             instanceStruct = struct('sMatrix',sMatrix, 'labels', labels);
    +0052         end
    +0053         
    +0054         function numInstances = getNumInstances(RSS)
    +0055             [numInstances,~,~] = size(RSS.signalMatrix);
    +0056         end
    +0057             
    +0058     end
    +0059     
    +0060     
    +0061 end
    +0062
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@RawSignalSet/RawSignalSet.m b/doc/+eegtoolkit/+util/@RawSignalSet/RawSignalSet.m new file mode 100644 index 0000000..4f963a7 --- /dev/null +++ b/doc/+eegtoolkit/+util/@RawSignalSet/RawSignalSet.m @@ -0,0 +1,62 @@ +classdef RawSignalSet < eegtoolkit.util.InstanceSet + %RAWSIGNALSET Summary of this class goes here + % Detailed explanation goes here + + properties + %numTrials X numChannels X numSamples + signalMatrix; + end + + methods + function RSS = RawSignalSet(trials) + % RSS = RSS@eegtoolkit.util.InstanceSet(zeros(1,1000),ones(1,1000)); + if(nargin~=1) + error('trials parameter not set'); + end + % if(nargin>0) + numTrials = length(trials); + labels = zeros(numTrials,1); + for i=1:numTrials + labels(i) = trials{i}.label; + end + [numChannels, numSamples] = size(trials{i}.signal); + sMatrix = zeros(numTrials,numChannels,numSamples); + for i=1:numTrials + sMatrix(i,:,:) = trials{i}.signal; + end + RSS = RSS@eegtoolkit.util.InstanceSet(squeeze(sMatrix(:,1,:)),labels); + RSS.signalMatrix = sMatrix; + % end + end + + function sMatrix = get(indices) + sMatrix = squeeze(RSS.signalMatrix(indices,:,:)); + end + + function sMatrix = getInstancesWithIndices(RSS,indices) + sMatrix = RSS.signalMatrix(indices,:,:); + end + + function instanceStruct = removeInstancesWithIndices(RSS,indices) +% newRSS = eegtoolkit.util.RawSignalSet; +% newRSS.labels = RSS.labels; +% newRSS.labels(indices) = []; +% newRSS.signalMatrix = RSS.signalMatrix; +% newRSS.signalMatrix(indices,:,:) = []; + sMatrix = RSS.signalMatrix; + sMatrix(indices,:,:) = []; + + labels = RSS.labels; + labels(indices) = []; + instanceStruct = struct('sMatrix',sMatrix, 'labels', labels); + end + + function numInstances = getNumInstances(RSS) + [numInstances,~,~] = size(RSS.signalMatrix); + end + + end + + +end + diff --git a/doc/+eegtoolkit/+util/@RawSignalSet/graph.dot b/doc/+eegtoolkit/+util/@RawSignalSet/graph.dot new file mode 100644 index 0000000..c3e43b9 --- /dev/null +++ b/doc/+eegtoolkit/+util/@RawSignalSet/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + RawSignalSet -> RawSignalSet; + + RawSignalSet [URL="RawSignalSet.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@RawSignalSet/graph.html b/doc/+eegtoolkit/+util/@RawSignalSet/graph.html new file mode 100644 index 0000000..6eddfe1 --- /dev/null +++ b/doc/+eegtoolkit/+util/@RawSignalSet/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+util/@RawSignalSet + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@RawSignalSet >
    +

    Dependency Graph for ./+eegtoolkit/+util/@RawSignalSet

    + +
    +Dependency Graph for ./+eegtoolkit/+util/@RawSignalSet + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@RawSignalSet/graph.map b/doc/+eegtoolkit/+util/@RawSignalSet/graph.map new file mode 100644 index 0000000..880bbfc --- /dev/null +++ b/doc/+eegtoolkit/+util/@RawSignalSet/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+util/@RawSignalSet/graph.png b/doc/+eegtoolkit/+util/@RawSignalSet/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8587a1a4ab7f34334b48d440f991ec2127e5b2d3 GIT binary patch literal 5436 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+util/@RawSignalSet/index.html b/doc/+eegtoolkit/+util/@RawSignalSet/index.html new file mode 100644 index 0000000..d84e8cd --- /dev/null +++ b/doc/+eegtoolkit/+util/@RawSignalSet/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+util/@RawSignalSet + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@RawSignalSet >
    + +

    Index for ./+eegtoolkit/+util/@RawSignalSet

    + +

    Matlab files in this directory:

    + +
     RawSignalSet
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@ResultSet/ResultSet.html b/doc/+eegtoolkit/+util/@ResultSet/ResultSet.html new file mode 100644 index 0000000..0f798a2 --- /dev/null +++ b/doc/+eegtoolkit/+util/@ResultSet/ResultSet.html @@ -0,0 +1,111 @@ + + + + Description of ResultSet + + + + + + + + + +
    Home > +eegtoolkit > +util > @ResultSet > ResultSet.m
    + + + +

    ResultSet +

    + +

    PURPOSE ^

    +
    RESULTSET class
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
     RESULTSET class
    + Stores the results of an experiment
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    ResultSet.m

    +

    SOURCE CODE ^

    +
    0001 % RESULTSET class
    +0002 % Stores the results of an experiment
    +0003 classdef ResultSet < eegtoolkit.util.InstanceSet
    +0004     
    +0005     properties
    +0006         outputLabels; % The output labels
    +0007         outputProbabilities; % Probabilities
    +0008         outputRanking; % Confidence scores
    +0009         confusionMatrix; % The Confusion Matrix
    +0010     end
    +0011     
    +0012     methods
    +0013         function RS = ResultSet(instanceSet, labels, probabilities, ranking)
    +0014             %Constructor method
    +0015             %Input:
    +0016             %(InstanceSet object): the original instanceSet
    +0017             %Labels: a vector containing the output labels of the
    +0018             %experiment
    +0019             %Proababilities: a vector containing the probabilities of each
    +0020             %label
    +0021             %Ranking (optional): a matrix containing a score for each label
    +0022             
    +0023             RS = RS@eegtoolkit.util.InstanceSet(instanceSet);
    +0024             RS.outputLabels = labels;
    +0025 
    +0026             %compute the confusion matrix
    +0027             labels = unique(RS.getLabels);
    +0028             numLabels = length(labels);
    +0029             RS.confusionMatrix = zeros(numLabels);
    +0030             trueLabels = RS.getLabels;
    +0031             numInstances = RS.getNumInstances;
    +0032             for k=1:numInstances
    +0033                 idx1 = find(labels==RS.outputLabels(k,1));
    +0034                 idx2 = find(labels==trueLabels(k,1));
    +0035                 RS.confusionMatrix(idx1,idx2) = RS.confusionMatrix(idx1,idx2)+ 1;
    +0036             end
    +0037             RS.confusionMatrix = RS.confusionMatrix';
    +0038             %if classifier supports ranking/probabilities
    +0039             if nargin > 2
    +0040                 RS.outputProbabilities = probabilities;
    +0041                 RS.outputRanking = ranking;
    +0042             end
    +0043         end
    +0044         
    +0045         function RSSubset = subset(RS,indices)
    +0046             sOutputLabels = RS.outputLabels(indices);
    +0047             sOutputProbabilities = RS.outputProbabilities(indices);
    +0048             sInstanceSet = RS.getDatasetWithIndices(indices);
    +0049             if isempty(RS.outputProbabilities)
    +0050                 RSSubset = eegtoolkit.util.ResultSet(sInstanceSet,sOutputLabels,sOutputProbabilities);
    +0051             else
    +0052                 sOutputRanking = RS.outputRanking(indices);
    +0053                 RSSubset = eegtoolkit.util.ResultSet(sInstanceSet,sOutputLabels,sOutputProbabilities,sOutputRanking);
    +0054             end
    +0055         end
    +0056             
    +0057     end
    +0058     
    +0059 end
    +0060
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@ResultSet/ResultSet.m b/doc/+eegtoolkit/+util/@ResultSet/ResultSet.m new file mode 100644 index 0000000..01513b4 --- /dev/null +++ b/doc/+eegtoolkit/+util/@ResultSet/ResultSet.m @@ -0,0 +1,60 @@ +% RESULTSET class +% Stores the results of an experiment +classdef ResultSet < eegtoolkit.util.InstanceSet + + properties + outputLabels; % The output labels + outputProbabilities; % Probabilities + outputRanking; % Confidence scores + confusionMatrix; % The Confusion Matrix + end + + methods + function RS = ResultSet(instanceSet, labels, probabilities, ranking) + %Constructor method + %Input: + %(InstanceSet object): the original instanceSet + %Labels: a vector containing the output labels of the + %experiment + %Proababilities: a vector containing the probabilities of each + %label + %Ranking (optional): a matrix containing a score for each label + + RS = RS@eegtoolkit.util.InstanceSet(instanceSet); + RS.outputLabels = labels; + + %compute the confusion matrix + labels = unique(RS.getLabels); + numLabels = length(labels); + RS.confusionMatrix = zeros(numLabels); + trueLabels = RS.getLabels; + numInstances = RS.getNumInstances; + for k=1:numInstances + idx1 = find(labels==RS.outputLabels(k,1)); + idx2 = find(labels==trueLabels(k,1)); + RS.confusionMatrix(idx1,idx2) = RS.confusionMatrix(idx1,idx2)+ 1; + end + RS.confusionMatrix = RS.confusionMatrix'; + %if classifier supports ranking/probabilities + if nargin > 2 + RS.outputProbabilities = probabilities; + RS.outputRanking = ranking; + end + end + + function RSSubset = subset(RS,indices) + sOutputLabels = RS.outputLabels(indices); + sOutputProbabilities = RS.outputProbabilities(indices); + sInstanceSet = RS.getDatasetWithIndices(indices); + if isempty(RS.outputProbabilities) + RSSubset = eegtoolkit.util.ResultSet(sInstanceSet,sOutputLabels,sOutputProbabilities); + else + sOutputRanking = RS.outputRanking(indices); + RSSubset = eegtoolkit.util.ResultSet(sInstanceSet,sOutputLabels,sOutputProbabilities,sOutputRanking); + end + end + + end + +end + diff --git a/doc/+eegtoolkit/+util/@ResultSet/graph.dot b/doc/+eegtoolkit/+util/@ResultSet/graph.dot new file mode 100644 index 0000000..08f05cc --- /dev/null +++ b/doc/+eegtoolkit/+util/@ResultSet/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + ResultSet -> ResultSet; + + ResultSet [URL="ResultSet.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@ResultSet/graph.html b/doc/+eegtoolkit/+util/@ResultSet/graph.html new file mode 100644 index 0000000..1eee7e5 --- /dev/null +++ b/doc/+eegtoolkit/+util/@ResultSet/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+util/@ResultSet + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@ResultSet >
    +

    Dependency Graph for ./+eegtoolkit/+util/@ResultSet

    + +
    +Dependency Graph for ./+eegtoolkit/+util/@ResultSet + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@ResultSet/graph.map b/doc/+eegtoolkit/+util/@ResultSet/graph.map new file mode 100644 index 0000000..8ee72a6 --- /dev/null +++ b/doc/+eegtoolkit/+util/@ResultSet/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+util/@ResultSet/graph.png b/doc/+eegtoolkit/+util/@ResultSet/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0a4e7638c596b42b0fe35cae587eae21ca33b1ee GIT binary patch literal 4264 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 cfhV$)GM*zwA<-M)uLnq7SySnof + + + Index for Directory ./+eegtoolkit/+util/@ResultSet + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@ResultSet >
    + +

    Index for ./+eegtoolkit/+util/@ResultSet

    + +

    Matlab files in this directory:

    + +
     ResultSetRESULTSET class
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@Session/Session.html b/doc/+eegtoolkit/+util/@Session/Session.html new file mode 100644 index 0000000..ccb7732 --- /dev/null +++ b/doc/+eegtoolkit/+util/@Session/Session.html @@ -0,0 +1,589 @@ + + + + Description of Session + + + + + + + + + +
    Home > +eegtoolkit > +util > @Session > Session.m
    + + + +

    Session +

    + +

    PURPOSE ^

    +
    SESSION class
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
     SESSION class
    + Session I/O, splitting sessions into trials and applying filters
    +
    + Properties:
    + trials: A cell array with the Trials of the loaded sessions.
    + filt: Filter to be applied when data is loaded
    + sessions: Cell array with the filenames of the dataset
    + subjectids: Vector with the subject ids corresponding to the loaded trials
    + sessionids: Vector with the session ids corresponding to the loaded trials
    +
    + Functions:
    +init a session
    +   session = eegtoolkit.util.Session();
    +init a session with a filter (created with 'filterbuilder')
    +   session = eegtoolkit.util.Session(filt);
    +load trials for a subject
    +   session.loadSubject(subjectid);
    +load a specific session
    +   session.loadSubjectSession(subjectid,sessionid);
    +load everything
    +   session.loadAll();
    +clear loaded data
    +   session.clearData;
    +apply a filter that was created with 'filterbuilder'
    +   session.applyFilter(filt);
    +
    +
    +DATASETS
    +1. SSVEP Dataset I (SINGLE)
    +2. SSVEP Dataset II (MULTI)
    +3. SSVEP Dataset III (EPOC-MULTI)
    +4. SSVEP Dataset SCCN
    +5. ERRP Dataset
    +6. MI Dataset
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    Session.m

    +

    SOURCE CODE ^

    +
    0001 % SESSION class
    +0002 % Session I/O, splitting sessions into trials and applying filters
    +0003 %
    +0004 % Properties:
    +0005 % trials: A cell array with the Trials of the loaded sessions.
    +0006 % filt: Filter to be applied when data is loaded
    +0007 % sessions: Cell array with the filenames of the dataset
    +0008 % subjectids: Vector with the subject ids corresponding to the loaded trials
    +0009 % sessionids: Vector with the session ids corresponding to the loaded trials
    +0010 %
    +0011 % Functions:
    +0012 %init a session
    +0013 %   session = eegtoolkit.util.Session();
    +0014 %init a session with a filter (created with 'filterbuilder')
    +0015 %   session = eegtoolkit.util.Session(filt);
    +0016 %load trials for a subject
    +0017 %   session.loadSubject(subjectid);
    +0018 %load a specific session
    +0019 %   session.loadSubjectSession(subjectid,sessionid);
    +0020 %load everything
    +0021 %   session.loadAll();
    +0022 %clear loaded data
    +0023 %   session.clearData;
    +0024 %apply a filter that was created with 'filterbuilder'
    +0025 %   session.applyFilter(filt);
    +0026 %
    +0027 %
    +0028 %DATASETS
    +0029 %1. SSVEP Dataset I (SINGLE)
    +0030 %2. SSVEP Dataset II (MULTI)
    +0031 %3. SSVEP Dataset III (EPOC-MULTI)
    +0032 %4. SSVEP Dataset SCCN
    +0033 %5. ERRP Dataset
    +0034 %6. MI Dataset
    +0035 
    +0036 classdef Session < handle
    +0037     
    +0038     properties (Constant)
    +0039         THRESHOLD_SPLIT_MILLIS = 2000; %Threshold for splitting the trials based on DIN data
    +0040     end
    +0041     properties (Access = public)
    +0042         trials = {}; % Trials of the loaded sessions.
    +0043         filt; % Filter to be applied when data is loaded
    +0044         sessions; % Filenames of the dataset
    +0045         subjectids; % The subject ids corresponding to the loaded trials
    +0046         sessionids;
    +0047     end
    +0048     
    +0049     
    +0050     methods (Access = public)
    +0051         function S = Session()
    +0052             %S = eegtoolkit.util.Session();
    +0053             %Constructs a session object
    +0054             %
    +0055             %S = eegtoolkit.util.Session(filt);
    +0056             %Constructs a session object. A filter will applied to all
    +0057             %loaded trials
    +0058             %Dataset I
    +0059             S.sessions{1,1,1} = 'S001a';
    +0060             S.sessions{1,1,2} = 'S001b';
    +0061             S.sessions{1,1,3} = 'S001c';
    +0062             S.sessions{1,2,1} = 'S002a';
    +0063             S.sessions{1,2,2} = 'S002b';
    +0064             S.sessions{1,2,3} = 'S002c';
    +0065             S.sessions{1,2,4} = 'S002d';
    +0066             S.sessions{1,2,5} = 'S002e';
    +0067             S.sessions{1,3,1} = 'S003a';
    +0068             S.sessions{1,3,2} = 'S003b';
    +0069             S.sessions{1,3,3} = 'S003c';
    +0070             S.sessions{1,4,1} = 'S004a';
    +0071             S.sessions{1,4,2} = 'S004b';
    +0072             S.sessions{1,4,3} = 'S004c';
    +0073             S.sessions{1,4,4} = 'S004d';
    +0074             S.sessions{1,5,1} = 'S005a';
    +0075             S.sessions{1,5,2} = 'S005b';
    +0076             S.sessions{1,5,3} = 'S005c';
    +0077             S.sessions{1,5,4} = 'S005d';
    +0078             S.sessions{1,5,5} = 'S005e';
    +0079             S.sessions{1,6,1} = 'S006a';
    +0080             S.sessions{1,6,2} = 'S006b';
    +0081             S.sessions{1,6,3} = 'S006c';
    +0082             S.sessions{1,6,4} = 'S006d';
    +0083             S.sessions{1,6,5} = 'S006e';
    +0084             S.sessions{1,7,1} = 'S007a';
    +0085             S.sessions{1,7,2} = 'S007b';
    +0086             S.sessions{1,7,3} = 'S007c';
    +0087             S.sessions{1,7,4} = 'S007d';
    +0088             S.sessions{1,7,5} = 'S007e';
    +0089             S.sessions{1,8,1} = 'S008a';
    +0090             S.sessions{1,8,2} = 'S008b';
    +0091             S.sessions{1,8,3} = 'S008c';
    +0092             S.sessions{1,9,1} = 'S009a';
    +0093             S.sessions{1,9,2} = 'S009b';
    +0094             S.sessions{1,9,3} = 'S009c';
    +0095             S.sessions{1,9,4} = 'S009d';
    +0096             S.sessions{1,9,5} = 'S009e';
    +0097             S.sessions{1,10,1} = 'S010a';
    +0098             S.sessions{1,10,2} = 'S010b';
    +0099             S.sessions{1,10,3} = 'S010c';
    +0100             S.sessions{1,10,4} = 'S010d';
    +0101             S.sessions{1,10,5} = 'S010e';
    +0102             S.sessions{1,11,1} = 'S013a';
    +0103             S.sessions{1,11,2} = 'S013b';
    +0104             S.sessions{1,11,3} = 'S013c';
    +0105             S.sessions{1,11,4} = 'S013d';
    +0106             S.sessions{1,11,5} = 'S013e';
    +0107             
    +0108             %Dataset II
    +0109             S.sessions{2,1,1} = 'T001a';
    +0110             S.sessions{2,1,2} = 'T001b';
    +0111             S.sessions{2,1,3} = 'T001c';
    +0112             S.sessions{2,1,4} = 'T001d';
    +0113             S.sessions{2,1,5} = 'T001e';
    +0114             S.sessions{2,2,1} = 'T002a';
    +0115             S.sessions{2,2,2} = 'T002b';
    +0116             S.sessions{2,2,3} = 'T002c';
    +0117             S.sessions{2,2,4} = 'T002d';
    +0118             S.sessions{2,2,5} = 'T002e';
    +0119             S.sessions{2,3,1} = 'T003a';
    +0120             S.sessions{2,3,2} = 'T003b';
    +0121             S.sessions{2,3,3} = 'T003c';
    +0122             S.sessions{2,3,4} = 'T003d';
    +0123             S.sessions{2,3,5} = 'T003e';
    +0124             S.sessions{2,4,1} = 'T004a';
    +0125             S.sessions{2,4,2} = 'T004b';
    +0126             S.sessions{2,4,3} = 'T004c';
    +0127             S.sessions{2,4,4} = 'T004d';
    +0128             S.sessions{2,4,5} = 'T004e';
    +0129             S.sessions{2,5,1} = 'T005a';
    +0130             S.sessions{2,5,2} = 'T005b';
    +0131             S.sessions{2,5,3} = 'T005c';
    +0132             S.sessions{2,5,4} = 'T005d';
    +0133             S.sessions{2,5,5} = 'T005e';
    +0134             S.sessions{2,6,1} = 'T006a';
    +0135             S.sessions{2,6,2} = 'T006b';
    +0136             S.sessions{2,6,3} = 'T006c';
    +0137             S.sessions{2,6,4} = 'T006d';
    +0138             S.sessions{2,6,5} = 'T006e';
    +0139             S.sessions{2,7,1} = 'T007a';
    +0140             S.sessions{2,7,2} = 'T007b';
    +0141             S.sessions{2,7,3} = 'T007c';
    +0142             S.sessions{2,7,4} = 'T007d';
    +0143             S.sessions{2,7,5} = 'T007e';
    +0144             S.sessions{2,8,1} = 'T008a';
    +0145             S.sessions{2,8,2} = 'T008b';
    +0146             S.sessions{2,8,3} = 'T008c';
    +0147             S.sessions{2,8,4} = 'T008d';
    +0148             S.sessions{2,8,5} = 'T008e';
    +0149             S.sessions{2,9,1} = 'T009a';
    +0150             S.sessions{2,9,2} = 'T009b';
    +0151             S.sessions{2,9,3} = 'T009c';
    +0152             S.sessions{2,9,4} = 'T009d';
    +0153             S.sessions{2,9,5} = 'T009e';
    +0154             S.sessions{2,10,1} = 'T010a';
    +0155             S.sessions{2,10,2} = 'T010b';
    +0156             S.sessions{2,10,3} = 'T010c';
    +0157             S.sessions{2,10,4} = 'T010d';
    +0158             S.sessions{2,10,5} = 'T010e';
    +0159             S.sessions{2,11,1} = 'T013a';
    +0160             S.sessions{2,11,2} = 'T013b';
    +0161             S.sessions{2,11,3} = 'T013c';
    +0162             S.sessions{2,11,4} = 'T013d';
    +0163             S.sessions{2,11,5} = 'T013e';
    +0164             
    +0165             %Dataset III (Epoc)
    +0166             S.sessions{3,1,1} = 'U001a';
    +0167             S.sessions{3,1,2} = 'U001b';
    +0168             S.sessions{3,1,3} = 'U001c';
    +0169             S.sessions{3,1,4} = 'U001d';
    +0170             S.sessions{3,1,5} = 'U001e';
    +0171             S.sessions{3,2,1} = 'U002a';
    +0172             S.sessions{3,2,2} = 'U002b';
    +0173             S.sessions{3,2,3} = 'U002c';
    +0174             S.sessions{3,2,4} = 'U002d';
    +0175             S.sessions{3,2,5} = 'U002e';
    +0176             S.sessions{3,3,1} = 'U003a';
    +0177             S.sessions{3,3,2} = 'U003b';
    +0178             S.sessions{3,3,3} = 'U003c';
    +0179             S.sessions{3,3,4} = 'U003d';
    +0180             S.sessions{3,3,5} = 'U003e';
    +0181             S.sessions{3,4,1} = 'U004a';
    +0182             S.sessions{3,4,2} = 'U004b';
    +0183             S.sessions{3,4,3} = 'U004c';
    +0184             S.sessions{3,4,4} = 'U004d';
    +0185             S.sessions{3,4,5} = 'U004e';
    +0186             S.sessions{3,5,1} = 'U005a';
    +0187             S.sessions{3,5,2} = 'U005b';
    +0188             S.sessions{3,5,3} = 'U005c';
    +0189             S.sessions{3,5,4} = 'U005d';
    +0190             S.sessions{3,5,5} = 'U005e';
    +0191             S.sessions{3,6,1} = 'U006a';
    +0192             S.sessions{3,6,2} = 'U006b';
    +0193             S.sessions{3,6,3} = 'U006c';
    +0194             S.sessions{3,6,4} = 'U006d';
    +0195             S.sessions{3,6,5} = 'U006e';
    +0196             S.sessions{3,7,1} = 'U007a';
    +0197             S.sessions{3,7,2} = 'U007b';
    +0198             S.sessions{3,7,3} = 'U007c';
    +0199             S.sessions{3,7,4} = 'U007d';
    +0200             S.sessions{3,7,5} = 'U007e';
    +0201             S.sessions{3,8,1} = 'U008a';
    +0202             S.sessions{3,8,2} = 'U008b';
    +0203             S.sessions{3,8,3} = 'U008c';
    +0204             S.sessions{3,8,4} = 'U008d';
    +0205             S.sessions{3,8,5} = 'U008e';
    +0206             S.sessions{3,9,1} = 'U009a';
    +0207             S.sessions{3,9,2} = 'U009b';
    +0208             S.sessions{3,9,3} = 'U009c';
    +0209             S.sessions{3,9,4} = 'U009d';
    +0210             S.sessions{3,9,5} = 'U009e';
    +0211             S.sessions{3,10,1} = 'U010a';
    +0212             S.sessions{3,10,2} = 'U010b';
    +0213             S.sessions{3,10,3} = 'U010c';
    +0214             S.sessions{3,10,4} = 'U010d';
    +0215             S.sessions{3,10,5} = 'U010e';
    +0216             S.sessions{3,11,1} = 'U011a';
    +0217             S.sessions{3,11,2} = 'U011b';
    +0218             S.sessions{3,11,3} = 'U011c';
    +0219             S.sessions{3,11,4} = 'U011d';
    +0220             S.sessions{3,11,5} = 'U011e';
    +0221             
    +0222             %SCCN dataset
    +0223             S.sessions{4,1,1} = 's1';
    +0224             S.sessions{4,2,1} = 's2';
    +0225             S.sessions{4,3,1} = 's3';
    +0226             S.sessions{4,4,1} = 's4';
    +0227             S.sessions{4,5,1} = 's5';
    +0228             S.sessions{4,6,1} = 's6';
    +0229             S.sessions{4,7,1} = 's7';
    +0230             S.sessions{4,8,1} = 's8';
    +0231             S.sessions{4,9,1} = 's9';
    +0232             S.sessions{4,10,1} = 's10';
    +0233             
    +0234             %ERRP dataset
    +0235             S.sessions{5,1,1} = 'EEG_s1.mat';
    +0236             S.sessions{5,2,1} = 'EEG_s2.mat';
    +0237             S.sessions{5,3,1} = 'EEG_s3.mat';
    +0238             S.sessions{5,4,1} = 'EEG_s4.mat';
    +0239             S.sessions{5,5,1} = 'EEG_s5.mat';
    +0240             S.sessions{5,6,1} = 'EEG_s6.mat';
    +0241             S.sessions{5,7,1} = 'EEG_s7.mat';
    +0242             S.sessions{5,8,1} = 'EEG_s8.mat';
    +0243             
    +0244             S.sessions{6,1,1} = 'dataset_BCIcomp1.mat';
    +0245             
    +0246             S.sessions{7,1,1} = 'B01T.mat';
    +0247             S.sessions{7,1,2} = 'B01T.mat';
    +0248             S.sessions{7,2,1} = 'B02T.mat';
    +0249             S.sessions{7,2,2} = 'B02T.mat';
    +0250             S.sessions{7,3,1} = 'B03T.mat';
    +0251             S.sessions{7,3,2} = 'B03T.mat';
    +0252             S.sessions{7,4,1} = 'B04T.mat';
    +0253             S.sessions{7,4,2} = 'B04T.mat';
    +0254             S.sessions{7,5,1} = 'B05T.mat';
    +0255             S.sessions{7,5,2} = 'B05T.mat';
    +0256             S.sessions{7,6,1} = 'B06T.mat';
    +0257             S.sessions{7,6,2} = 'B06T.mat';
    +0258             S.sessions{7,7,1} = 'B07T.mat';
    +0259             S.sessions{7,7,2} = 'B07T.mat';
    +0260             S.sessions{7,8,1} = 'B08T.mat';
    +0261             S.sessions{7,8,2} = 'B08T.mat';
    +0262             S.sessions{7,9,1} = 'B09T.mat';
    +0263             S.sessions{7,9,2} = 'B09T.mat';
    +0264             
    +0265             %MI dataset
    +0266             %             S.sessions{6,1,1} = ;
    +0267             
    +0268             
    +0269             S.subjectids = [];
    +0270             S.sessionids = [];
    +0271         end
    +0272         function S = loadAll(S,experiment)
    +0273             %loads everything
    +0274             [~,l,~] = size(S.sessions);
    +0275             h = waitbar(0,'Loading...');
    +0276             for i=1:l
    +0277                 waitbar(i/l,h,'Loading...');
    +0278                 S.loadSubject(experiment,i);
    +0279             end
    +0280             close(h);
    +0281         end
    +0282         
    +0283         function S = loadSubject(S,experiment,subject)
    +0284             %loads all trials for a specific subject
    +0285             %
    +0286             %Example:
    +0287             %   session.loadSubject(1);
    +0288             %loads all the trials of the 1st subject
    +0289             [~,~, y] = size(S.sessions);
    +0290             for i=1:y
    +0291                 if ~isempty(S.sessions{experiment,subject,i})
    +0292                     S.loadSubjectSession(experiment,subject,i);
    +0293                 end
    +0294             end
    +0295         end
    +0296         function S = loadSubjectSession(S,experiment,subject,session)
    +0297             %loads all trials for a specific session
    +0298             %
    +0299             %Example:
    +0300             %   session.loadSubjectSession(1,2);
    +0301             %loads the 2nd session of the 1st subject
    +0302             %
    +0303             switch(experiment)
    +0304                 case 1
    +0305                     %Load Dataset I (SINGLE)
    +0306                     load(S.sessions{experiment,subject,session});
    +0307                     signal = eval('eeg');
    +0308                     numTrials = length(S.trials) + 1;
    +0309                     curTrials = S.split(signal,DIN_1,subject,session);
    +0310                     for i=1:length(curTrials)
    +0311                         S.trials{numTrials} = curTrials{i};
    +0312                         numTrials = numTrials + 1;
    +0313                     end
    +0314                 case 2
    +0315                     %Load Dataset II (MULTI)
    +0316                     load(S.sessions{experiment,subject,session});
    +0317                     signal = eval('eeg');
    +0318                     numTrials = length(S.trials) + 1;
    +0319                     curTrials = S.split(signal,DIN_1,subject,session,labels);
    +0320                     for i=1:length(curTrials)
    +0321                         S.trials{numTrials} = curTrials{i};
    +0322                         numTrials = numTrials + 1;
    +0323                     end
    +0324                 case 3
    +0325                     %Dataset III (EPOC-MULTI)
    +0326                     SAMPLING_RATE = 128;
    +0327                     load(strcat(S.sessions{experiment,subject,session},'i'));
    +0328                     events = eval('events');
    +0329                     marks = events(events(:,2)==32779,3);
    +0330                     stops = events(events(:,2)==32780,3);
    +0331                     numTrials = length(S.trials) + 1;
    +0332                     labels = {4,2,3,5,1,2,5,4,2,3,1,5};
    +0333                     for i=1:length(marks)
    +0334                         signal = eeg(:,marks(i):stops(i) -1);
    +0335                         label = labels{i};
    +0336                         S.trials{numTrials} = eegtoolkit.util.Trial(signal,label,SAMPLING_RATE,subject,session,eegtoolkit.util.Trial.SSVEP);
    +0337                         numTrials = numTrials + 1;
    +0338                         S.subjectids = [S.subjectids subject];
    +0339                         S.sessionids = [S.sessionids session];
    +0340                     end
    +0341                     %load part 2
    +0342                     load(strcat(S.sessions{experiment,subject,session},'ii'));
    +0343                     events = eval('events');
    +0344                     marks = events(events(:,2)==32779,3);
    +0345                     stops = events(events(:,2)==32780,3);
    +0346                     numTrials = length(S.trials) + 1;
    +0347                     labels = {4,3,2,4,1,2,5,3,4,1,3,1,3};
    +0348                     for i=1:length(marks)
    +0349                         signal = eeg(:,marks(i):stops(i) -1);
    +0350                         label = labels{i};
    +0351                         S.trials{numTrials} = eegtoolkit.util.Trial(signal,label,SAMPLING_RATE,subject,session,eegtoolkit.util.Trial.SSVEP);
    +0352                         numTrials = numTrials + 1;
    +0353                         S.subjectids = [S.subjectids subject];
    +0354                         S.sessionids = [S.sessionids session];
    +0355                     end
    +0356                 case 4
    +0357                     %SCCN Dataset
    +0358                     SAMPLING_RATE = 256;
    +0359                     load(S.sessions{experiment,subject,session});
    +0360                     [x,y,z,zz] = size(eeg);
    +0361                     numTrials = length(S.trials) + 1;
    +0362                     for i=1:x
    +0363                         for j=1:zz
    +0364                             S.trials{numTrials} = eegtoolkit.util.Trial(squeeze(eeg(i,:,:,j)),i,SAMPLING_RATE,subject,j);
    +0365                             numTrials = numTrials+1;
    +0366                             S.subjectids = [S.subjectids subject];
    +0367                             S.sessionids = [S.sessionids j];
    +0368                         end
    +0369                     end
    +0370                 case 5
    +0371                     %ERRP Dataset
    +0372                     SAMPLING_RATE = 256;
    +0373                     %range of trial in milliseconds based on the stimulus
    +0374                     %event
    +0375                     range = [200,800];
    +0376                     xstart = round(range(1)*SAMPLING_RATE/1000)-1500;
    +0377                     xend = round(range(2)*SAMPLING_RATE/1000);
    +0378                     load(S.sessions{experiment,subject,session});
    +0379                     events = {'correct_movement', 'error_movement'};
    +0380                     numTrials = length(S.trials) + 1;
    +0381                     for ev=1:length(events)
    +0382                         idxev = find(strcmp(EEG.events.name, events{ev}));
    +0383                         epochs.(events{ev}) = zeros(length(xstart:xend), size(EEG.signal,2), length(idxev));
    +0384                         for i=1:length(idxev)
    +0385                             epochs.(events{ev})(:,:,i) = EEG.signal(EEG.events.position(idxev(i))+xstart:EEG.events.position(idxev(i))+xend,:);
    +0386                         end
    +0387                         GrandAverages.(events{ev}) = mean(epochs.(events{ev}),3);
    +0388                     end
    +0389                     [~,~,numCorrect] = size(epochs.correct_movement);
    +0390                     [~,~,numError] = size(epochs.error_movement);
    +0391                     for i=1:numCorrect
    +0392                         S.trials{numTrials} = eegtoolkit.util.Trial(squeeze(epochs.correct_movement(:,:,i))',1,SAMPLING_RATE,subject,session,eegtoolkit.util.Trial.ERRP);
    +0393                         numTrials = numTrials + 1;
    +0394                         S.subjectids = [S.subjectids subject];
    +0395                         S.sessionids = [S.sessionids session];
    +0396                         
    +0397                     end
    +0398                     for i=1:numError
    +0399                         S.trials{numTrials} = eegtoolkit.util.Trial(squeeze(epochs.error_movement(:,:,i))',2,SAMPLING_RATE,subject,session,eegtoolkit.util.Trial.ERRP);
    +0400                         numTrials = numTrials + 1;
    +0401                         S.subjectids = [S.subjectids subject];
    +0402                         S.sessionids = [S.sessionids session];
    +0403                     end
    +0404                 case 6
    +0405                     load(S.sessions{experiment,subject,session});
    +0406                     [~,~,n] = size(x_train);
    +0407                     numTrials = length(S.trials) + 1;
    +0408                     for i=1:n
    +0409                         signal = squeeze(x_train(:,:,i));
    +0410                         label = y_train(i);
    +0411                         S.trials{numTrials} = eegtoolkit.util.Trial(signal',label,128,1,1,eegtoolkit.util.Trial.MI);
    +0412                         S.subjectids = [S.subjectids subject];
    +0413                         S.sessionids = [S.sessionids session];
    +0414                         numTrials = numTrials + 1;
    +0415                     end
    +0416                 case 7
    +0417                     load(S.sessions{experiment,subject,session});
    +0418                     [trialsegm,labels] = segmentGratzB(data{session},0.5,2.5,250);
    +0419                     [n,~,~] = size(trialsegm);
    +0420                     numTrials = length(S.trials) + 1;
    +0421                     for i=1:n
    +0422                         signal = squeeze(trialsegm(i,:,:));
    +0423                         label = labels(i);
    +0424                         S.trials{numTrials} = eegtoolkit.util.Trial(signal',label,250,subject,session,eegtoolkit.util.Trial.MI);
    +0425                         S.subjectids = [S.subjectids subject];
    +0426                         S.sessionids = [S.sessionids session];
    +0427                         numTrials = numTrials + 1;
    +0428                     end
    +0429                 otherwise
    +0430                     error('invalid experiment id');
    +0431             end
    +0432         end
    +0433         
    +0434         function S = clearData(S)
    +0435             %clears loaded data
    +0436             S.trials = {};
    +0437             S.subjectids = [];
    +0438             S.sessionids = [];
    +0439         end
    +0440     end
    +0441     
    +0442     methods (Access = private)
    +0443         function trials = split(S, signal, dins, subjectid, session,labels)
    +0444             SAMPLING_RATE = 250;
    +0445             timestamps = cell2mat(dins(2,:));
    +0446             samples = cell2mat(dins(4,:));
    +0447             [a numDins ]= size(dins);
    +0448             sampleA= samples(1);
    +0449             timeA = timestamps(1);
    +0450             previous = timestamps(1);
    +0451             ranges = [];
    +0452             freqs = [];
    +0453             times = [];
    +0454             sum = 0;
    +0455             count = 0;
    +0456             i=2;
    +0457             for i=2:numDins
    +0458                 current = timestamps(i);
    +0459                 if(current - previous) > S.THRESHOLD_SPLIT_MILLIS;
    +0460                     sampleB = samples(i-1);
    +0461                     timeB = timestamps(i-1);
    +0462                     freqs = [freqs; (sum/count)];
    +0463                     % don't ask why
    +0464                     if(sampleB - sampleA>382)
    +0465                         ranges = [ranges ; [sampleA (sampleA+1249)]];
    +0466                         times = [times; [timeA timeB]];
    +0467                     end
    +0468                     sampleA = samples(i);
    +0469                     timeA = timestamps(i);
    +0470                     sum = 0;
    +0471                     count = 0;
    +0472                 else
    +0473                     sum = sum + (current-previous);
    +0474                     count = count +1;
    +0475                 end
    +0476                 previous = timestamps(i);
    +0477             end
    +0478             %             if(isempty(labels))
    +0479             sampleB = samples(i-1);
    +0480             timeB = timestamps(i-1);
    +0481             freqs = [freqs; (sum/count)];
    +0482             ranges = [ranges; [sampleA sampleA+1249]];
    +0483             times = [times; [timeA timeB]];
    +0484             freqs = freqs*2;
    +0485             freqs = 1000./freqs;
    +0486             %             end
    +0487             [numSplits a] = size(ranges);
    +0488             trials = {};
    +0489             i = 1;
    +0490             for i=1:numSplits
    +0491                 if(nargin>5)
    +0492                     trials{i} = eegtoolkit.util.Trial(signal(:, ranges(i,1):ranges(i,2)), labels{i},SAMPLING_RATE, subjectid,session,eegtoolkit.util.Trial.SSVEP);
    +0493                     S.subjectids = [S.subjectids subjectid];
    +0494                     S.sessionids = [S.sessionids session];
    +0495                 else
    +0496                     trials{i} = eegtoolkit.util.Trial(signal(:,ranges(i,1):ranges(i,2)), freqs(i), SAMPLING_RATE, subjectid,session,eegtoolkit.util.Trial.SSVEP);
    +0497                     S.subjectids = [S.subjectids subjectid];
    +0498                     S.sessionids = [S.sessionids session];
    +0499                 end
    +0500             end
    +0501         end
    +0502         
    +0503         
    +0504     end
    +0505 end
    +0506
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@Session/Session.m b/doc/+eegtoolkit/+util/@Session/Session.m new file mode 100644 index 0000000..eb89757 --- /dev/null +++ b/doc/+eegtoolkit/+util/@Session/Session.m @@ -0,0 +1,506 @@ +% SESSION class +% Session I/O, splitting sessions into trials and applying filters +% +% Properties: +% trials: A cell array with the Trials of the loaded sessions. +% filt: Filter to be applied when data is loaded +% sessions: Cell array with the filenames of the dataset +% subjectids: Vector with the subject ids corresponding to the loaded trials +% sessionids: Vector with the session ids corresponding to the loaded trials +% +% Functions: +%init a session +% session = eegtoolkit.util.Session(); +%init a session with a filter (created with 'filterbuilder') +% session = eegtoolkit.util.Session(filt); +%load trials for a subject +% session.loadSubject(subjectid); +%load a specific session +% session.loadSubjectSession(subjectid,sessionid); +%load everything +% session.loadAll(); +%clear loaded data +% session.clearData; +%apply a filter that was created with 'filterbuilder' +% session.applyFilter(filt); +% +% +%DATASETS +%1. SSVEP Dataset I (SINGLE) +%2. SSVEP Dataset II (MULTI) +%3. SSVEP Dataset III (EPOC-MULTI) +%4. SSVEP Dataset SCCN +%5. ERRP Dataset +%6. MI Dataset + +classdef Session < handle + + properties (Constant) + THRESHOLD_SPLIT_MILLIS = 2000; %Threshold for splitting the trials based on DIN data + end + properties (Access = public) + trials = {}; % Trials of the loaded sessions. + filt; % Filter to be applied when data is loaded + sessions; % Filenames of the dataset + subjectids; % The subject ids corresponding to the loaded trials + sessionids; + end + + + methods (Access = public) + function S = Session() + %S = eegtoolkit.util.Session(); + %Constructs a session object + % + %S = eegtoolkit.util.Session(filt); + %Constructs a session object. A filter will applied to all + %loaded trials + %Dataset I + S.sessions{1,1,1} = 'S001a'; + S.sessions{1,1,2} = 'S001b'; + S.sessions{1,1,3} = 'S001c'; + S.sessions{1,2,1} = 'S002a'; + S.sessions{1,2,2} = 'S002b'; + S.sessions{1,2,3} = 'S002c'; + S.sessions{1,2,4} = 'S002d'; + S.sessions{1,2,5} = 'S002e'; + S.sessions{1,3,1} = 'S003a'; + S.sessions{1,3,2} = 'S003b'; + S.sessions{1,3,3} = 'S003c'; + S.sessions{1,4,1} = 'S004a'; + S.sessions{1,4,2} = 'S004b'; + S.sessions{1,4,3} = 'S004c'; + S.sessions{1,4,4} = 'S004d'; + S.sessions{1,5,1} = 'S005a'; + S.sessions{1,5,2} = 'S005b'; + S.sessions{1,5,3} = 'S005c'; + S.sessions{1,5,4} = 'S005d'; + S.sessions{1,5,5} = 'S005e'; + S.sessions{1,6,1} = 'S006a'; + S.sessions{1,6,2} = 'S006b'; + S.sessions{1,6,3} = 'S006c'; + S.sessions{1,6,4} = 'S006d'; + S.sessions{1,6,5} = 'S006e'; + S.sessions{1,7,1} = 'S007a'; + S.sessions{1,7,2} = 'S007b'; + S.sessions{1,7,3} = 'S007c'; + S.sessions{1,7,4} = 'S007d'; + S.sessions{1,7,5} = 'S007e'; + S.sessions{1,8,1} = 'S008a'; + S.sessions{1,8,2} = 'S008b'; + S.sessions{1,8,3} = 'S008c'; + S.sessions{1,9,1} = 'S009a'; + S.sessions{1,9,2} = 'S009b'; + S.sessions{1,9,3} = 'S009c'; + S.sessions{1,9,4} = 'S009d'; + S.sessions{1,9,5} = 'S009e'; + S.sessions{1,10,1} = 'S010a'; + S.sessions{1,10,2} = 'S010b'; + S.sessions{1,10,3} = 'S010c'; + S.sessions{1,10,4} = 'S010d'; + S.sessions{1,10,5} = 'S010e'; + S.sessions{1,11,1} = 'S013a'; + S.sessions{1,11,2} = 'S013b'; + S.sessions{1,11,3} = 'S013c'; + S.sessions{1,11,4} = 'S013d'; + S.sessions{1,11,5} = 'S013e'; + + %Dataset II + S.sessions{2,1,1} = 'T001a'; + S.sessions{2,1,2} = 'T001b'; + S.sessions{2,1,3} = 'T001c'; + S.sessions{2,1,4} = 'T001d'; + S.sessions{2,1,5} = 'T001e'; + S.sessions{2,2,1} = 'T002a'; + S.sessions{2,2,2} = 'T002b'; + S.sessions{2,2,3} = 'T002c'; + S.sessions{2,2,4} = 'T002d'; + S.sessions{2,2,5} = 'T002e'; + S.sessions{2,3,1} = 'T003a'; + S.sessions{2,3,2} = 'T003b'; + S.sessions{2,3,3} = 'T003c'; + S.sessions{2,3,4} = 'T003d'; + S.sessions{2,3,5} = 'T003e'; + S.sessions{2,4,1} = 'T004a'; + S.sessions{2,4,2} = 'T004b'; + S.sessions{2,4,3} = 'T004c'; + S.sessions{2,4,4} = 'T004d'; + S.sessions{2,4,5} = 'T004e'; + S.sessions{2,5,1} = 'T005a'; + S.sessions{2,5,2} = 'T005b'; + S.sessions{2,5,3} = 'T005c'; + S.sessions{2,5,4} = 'T005d'; + S.sessions{2,5,5} = 'T005e'; + S.sessions{2,6,1} = 'T006a'; + S.sessions{2,6,2} = 'T006b'; + S.sessions{2,6,3} = 'T006c'; + S.sessions{2,6,4} = 'T006d'; + S.sessions{2,6,5} = 'T006e'; + S.sessions{2,7,1} = 'T007a'; + S.sessions{2,7,2} = 'T007b'; + S.sessions{2,7,3} = 'T007c'; + S.sessions{2,7,4} = 'T007d'; + S.sessions{2,7,5} = 'T007e'; + S.sessions{2,8,1} = 'T008a'; + S.sessions{2,8,2} = 'T008b'; + S.sessions{2,8,3} = 'T008c'; + S.sessions{2,8,4} = 'T008d'; + S.sessions{2,8,5} = 'T008e'; + S.sessions{2,9,1} = 'T009a'; + S.sessions{2,9,2} = 'T009b'; + S.sessions{2,9,3} = 'T009c'; + S.sessions{2,9,4} = 'T009d'; + S.sessions{2,9,5} = 'T009e'; + S.sessions{2,10,1} = 'T010a'; + S.sessions{2,10,2} = 'T010b'; + S.sessions{2,10,3} = 'T010c'; + S.sessions{2,10,4} = 'T010d'; + S.sessions{2,10,5} = 'T010e'; + S.sessions{2,11,1} = 'T013a'; + S.sessions{2,11,2} = 'T013b'; + S.sessions{2,11,3} = 'T013c'; + S.sessions{2,11,4} = 'T013d'; + S.sessions{2,11,5} = 'T013e'; + + %Dataset III (Epoc) + S.sessions{3,1,1} = 'U001a'; + S.sessions{3,1,2} = 'U001b'; + S.sessions{3,1,3} = 'U001c'; + S.sessions{3,1,4} = 'U001d'; + S.sessions{3,1,5} = 'U001e'; + S.sessions{3,2,1} = 'U002a'; + S.sessions{3,2,2} = 'U002b'; + S.sessions{3,2,3} = 'U002c'; + S.sessions{3,2,4} = 'U002d'; + S.sessions{3,2,5} = 'U002e'; + S.sessions{3,3,1} = 'U003a'; + S.sessions{3,3,2} = 'U003b'; + S.sessions{3,3,3} = 'U003c'; + S.sessions{3,3,4} = 'U003d'; + S.sessions{3,3,5} = 'U003e'; + S.sessions{3,4,1} = 'U004a'; + S.sessions{3,4,2} = 'U004b'; + S.sessions{3,4,3} = 'U004c'; + S.sessions{3,4,4} = 'U004d'; + S.sessions{3,4,5} = 'U004e'; + S.sessions{3,5,1} = 'U005a'; + S.sessions{3,5,2} = 'U005b'; + S.sessions{3,5,3} = 'U005c'; + S.sessions{3,5,4} = 'U005d'; + S.sessions{3,5,5} = 'U005e'; + S.sessions{3,6,1} = 'U006a'; + S.sessions{3,6,2} = 'U006b'; + S.sessions{3,6,3} = 'U006c'; + S.sessions{3,6,4} = 'U006d'; + S.sessions{3,6,5} = 'U006e'; + S.sessions{3,7,1} = 'U007a'; + S.sessions{3,7,2} = 'U007b'; + S.sessions{3,7,3} = 'U007c'; + S.sessions{3,7,4} = 'U007d'; + S.sessions{3,7,5} = 'U007e'; + S.sessions{3,8,1} = 'U008a'; + S.sessions{3,8,2} = 'U008b'; + S.sessions{3,8,3} = 'U008c'; + S.sessions{3,8,4} = 'U008d'; + S.sessions{3,8,5} = 'U008e'; + S.sessions{3,9,1} = 'U009a'; + S.sessions{3,9,2} = 'U009b'; + S.sessions{3,9,3} = 'U009c'; + S.sessions{3,9,4} = 'U009d'; + S.sessions{3,9,5} = 'U009e'; + S.sessions{3,10,1} = 'U010a'; + S.sessions{3,10,2} = 'U010b'; + S.sessions{3,10,3} = 'U010c'; + S.sessions{3,10,4} = 'U010d'; + S.sessions{3,10,5} = 'U010e'; + S.sessions{3,11,1} = 'U011a'; + S.sessions{3,11,2} = 'U011b'; + S.sessions{3,11,3} = 'U011c'; + S.sessions{3,11,4} = 'U011d'; + S.sessions{3,11,5} = 'U011e'; + + %SCCN dataset + S.sessions{4,1,1} = 's1'; + S.sessions{4,2,1} = 's2'; + S.sessions{4,3,1} = 's3'; + S.sessions{4,4,1} = 's4'; + S.sessions{4,5,1} = 's5'; + S.sessions{4,6,1} = 's6'; + S.sessions{4,7,1} = 's7'; + S.sessions{4,8,1} = 's8'; + S.sessions{4,9,1} = 's9'; + S.sessions{4,10,1} = 's10'; + + %ERRP dataset + S.sessions{5,1,1} = 'EEG_s1.mat'; + S.sessions{5,2,1} = 'EEG_s2.mat'; + S.sessions{5,3,1} = 'EEG_s3.mat'; + S.sessions{5,4,1} = 'EEG_s4.mat'; + S.sessions{5,5,1} = 'EEG_s5.mat'; + S.sessions{5,6,1} = 'EEG_s6.mat'; + S.sessions{5,7,1} = 'EEG_s7.mat'; + S.sessions{5,8,1} = 'EEG_s8.mat'; + + S.sessions{6,1,1} = 'dataset_BCIcomp1.mat'; + + S.sessions{7,1,1} = 'B01T.mat'; + S.sessions{7,1,2} = 'B01T.mat'; + S.sessions{7,2,1} = 'B02T.mat'; + S.sessions{7,2,2} = 'B02T.mat'; + S.sessions{7,3,1} = 'B03T.mat'; + S.sessions{7,3,2} = 'B03T.mat'; + S.sessions{7,4,1} = 'B04T.mat'; + S.sessions{7,4,2} = 'B04T.mat'; + S.sessions{7,5,1} = 'B05T.mat'; + S.sessions{7,5,2} = 'B05T.mat'; + S.sessions{7,6,1} = 'B06T.mat'; + S.sessions{7,6,2} = 'B06T.mat'; + S.sessions{7,7,1} = 'B07T.mat'; + S.sessions{7,7,2} = 'B07T.mat'; + S.sessions{7,8,1} = 'B08T.mat'; + S.sessions{7,8,2} = 'B08T.mat'; + S.sessions{7,9,1} = 'B09T.mat'; + S.sessions{7,9,2} = 'B09T.mat'; + + %MI dataset + % S.sessions{6,1,1} = ; + + + S.subjectids = []; + S.sessionids = []; + end + function S = loadAll(S,experiment) + %loads everything + [~,l,~] = size(S.sessions); + h = waitbar(0,'Loading...'); + for i=1:l + waitbar(i/l,h,'Loading...'); + S.loadSubject(experiment,i); + end + close(h); + end + + function S = loadSubject(S,experiment,subject) + %loads all trials for a specific subject + % + %Example: + % session.loadSubject(1); + %loads all the trials of the 1st subject + [~,~, y] = size(S.sessions); + for i=1:y + if ~isempty(S.sessions{experiment,subject,i}) + S.loadSubjectSession(experiment,subject,i); + end + end + end + function S = loadSubjectSession(S,experiment,subject,session) + %loads all trials for a specific session + % + %Example: + % session.loadSubjectSession(1,2); + %loads the 2nd session of the 1st subject + % + switch(experiment) + case 1 + %Load Dataset I (SINGLE) + load(S.sessions{experiment,subject,session}); + signal = eval('eeg'); + numTrials = length(S.trials) + 1; + curTrials = S.split(signal,DIN_1,subject,session); + for i=1:length(curTrials) + S.trials{numTrials} = curTrials{i}; + numTrials = numTrials + 1; + end + case 2 + %Load Dataset II (MULTI) + load(S.sessions{experiment,subject,session}); + signal = eval('eeg'); + numTrials = length(S.trials) + 1; + curTrials = S.split(signal,DIN_1,subject,session,labels); + for i=1:length(curTrials) + S.trials{numTrials} = curTrials{i}; + numTrials = numTrials + 1; + end + case 3 + %Dataset III (EPOC-MULTI) + SAMPLING_RATE = 128; + load(strcat(S.sessions{experiment,subject,session},'i')); + events = eval('events'); + marks = events(events(:,2)==32779,3); + stops = events(events(:,2)==32780,3); + numTrials = length(S.trials) + 1; + labels = {4,2,3,5,1,2,5,4,2,3,1,5}; + for i=1:length(marks) + signal = eeg(:,marks(i):stops(i) -1); + label = labels{i}; + S.trials{numTrials} = eegtoolkit.util.Trial(signal,label,SAMPLING_RATE,subject,session,eegtoolkit.util.Trial.SSVEP); + numTrials = numTrials + 1; + S.subjectids = [S.subjectids subject]; + S.sessionids = [S.sessionids session]; + end + %load part 2 + load(strcat(S.sessions{experiment,subject,session},'ii')); + events = eval('events'); + marks = events(events(:,2)==32779,3); + stops = events(events(:,2)==32780,3); + numTrials = length(S.trials) + 1; + labels = {4,3,2,4,1,2,5,3,4,1,3,1,3}; + for i=1:length(marks) + signal = eeg(:,marks(i):stops(i) -1); + label = labels{i}; + S.trials{numTrials} = eegtoolkit.util.Trial(signal,label,SAMPLING_RATE,subject,session,eegtoolkit.util.Trial.SSVEP); + numTrials = numTrials + 1; + S.subjectids = [S.subjectids subject]; + S.sessionids = [S.sessionids session]; + end + case 4 + %SCCN Dataset + SAMPLING_RATE = 256; + load(S.sessions{experiment,subject,session}); + [x,y,z,zz] = size(eeg); + numTrials = length(S.trials) + 1; + for i=1:x + for j=1:zz + S.trials{numTrials} = eegtoolkit.util.Trial(squeeze(eeg(i,:,:,j)),i,SAMPLING_RATE,subject,j); + numTrials = numTrials+1; + S.subjectids = [S.subjectids subject]; + S.sessionids = [S.sessionids j]; + end + end + case 5 + %ERRP Dataset + SAMPLING_RATE = 256; + %range of trial in milliseconds based on the stimulus + %event + range = [200,800]; + xstart = round(range(1)*SAMPLING_RATE/1000)-1500; + xend = round(range(2)*SAMPLING_RATE/1000); + load(S.sessions{experiment,subject,session}); + events = {'correct_movement', 'error_movement'}; + numTrials = length(S.trials) + 1; + for ev=1:length(events) + idxev = find(strcmp(EEG.events.name, events{ev})); + epochs.(events{ev}) = zeros(length(xstart:xend), size(EEG.signal,2), length(idxev)); + for i=1:length(idxev) + epochs.(events{ev})(:,:,i) = EEG.signal(EEG.events.position(idxev(i))+xstart:EEG.events.position(idxev(i))+xend,:); + end + GrandAverages.(events{ev}) = mean(epochs.(events{ev}),3); + end + [~,~,numCorrect] = size(epochs.correct_movement); + [~,~,numError] = size(epochs.error_movement); + for i=1:numCorrect + S.trials{numTrials} = eegtoolkit.util.Trial(squeeze(epochs.correct_movement(:,:,i))',1,SAMPLING_RATE,subject,session,eegtoolkit.util.Trial.ERRP); + numTrials = numTrials + 1; + S.subjectids = [S.subjectids subject]; + S.sessionids = [S.sessionids session]; + + end + for i=1:numError + S.trials{numTrials} = eegtoolkit.util.Trial(squeeze(epochs.error_movement(:,:,i))',2,SAMPLING_RATE,subject,session,eegtoolkit.util.Trial.ERRP); + numTrials = numTrials + 1; + S.subjectids = [S.subjectids subject]; + S.sessionids = [S.sessionids session]; + end + case 6 + load(S.sessions{experiment,subject,session}); + [~,~,n] = size(x_train); + numTrials = length(S.trials) + 1; + for i=1:n + signal = squeeze(x_train(:,:,i)); + label = y_train(i); + S.trials{numTrials} = eegtoolkit.util.Trial(signal',label,128,1,1,eegtoolkit.util.Trial.MI); + S.subjectids = [S.subjectids subject]; + S.sessionids = [S.sessionids session]; + numTrials = numTrials + 1; + end + case 7 + load(S.sessions{experiment,subject,session}); + [trialsegm,labels] = segmentGratzB(data{session},0.5,2.5,250); + [n,~,~] = size(trialsegm); + numTrials = length(S.trials) + 1; + for i=1:n + signal = squeeze(trialsegm(i,:,:)); + label = labels(i); + S.trials{numTrials} = eegtoolkit.util.Trial(signal',label,250,subject,session,eegtoolkit.util.Trial.MI); + S.subjectids = [S.subjectids subject]; + S.sessionids = [S.sessionids session]; + numTrials = numTrials + 1; + end + otherwise + error('invalid experiment id'); + end + end + + function S = clearData(S) + %clears loaded data + S.trials = {}; + S.subjectids = []; + S.sessionids = []; + end + end + + methods (Access = private) + function trials = split(S, signal, dins, subjectid, session,labels) + SAMPLING_RATE = 250; + timestamps = cell2mat(dins(2,:)); + samples = cell2mat(dins(4,:)); + [a numDins ]= size(dins); + sampleA= samples(1); + timeA = timestamps(1); + previous = timestamps(1); + ranges = []; + freqs = []; + times = []; + sum = 0; + count = 0; + i=2; + for i=2:numDins + current = timestamps(i); + if(current - previous) > S.THRESHOLD_SPLIT_MILLIS; + sampleB = samples(i-1); + timeB = timestamps(i-1); + freqs = [freqs; (sum/count)]; + % don't ask why + if(sampleB - sampleA>382) + ranges = [ranges ; [sampleA (sampleA+1249)]]; + times = [times; [timeA timeB]]; + end + sampleA = samples(i); + timeA = timestamps(i); + sum = 0; + count = 0; + else + sum = sum + (current-previous); + count = count +1; + end + previous = timestamps(i); + end + % if(isempty(labels)) + sampleB = samples(i-1); + timeB = timestamps(i-1); + freqs = [freqs; (sum/count)]; + ranges = [ranges; [sampleA sampleA+1249]]; + times = [times; [timeA timeB]]; + freqs = freqs*2; + freqs = 1000./freqs; + % end + [numSplits a] = size(ranges); + trials = {}; + i = 1; + for i=1:numSplits + if(nargin>5) + trials{i} = eegtoolkit.util.Trial(signal(:, ranges(i,1):ranges(i,2)), labels{i},SAMPLING_RATE, subjectid,session,eegtoolkit.util.Trial.SSVEP); + S.subjectids = [S.subjectids subjectid]; + S.sessionids = [S.sessionids session]; + else + trials{i} = eegtoolkit.util.Trial(signal(:,ranges(i,1):ranges(i,2)), freqs(i), SAMPLING_RATE, subjectid,session,eegtoolkit.util.Trial.SSVEP); + S.subjectids = [S.subjectids subjectid]; + S.sessionids = [S.sessionids session]; + end + end + end + + + end +end + diff --git a/doc/+eegtoolkit/+util/@Session/graph.dot b/doc/+eegtoolkit/+util/@Session/graph.dot new file mode 100644 index 0000000..3d285ba --- /dev/null +++ b/doc/+eegtoolkit/+util/@Session/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + Session -> Session; + + Session [URL="Session.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@Session/graph.html b/doc/+eegtoolkit/+util/@Session/graph.html new file mode 100644 index 0000000..f8dff3a --- /dev/null +++ b/doc/+eegtoolkit/+util/@Session/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+util/@Session + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@Session >
    +

    Dependency Graph for ./+eegtoolkit/+util/@Session

    + +
    +Dependency Graph for ./+eegtoolkit/+util/@Session + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@Session/graph.map b/doc/+eegtoolkit/+util/@Session/graph.map new file mode 100644 index 0000000..921f312 --- /dev/null +++ b/doc/+eegtoolkit/+util/@Session/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+util/@Session/graph.png b/doc/+eegtoolkit/+util/@Session/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..487d6f6855e31145795c8973c281dd4d7fd29873 GIT binary patch literal 3990 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 + + + Index for Directory ./+eegtoolkit/+util/@Session + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@Session >
    + +

    Index for ./+eegtoolkit/+util/@Session

    + +

    Matlab files in this directory:

    + +
     SessionSESSION class
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@Trial/Trial.html b/doc/+eegtoolkit/+util/@Trial/Trial.html new file mode 100644 index 0000000..5c35357 --- /dev/null +++ b/doc/+eegtoolkit/+util/@Trial/Trial.html @@ -0,0 +1,115 @@ + + + + Description of Trial + + + + + + + + + +
    Home > +eegtoolkit > +util > @Trial > Trial.m
    + + + +

    Trial +

    + +

    PURPOSE ^

    +
    A class that defines a Trial
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
     A class that defines a Trial
    + 
    + Properties:
    + signal: the signal of the trial, matrix m x n, where m is the channels
    + and n the samples
    + label: a label for the trial (typically assigned with the frequency that is calculated using DIN data)
    + duration: the duration of the trial in seconds
    + samplingRate: the samling rate used to capture the signal
    + subjectid: the subject from whom the trial was recorded
    + sessionid: the session id
    + type: the type of the trial. Supported types of trials:
    + SSVEP = 1;
    + ERRP = 2;
    + MI = 3;
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    • Trial A class that defines a Trial
    +This function is called by: +
      +
    • Trial A class that defines a Trial
    + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    Trial.m

    +

    SOURCE CODE ^

    +
    0001 % A class that defines a Trial
    +0002 %
    +0003 % Properties:
    +0004 % signal: the signal of the trial, matrix m x n, where m is the channels
    +0005 % and n the samples
    +0006 % label: a label for the trial (typically assigned with the frequency that is calculated using DIN data)
    +0007 % duration: the duration of the trial in seconds
    +0008 % samplingRate: the samling rate used to capture the signal
    +0009 % subjectid: the subject from whom the trial was recorded
    +0010 % sessionid: the session id
    +0011 % type: the type of the trial. Supported types of trials:
    +0012 % SSVEP = 1;
    +0013 % ERRP = 2;
    +0014 % MI = 3;
    +0015 
    +0016 classdef Trial < handle
    +0017     
    +0018     
    +0019     properties (Constant)
    +0020         %Type of trial
    +0021         SSVEP = 1;
    +0022         ERRP = 2;
    +0023         MI = 3;
    +0024     end
    +0025     
    +0026     properties (Access = public)
    +0027         signal; % the signal of the trial
    +0028         label; % a label for the trial (typically assigned with the frequency that is calculated using DIN data)
    +0029         duration; % the duration of the trial in seconds
    +0030         samplingRate; % the samling rate used to capture the signal
    +0031         subjectid; %the subject from
    +0032         sessionid; %the session id
    +0033         type;
    +0034     end
    +0035     
    +0036     methods (Access = public)
    +0037         function T = Trial(signal, label, samplingRate, subjectID, sessionID,type)
    +0038             T.signal = signal;
    +0039             T.label = label;
    +0040             T.samplingRate = samplingRate;
    +0041             T.duration = length(signal)/samplingRate;
    +0042             T.subjectid = subjectID;
    +0043             T.sessionid = sessionID;
    +0044             if nargin>5
    +0045                 T.type = type;
    +0046             end
    +0047         end
    +0048         
    +0049     end
    +0050     
    +0051 end
    +0052
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@Trial/Trial.m b/doc/+eegtoolkit/+util/@Trial/Trial.m new file mode 100644 index 0000000..f3a4b06 --- /dev/null +++ b/doc/+eegtoolkit/+util/@Trial/Trial.m @@ -0,0 +1,52 @@ +% A class that defines a Trial +% +% Properties: +% signal: the signal of the trial, matrix m x n, where m is the channels +% and n the samples +% label: a label for the trial (typically assigned with the frequency that is calculated using DIN data) +% duration: the duration of the trial in seconds +% samplingRate: the samling rate used to capture the signal +% subjectid: the subject from whom the trial was recorded +% sessionid: the session id +% type: the type of the trial. Supported types of trials: +% SSVEP = 1; +% ERRP = 2; +% MI = 3; + +classdef Trial < handle + + + properties (Constant) + %Type of trial + SSVEP = 1; + ERRP = 2; + MI = 3; + end + + properties (Access = public) + signal; % the signal of the trial + label; % a label for the trial (typically assigned with the frequency that is calculated using DIN data) + duration; % the duration of the trial in seconds + samplingRate; % the samling rate used to capture the signal + subjectid; %the subject from + sessionid; %the session id + type; + end + + methods (Access = public) + function T = Trial(signal, label, samplingRate, subjectID, sessionID,type) + T.signal = signal; + T.label = label; + T.samplingRate = samplingRate; + T.duration = length(signal)/samplingRate; + T.subjectid = subjectID; + T.sessionid = sessionID; + if nargin>5 + T.type = type; + end + end + + end + +end + diff --git a/doc/+eegtoolkit/+util/@Trial/graph.dot b/doc/+eegtoolkit/+util/@Trial/graph.dot new file mode 100644 index 0000000..f5d038e --- /dev/null +++ b/doc/+eegtoolkit/+util/@Trial/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + Trial -> Trial; + + Trial [URL="Trial.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@Trial/graph.html b/doc/+eegtoolkit/+util/@Trial/graph.html new file mode 100644 index 0000000..150af9a --- /dev/null +++ b/doc/+eegtoolkit/+util/@Trial/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for ./+eegtoolkit/+util/@Trial + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@Trial >
    +

    Dependency Graph for ./+eegtoolkit/+util/@Trial

    + +
    +Dependency Graph for ./+eegtoolkit/+util/@Trial + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@Trial/graph.map b/doc/+eegtoolkit/+util/@Trial/graph.map new file mode 100644 index 0000000..ec38555 --- /dev/null +++ b/doc/+eegtoolkit/+util/@Trial/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+util/@Trial/graph.png b/doc/+eegtoolkit/+util/@Trial/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..7e10bd45c2ed06e381291236b9db141d0cbe1700 GIT binary patch literal 3300 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 NG1N2Ft=Dml{~vvUYN`ML literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+util/@Trial/index.html b/doc/+eegtoolkit/+util/@Trial/index.html new file mode 100644 index 0000000..0894d44 --- /dev/null +++ b/doc/+eegtoolkit/+util/@Trial/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory ./+eegtoolkit/+util/@Trial + + + + + + + + + + +
    < Master indexIndex for ./+eegtoolkit/+util/@Trial >
    + +

    Index for ./+eegtoolkit/+util/@Trial

    + +

    Matlab files in this directory:

    + +
     TrialA class that defines a Trial
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/alpha.png b/doc/alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..c73de7b05000443a0842f2e915d30dc5efec0dd1 GIT binary patch literal 273 zcmV+s0q*{ZP)z zQ4WJJ2!`q6(c~&{CcFyX%{{O*3+<>*r)K@)L#;sgtx%hY2zp`w01>%5jgw&J!A6Ov z{oxj&d7k&j`4Qtd0>I2H(i=Rwz9Tqxf(W|?ki|=ctL(aA|es#WFKbc?zg4C=hd_}m12PXzTKJB+iB?u XpQ?QQ=I-(g00000NkvXXu0mjf#?^X; literal 0 HcmV?d00001 diff --git a/doc/c++.png b/doc/c++.png new file mode 100644 index 0000000000000000000000000000000000000000..24f56e6293df813f7699555d0fdd0224a33bdac9 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^0YJ>p!2~4#tiFE(NUrMq>1fP(BLp1!W^mpLQ_Wwp7rPrm~SUGa2r45^s&cKTi3W&@s7VZD}9S!LiPTl|j(*)-gYW;;XAZ?5N!pnK5hG z+s}VG5+xWO6mIF=yOWvujML^HlXZ+Yu?Qyj=7(iWd!%tXIGN|}`LH!?g3;OMg0piY zXCLcLf98Km#%@Dm=Gw_oB65#C&Ig=Xv$e7}bMZ3wpl2`Gw(%Wrdp_NvM0oStJBj<- zw>I9sUd+GU{%T3g&-nYj{hnNcohMx1C8q6LzjX6wt1Wi%t17>Iemh??{C9K})9DTU VtbG#CZUOzr;OXk;vd$@?2>_TKh~WSL literal 0 HcmV?d00001 diff --git a/doc/c.png b/doc/c.png new file mode 100644 index 0000000000000000000000000000000000000000..c39fbf0e25ee296c5da082458363c45d945e55ac GIT binary patch literal 252 zcmVqm`?`neZy@-MWWPW6I1ran`JUPt^Pp2nEy;5sZWf01@dO#z`=%5EER@AM$q-T7II}~u7He5MzB*^2($9;r8$^sTRx!mG z*Y={Rp11gKlvQkAY5N${nZR6`uQXd6Q{e@Bh2dQhbZ(t1?070Ye8{5GRQ*|k);Is- zyZYFOBO(zQWDhg*y_Wu+*U+*r-a`3&yE1OHzojSttaK8#KYM}z0000F(pUKia5*{N xtO-?WJ(Rf1$C7KR)AZ0H0j(>SR=H$6kJ)6-DZGJ)<+b45x|97Z4cdwf)&TUlSJMCh literal 0 HcmV?d00001 diff --git a/doc/down.png b/doc/down.png new file mode 100644 index 0000000000000000000000000000000000000000..d41104a26f3d09deda6ab54281affd82c981abb1 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^{2gTe~DWM4fiX0)Z literal 0 HcmV?d00001 diff --git a/doc/doxysearch.php b/doc/doxysearch.php new file mode 100644 index 0000000..36112a4 --- /dev/null +++ b/doc/doxysearch.php @@ -0,0 +1,329 @@ +$word, + "match"=>$w, + "index"=>$statIdx, + "full"=>strlen($w)==strlen($word), + "docs"=>array() + ); + } + $w = readString($file); + } + $totalFreq=0; + for ($count=$start;$count$idx,"freq"=>$freq,"rank"=>0.0); + $totalFreq+=$freq; + if ($statInfo["full"]) $totalfreq+=$freq; + } + // read name an url info for the doc + for ($i=0;$i<$numDocs;$i++) + { + fseek($file,$docInfo[$i]["idx"]); + $docInfo[$i]["name"]=readString($file); + $docInfo[$i]["url"]=readString($file); + } + $statInfo["docs"]=$docInfo; + } + for ($count=$start;$count$key, + "name"=>$di["name"], + "rank"=>$rank + ); + } + $docs[$key]["words"][] = array( + "word"=>$wordInfo["word"], + "match"=>$wordInfo["match"], + "freq"=>$di["freq"] + ); + } + } + return $docs; +} + +function normalize_ranking(&$docs) +{ + $maxRank = 0.0000001; + // compute maximal rank + foreach ($docs as $doc) + { + if ($doc["rank"]>$maxRank) + { + $maxRank=$doc["rank"]; + } + } + reset($docs); + // normalize rankings + while (list ($key, $val) = each ($docs)) + { + $docs[$key]["rank"]*=100/$maxRank; + } +} + +function filter_results($docs,&$requiredWords,&$forbiddenWords) +{ + $filteredDocs=array(); + while (list ($key, $val) = each ($docs)) + { + $words = &$docs[$key]["words"]; + $copy=1; // copy entry by default + if (sizeof($requiredWords)>0) + { + foreach ($requiredWords as $reqWord) + { + $found=0; + foreach ($words as $wordInfo) + { + $found = $wordInfo["word"]==$reqWord; + if ($found) break; + } + if (!$found) + { + $copy=0; // document contains none of the required words + break; + } + } + } + if (sizeof($forbiddenWords)>0) + { + foreach ($words as $wordInfo) + { + if (in_array($wordInfo["word"],$forbiddenWords)) + { + $copy=0; // document contains a forbidden word + break; + } + } + } + if ($copy) $filteredDocs[$key]=$docs[$key]; + } + return $filteredDocs; +} + +function compare_rank($a,$b) +{ + return ($a["rank"]>$b["rank"]) ? -1 : 1; +} + +function sort_results($docs,&$sorted) +{ + $sorted = $docs; + usort($sorted,"compare_rank"); + return $sorted; +} + +function report_results(&$docs) +{ + echo "\n"; + echo " \n"; + echo " \n"; + echo " \n"; + $numDocs = sizeof($docs); + if ($numDocs==0) + { + echo " \n"; + echo " \n"; + echo " \n"; + } + else + { + echo " \n"; + echo " \n"; + echo " \n"; + $num=1; + foreach ($docs as $doc) + { + echo " \n"; + echo " "; + echo "\n"; + echo " \n"; + echo " \n"; + echo " \n"; + $num++; + } + } + echo "

    Search Results

    ".matches_text(0)."
    ".matches_text($numDocs); + echo "\n"; + echo "
    $num.".$doc["name"]."
    Matches: "; + foreach ($doc["words"] as $wordInfo) + { + $word = $wordInfo["word"]; + $matchRight = substr($wordInfo["match"],strlen($word)); + echo "$word$matchRight(".$wordInfo["freq"].") "; + } + echo "
    \n"; +} + +function matches_text($num) +{ + if ($num==0) + { + return 'Sorry, no documents matching your query.'; + } + else if ($num==1) + { + return 'Found 1 document matching your query.'; + } + else // $num>1 + { + return 'Found '.$num.' documents matching your query. Showing best matches first.'; + } +} + +function main($idxfile) +{ + if(strcmp('4.1.0', phpversion()) > 0) + { + die("Error: PHP version 4.1.0 or above required!"); + } + if (!($file=fopen($idxfile,"rb"))) + { + die("Error: Search index file could NOT be opened!"); + } + if (readHeader($file)!="DOXS") + { + die("Error: Header of index file is invalid!"); + } + $query=""; + if (array_key_exists("query", $_GET)) + { + $query=$_GET["query"]; + } + $results = array(); + $requiredWords = array(); + $forbiddenWords = array(); + $foundWords = array(); + $word=strtolower(strtok($query," ")); + while ($word) // for each word in the search query + { + if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; } + if (($word{0}=='-')) { $word=substr($word,1); $forbiddenWords[]=$word; } + if (!in_array($word,$foundWords)) + { + $foundWords[]=$word; + search($file,$word,$results); + } + $word=strtolower(strtok(" ")); + } + $docs = array(); + combine_results($results,$docs); + // filter out documents with forbidden word or that do not contain + // required words + $filteredDocs = filter_results($docs,$requiredWords,$forbiddenWords); + // normalize rankings so they are in the range [0-100] + normalize_ranking($filteredDocs); + // sort the results based on rank + $sorted = array(); + sort_results($filteredDocs,$sorted); + // report results to the user + report_results($sorted); + fclose($file); +} + +?> diff --git a/doc/exampleCSP.html b/doc/exampleCSP.html new file mode 100644 index 0000000..b25686a --- /dev/null +++ b/doc/exampleCSP.html @@ -0,0 +1,87 @@ + + + + Description of exampleCSP + + + + + + + + + +
    Home > . > exampleCSP.m
    + + + +

    exampleCSP +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleCSP.m

    +

    SOURCE CODE ^

    +
    0001 sess = eegtoolkit.util.Session;
    +0002 sess.loadAll(6);
    +0003 %
    +0004 
    +0005 % load('testingMotorVag1');
    +0006 % % load
    +0007 % sess = eegtoolkit.util.Session;
    +0008 % % sess.loadMOTOR(labels,trials);
    +0009 % sess.loadVag(trials,labels);
    +0010 
    +0011 ss = eegtoolkit.preprocessing.SampleSelection;
    +0012 ss.channels = [1,3];
    +0013 ss.sampleRange = [384,896];
    +0014 
    +0015 [z,p,k]=butter(3,[8,16]/64);
    +0016 [s,g]=zp2sos(z,p,k);
    +0017 Hd = dfilt.df2sos(s,g);
    +0018 df = eegtoolkit.preprocessing.DigitalFilter; %
    +0019 df.filt = Hd;
    +0020 
    +0021 refer = eegtoolkit.preprocessing.Rereferencing;
    +0022 refer.meanSignal = 1;
    +0023 
    +0024 extr = eegtoolkit.featextraction.RawSignal;
    +0025 
    +0026 classif = eegtoolkit.classification.CSPWrapper;
    +0027 classif.baseClassifier = eegtoolkit.classification.LIBSVM;
    +0028 
    +0029 experiment = eegtoolkit.experiment.Experimenter;
    +0030 experiment.session = sess;
    +0031 experiment.preprocessing = {ss,refer,df};
    +0032 experiment.featextraction = extr;
    +0033 experiment.classification = classif;
    +0034 experiment.evalMethod = experiment.EVAL_METHOD_LOOCV;
    +0035 % experiment.run();
    +0036 % experiment.evalMethod = experiment.EVAL_METHOD_XFOLD_CV;
    +0037 experiment.run(3);
    +0038 accuracy = experiment.results{1}.getAccuracy();
    +0039
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleCSP.m b/doc/exampleCSP.m new file mode 100644 index 0000000..4c466b6 --- /dev/null +++ b/doc/exampleCSP.m @@ -0,0 +1,39 @@ +sess = eegtoolkit.util.Session; +sess.loadAll(6); +% + +% load('testingMotorVag1'); +% % load +% sess = eegtoolkit.util.Session; +% % sess.loadMOTOR(labels,trials); +% sess.loadVag(trials,labels); + +ss = eegtoolkit.preprocessing.SampleSelection; +ss.channels = [1,3]; +ss.sampleRange = [384,896]; + +[z,p,k]=butter(3,[8,16]/64); +[s,g]=zp2sos(z,p,k); +Hd = dfilt.df2sos(s,g); +df = eegtoolkit.preprocessing.DigitalFilter; % +df.filt = Hd; + +refer = eegtoolkit.preprocessing.Rereferencing; +refer.meanSignal = 1; + +extr = eegtoolkit.featextraction.RawSignal; + +classif = eegtoolkit.classification.CSPWrapper; +classif.baseClassifier = eegtoolkit.classification.LIBSVM; + +experiment = eegtoolkit.experiment.Experimenter; +experiment.session = sess; +experiment.preprocessing = {ss,refer,df}; +experiment.featextraction = extr; +experiment.classification = classif; +experiment.evalMethod = experiment.EVAL_METHOD_LOOCV; +% experiment.run(); +% experiment.evalMethod = experiment.EVAL_METHOD_XFOLD_CV; +experiment.run(3); +accuracy = experiment.results{1}.getAccuracy(); + diff --git a/doc/exampleCombiCCA.html b/doc/exampleCombiCCA.html new file mode 100644 index 0000000..a939c0d --- /dev/null +++ b/doc/exampleCombiCCA.html @@ -0,0 +1,93 @@ + + + + Description of exampleCombiCCA + + + + + + + + + +
    Home > . > exampleCombiCCA.m
    + + + +

    exampleCombiCCA +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleCombiCCA.m

    +

    SOURCE CODE ^

    +
    0001 m_secs = 0.5:0.5:4;
    +0002 for ii=1:8
    +0003     for jj = 1:8
    +0004         sess = eegtoolkit.util.Session;
    +0005         % sess.loadAll(4);
    +0006         % sess.loadAll(4);
    +0007         sess.loadSubject(4,ii);
    +0008         
    +0009         ss = eegtoolkit.preprocessing.SampleSelection;
    +0010         ss.channels = 1:8;
    +0011         % ss.sampleRange = [75,1024+74];
    +0012         ss.sampleRange = [75,74+256*m_secs(jj)];
    +0013         % ss.sampleRange = [1,1140];
    +0014         % 75:1024+74
    +0015         [z,p,k]=butter(3,[6,80]/128);
    +0016         [s,g]=zp2sos(z,p,k);
    +0017         Hd = dfilt.df2sos(s,g);
    +0018         df = eegtoolkit.preprocessing.DigitalFilter; %
    +0019         df.filt = Hd;
    +0020         
    +0021         refer = eegtoolkit.preprocessing.Rereferencing;
    +0022         refer.meanSignal = 1;
    +0023         
    +0024         extr = eegtoolkit.featextraction.RawSignal;
    +0025         sti_f = [9.25, 11.25, 13.25, 9.75, 11.75, 13.75, 10.25, 12.25, 14.25, 10.75, 12.75, 14.75];
    +0026         classif = eegtoolkit.classification.CombiCCA(sti_f,4,256*m_secs(jj),256);
    +0027         classif.baseClassifier = eegtoolkit.classification.MaxChooser;
    +0028         
    +0029         experiment = eegtoolkit.experiment.Experimenter;
    +0030         experiment.session = sess;
    +0031         experiment.preprocessing = {ss,refer,df};
    +0032         experiment.featextraction = extr;
    +0033         experiment.classification = classif;
    +0034         % experiment.evalMethod = experiment.EVAL_METHOD_LOOCV;
    +0035         % experiment.run();
    +0036         experiment.evalMethod = experiment.EVAL_METHOD_LOBO;
    +0037         experiment.run();
    +0038         for i=1:length(experiment.results)
    +0039             accuracy(i) = experiment.results{i}.getAccuracy();
    +0040         end
    +0041         acc2(ii,jj) = mean(accuracy);
    +0042         
    +0043         % accuracy = experiment.results{1}.getAccuracy();
    +0044     end
    +0045 end
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleCombiCCA.m b/doc/exampleCombiCCA.m new file mode 100644 index 0000000..f54f361 --- /dev/null +++ b/doc/exampleCombiCCA.m @@ -0,0 +1,45 @@ +m_secs = 0.5:0.5:4; +for ii=1:8 + for jj = 1:8 + sess = eegtoolkit.util.Session; + % sess.loadAll(4); + % sess.loadAll(4); + sess.loadSubject(4,ii); + + ss = eegtoolkit.preprocessing.SampleSelection; + ss.channels = 1:8; + % ss.sampleRange = [75,1024+74]; + ss.sampleRange = [75,74+256*m_secs(jj)]; + % ss.sampleRange = [1,1140]; + % 75:1024+74 + [z,p,k]=butter(3,[6,80]/128); + [s,g]=zp2sos(z,p,k); + Hd = dfilt.df2sos(s,g); + df = eegtoolkit.preprocessing.DigitalFilter; % + df.filt = Hd; + + refer = eegtoolkit.preprocessing.Rereferencing; + refer.meanSignal = 1; + + extr = eegtoolkit.featextraction.RawSignal; + sti_f = [9.25, 11.25, 13.25, 9.75, 11.75, 13.75, 10.25, 12.25, 14.25, 10.75, 12.75, 14.75]; + classif = eegtoolkit.classification.CombiCCA(sti_f,4,256*m_secs(jj),256); + classif.baseClassifier = eegtoolkit.classification.MaxChooser; + + experiment = eegtoolkit.experiment.Experimenter; + experiment.session = sess; + experiment.preprocessing = {ss,refer,df}; + experiment.featextraction = extr; + experiment.classification = classif; + % experiment.evalMethod = experiment.EVAL_METHOD_LOOCV; + % experiment.run(); + experiment.evalMethod = experiment.EVAL_METHOD_LOBO; + experiment.run(); + for i=1:length(experiment.results) + accuracy(i) = experiment.results{i}.getAccuracy(); + end + acc2(ii,jj) = mean(accuracy); + + % accuracy = experiment.results{1}.getAccuracy(); + end +end diff --git a/doc/exampleDefault.html b/doc/exampleDefault.html new file mode 100644 index 0000000..46b5f13 --- /dev/null +++ b/doc/exampleDefault.html @@ -0,0 +1,97 @@ + + + + Description of exampleDefault + + + + + + + + + +
    Home > . > exampleDefault.m
    + + + +

    exampleDefault +

    + +

    PURPOSE ^

    +
    Load the data. Call this once outside of the script so you dont have to
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
     Load the data. Call this once outside of the script so you dont have to
    + load the data again and again. Make sure the dataset is included in your
    + Matlab path
    + sess = eegtoolkit.util.Session;
    + sess.loadAll(1); %Loads dataset I
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleDefault.m

    +

    SOURCE CODE ^

    +
    0001 % Load the data. Call this once outside of the script so you dont have to
    +0002 % load the data again and again. Make sure the dataset is included in your
    +0003 % Matlab path
    +0004 % sess = eegtoolkit.util.Session;
    +0005 % sess.loadAll(1); %Loads dataset I
    +0006 
    +0007 %Load a filter from the samples
    +0008 load filters/filt_IIRElliptic.mat;
    +0009 
    +0010 %Extract features with the pwelch method
    +0011 extr = eegtoolkit.featextraction.PWelch;
    +0012 
    +0013 refer = eegtoolkit.preprocessing.Rereferencing;
    +0014 %Subtract the mean from the signal
    +0015 refer.meanSignal = 1;
    +0016 
    +0017 ss = eegtoolkit.preprocessing.SampleSelection;
    +0018 ss.sampleRange = [1,1250]; % Specify the sample range to be used for each Trial
    +0019 ss.channels = 126; % Specify the channel(s) to be used
    +0020 
    +0021 df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data
    +0022 df.filt = Hbp; % Hbp is a filter built with "filterbuilder" matlab function
    +0023 
    +0024 %Configure the classifier
    +0025 classif = eegtoolkit.classification.LIBSVMFast;
    +0026 
    +0027 %Set the Experimenter wrapper class
    +0028 experiment = eegtoolkit.experiment.Experimenter;
    +0029 experiment.session = sess;
    +0030 % Add the preprocessing steps (order is taken into account)
    +0031 experiment.preprocessing = {ss,refer,df};
    +0032 experiment.featextraction = extr;
    +0033 experiment.classification = classif;
    +0034 experiment.evalMethod = experiment.EVAL_METHOD_LOSO; % specify that you want a "leave one subject out" (default is LOOCV)
    +0035 experiment.run();
    +0036 for i=1:length(experiment.results)
    +0037     accuracies(i) = experiment.results{i}.getAccuracy();
    +0038 end
    +0039 
    +0040 accuracies'
    +0041 %mean accuracy for all subjects
    +0042 fprintf('mean acc = %f\n', mean(accuracies));
    +0043 %get the configuration used (for reporting)
    +0044 experiment.getExperimentInfo
    +0045 experiment.getTime
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleDefault.m b/doc/exampleDefault.m new file mode 100644 index 0000000..82ea4d4 --- /dev/null +++ b/doc/exampleDefault.m @@ -0,0 +1,45 @@ +% Load the data. Call this once outside of the script so you dont have to +% load the data again and again. Make sure the dataset is included in your +% Matlab path +% sess = eegtoolkit.util.Session; +% sess.loadAll(1); %Loads dataset I + +%Load a filter from the samples +load filters/filt_IIRElliptic.mat; + +%Extract features with the pwelch method +extr = eegtoolkit.featextraction.PWelch; + +refer = eegtoolkit.preprocessing.Rereferencing; +%Subtract the mean from the signal +refer.meanSignal = 1; + +ss = eegtoolkit.preprocessing.SampleSelection; +ss.sampleRange = [1,1250]; % Specify the sample range to be used for each Trial +ss.channels = 126; % Specify the channel(s) to be used + +df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data +df.filt = Hbp; % Hbp is a filter built with "filterbuilder" matlab function + +%Configure the classifier +classif = eegtoolkit.classification.LIBSVMFast; + +%Set the Experimenter wrapper class +experiment = eegtoolkit.experiment.Experimenter; +experiment.session = sess; +% Add the preprocessing steps (order is taken into account) +experiment.preprocessing = {ss,refer,df}; +experiment.featextraction = extr; +experiment.classification = classif; +experiment.evalMethod = experiment.EVAL_METHOD_LOSO; % specify that you want a "leave one subject out" (default is LOOCV) +experiment.run(); +for i=1:length(experiment.results) + accuracies(i) = experiment.results{i}.getAccuracy(); +end + +accuracies' +%mean accuracy for all subjects +fprintf('mean acc = %f\n', mean(accuracies)); +%get the configuration used (for reporting) +experiment.getExperimentInfo +experiment.getTime diff --git a/doc/exampleEPOCCCASVM.html b/doc/exampleEPOCCCASVM.html new file mode 100644 index 0000000..45f41a8 --- /dev/null +++ b/doc/exampleEPOCCCASVM.html @@ -0,0 +1,105 @@ + + + + Description of exampleEPOCCCASVM + + + + + + + + + +
    Home > . > exampleEPOCCCASVM.m
    + + + +

    exampleEPOCCCASVM +

    + +

    PURPOSE ^

    +
    Load the data. Call this once outside of the script so you dont have to
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
     Load the data. Call this once outside of the script so you dont have to
    + load the data again and again. Make sure the dataset is included in your
    + Matlab path
    + sess = eegtoolkit.util.Session;
    + sess.loadAll(3); %its best to do this once, outside the script (too much
    + time)
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleEPOCCCASVM.m

    +

    SOURCE CODE ^

    +
    0001 % Load the data. Call this once outside of the script so you dont have to
    +0002 % load the data again and again. Make sure the dataset is included in your
    +0003 % Matlab path
    +0004 % sess = eegtoolkit.util.Session;
    +0005 % sess.loadAll(3); %its best to do this once, outside the script (too much
    +0006 % time)
    +0007 
    +0008 %Load a filter from the samples
    +0009 load filters/epocfilter;
    +0010 % 7 = O1
    +0011 % 8 = O2
    +0012 
    +0013 % Stimulus frequencies for generating the CCA reference signals
    +0014 sti_f = [12,10,8.57,7.5,6.66];
    +0015 
    +0016 % CCA feat extraction method
    +0017 extr = eegtoolkit.featextraction.CCA(sti_f,1:4,128,4);
    +0018 extr.allFeatures = 1;
    +0019 
    +0020 refer = eegtoolkit.preprocessing.Rereferencing;
    +0021 %Subtract the mean from the signal
    +0022 refer.meanSignal = 1;
    +0023 
    +0024 ss = eegtoolkit.preprocessing.SampleSelection;
    +0025 ss.sampleRange = [64,640]; % Specify the sample range to be used for each Trial
    +0026 ss.channels = 6:9; % Specify the channel(s) to be used
    +0027 
    +0028 df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data
    +0029 df.filt = Hbp; % Hbp is a filter built with "filterbuilder" matlab function
    +0030 
    +0031 %Configure the classifier
    +0032 classif = eegtoolkit.classification.LIBSVM;
    +0033 
    +0034 %Set the Experimenter wrapper class
    +0035 experiment = eegtoolkit.experiment.Experimenter;
    +0036 experiment.session = sess;
    +0037 % Add the preprocessing steps (order is taken into account)
    +0038 experiment.preprocessing = {ss,df};
    +0039 experiment.featextraction = extr;
    +0040 experiment.classification = classif;
    +0041 experiment.evalMethod = experiment.EVAL_METHOD_LOSO; % specify that you want a "leave one subject out" (default is LOOCV)
    +0042 experiment.run();
    +0043 for i=1:length(experiment.results)
    +0044     accuracies(i) = experiment.results{i}.getAccuracy();
    +0045 end
    +0046 
    +0047 accuracies'
    +0048 %mean accuracy for all subjects
    +0049 fprintf('mean acc = %f\n', mean(accuracies));
    +0050 %get the configuration used (for reporting)
    +0051 % experiment.getExperimentInfo
    +0052 % experiment.getTime
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleEPOCCCASVM.m b/doc/exampleEPOCCCASVM.m new file mode 100644 index 0000000..cc2e828 --- /dev/null +++ b/doc/exampleEPOCCCASVM.m @@ -0,0 +1,52 @@ +% Load the data. Call this once outside of the script so you dont have to +% load the data again and again. Make sure the dataset is included in your +% Matlab path +% sess = eegtoolkit.util.Session; +% sess.loadAll(3); %its best to do this once, outside the script (too much +% time) + +%Load a filter from the samples +load filters/epocfilter; +% 7 = O1 +% 8 = O2 + +% Stimulus frequencies for generating the CCA reference signals +sti_f = [12,10,8.57,7.5,6.66]; + +% CCA feat extraction method +extr = eegtoolkit.featextraction.CCA(sti_f,1:4,128,4); +extr.allFeatures = 1; + +refer = eegtoolkit.preprocessing.Rereferencing; +%Subtract the mean from the signal +refer.meanSignal = 1; + +ss = eegtoolkit.preprocessing.SampleSelection; +ss.sampleRange = [64,640]; % Specify the sample range to be used for each Trial +ss.channels = 6:9; % Specify the channel(s) to be used + +df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data +df.filt = Hbp; % Hbp is a filter built with "filterbuilder" matlab function + +%Configure the classifier +classif = eegtoolkit.classification.LIBSVM; + +%Set the Experimenter wrapper class +experiment = eegtoolkit.experiment.Experimenter; +experiment.session = sess; +% Add the preprocessing steps (order is taken into account) +experiment.preprocessing = {ss,df}; +experiment.featextraction = extr; +experiment.classification = classif; +experiment.evalMethod = experiment.EVAL_METHOD_LOSO; % specify that you want a "leave one subject out" (default is LOOCV) +experiment.run(); +for i=1:length(experiment.results) + accuracies(i) = experiment.results{i}.getAccuracy(); +end + +accuracies' +%mean accuracy for all subjects +fprintf('mean acc = %f\n', mean(accuracies)); +%get the configuration used (for reporting) +% experiment.getExperimentInfo +% experiment.getTime \ No newline at end of file diff --git a/doc/exampleERRP.html b/doc/exampleERRP.html new file mode 100644 index 0000000..80d30c3 --- /dev/null +++ b/doc/exampleERRP.html @@ -0,0 +1,91 @@ + + + + Description of exampleERRP + + + + + + + + + +
    Home > . > exampleERRP.m
    + + + +

    exampleERRP +

    + +

    PURPOSE ^

    +
    d2 = designfilt('bandpassiir', 'SampleRate', 256, 'FilterOrder', 8 ,'HalfPowerFrequency1', 1, 'HalfPowerFrequency2', 10,'DesignMethod', 'butter');
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
     d2 = designfilt('bandpassiir', 'SampleRate', 256, 'FilterOrder', 8 ,'HalfPowerFrequency1', 1, 'HalfPowerFrequency2', 10,'DesignMethod', 'butter');
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleERRP.m

    +

    SOURCE CODE ^

    +
    0001 % d2 = designfilt('bandpassiir', 'SampleRate', 256, 'FilterOrder', 8 ,'HalfPowerFrequency1', 1, 'HalfPowerFrequency2', 10,'DesignMethod', 'butter');
    +0002 
    +0003 sess = eegtoolkit.util.Session;
    +0004 sess.loadSubject(5,6);
    +0005 
    +0006 [z,p,k]=butter(3,[6,40]/128);
    +0007 [s,g]=zp2sos(z,p,k);
    +0008 Hd = dfilt.df2sos(s,g);
    +0009 df = eegtoolkit.preprocessing.DigitalFilter; %
    +0010 df.filt = Hd;
    +0011 
    +0012 ss = eegtoolkit.preprocessing.SampleSelection;
    +0013 ss.channels = [4,9,14];
    +0014 ss.sampleRange = 1500:1:1655;
    +0015 
    +0016 extr = {};
    +0017 for i=1:3
    +0018     extr{i} = eegtoolkit.featextraction.ERRPFeatures;
    +0019     extr{i}.channel = 1;
    +0020 end
    +0021 
    +0022 aggr = eegtoolkit.aggregation.ChannelConcat;
    +0023 
    +0024 classif = eegtoolkit.classification.LIBSVM;
    +0025 
    +0026 %Setup experiment
    +0027 experiment = eegtoolkit.experiment.Experimenter;
    +0028 experiment.session = sess;
    +0029 experiment.preprocessing = {df,ss};
    +0030 experiment.featextraction = extr;
    +0031 experiment.aggregator = aggr;
    +0032 experiment.classification = classif;
    +0033 experiment.evalMethod = experiment.EVAL_METHOD_XFOLD_CV;
    +0034 
    +0035 experiment.run(10);
    +0036 
    +0037 accuracies = [];
    +0038 for i=1:length(experiment.results)
    +0039     accuracies(i) = experiment.results{i}.getAccuracy();
    +0040 end
    +0041 
    +0042 accuracies'
    +0043 fprintf('mean acc = %.2f\n',mean(accuracies));
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleERRP.m b/doc/exampleERRP.m new file mode 100644 index 0000000..2723761 --- /dev/null +++ b/doc/exampleERRP.m @@ -0,0 +1,43 @@ +% d2 = designfilt('bandpassiir', 'SampleRate', 256, 'FilterOrder', 8 ,'HalfPowerFrequency1', 1, 'HalfPowerFrequency2', 10,'DesignMethod', 'butter'); + +sess = eegtoolkit.util.Session; +sess.loadSubject(5,6); + +[z,p,k]=butter(3,[6,40]/128); +[s,g]=zp2sos(z,p,k); +Hd = dfilt.df2sos(s,g); +df = eegtoolkit.preprocessing.DigitalFilter; % +df.filt = Hd; + +ss = eegtoolkit.preprocessing.SampleSelection; +ss.channels = [4,9,14]; +ss.sampleRange = 1500:1:1655; + +extr = {}; +for i=1:3 + extr{i} = eegtoolkit.featextraction.ERRPFeatures; + extr{i}.channel = 1; +end + +aggr = eegtoolkit.aggregation.ChannelConcat; + +classif = eegtoolkit.classification.LIBSVM; + +%Setup experiment +experiment = eegtoolkit.experiment.Experimenter; +experiment.session = sess; +experiment.preprocessing = {df,ss}; +experiment.featextraction = extr; +experiment.aggregator = aggr; +experiment.classification = classif; +experiment.evalMethod = experiment.EVAL_METHOD_XFOLD_CV; + +experiment.run(10); + +accuracies = []; +for i=1:length(experiment.results) + accuracies(i) = experiment.results{i}.getAccuracy(); +end + +accuracies' +fprintf('mean acc = %.2f\n',mean(accuracies)); \ No newline at end of file diff --git a/doc/exampleEarlyFusion.html b/doc/exampleEarlyFusion.html new file mode 100644 index 0000000..2ac0e86 --- /dev/null +++ b/doc/exampleEarlyFusion.html @@ -0,0 +1,123 @@ + + + + Description of exampleEarlyFusion + + + + + + + + + +
    Home > . > exampleEarlyFusion.m
    + + + +

    exampleEarlyFusion +

    + +

    PURPOSE ^

    +
    Leave one subject out testing
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
     Leave one subject out testing
    + load filtMAMEM; % load a filter
    + sess = eegtoolkit.util.Session(Hhp);
    + sess.loadAll(1); %its best to do this once, outside the script (too much
    + time)
    + transf = eegtoolkit.transformer.PWelchTransformer();
    + Load the data. Call this once outside of the script so you dont have to
    + load the data again and again. Make sure the dataset is included in your
    + Matlab path
    + sess = eegtoolkit.util.Session;
    + sess.loadAll(1); %Loads dataset I
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleEarlyFusion.m

    +

    SOURCE CODE ^

    +
    0001 % Leave one subject out testing
    +0002 % load filtMAMEM; % load a filter
    +0003 % sess = eegtoolkit.util.Session(Hhp);
    +0004 % sess.loadAll(1); %its best to do this once, outside the script (too much
    +0005 % time)
    +0006 % transf = eegtoolkit.transformer.PWelchTransformer();
    +0007 % Load the data. Call this once outside of the script so you dont have to
    +0008 % load the data again and again. Make sure the dataset is included in your
    +0009 % Matlab path
    +0010 % sess = eegtoolkit.util.Session;
    +0011 % sess.loadAll(1); %Loads dataset I
    +0012 
    +0013 %Load a filter from the samples
    +0014 load filters/filt_IIRElliptic;
    +0015 
    +0016 
    +0017 
    +0018 refer = eegtoolkit.preprocessing.Rereferencing;
    +0019 %Subtract the mean from the signal
    +0020 refer.meanSignal = 1;
    +0021 
    +0022 ss = eegtoolkit.preprocessing.SampleSelection;
    +0023 ss.sampleRange = [1,1250]; % Specify the sample range to be used for each Trial
    +0024 ss.channels = [138,139,150]; % Specify the channel(s) to be used
    +0025 
    +0026 df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data
    +0027 df.filt = Hbp; % Hbp is a filter built with "filterbuilder" matlab function
    +0028 
    +0029 
    +0030 %Extract features with the pwelch method
    +0031 extr1 = eegtoolkit.featextraction.PWelch;
    +0032 extr1.channel = 1; %will use channel 138
    +0033 
    +0034 extr2 = eegtoolkit.featextraction.PWelch;
    +0035 extr2.channel = 2; %will use channel 139
    +0036 
    +0037 extr3 = eegtoolkit.featextraction.PWelch;
    +0038 extr3.channel = 3; %will use channel 150
    +0039 
    +0040 extr = {extr1,extr2,extr3};
    +0041 % Average all three channels so as to get a new feature vector
    +0042 aggr = eegtoolkit.aggregation.ChannelAveraging;
    +0043 %Configure the classifier
    +0044 classif = eegtoolkit.classification.LIBSVM;
    +0045 
    +0046 %Set the Experimenter wrapper class
    +0047 experiment = eegtoolkit.experiment.Experimenter;
    +0048 experiment.session = sess;
    +0049 % Add the preprocessing steps (order is taken into account)
    +0050 experiment.preprocessing = {ss,refer,df};
    +0051 experiment.featextraction = {extr1,extr2,extr3};
    +0052 experiment.aggregator = aggr;
    +0053 experiment.classification = classif;
    +0054 experiment.evalMethod = experiment.EVAL_METHOD_LOSO; % specify that you want a "leave one subject out" (default is LOOCV)
    +0055 experiment.run();
    +0056 for i=1:length(experiment.results)
    +0057     accuracies(i) = experiment.results{i}.getAccuracy();
    +0058 end
    +0059 
    +0060 accuracies'
    +0061 %mean accuracy for all subjects
    +0062 fprintf('mean acc = %f\n', mean(accuracies));
    +0063 %get the configuration used (for reporting)
    +0064 experiment.getExperimentInfo
    +0065 experiment.getTime
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleEarlyFusion.m b/doc/exampleEarlyFusion.m new file mode 100644 index 0000000..e3e79b4 --- /dev/null +++ b/doc/exampleEarlyFusion.m @@ -0,0 +1,65 @@ +% Leave one subject out testing +% load filtMAMEM; % load a filter +% sess = eegtoolkit.util.Session(Hhp); +% sess.loadAll(1); %its best to do this once, outside the script (too much +% time) +% transf = eegtoolkit.transformer.PWelchTransformer(); +% Load the data. Call this once outside of the script so you dont have to +% load the data again and again. Make sure the dataset is included in your +% Matlab path +% sess = eegtoolkit.util.Session; +% sess.loadAll(1); %Loads dataset I + +%Load a filter from the samples +load filters/filt_IIRElliptic; + + + +refer = eegtoolkit.preprocessing.Rereferencing; +%Subtract the mean from the signal +refer.meanSignal = 1; + +ss = eegtoolkit.preprocessing.SampleSelection; +ss.sampleRange = [1,1250]; % Specify the sample range to be used for each Trial +ss.channels = [138,139,150]; % Specify the channel(s) to be used + +df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data +df.filt = Hbp; % Hbp is a filter built with "filterbuilder" matlab function + + +%Extract features with the pwelch method +extr1 = eegtoolkit.featextraction.PWelch; +extr1.channel = 1; %will use channel 138 + +extr2 = eegtoolkit.featextraction.PWelch; +extr2.channel = 2; %will use channel 139 + +extr3 = eegtoolkit.featextraction.PWelch; +extr3.channel = 3; %will use channel 150 + +extr = {extr1,extr2,extr3}; +% Average all three channels so as to get a new feature vector +aggr = eegtoolkit.aggregation.ChannelAveraging; +%Configure the classifier +classif = eegtoolkit.classification.LIBSVM; + +%Set the Experimenter wrapper class +experiment = eegtoolkit.experiment.Experimenter; +experiment.session = sess; +% Add the preprocessing steps (order is taken into account) +experiment.preprocessing = {ss,refer,df}; +experiment.featextraction = {extr1,extr2,extr3}; +experiment.aggregator = aggr; +experiment.classification = classif; +experiment.evalMethod = experiment.EVAL_METHOD_LOSO; % specify that you want a "leave one subject out" (default is LOOCV) +experiment.run(); +for i=1:length(experiment.results) + accuracies(i) = experiment.results{i}.getAccuracy(); +end + +accuracies' +%mean accuracy for all subjects +fprintf('mean acc = %f\n', mean(accuracies)); +%get the configuration used (for reporting) +experiment.getExperimentInfo +experiment.getTime \ No newline at end of file diff --git a/doc/exampleEpoc.html b/doc/exampleEpoc.html new file mode 100644 index 0000000..de952b2 --- /dev/null +++ b/doc/exampleEpoc.html @@ -0,0 +1,106 @@ + + + + Description of exampleEpoc + + + + + + + + + +
    Home > . > exampleEpoc.m
    + + + +

    exampleEpoc +

    + +

    PURPOSE ^

    +
    Load the data. Call this once outside of the script so you dont have to
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
     Load the data. Call this once outside of the script so you dont have to
    + load the data again and again. Make sure the dataset is included in your
    + Matlab path
    + sess = eegtoolkit.util.Session;
    + sess.loadAll(3); %its best to do this once, outside the script (too much
    + time)
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleEpoc.m

    +

    SOURCE CODE ^

    +
    0001 % Load the data. Call this once outside of the script so you dont have to
    +0002 % load the data again and again. Make sure the dataset is included in your
    +0003 % Matlab path
    +0004 % sess = eegtoolkit.util.Session;
    +0005 % sess.loadAll(3); %its best to do this once, outside the script (too much
    +0006 % time)
    +0007 
    +0008 %Load a filter from the samples
    +0009 load filters/epocfilter;
    +0010 % 7 = O1
    +0011 % 8 = O2
    +0012 
    +0013 % Stimulus frequencies. The order corresponds to the label id (12Hz=1,
    +0014 % 10Hz=2, 8.57Hz=3, 7.5Hz=4, 6.66Hz=5)
    +0015 % If the order is wrong, then the "Max" classifier will not work properly
    +0016 sti_f = [12,10,8.57,7.5,6.66];
    +0017 
    +0018 % CCA feat extraction method
    +0019 extr = eegtoolkit.featextraction.CCA(sti_f,1:4,128,4);
    +0020 
    +0021 refer = eegtoolkit.preprocessing.Rereferencing;
    +0022 %Subtract the mean from the signal
    +0023 refer.meanSignal = 1;
    +0024 
    +0025 ss = eegtoolkit.preprocessing.SampleSelection;
    +0026 ss.sampleRange = [64,640]; % Specify the sample range to be used for each Trial
    +0027 ss.channels = 6:9; % Specify the channel(s) to be used
    +0028 
    +0029 df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data
    +0030 df.filt = Hbp; % Hbp is a filter built with "filterbuilder" matlab function
    +0031 
    +0032 %Configure the classifier
    +0033 classif = eegtoolkit.classification.MaxChooser;
    +0034 
    +0035 %Set the Experimenter wrapper class
    +0036 experiment = eegtoolkit.experiment.Experimenter;
    +0037 experiment.session = sess;
    +0038 % Add the preprocessing steps (order is taken into account)
    +0039 experiment.preprocessing = {ss,df};
    +0040 experiment.featextraction = extr;
    +0041 experiment.classification = classif;
    +0042 experiment.evalMethod = experiment.EVAL_METHOD_LOSO; % specify that you want a "leave one subject out" (default is LOOCV)
    +0043 experiment.run();
    +0044 for i=1:length(experiment.results)
    +0045     accuracies(i) = experiment.results{i}.getAccuracy();
    +0046 end
    +0047 
    +0048 accuracies'
    +0049 %mean accuracy for all subjects
    +0050 fprintf('mean acc = %f\n', mean(accuracies));
    +0051 %get the configuration used (for reporting)
    +0052 % experiment.getExperimentInfo
    +0053 % experiment.getTime
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleEpoc.m b/doc/exampleEpoc.m new file mode 100644 index 0000000..dc55bb7 --- /dev/null +++ b/doc/exampleEpoc.m @@ -0,0 +1,53 @@ +% Load the data. Call this once outside of the script so you dont have to +% load the data again and again. Make sure the dataset is included in your +% Matlab path +% sess = eegtoolkit.util.Session; +% sess.loadAll(3); %its best to do this once, outside the script (too much +% time) + +%Load a filter from the samples +load filters/epocfilter; +% 7 = O1 +% 8 = O2 + +% Stimulus frequencies. The order corresponds to the label id (12Hz=1, +% 10Hz=2, 8.57Hz=3, 7.5Hz=4, 6.66Hz=5) +% If the order is wrong, then the "Max" classifier will not work properly +sti_f = [12,10,8.57,7.5,6.66]; + +% CCA feat extraction method +extr = eegtoolkit.featextraction.CCA(sti_f,1:4,128,4); + +refer = eegtoolkit.preprocessing.Rereferencing; +%Subtract the mean from the signal +refer.meanSignal = 1; + +ss = eegtoolkit.preprocessing.SampleSelection; +ss.sampleRange = [64,640]; % Specify the sample range to be used for each Trial +ss.channels = 6:9; % Specify the channel(s) to be used + +df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data +df.filt = Hbp; % Hbp is a filter built with "filterbuilder" matlab function + +%Configure the classifier +classif = eegtoolkit.classification.MaxChooser; + +%Set the Experimenter wrapper class +experiment = eegtoolkit.experiment.Experimenter; +experiment.session = sess; +% Add the preprocessing steps (order is taken into account) +experiment.preprocessing = {ss,df}; +experiment.featextraction = extr; +experiment.classification = classif; +experiment.evalMethod = experiment.EVAL_METHOD_LOSO; % specify that you want a "leave one subject out" (default is LOOCV) +experiment.run(); +for i=1:length(experiment.results) + accuracies(i) = experiment.results{i}.getAccuracy(); +end + +accuracies' +%mean accuracy for all subjects +fprintf('mean acc = %f\n', mean(accuracies)); +%get the configuration used (for reporting) +% experiment.getExperimentInfo +% experiment.getTime \ No newline at end of file diff --git a/doc/exampleITCCA.html b/doc/exampleITCCA.html new file mode 100644 index 0000000..8433f34 --- /dev/null +++ b/doc/exampleITCCA.html @@ -0,0 +1,90 @@ + + + + Description of exampleITCCA + + + + + + + + + +
    Home > . > exampleITCCA.m
    + + + +

    exampleITCCA +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleITCCA.m

    +

    SOURCE CODE ^

    +
    0001 m_secs = 0.5:0.5:4;
    +0002 for ii=1:8
    +0003     for jj = 1:8
    +0004         sess = eegtoolkit.util.Session;
    +0005         % sess.loadAll(4);
    +0006         % sess.loadAll(4);
    +0007         sess.loadSubject(4,ii);
    +0008         ss = eegtoolkit.preprocessing.SampleSelection;
    +0009         ss.channels = 1:8;
    +0010         ss.sampleRange = [75,74+256*m_secs(jj)];
    +0011         % ss.sampleRange = [1,1140];
    +0012         % 75:1024+74
    +0013         h = fdesign.bandpass('N,F3dB1,F3dB2',10,6,80,256);
    +0014         d1 = design(h,'butter');
    +0015         df = eegtoolkit.preprocessing.DigitalFilter; %
    +0016         df.filt = d1;
    +0017         
    +0018         refer = eegtoolkit.preprocessing.Rereferencing;
    +0019         refer.meanSignal = 1;
    +0020         
    +0021         extr = eegtoolkit.featextraction.RawSignal;
    +0022         
    +0023         classif = eegtoolkit.classification.ITCCA;
    +0024         classif.baseClassifier = eegtoolkit.classification.MaxChooser;
    +0025         
    +0026         experiment = eegtoolkit.experiment.Experimenter;
    +0027         experiment.session = sess;
    +0028         experiment.preprocessing = {ss,refer,df};
    +0029         experiment.featextraction = extr;
    +0030         experiment.classification = classif;
    +0031         % experiment.evalMethod = experiment.EVAL_METHOD_LOOCV;
    +0032         % experiment.run();
    +0033         experiment.evalMethod = experiment.EVAL_METHOD_LOBO;
    +0034         experiment.run();
    +0035         for i=1:length(experiment.results)
    +0036             accuracy(i) = experiment.results{i}.getAccuracy();
    +0037         end
    +0038         acc2(ii,jj) = mean(accuracy);
    +0039         % accuracy = experiment.results{1}.getAccuracy();
    +0040         
    +0041     end
    +0042 end
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleITCCA.m b/doc/exampleITCCA.m new file mode 100644 index 0000000..c20387a --- /dev/null +++ b/doc/exampleITCCA.m @@ -0,0 +1,42 @@ +m_secs = 0.5:0.5:4; +for ii=1:8 + for jj = 1:8 + sess = eegtoolkit.util.Session; + % sess.loadAll(4); + % sess.loadAll(4); + sess.loadSubject(4,ii); + ss = eegtoolkit.preprocessing.SampleSelection; + ss.channels = 1:8; + ss.sampleRange = [75,74+256*m_secs(jj)]; + % ss.sampleRange = [1,1140]; + % 75:1024+74 + h = fdesign.bandpass('N,F3dB1,F3dB2',10,6,80,256); + d1 = design(h,'butter'); + df = eegtoolkit.preprocessing.DigitalFilter; % + df.filt = d1; + + refer = eegtoolkit.preprocessing.Rereferencing; + refer.meanSignal = 1; + + extr = eegtoolkit.featextraction.RawSignal; + + classif = eegtoolkit.classification.ITCCA; + classif.baseClassifier = eegtoolkit.classification.MaxChooser; + + experiment = eegtoolkit.experiment.Experimenter; + experiment.session = sess; + experiment.preprocessing = {ss,refer,df}; + experiment.featextraction = extr; + experiment.classification = classif; + % experiment.evalMethod = experiment.EVAL_METHOD_LOOCV; + % experiment.run(); + experiment.evalMethod = experiment.EVAL_METHOD_LOBO; + experiment.run(); + for i=1:length(experiment.results) + accuracy(i) = experiment.results{i}.getAccuracy(); + end + acc2(ii,jj) = mean(accuracy); + % accuracy = experiment.results{1}.getAccuracy(); + + end +end \ No newline at end of file diff --git a/doc/exampleL1MCCA.html b/doc/exampleL1MCCA.html new file mode 100644 index 0000000..511922c --- /dev/null +++ b/doc/exampleL1MCCA.html @@ -0,0 +1,89 @@ + + + + Description of exampleL1MCCA + + + + + + + + + +
    Home > . > exampleL1MCCA.m
    + + + +

    exampleL1MCCA +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleL1MCCA.m

    +

    SOURCE CODE ^

    +
    0001 
    +0002 sess = eegtoolkit.util.Session;
    +0003 sess.loadSubject(4,1);
    +0004 % load filters/epocfilter;
    +0005 
    +0006 sti_f = [9.25, 11.25, 13.25, 9.75, 11.75, 13.75, 10.25, 12.25, 14.25, 10.75, 12.75, 14.75];%Reference signals -
    +0007 extr = eegtoolkit.featextraction.L1MCCA;
    +0008 
    +0009 refer = eegtoolkit.preprocessing.Rereferencing;
    +0010 refer.meanSignal = 1;
    +0011 
    +0012 [z,p,k]=butter(3,[6,80]/128);
    +0013 % [z,p,k]=butter(3,[5,48]/125);
    +0014 [s,g]=zp2sos(z,p,k);
    +0015 Hd = dfilt.df2sos(s,g);
    +0016 
    +0017 m_secs = 5;
    +0018 ss = eegtoolkit.preprocessing.SampleSelection;
    +0019 ss.sampleRange = [1,1114]; % Specify the sample range to be used for each Trial
    +0020 ss.channels = [1:8];%Specify the channel(s) to be used
    +0021 %
    +0022 df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data
    +0023 df.filt = Hd; % Hbp is a filter built with "filterbuilder" matlab function
    +0024 
    +0025 lcca = eegtoolkit.classification.L1MCCA(256,1114/256,4,sti_f);
    +0026 
    +0027 experiment = eegtoolkit.experiment.Experimenter;
    +0028 experiment.session = sess;
    +0029 experiment.preprocessing = {ss,refer,df};% Order of preprocessing steps matters.
    +0030 experiment.featextraction = extr;
    +0031 experiment.classification = lcca;
    +0032 experiment.evalMethod = experiment.EVAL_METHOD_LOBO; % specify that you want a "leave one subject out" (default is LOOCV)
    +0033 %run the experiment
    +0034 experiment.run();
    +0035 accuracies = [];
    +0036 for i=1:length(experiment.results)
    +0037     accuracies(i) = experiment.results{i}.getAccuracy();    
    +0038 end
    +0039 accuracies'
    +0040 %mean accuracy for all subjects
    +0041 fprintf('mean acc = %.2f\n', mean(accuracies));
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleL1MCCA.m b/doc/exampleL1MCCA.m new file mode 100644 index 0000000..ed3ead9 --- /dev/null +++ b/doc/exampleL1MCCA.m @@ -0,0 +1,41 @@ + +sess = eegtoolkit.util.Session; +sess.loadSubject(4,1); +% load filters/epocfilter; + +sti_f = [9.25, 11.25, 13.25, 9.75, 11.75, 13.75, 10.25, 12.25, 14.25, 10.75, 12.75, 14.75];%Reference signals - +extr = eegtoolkit.featextraction.L1MCCA; + +refer = eegtoolkit.preprocessing.Rereferencing; +refer.meanSignal = 1; + +[z,p,k]=butter(3,[6,80]/128); +% [z,p,k]=butter(3,[5,48]/125); +[s,g]=zp2sos(z,p,k); +Hd = dfilt.df2sos(s,g); + +m_secs = 5; +ss = eegtoolkit.preprocessing.SampleSelection; +ss.sampleRange = [1,1114]; % Specify the sample range to be used for each Trial +ss.channels = [1:8];%Specify the channel(s) to be used +% +df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data +df.filt = Hd; % Hbp is a filter built with "filterbuilder" matlab function + +lcca = eegtoolkit.classification.L1MCCA(256,1114/256,4,sti_f); + +experiment = eegtoolkit.experiment.Experimenter; +experiment.session = sess; +experiment.preprocessing = {ss,refer,df};% Order of preprocessing steps matters. +experiment.featextraction = extr; +experiment.classification = lcca; +experiment.evalMethod = experiment.EVAL_METHOD_LOBO; % specify that you want a "leave one subject out" (default is LOOCV) +%run the experiment +experiment.run(); +accuracies = []; +for i=1:length(experiment.results) + accuracies(i) = experiment.results{i}.getAccuracy(); +end +accuracies' +%mean accuracy for all subjects +fprintf('mean acc = %.2f\n', mean(accuracies)); \ No newline at end of file diff --git a/doc/exampleLSL.html b/doc/exampleLSL.html new file mode 100644 index 0000000..d086b38 --- /dev/null +++ b/doc/exampleLSL.html @@ -0,0 +1,109 @@ + + + + Description of exampleLSL + + + + + + + + + +
    Home > . > exampleLSL.m
    + + + +

    exampleLSL +

    + +

    PURPOSE ^

    +
    Add dependencies to the Matlab path, LibLSL is required for this example
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    Add dependencies to the Matlab path, LibLSL is required for this example
    +to work
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleLSL.m

    +

    SOURCE CODE ^

    +
    0001 %Add dependencies to the Matlab path, LibLSL is required for this example
    +0002 %to work
    +0003 addpath liblsl-Matlab\;
    +0004 addpath liblsl-Matlab\bin\;
    +0005 addpath liblsl-Matlab\mex\;
    +0006 %Initialize LSL Wrapper class
    +0007 lsl = eegtoolkit.util.LSLWrapper;
    +0008 %Declare the name of the stream that will contain the EEG data
    +0009 datastream = 'EMOTIVStream';
    +0010 %Declare the name of the stream through which the events will be
    +0011 %communicated
    +0012 eventstream = 'MyEventStream';
    +0013 %Size of signal that will be used for the recognition task
    +0014 bufferSize = 5; %in seconds
    +0015 %The event code that will trigger the recognition task
    +0016 eventCode = 100;
    +0017  
    +0018  
    +0019 % RECOGNITION ALGORITHM CONFIGURATION
    +0020  
    +0021 %Indicate the number of stimuli (5) and their frequencies
    +0022 stimulus_frequencies = [12 10 8.57 7.5 6.66];
    +0023  
    +0024 %Filtering the eeg data
    +0025 % df = eegtoolkit.preprocessing.DigitalFilter;
    +0026 % %This filter was created via the 'filterbuilder' method of Matlab
    +0027 % df.filt = Hbp;
    +0028  
    +0029 %Indicate which channels of the data (different electrodes) will be used
    +0030 ss = eegtoolkit.preprocessing.SampleSelection;
    +0031 %We will use all EPOC channels for this example
    +0032 channels = 1:1:14;
    +0033 ss.channels = channels;
    +0034 ss.sampleRange = [1,128];
    +0035  
    +0036 %Sampling rate for the EPOC headset is 128Hz
    +0037 samplingRate = 128;
    +0038  
    +0039 %Another required parameter for the CCA algorithm
    +0040 numberOfHarmonics = 4;
    +0041 %Initialize the Canonical Correlation Analysis class for the stimuli
    +0042 %recognition
    +0043 cca = eegtoolkit.featextraction.CCA(stimulus_frequencies,channels,samplingRate,numberOfHarmonics);
    +0044  
    +0045 %Simple classifier that uses the max value of the features to assign the
    +0046 %label
    +0047 maxC = eegtoolkit.classification.MaxChooser;
    +0048  
    +0049 %Assign the algorithm configuration to the LSL Wrapper class
    +0050 lsl.preprocessing = {ss};
    +0051 lsl.featextraction = cca;
    +0052 lsl.classification = maxC;
    +0053  
    +0054 %Find the streams in the network
    +0055 lsl.resolveStreams(datastream,bufferSize,eventstream);
    +0056 %Pause for 5 seconds to allow the stream to gather some data
    +0057 pause(bufferSize); 
    +0058 %Run the recognition task. The task runs indefinetely until is specifically
    +0059 %interrupted
    +0060 lsl.runSSVEP(eventCode);
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleLSL.m b/doc/exampleLSL.m new file mode 100644 index 0000000..51b2e2a --- /dev/null +++ b/doc/exampleLSL.m @@ -0,0 +1,60 @@ +%Add dependencies to the Matlab path, LibLSL is required for this example +%to work +addpath liblsl-Matlab\; +addpath liblsl-Matlab\bin\; +addpath liblsl-Matlab\mex\; +%Initialize LSL Wrapper class +lsl = eegtoolkit.util.LSLWrapper; +%Declare the name of the stream that will contain the EEG data +datastream = 'EMOTIVStream'; +%Declare the name of the stream through which the events will be +%communicated +eventstream = 'MyEventStream'; +%Size of signal that will be used for the recognition task +bufferSize = 5; %in seconds +%The event code that will trigger the recognition task +eventCode = 100; + + +% RECOGNITION ALGORITHM CONFIGURATION + +%Indicate the number of stimuli (5) and their frequencies +stimulus_frequencies = [12 10 8.57 7.5 6.66]; + +%Filtering the eeg data +% df = eegtoolkit.preprocessing.DigitalFilter; +% %This filter was created via the 'filterbuilder' method of Matlab +% df.filt = Hbp; + +%Indicate which channels of the data (different electrodes) will be used +ss = eegtoolkit.preprocessing.SampleSelection; +%We will use all EPOC channels for this example +channels = 1:1:14; +ss.channels = channels; +ss.sampleRange = [1,128]; + +%Sampling rate for the EPOC headset is 128Hz +samplingRate = 128; + +%Another required parameter for the CCA algorithm +numberOfHarmonics = 4; +%Initialize the Canonical Correlation Analysis class for the stimuli +%recognition +cca = eegtoolkit.featextraction.CCA(stimulus_frequencies,channels,samplingRate,numberOfHarmonics); + +%Simple classifier that uses the max value of the features to assign the +%label +maxC = eegtoolkit.classification.MaxChooser; + +%Assign the algorithm configuration to the LSL Wrapper class +lsl.preprocessing = {ss}; +lsl.featextraction = cca; +lsl.classification = maxC; + +%Find the streams in the network +lsl.resolveStreams(datastream,bufferSize,eventstream); +%Pause for 5 seconds to allow the stream to gather some data +pause(bufferSize); +%Run the recognition task. The task runs indefinetely until is specifically +%interrupted +lsl.runSSVEP(eventCode); diff --git a/doc/exampleLateFusion.html b/doc/exampleLateFusion.html new file mode 100644 index 0000000..19913ed --- /dev/null +++ b/doc/exampleLateFusion.html @@ -0,0 +1,126 @@ + + + + Description of exampleLateFusion + + + + + + + + + +
    Home > . > exampleLateFusion.m
    + + + +

    exampleLateFusion +

    + +

    PURPOSE ^

    +
    Leave one subject out testing
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
     Leave one subject out testing
    + load filtMAMEM; % load a filter
    + sess = eegtoolkit.util.Session(Hhp);
    + sess.loadAll(1); %its best to do this once, outside the script (too much
    + time)
    + transf = eegtoolkit.transformer.PWelchTransformer();
    + Load the data. Call this once outside of the script so you dont have to
    + load the data again and again. Make sure the dataset is included in your
    + Matlab path
    + sess = eegtoolkit.util.Session;
    + sess.loadAll(1); %Loads dataset I
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleLateFusion.m

    +

    SOURCE CODE ^

    +
    0001 % Leave one subject out testing
    +0002 % load filtMAMEM; % load a filter
    +0003 % sess = eegtoolkit.util.Session(Hhp);
    +0004 % sess.loadAll(1); %its best to do this once, outside the script (too much
    +0005 % time)
    +0006 % transf = eegtoolkit.transformer.PWelchTransformer();
    +0007 % Load the data. Call this once outside of the script so you dont have to
    +0008 % load the data again and again. Make sure the dataset is included in your
    +0009 % Matlab path
    +0010 % sess = eegtoolkit.util.Session;
    +0011 % sess.loadAll(1); %Loads dataset I
    +0012 
    +0013 %Load a filter from the samples
    +0014 load filters/filt_IIRElliptic;
    +0015 
    +0016 
    +0017 
    +0018 refer = eegtoolkit.preprocessing.Rereferencing;
    +0019 %Subtract the mean from the signal
    +0020 refer.meanSignal = 1;
    +0021 
    +0022 ss = eegtoolkit.preprocessing.SampleSelection;
    +0023 ss.sampleRange = [1,1250]; % Specify the sample range to be used for each Trial
    +0024 ss.channels = [138,139,150]; % Specify the channel(s) to be used
    +0025 
    +0026 df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data
    +0027 df.filt = Hbp; % Hbp is a filter built with "filterbuilder" matlab function
    +0028 
    +0029 
    +0030 %Extract features with the pwelch method
    +0031 extr1 = eegtoolkit.featextraction.PWelch;
    +0032 extr1.channel = 1; % will use channel 138
    +0033 
    +0034 extr2 = eegtoolkit.featextraction.PWelch;
    +0035 extr2.channel = 2; % will use channel 139
    +0036 
    +0037 extr3 = eegtoolkit.featextraction.PWelch;
    +0038 extr3.channel = 3; % will use channel 150
    +0039 
    +0040 extr = {extr1,extr2,extr3};
    +0041 % Generate a special feature vector to be used with fusion classifier
    +0042 aggr = eegtoolkit.aggregation.LateFusion;
    +0043 %Configure the classifier
    +0044 % Generate 3 instances of the "baseClassifier" and output the label by
    +0045 % majority vote
    +0046 classif = eegtoolkit.classification.FusionClassifierWrapper;
    +0047 classif.baseClassifier = eegtoolkit.classification.LIBSVM;
    +0048 
    +0049 %Set the Experimenter wrapper class
    +0050 experiment = eegtoolkit.experiment.Experimenter;
    +0051 experiment.session = sess;
    +0052 % Add the preprocessing steps (order is taken into account)
    +0053 experiment.preprocessing = {ss,refer,df};
    +0054 experiment.featextraction = {extr1,extr2,extr3};
    +0055 experiment.aggregator = aggr;
    +0056 experiment.classification = classif;
    +0057 experiment.evalMethod = experiment.EVAL_METHOD_LOSO; % specify that you want a "leave one subject out" (default is LOOCV)
    +0058 experiment.run();
    +0059 for i=1:length(experiment.results)
    +0060     accuracies(i) = experiment.results{i}.getAccuracy();
    +0061 end
    +0062 
    +0063 accuracies'
    +0064 %mean accuracy for all subjects
    +0065 fprintf('mean acc = %f\n', mean(accuracies));
    +0066 %get the configuration used (for reporting)
    +0067 experiment.getExperimentInfo
    +0068 experiment.getTime
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleLateFusion.m b/doc/exampleLateFusion.m new file mode 100644 index 0000000..259bf3e --- /dev/null +++ b/doc/exampleLateFusion.m @@ -0,0 +1,68 @@ +% Leave one subject out testing +% load filtMAMEM; % load a filter +% sess = eegtoolkit.util.Session(Hhp); +% sess.loadAll(1); %its best to do this once, outside the script (too much +% time) +% transf = eegtoolkit.transformer.PWelchTransformer(); +% Load the data. Call this once outside of the script so you dont have to +% load the data again and again. Make sure the dataset is included in your +% Matlab path +% sess = eegtoolkit.util.Session; +% sess.loadAll(1); %Loads dataset I + +%Load a filter from the samples +load filters/filt_IIRElliptic; + + + +refer = eegtoolkit.preprocessing.Rereferencing; +%Subtract the mean from the signal +refer.meanSignal = 1; + +ss = eegtoolkit.preprocessing.SampleSelection; +ss.sampleRange = [1,1250]; % Specify the sample range to be used for each Trial +ss.channels = [138,139,150]; % Specify the channel(s) to be used + +df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data +df.filt = Hbp; % Hbp is a filter built with "filterbuilder" matlab function + + +%Extract features with the pwelch method +extr1 = eegtoolkit.featextraction.PWelch; +extr1.channel = 1; % will use channel 138 + +extr2 = eegtoolkit.featextraction.PWelch; +extr2.channel = 2; % will use channel 139 + +extr3 = eegtoolkit.featextraction.PWelch; +extr3.channel = 3; % will use channel 150 + +extr = {extr1,extr2,extr3}; +% Generate a special feature vector to be used with fusion classifier +aggr = eegtoolkit.aggregation.LateFusion; +%Configure the classifier +% Generate 3 instances of the "baseClassifier" and output the label by +% majority vote +classif = eegtoolkit.classification.FusionClassifierWrapper; +classif.baseClassifier = eegtoolkit.classification.LIBSVM; + +%Set the Experimenter wrapper class +experiment = eegtoolkit.experiment.Experimenter; +experiment.session = sess; +% Add the preprocessing steps (order is taken into account) +experiment.preprocessing = {ss,refer,df}; +experiment.featextraction = {extr1,extr2,extr3}; +experiment.aggregator = aggr; +experiment.classification = classif; +experiment.evalMethod = experiment.EVAL_METHOD_LOSO; % specify that you want a "leave one subject out" (default is LOOCV) +experiment.run(); +for i=1:length(experiment.results) + accuracies(i) = experiment.results{i}.getAccuracy(); +end + +accuracies' +%mean accuracy for all subjects +fprintf('mean acc = %f\n', mean(accuracies)); +%get the configuration used (for reporting) +experiment.getExperimentInfo +experiment.getTime \ No newline at end of file diff --git a/doc/exampleMotorPWelch.html b/doc/exampleMotorPWelch.html new file mode 100644 index 0000000..a690fd6 --- /dev/null +++ b/doc/exampleMotorPWelch.html @@ -0,0 +1,83 @@ + + + + Description of exampleMotorPWelch + + + + + + + + + +
    Home > . > exampleMotorPWelch.m
    + + + +

    exampleMotorPWelch +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleMotorPWelch.m

    +

    SOURCE CODE ^

    +
    0001 sess = eegtoolkit.util.Session;
    +0002 sess.loadAll(6);
    +0003 %
    +0004 
    +0005 % load('testingMotorVag1');
    +0006 % % load
    +0007 % sess = eegtoolkit.util.Session;
    +0008 % % sess.loadMOTOR(labels,trials);
    +0009 % sess.loadVag(trials,labels);
    +0010 
    +0011 ss = eegtoolkit.preprocessing.SampleSelection;
    +0012 ss.channels = [1,3];
    +0013 ss.sampleRange = [384,896];
    +0014 
    +0015 extr1  = eegtoolkit.featextraction.PWelch;
    +0016 extr1.channel = 1;
    +0017 
    +0018 extr2 = eegtoolkit.featextraction.PWelch;
    +0019 extr2.channel = 2;
    +0020 
    +0021 aggr = eegtoolkit.aggregation.ChannelConcat;
    +0022 
    +0023 classif = eegtoolkit.classification.MLR;
    +0024 experiment = eegtoolkit.experiment.Experimenter;
    +0025 experiment.session = sess;
    +0026 experiment.preprocessing = {ss};
    +0027 experiment.featextraction = {extr1, extr2};
    +0028 experiment.aggregator = aggr;
    +0029 experiment.classification = classif;
    +0030 experiment.evalMethod = experiment.EVAL_METHOD_LOOCV;
    +0031 % experiment.run();
    +0032 % experiment.evalMethod = experiment.EVAL_METHOD_XFOLD_CV;
    +0033 experiment.run();
    +0034 accuracy = experiment.results{1}.getAccuracy();
    +0035
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleMotorPWelch.m b/doc/exampleMotorPWelch.m new file mode 100644 index 0000000..76f83cc --- /dev/null +++ b/doc/exampleMotorPWelch.m @@ -0,0 +1,35 @@ +sess = eegtoolkit.util.Session; +sess.loadAll(6); +% + +% load('testingMotorVag1'); +% % load +% sess = eegtoolkit.util.Session; +% % sess.loadMOTOR(labels,trials); +% sess.loadVag(trials,labels); + +ss = eegtoolkit.preprocessing.SampleSelection; +ss.channels = [1,3]; +ss.sampleRange = [384,896]; + +extr1 = eegtoolkit.featextraction.PWelch; +extr1.channel = 1; + +extr2 = eegtoolkit.featextraction.PWelch; +extr2.channel = 2; + +aggr = eegtoolkit.aggregation.ChannelConcat; + +classif = eegtoolkit.classification.MLR; +experiment = eegtoolkit.experiment.Experimenter; +experiment.session = sess; +experiment.preprocessing = {ss}; +experiment.featextraction = {extr1, extr2}; +experiment.aggregator = aggr; +experiment.classification = classif; +experiment.evalMethod = experiment.EVAL_METHOD_LOOCV; +% experiment.run(); +% experiment.evalMethod = experiment.EVAL_METHOD_XFOLD_CV; +experiment.run(); +accuracy = experiment.results{1}.getAccuracy(); + diff --git a/doc/exampleOptimal.html b/doc/exampleOptimal.html new file mode 100644 index 0000000..5d10b31 --- /dev/null +++ b/doc/exampleOptimal.html @@ -0,0 +1,107 @@ + + + + Description of exampleOptimal + + + + + + + + + +
    Home > . > exampleOptimal.m
    + + + +

    exampleOptimal +

    + +

    PURPOSE ^

    +
    Load the data. Call this once outside of the script so you dont have to
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
     Load the data. Call this once outside of the script so you dont have to
    + load the data again and again. Make sure the dataset is included in your
    + Matlab path
    + sess = eegtoolkit.util.Session;
    + sess.loadAll(1); %Loads dataset I
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleOptimal.m

    +

    SOURCE CODE ^

    +
    0001 % Load the data. Call this once outside of the script so you dont have to
    +0002 % load the data again and again. Make sure the dataset is included in your
    +0003 % Matlab path
    +0004 % sess = eegtoolkit.util.Session;
    +0005 % sess.loadAll(1); %Loads dataset I
    +0006 
    +0007 %Load a filter from the samples
    +0008 load filters/filt_IIRElliptic;
    +0009 
    +0010 extr = eegtoolkit.featextraction.PWelchExperimental;
    +0011 extr.nfft = 512;
    +0012 extr.over_len = 0.75;
    +0013 extr.win_len = 350;
    +0014 
    +0015 amu = eegtoolkit.preprocessing.Amuse;
    +0016 amu.first = 15;
    +0017 amu.last = 252;
    +0018 
    +0019 refer = eegtoolkit.preprocessing.Rereferencing;
    +0020 %Subtract the mean from the signal
    +0021 refer.meanSignal = 1;
    +0022 
    +0023 ss = eegtoolkit.preprocessing.SampleSelection;
    +0024 ss.sampleRange = [1,1250]; % Specify the sample range to be used for each Trial
    +0025 ss.channels = 138; % Specify the channel(s) to be used
    +0026 
    +0027 df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data
    +0028 df.filt = Hbp; % Hbp is a filter built with "filterbuilder" matlab function
    +0029 
    +0030 svd = eegtoolkit.featselection.SVD;
    +0031 svd.modes = 90;
    +0032 
    +0033 %Configure the classifier
    +0034 classif = eegtoolkit.classification.LIBSVMFast;
    +0035 
    +0036 %Set the Experimenter wrapper class
    +0037 experiment = eegtoolkit.experiment.Experimenter;
    +0038 experiment.session = sess;
    +0039 % Add the preprocessing steps (order is taken into account)
    +0040 experiment.preprocessing = {amu,ss,refer,df};
    +0041 experiment.featselection = svd;
    +0042 experiment.featextraction = extr;
    +0043 experiment.classification = classif;
    +0044 experiment.evalMethod = experiment.EVAL_METHOD_LOSO; % specify that you want a "leave one subject out" (default is LOOCV)
    +0045 experiment.run();
    +0046 for i=1:length(experiment.results)
    +0047     accuracies(i) = experiment.results{i}.getAccuracy();
    +0048 end
    +0049 
    +0050 accuracies'
    +0051 %mean accuracy for all subjects
    +0052 fprintf('mean acc = %f\n', mean(accuracies));
    +0053 %get the configuration used (for reporting)
    +0054 experiment.getExperimentInfo
    +0055 experiment.getTime
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleOptimal.m b/doc/exampleOptimal.m new file mode 100644 index 0000000..36573f7 --- /dev/null +++ b/doc/exampleOptimal.m @@ -0,0 +1,55 @@ +% Load the data. Call this once outside of the script so you dont have to +% load the data again and again. Make sure the dataset is included in your +% Matlab path +% sess = eegtoolkit.util.Session; +% sess.loadAll(1); %Loads dataset I + +%Load a filter from the samples +load filters/filt_IIRElliptic; + +extr = eegtoolkit.featextraction.PWelchExperimental; +extr.nfft = 512; +extr.over_len = 0.75; +extr.win_len = 350; + +amu = eegtoolkit.preprocessing.Amuse; +amu.first = 15; +amu.last = 252; + +refer = eegtoolkit.preprocessing.Rereferencing; +%Subtract the mean from the signal +refer.meanSignal = 1; + +ss = eegtoolkit.preprocessing.SampleSelection; +ss.sampleRange = [1,1250]; % Specify the sample range to be used for each Trial +ss.channels = 138; % Specify the channel(s) to be used + +df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data +df.filt = Hbp; % Hbp is a filter built with "filterbuilder" matlab function + +svd = eegtoolkit.featselection.SVD; +svd.modes = 90; + +%Configure the classifier +classif = eegtoolkit.classification.LIBSVMFast; + +%Set the Experimenter wrapper class +experiment = eegtoolkit.experiment.Experimenter; +experiment.session = sess; +% Add the preprocessing steps (order is taken into account) +experiment.preprocessing = {amu,ss,refer,df}; +experiment.featselection = svd; +experiment.featextraction = extr; +experiment.classification = classif; +experiment.evalMethod = experiment.EVAL_METHOD_LOSO; % specify that you want a "leave one subject out" (default is LOOCV) +experiment.run(); +for i=1:length(experiment.results) + accuracies(i) = experiment.results{i}.getAccuracy(); +end + +accuracies' +%mean accuracy for all subjects +fprintf('mean acc = %f\n', mean(accuracies)); +%get the configuration used (for reporting) +experiment.getExperimentInfo +experiment.getTime diff --git a/doc/exampleSMFA.html b/doc/exampleSMFA.html new file mode 100644 index 0000000..8e07a8b --- /dev/null +++ b/doc/exampleSMFA.html @@ -0,0 +1,163 @@ + + + + Description of exampleSMFA + + + + + + + + + +
    Home > . > exampleSMFA.m
    + + + +

    exampleSMFA +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleSMFA.m

    +

    SOURCE CODE ^

    +
    0001 clear
    +0002 
    +0003 % fileID = fopen('SMFA_Results.txt','a');
    +0004 for subn=1:10
    +0005     
    +0006     %Dataset 4
    +0007     sess = eegtoolkit.util.Session;
    +0008     % sess.loadAll(4);
    +0009     sess.loadSubject(4,subn);
    +0010     
    +0011     % %Dataset 2
    +0012     % sess = ssveptoolkit.util.Session;
    +0013     % sess.loadAll(2);
    +0014     
    +0015     load filters/filt_IIRElliptic;
    +0016     
    +0017     %Dataset 4
    +0018     % sti_f = [9.25, 11.25, 13.25, 9.75, 11.75, 13.75, 10.25, 12.25, 14.25, 10.75, 12.75, 14.75];
    +0019     % extr = ssveptoolkit.featextraction.CCA(sti_f,[1:8],256,4);
    +0020     
    +0021     extr = eegtoolkit.featextraction.MLR_Transf(1:8);
    +0022     %         sti_f = [9.25, 9.75, 10.25, 10.75, 11.25, 11.75, 12.25, 12.75, 13.25, 13.75, 14.25, 14.75];
    +0023     %         extr = ssveptoolkit.featextraction.CCA(sti_f,1:8,256,4);
    +0024     
    +0025     %%Dataset 2
    +0026     % sti_f = [12 10 8.57 7.50 6.66];
    +0027     % sti_f = [6.66 7.5 8.57 10 12];
    +0028     % extr = ssveptoolkit.featextraction.CCA(sti_f,[1:2],250,4);
    +0029     
    +0030     % extr = ssveptoolkit.featextraction.OMP(sti_f,[1:2],250,4,16,0);
    +0031     %sti_f: reference signals
    +0032     %[1:2]: input=2 channels. Depends on what you set on "ss.channels" e.g. if
    +0033     %you select 10 channels you need to set "[1:10]"
    +0034     %250: sampling rate (Dataset 1&2=250)
    +0035     %4: number of harmonics of the reference signals
    +0036     
    +0037     % %Dataset 2
    +0038     % amu = ssveptoolkit.preprocessing.Amuse;
    +0039     % amu.first = 15;
    +0040     % amu.last = 252;
    +0041     
    +0042     refer = eegtoolkit.preprocessing.Rereferencing;
    +0043     %Subtract the mean from the signal
    +0044     refer.meanSignal = 1;
    +0045     
    +0046     %Dataset 4
    +0047     % m_secs = 2;
    +0048     
    +0049     % %Dataset 2
    +0050     % m_secs = 5;
    +0051     
    +0052     ss = eegtoolkit.preprocessing.SampleSelection;
    +0053     
    +0054     %Dataset 4
    +0055     onset=39;
    +0056     %delay of the visual system
    +0057     visual_delay = 35;
    +0058     ss.sampleRange = [onset+visual_delay+1,onset+visual_delay+1*256];
    +0059     ss.channels = 1:8;
    +0060     % ss.channels = 7;
    +0061     
    +0062     % %Dataset 2
    +0063     % ss.sampleRange = [1,250*m_secs]; % Specify the sample range to be used for each Trial
    +0064     % % ss.channels = [116,126,137,138,139,147,150];%[126,138]%Specify the channel(s) to be used
    +0065     % ss.channels = [126,138];
    +0066     
    +0067     %Dataset 4
    +0068     df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data
    +0069     [z,p,k]=butter(3,[6,80]/128);
    +0070     [s,g]=zp2sos(z,p,k);
    +0071     Hd = dfilt.df2sos(s,g);
    +0072     df.filt = Hd;
    +0073     
    +0074     Res = zeros(length(1:4:10),length(1:4:100));
    +0075     
    +0076     % Set parameter grid to search
    +0077     %         for qq=1:10
    +0078     %             for ww=1:25
    +0079     
    +0080     %Number of subclasses per class
    +0081     NumS = 2*ones(1,12);
    +0082     
    +0083     S = 0.4;
    +0084     %                 kInt = qq;
    +0085     %                 kPen = 4*(ww-1)+1;
    +0086     kInt = 3;
    +0087     kPen = 50;
    +0088     classif = eegtoolkit.classification.SMFA(0,NumS,S,kInt,kPen);
    +0089     
    +0090     experiment = eegtoolkit.experiment.Experimenter;
    +0091     experiment.session = sess;
    +0092     
    +0093     %Dataset 4
    +0094     experiment.preprocessing = {ss,refer,df};
    +0095     
    +0096     % %Dataset 2
    +0097     % experiment.preprocessing = {amu,ss,refer,df};% Order of preprocessing steps matters.
    +0098     
    +0099     experiment.featextraction = extr;
    +0100     experiment.classification = classif;
    +0101     experiment.evalMethod = experiment.EVAL_METHOD_LOBO; % specify that you want a "leave one subject out" (default is LOOCV)
    +0102     % experiment.evalMethod = experiment.EVAL_METHOD_LOOCV;
    +0103     
    +0104     %run the experiment
    +0105     experiment.run();
    +0106     accuracies = [];
    +0107     for i=1:length(experiment.results)
    +0108         accuracies(i) = experiment.results{i}.getAccuracy();
    +0109     end
    +0110     % accuracies'
    +0111     % mean accuracy for all subjects
    +0112 %     fprintf('mean acc = %.2f\n', mean(accuracies));
    +0113     subaccuracies(subn) = mean(accuracies);
    +0114 end
    +0115 fprintf('mean acc for all subjects %.2f\n',mean(subaccuracies));
    +
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleSMFA.m b/doc/exampleSMFA.m new file mode 100644 index 0000000..15a580d --- /dev/null +++ b/doc/exampleSMFA.m @@ -0,0 +1,115 @@ +clear + +% fileID = fopen('SMFA_Results.txt','a'); +for subn=1:10 + + %Dataset 4 + sess = eegtoolkit.util.Session; + % sess.loadAll(4); + sess.loadSubject(4,subn); + + % %Dataset 2 + % sess = ssveptoolkit.util.Session; + % sess.loadAll(2); + + load filters/filt_IIRElliptic; + + %Dataset 4 + % sti_f = [9.25, 11.25, 13.25, 9.75, 11.75, 13.75, 10.25, 12.25, 14.25, 10.75, 12.75, 14.75]; + % extr = ssveptoolkit.featextraction.CCA(sti_f,[1:8],256,4); + + extr = eegtoolkit.featextraction.MLR_Transf(1:8); + % sti_f = [9.25, 9.75, 10.25, 10.75, 11.25, 11.75, 12.25, 12.75, 13.25, 13.75, 14.25, 14.75]; + % extr = ssveptoolkit.featextraction.CCA(sti_f,1:8,256,4); + + %%Dataset 2 + % sti_f = [12 10 8.57 7.50 6.66]; + % sti_f = [6.66 7.5 8.57 10 12]; + % extr = ssveptoolkit.featextraction.CCA(sti_f,[1:2],250,4); + + % extr = ssveptoolkit.featextraction.OMP(sti_f,[1:2],250,4,16,0); + %sti_f: reference signals + %[1:2]: input=2 channels. Depends on what you set on "ss.channels" e.g. if + %you select 10 channels you need to set "[1:10]" + %250: sampling rate (Dataset 1&2=250) + %4: number of harmonics of the reference signals + + % %Dataset 2 + % amu = ssveptoolkit.preprocessing.Amuse; + % amu.first = 15; + % amu.last = 252; + + refer = eegtoolkit.preprocessing.Rereferencing; + %Subtract the mean from the signal + refer.meanSignal = 1; + + %Dataset 4 + % m_secs = 2; + + % %Dataset 2 + % m_secs = 5; + + ss = eegtoolkit.preprocessing.SampleSelection; + + %Dataset 4 + onset=39; + %delay of the visual system + visual_delay = 35; + ss.sampleRange = [onset+visual_delay+1,onset+visual_delay+1*256]; + ss.channels = 1:8; + % ss.channels = 7; + + % %Dataset 2 + % ss.sampleRange = [1,250*m_secs]; % Specify the sample range to be used for each Trial + % % ss.channels = [116,126,137,138,139,147,150];%[126,138]%Specify the channel(s) to be used + % ss.channels = [126,138]; + + %Dataset 4 + df = eegtoolkit.preprocessing.DigitalFilter; % Apply a filter to the raw data + [z,p,k]=butter(3,[6,80]/128); + [s,g]=zp2sos(z,p,k); + Hd = dfilt.df2sos(s,g); + df.filt = Hd; + + Res = zeros(length(1:4:10),length(1:4:100)); + + % Set parameter grid to search + % for qq=1:10 + % for ww=1:25 + + %Number of subclasses per class + NumS = 2*ones(1,12); + + S = 0.4; + % kInt = qq; + % kPen = 4*(ww-1)+1; + kInt = 3; + kPen = 50; + classif = eegtoolkit.classification.SMFA(0,NumS,S,kInt,kPen); + + experiment = eegtoolkit.experiment.Experimenter; + experiment.session = sess; + + %Dataset 4 + experiment.preprocessing = {ss,refer,df}; + + % %Dataset 2 + % experiment.preprocessing = {amu,ss,refer,df};% Order of preprocessing steps matters. + + experiment.featextraction = extr; + experiment.classification = classif; + experiment.evalMethod = experiment.EVAL_METHOD_LOBO; % specify that you want a "leave one subject out" (default is LOOCV) + % experiment.evalMethod = experiment.EVAL_METHOD_LOOCV; + + %run the experiment + experiment.run(); + accuracies = []; + for i=1:length(experiment.results) + accuracies(i) = experiment.results{i}.getAccuracy(); + end + % accuracies' + % mean accuracy for all subjects +% fprintf('mean acc = %.2f\n', mean(accuracies)); + subaccuracies(subn) = mean(accuracies); +end +fprintf('mean acc for all subjects %.2f\n',mean(subaccuracies)); \ No newline at end of file diff --git a/doc/fortran.png b/doc/fortran.png new file mode 100644 index 0000000000000000000000000000000000000000..350c572ee38fc5aa8cef025284caa41a46921cbf GIT binary patch literal 265 zcmV+k0rvihP)z zQ4Yf(2!?U#(c~&{CVCaUn|okwjJWCAv@Y{YACUYt5I|c;L@*Nz0Eo!wFm8gG7quL( z=eJ8jF~;-zT!i-?03M^mxSQz{PD1(=o)3a5h-huxIH1YJR@TpAUHLpGAzkjqF33Gq z5HW;M#1ulv?Ojv&dqVG&6;xWfSwIyu&pDe3Y?b*+^Nvd@T*dL)Y-z<7!R9u;!a16o zt!IDE1;u=7(6;lN@7iT2j)+8Ll6#n$r@xl|p4XvuY#=TA`S#1W+5VQEsg98Zwj;#Z P00000NkvXXu0mjf06Tac literal 0 HcmV?d00001 diff --git a/doc/graph.dot b/doc/graph.dot new file mode 100644 index 0000000..c7af74f --- /dev/null +++ b/doc/graph.dot @@ -0,0 +1,18 @@ +/* Created by mdot for Matlab */ +digraph m2html { + + exampleCSP [URL="exampleCSP.html"]; + exampleCombiCCA [URL="exampleCombiCCA.html"]; + exampleDefault [URL="exampleDefault.html"]; + exampleEPOCCCASVM [URL="exampleEPOCCCASVM.html"]; + exampleERRP [URL="exampleERRP.html"]; + exampleEarlyFusion [URL="exampleEarlyFusion.html"]; + exampleEpoc [URL="exampleEpoc.html"]; + exampleITCCA [URL="exampleITCCA.html"]; + exampleL1MCCA [URL="exampleL1MCCA.html"]; + exampleLSL [URL="exampleLSL.html"]; + exampleLateFusion [URL="exampleLateFusion.html"]; + exampleMotorPWelch [URL="exampleMotorPWelch.html"]; + exampleOptimal [URL="exampleOptimal.html"]; + exampleSMFA [URL="exampleSMFA.html"]; +} \ No newline at end of file diff --git a/doc/graph.html b/doc/graph.html new file mode 100644 index 0000000..ba4db20 --- /dev/null +++ b/doc/graph.html @@ -0,0 +1,41 @@ + + + + Dependency Graph for . + + + + + + + + + + +
    < Master indexIndex for . >
    +

    Dependency Graph for .

    + +
    +Dependency Graph for . + + + + + + + + + + + + + + + + +
    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/graph.map b/doc/graph.map new file mode 100644 index 0000000..c98355c --- /dev/null +++ b/doc/graph.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/doc/graph.png b/doc/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d3341107f75ca7de5ccb0039960c9d5010b22d02 GIT binary patch literal 45456 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%0Ajk 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 literal 0 HcmV?d00001 diff --git a/doc/hp.png b/doc/hp.png new file mode 100644 index 0000000000000000000000000000000000000000..d09f988fb289d659869dbb1b2f199fd967a93958 GIT binary patch literal 255 zcmVz z%MHUI3_wlAXs`;N$*f{_qX$Rw9FO zez{B`r8K|JmvGJjz-@IJXS2Omg-^gRJ-6O z&=syLR&U^^a}=eRZLpT@KTChlV@n^^it_t*Wz253r911aWh5p(A;kay002ovPDHLk FV1l-WYkL3y literal 0 HcmV?d00001 diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 0000000..095abe2 --- /dev/null +++ b/doc/index.html @@ -0,0 +1,34 @@ + + + + Index for Directory . + + + + + + + + + + +
    < Master indexIndex for . >
    + +

    Index for .

    + +

    Matlab files in this directory:

    + +
     exampleCSP
     exampleCombiCCA
     exampleDefaultLoad the data. Call this once outside of the script so you dont have to
     exampleEPOCCCASVMLoad the data. Call this once outside of the script so you dont have to
     exampleERRPd2 = designfilt('bandpassiir', 'SampleRate', 256, 'FilterOrder', 8 ,'HalfPowerFrequency1', 1, 'HalfPowerFrequency2', 10,'DesignMethod', 'butter');
     exampleEarlyFusionLeave one subject out testing
     exampleEpocLoad the data. Call this once outside of the script so you dont have to
     exampleITCCA
     exampleL1MCCA
     exampleLSLAdd dependencies to the Matlab path, LibLSL is required for this example
     exampleLateFusionLeave one subject out testing
     exampleMotorPWelch
     exampleOptimalLoad the data. Call this once outside of the script so you dont have to
     exampleSMFA
    + + +

    Subsequent directories:

    +
      +
    • +eegtoolkit
    • .git
    • doc
    • filters
    +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/left.png b/doc/left.png new file mode 100644 index 0000000000000000000000000000000000000000..404df045f40970496c71ca6b8c1f1357af271e27 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^{2}w1qqB3TN5VEvJYV8 a;bDlI$G>{!EB$9cJq(_%elF{r5}E)JMz zQ4WJ342H|%(dbp$Gu5lqySaxtLO>W(rpx%_LnVK(UrGTT5y42B06;|UPU9jm^JJ0Z z`TTUN(6TJ&=lPPn_WX zId~2>0yJfGb3Up-MDlH7S}Vx-I*N`iO3-5Ff$K-Ed9Nepzm`zojRl WMtq7>mNL`;0000slDkd7sMUhm~nn@(#}qULHtXTzoc}*_9Non9cn|mMot$6xao(HD{Btemfo7KftJ(gq<~Y~G z@qZoHkA=+tS8)7W&Uw9q`Tr8me+#(&&u0HSm+S9Tw*NEO-*s^O@8dn4!TPz8qu!P4 zK_1Jw46grGoai}Etj@tK_}C@RCk z%#`S6Zs-xzlqxAD$1kf8AM0wN?c%>SMNC?Phc6~Pz{yO{A+R?kRa_)AA;iir?(CQ-4ncIv-nB)Nx{hL?F`wWg|rwizO*(ixxOASOWm3r><21 literal 0 HcmV?d00001 diff --git a/doc/mex.png b/doc/mex.png new file mode 100644 index 0000000000000000000000000000000000000000..396f1bc943e311539c64aa839ba14242c3b1493c GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^GC<7D!VDzmefZDNn{1``2&1H zT>k^XH6VupNCU}&+~7Mvim@cfFPOpM*^M+1C&}C0g`tC0)&t1lEbxdd1{y2`!i<;h z*8KqrvX^-Jy0Ty9km3|#4DWEh2o&=1ba4!+m=oK_$albigXt^#BmNKn`(>_}oOavV zHb=Afht|Vg%9B``@)jwvpOrK#Ny(Hf&TUq{A5ne4dvCr*%)z?JLGp XX&kFA6^pR}&1LX(^>bP0l+XkK#Yar! literal 0 HcmV?d00001 diff --git a/doc/pcode.png b/doc/pcode.png new file mode 100644 index 0000000000000000000000000000000000000000..6801bd9a259131e6de7d7957789598a451c04334 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^Qb5ej!3-qBCsR(zDBw1As!D z1s;*bKxKj;%vhfiKM^R%lJ4m1$iT3%pZiZDD@aj*Pl)S(AYk|pNdQueB|(0{ z3=Yq3qyagOo-U3d6}OTT4lqj`WYF%P$jKq`kl`G&cO%P#Bm=oF5vkS`gujP)z zZ3@F642I+A(ex_uOz|q|-Q16CA~DKXHy!h#6nPc#A=(dzh_Dj}01(mYWlSQ*cu32| zbbY!^c%J9=dA@}A9sq8umob~|g)?E>&V+Ie#O(HQu@+QR?< N002ovPDHLkV1hx>d=3Br literal 0 HcmV?d00001 diff --git a/doc/simulinkicon.gif b/doc/simulinkicon.gif new file mode 100644 index 0000000000000000000000000000000000000000..1386ddd4ce654071015610e81fdea82461d8e28b GIT binary patch literal 977 zcmbu8u}_m>5XK)83^3Uu8;SX77?CI^3B-XItA?P13elB7PXr>Q5E~tEP-6{~F%D-K z)WpFqI=OT~2IKIO5C(b~XFmOKi{R_TBlgr&b_q*r5UY@)(Ha=TG0e=CHm)y-= z-NhXdrR2#xsVDJ-NLq3;H+2&?M6D)Qb5&PyMYKwCF&A|a7f{KO9Oh7mI2cfy($r!z zs}XbJSxTCcq=XpD$Sj#AlVk`ACe@N^Qb~${Vy##bO(ID^Mz$tcf+k1;r;?gtgeE1i znB!n-Q<_?AMl2LDpPGpoVn2>$q-rXrh;>Q9q^OCQfZG#_wFWhaf$Px^VzQfdaDPH@ zLsCc`!iKu|Sa$Qm|sSpKyq|-EjTr8*2+?H0- z4`Q;Lc94k+b3;;7jL_^P7CAVW+LT6|D5{xe%m-eKMsh!nWh97?BYe&89m)KJVRL?! zsLhQI*K_ZpHMb*1{#n2u&8oRKvdcS(-_QHDh{>=FJST?;-$*#_> zFWg+IF0Bn^lXvHav-8W#Szfc2RV!b=VRFa{1fJ1Bvn_=*1$x~u5G{^07%?ML0m zHxB3bGCb|+8kyh!`1T@vWbw!Thc`P>6y|3Oo@O9$!+|lO2pBq=~ z?6HkkzgKp4CuH{I*7l2^yRRR1_MTc?@7vp&8a;gcZ2H%?cU{-M_dgh2`cl7D{M1<} G;M_lk-mF{z literal 0 HcmV?d00001 diff --git a/doc/solaris.png b/doc/solaris.png new file mode 100644 index 0000000000000000000000000000000000000000..e31e8a2a48078233e65bf10502de055609469206 GIT binary patch literal 286 zcmV+(0pb3MP)LJX0GRn|87F~=qO=0d z$LTWTx~|80zJzI-0N{4DjI%Mk;moMpnNcohj7EB(iPVo~iqGKm_8{s|W(+hpPU=N2 zz2$E5rj(XtF(bOm8L*eKNAeVg;o46LO1s$e-HK3o_b;p)l_XJ5>4v`(0TG#bkaL)bhCi169@`rB kx1WB<=i4tMjP|#52ZwT~UP>&M!~g&Q07*qoM6N<$g3~#GJpcdz literal 0 HcmV?d00001 diff --git a/doc/up.png b/doc/up.png new file mode 100644 index 0000000000000000000000000000000000000000..b348b9a1b19bd5030efd3df293d84a18b41ef6a4 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^{2x4R4De4J#NJjgjrM8h9Te~(8G kcWyrh{e1gnl+pf{?#tSrFr=&ZY5)KL07*qoM6N<$f*5RoFaQ7m literal 0 HcmV?d00001 From ef6539a1ff0125cbea87a0efdf970110096b59cc Mon Sep 17 00:00:00 2001 From: ehatzi Date: Fri, 25 Nov 2016 15:07:21 +0200 Subject: [PATCH 2/3] Added documentation --- .../CSPFilterBankWrapper.m | 184 ++++++++++++++++++ exampleERRPSSVEPDemo.m | 46 +++++ 2 files changed, 230 insertions(+) create mode 100644 +eegtoolkit/+classification/@CSPFilterBankWrapper/CSPFilterBankWrapper.m create mode 100644 exampleERRPSSVEPDemo.m diff --git a/+eegtoolkit/+classification/@CSPFilterBankWrapper/CSPFilterBankWrapper.m b/+eegtoolkit/+classification/@CSPFilterBankWrapper/CSPFilterBankWrapper.m new file mode 100644 index 0000000..97e9faf --- /dev/null +++ b/+eegtoolkit/+classification/@CSPFilterBankWrapper/CSPFilterBankWrapper.m @@ -0,0 +1,184 @@ +classdef CSPFilterBankWrapper < eegtoolkit.classification.ClassifierBase; + properties (Constant) + + end + properties + baseClassifier; + channel; + cspFilters; + filterBanks; + samplingRate; + end + + methods (Access = public) + function CSPFB = CSPFilterBankWrapper(filterBanks, samplingRate) + CSPFB.cspFilters = {}; + CSPFB.filterBanks = filterBanks; + CSPFB.samplingRate = samplingRate; + %filter_banks=[8 12; 12 16; 16 20;20 24;24 28]; +% if(isa(instanceSet,'eegtoolkit.util.RawSignalSet') +% CSP.instanceSet = instanceSet; +% else +% error('RawSignal extractor should be used with CSPWrapper'); +% end + end + + + function CSPFB = build(CSPFB) + % Builds the classification models + CSPFB.learnCSPMatrix(CSPFB.instanceSet.sMatrix,CSPFB.instanceSet.labels); + instanceLocal = CSPFB.extract(CSPFB.instanceSet.sMatrix); + CSPFB.baseClassifier.instanceSet = eegtoolkit.util.InstanceSet(instanceLocal,CSPFB.instanceSet.labels); + CSPFB.baseClassifier.build; + CSPFB.reset; + end + + function [output, probabilities, ranking] = classifyInstance(CSPFB,instance) + +% instance = CSP.extract + %input = instance matrix rows = instances, cols = attributes + %output = predicted class + %probabilities = probability for predicted class + %ranking = propabilities for all classes (e.g. to use with mAP) + + %TODO:should print an error if 'build' has not been called + testInstances = CSPFB.extract(instance); + [output, probabilities, ranking] = CSPFB.baseClassifier.classifyInstance(testInstances); +% numModels = length(LSVM.models); +% [numinstance, ~] = size(testInstances); +% scores = zeros(numModels,numinstance); +% for i=1:numModels +% %predict using the stored models +% [~, ~, t] = svmpredict(eye(numinstance,1),testInstances, LSVM.models{i},'-b 1 -q'); +% %store probability for each class +% scores(i,:) = t(:,1); +% end +% output = zeros(numinstance,1); +% probabilities = zeros(numinstance,1); +% ranking = scores; +% for i=1:numinstance +% %select the class with the highest probability +% [prob, idx] = max(scores(:,i)); +% uniqueLabels = unique(LSVM.instanceSet.getLabels); +% %output the label with highest probability +% output(i,1) = uniqueLabels(idx); +% %return the probability for the output label +% probabilities(i,1) = prob; +% end + end + + function CSPFB = reset(CSPFB) + % 'Resets' the classifier. +% CSP.models = {}; + end + + function configInfo = getConfigInfo(CSPFB) + configInfo = '\n'; + end + + + function time = getTime(CSPFB) + time = 0; + end + end + methods (Access = private) + function [] = learnCSPMatrix(CSPFB, sMatrix, labels) + %[trialsMat,labels] = ssveptoolkit.util.Trial.trialsCellToMat(in); + [numTrials,numChannels,numSamples] = size(sMatrix); +% numTrials = length(CSPFB.trials); +% [numChannels,numSamples] = size(CSPFB.trials{1}.signal); +% samplingRate = CSPFB.trials{1}.samplingRate; + filter_banks= CSPFB.filterBanks; + [nfb, mfb] = size(filter_banks); + + for iter_fb=1:nfb + + [b,a]=butter(3,filter_banks(iter_fb)/(CSPFB.samplingRate/2)); +% labels = zeros(numTrials,1); + %numTrials X numChannels X numSamples + trialsMat = permute(sMatrix,[2,3,1]); +% trialsMat = zeros(numChannels,numSamples,numTrials); +% for i = 1 : length(CSP_Feat.trials) +% for i_ch = 1:numChannels +% trialsMat(i_ch,:,i) = filtfilt(b,a,CSP_Feat.trials{i}.signal(i_ch,:)); +% end +% labels(i) = CSP_Feat.trials{i}.label; +% end + + trialsMat = permute(trialsMat,[2 1 3]); + [N1, Nch1, Ntr1] = size(trialsMat); + for i = 1:Nch1 + for j = 1:Ntr1 + trialsMat(:,i,j) = (trialsMat(:,i,j) - mean(trialsMat(:,i,j))); + end + end + x_train = trialsMat;%(:,:,CSP_Feat.trainIdx); + y_train = labels;%(CSP_Feat.trainIdx); + [N, Nch, Ntr] = size(x_train); + trialCov=zeros(Nch,Nch,Ntr); + for t=1:length(y_train) + E = x_train(:,:,t)'; + EE = E * E'; + trialCov(:,:,t) = EE ./ trace(EE); + end + for c=1:2 + covMat{c} = mean(trialCov(:,:,y_train == c),3); + end + [U, D] = eig(covMat{1},covMat{2},'qz'); + eigenvalues = diag(D); + [~, ind] = sort(eigenvalues, 'descend'); + U = U(:,ind); + CSPFB.cspFilters{iter_fb} = U'; +% CSP_Filter = U'; + end + %trialsMat2=zeros(N,3,Ntr); + + end + + function instances = extract(CSPFB,sMatrix) + trialsMat = permute(sMatrix,[2,3,1]); + trialsMat = permute(trialsMat,[2,1,3]); + [numTrials,numChannels,~] = size(sMatrix); + final_instances = zeros(numTrials, numChannels*length(CSPFB.filterBanks)); + for iter_fb=1:length(CSPFB.cspFilters) + for j = 1:size(trialsMat,3) + trialsMat(:,:,j) = (CSPFB.cspFilters{iter_fb}*trialsMat(:,:,j)')'; + end + + instances = zeros(numTrials, numChannels); + %labels = zeros(numTrials,1); + + for i=1:numTrials + + projectedTrial = trialsMat(:,:,i);%Filter * CSP_Feat.trials{i}.signal(:,i);% EEGSignals.x(:,:,t)'; + %generating the features as the log variance of the projected signals + variances = var(projectedTrial,0,1); + instances(i,:) = log(variances)'; + %labels(i,1) = floor(CSP_Feat.trials{i}.label); + end + final_instances(:,numChannels*(iter_fb-1)+1:numChannels*iter_fb) = instances; + % CSP_Feat.avgTime = toc/numTrials; +% CSP_Feat.instanceSet = ssveptoolkit.util.InstanceSet(final_instances,labels); + end + instances = final_instances; + end + + + + end + % [numTrials,numChannels,~] = size(sMatrix); + % sMatrix = permute(sMatrix,[3,2,1]); + % for i=1:size(sMatrix,3); + % sMatrix(:,:,i) = (CSPFB.cspFilter*sMatrix(:,:,i)')'; + % end + % instances = zeros(numTrials,numChannels); + % for i=1:numTrials + % projectedTrial = sMatrix(:,:,i); + % variances = var(projectedTrial,0,1); + % instances(i,:) = log(variances)'; + % end + % % instanceSet = eegtoolkit.util.InstanceSet(instances,labels); + % end + %end +end + diff --git a/exampleERRPSSVEPDemo.m b/exampleERRPSSVEPDemo.m new file mode 100644 index 0000000..4bd172f --- /dev/null +++ b/exampleERRPSSVEPDemo.m @@ -0,0 +1,46 @@ +% d2 = designfilt('bandpassiir', 'SampleRate', 256, 'FilterOrder', 8 ,'HalfPowerFrequency1', 1, 'HalfPowerFrequency2', 10,'DesignMethod', 'butter'); + +sess = eegtoolkit.util.Session; +sess.loadSubjectSession(8,5,2); + +[z,p,k]=butter(3,[1,10]/64); +[s,g]=zp2sos(z,p,k); +Hd = dfilt.df2sos(s,g); +df = eegtoolkit.preprocessing.DigitalFilter; % +df.filt = Hd; + +ss = eegtoolkit.preprocessing.SampleSelection; +ss.channels = [1:14]; +ss.sampleRange = [1:6:200]; + +extr = {}; +for i=1:3 + extr{i} = eegtoolkit.featextraction.PWelch; + extr{i}.channel = 1; +end + +aggr = eegtoolkit.aggregation.ChannelConcat; + +classif = eegtoolkit.classification.LIBSVM; +classif.kernel = classif.KERNEL_RBF; +classif.gamma = 1/9; +classif.cost = 1; + +%Setup experiment +experiment = eegtoolkit.experiment.Experimenter; +experiment.session = sess; +experiment.preprocessing = {df,ss}; +experiment.featextraction = extr; +experiment.aggregator = aggr; +experiment.classification = classif; +experiment.evalMethod = experiment.EVAL_METHOD_XFOLD_CV; + +experiment.run(10); + +accuracies = []; +for i=1:length(experiment.results) + accuracies(i) = experiment.results{i}.getAccuracy(); +end + +accuracies' +fprintf('mean acc = %.2f\n',mean(accuracies)); \ No newline at end of file From 812364c3313813bfc6c68495fea967049edc9e0e Mon Sep 17 00:00:00 2001 From: ehatzi Date: Fri, 25 Nov 2016 17:13:23 +0200 Subject: [PATCH 3/3] Updated documentation --- .../@ClassifierBase/ClassifierBase.m | 2 +- .../FeatureExtractionBase.m | 3 +- .../@AggregatorBase/AggregatorBase.html | 6 +- .../+aggregation/@AggregatorBase/graph.html | 14 +- .../+aggregation/@AggregatorBase/index.html | 12 +- .../@ChannelAveraging/ChannelAveraging.html | 6 +- .../+aggregation/@ChannelAveraging/graph.html | 14 +- .../+aggregation/@ChannelAveraging/index.html | 12 +- .../@ChannelConcat/ChannelConcat.html | 6 +- .../+aggregation/@ChannelConcat/graph.html | 14 +- .../+aggregation/@ChannelConcat/index.html | 12 +- .../@ChannelRatio/ChannelRatio.html | 6 +- .../+aggregation/@ChannelRatio/graph.html | 14 +- .../+aggregation/@ChannelRatio/index.html | 12 +- .../+aggregation/@Fisher/Fisher.html | 6 +- .../+aggregation/@Fisher/graph.html | 14 +- .../+aggregation/@Fisher/index.html | 12 +- .../+aggregation/@LateFusion/LateFusion.html | 6 +- .../+aggregation/@LateFusion/graph.html | 14 +- .../+aggregation/@LateFusion/index.html | 12 +- doc/+eegtoolkit/+aggregation/@VLAD/VLAD.html | 6 +- doc/+eegtoolkit/+aggregation/@VLAD/graph.html | 14 +- doc/+eegtoolkit/+aggregation/@VLAD/index.html | 12 +- .../+classification/@Adaboost/Adaboost.html | 6 +- .../+classification/@Adaboost/graph.html | 14 +- .../+classification/@Adaboost/index.html | 12 +- .../CSPFilterBankWrapper.html | 234 ++++++++++++++++++ .../CSPFilterBankWrapper.m | 184 ++++++++++++++ .../@CSPFilterBankWrapper/graph.dot | 6 + .../@CSPFilterBankWrapper/graph.html | 28 +++ .../@CSPFilterBankWrapper/graph.map | 1 + .../@CSPFilterBankWrapper/graph.png | Bin 0 -> 7147 bytes .../@CSPFilterBankWrapper/index.html | 32 +++ .../@CSPWrapper/CSPWrapper.html | 6 +- .../+classification/@CSPWrapper/graph.html | 14 +- .../+classification/@CSPWrapper/index.html | 12 +- .../@ClassifierBase/ClassifierBase.html | 10 +- .../@ClassifierBase/ClassifierBase.m | 2 +- .../@ClassifierBase/graph.html | 14 +- .../@ClassifierBase/index.html | 12 +- .../+classification/@CombiCCA/CombiCCA.html | 6 +- .../+classification/@CombiCCA/graph.html | 14 +- .../+classification/@CombiCCA/index.html | 12 +- .../FusionClassifierWrapper.html | 6 +- .../@FusionClassifierWrapper/graph.html | 14 +- .../@FusionClassifierWrapper/index.html | 12 +- .../+classification/@ITCCA/ITCCA.html | 6 +- .../+classification/@ITCCA/graph.html | 14 +- .../+classification/@ITCCA/index.html | 12 +- .../+classification/@L1MCCA/L1MCCA.html | 6 +- .../+classification/@L1MCCA/graph.html | 14 +- .../+classification/@L1MCCA/index.html | 12 +- doc/+eegtoolkit/+classification/@LDA/LDA.html | 6 +- .../+classification/@LDA/graph.html | 14 +- .../+classification/@LDA/index.html | 12 +- .../+classification/@LIBSVM/LIBSVM.html | 6 +- .../+classification/@LIBSVM/graph.html | 14 +- .../+classification/@LIBSVM/index.html | 12 +- .../@LIBSVMFast/LIBSVMFast.html | 6 +- .../+classification/@LIBSVMFast/graph.html | 14 +- .../+classification/@LIBSVMFast/index.html | 12 +- .../+classification/@MLDA/MLDA.html | 6 +- .../+classification/@MLDA/graph.html | 14 +- .../+classification/@MLDA/index.html | 12 +- doc/+eegtoolkit/+classification/@MLR/MLR.html | 6 +- .../+classification/@MLR/graph.html | 14 +- .../+classification/@MLR/index.html | 12 +- .../+classification/@MLTREE/MLTREE.html | 6 +- .../+classification/@MLTREE/graph.html | 14 +- .../+classification/@MLTREE/index.html | 12 +- .../@MLTboxMulticlass/MLTboxMulticlass.html | 6 +- .../@MLTboxMulticlass/graph.html | 14 +- .../@MLTboxMulticlass/index.html | 12 +- .../@MaxChooser/MaxChooser.html | 6 +- .../+classification/@MaxChooser/graph.html | 14 +- .../+classification/@MaxChooser/index.html | 12 +- .../+classification/@SBLR/SBLR.html | 6 +- .../+classification/@SBLR/graph.html | 14 +- .../+classification/@SBLR/index.html | 12 +- .../+classification/@SMFA/SMFA.html | 6 +- .../+classification/@SMFA/graph.html | 14 +- .../+classification/@SMFA/index.html | 12 +- .../@Experimenter/Experimenter.html | 6 +- .../+experiment/@Experimenter/graph.html | 14 +- .../+experiment/@Experimenter/index.html | 12 +- .../@ResultEvaluator/ResultEvaluator.html | 6 +- .../+experiment/@ResultEvaluator/graph.html | 14 +- .../+experiment/@ResultEvaluator/index.html | 12 +- doc/+eegtoolkit/+featextraction/@CCA/CCA.html | 6 +- .../+featextraction/@CCA/graph.html | 14 +- .../+featextraction/@CCA/index.html | 12 +- doc/+eegtoolkit/+featextraction/@DWT/DWT.html | 6 +- .../+featextraction/@DWT/graph.html | 14 +- .../+featextraction/@DWT/index.html | 12 +- .../@ERRPFeatures/ERRPFeatures.html | 6 +- .../+featextraction/@ERRPFeatures/graph.html | 14 +- .../+featextraction/@ERRPFeatures/index.html | 12 +- doc/+eegtoolkit/+featextraction/@FFT/FFT.html | 6 +- .../+featextraction/@FFT/graph.html | 14 +- .../+featextraction/@FFT/index.html | 12 +- .../FeatureExtractionBase.html | 142 ++++++----- .../FeatureExtractionBase.m | 3 +- .../@FeatureExtractionBase/graph.html | 14 +- .../@FeatureExtractionBase/index.html | 12 +- .../+featextraction/@Goertzel/Goertzel.html | 6 +- .../+featextraction/@Goertzel/graph.html | 14 +- .../+featextraction/@Goertzel/index.html | 12 +- .../+featextraction/@L1MCCA/L1MCCA.html | 6 +- .../+featextraction/@L1MCCA/graph.html | 14 +- .../+featextraction/@L1MCCA/index.html | 12 +- .../@MLR_Transf/MLR_Transf.html | 6 +- .../+featextraction/@MLR_Transf/graph.html | 14 +- .../+featextraction/@MLR_Transf/index.html | 12 +- .../@PSDExtractionBase/PSDExtractionBase.html | 6 +- .../@PSDExtractionBase/graph.html | 14 +- .../@PSDExtractionBase/index.html | 12 +- .../+featextraction/@PWelch/PWelch.html | 6 +- .../+featextraction/@PWelch/graph.html | 14 +- .../+featextraction/@PWelch/index.html | 12 +- .../PWelchExperimental.html | 6 +- .../@PWelchExperimental/graph.html | 14 +- .../@PWelchExperimental/index.html | 12 +- .../+featextraction/@PYAR/PYAR.html | 6 +- .../+featextraction/@PYAR/graph.html | 14 +- .../+featextraction/@PYAR/index.html | 12 +- .../+featextraction/@RawSignal/RawSignal.html | 6 +- .../+featextraction/@RawSignal/graph.html | 14 +- .../+featextraction/@RawSignal/index.html | 12 +- .../+featextraction/@STFT/STFT.html | 6 +- .../+featextraction/@STFT/graph.html | 14 +- .../+featextraction/@STFT/index.html | 12 +- .../+featselection/@FEAST/FEAST.html | 6 +- .../+featselection/@FEAST/graph.html | 14 +- .../+featselection/@FEAST/index.html | 12 +- .../FeatureSelectionBase.html | 6 +- .../@FeatureSelectionBase/graph.html | 14 +- .../@FeatureSelectionBase/index.html | 12 +- doc/+eegtoolkit/+featselection/@PCA/PCA.html | 6 +- .../+featselection/@PCA/graph.html | 14 +- .../+featselection/@PCA/index.html | 12 +- doc/+eegtoolkit/+featselection/@SVD/SVD.html | 6 +- .../+featselection/@SVD/graph.html | 14 +- .../+featselection/@SVD/index.html | 12 +- .../+preprocessing/@Amuse/Amuse.html | 6 +- .../+preprocessing/@Amuse/graph.html | 14 +- .../+preprocessing/@Amuse/index.html | 12 +- .../@DigitalFilter/DigitalFilter.html | 6 +- .../+preprocessing/@DigitalFilter/graph.html | 14 +- .../+preprocessing/@DigitalFilter/index.html | 12 +- .../+preprocessing/@FastICA/FastICA.html | 6 +- .../+preprocessing/@FastICA/graph.html | 14 +- .../+preprocessing/@FastICA/index.html | 12 +- .../@PreprocessingBase/PreprocessingBase.html | 6 +- .../@PreprocessingBase/graph.html | 14 +- .../@PreprocessingBase/index.html | 12 +- .../@Rereferencing/Rereferencing.html | 6 +- .../+preprocessing/@Rereferencing/graph.html | 14 +- .../+preprocessing/@Rereferencing/index.html | 12 +- .../@SampleSelection/SampleSelection.html | 6 +- .../@SampleSelection/graph.html | 14 +- .../@SampleSelection/index.html | 12 +- .../@Windsorize/Windsorize.html | 6 +- .../+preprocessing/@Windsorize/graph.html | 14 +- .../+preprocessing/@Windsorize/index.html | 12 +- .../@FusionInstanceSet/FusionInstanceSet.html | 6 +- .../+util/@FusionInstanceSet/graph.html | 14 +- .../+util/@FusionInstanceSet/index.html | 12 +- .../+util/@InstanceSet/InstanceSet.html | 6 +- doc/+eegtoolkit/+util/@InstanceSet/graph.html | 14 +- doc/+eegtoolkit/+util/@InstanceSet/index.html | 12 +- .../@L1MCCAInstanceSet/L1MCCAInstanceSet.html | 6 +- .../+util/@L1MCCAInstanceSet/graph.html | 14 +- .../+util/@L1MCCAInstanceSet/index.html | 12 +- .../+util/@LSLWrapper/LSLWrapper.html | 6 +- doc/+eegtoolkit/+util/@LSLWrapper/graph.html | 14 +- doc/+eegtoolkit/+util/@LSLWrapper/index.html | 12 +- .../+util/@RawSignalSet/RawSignalSet.html | 6 +- .../+util/@RawSignalSet/graph.html | 14 +- .../+util/@RawSignalSet/index.html | 12 +- .../+util/@ResultSet/ResultSet.html | 6 +- doc/+eegtoolkit/+util/@ResultSet/graph.html | 14 +- doc/+eegtoolkit/+util/@ResultSet/index.html | 12 +- doc/+eegtoolkit/+util/@Session/Session.html | 6 +- doc/+eegtoolkit/+util/@Session/graph.html | 14 +- doc/+eegtoolkit/+util/@Session/index.html | 12 +- doc/+eegtoolkit/+util/@Trial/Trial.html | 6 +- doc/+eegtoolkit/+util/@Trial/graph.html | 14 +- doc/+eegtoolkit/+util/@Trial/index.html | 12 +- doc/exampleCSP.html | 2 +- doc/exampleCombiCCA.html | 2 +- doc/exampleDefault.html | 2 +- doc/exampleEPOCCCASVM.html | 2 +- doc/exampleERRP.html | 2 +- doc/exampleERRPSSVEPDemo.html | 94 +++++++ doc/exampleERRPSSVEPDemo.m | 46 ++++ doc/exampleEarlyFusion.html | 2 +- doc/exampleEpoc.html | 2 +- doc/exampleITCCA.html | 2 +- doc/exampleL1MCCA.html | 2 +- doc/exampleLSL.html | 2 +- doc/exampleLateFusion.html | 2 +- doc/exampleMotorPWelch.html | 2 +- doc/exampleOptimal.html | 2 +- doc/exampleSMFA.html | 2 +- doc/graph.dot | 1 + doc/graph.html | 21 +- doc/graph.map | 19 +- doc/graph.png | Bin 45456 -> 49050 bytes doc/index.html | 4 +- 209 files changed, 1680 insertions(+), 1056 deletions(-) create mode 100644 doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/CSPFilterBankWrapper.html create mode 100644 doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/CSPFilterBankWrapper.m create mode 100644 doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.dot create mode 100644 doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.html create mode 100644 doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.map create mode 100644 doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.png create mode 100644 doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/index.html create mode 100644 doc/exampleERRPSSVEPDemo.html create mode 100644 doc/exampleERRPSSVEPDemo.m diff --git a/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m b/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m index ad07e26..531957d 100644 --- a/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m +++ b/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m @@ -1,5 +1,5 @@ % Abstract class for classification. Implement the functions for any -% classifier (e.g. LibSVM, LDA, MLR, Decision trees, Adaboost, etc.) +% classifier (e.g. LibSVM, LDA, MLR, RFs, Adaboost, etc.) % % Properties: % instanceSet: the training/test set in an InstanceSet structure diff --git a/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m b/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m index 29ef454..647966b 100644 --- a/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m +++ b/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m @@ -1,6 +1,5 @@ % Abstract class for feature extraction. Implement the functions for any -% preprocessing step (e.g. filtering, artifact removal, sub-sampling, -% rereferencing, etc. +% feature extractor (e.g. PWelch, FFT, DWT, PYAR, etc.) % % Properties: % instanceSet: Output - the features in an InstanceSet structure diff --git a/doc/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.html b/doc/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.html index c987680..f4dcd71 100644 --- a/doc/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.html +++ b/doc/+eegtoolkit/+aggregation/@AggregatorBase/AggregatorBase.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +aggregation > @AggregatorBase > AggregatorBase.m
    +
    Home > +eegtoolkit > +aggregation > @AggregatorBase > AggregatorBase.m
    +Index for +eegtoolkit/+aggregation/@AggregatorBase >-->

    AggregatorBase

    @@ -96,6 +96,6 @@

    SOURCE CODE ^end 0035 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.html b/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.html index 63f8728..4fd7b72 100644 --- a/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.html +++ b/doc/+eegtoolkit/+aggregation/@AggregatorBase/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+aggregation/@AggregatorBase - - + Dependency Graph for +eegtoolkit/+aggregation/@AggregatorBase + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+aggregation/@AggregatorBase >
    -

    Dependency Graph for ./+eegtoolkit/+aggregation/@AggregatorBase

    +Index for +eegtoolkit/+aggregation/@AggregatorBase > +

    Dependency Graph for +eegtoolkit/+aggregation/@AggregatorBase

    -Dependency Graph for ./+eegtoolkit/+aggregation/@AggregatorBase +Dependency Graph for +eegtoolkit/+aggregation/@AggregatorBase
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@AggregatorBase/index.html b/doc/+eegtoolkit/+aggregation/@AggregatorBase/index.html index c8f11ba..ddd7858 100644 --- a/doc/+eegtoolkit/+aggregation/@AggregatorBase/index.html +++ b/doc/+eegtoolkit/+aggregation/@AggregatorBase/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+aggregation/@AggregatorBase - - + Index for Directory +eegtoolkit/+aggregation/@AggregatorBase + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+aggregation/@AggregatorBase >
    +Index for +eegtoolkit/+aggregation/@AggregatorBase > -

    Index for ./+eegtoolkit/+aggregation/@AggregatorBase

    +

    Index for +eegtoolkit/+aggregation/@AggregatorBase

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelAveraging/ChannelAveraging.html b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/ChannelAveraging.html index 7725575..663856b 100644 --- a/doc/+eegtoolkit/+aggregation/@ChannelAveraging/ChannelAveraging.html +++ b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/ChannelAveraging.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +aggregation > @ChannelAveraging > ChannelAveraging.m
    +
    Home > +eegtoolkit > +aggregation > @ChannelAveraging > ChannelAveraging.m
    +
    Index for +eegtoolkit/+aggregation/@ChannelAveraging >
    -->

    ChannelAveraging

    @@ -78,6 +78,6 @@

    SOURCE CODE ^end 0033 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.html b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.html index 1f109ac..af77ae6 100644 --- a/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.html +++ b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelAveraging - - + Dependency Graph for +eegtoolkit/+aggregation/@ChannelAveraging + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+aggregation/@ChannelAveraging >
    -

    Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelAveraging

    +Index for +eegtoolkit/+aggregation/@ChannelAveraging > +

    Dependency Graph for +eegtoolkit/+aggregation/@ChannelAveraging

    -Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelAveraging +Dependency Graph for +eegtoolkit/+aggregation/@ChannelAveraging
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelAveraging/index.html b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/index.html index 43b615a..0ba6bd3 100644 --- a/doc/+eegtoolkit/+aggregation/@ChannelAveraging/index.html +++ b/doc/+eegtoolkit/+aggregation/@ChannelAveraging/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+aggregation/@ChannelAveraging - - + Index for Directory +eegtoolkit/+aggregation/@ChannelAveraging + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+aggregation/@ChannelAveraging >
    +Index for +eegtoolkit/+aggregation/@ChannelAveraging > -

    Index for ./+eegtoolkit/+aggregation/@ChannelAveraging

    +

    Index for +eegtoolkit/+aggregation/@ChannelAveraging

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelConcat/ChannelConcat.html b/doc/+eegtoolkit/+aggregation/@ChannelConcat/ChannelConcat.html index 6e777be..10b2ede 100644 --- a/doc/+eegtoolkit/+aggregation/@ChannelConcat/ChannelConcat.html +++ b/doc/+eegtoolkit/+aggregation/@ChannelConcat/ChannelConcat.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+aggregation/@ChannelConcat >
    -->

    ChannelConcat

    @@ -79,6 +79,6 @@

    SOURCE CODE ^end 0034 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.html b/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.html index 307459e..c193196 100644 --- a/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.html +++ b/doc/+eegtoolkit/+aggregation/@ChannelConcat/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelConcat - - + Dependency Graph for +eegtoolkit/+aggregation/@ChannelConcat + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+aggregation/@ChannelConcat >
    -

    Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelConcat

    +Index for +eegtoolkit/+aggregation/@ChannelConcat > +

    Dependency Graph for +eegtoolkit/+aggregation/@ChannelConcat

    -Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelConcat +Dependency Graph for +eegtoolkit/+aggregation/@ChannelConcat
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelConcat/index.html b/doc/+eegtoolkit/+aggregation/@ChannelConcat/index.html index 1460814..35ef929 100644 --- a/doc/+eegtoolkit/+aggregation/@ChannelConcat/index.html +++ b/doc/+eegtoolkit/+aggregation/@ChannelConcat/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+aggregation/@ChannelConcat - - + Index for Directory +eegtoolkit/+aggregation/@ChannelConcat + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+aggregation/@ChannelConcat >
    +Index for +eegtoolkit/+aggregation/@ChannelConcat > -

    Index for ./+eegtoolkit/+aggregation/@ChannelConcat

    +

    Index for +eegtoolkit/+aggregation/@ChannelConcat

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelRatio/ChannelRatio.html b/doc/+eegtoolkit/+aggregation/@ChannelRatio/ChannelRatio.html index e649cb2..a4fb8e1 100644 --- a/doc/+eegtoolkit/+aggregation/@ChannelRatio/ChannelRatio.html +++ b/doc/+eegtoolkit/+aggregation/@ChannelRatio/ChannelRatio.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+aggregation/@ChannelRatio >
    -->

    ChannelRatio

    @@ -78,6 +78,6 @@

    SOURCE CODE ^end 0033 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.html b/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.html index afc5774..d131d3b 100644 --- a/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.html +++ b/doc/+eegtoolkit/+aggregation/@ChannelRatio/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelRatio - - + Dependency Graph for +eegtoolkit/+aggregation/@ChannelRatio + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+aggregation/@ChannelRatio >
    -

    Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelRatio

    +Index for +eegtoolkit/+aggregation/@ChannelRatio > +

    Dependency Graph for +eegtoolkit/+aggregation/@ChannelRatio

    -Dependency Graph for ./+eegtoolkit/+aggregation/@ChannelRatio +Dependency Graph for +eegtoolkit/+aggregation/@ChannelRatio
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@ChannelRatio/index.html b/doc/+eegtoolkit/+aggregation/@ChannelRatio/index.html index e3633bb..0a24b4a 100644 --- a/doc/+eegtoolkit/+aggregation/@ChannelRatio/index.html +++ b/doc/+eegtoolkit/+aggregation/@ChannelRatio/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+aggregation/@ChannelRatio - - + Index for Directory +eegtoolkit/+aggregation/@ChannelRatio + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+aggregation/@ChannelRatio >
    +Index for +eegtoolkit/+aggregation/@ChannelRatio > -

    Index for ./+eegtoolkit/+aggregation/@ChannelRatio

    +

    Index for +eegtoolkit/+aggregation/@ChannelRatio

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@Fisher/Fisher.html b/doc/+eegtoolkit/+aggregation/@Fisher/Fisher.html index 8e4d7ee..ce84828 100644 --- a/doc/+eegtoolkit/+aggregation/@Fisher/Fisher.html +++ b/doc/+eegtoolkit/+aggregation/@Fisher/Fisher.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+aggregation/@Fisher >
    -->

    Fisher

    @@ -142,6 +142,6 @@

    SOURCE CODE ^end 0097 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@Fisher/graph.html b/doc/+eegtoolkit/+aggregation/@Fisher/graph.html index 51a136b..9373562 100644 --- a/doc/+eegtoolkit/+aggregation/@Fisher/graph.html +++ b/doc/+eegtoolkit/+aggregation/@Fisher/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+aggregation/@Fisher - - + Dependency Graph for +eegtoolkit/+aggregation/@Fisher + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+aggregation/@Fisher >
    -

    Dependency Graph for ./+eegtoolkit/+aggregation/@Fisher

    +Index for +eegtoolkit/+aggregation/@Fisher > +

    Dependency Graph for +eegtoolkit/+aggregation/@Fisher

    -Dependency Graph for ./+eegtoolkit/+aggregation/@Fisher +Dependency Graph for +eegtoolkit/+aggregation/@Fisher
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@Fisher/index.html b/doc/+eegtoolkit/+aggregation/@Fisher/index.html index cde5909..3549bfc 100644 --- a/doc/+eegtoolkit/+aggregation/@Fisher/index.html +++ b/doc/+eegtoolkit/+aggregation/@Fisher/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+aggregation/@Fisher - - + Index for Directory +eegtoolkit/+aggregation/@Fisher + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+aggregation/@Fisher >
    +Index for +eegtoolkit/+aggregation/@Fisher > -

    Index for ./+eegtoolkit/+aggregation/@Fisher

    +

    Index for +eegtoolkit/+aggregation/@Fisher

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@LateFusion/LateFusion.html b/doc/+eegtoolkit/+aggregation/@LateFusion/LateFusion.html index a1115e5..e379c0a 100644 --- a/doc/+eegtoolkit/+aggregation/@LateFusion/LateFusion.html +++ b/doc/+eegtoolkit/+aggregation/@LateFusion/LateFusion.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+aggregation/@LateFusion >
    -->

    LateFusion

    @@ -76,6 +76,6 @@

    SOURCE CODE ^end 0031 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@LateFusion/graph.html b/doc/+eegtoolkit/+aggregation/@LateFusion/graph.html index 42fda6d..6326c57 100644 --- a/doc/+eegtoolkit/+aggregation/@LateFusion/graph.html +++ b/doc/+eegtoolkit/+aggregation/@LateFusion/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+aggregation/@LateFusion - - + Dependency Graph for +eegtoolkit/+aggregation/@LateFusion + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+aggregation/@LateFusion >
    -

    Dependency Graph for ./+eegtoolkit/+aggregation/@LateFusion

    +Index for +eegtoolkit/+aggregation/@LateFusion > +

    Dependency Graph for +eegtoolkit/+aggregation/@LateFusion

    -Dependency Graph for ./+eegtoolkit/+aggregation/@LateFusion +Dependency Graph for +eegtoolkit/+aggregation/@LateFusion
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@LateFusion/index.html b/doc/+eegtoolkit/+aggregation/@LateFusion/index.html index 6b955cc..1fa3958 100644 --- a/doc/+eegtoolkit/+aggregation/@LateFusion/index.html +++ b/doc/+eegtoolkit/+aggregation/@LateFusion/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+aggregation/@LateFusion - - + Index for Directory +eegtoolkit/+aggregation/@LateFusion + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+aggregation/@LateFusion >
    +Index for +eegtoolkit/+aggregation/@LateFusion > -

    Index for ./+eegtoolkit/+aggregation/@LateFusion

    +

    Index for +eegtoolkit/+aggregation/@LateFusion

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@VLAD/VLAD.html b/doc/+eegtoolkit/+aggregation/@VLAD/VLAD.html index 9b3acf6..e6fcc5d 100644 --- a/doc/+eegtoolkit/+aggregation/@VLAD/VLAD.html +++ b/doc/+eegtoolkit/+aggregation/@VLAD/VLAD.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+aggregation/@VLAD >
    -->

    VLAD

    @@ -128,6 +128,6 @@

    SOURCE CODE ^end 0082 end 0083 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@VLAD/graph.html b/doc/+eegtoolkit/+aggregation/@VLAD/graph.html index 09f3963..d8f213e 100644 --- a/doc/+eegtoolkit/+aggregation/@VLAD/graph.html +++ b/doc/+eegtoolkit/+aggregation/@VLAD/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+aggregation/@VLAD - - + Dependency Graph for +eegtoolkit/+aggregation/@VLAD + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+aggregation/@VLAD >
    -

    Dependency Graph for ./+eegtoolkit/+aggregation/@VLAD

    +Index for +eegtoolkit/+aggregation/@VLAD > +

    Dependency Graph for +eegtoolkit/+aggregation/@VLAD

    -Dependency Graph for ./+eegtoolkit/+aggregation/@VLAD +Dependency Graph for +eegtoolkit/+aggregation/@VLAD
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+aggregation/@VLAD/index.html b/doc/+eegtoolkit/+aggregation/@VLAD/index.html index 8b28ee2..ef943b4 100644 --- a/doc/+eegtoolkit/+aggregation/@VLAD/index.html +++ b/doc/+eegtoolkit/+aggregation/@VLAD/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+aggregation/@VLAD - - + Index for Directory +eegtoolkit/+aggregation/@VLAD + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+aggregation/@VLAD >
    +Index for +eegtoolkit/+aggregation/@VLAD > -

    Index for ./+eegtoolkit/+aggregation/@VLAD

    +

    Index for +eegtoolkit/+aggregation/@VLAD

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@Adaboost/Adaboost.html b/doc/+eegtoolkit/+classification/@Adaboost/Adaboost.html index 27f3d17..77e9e11 100644 --- a/doc/+eegtoolkit/+classification/@Adaboost/Adaboost.html +++ b/doc/+eegtoolkit/+classification/@Adaboost/Adaboost.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@Adaboost >
    -->

    Adaboost

    @@ -176,6 +176,6 @@

    SOURCE CODE ^end 0130 end 0131 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@Adaboost/graph.html b/doc/+eegtoolkit/+classification/@Adaboost/graph.html index 3ed3a88..abc259f 100644 --- a/doc/+eegtoolkit/+classification/@Adaboost/graph.html +++ b/doc/+eegtoolkit/+classification/@Adaboost/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@Adaboost - - + Dependency Graph for +eegtoolkit/+classification/@Adaboost + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@Adaboost >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@Adaboost

    +Index for +eegtoolkit/+classification/@Adaboost > +

    Dependency Graph for +eegtoolkit/+classification/@Adaboost

    -Dependency Graph for ./+eegtoolkit/+classification/@Adaboost +Dependency Graph for +eegtoolkit/+classification/@Adaboost
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@Adaboost/index.html b/doc/+eegtoolkit/+classification/@Adaboost/index.html index 85d8290..8cf6af8 100644 --- a/doc/+eegtoolkit/+classification/@Adaboost/index.html +++ b/doc/+eegtoolkit/+classification/@Adaboost/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@Adaboost - - + Index for Directory +eegtoolkit/+classification/@Adaboost + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@Adaboost >
    +Index for +eegtoolkit/+classification/@Adaboost > -

    Index for ./+eegtoolkit/+classification/@Adaboost

    +

    Index for +eegtoolkit/+classification/@Adaboost

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/CSPFilterBankWrapper.html b/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/CSPFilterBankWrapper.html new file mode 100644 index 0000000..83519fa --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/CSPFilterBankWrapper.html @@ -0,0 +1,234 @@ + + + + Description of CSPFilterBankWrapper + + + + + + + + + +
    Home > +eegtoolkit > +classification > @CSPFilterBankWrapper > CSPFilterBankWrapper.m
    + + + +

    CSPFilterBankWrapper +

    + +

    PURPOSE ^

    +
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: + +This function is called by: + + + +

    SUBFUNCTIONS ^

    + +

    DOWNLOAD ^

    +

    CSPFilterBankWrapper.m

    +

    SOURCE CODE ^

    +
    0001 classdef CSPFilterBankWrapper < eegtoolkit.classification.ClassifierBase;
    +0002     properties (Constant)
    +0003         
    +0004     end
    +0005     properties
    +0006         baseClassifier;
    +0007         channel;
    +0008         cspFilters;
    +0009         filterBanks;
    +0010         samplingRate;
    +0011     end
    +0012     
    +0013     methods (Access = public)
    +0014         function CSPFB = CSPFilterBankWrapper(filterBanks, samplingRate)
    +0015             CSPFB.cspFilters = {};
    +0016             CSPFB.filterBanks = filterBanks;
    +0017             CSPFB.samplingRate = samplingRate;
    +0018             %filter_banks=[8 12; 12 16; 16 20;20 24;24 28];
    +0019 %             if(isa(instanceSet,'eegtoolkit.util.RawSignalSet')
    +0020 %                 CSP.instanceSet = instanceSet;
    +0021 %             else
    +0022 %                 error('RawSignal extractor should be used with CSPWrapper');
    +0023 %             end
    +0024         end
    +0025         
    +0026         
    +0027         function CSPFB = build(CSPFB)
    +0028             % Builds the classification models
    +0029             CSPFB.learnCSPMatrix(CSPFB.instanceSet.sMatrix,CSPFB.instanceSet.labels);
    +0030             instanceLocal = CSPFB.extract(CSPFB.instanceSet.sMatrix);
    +0031             CSPFB.baseClassifier.instanceSet = eegtoolkit.util.InstanceSet(instanceLocal,CSPFB.instanceSet.labels);
    +0032             CSPFB.baseClassifier.build;
    +0033             CSPFB.reset;
    +0034         end
    +0035         
    +0036         function [output, probabilities, ranking] = classifyInstance(CSPFB,instance)
    +0037             
    +0038 %             instance = CSP.extract
    +0039             %input = instance matrix rows = instances, cols = attributes
    +0040             %output = predicted class
    +0041             %probabilities = probability for predicted class
    +0042             %ranking = propabilities for all classes (e.g. to use with mAP)
    +0043             
    +0044             %TODO:should print an error if 'build' has not been called
    +0045             testInstances = CSPFB.extract(instance);
    +0046             [output, probabilities, ranking] = CSPFB.baseClassifier.classifyInstance(testInstances);
    +0047 %             numModels = length(LSVM.models);
    +0048 %             [numinstance, ~] = size(testInstances);
    +0049 %             scores = zeros(numModels,numinstance);
    +0050 %             for i=1:numModels
    +0051 %                 %predict using the stored models
    +0052 %                 [~, ~, t] = svmpredict(eye(numinstance,1),testInstances, LSVM.models{i},'-b 1 -q');
    +0053 %                 %store probability for each class
    +0054 %                 scores(i,:) = t(:,1);
    +0055 %             end
    +0056 %             output = zeros(numinstance,1);
    +0057 %             probabilities = zeros(numinstance,1);
    +0058 %             ranking = scores;
    +0059 %             for i=1:numinstance
    +0060 %                 %select the class with the highest probability
    +0061 %                 [prob, idx] = max(scores(:,i));
    +0062 %                 uniqueLabels = unique(LSVM.instanceSet.getLabels);
    +0063 %                 %output the label with highest probability
    +0064 %                 output(i,1) = uniqueLabels(idx);
    +0065 %                 %return the probability for the output label
    +0066 %                 probabilities(i,1) = prob;
    +0067 %             end
    +0068         end
    +0069         
    +0070         function CSPFB = reset(CSPFB)
    +0071             % 'Resets' the classifier.
    +0072 %             CSP.models = {};
    +0073         end
    +0074         
    +0075         function configInfo = getConfigInfo(CSPFB)
    +0076             configInfo = '\n';
    +0077         end
    +0078         
    +0079                         
    +0080         function time = getTime(CSPFB)
    +0081             time = 0;
    +0082         end
    +0083     end
    +0084     methods (Access = private)
    +0085         function [] = learnCSPMatrix(CSPFB, sMatrix, labels)
    +0086                        %[trialsMat,labels] = ssveptoolkit.util.Trial.trialsCellToMat(in);
    +0087             [numTrials,numChannels,numSamples] = size(sMatrix);
    +0088 %             numTrials = length(CSPFB.trials);
    +0089 %             [numChannels,numSamples] = size(CSPFB.trials{1}.signal);
    +0090 %             samplingRate = CSPFB.trials{1}.samplingRate;
    +0091             filter_banks= CSPFB.filterBanks;
    +0092             [nfb, mfb] = size(filter_banks);
    +0093 
    +0094             for iter_fb=1:nfb
    +0095                 
    +0096                 [b,a]=butter(3,filter_banks(iter_fb)/(CSPFB.samplingRate/2));
    +0097 %                 labels = zeros(numTrials,1);
    +0098                 %numTrials X numChannels X numSamples
    +0099                 trialsMat = permute(sMatrix,[2,3,1]);
    +0100 %                 trialsMat = zeros(numChannels,numSamples,numTrials);
    +0101 %                 for i = 1 : length(CSP_Feat.trials)
    +0102 %                     for i_ch = 1:numChannels
    +0103 %                         trialsMat(i_ch,:,i) = filtfilt(b,a,CSP_Feat.trials{i}.signal(i_ch,:));
    +0104 %                     end
    +0105 %                     labels(i) = CSP_Feat.trials{i}.label;
    +0106 %                 end
    +0107                 
    +0108                 trialsMat = permute(trialsMat,[2 1 3]);
    +0109                 [N1, Nch1, Ntr1] = size(trialsMat);
    +0110                 for i = 1:Nch1
    +0111                     for j = 1:Ntr1
    +0112                         trialsMat(:,i,j) = (trialsMat(:,i,j) - mean(trialsMat(:,i,j)));
    +0113                     end
    +0114                 end
    +0115                 x_train = trialsMat;%(:,:,CSP_Feat.trainIdx);
    +0116                 y_train = labels;%(CSP_Feat.trainIdx);
    +0117                 [N, Nch, Ntr] = size(x_train);
    +0118                 trialCov=zeros(Nch,Nch,Ntr);
    +0119                 for t=1:length(y_train)
    +0120                     E = x_train(:,:,t)';
    +0121                     EE = E * E';
    +0122                     trialCov(:,:,t) = EE ./ trace(EE);
    +0123                 end
    +0124                 for c=1:2
    +0125                     covMat{c} = mean(trialCov(:,:,y_train == c),3);
    +0126                 end
    +0127                 [U, D] = eig(covMat{1},covMat{2},'qz');
    +0128                 eigenvalues = diag(D);
    +0129                 [~, ind] = sort(eigenvalues, 'descend');
    +0130                 U = U(:,ind);
    +0131                 CSPFB.cspFilters{iter_fb} = U';
    +0132 %                 CSP_Filter = U';
    +0133             end
    +0134                 %trialsMat2=zeros(N,3,Ntr);
    +0135                
    +0136         end
    +0137         
    +0138         function instances = extract(CSPFB,sMatrix)
    +0139             trialsMat = permute(sMatrix,[2,3,1]);
    +0140             trialsMat = permute(trialsMat,[2,1,3]);
    +0141             [numTrials,numChannels,~] = size(sMatrix);
    +0142             final_instances = zeros(numTrials, numChannels*length(CSPFB.filterBanks));
    +0143             for iter_fb=1:length(CSPFB.cspFilters)
    +0144                 for j = 1:size(trialsMat,3)
    +0145                     trialsMat(:,:,j) = (CSPFB.cspFilters{iter_fb}*trialsMat(:,:,j)')';
    +0146                 end
    +0147                 
    +0148                 instances = zeros(numTrials, numChannels);
    +0149                 %labels = zeros(numTrials,1);
    +0150                 
    +0151                 for i=1:numTrials
    +0152                     
    +0153                     projectedTrial = trialsMat(:,:,i);%Filter * CSP_Feat.trials{i}.signal(:,i);% EEGSignals.x(:,:,t)';
    +0154                     %generating the features as the log variance of the projected signals
    +0155                     variances = var(projectedTrial,0,1);
    +0156                     instances(i,:) = log(variances)';
    +0157                     %labels(i,1) = floor(CSP_Feat.trials{i}.label);
    +0158                 end
    +0159                 final_instances(:,numChannels*(iter_fb-1)+1:numChannels*iter_fb) = instances;
    +0160                 %            CSP_Feat.avgTime = toc/numTrials;
    +0161 %                 CSP_Feat.instanceSet = ssveptoolkit.util.InstanceSet(final_instances,labels);
    +0162             end
    +0163             instances = final_instances;
    +0164         end
    +0165     
    +0166     
    +0167     
    +0168     end
    +0169     %             [numTrials,numChannels,~] = size(sMatrix);
    +0170     %             sMatrix = permute(sMatrix,[3,2,1]);
    +0171     %             for i=1:size(sMatrix,3);
    +0172     %                 sMatrix(:,:,i) = (CSPFB.cspFilter*sMatrix(:,:,i)')';
    +0173     %             end
    +0174     %             instances = zeros(numTrials,numChannels);
    +0175     %             for i=1:numTrials
    +0176     %                 projectedTrial = sMatrix(:,:,i);
    +0177     %                 variances = var(projectedTrial,0,1);
    +0178     %                 instances(i,:) = log(variances)';
    +0179     %             end
    +0180     % %             instanceSet = eegtoolkit.util.InstanceSet(instances,labels);
    +0181     %         end
    +0182     %end
    +0183 end
    +0184
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/CSPFilterBankWrapper.m b/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/CSPFilterBankWrapper.m new file mode 100644 index 0000000..97e9faf --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/CSPFilterBankWrapper.m @@ -0,0 +1,184 @@ +classdef CSPFilterBankWrapper < eegtoolkit.classification.ClassifierBase; + properties (Constant) + + end + properties + baseClassifier; + channel; + cspFilters; + filterBanks; + samplingRate; + end + + methods (Access = public) + function CSPFB = CSPFilterBankWrapper(filterBanks, samplingRate) + CSPFB.cspFilters = {}; + CSPFB.filterBanks = filterBanks; + CSPFB.samplingRate = samplingRate; + %filter_banks=[8 12; 12 16; 16 20;20 24;24 28]; +% if(isa(instanceSet,'eegtoolkit.util.RawSignalSet') +% CSP.instanceSet = instanceSet; +% else +% error('RawSignal extractor should be used with CSPWrapper'); +% end + end + + + function CSPFB = build(CSPFB) + % Builds the classification models + CSPFB.learnCSPMatrix(CSPFB.instanceSet.sMatrix,CSPFB.instanceSet.labels); + instanceLocal = CSPFB.extract(CSPFB.instanceSet.sMatrix); + CSPFB.baseClassifier.instanceSet = eegtoolkit.util.InstanceSet(instanceLocal,CSPFB.instanceSet.labels); + CSPFB.baseClassifier.build; + CSPFB.reset; + end + + function [output, probabilities, ranking] = classifyInstance(CSPFB,instance) + +% instance = CSP.extract + %input = instance matrix rows = instances, cols = attributes + %output = predicted class + %probabilities = probability for predicted class + %ranking = propabilities for all classes (e.g. to use with mAP) + + %TODO:should print an error if 'build' has not been called + testInstances = CSPFB.extract(instance); + [output, probabilities, ranking] = CSPFB.baseClassifier.classifyInstance(testInstances); +% numModels = length(LSVM.models); +% [numinstance, ~] = size(testInstances); +% scores = zeros(numModels,numinstance); +% for i=1:numModels +% %predict using the stored models +% [~, ~, t] = svmpredict(eye(numinstance,1),testInstances, LSVM.models{i},'-b 1 -q'); +% %store probability for each class +% scores(i,:) = t(:,1); +% end +% output = zeros(numinstance,1); +% probabilities = zeros(numinstance,1); +% ranking = scores; +% for i=1:numinstance +% %select the class with the highest probability +% [prob, idx] = max(scores(:,i)); +% uniqueLabels = unique(LSVM.instanceSet.getLabels); +% %output the label with highest probability +% output(i,1) = uniqueLabels(idx); +% %return the probability for the output label +% probabilities(i,1) = prob; +% end + end + + function CSPFB = reset(CSPFB) + % 'Resets' the classifier. +% CSP.models = {}; + end + + function configInfo = getConfigInfo(CSPFB) + configInfo = '\n'; + end + + + function time = getTime(CSPFB) + time = 0; + end + end + methods (Access = private) + function [] = learnCSPMatrix(CSPFB, sMatrix, labels) + %[trialsMat,labels] = ssveptoolkit.util.Trial.trialsCellToMat(in); + [numTrials,numChannels,numSamples] = size(sMatrix); +% numTrials = length(CSPFB.trials); +% [numChannels,numSamples] = size(CSPFB.trials{1}.signal); +% samplingRate = CSPFB.trials{1}.samplingRate; + filter_banks= CSPFB.filterBanks; + [nfb, mfb] = size(filter_banks); + + for iter_fb=1:nfb + + [b,a]=butter(3,filter_banks(iter_fb)/(CSPFB.samplingRate/2)); +% labels = zeros(numTrials,1); + %numTrials X numChannels X numSamples + trialsMat = permute(sMatrix,[2,3,1]); +% trialsMat = zeros(numChannels,numSamples,numTrials); +% for i = 1 : length(CSP_Feat.trials) +% for i_ch = 1:numChannels +% trialsMat(i_ch,:,i) = filtfilt(b,a,CSP_Feat.trials{i}.signal(i_ch,:)); +% end +% labels(i) = CSP_Feat.trials{i}.label; +% end + + trialsMat = permute(trialsMat,[2 1 3]); + [N1, Nch1, Ntr1] = size(trialsMat); + for i = 1:Nch1 + for j = 1:Ntr1 + trialsMat(:,i,j) = (trialsMat(:,i,j) - mean(trialsMat(:,i,j))); + end + end + x_train = trialsMat;%(:,:,CSP_Feat.trainIdx); + y_train = labels;%(CSP_Feat.trainIdx); + [N, Nch, Ntr] = size(x_train); + trialCov=zeros(Nch,Nch,Ntr); + for t=1:length(y_train) + E = x_train(:,:,t)'; + EE = E * E'; + trialCov(:,:,t) = EE ./ trace(EE); + end + for c=1:2 + covMat{c} = mean(trialCov(:,:,y_train == c),3); + end + [U, D] = eig(covMat{1},covMat{2},'qz'); + eigenvalues = diag(D); + [~, ind] = sort(eigenvalues, 'descend'); + U = U(:,ind); + CSPFB.cspFilters{iter_fb} = U'; +% CSP_Filter = U'; + end + %trialsMat2=zeros(N,3,Ntr); + + end + + function instances = extract(CSPFB,sMatrix) + trialsMat = permute(sMatrix,[2,3,1]); + trialsMat = permute(trialsMat,[2,1,3]); + [numTrials,numChannels,~] = size(sMatrix); + final_instances = zeros(numTrials, numChannels*length(CSPFB.filterBanks)); + for iter_fb=1:length(CSPFB.cspFilters) + for j = 1:size(trialsMat,3) + trialsMat(:,:,j) = (CSPFB.cspFilters{iter_fb}*trialsMat(:,:,j)')'; + end + + instances = zeros(numTrials, numChannels); + %labels = zeros(numTrials,1); + + for i=1:numTrials + + projectedTrial = trialsMat(:,:,i);%Filter * CSP_Feat.trials{i}.signal(:,i);% EEGSignals.x(:,:,t)'; + %generating the features as the log variance of the projected signals + variances = var(projectedTrial,0,1); + instances(i,:) = log(variances)'; + %labels(i,1) = floor(CSP_Feat.trials{i}.label); + end + final_instances(:,numChannels*(iter_fb-1)+1:numChannels*iter_fb) = instances; + % CSP_Feat.avgTime = toc/numTrials; +% CSP_Feat.instanceSet = ssveptoolkit.util.InstanceSet(final_instances,labels); + end + instances = final_instances; + end + + + + end + % [numTrials,numChannels,~] = size(sMatrix); + % sMatrix = permute(sMatrix,[3,2,1]); + % for i=1:size(sMatrix,3); + % sMatrix(:,:,i) = (CSPFB.cspFilter*sMatrix(:,:,i)')'; + % end + % instances = zeros(numTrials,numChannels); + % for i=1:numTrials + % projectedTrial = sMatrix(:,:,i); + % variances = var(projectedTrial,0,1); + % instances(i,:) = log(variances)'; + % end + % % instanceSet = eegtoolkit.util.InstanceSet(instances,labels); + % end + %end +end + diff --git a/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.dot b/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.dot new file mode 100644 index 0000000..de486f9 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.dot @@ -0,0 +1,6 @@ +/* Created by mdot for Matlab */ +digraph m2html { + CSPFilterBankWrapper -> CSPFilterBankWrapper; + + CSPFilterBankWrapper [URL="CSPFilterBankWrapper.html"]; +} \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.html b/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.html new file mode 100644 index 0000000..8be66bf --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.html @@ -0,0 +1,28 @@ + + + + Dependency Graph for +eegtoolkit/+classification/@CSPFilterBankWrapper + + + + + + + + + +
    +
    < Master indexIndex for +eegtoolkit/+classification/@CSPFilterBankWrapper >
    +

    Dependency Graph for +eegtoolkit/+classification/@CSPFilterBankWrapper

    + +
    +Dependency Graph for +eegtoolkit/+classification/@CSPFilterBankWrapper + + + +
    + +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.map b/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.map new file mode 100644 index 0000000..daaf177 --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.map @@ -0,0 +1 @@ + diff --git a/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.png b/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a736a314dd09213c65deda49e8abe6200dbb7b40 GIT binary patch literal 7147 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 literal 0 HcmV?d00001 diff --git a/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/index.html b/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/index.html new file mode 100644 index 0000000..812d0bc --- /dev/null +++ b/doc/+eegtoolkit/+classification/@CSPFilterBankWrapper/index.html @@ -0,0 +1,32 @@ + + + + Index for Directory +eegtoolkit/+classification/@CSPFilterBankWrapper + + + + + + + + + + +
    < Master indexIndex for +eegtoolkit/+classification/@CSPFilterBankWrapper >
    + +

    Index for +eegtoolkit/+classification/@CSPFilterBankWrapper

    + +

    Matlab files in this directory:

    + +
     CSPFilterBankWrapper
    + + + +

    Dependency Graph

    + +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CSPWrapper/CSPWrapper.html b/doc/+eegtoolkit/+classification/@CSPWrapper/CSPWrapper.html index 951bf5c..155589b 100644 --- a/doc/+eegtoolkit/+classification/@CSPWrapper/CSPWrapper.html +++ b/doc/+eegtoolkit/+classification/@CSPWrapper/CSPWrapper.html @@ -12,10 +12,10 @@ - + +Index for +eegtoolkit/+classification/@CSPWrapper >-->

    CSPWrapper

    @@ -178,6 +178,6 @@

    SOURCE CODE ^end 0132 end 0133 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CSPWrapper/graph.html b/doc/+eegtoolkit/+classification/@CSPWrapper/graph.html index 1365d5e..941232d 100644 --- a/doc/+eegtoolkit/+classification/@CSPWrapper/graph.html +++ b/doc/+eegtoolkit/+classification/@CSPWrapper/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@CSPWrapper - - + Dependency Graph for +eegtoolkit/+classification/@CSPWrapper + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@CSPWrapper >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@CSPWrapper

    +Index for +eegtoolkit/+classification/@CSPWrapper > +

    Dependency Graph for +eegtoolkit/+classification/@CSPWrapper

    -Dependency Graph for ./+eegtoolkit/+classification/@CSPWrapper +Dependency Graph for +eegtoolkit/+classification/@CSPWrapper
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CSPWrapper/index.html b/doc/+eegtoolkit/+classification/@CSPWrapper/index.html index 5f93366..4cb7dcf 100644 --- a/doc/+eegtoolkit/+classification/@CSPWrapper/index.html +++ b/doc/+eegtoolkit/+classification/@CSPWrapper/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@CSPWrapper - - + Index for Directory +eegtoolkit/+classification/@CSPWrapper + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@CSPWrapper >
    +Index for +eegtoolkit/+classification/@CSPWrapper > -

    Index for ./+eegtoolkit/+classification/@CSPWrapper

    +

    Index for +eegtoolkit/+classification/@CSPWrapper

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.html b/doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.html index 0a4685a..a7010e7 100644 --- a/doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.html +++ b/doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@ClassifierBase >
    -->

    ClassifierBase

    @@ -28,7 +28,7 @@

    SYNOPSIS ^DESCRIPTION ^

     Abstract class for classification. Implement the functions for any
    - classifier (e.g. LibSVM, LDA, MLR, Decision trees, Adaboost, etc.)
    + classifier (e.g. LibSVM, LDA, MLR, RFs, Adaboost, etc.)
      
      Properties:
      instanceSet: the training/test set in an InstanceSet structure
    @@ -69,7 +69,7 @@ 

    DOWNLOAD ^ClassifierBase.m

    SOURCE CODE ^

    0001 % Abstract class for classification. Implement the functions for any
    -0002 % classifier (e.g. LibSVM, LDA, MLR, Decision trees, Adaboost, etc.)
    +0002 % classifier (e.g. LibSVM, LDA, MLR, RFs, Adaboost, etc.)
     0003 %
     0004 % Properties:
     0005 % instanceSet: the training/test set in an InstanceSet structure
    @@ -110,6 +110,6 @@ 

    SOURCE CODE ^end 0041 0042 end

    -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m b/doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m index ad07e26..531957d 100644 --- a/doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m +++ b/doc/+eegtoolkit/+classification/@ClassifierBase/ClassifierBase.m @@ -1,5 +1,5 @@ % Abstract class for classification. Implement the functions for any -% classifier (e.g. LibSVM, LDA, MLR, Decision trees, Adaboost, etc.) +% classifier (e.g. LibSVM, LDA, MLR, RFs, Adaboost, etc.) % % Properties: % instanceSet: the training/test set in an InstanceSet structure diff --git a/doc/+eegtoolkit/+classification/@ClassifierBase/graph.html b/doc/+eegtoolkit/+classification/@ClassifierBase/graph.html index 225726d..408b325 100644 --- a/doc/+eegtoolkit/+classification/@ClassifierBase/graph.html +++ b/doc/+eegtoolkit/+classification/@ClassifierBase/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@ClassifierBase - - + Dependency Graph for +eegtoolkit/+classification/@ClassifierBase + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@ClassifierBase >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@ClassifierBase

    +Index for +eegtoolkit/+classification/@ClassifierBase > +

    Dependency Graph for +eegtoolkit/+classification/@ClassifierBase

    -Dependency Graph for ./+eegtoolkit/+classification/@ClassifierBase +Dependency Graph for +eegtoolkit/+classification/@ClassifierBase
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@ClassifierBase/index.html b/doc/+eegtoolkit/+classification/@ClassifierBase/index.html index bdd3187..70e6013 100644 --- a/doc/+eegtoolkit/+classification/@ClassifierBase/index.html +++ b/doc/+eegtoolkit/+classification/@ClassifierBase/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@ClassifierBase - - + Index for Directory +eegtoolkit/+classification/@ClassifierBase + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@ClassifierBase >
    +Index for +eegtoolkit/+classification/@ClassifierBase > -

    Index for ./+eegtoolkit/+classification/@ClassifierBase

    +

    Index for +eegtoolkit/+classification/@ClassifierBase

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CombiCCA/CombiCCA.html b/doc/+eegtoolkit/+classification/@CombiCCA/CombiCCA.html index ae526ea..cf87380 100644 --- a/doc/+eegtoolkit/+classification/@CombiCCA/CombiCCA.html +++ b/doc/+eegtoolkit/+classification/@CombiCCA/CombiCCA.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@CombiCCA >
    -->

    CombiCCA

    @@ -218,6 +218,6 @@

    SOURCE CODE ^end 0172 end 0173

    -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CombiCCA/graph.html b/doc/+eegtoolkit/+classification/@CombiCCA/graph.html index aa35708..6144892 100644 --- a/doc/+eegtoolkit/+classification/@CombiCCA/graph.html +++ b/doc/+eegtoolkit/+classification/@CombiCCA/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@CombiCCA - - + Dependency Graph for +eegtoolkit/+classification/@CombiCCA + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@CombiCCA >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@CombiCCA

    +Index for +eegtoolkit/+classification/@CombiCCA > +

    Dependency Graph for +eegtoolkit/+classification/@CombiCCA

    -Dependency Graph for ./+eegtoolkit/+classification/@CombiCCA +Dependency Graph for +eegtoolkit/+classification/@CombiCCA
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@CombiCCA/index.html b/doc/+eegtoolkit/+classification/@CombiCCA/index.html index 3208d55..d3eef45 100644 --- a/doc/+eegtoolkit/+classification/@CombiCCA/index.html +++ b/doc/+eegtoolkit/+classification/@CombiCCA/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@CombiCCA - - + Index for Directory +eegtoolkit/+classification/@CombiCCA + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@CombiCCA >
    +Index for +eegtoolkit/+classification/@CombiCCA > -

    Index for ./+eegtoolkit/+classification/@CombiCCA

    +

    Index for +eegtoolkit/+classification/@CombiCCA

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/FusionClassifierWrapper.html b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/FusionClassifierWrapper.html index 3bc50b3..553b9e1 100644 --- a/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/FusionClassifierWrapper.html +++ b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/FusionClassifierWrapper.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +classification > @FusionClassifierWrapper > FusionClassifierWrapper.m
    +
    Home > +eegtoolkit > +classification > @FusionClassifierWrapper > FusionClassifierWrapper.m
    +
    Index for +eegtoolkit/+classification/@FusionClassifierWrapper >
    -->

    FusionClassifierWrapper

    @@ -116,6 +116,6 @@

    SOURCE CODE ^end 0071 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.html b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.html index 4d5449b..7bfce6d 100644 --- a/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.html +++ b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@FusionClassifierWrapper - - + Dependency Graph for +eegtoolkit/+classification/@FusionClassifierWrapper + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@FusionClassifierWrapper >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@FusionClassifierWrapper

    +Index for +eegtoolkit/+classification/@FusionClassifierWrapper > +

    Dependency Graph for +eegtoolkit/+classification/@FusionClassifierWrapper

    -Dependency Graph for ./+eegtoolkit/+classification/@FusionClassifierWrapper +Dependency Graph for +eegtoolkit/+classification/@FusionClassifierWrapper
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/index.html b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/index.html index 0491c84..316070d 100644 --- a/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/index.html +++ b/doc/+eegtoolkit/+classification/@FusionClassifierWrapper/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@FusionClassifierWrapper - - + Index for Directory +eegtoolkit/+classification/@FusionClassifierWrapper + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@FusionClassifierWrapper >
    +Index for +eegtoolkit/+classification/@FusionClassifierWrapper > -

    Index for ./+eegtoolkit/+classification/@FusionClassifierWrapper

    +

    Index for +eegtoolkit/+classification/@FusionClassifierWrapper

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@ITCCA/ITCCA.html b/doc/+eegtoolkit/+classification/@ITCCA/ITCCA.html index 4d13209..55929cd 100644 --- a/doc/+eegtoolkit/+classification/@ITCCA/ITCCA.html +++ b/doc/+eegtoolkit/+classification/@ITCCA/ITCCA.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@ITCCA >
    -->

    ITCCA

    @@ -251,6 +251,6 @@

    SOURCE CODE ^end 0205 end 0206 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@ITCCA/graph.html b/doc/+eegtoolkit/+classification/@ITCCA/graph.html index 986bd8d..7bf21c6 100644 --- a/doc/+eegtoolkit/+classification/@ITCCA/graph.html +++ b/doc/+eegtoolkit/+classification/@ITCCA/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@ITCCA - - + Dependency Graph for +eegtoolkit/+classification/@ITCCA + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@ITCCA >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@ITCCA

    +Index for +eegtoolkit/+classification/@ITCCA > +

    Dependency Graph for +eegtoolkit/+classification/@ITCCA

    -Dependency Graph for ./+eegtoolkit/+classification/@ITCCA +Dependency Graph for +eegtoolkit/+classification/@ITCCA
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@ITCCA/index.html b/doc/+eegtoolkit/+classification/@ITCCA/index.html index a9f9e7b..6506a0a 100644 --- a/doc/+eegtoolkit/+classification/@ITCCA/index.html +++ b/doc/+eegtoolkit/+classification/@ITCCA/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@ITCCA - - + Index for Directory +eegtoolkit/+classification/@ITCCA + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@ITCCA >
    +Index for +eegtoolkit/+classification/@ITCCA > -

    Index for ./+eegtoolkit/+classification/@ITCCA

    +

    Index for +eegtoolkit/+classification/@ITCCA

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@L1MCCA/L1MCCA.html b/doc/+eegtoolkit/+classification/@L1MCCA/L1MCCA.html index 05b37d7..5022b3f 100644 --- a/doc/+eegtoolkit/+classification/@L1MCCA/L1MCCA.html +++ b/doc/+eegtoolkit/+classification/@L1MCCA/L1MCCA.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@L1MCCA >
    -->

    L1MCCA

    @@ -284,6 +284,6 @@

    SOURCE CODE ^end 0238 end 0239 end -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@L1MCCA/graph.html b/doc/+eegtoolkit/+classification/@L1MCCA/graph.html index 73b2da2..07dcc62 100644 --- a/doc/+eegtoolkit/+classification/@L1MCCA/graph.html +++ b/doc/+eegtoolkit/+classification/@L1MCCA/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@L1MCCA - - + Dependency Graph for +eegtoolkit/+classification/@L1MCCA + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@L1MCCA >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@L1MCCA

    +Index for +eegtoolkit/+classification/@L1MCCA > +

    Dependency Graph for +eegtoolkit/+classification/@L1MCCA

    -Dependency Graph for ./+eegtoolkit/+classification/@L1MCCA +Dependency Graph for +eegtoolkit/+classification/@L1MCCA
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@L1MCCA/index.html b/doc/+eegtoolkit/+classification/@L1MCCA/index.html index bb4d8ac..69e5065 100644 --- a/doc/+eegtoolkit/+classification/@L1MCCA/index.html +++ b/doc/+eegtoolkit/+classification/@L1MCCA/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@L1MCCA - - + Index for Directory +eegtoolkit/+classification/@L1MCCA + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@L1MCCA >
    +Index for +eegtoolkit/+classification/@L1MCCA > -

    Index for ./+eegtoolkit/+classification/@L1MCCA

    +

    Index for +eegtoolkit/+classification/@L1MCCA

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LDA/LDA.html b/doc/+eegtoolkit/+classification/@LDA/LDA.html index e8c6922..90ebdfa 100644 --- a/doc/+eegtoolkit/+classification/@LDA/LDA.html +++ b/doc/+eegtoolkit/+classification/@LDA/LDA.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@LDA >
    -->

    LDA

    @@ -126,6 +126,6 @@

    SOURCE CODE ^end 0080 end 0081 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LDA/graph.html b/doc/+eegtoolkit/+classification/@LDA/graph.html index 8c50b7b..4b01ec7 100644 --- a/doc/+eegtoolkit/+classification/@LDA/graph.html +++ b/doc/+eegtoolkit/+classification/@LDA/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@LDA - - + Dependency Graph for +eegtoolkit/+classification/@LDA + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@LDA >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@LDA

    +Index for +eegtoolkit/+classification/@LDA > +

    Dependency Graph for +eegtoolkit/+classification/@LDA

    -Dependency Graph for ./+eegtoolkit/+classification/@LDA +Dependency Graph for +eegtoolkit/+classification/@LDA
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LDA/index.html b/doc/+eegtoolkit/+classification/@LDA/index.html index 17ed76c..07526f5 100644 --- a/doc/+eegtoolkit/+classification/@LDA/index.html +++ b/doc/+eegtoolkit/+classification/@LDA/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@LDA - - + Index for Directory +eegtoolkit/+classification/@LDA + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@LDA >
    +Index for +eegtoolkit/+classification/@LDA > -

    Index for ./+eegtoolkit/+classification/@LDA

    +

    Index for +eegtoolkit/+classification/@LDA

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVM/LIBSVM.html b/doc/+eegtoolkit/+classification/@LIBSVM/LIBSVM.html index 76995a2..493502a 100644 --- a/doc/+eegtoolkit/+classification/@LIBSVM/LIBSVM.html +++ b/doc/+eegtoolkit/+classification/@LIBSVM/LIBSVM.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@LIBSVM >
    -->

    LIBSVM

    @@ -161,6 +161,6 @@

    SOURCE CODE ^end 0113 end 0114 end -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVM/graph.html b/doc/+eegtoolkit/+classification/@LIBSVM/graph.html index 07b031c..e95632a 100644 --- a/doc/+eegtoolkit/+classification/@LIBSVM/graph.html +++ b/doc/+eegtoolkit/+classification/@LIBSVM/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@LIBSVM - - + Dependency Graph for +eegtoolkit/+classification/@LIBSVM + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@LIBSVM >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@LIBSVM

    +Index for +eegtoolkit/+classification/@LIBSVM > +

    Dependency Graph for +eegtoolkit/+classification/@LIBSVM

    -Dependency Graph for ./+eegtoolkit/+classification/@LIBSVM +Dependency Graph for +eegtoolkit/+classification/@LIBSVM
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVM/index.html b/doc/+eegtoolkit/+classification/@LIBSVM/index.html index f419c46..2891574 100644 --- a/doc/+eegtoolkit/+classification/@LIBSVM/index.html +++ b/doc/+eegtoolkit/+classification/@LIBSVM/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@LIBSVM - - + Index for Directory +eegtoolkit/+classification/@LIBSVM + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@LIBSVM >
    +Index for +eegtoolkit/+classification/@LIBSVM > -

    Index for ./+eegtoolkit/+classification/@LIBSVM

    +

    Index for +eegtoolkit/+classification/@LIBSVM

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVMFast/LIBSVMFast.html b/doc/+eegtoolkit/+classification/@LIBSVMFast/LIBSVMFast.html index abda037..e09035b 100644 --- a/doc/+eegtoolkit/+classification/@LIBSVMFast/LIBSVMFast.html +++ b/doc/+eegtoolkit/+classification/@LIBSVMFast/LIBSVMFast.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@LIBSVMFast >
    -->

    LIBSVMFast

    @@ -169,6 +169,6 @@

    SOURCE CODE ^end 0123 end 0124 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.html b/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.html index 804d0a1..ec17d91 100644 --- a/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.html +++ b/doc/+eegtoolkit/+classification/@LIBSVMFast/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@LIBSVMFast - - + Dependency Graph for +eegtoolkit/+classification/@LIBSVMFast + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@LIBSVMFast >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@LIBSVMFast

    +Index for +eegtoolkit/+classification/@LIBSVMFast > +

    Dependency Graph for +eegtoolkit/+classification/@LIBSVMFast

    -Dependency Graph for ./+eegtoolkit/+classification/@LIBSVMFast +Dependency Graph for +eegtoolkit/+classification/@LIBSVMFast
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@LIBSVMFast/index.html b/doc/+eegtoolkit/+classification/@LIBSVMFast/index.html index 93f80fc..bd9d72e 100644 --- a/doc/+eegtoolkit/+classification/@LIBSVMFast/index.html +++ b/doc/+eegtoolkit/+classification/@LIBSVMFast/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@LIBSVMFast - - + Index for Directory +eegtoolkit/+classification/@LIBSVMFast + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@LIBSVMFast >
    +Index for +eegtoolkit/+classification/@LIBSVMFast > -

    Index for ./+eegtoolkit/+classification/@LIBSVMFast

    +

    Index for +eegtoolkit/+classification/@LIBSVMFast

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLDA/MLDA.html b/doc/+eegtoolkit/+classification/@MLDA/MLDA.html index 5365bc8..3be604d 100644 --- a/doc/+eegtoolkit/+classification/@MLDA/MLDA.html +++ b/doc/+eegtoolkit/+classification/@MLDA/MLDA.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@MLDA >
    -->

    MLDA

    @@ -178,6 +178,6 @@

    SOURCE CODE ^end 0132 end 0133 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLDA/graph.html b/doc/+eegtoolkit/+classification/@MLDA/graph.html index 90ac050..6ec1521 100644 --- a/doc/+eegtoolkit/+classification/@MLDA/graph.html +++ b/doc/+eegtoolkit/+classification/@MLDA/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@MLDA - - + Dependency Graph for +eegtoolkit/+classification/@MLDA + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@MLDA >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@MLDA

    +Index for +eegtoolkit/+classification/@MLDA > +

    Dependency Graph for +eegtoolkit/+classification/@MLDA

    -Dependency Graph for ./+eegtoolkit/+classification/@MLDA +Dependency Graph for +eegtoolkit/+classification/@MLDA
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLDA/index.html b/doc/+eegtoolkit/+classification/@MLDA/index.html index fe5ce3b..d029684 100644 --- a/doc/+eegtoolkit/+classification/@MLDA/index.html +++ b/doc/+eegtoolkit/+classification/@MLDA/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@MLDA - - + Index for Directory +eegtoolkit/+classification/@MLDA + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@MLDA >
    +Index for +eegtoolkit/+classification/@MLDA > -

    Index for ./+eegtoolkit/+classification/@MLDA

    +

    Index for +eegtoolkit/+classification/@MLDA

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLR/MLR.html b/doc/+eegtoolkit/+classification/@MLR/MLR.html index 8a9a4c0..68e7081 100644 --- a/doc/+eegtoolkit/+classification/@MLR/MLR.html +++ b/doc/+eegtoolkit/+classification/@MLR/MLR.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@MLR >
    -->

    MLR

    @@ -160,6 +160,6 @@

    SOURCE CODE ^end 0114 end 0115 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLR/graph.html b/doc/+eegtoolkit/+classification/@MLR/graph.html index 2412fbb..9a78505 100644 --- a/doc/+eegtoolkit/+classification/@MLR/graph.html +++ b/doc/+eegtoolkit/+classification/@MLR/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@MLR - - + Dependency Graph for +eegtoolkit/+classification/@MLR + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@MLR >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@MLR

    +Index for +eegtoolkit/+classification/@MLR > +

    Dependency Graph for +eegtoolkit/+classification/@MLR

    -Dependency Graph for ./+eegtoolkit/+classification/@MLR +Dependency Graph for +eegtoolkit/+classification/@MLR
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLR/index.html b/doc/+eegtoolkit/+classification/@MLR/index.html index fe6fcbe..76a460a 100644 --- a/doc/+eegtoolkit/+classification/@MLR/index.html +++ b/doc/+eegtoolkit/+classification/@MLR/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@MLR - - + Index for Directory +eegtoolkit/+classification/@MLR + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@MLR >
    +Index for +eegtoolkit/+classification/@MLR > -

    Index for ./+eegtoolkit/+classification/@MLR

    +

    Index for +eegtoolkit/+classification/@MLR

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLTREE/MLTREE.html b/doc/+eegtoolkit/+classification/@MLTREE/MLTREE.html index 2018789..52ccecd 100644 --- a/doc/+eegtoolkit/+classification/@MLTREE/MLTREE.html +++ b/doc/+eegtoolkit/+classification/@MLTREE/MLTREE.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@MLTREE >
    -->

    MLTREE

    @@ -185,6 +185,6 @@

    SOURCE CODE ^end 0139 end 0140 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLTREE/graph.html b/doc/+eegtoolkit/+classification/@MLTREE/graph.html index 17463a8..f1bb958 100644 --- a/doc/+eegtoolkit/+classification/@MLTREE/graph.html +++ b/doc/+eegtoolkit/+classification/@MLTREE/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@MLTREE - - + Dependency Graph for +eegtoolkit/+classification/@MLTREE + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@MLTREE >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@MLTREE

    +Index for +eegtoolkit/+classification/@MLTREE > +

    Dependency Graph for +eegtoolkit/+classification/@MLTREE

    -Dependency Graph for ./+eegtoolkit/+classification/@MLTREE +Dependency Graph for +eegtoolkit/+classification/@MLTREE
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLTREE/index.html b/doc/+eegtoolkit/+classification/@MLTREE/index.html index 8f9c555..50e3482 100644 --- a/doc/+eegtoolkit/+classification/@MLTREE/index.html +++ b/doc/+eegtoolkit/+classification/@MLTREE/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@MLTREE - - + Index for Directory +eegtoolkit/+classification/@MLTREE + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@MLTREE >
    +Index for +eegtoolkit/+classification/@MLTREE > -

    Index for ./+eegtoolkit/+classification/@MLTREE

    +

    Index for +eegtoolkit/+classification/@MLTREE

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLTboxMulticlass/MLTboxMulticlass.html b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/MLTboxMulticlass.html index e824f30..19c3099 100644 --- a/doc/+eegtoolkit/+classification/@MLTboxMulticlass/MLTboxMulticlass.html +++ b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/MLTboxMulticlass.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@MLTboxMulticlass >
    -->

    MLTboxMulticlass

    @@ -149,6 +149,6 @@

    SOURCE CODE ^end 0103 end 0104 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.html b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.html index 4dbb14d..406b756 100644 --- a/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.html +++ b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@MLTboxMulticlass - - + Dependency Graph for +eegtoolkit/+classification/@MLTboxMulticlass + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@MLTboxMulticlass >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@MLTboxMulticlass

    +Index for +eegtoolkit/+classification/@MLTboxMulticlass > +

    Dependency Graph for +eegtoolkit/+classification/@MLTboxMulticlass

    -Dependency Graph for ./+eegtoolkit/+classification/@MLTboxMulticlass +Dependency Graph for +eegtoolkit/+classification/@MLTboxMulticlass
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MLTboxMulticlass/index.html b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/index.html index 9c16ab8..d77cbd0 100644 --- a/doc/+eegtoolkit/+classification/@MLTboxMulticlass/index.html +++ b/doc/+eegtoolkit/+classification/@MLTboxMulticlass/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@MLTboxMulticlass - - + Index for Directory +eegtoolkit/+classification/@MLTboxMulticlass + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@MLTboxMulticlass >
    +Index for +eegtoolkit/+classification/@MLTboxMulticlass > -

    Index for ./+eegtoolkit/+classification/@MLTboxMulticlass

    +

    Index for +eegtoolkit/+classification/@MLTboxMulticlass

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MaxChooser/MaxChooser.html b/doc/+eegtoolkit/+classification/@MaxChooser/MaxChooser.html index c7cdfc3..d4cf7f1 100644 --- a/doc/+eegtoolkit/+classification/@MaxChooser/MaxChooser.html +++ b/doc/+eegtoolkit/+classification/@MaxChooser/MaxChooser.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@MaxChooser >
    -->

    MaxChooser

    @@ -99,6 +99,6 @@

    SOURCE CODE ^end 0053 end 0054 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MaxChooser/graph.html b/doc/+eegtoolkit/+classification/@MaxChooser/graph.html index d822156..461293a 100644 --- a/doc/+eegtoolkit/+classification/@MaxChooser/graph.html +++ b/doc/+eegtoolkit/+classification/@MaxChooser/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@MaxChooser - - + Dependency Graph for +eegtoolkit/+classification/@MaxChooser + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@MaxChooser >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@MaxChooser

    +Index for +eegtoolkit/+classification/@MaxChooser > +

    Dependency Graph for +eegtoolkit/+classification/@MaxChooser

    -Dependency Graph for ./+eegtoolkit/+classification/@MaxChooser +Dependency Graph for +eegtoolkit/+classification/@MaxChooser
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@MaxChooser/index.html b/doc/+eegtoolkit/+classification/@MaxChooser/index.html index 6a64ed3..a59140d 100644 --- a/doc/+eegtoolkit/+classification/@MaxChooser/index.html +++ b/doc/+eegtoolkit/+classification/@MaxChooser/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@MaxChooser - - + Index for Directory +eegtoolkit/+classification/@MaxChooser + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@MaxChooser >
    +Index for +eegtoolkit/+classification/@MaxChooser > -

    Index for ./+eegtoolkit/+classification/@MaxChooser

    +

    Index for +eegtoolkit/+classification/@MaxChooser

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@SBLR/SBLR.html b/doc/+eegtoolkit/+classification/@SBLR/SBLR.html index d82eff8..1d7a595 100644 --- a/doc/+eegtoolkit/+classification/@SBLR/SBLR.html +++ b/doc/+eegtoolkit/+classification/@SBLR/SBLR.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@SBLR >
    -->

    SBLR

    @@ -133,6 +133,6 @@

    SOURCE CODE ^end 0087 end 0088 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@SBLR/graph.html b/doc/+eegtoolkit/+classification/@SBLR/graph.html index 77be386..e9fe593 100644 --- a/doc/+eegtoolkit/+classification/@SBLR/graph.html +++ b/doc/+eegtoolkit/+classification/@SBLR/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@SBLR - - + Dependency Graph for +eegtoolkit/+classification/@SBLR + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@SBLR >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@SBLR

    +Index for +eegtoolkit/+classification/@SBLR > +

    Dependency Graph for +eegtoolkit/+classification/@SBLR

    -Dependency Graph for ./+eegtoolkit/+classification/@SBLR +Dependency Graph for +eegtoolkit/+classification/@SBLR
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@SBLR/index.html b/doc/+eegtoolkit/+classification/@SBLR/index.html index 00e437a..9fc6896 100644 --- a/doc/+eegtoolkit/+classification/@SBLR/index.html +++ b/doc/+eegtoolkit/+classification/@SBLR/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@SBLR - - + Index for Directory +eegtoolkit/+classification/@SBLR + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@SBLR >
    +Index for +eegtoolkit/+classification/@SBLR > -

    Index for ./+eegtoolkit/+classification/@SBLR

    +

    Index for +eegtoolkit/+classification/@SBLR

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@SMFA/SMFA.html b/doc/+eegtoolkit/+classification/@SMFA/SMFA.html index cd760e3..84c4827 100644 --- a/doc/+eegtoolkit/+classification/@SMFA/SMFA.html +++ b/doc/+eegtoolkit/+classification/@SMFA/SMFA.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+classification/@SMFA >
    -->

    SMFA

    @@ -188,6 +188,6 @@

    SOURCE CODE ^end 0142 end 0143 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@SMFA/graph.html b/doc/+eegtoolkit/+classification/@SMFA/graph.html index d7fccb1..fa2356b 100644 --- a/doc/+eegtoolkit/+classification/@SMFA/graph.html +++ b/doc/+eegtoolkit/+classification/@SMFA/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+classification/@SMFA - - + Dependency Graph for +eegtoolkit/+classification/@SMFA + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@SMFA >
    -

    Dependency Graph for ./+eegtoolkit/+classification/@SMFA

    +Index for +eegtoolkit/+classification/@SMFA > +

    Dependency Graph for +eegtoolkit/+classification/@SMFA

    -Dependency Graph for ./+eegtoolkit/+classification/@SMFA +Dependency Graph for +eegtoolkit/+classification/@SMFA
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+classification/@SMFA/index.html b/doc/+eegtoolkit/+classification/@SMFA/index.html index 7b64ac1..8876e92 100644 --- a/doc/+eegtoolkit/+classification/@SMFA/index.html +++ b/doc/+eegtoolkit/+classification/@SMFA/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+classification/@SMFA - - + Index for Directory +eegtoolkit/+classification/@SMFA + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+classification/@SMFA >
    +Index for +eegtoolkit/+classification/@SMFA > -

    Index for ./+eegtoolkit/+classification/@SMFA

    +

    Index for +eegtoolkit/+classification/@SMFA

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+experiment/@Experimenter/Experimenter.html b/doc/+eegtoolkit/+experiment/@Experimenter/Experimenter.html index 6bc6b1d..c131c90 100644 --- a/doc/+eegtoolkit/+experiment/@Experimenter/Experimenter.html +++ b/doc/+eegtoolkit/+experiment/@Experimenter/Experimenter.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +experiment > @Experimenter > Experimenter.m
    +
    Home > +eegtoolkit > +experiment > @Experimenter > Experimenter.m
    +
    Index for +eegtoolkit/+experiment/@Experimenter >
    -->

    Experimenter

    @@ -450,6 +450,6 @@

    SOURCE CODE ^end 0381 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+experiment/@Experimenter/graph.html b/doc/+eegtoolkit/+experiment/@Experimenter/graph.html index 13301f1..22f2970 100644 --- a/doc/+eegtoolkit/+experiment/@Experimenter/graph.html +++ b/doc/+eegtoolkit/+experiment/@Experimenter/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+experiment/@Experimenter - - + Dependency Graph for +eegtoolkit/+experiment/@Experimenter + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+experiment/@Experimenter >
    -

    Dependency Graph for ./+eegtoolkit/+experiment/@Experimenter

    +Index for +eegtoolkit/+experiment/@Experimenter > +

    Dependency Graph for +eegtoolkit/+experiment/@Experimenter

    -Dependency Graph for ./+eegtoolkit/+experiment/@Experimenter +Dependency Graph for +eegtoolkit/+experiment/@Experimenter
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+experiment/@Experimenter/index.html b/doc/+eegtoolkit/+experiment/@Experimenter/index.html index 7bbd635..0fd74bf 100644 --- a/doc/+eegtoolkit/+experiment/@Experimenter/index.html +++ b/doc/+eegtoolkit/+experiment/@Experimenter/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+experiment/@Experimenter - - + Index for Directory +eegtoolkit/+experiment/@Experimenter + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+experiment/@Experimenter >
    +Index for +eegtoolkit/+experiment/@Experimenter > -

    Index for ./+eegtoolkit/+experiment/@Experimenter

    +

    Index for +eegtoolkit/+experiment/@Experimenter

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+experiment/@ResultEvaluator/ResultEvaluator.html b/doc/+eegtoolkit/+experiment/@ResultEvaluator/ResultEvaluator.html index abf7cae..490d093 100644 --- a/doc/+eegtoolkit/+experiment/@ResultEvaluator/ResultEvaluator.html +++ b/doc/+eegtoolkit/+experiment/@ResultEvaluator/ResultEvaluator.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +experiment > @ResultEvaluator > ResultEvaluator.m
    +
    Home > +eegtoolkit > +experiment > @ResultEvaluator > ResultEvaluator.m
    +
    Index for +eegtoolkit/+experiment/@ResultEvaluator >
    -->

    ResultEvaluator

    @@ -131,6 +131,6 @@

    SOURCE CODE ^end 0084 end 0085 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.html b/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.html index 551dd9b..4a0970f 100644 --- a/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.html +++ b/doc/+eegtoolkit/+experiment/@ResultEvaluator/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+experiment/@ResultEvaluator - - + Dependency Graph for +eegtoolkit/+experiment/@ResultEvaluator + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+experiment/@ResultEvaluator >
    -

    Dependency Graph for ./+eegtoolkit/+experiment/@ResultEvaluator

    +Index for +eegtoolkit/+experiment/@ResultEvaluator > +

    Dependency Graph for +eegtoolkit/+experiment/@ResultEvaluator

    -Dependency Graph for ./+eegtoolkit/+experiment/@ResultEvaluator +Dependency Graph for +eegtoolkit/+experiment/@ResultEvaluator
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+experiment/@ResultEvaluator/index.html b/doc/+eegtoolkit/+experiment/@ResultEvaluator/index.html index 20c55e3..2fef9c7 100644 --- a/doc/+eegtoolkit/+experiment/@ResultEvaluator/index.html +++ b/doc/+eegtoolkit/+experiment/@ResultEvaluator/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+experiment/@ResultEvaluator - - + Index for Directory +eegtoolkit/+experiment/@ResultEvaluator + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+experiment/@ResultEvaluator >
    +Index for +eegtoolkit/+experiment/@ResultEvaluator > -

    Index for ./+eegtoolkit/+experiment/@ResultEvaluator

    +

    Index for +eegtoolkit/+experiment/@ResultEvaluator

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@CCA/CCA.html b/doc/+eegtoolkit/+featextraction/@CCA/CCA.html index 69ae510..510fc15 100644 --- a/doc/+eegtoolkit/+featextraction/@CCA/CCA.html +++ b/doc/+eegtoolkit/+featextraction/@CCA/CCA.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featextraction/@CCA >
    -->

    CCA

    @@ -190,6 +190,6 @@

    SOURCE CODE ^end 0144 0145 end -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@CCA/graph.html b/doc/+eegtoolkit/+featextraction/@CCA/graph.html index ec6c2f3..0020769 100644 --- a/doc/+eegtoolkit/+featextraction/@CCA/graph.html +++ b/doc/+eegtoolkit/+featextraction/@CCA/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featextraction/@CCA - - + Dependency Graph for +eegtoolkit/+featextraction/@CCA + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@CCA >
    -

    Dependency Graph for ./+eegtoolkit/+featextraction/@CCA

    +Index for +eegtoolkit/+featextraction/@CCA > +

    Dependency Graph for +eegtoolkit/+featextraction/@CCA

    -Dependency Graph for ./+eegtoolkit/+featextraction/@CCA +Dependency Graph for +eegtoolkit/+featextraction/@CCA
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@CCA/index.html b/doc/+eegtoolkit/+featextraction/@CCA/index.html index d997e1b..872a2ba 100644 --- a/doc/+eegtoolkit/+featextraction/@CCA/index.html +++ b/doc/+eegtoolkit/+featextraction/@CCA/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featextraction/@CCA - - + Index for Directory +eegtoolkit/+featextraction/@CCA + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@CCA >
    +Index for +eegtoolkit/+featextraction/@CCA > -

    Index for ./+eegtoolkit/+featextraction/@CCA

    +

    Index for +eegtoolkit/+featextraction/@CCA

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@DWT/DWT.html b/doc/+eegtoolkit/+featextraction/@DWT/DWT.html index 5e1cd17..77bcf6a 100644 --- a/doc/+eegtoolkit/+featextraction/@DWT/DWT.html +++ b/doc/+eegtoolkit/+featextraction/@DWT/DWT.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featextraction/@DWT >
    -->

    DWT

    @@ -166,6 +166,6 @@

    SOURCE CODE ^end 0120 0121 end -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@DWT/graph.html b/doc/+eegtoolkit/+featextraction/@DWT/graph.html index 3982477..fe7f7a6 100644 --- a/doc/+eegtoolkit/+featextraction/@DWT/graph.html +++ b/doc/+eegtoolkit/+featextraction/@DWT/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featextraction/@DWT - - + Dependency Graph for +eegtoolkit/+featextraction/@DWT + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@DWT >
    -

    Dependency Graph for ./+eegtoolkit/+featextraction/@DWT

    +Index for +eegtoolkit/+featextraction/@DWT > +

    Dependency Graph for +eegtoolkit/+featextraction/@DWT

    -Dependency Graph for ./+eegtoolkit/+featextraction/@DWT +Dependency Graph for +eegtoolkit/+featextraction/@DWT
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@DWT/index.html b/doc/+eegtoolkit/+featextraction/@DWT/index.html index b9380d7..d16fe35 100644 --- a/doc/+eegtoolkit/+featextraction/@DWT/index.html +++ b/doc/+eegtoolkit/+featextraction/@DWT/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featextraction/@DWT - - + Index for Directory +eegtoolkit/+featextraction/@DWT + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@DWT >
    +Index for +eegtoolkit/+featextraction/@DWT > -

    Index for ./+eegtoolkit/+featextraction/@DWT

    +

    Index for +eegtoolkit/+featextraction/@DWT

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@ERRPFeatures/ERRPFeatures.html b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/ERRPFeatures.html index 8c3656b..8b43877 100644 --- a/doc/+eegtoolkit/+featextraction/@ERRPFeatures/ERRPFeatures.html +++ b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/ERRPFeatures.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featextraction/@ERRPFeatures >
    -->

    ERRPFeatures

    @@ -81,6 +81,6 @@

    SOURCE CODE ^end 0035 0036 end -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.html b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.html index 488795b..8da2cec 100644 --- a/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.html +++ b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featextraction/@ERRPFeatures - - + Dependency Graph for +eegtoolkit/+featextraction/@ERRPFeatures + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@ERRPFeatures >
    -

    Dependency Graph for ./+eegtoolkit/+featextraction/@ERRPFeatures

    +Index for +eegtoolkit/+featextraction/@ERRPFeatures > +

    Dependency Graph for +eegtoolkit/+featextraction/@ERRPFeatures

    -Dependency Graph for ./+eegtoolkit/+featextraction/@ERRPFeatures +Dependency Graph for +eegtoolkit/+featextraction/@ERRPFeatures
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@ERRPFeatures/index.html b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/index.html index 5803cba..6e0c501 100644 --- a/doc/+eegtoolkit/+featextraction/@ERRPFeatures/index.html +++ b/doc/+eegtoolkit/+featextraction/@ERRPFeatures/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featextraction/@ERRPFeatures - - + Index for Directory +eegtoolkit/+featextraction/@ERRPFeatures + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@ERRPFeatures >
    +Index for +eegtoolkit/+featextraction/@ERRPFeatures > -

    Index for ./+eegtoolkit/+featextraction/@ERRPFeatures

    +

    Index for +eegtoolkit/+featextraction/@ERRPFeatures

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FFT/FFT.html b/doc/+eegtoolkit/+featextraction/@FFT/FFT.html index e9f760a..54c5b83 100644 --- a/doc/+eegtoolkit/+featextraction/@FFT/FFT.html +++ b/doc/+eegtoolkit/+featextraction/@FFT/FFT.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featextraction/@FFT >
    -->

    FFT

    @@ -134,6 +134,6 @@

    SOURCE CODE ^end 0089 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FFT/graph.html b/doc/+eegtoolkit/+featextraction/@FFT/graph.html index c0a8cd9..94af0a7 100644 --- a/doc/+eegtoolkit/+featextraction/@FFT/graph.html +++ b/doc/+eegtoolkit/+featextraction/@FFT/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featextraction/@FFT - - + Dependency Graph for +eegtoolkit/+featextraction/@FFT + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@FFT >
    -

    Dependency Graph for ./+eegtoolkit/+featextraction/@FFT

    +Index for +eegtoolkit/+featextraction/@FFT > +

    Dependency Graph for +eegtoolkit/+featextraction/@FFT

    -Dependency Graph for ./+eegtoolkit/+featextraction/@FFT +Dependency Graph for +eegtoolkit/+featextraction/@FFT
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FFT/index.html b/doc/+eegtoolkit/+featextraction/@FFT/index.html index 0e4fd7b..6468ef3 100644 --- a/doc/+eegtoolkit/+featextraction/@FFT/index.html +++ b/doc/+eegtoolkit/+featextraction/@FFT/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featextraction/@FFT - - + Index for Directory +eegtoolkit/+featextraction/@FFT + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@FFT >
    +Index for +eegtoolkit/+featextraction/@FFT > -

    Index for ./+eegtoolkit/+featextraction/@FFT

    +

    Index for +eegtoolkit/+featextraction/@FFT

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.html b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.html index 1c93476..e201f3c 100644 --- a/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.html +++ b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +featextraction > @FeatureExtractionBase > FeatureExtractionBase.m
    +
    Home > +eegtoolkit > +featextraction > @FeatureExtractionBase > FeatureExtractionBase.m
    +
    Index for +eegtoolkit/+featextraction/@FeatureExtractionBase >
    -->

    FeatureExtractionBase

    @@ -28,8 +28,7 @@

    SYNOPSIS ^DESCRIPTION ^

     Abstract class for feature extraction. Implement the functions for any
    - preprocessing step (e.g. filtering, artifact removal, sub-sampling,
    - rereferencing, etc.
    + feature extractor (e.g. PWelch, FFT, DWT, PYAR, etc.)
      
      Properties:
      instanceSet: Output - the features in an InstanceSet structure
    @@ -61,74 +60,73 @@ 

    DOWNLOAD ^FeatureExtractionBase.m

    SOURCE CODE ^

    0001 % Abstract class for feature extraction. Implement the functions for any
    -0002 % preprocessing step (e.g. filtering, artifact removal, sub-sampling,
    -0003 % rereferencing, etc.
    -0004 %
    -0005 % Properties:
    -0006 % instanceSet: Output - the features in an InstanceSet structure
    -0007 % trials: Input - the signals in a cell of Trial structures
    -0008 %
    -0009 % Functions:
    -0010 %Implement this function to extract the features from the input Trials
    -0011 %and return the features in an instanceSet
    -0012 %   out = obj.extract(in);
    -0013 %Info & run time so that the experiments are easily documented. configInfo
    -0014 %is a string with the configuration information and time is of type double.
    -0015 %   configInfo = obj.getConfigInfo();
    -0016 %   time = obj.getTime();
    +0002 % feature extractor (e.g. PWelch, FFT, DWT, PYAR, etc.)
    +0003 %
    +0004 % Properties:
    +0005 % instanceSet: Output - the features in an InstanceSet structure
    +0006 % trials: Input - the signals in a cell of Trial structures
    +0007 %
    +0008 % Functions:
    +0009 %Implement this function to extract the features from the input Trials
    +0010 %and return the features in an instanceSet
    +0011 %   out = obj.extract(in);
    +0012 %Info & run time so that the experiments are easily documented. configInfo
    +0013 %is a string with the configuration information and time is of type double.
    +0014 %   configInfo = obj.getConfigInfo();
    +0015 %   time = obj.getTime();
    +0016 
     0017 
    -0018 
    -0019 classdef (Abstract) FeatureExtractionBase < handle
    -0020     %Base class for a feature transformer
    -0021     %For writing your own FeatureTransformer extend this class and
    -0022     %implement the 'transform' function
    -0023     properties (Access = public)
    -0024         instanceSet; % Output: The dataset
    -0025         trials;% Input: The trial signals
    -0026         filter;
    -0027     end
    -0028     
    -0029     methods (Abstract = true)
    -0030         obj = extract(obj);
    -0031         configInfo = getConfigInfo(obj);
    -0032         time = getTime(obj);
    -0033     end
    -0034     
    -0035     methods (Access = public)
    -0036         function instances = getInstances(obj)
    -0037             %Get the instances (no class labels)
    -0038             instances = obj.instanceSet.getInstances;
    -0039         end
    -0040         function labels = getLabels(obj)
    -0041             %Get the labels
    -0042             labels = obj.instanceSet.getLabels;
    -0043         end
    -0044         
    -0045         function dataset = getDataset(obj)
    -0046             % same with getInstances but includes the labels as the last
    -0047             % row
    -0048             dataset = obj.instanceSet.getDataset;
    -0049         end
    -0050         
    -0051         function instanceSet = getInstanceSet(obj)
    -0052             % Get the dataset as an 'InstanceSet' class object
    -0053             instanceSet = obj.instanceSet;
    -0054         end
    -0055         function writeCSV(obj, csvname)
    -0056             % write the dataset to a csv file
    -0057             % Example:
    -0058             %   obj.writeCSV('data.csv');
    -0059             obj.instanceSet.writeCSV(csvname);
    -0060         end
    -0061         function writeArff(obj, fname)
    -0062             % write the dataset to a weka-readable file (arff)
    -0063             % Caution: filename without extension
    -0064             % Example:
    -0065             %   obj.writeArff('data')
    -0066             obj.instanceSet.writeArff(fname);
    -0067         end
    -0068     end
    -0069 end
    -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +0018 classdef (Abstract) FeatureExtractionBase < handle +0019 %Base class for a feature transformer +0020 %For writing your own FeatureTransformer extend this class and +0021 %implement the 'transform' function +0022 properties (Access = public) +0023 instanceSet; % Output: The dataset +0024 trials;% Input: The trial signals +0025 filter; +0026 end +0027 +0028 methods (Abstract = true) +0029 obj = extract(obj); +0030 configInfo = getConfigInfo(obj); +0031 time = getTime(obj); +0032 end +0033 +0034 methods (Access = public) +0035 function instances = getInstances(obj) +0036 %Get the instances (no class labels) +0037 instances = obj.instanceSet.getInstances; +0038 end +0039 function labels = getLabels(obj) +0040 %Get the labels +0041 labels = obj.instanceSet.getLabels; +0042 end +0043 +0044 function dataset = getDataset(obj) +0045 % same with getInstances but includes the labels as the last +0046 % row +0047 dataset = obj.instanceSet.getDataset; +0048 end +0049 +0050 function instanceSet = getInstanceSet(obj) +0051 % Get the dataset as an 'InstanceSet' class object +0052 instanceSet = obj.instanceSet; +0053 end +0054 function writeCSV(obj, csvname) +0055 % write the dataset to a csv file +0056 % Example: +0057 % obj.writeCSV('data.csv'); +0058 obj.instanceSet.writeCSV(csvname); +0059 end +0060 function writeArff(obj, fname) +0061 % write the dataset to a weka-readable file (arff) +0062 % Caution: filename without extension +0063 % Example: +0064 % obj.writeArff('data') +0065 obj.instanceSet.writeArff(fname); +0066 end +0067 end +0068 end
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m index 29ef454..647966b 100644 --- a/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m +++ b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/FeatureExtractionBase.m @@ -1,6 +1,5 @@ % Abstract class for feature extraction. Implement the functions for any -% preprocessing step (e.g. filtering, artifact removal, sub-sampling, -% rereferencing, etc. +% feature extractor (e.g. PWelch, FFT, DWT, PYAR, etc.) % % Properties: % instanceSet: Output - the features in an InstanceSet structure diff --git a/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.html b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.html index 10916ea..da06c80 100644 --- a/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.html +++ b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featextraction/@FeatureExtractionBase - - + Dependency Graph for +eegtoolkit/+featextraction/@FeatureExtractionBase + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@FeatureExtractionBase >
    -

    Dependency Graph for ./+eegtoolkit/+featextraction/@FeatureExtractionBase

    +Index for +eegtoolkit/+featextraction/@FeatureExtractionBase > +

    Dependency Graph for +eegtoolkit/+featextraction/@FeatureExtractionBase

    -Dependency Graph for ./+eegtoolkit/+featextraction/@FeatureExtractionBase +Dependency Graph for +eegtoolkit/+featextraction/@FeatureExtractionBase
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/index.html b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/index.html index 1cefc39..58a591b 100644 --- a/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/index.html +++ b/doc/+eegtoolkit/+featextraction/@FeatureExtractionBase/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featextraction/@FeatureExtractionBase - - + Index for Directory +eegtoolkit/+featextraction/@FeatureExtractionBase + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@FeatureExtractionBase >
    +Index for +eegtoolkit/+featextraction/@FeatureExtractionBase > -

    Index for ./+eegtoolkit/+featextraction/@FeatureExtractionBase

    +

    Index for +eegtoolkit/+featextraction/@FeatureExtractionBase

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@Goertzel/Goertzel.html b/doc/+eegtoolkit/+featextraction/@Goertzel/Goertzel.html index a39e790..7fd3955 100644 --- a/doc/+eegtoolkit/+featextraction/@Goertzel/Goertzel.html +++ b/doc/+eegtoolkit/+featextraction/@Goertzel/Goertzel.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featextraction/@Goertzel >
    -->

    Goertzel

    @@ -145,6 +145,6 @@

    SOURCE CODE ^end 0100 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@Goertzel/graph.html b/doc/+eegtoolkit/+featextraction/@Goertzel/graph.html index 04a3c86..d9b8e05 100644 --- a/doc/+eegtoolkit/+featextraction/@Goertzel/graph.html +++ b/doc/+eegtoolkit/+featextraction/@Goertzel/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featextraction/@Goertzel - - + Dependency Graph for +eegtoolkit/+featextraction/@Goertzel + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@Goertzel >
    -

    Dependency Graph for ./+eegtoolkit/+featextraction/@Goertzel

    +Index for +eegtoolkit/+featextraction/@Goertzel > +

    Dependency Graph for +eegtoolkit/+featextraction/@Goertzel

    -Dependency Graph for ./+eegtoolkit/+featextraction/@Goertzel +Dependency Graph for +eegtoolkit/+featextraction/@Goertzel
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@Goertzel/index.html b/doc/+eegtoolkit/+featextraction/@Goertzel/index.html index a9985e3..44af831 100644 --- a/doc/+eegtoolkit/+featextraction/@Goertzel/index.html +++ b/doc/+eegtoolkit/+featextraction/@Goertzel/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featextraction/@Goertzel - - + Index for Directory +eegtoolkit/+featextraction/@Goertzel + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@Goertzel >
    +Index for +eegtoolkit/+featextraction/@Goertzel > -

    Index for ./+eegtoolkit/+featextraction/@Goertzel

    +

    Index for +eegtoolkit/+featextraction/@Goertzel

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@L1MCCA/L1MCCA.html b/doc/+eegtoolkit/+featextraction/@L1MCCA/L1MCCA.html index a32cc8c..658af42 100644 --- a/doc/+eegtoolkit/+featextraction/@L1MCCA/L1MCCA.html +++ b/doc/+eegtoolkit/+featextraction/@L1MCCA/L1MCCA.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featextraction/@L1MCCA >
    -->

    L1MCCA

    @@ -72,6 +72,6 @@

    SOURCE CODE ^end 0026 end 0027 end -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.html b/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.html index f1e9037..e98399a 100644 --- a/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.html +++ b/doc/+eegtoolkit/+featextraction/@L1MCCA/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featextraction/@L1MCCA - - + Dependency Graph for +eegtoolkit/+featextraction/@L1MCCA + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@L1MCCA >
    -

    Dependency Graph for ./+eegtoolkit/+featextraction/@L1MCCA

    +Index for +eegtoolkit/+featextraction/@L1MCCA > +

    Dependency Graph for +eegtoolkit/+featextraction/@L1MCCA

    -Dependency Graph for ./+eegtoolkit/+featextraction/@L1MCCA +Dependency Graph for +eegtoolkit/+featextraction/@L1MCCA
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@L1MCCA/index.html b/doc/+eegtoolkit/+featextraction/@L1MCCA/index.html index 73d7594..5812eb8 100644 --- a/doc/+eegtoolkit/+featextraction/@L1MCCA/index.html +++ b/doc/+eegtoolkit/+featextraction/@L1MCCA/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featextraction/@L1MCCA - - + Index for Directory +eegtoolkit/+featextraction/@L1MCCA + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@L1MCCA >
    +Index for +eegtoolkit/+featextraction/@L1MCCA > -

    Index for ./+eegtoolkit/+featextraction/@L1MCCA

    +

    Index for +eegtoolkit/+featextraction/@L1MCCA

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@MLR_Transf/MLR_Transf.html b/doc/+eegtoolkit/+featextraction/@MLR_Transf/MLR_Transf.html index ad43195..045785d 100644 --- a/doc/+eegtoolkit/+featextraction/@MLR_Transf/MLR_Transf.html +++ b/doc/+eegtoolkit/+featextraction/@MLR_Transf/MLR_Transf.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featextraction/@MLR_Transf >
    -->

    MLR_Transf

    @@ -109,6 +109,6 @@

    SOURCE CODE ^end 0064 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.html b/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.html index 12815ea..e6a0e5e 100644 --- a/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.html +++ b/doc/+eegtoolkit/+featextraction/@MLR_Transf/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featextraction/@MLR_Transf - - + Dependency Graph for +eegtoolkit/+featextraction/@MLR_Transf + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@MLR_Transf >
    -

    Dependency Graph for ./+eegtoolkit/+featextraction/@MLR_Transf

    +Index for +eegtoolkit/+featextraction/@MLR_Transf > +

    Dependency Graph for +eegtoolkit/+featextraction/@MLR_Transf

    -Dependency Graph for ./+eegtoolkit/+featextraction/@MLR_Transf +Dependency Graph for +eegtoolkit/+featextraction/@MLR_Transf
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@MLR_Transf/index.html b/doc/+eegtoolkit/+featextraction/@MLR_Transf/index.html index 64166c1..5160b57 100644 --- a/doc/+eegtoolkit/+featextraction/@MLR_Transf/index.html +++ b/doc/+eegtoolkit/+featextraction/@MLR_Transf/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featextraction/@MLR_Transf - - + Index for Directory +eegtoolkit/+featextraction/@MLR_Transf + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@MLR_Transf >
    +Index for +eegtoolkit/+featextraction/@MLR_Transf > -

    Index for ./+eegtoolkit/+featextraction/@MLR_Transf

    +

    Index for +eegtoolkit/+featextraction/@MLR_Transf

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/PSDExtractionBase.html b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/PSDExtractionBase.html index 88fe395..431deaa 100644 --- a/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/PSDExtractionBase.html +++ b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/PSDExtractionBase.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featextraction/@PSDExtractionBase >
    -->

    PSDExtractionBase

    @@ -50,6 +50,6 @@

    SOURCE CODE ^% The frequencies of the spectrum 0006 end 0007 end -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.html b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.html index 6467381..75ab7a3 100644 --- a/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.html +++ b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featextraction/@PSDExtractionBase - - + Dependency Graph for +eegtoolkit/+featextraction/@PSDExtractionBase + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@PSDExtractionBase >
    -

    Dependency Graph for ./+eegtoolkit/+featextraction/@PSDExtractionBase

    +Index for +eegtoolkit/+featextraction/@PSDExtractionBase > +

    Dependency Graph for +eegtoolkit/+featextraction/@PSDExtractionBase

    -Dependency Graph for ./+eegtoolkit/+featextraction/@PSDExtractionBase +Dependency Graph for +eegtoolkit/+featextraction/@PSDExtractionBase
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/index.html b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/index.html index bdf93e0..1a77a17 100644 --- a/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/index.html +++ b/doc/+eegtoolkit/+featextraction/@PSDExtractionBase/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featextraction/@PSDExtractionBase - - + Index for Directory +eegtoolkit/+featextraction/@PSDExtractionBase + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@PSDExtractionBase >
    +Index for +eegtoolkit/+featextraction/@PSDExtractionBase > -

    Index for ./+eegtoolkit/+featextraction/@PSDExtractionBase

    +

    Index for +eegtoolkit/+featextraction/@PSDExtractionBase

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PWelch/PWelch.html b/doc/+eegtoolkit/+featextraction/@PWelch/PWelch.html index 07f77f4..fe70e42 100644 --- a/doc/+eegtoolkit/+featextraction/@PWelch/PWelch.html +++ b/doc/+eegtoolkit/+featextraction/@PWelch/PWelch.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featextraction/@PWelch >
    -->

    PWelch

    @@ -162,6 +162,6 @@

    SOURCE CODE ^end 0117 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PWelch/graph.html b/doc/+eegtoolkit/+featextraction/@PWelch/graph.html index 9d3d176..8903edf 100644 --- a/doc/+eegtoolkit/+featextraction/@PWelch/graph.html +++ b/doc/+eegtoolkit/+featextraction/@PWelch/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featextraction/@PWelch - - + Dependency Graph for +eegtoolkit/+featextraction/@PWelch + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@PWelch >
    -

    Dependency Graph for ./+eegtoolkit/+featextraction/@PWelch

    +Index for +eegtoolkit/+featextraction/@PWelch > +

    Dependency Graph for +eegtoolkit/+featextraction/@PWelch

    -Dependency Graph for ./+eegtoolkit/+featextraction/@PWelch +Dependency Graph for +eegtoolkit/+featextraction/@PWelch
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PWelch/index.html b/doc/+eegtoolkit/+featextraction/@PWelch/index.html index e8b3357..a97ad01 100644 --- a/doc/+eegtoolkit/+featextraction/@PWelch/index.html +++ b/doc/+eegtoolkit/+featextraction/@PWelch/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featextraction/@PWelch - - + Index for Directory +eegtoolkit/+featextraction/@PWelch + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@PWelch >
    +Index for +eegtoolkit/+featextraction/@PWelch > -

    Index for ./+eegtoolkit/+featextraction/@PWelch

    +

    Index for +eegtoolkit/+featextraction/@PWelch

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PWelchExperimental/PWelchExperimental.html b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/PWelchExperimental.html index 9619064..d243b4c 100644 --- a/doc/+eegtoolkit/+featextraction/@PWelchExperimental/PWelchExperimental.html +++ b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/PWelchExperimental.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featextraction/@PWelchExperimental >
    -->

    PWelchExperimental

    @@ -178,6 +178,6 @@

    SOURCE CODE ^end 0133 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.html b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.html index 2dff583..4a34537 100644 --- a/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.html +++ b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featextraction/@PWelchExperimental - - + Dependency Graph for +eegtoolkit/+featextraction/@PWelchExperimental + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@PWelchExperimental >
    -

    Dependency Graph for ./+eegtoolkit/+featextraction/@PWelchExperimental

    +Index for +eegtoolkit/+featextraction/@PWelchExperimental > +

    Dependency Graph for +eegtoolkit/+featextraction/@PWelchExperimental

    -Dependency Graph for ./+eegtoolkit/+featextraction/@PWelchExperimental +Dependency Graph for +eegtoolkit/+featextraction/@PWelchExperimental
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PWelchExperimental/index.html b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/index.html index ace320f..7365ef0 100644 --- a/doc/+eegtoolkit/+featextraction/@PWelchExperimental/index.html +++ b/doc/+eegtoolkit/+featextraction/@PWelchExperimental/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featextraction/@PWelchExperimental - - + Index for Directory +eegtoolkit/+featextraction/@PWelchExperimental + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@PWelchExperimental >
    +Index for +eegtoolkit/+featextraction/@PWelchExperimental > -

    Index for ./+eegtoolkit/+featextraction/@PWelchExperimental

    +

    Index for +eegtoolkit/+featextraction/@PWelchExperimental

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PYAR/PYAR.html b/doc/+eegtoolkit/+featextraction/@PYAR/PYAR.html index 48d8c20..67c2444 100644 --- a/doc/+eegtoolkit/+featextraction/@PYAR/PYAR.html +++ b/doc/+eegtoolkit/+featextraction/@PYAR/PYAR.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featextraction/@PYAR >
    -->

    PYAR

    @@ -142,6 +142,6 @@

    SOURCE CODE ^end 0097 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PYAR/graph.html b/doc/+eegtoolkit/+featextraction/@PYAR/graph.html index 205339d..677f3e1 100644 --- a/doc/+eegtoolkit/+featextraction/@PYAR/graph.html +++ b/doc/+eegtoolkit/+featextraction/@PYAR/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featextraction/@PYAR - - + Dependency Graph for +eegtoolkit/+featextraction/@PYAR + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@PYAR >
    -

    Dependency Graph for ./+eegtoolkit/+featextraction/@PYAR

    +Index for +eegtoolkit/+featextraction/@PYAR > +

    Dependency Graph for +eegtoolkit/+featextraction/@PYAR

    -Dependency Graph for ./+eegtoolkit/+featextraction/@PYAR +Dependency Graph for +eegtoolkit/+featextraction/@PYAR
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@PYAR/index.html b/doc/+eegtoolkit/+featextraction/@PYAR/index.html index b95fd23..7e25ef9 100644 --- a/doc/+eegtoolkit/+featextraction/@PYAR/index.html +++ b/doc/+eegtoolkit/+featextraction/@PYAR/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featextraction/@PYAR - - + Index for Directory +eegtoolkit/+featextraction/@PYAR + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@PYAR >
    +Index for +eegtoolkit/+featextraction/@PYAR > -

    Index for ./+eegtoolkit/+featextraction/@PYAR

    +

    Index for +eegtoolkit/+featextraction/@PYAR

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@RawSignal/RawSignal.html b/doc/+eegtoolkit/+featextraction/@RawSignal/RawSignal.html index 873d3ac..1765d5c 100644 --- a/doc/+eegtoolkit/+featextraction/@RawSignal/RawSignal.html +++ b/doc/+eegtoolkit/+featextraction/@RawSignal/RawSignal.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featextraction/@RawSignal >
    -->

    RawSignal

    @@ -72,6 +72,6 @@

    SOURCE CODE ^end 0027 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@RawSignal/graph.html b/doc/+eegtoolkit/+featextraction/@RawSignal/graph.html index 14a5ac5..09ca980 100644 --- a/doc/+eegtoolkit/+featextraction/@RawSignal/graph.html +++ b/doc/+eegtoolkit/+featextraction/@RawSignal/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featextraction/@RawSignal - - + Dependency Graph for +eegtoolkit/+featextraction/@RawSignal + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@RawSignal >
    -

    Dependency Graph for ./+eegtoolkit/+featextraction/@RawSignal

    +Index for +eegtoolkit/+featextraction/@RawSignal > +

    Dependency Graph for +eegtoolkit/+featextraction/@RawSignal

    -Dependency Graph for ./+eegtoolkit/+featextraction/@RawSignal +Dependency Graph for +eegtoolkit/+featextraction/@RawSignal
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@RawSignal/index.html b/doc/+eegtoolkit/+featextraction/@RawSignal/index.html index 8f53713..e60243a 100644 --- a/doc/+eegtoolkit/+featextraction/@RawSignal/index.html +++ b/doc/+eegtoolkit/+featextraction/@RawSignal/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featextraction/@RawSignal - - + Index for Directory +eegtoolkit/+featextraction/@RawSignal + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@RawSignal >
    +Index for +eegtoolkit/+featextraction/@RawSignal > -

    Index for ./+eegtoolkit/+featextraction/@RawSignal

    +

    Index for +eegtoolkit/+featextraction/@RawSignal

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@STFT/STFT.html b/doc/+eegtoolkit/+featextraction/@STFT/STFT.html index 83bc874..6e7d4b3 100644 --- a/doc/+eegtoolkit/+featextraction/@STFT/STFT.html +++ b/doc/+eegtoolkit/+featextraction/@STFT/STFT.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featextraction/@STFT >
    -->

    STFT

    @@ -146,6 +146,6 @@

    SOURCE CODE ^end 0101 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@STFT/graph.html b/doc/+eegtoolkit/+featextraction/@STFT/graph.html index 97c3e7e..cf0f187 100644 --- a/doc/+eegtoolkit/+featextraction/@STFT/graph.html +++ b/doc/+eegtoolkit/+featextraction/@STFT/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featextraction/@STFT - - + Dependency Graph for +eegtoolkit/+featextraction/@STFT + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@STFT >
    -

    Dependency Graph for ./+eegtoolkit/+featextraction/@STFT

    +Index for +eegtoolkit/+featextraction/@STFT > +

    Dependency Graph for +eegtoolkit/+featextraction/@STFT

    -Dependency Graph for ./+eegtoolkit/+featextraction/@STFT +Dependency Graph for +eegtoolkit/+featextraction/@STFT
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featextraction/@STFT/index.html b/doc/+eegtoolkit/+featextraction/@STFT/index.html index 46bed9b..b072c0c 100644 --- a/doc/+eegtoolkit/+featextraction/@STFT/index.html +++ b/doc/+eegtoolkit/+featextraction/@STFT/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featextraction/@STFT - - + Index for Directory +eegtoolkit/+featextraction/@STFT + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featextraction/@STFT >
    +Index for +eegtoolkit/+featextraction/@STFT > -

    Index for ./+eegtoolkit/+featextraction/@STFT

    +

    Index for +eegtoolkit/+featextraction/@STFT

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FEAST/FEAST.html b/doc/+eegtoolkit/+featselection/@FEAST/FEAST.html index 8f4c41f..76c9fdb 100644 --- a/doc/+eegtoolkit/+featselection/@FEAST/FEAST.html +++ b/doc/+eegtoolkit/+featselection/@FEAST/FEAST.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featselection/@FEAST >
    -->

    FEAST

    @@ -121,6 +121,6 @@

    SOURCE CODE ^end 0075 0076 end -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FEAST/graph.html b/doc/+eegtoolkit/+featselection/@FEAST/graph.html index 079ad91..a9ba5bc 100644 --- a/doc/+eegtoolkit/+featselection/@FEAST/graph.html +++ b/doc/+eegtoolkit/+featselection/@FEAST/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featselection/@FEAST - - + Dependency Graph for +eegtoolkit/+featselection/@FEAST + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featselection/@FEAST >
    -

    Dependency Graph for ./+eegtoolkit/+featselection/@FEAST

    +Index for +eegtoolkit/+featselection/@FEAST > +

    Dependency Graph for +eegtoolkit/+featselection/@FEAST

    -Dependency Graph for ./+eegtoolkit/+featselection/@FEAST +Dependency Graph for +eegtoolkit/+featselection/@FEAST
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FEAST/index.html b/doc/+eegtoolkit/+featselection/@FEAST/index.html index 67b79c7..0e7398b 100644 --- a/doc/+eegtoolkit/+featselection/@FEAST/index.html +++ b/doc/+eegtoolkit/+featselection/@FEAST/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featselection/@FEAST - - + Index for Directory +eegtoolkit/+featselection/@FEAST + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featselection/@FEAST >
    +Index for +eegtoolkit/+featselection/@FEAST > -

    Index for ./+eegtoolkit/+featselection/@FEAST

    +

    Index for +eegtoolkit/+featselection/@FEAST

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.html b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.html index b7b4bf9..f149335 100644 --- a/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.html +++ b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/FeatureSelectionBase.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +featselection > @FeatureSelectionBase > FeatureSelectionBase.m
    +
    Home > +eegtoolkit > +featselection > @FeatureSelectionBase > FeatureSelectionBase.m
    +
    Index for +eegtoolkit/+featselection/@FeatureSelectionBase >
    -->

    FeatureSelectionBase

    @@ -88,6 +88,6 @@

    SOURCE CODE ^end 0031 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.html b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.html index 4ea287e..51a2d2f 100644 --- a/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.html +++ b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featselection/@FeatureSelectionBase - - + Dependency Graph for +eegtoolkit/+featselection/@FeatureSelectionBase + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featselection/@FeatureSelectionBase >
    -

    Dependency Graph for ./+eegtoolkit/+featselection/@FeatureSelectionBase

    +Index for +eegtoolkit/+featselection/@FeatureSelectionBase > +

    Dependency Graph for +eegtoolkit/+featselection/@FeatureSelectionBase

    -Dependency Graph for ./+eegtoolkit/+featselection/@FeatureSelectionBase +Dependency Graph for +eegtoolkit/+featselection/@FeatureSelectionBase
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/index.html b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/index.html index cd1ebcf..ce52341 100644 --- a/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/index.html +++ b/doc/+eegtoolkit/+featselection/@FeatureSelectionBase/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featselection/@FeatureSelectionBase - - + Index for Directory +eegtoolkit/+featselection/@FeatureSelectionBase + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featselection/@FeatureSelectionBase >
    +Index for +eegtoolkit/+featselection/@FeatureSelectionBase > -

    Index for ./+eegtoolkit/+featselection/@FeatureSelectionBase

    +

    Index for +eegtoolkit/+featselection/@FeatureSelectionBase

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@PCA/PCA.html b/doc/+eegtoolkit/+featselection/@PCA/PCA.html index 41fbbc6..935a7c4 100644 --- a/doc/+eegtoolkit/+featselection/@PCA/PCA.html +++ b/doc/+eegtoolkit/+featselection/@PCA/PCA.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featselection/@PCA >
    -->

    PCA

    @@ -77,6 +77,6 @@

    SOURCE CODE ^end 0031 end 0032 end -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@PCA/graph.html b/doc/+eegtoolkit/+featselection/@PCA/graph.html index 905c0d7..4bfeb29 100644 --- a/doc/+eegtoolkit/+featselection/@PCA/graph.html +++ b/doc/+eegtoolkit/+featselection/@PCA/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featselection/@PCA - - + Dependency Graph for +eegtoolkit/+featselection/@PCA + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featselection/@PCA >
    -

    Dependency Graph for ./+eegtoolkit/+featselection/@PCA

    +Index for +eegtoolkit/+featselection/@PCA > +

    Dependency Graph for +eegtoolkit/+featselection/@PCA

    -Dependency Graph for ./+eegtoolkit/+featselection/@PCA +Dependency Graph for +eegtoolkit/+featselection/@PCA
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@PCA/index.html b/doc/+eegtoolkit/+featselection/@PCA/index.html index ddb326c..3d2e250 100644 --- a/doc/+eegtoolkit/+featselection/@PCA/index.html +++ b/doc/+eegtoolkit/+featselection/@PCA/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featselection/@PCA - - + Index for Directory +eegtoolkit/+featselection/@PCA + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featselection/@PCA >
    +Index for +eegtoolkit/+featselection/@PCA > -

    Index for ./+eegtoolkit/+featselection/@PCA

    +

    Index for +eegtoolkit/+featselection/@PCA

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@SVD/SVD.html b/doc/+eegtoolkit/+featselection/@SVD/SVD.html index 61e1deb..01f8d50 100644 --- a/doc/+eegtoolkit/+featselection/@SVD/SVD.html +++ b/doc/+eegtoolkit/+featselection/@SVD/SVD.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+featselection/@SVD >
    -->

    SVD

    @@ -77,6 +77,6 @@

    SOURCE CODE ^end 0031 end 0032 end -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@SVD/graph.html b/doc/+eegtoolkit/+featselection/@SVD/graph.html index c601b51..a664cb6 100644 --- a/doc/+eegtoolkit/+featselection/@SVD/graph.html +++ b/doc/+eegtoolkit/+featselection/@SVD/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+featselection/@SVD - - + Dependency Graph for +eegtoolkit/+featselection/@SVD + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+featselection/@SVD >
    -

    Dependency Graph for ./+eegtoolkit/+featselection/@SVD

    +Index for +eegtoolkit/+featselection/@SVD > +

    Dependency Graph for +eegtoolkit/+featselection/@SVD

    -Dependency Graph for ./+eegtoolkit/+featselection/@SVD +Dependency Graph for +eegtoolkit/+featselection/@SVD
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+featselection/@SVD/index.html b/doc/+eegtoolkit/+featselection/@SVD/index.html index 865923a..9fa740d 100644 --- a/doc/+eegtoolkit/+featselection/@SVD/index.html +++ b/doc/+eegtoolkit/+featselection/@SVD/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+featselection/@SVD - - + Index for Directory +eegtoolkit/+featselection/@SVD + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+featselection/@SVD >
    +Index for +eegtoolkit/+featselection/@SVD > -

    Index for ./+eegtoolkit/+featselection/@SVD

    +

    Index for +eegtoolkit/+featselection/@SVD

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Amuse/Amuse.html b/doc/+eegtoolkit/+preprocessing/@Amuse/Amuse.html index 6491268..c2b9df7 100644 --- a/doc/+eegtoolkit/+preprocessing/@Amuse/Amuse.html +++ b/doc/+eegtoolkit/+preprocessing/@Amuse/Amuse.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+preprocessing/@Amuse >
    -->

    Amuse

    @@ -147,6 +147,6 @@

    SOURCE CODE ^end 0102 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Amuse/graph.html b/doc/+eegtoolkit/+preprocessing/@Amuse/graph.html index 48d9378..a293083 100644 --- a/doc/+eegtoolkit/+preprocessing/@Amuse/graph.html +++ b/doc/+eegtoolkit/+preprocessing/@Amuse/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+preprocessing/@Amuse - - + Dependency Graph for +eegtoolkit/+preprocessing/@Amuse + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@Amuse >
    -

    Dependency Graph for ./+eegtoolkit/+preprocessing/@Amuse

    +Index for +eegtoolkit/+preprocessing/@Amuse > +

    Dependency Graph for +eegtoolkit/+preprocessing/@Amuse

    -Dependency Graph for ./+eegtoolkit/+preprocessing/@Amuse +Dependency Graph for +eegtoolkit/+preprocessing/@Amuse
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Amuse/index.html b/doc/+eegtoolkit/+preprocessing/@Amuse/index.html index b5a54a5..0525777 100644 --- a/doc/+eegtoolkit/+preprocessing/@Amuse/index.html +++ b/doc/+eegtoolkit/+preprocessing/@Amuse/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+preprocessing/@Amuse - - + Index for Directory +eegtoolkit/+preprocessing/@Amuse + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@Amuse >
    +Index for +eegtoolkit/+preprocessing/@Amuse > -

    Index for ./+eegtoolkit/+preprocessing/@Amuse

    +

    Index for +eegtoolkit/+preprocessing/@Amuse

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@DigitalFilter/DigitalFilter.html b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/DigitalFilter.html index 76b4074..9c51504 100644 --- a/doc/+eegtoolkit/+preprocessing/@DigitalFilter/DigitalFilter.html +++ b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/DigitalFilter.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+preprocessing/@DigitalFilter >
    -->

    DigitalFilter

    @@ -95,6 +95,6 @@

    SOURCE CODE ^end 0050 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.html b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.html index 7a752d9..05c59fa 100644 --- a/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.html +++ b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+preprocessing/@DigitalFilter - - + Dependency Graph for +eegtoolkit/+preprocessing/@DigitalFilter + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@DigitalFilter >
    -

    Dependency Graph for ./+eegtoolkit/+preprocessing/@DigitalFilter

    +Index for +eegtoolkit/+preprocessing/@DigitalFilter > +

    Dependency Graph for +eegtoolkit/+preprocessing/@DigitalFilter

    -Dependency Graph for ./+eegtoolkit/+preprocessing/@DigitalFilter +Dependency Graph for +eegtoolkit/+preprocessing/@DigitalFilter
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@DigitalFilter/index.html b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/index.html index 1c179ac..f6b68ae 100644 --- a/doc/+eegtoolkit/+preprocessing/@DigitalFilter/index.html +++ b/doc/+eegtoolkit/+preprocessing/@DigitalFilter/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+preprocessing/@DigitalFilter - - + Index for Directory +eegtoolkit/+preprocessing/@DigitalFilter + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@DigitalFilter >
    +Index for +eegtoolkit/+preprocessing/@DigitalFilter > -

    Index for ./+eegtoolkit/+preprocessing/@DigitalFilter

    +

    Index for +eegtoolkit/+preprocessing/@DigitalFilter

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@FastICA/FastICA.html b/doc/+eegtoolkit/+preprocessing/@FastICA/FastICA.html index 90734ba..5df07ea 100644 --- a/doc/+eegtoolkit/+preprocessing/@FastICA/FastICA.html +++ b/doc/+eegtoolkit/+preprocessing/@FastICA/FastICA.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+preprocessing/@FastICA >
    -->

    FastICA

    @@ -92,6 +92,6 @@

    SOURCE CODE ^end 0047 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@FastICA/graph.html b/doc/+eegtoolkit/+preprocessing/@FastICA/graph.html index a8abb55..a34a2c0 100644 --- a/doc/+eegtoolkit/+preprocessing/@FastICA/graph.html +++ b/doc/+eegtoolkit/+preprocessing/@FastICA/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+preprocessing/@FastICA - - + Dependency Graph for +eegtoolkit/+preprocessing/@FastICA + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@FastICA >
    -

    Dependency Graph for ./+eegtoolkit/+preprocessing/@FastICA

    +Index for +eegtoolkit/+preprocessing/@FastICA > +

    Dependency Graph for +eegtoolkit/+preprocessing/@FastICA

    -Dependency Graph for ./+eegtoolkit/+preprocessing/@FastICA +Dependency Graph for +eegtoolkit/+preprocessing/@FastICA
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@FastICA/index.html b/doc/+eegtoolkit/+preprocessing/@FastICA/index.html index 0360c09..b7f5905 100644 --- a/doc/+eegtoolkit/+preprocessing/@FastICA/index.html +++ b/doc/+eegtoolkit/+preprocessing/@FastICA/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+preprocessing/@FastICA - - + Index for Directory +eegtoolkit/+preprocessing/@FastICA + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@FastICA >
    +Index for +eegtoolkit/+preprocessing/@FastICA > -

    Index for ./+eegtoolkit/+preprocessing/@FastICA

    +

    Index for +eegtoolkit/+preprocessing/@FastICA

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.html b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.html index 87198d7..fee69e9 100644 --- a/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.html +++ b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/PreprocessingBase.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+preprocessing/@PreprocessingBase >
    -->

    PreprocessingBase

    @@ -90,6 +90,6 @@

    SOURCE CODE ^end 0032 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.html b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.html index e0191c3..96a284d 100644 --- a/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.html +++ b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+preprocessing/@PreprocessingBase - - + Dependency Graph for +eegtoolkit/+preprocessing/@PreprocessingBase + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@PreprocessingBase >
    -

    Dependency Graph for ./+eegtoolkit/+preprocessing/@PreprocessingBase

    +Index for +eegtoolkit/+preprocessing/@PreprocessingBase > +

    Dependency Graph for +eegtoolkit/+preprocessing/@PreprocessingBase

    -Dependency Graph for ./+eegtoolkit/+preprocessing/@PreprocessingBase +Dependency Graph for +eegtoolkit/+preprocessing/@PreprocessingBase
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/index.html b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/index.html index a2d767b..b099f28 100644 --- a/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/index.html +++ b/doc/+eegtoolkit/+preprocessing/@PreprocessingBase/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+preprocessing/@PreprocessingBase - - + Index for Directory +eegtoolkit/+preprocessing/@PreprocessingBase + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@PreprocessingBase >
    +Index for +eegtoolkit/+preprocessing/@PreprocessingBase > -

    Index for ./+eegtoolkit/+preprocessing/@PreprocessingBase

    +

    Index for +eegtoolkit/+preprocessing/@PreprocessingBase

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Rereferencing/Rereferencing.html b/doc/+eegtoolkit/+preprocessing/@Rereferencing/Rereferencing.html index 26c098e..aa30f89 100644 --- a/doc/+eegtoolkit/+preprocessing/@Rereferencing/Rereferencing.html +++ b/doc/+eegtoolkit/+preprocessing/@Rereferencing/Rereferencing.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+preprocessing/@Rereferencing >
    -->

    Rereferencing

    @@ -90,6 +90,6 @@

    SOURCE CODE ^end 0045 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.html b/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.html index c91e1a3..4f5d655 100644 --- a/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.html +++ b/doc/+eegtoolkit/+preprocessing/@Rereferencing/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+preprocessing/@Rereferencing - - + Dependency Graph for +eegtoolkit/+preprocessing/@Rereferencing + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@Rereferencing >
    -

    Dependency Graph for ./+eegtoolkit/+preprocessing/@Rereferencing

    +Index for +eegtoolkit/+preprocessing/@Rereferencing > +

    Dependency Graph for +eegtoolkit/+preprocessing/@Rereferencing

    -Dependency Graph for ./+eegtoolkit/+preprocessing/@Rereferencing +Dependency Graph for +eegtoolkit/+preprocessing/@Rereferencing
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Rereferencing/index.html b/doc/+eegtoolkit/+preprocessing/@Rereferencing/index.html index b56a4f6..f5b3157 100644 --- a/doc/+eegtoolkit/+preprocessing/@Rereferencing/index.html +++ b/doc/+eegtoolkit/+preprocessing/@Rereferencing/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+preprocessing/@Rereferencing - - + Index for Directory +eegtoolkit/+preprocessing/@Rereferencing + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@Rereferencing >
    +Index for +eegtoolkit/+preprocessing/@Rereferencing > -

    Index for ./+eegtoolkit/+preprocessing/@Rereferencing

    +

    Index for +eegtoolkit/+preprocessing/@Rereferencing

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@SampleSelection/SampleSelection.html b/doc/+eegtoolkit/+preprocessing/@SampleSelection/SampleSelection.html index 3b1cfb2..cbe204b 100644 --- a/doc/+eegtoolkit/+preprocessing/@SampleSelection/SampleSelection.html +++ b/doc/+eegtoolkit/+preprocessing/@SampleSelection/SampleSelection.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+preprocessing/@SampleSelection >
    -->

    SampleSelection

    @@ -138,6 +138,6 @@

    SOURCE CODE ^end 0093 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.html b/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.html index 6bad530..1e2df1a 100644 --- a/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.html +++ b/doc/+eegtoolkit/+preprocessing/@SampleSelection/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+preprocessing/@SampleSelection - - + Dependency Graph for +eegtoolkit/+preprocessing/@SampleSelection + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@SampleSelection >
    -

    Dependency Graph for ./+eegtoolkit/+preprocessing/@SampleSelection

    +Index for +eegtoolkit/+preprocessing/@SampleSelection > +

    Dependency Graph for +eegtoolkit/+preprocessing/@SampleSelection

    -Dependency Graph for ./+eegtoolkit/+preprocessing/@SampleSelection +Dependency Graph for +eegtoolkit/+preprocessing/@SampleSelection
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@SampleSelection/index.html b/doc/+eegtoolkit/+preprocessing/@SampleSelection/index.html index 95496df..4b6ebc0 100644 --- a/doc/+eegtoolkit/+preprocessing/@SampleSelection/index.html +++ b/doc/+eegtoolkit/+preprocessing/@SampleSelection/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+preprocessing/@SampleSelection - - + Index for Directory +eegtoolkit/+preprocessing/@SampleSelection + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@SampleSelection >
    +Index for +eegtoolkit/+preprocessing/@SampleSelection > -

    Index for ./+eegtoolkit/+preprocessing/@SampleSelection

    +

    Index for +eegtoolkit/+preprocessing/@SampleSelection

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Windsorize/Windsorize.html b/doc/+eegtoolkit/+preprocessing/@Windsorize/Windsorize.html index 33241d4..8a6667b 100644 --- a/doc/+eegtoolkit/+preprocessing/@Windsorize/Windsorize.html +++ b/doc/+eegtoolkit/+preprocessing/@Windsorize/Windsorize.html @@ -12,10 +12,10 @@ - + +
    Index for +eegtoolkit/+preprocessing/@Windsorize >
    -->

    Windsorize

    @@ -109,6 +109,6 @@

    SOURCE CODE ^end 0064 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Windsorize/graph.html b/doc/+eegtoolkit/+preprocessing/@Windsorize/graph.html index f1c260b..87af35a 100644 --- a/doc/+eegtoolkit/+preprocessing/@Windsorize/graph.html +++ b/doc/+eegtoolkit/+preprocessing/@Windsorize/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+preprocessing/@Windsorize - - + Dependency Graph for +eegtoolkit/+preprocessing/@Windsorize + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@Windsorize >
    -

    Dependency Graph for ./+eegtoolkit/+preprocessing/@Windsorize

    +Index for +eegtoolkit/+preprocessing/@Windsorize > +

    Dependency Graph for +eegtoolkit/+preprocessing/@Windsorize

    -Dependency Graph for ./+eegtoolkit/+preprocessing/@Windsorize +Dependency Graph for +eegtoolkit/+preprocessing/@Windsorize
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+preprocessing/@Windsorize/index.html b/doc/+eegtoolkit/+preprocessing/@Windsorize/index.html index c6b4343..d0a6469 100644 --- a/doc/+eegtoolkit/+preprocessing/@Windsorize/index.html +++ b/doc/+eegtoolkit/+preprocessing/@Windsorize/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+preprocessing/@Windsorize - - + Index for Directory +eegtoolkit/+preprocessing/@Windsorize + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+preprocessing/@Windsorize >
    +Index for +eegtoolkit/+preprocessing/@Windsorize > -

    Index for ./+eegtoolkit/+preprocessing/@Windsorize

    +

    Index for +eegtoolkit/+preprocessing/@Windsorize

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@FusionInstanceSet/FusionInstanceSet.html b/doc/+eegtoolkit/+util/@FusionInstanceSet/FusionInstanceSet.html index 777c40c..062ee71 100644 --- a/doc/+eegtoolkit/+util/@FusionInstanceSet/FusionInstanceSet.html +++ b/doc/+eegtoolkit/+util/@FusionInstanceSet/FusionInstanceSet.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +util > @FusionInstanceSet > FusionInstanceSet.m
    +
    Home > +eegtoolkit > +util > @FusionInstanceSet > FusionInstanceSet.m
    +
    Index for +eegtoolkit/+util/@FusionInstanceSet >
    -->

    FusionInstanceSet

    @@ -78,6 +78,6 @@

    SOURCE CODE ^end 0032 0033 end -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.html b/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.html index fed1895..4c673ed 100644 --- a/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.html +++ b/doc/+eegtoolkit/+util/@FusionInstanceSet/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+util/@FusionInstanceSet - - + Dependency Graph for +eegtoolkit/+util/@FusionInstanceSet + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@FusionInstanceSet >
    -

    Dependency Graph for ./+eegtoolkit/+util/@FusionInstanceSet

    +Index for +eegtoolkit/+util/@FusionInstanceSet > +

    Dependency Graph for +eegtoolkit/+util/@FusionInstanceSet

    -Dependency Graph for ./+eegtoolkit/+util/@FusionInstanceSet +Dependency Graph for +eegtoolkit/+util/@FusionInstanceSet
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@FusionInstanceSet/index.html b/doc/+eegtoolkit/+util/@FusionInstanceSet/index.html index cd20d6c..c31bc7d 100644 --- a/doc/+eegtoolkit/+util/@FusionInstanceSet/index.html +++ b/doc/+eegtoolkit/+util/@FusionInstanceSet/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+util/@FusionInstanceSet - - + Index for Directory +eegtoolkit/+util/@FusionInstanceSet + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@FusionInstanceSet >
    +Index for +eegtoolkit/+util/@FusionInstanceSet > -

    Index for ./+eegtoolkit/+util/@FusionInstanceSet

    +

    Index for +eegtoolkit/+util/@FusionInstanceSet

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@InstanceSet/InstanceSet.html b/doc/+eegtoolkit/+util/@InstanceSet/InstanceSet.html index 3fed654..87b3189 100644 --- a/doc/+eegtoolkit/+util/@InstanceSet/InstanceSet.html +++ b/doc/+eegtoolkit/+util/@InstanceSet/InstanceSet.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +util > @InstanceSet > InstanceSet.m
    +
    Home > +eegtoolkit > +util > @InstanceSet > InstanceSet.m
    +
    Index for +eegtoolkit/+util/@InstanceSet >
    -->

    InstanceSet

    @@ -322,6 +322,6 @@

    SOURCE CODE ^end 0238 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@InstanceSet/graph.html b/doc/+eegtoolkit/+util/@InstanceSet/graph.html index 61ce11e..8886ce7 100644 --- a/doc/+eegtoolkit/+util/@InstanceSet/graph.html +++ b/doc/+eegtoolkit/+util/@InstanceSet/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+util/@InstanceSet - - + Dependency Graph for +eegtoolkit/+util/@InstanceSet + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@InstanceSet >
    -

    Dependency Graph for ./+eegtoolkit/+util/@InstanceSet

    +Index for +eegtoolkit/+util/@InstanceSet > +

    Dependency Graph for +eegtoolkit/+util/@InstanceSet

    -Dependency Graph for ./+eegtoolkit/+util/@InstanceSet +Dependency Graph for +eegtoolkit/+util/@InstanceSet
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@InstanceSet/index.html b/doc/+eegtoolkit/+util/@InstanceSet/index.html index 903c4ed..44ae4e8 100644 --- a/doc/+eegtoolkit/+util/@InstanceSet/index.html +++ b/doc/+eegtoolkit/+util/@InstanceSet/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+util/@InstanceSet - - + Index for Directory +eegtoolkit/+util/@InstanceSet + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@InstanceSet >
    +Index for +eegtoolkit/+util/@InstanceSet > -

    Index for ./+eegtoolkit/+util/@InstanceSet

    +

    Index for +eegtoolkit/+util/@InstanceSet

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/L1MCCAInstanceSet.html b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/L1MCCAInstanceSet.html index aca3de6..aa29b95 100644 --- a/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/L1MCCAInstanceSet.html +++ b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/L1MCCAInstanceSet.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +util > @L1MCCAInstanceSet > L1MCCAInstanceSet.m
    +
    Home > +eegtoolkit > +util > @L1MCCAInstanceSet > L1MCCAInstanceSet.m
    +
    Index for +eegtoolkit/+util/@L1MCCAInstanceSet >
    -->

    L1MCCAInstanceSet

    @@ -120,6 +120,6 @@

    SOURCE CODE ^end 0074 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.html b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.html index fd2a3f3..d7e0f7e 100644 --- a/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.html +++ b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+util/@L1MCCAInstanceSet - - + Dependency Graph for +eegtoolkit/+util/@L1MCCAInstanceSet + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@L1MCCAInstanceSet >
    -

    Dependency Graph for ./+eegtoolkit/+util/@L1MCCAInstanceSet

    +Index for +eegtoolkit/+util/@L1MCCAInstanceSet > +

    Dependency Graph for +eegtoolkit/+util/@L1MCCAInstanceSet

    -Dependency Graph for ./+eegtoolkit/+util/@L1MCCAInstanceSet +Dependency Graph for +eegtoolkit/+util/@L1MCCAInstanceSet
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/index.html b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/index.html index ee82013..a38792d 100644 --- a/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/index.html +++ b/doc/+eegtoolkit/+util/@L1MCCAInstanceSet/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+util/@L1MCCAInstanceSet - - + Index for Directory +eegtoolkit/+util/@L1MCCAInstanceSet + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@L1MCCAInstanceSet >
    +Index for +eegtoolkit/+util/@L1MCCAInstanceSet > -

    Index for ./+eegtoolkit/+util/@L1MCCAInstanceSet

    +

    Index for +eegtoolkit/+util/@L1MCCAInstanceSet

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@LSLWrapper/LSLWrapper.html b/doc/+eegtoolkit/+util/@LSLWrapper/LSLWrapper.html index dc45675..ab5ce4a 100644 --- a/doc/+eegtoolkit/+util/@LSLWrapper/LSLWrapper.html +++ b/doc/+eegtoolkit/+util/@LSLWrapper/LSLWrapper.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +util > @LSLWrapper > LSLWrapper.m
    +
    Home > +eegtoolkit > +util > @LSLWrapper > LSLWrapper.m
    +
    Index for +eegtoolkit/+util/@LSLWrapper >
    -->

    LSLWrapper

    @@ -305,6 +305,6 @@

    SOURCE CODE ^end 0259 end 0260 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@LSLWrapper/graph.html b/doc/+eegtoolkit/+util/@LSLWrapper/graph.html index 1e471f6..ff0d441 100644 --- a/doc/+eegtoolkit/+util/@LSLWrapper/graph.html +++ b/doc/+eegtoolkit/+util/@LSLWrapper/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+util/@LSLWrapper - - + Dependency Graph for +eegtoolkit/+util/@LSLWrapper + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@LSLWrapper >
    -

    Dependency Graph for ./+eegtoolkit/+util/@LSLWrapper

    +Index for +eegtoolkit/+util/@LSLWrapper > +

    Dependency Graph for +eegtoolkit/+util/@LSLWrapper

    -Dependency Graph for ./+eegtoolkit/+util/@LSLWrapper +Dependency Graph for +eegtoolkit/+util/@LSLWrapper
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@LSLWrapper/index.html b/doc/+eegtoolkit/+util/@LSLWrapper/index.html index 2c5d79d..cc2ab26 100644 --- a/doc/+eegtoolkit/+util/@LSLWrapper/index.html +++ b/doc/+eegtoolkit/+util/@LSLWrapper/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+util/@LSLWrapper - - + Index for Directory +eegtoolkit/+util/@LSLWrapper + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@LSLWrapper >
    +Index for +eegtoolkit/+util/@LSLWrapper > -

    Index for ./+eegtoolkit/+util/@LSLWrapper

    +

    Index for +eegtoolkit/+util/@LSLWrapper

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@RawSignalSet/RawSignalSet.html b/doc/+eegtoolkit/+util/@RawSignalSet/RawSignalSet.html index 8cbbe7c..327a2f7 100644 --- a/doc/+eegtoolkit/+util/@RawSignalSet/RawSignalSet.html +++ b/doc/+eegtoolkit/+util/@RawSignalSet/RawSignalSet.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +util > @RawSignalSet > RawSignalSet.m
    +
    Home > +eegtoolkit > +util > @RawSignalSet > RawSignalSet.m
    +
    Index for +eegtoolkit/+util/@RawSignalSet >
    -->

    RawSignalSet

    @@ -107,6 +107,6 @@

    SOURCE CODE ^end 0062 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@RawSignalSet/graph.html b/doc/+eegtoolkit/+util/@RawSignalSet/graph.html index 6eddfe1..653ae7a 100644 --- a/doc/+eegtoolkit/+util/@RawSignalSet/graph.html +++ b/doc/+eegtoolkit/+util/@RawSignalSet/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+util/@RawSignalSet - - + Dependency Graph for +eegtoolkit/+util/@RawSignalSet + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@RawSignalSet >
    -

    Dependency Graph for ./+eegtoolkit/+util/@RawSignalSet

    +Index for +eegtoolkit/+util/@RawSignalSet > +

    Dependency Graph for +eegtoolkit/+util/@RawSignalSet

    -Dependency Graph for ./+eegtoolkit/+util/@RawSignalSet +Dependency Graph for +eegtoolkit/+util/@RawSignalSet
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@RawSignalSet/index.html b/doc/+eegtoolkit/+util/@RawSignalSet/index.html index d84e8cd..de2b1bd 100644 --- a/doc/+eegtoolkit/+util/@RawSignalSet/index.html +++ b/doc/+eegtoolkit/+util/@RawSignalSet/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+util/@RawSignalSet - - + Index for Directory +eegtoolkit/+util/@RawSignalSet + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@RawSignalSet >
    +Index for +eegtoolkit/+util/@RawSignalSet > -

    Index for ./+eegtoolkit/+util/@RawSignalSet

    +

    Index for +eegtoolkit/+util/@RawSignalSet

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@ResultSet/ResultSet.html b/doc/+eegtoolkit/+util/@ResultSet/ResultSet.html index 0f798a2..e347983 100644 --- a/doc/+eegtoolkit/+util/@ResultSet/ResultSet.html +++ b/doc/+eegtoolkit/+util/@ResultSet/ResultSet.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +util > @ResultSet > ResultSet.m
    +
    Home > +eegtoolkit > +util > @ResultSet > ResultSet.m
    +
    Index for +eegtoolkit/+util/@ResultSet >
    -->

    ResultSet

    @@ -106,6 +106,6 @@

    SOURCE CODE ^end 0060 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@ResultSet/graph.html b/doc/+eegtoolkit/+util/@ResultSet/graph.html index 1eee7e5..a650c57 100644 --- a/doc/+eegtoolkit/+util/@ResultSet/graph.html +++ b/doc/+eegtoolkit/+util/@ResultSet/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+util/@ResultSet - - + Dependency Graph for +eegtoolkit/+util/@ResultSet + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@ResultSet >
    -

    Dependency Graph for ./+eegtoolkit/+util/@ResultSet

    +Index for +eegtoolkit/+util/@ResultSet > +

    Dependency Graph for +eegtoolkit/+util/@ResultSet

    -Dependency Graph for ./+eegtoolkit/+util/@ResultSet +Dependency Graph for +eegtoolkit/+util/@ResultSet
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@ResultSet/index.html b/doc/+eegtoolkit/+util/@ResultSet/index.html index 2f90638..3d019eb 100644 --- a/doc/+eegtoolkit/+util/@ResultSet/index.html +++ b/doc/+eegtoolkit/+util/@ResultSet/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+util/@ResultSet - - + Index for Directory +eegtoolkit/+util/@ResultSet + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@ResultSet >
    +Index for +eegtoolkit/+util/@ResultSet > -

    Index for ./+eegtoolkit/+util/@ResultSet

    +

    Index for +eegtoolkit/+util/@ResultSet

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@Session/Session.html b/doc/+eegtoolkit/+util/@Session/Session.html index ccb7732..9649681 100644 --- a/doc/+eegtoolkit/+util/@Session/Session.html +++ b/doc/+eegtoolkit/+util/@Session/Session.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +util > @Session > Session.m
    +
    Home > +eegtoolkit > +util > @Session > Session.m
    +
    Index for +eegtoolkit/+util/@Session >
    -->

    Session

    @@ -584,6 +584,6 @@

    SOURCE CODE ^end 0505 end 0506 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@Session/graph.html b/doc/+eegtoolkit/+util/@Session/graph.html index f8dff3a..8dec51e 100644 --- a/doc/+eegtoolkit/+util/@Session/graph.html +++ b/doc/+eegtoolkit/+util/@Session/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+util/@Session - - + Dependency Graph for +eegtoolkit/+util/@Session + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@Session >
    -

    Dependency Graph for ./+eegtoolkit/+util/@Session

    +Index for +eegtoolkit/+util/@Session > +

    Dependency Graph for +eegtoolkit/+util/@Session

    -Dependency Graph for ./+eegtoolkit/+util/@Session +Dependency Graph for +eegtoolkit/+util/@Session
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@Session/index.html b/doc/+eegtoolkit/+util/@Session/index.html index 6608428..91d17af 100644 --- a/doc/+eegtoolkit/+util/@Session/index.html +++ b/doc/+eegtoolkit/+util/@Session/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+util/@Session - - + Index for Directory +eegtoolkit/+util/@Session + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@Session >
    +Index for +eegtoolkit/+util/@Session > -

    Index for ./+eegtoolkit/+util/@Session

    +

    Index for +eegtoolkit/+util/@Session

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@Trial/Trial.html b/doc/+eegtoolkit/+util/@Trial/Trial.html index 5c35357..e9b86a0 100644 --- a/doc/+eegtoolkit/+util/@Trial/Trial.html +++ b/doc/+eegtoolkit/+util/@Trial/Trial.html @@ -12,10 +12,10 @@ -
    Home > +eegtoolkit > +util > @Trial > Trial.m
    +
    Home > +eegtoolkit > +util > @Trial > Trial.m
    +
    Index for +eegtoolkit/+util/@Trial >
    -->

    Trial

    @@ -110,6 +110,6 @@

    SOURCE CODE ^end 0052 -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@Trial/graph.html b/doc/+eegtoolkit/+util/@Trial/graph.html index 150af9a..2dba938 100644 --- a/doc/+eegtoolkit/+util/@Trial/graph.html +++ b/doc/+eegtoolkit/+util/@Trial/graph.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Dependency Graph for ./+eegtoolkit/+util/@Trial - - + Dependency Graph for +eegtoolkit/+util/@Trial + + @@ -13,16 +13,16 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@Trial >
    -

    Dependency Graph for ./+eegtoolkit/+util/@Trial

    +Index for +eegtoolkit/+util/@Trial > +

    Dependency Graph for +eegtoolkit/+util/@Trial

    -Dependency Graph for ./+eegtoolkit/+util/@Trial +Dependency Graph for +eegtoolkit/+util/@Trial
    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/+eegtoolkit/+util/@Trial/index.html b/doc/+eegtoolkit/+util/@Trial/index.html index 0894d44..61fb45f 100644 --- a/doc/+eegtoolkit/+util/@Trial/index.html +++ b/doc/+eegtoolkit/+util/@Trial/index.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> - Index for Directory ./+eegtoolkit/+util/@Trial - - + Index for Directory +eegtoolkit/+util/@Trial + + @@ -13,9 +13,9 @@ -
    < Master indexIndex for ./+eegtoolkit/+util/@Trial >
    +Index for +eegtoolkit/+util/@Trial > -

    Index for ./+eegtoolkit/+util/@Trial

    +

    Index for +eegtoolkit/+util/@Trial

    Matlab files in this directory:

    @@ -27,6 +27,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file diff --git a/doc/exampleCSP.html b/doc/exampleCSP.html index b25686a..3cb4202 100644 --- a/doc/exampleCSP.html +++ b/doc/exampleCSP.html @@ -82,6 +82,6 @@

    SOURCE CODE ^ -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/exampleCombiCCA.html b/doc/exampleCombiCCA.html index a939c0d..95ad859 100644 --- a/doc/exampleCombiCCA.html +++ b/doc/exampleCombiCCA.html @@ -88,6 +88,6 @@

    SOURCE CODE ^% accuracy = experiment.results{1}.getAccuracy(); 0044 end 0045 end -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/exampleDefault.html b/doc/exampleDefault.html index 46b5f13..e9ffd3e 100644 --- a/doc/exampleDefault.html +++ b/doc/exampleDefault.html @@ -92,6 +92,6 @@

    SOURCE CODE ^%get the configuration used (for reporting) 0044 experiment.getExperimentInfo 0045 experiment.getTime -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/exampleEPOCCCASVM.html b/doc/exampleEPOCCCASVM.html index 45f41a8..bd01d3e 100644 --- a/doc/exampleEPOCCCASVM.html +++ b/doc/exampleEPOCCCASVM.html @@ -100,6 +100,6 @@

    SOURCE CODE ^%get the configuration used (for reporting) 0051 % experiment.getExperimentInfo 0052 % experiment.getTime -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/exampleERRP.html b/doc/exampleERRP.html index 80d30c3..c9e3148 100644 --- a/doc/exampleERRP.html +++ b/doc/exampleERRP.html @@ -86,6 +86,6 @@

    SOURCE CODE ^'mean acc = %.2f\n',mean(accuracies)); -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/exampleERRPSSVEPDemo.html b/doc/exampleERRPSSVEPDemo.html new file mode 100644 index 0000000..d629350 --- /dev/null +++ b/doc/exampleERRPSSVEPDemo.html @@ -0,0 +1,94 @@ + + + + Description of exampleERRPSSVEPDemo + + + + + + + + + +
    Home > . > exampleERRPSSVEPDemo.m
    + + + +

    exampleERRPSSVEPDemo +

    + +

    PURPOSE ^

    +
    d2 = designfilt('bandpassiir', 'SampleRate', 256, 'FilterOrder', 8 ,'HalfPowerFrequency1', 1, 'HalfPowerFrequency2', 10,'DesignMethod', 'butter');
    + +

    SYNOPSIS ^

    +
    This is a script file.
    + +

    DESCRIPTION ^

    +
     d2 = designfilt('bandpassiir', 'SampleRate', 256, 'FilterOrder', 8 ,'HalfPowerFrequency1', 1, 'HalfPowerFrequency2', 10,'DesignMethod', 'butter');
    + + +

    CROSS-REFERENCE INFORMATION ^

    +This function calls: +
      +
    +This function is called by: +
      +
    + + + +

    DOWNLOAD ^

    +

    exampleERRPSSVEPDemo.m

    +

    SOURCE CODE ^

    +
    0001 % d2 = designfilt('bandpassiir', 'SampleRate', 256, 'FilterOrder', 8 ,'HalfPowerFrequency1', 1, 'HalfPowerFrequency2', 10,'DesignMethod', 'butter');
    +0002 
    +0003 sess = eegtoolkit.util.Session;
    +0004 sess.loadSubjectSession(8,5,2);
    +0005 
    +0006 [z,p,k]=butter(3,[1,10]/64);
    +0007 [s,g]=zp2sos(z,p,k);
    +0008 Hd = dfilt.df2sos(s,g);
    +0009 df = eegtoolkit.preprocessing.DigitalFilter; %
    +0010 df.filt = Hd;
    +0011 
    +0012 ss = eegtoolkit.preprocessing.SampleSelection;
    +0013 ss.channels = [1:14];
    +0014 ss.sampleRange = [1:6:200];
    +0015 
    +0016 extr = {};
    +0017 for i=1:3
    +0018     extr{i} = eegtoolkit.featextraction.PWelch;
    +0019     extr{i}.channel = 1;
    +0020 end
    +0021 
    +0022 aggr = eegtoolkit.aggregation.ChannelConcat;
    +0023 
    +0024 classif = eegtoolkit.classification.LIBSVM;
    +0025 classif.kernel = classif.KERNEL_RBF;
    +0026 classif.gamma = 1/9;
    +0027 classif.cost = 1;
    +0028 
    +0029 %Setup experiment
    +0030 experiment = eegtoolkit.experiment.Experimenter;
    +0031 experiment.session = sess;
    +0032 experiment.preprocessing = {df,ss};
    +0033 experiment.featextraction = extr;
    +0034 experiment.aggregator = aggr;
    +0035 experiment.classification = classif;
    +0036 experiment.evalMethod = experiment.EVAL_METHOD_XFOLD_CV;
    +0037 
    +0038 experiment.run(10);
    +0039 
    +0040 accuracies = [];
    +0041 for i=1:length(experiment.results)
    +0042     accuracies(i) = experiment.results{i}.getAccuracy();
    +0043 end
    +0044 
    +0045 accuracies'
    +0046 fprintf('mean acc = %.2f\n',mean(accuracies));
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    + + \ No newline at end of file diff --git a/doc/exampleERRPSSVEPDemo.m b/doc/exampleERRPSSVEPDemo.m new file mode 100644 index 0000000..4bd172f --- /dev/null +++ b/doc/exampleERRPSSVEPDemo.m @@ -0,0 +1,46 @@ +% d2 = designfilt('bandpassiir', 'SampleRate', 256, 'FilterOrder', 8 ,'HalfPowerFrequency1', 1, 'HalfPowerFrequency2', 10,'DesignMethod', 'butter'); + +sess = eegtoolkit.util.Session; +sess.loadSubjectSession(8,5,2); + +[z,p,k]=butter(3,[1,10]/64); +[s,g]=zp2sos(z,p,k); +Hd = dfilt.df2sos(s,g); +df = eegtoolkit.preprocessing.DigitalFilter; % +df.filt = Hd; + +ss = eegtoolkit.preprocessing.SampleSelection; +ss.channels = [1:14]; +ss.sampleRange = [1:6:200]; + +extr = {}; +for i=1:3 + extr{i} = eegtoolkit.featextraction.PWelch; + extr{i}.channel = 1; +end + +aggr = eegtoolkit.aggregation.ChannelConcat; + +classif = eegtoolkit.classification.LIBSVM; +classif.kernel = classif.KERNEL_RBF; +classif.gamma = 1/9; +classif.cost = 1; + +%Setup experiment +experiment = eegtoolkit.experiment.Experimenter; +experiment.session = sess; +experiment.preprocessing = {df,ss}; +experiment.featextraction = extr; +experiment.aggregator = aggr; +experiment.classification = classif; +experiment.evalMethod = experiment.EVAL_METHOD_XFOLD_CV; + +experiment.run(10); + +accuracies = []; +for i=1:length(experiment.results) + accuracies(i) = experiment.results{i}.getAccuracy(); +end + +accuracies' +fprintf('mean acc = %.2f\n',mean(accuracies)); \ No newline at end of file diff --git a/doc/exampleEarlyFusion.html b/doc/exampleEarlyFusion.html index 2ac0e86..5e0bcb4 100644 --- a/doc/exampleEarlyFusion.html +++ b/doc/exampleEarlyFusion.html @@ -118,6 +118,6 @@

    SOURCE CODE ^%get the configuration used (for reporting) 0064 experiment.getExperimentInfo 0065 experiment.getTime -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/exampleEpoc.html b/doc/exampleEpoc.html index de952b2..2b52e20 100644 --- a/doc/exampleEpoc.html +++ b/doc/exampleEpoc.html @@ -101,6 +101,6 @@

    SOURCE CODE ^%get the configuration used (for reporting) 0052 % experiment.getExperimentInfo 0053 % experiment.getTime -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/exampleITCCA.html b/doc/exampleITCCA.html index 8433f34..f2cd1fd 100644 --- a/doc/exampleITCCA.html +++ b/doc/exampleITCCA.html @@ -85,6 +85,6 @@

    SOURCE CODE ^end 0042 end -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/exampleL1MCCA.html b/doc/exampleL1MCCA.html index 511922c..ba0115b 100644 --- a/doc/exampleL1MCCA.html +++ b/doc/exampleL1MCCA.html @@ -84,6 +84,6 @@

    SOURCE CODE ^%mean accuracy for all subjects 0041 fprintf('mean acc = %.2f\n', mean(accuracies)); -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/exampleLSL.html b/doc/exampleLSL.html index d086b38..df7ea66 100644 --- a/doc/exampleLSL.html +++ b/doc/exampleLSL.html @@ -104,6 +104,6 @@

    SOURCE CODE ^%Run the recognition task. The task runs indefinetely until is specifically 0059 %interrupted 0060 lsl.runSSVEP(eventCode); -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/exampleLateFusion.html b/doc/exampleLateFusion.html index 19913ed..043b18a 100644 --- a/doc/exampleLateFusion.html +++ b/doc/exampleLateFusion.html @@ -121,6 +121,6 @@

    SOURCE CODE ^%get the configuration used (for reporting) 0067 experiment.getExperimentInfo 0068 experiment.getTime -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/exampleMotorPWelch.html b/doc/exampleMotorPWelch.html index a690fd6..00086cc 100644 --- a/doc/exampleMotorPWelch.html +++ b/doc/exampleMotorPWelch.html @@ -78,6 +78,6 @@

    SOURCE CODE ^ -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/exampleOptimal.html b/doc/exampleOptimal.html index 5d10b31..b895dfb 100644 --- a/doc/exampleOptimal.html +++ b/doc/exampleOptimal.html @@ -102,6 +102,6 @@

    SOURCE CODE ^%get the configuration used (for reporting) 0054 experiment.getExperimentInfo 0055 experiment.getTime -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/exampleSMFA.html b/doc/exampleSMFA.html index 8e07a8b..860897a 100644 --- a/doc/exampleSMFA.html +++ b/doc/exampleSMFA.html @@ -158,6 +158,6 @@

    SOURCE CODE ^end 0115 fprintf('mean acc for all subjects %.2f\n',mean(subaccuracies)); -
    Generated on Fri 25-Nov-2016 14:50:34 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:22 by m2html © 2005
    \ No newline at end of file diff --git a/doc/graph.dot b/doc/graph.dot index c7af74f..d92e500 100644 --- a/doc/graph.dot +++ b/doc/graph.dot @@ -6,6 +6,7 @@ digraph m2html { exampleDefault [URL="exampleDefault.html"]; exampleEPOCCCASVM [URL="exampleEPOCCCASVM.html"]; exampleERRP [URL="exampleERRP.html"]; + exampleERRPSSVEPDemo [URL="exampleERRPSSVEPDemo.html"]; exampleEarlyFusion [URL="exampleEarlyFusion.html"]; exampleEpoc [URL="exampleEpoc.html"]; exampleITCCA [URL="exampleITCCA.html"]; diff --git a/doc/graph.html b/doc/graph.html index ba4db20..c7461e9 100644 --- a/doc/graph.html +++ b/doc/graph.html @@ -24,18 +24,19 @@

    Dependency Graph for .

    - - - - - - - - - + + + + + + + + + + -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:21 by m2html © 2005
    \ No newline at end of file diff --git a/doc/graph.map b/doc/graph.map index c98355c..4d340f9 100644 --- a/doc/graph.map +++ b/doc/graph.map @@ -3,12 +3,13 @@ - - - - - - - - - + + + + + + + + + + diff --git a/doc/graph.png b/doc/graph.png index d3341107f75ca7de5ccb0039960c9d5010b22d02..4aebd66c1ec5364e1e1a7283dfb7a058226aa7c1 100644 GIT binary patch literal 49050 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

    jPj$e&U;Toh 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≩rKy$Rnf%o?6FHsgin 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 literal 45456 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%0Ajk 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 diff --git a/doc/index.html b/doc/index.html index 095abe2..6a2bf0a 100644 --- a/doc/index.html +++ b/doc/index.html @@ -19,7 +19,7 @@

    Index for .

    Matlab files in this directory:

    -
     exampleCSP
     exampleCombiCCA
     exampleDefaultLoad the data. Call this once outside of the script so you dont have to
     exampleEPOCCCASVMLoad the data. Call this once outside of the script so you dont have to
     exampleERRPd2 = designfilt('bandpassiir', 'SampleRate', 256, 'FilterOrder', 8 ,'HalfPowerFrequency1', 1, 'HalfPowerFrequency2', 10,'DesignMethod', 'butter');
     exampleEarlyFusionLeave one subject out testing
     exampleEpocLoad the data. Call this once outside of the script so you dont have to
     exampleITCCA
     exampleL1MCCA
     exampleLSLAdd dependencies to the Matlab path, LibLSL is required for this example
     exampleLateFusionLeave one subject out testing
     exampleMotorPWelch
     exampleOptimalLoad the data. Call this once outside of the script so you dont have to
     exampleSMFA
    + exampleCSP  exampleCombiCCA  exampleDefaultLoad the data. Call this once outside of the script so you dont have to  exampleEPOCCCASVMLoad the data. Call this once outside of the script so you dont have to  exampleERRPd2 = designfilt('bandpassiir', 'SampleRate', 256, 'FilterOrder', 8 ,'HalfPowerFrequency1', 1, 'HalfPowerFrequency2', 10,'DesignMethod', 'butter');  exampleERRPSSVEPDemod2 = designfilt('bandpassiir', 'SampleRate', 256, 'FilterOrder', 8 ,'HalfPowerFrequency1', 1, 'HalfPowerFrequency2', 10,'DesignMethod', 'butter');  exampleEarlyFusionLeave one subject out testing  exampleEpocLoad the data. Call this once outside of the script so you dont have to  exampleITCCA  exampleL1MCCA  exampleLSLAdd dependencies to the Matlab path, LibLSL is required for this example  exampleLateFusionLeave one subject out testing  exampleMotorPWelch  exampleOptimalLoad the data. Call this once outside of the script so you dont have to  exampleSMFA

    Subsequent directories:

    @@ -29,6 +29,6 @@

    Dependency Graph

    -
    Generated on Fri 25-Nov-2016 14:50:32 by m2html © 2005
    +
    Generated on Fri 25-Nov-2016 17:12:20 by m2html © 2005
    \ No newline at end of file