如何从MATLAB中的EEGLAB gui中的各种ICA组件中提取特定的独立组件?

时间:2017-02-27 05:14:41

标签: matlab eeglab

我目前正在做一个关于BCI运动图像数据集的项目。我的兴趣是通过ICA方法提取必要的组件。我目前正在使用EEGLAB。您能否帮我解决一下如何从GUI中将独立组件变量提取到MATLAB的工作区?

2 个答案:

答案 0 :(得分:1)

在eeglab上的数据集上运行ICA后,ICA权重保存在icaweights结构中的EEG矩阵中(当您在eeglab中加载数据时,可以在工作区中看到EEG结构),为了将icaweights转换为您在plot>Component Activations中看到的信号,假设这是您想要提取的信号,请执行以下操作:

  1. 首先,您需要加载数据file>load existing dataset
  2. 选择要提取的组件并将其另存为矢量。作为一个例子,我将选择组件5和9:

    comp_idx = [5 9]; %id of channels we extract
    
  3. 将频道数据(此处标记为Y)转换为ICA激活(Y_ICA),如下所示:

    Y = EEG.data;   % set channel data to matrix Y
    ica_weights = EEG.icaweights; % copy icaweights matrix
    Y_ICA = ica_weights*Y; % Component Activations
    
  4. Y_ICA现在包含所有组件激活,使用Y_ICA(comp_idx,:)仅提取您需要的组件,您可以对这个新矩阵进行操作,例如总结两个组件和绘图:

    %% Mix components and plot
    figure;
    S = sum( Y_ICA(comp_idx,:) );
    plot(EEG.times, S, 'r')    % EEG.times contains the time data
    title('Mix of all Channels')
    
  5. 或单独绘制每个组件:

    %% Plot each component
    figure;
    plot( EEG.times, Y_ICA(comp_idx(1),:))
    hold on
    plot( EEG.times, Y_ICA(comp_idx(2),:))
    
  6. A Note :如果你的数据是由纪元组成的,那么EEG.data矩阵将是一个三维矩阵,第三维是纪元集,所以你必须为每个纪元做上述程序,即Y = EEG.data(:,:,epoch_i)并迭代epoch_i = 1:size(EEG.data,3)

答案 1 :(得分:0)

我不确定ReZzT的答案是否完全正确。

查看eeg_getdatact.m文件

edit eeg_getdatact

可以看出,组件激活是通过附加矩阵乘法(使用icasphere)来计算的。看一下179-180行:

data = eeg_getdatact( EEG ); 
data = (EEG.icaweights(opt.component,:)*EEG.icasphere)*data(EEG.icachansind,:);

其中的最后一行简化为:

data = (EEG.icaweights*EEG.icasphere)*eegdata;