我目前正在做一个关于BCI运动图像数据集的项目。我的兴趣是通过ICA方法提取必要的组件。我目前正在使用EEGLAB。您能否帮我解决一下如何从GUI中将独立组件变量提取到MATLAB的工作区?
答案 0 :(得分:1)
在eeglab上的数据集上运行ICA后,ICA权重保存在icaweights
结构中的EEG
矩阵中(当您在eeglab中加载数据时,可以在工作区中看到EEG
结构),为了将icaweights
转换为您在plot>Component Activations
中看到的信号,假设这是您想要提取的信号,请执行以下操作:
file>load existing dataset
。选择要提取的组件并将其另存为矢量。作为一个例子,我将选择组件5和9:
comp_idx = [5 9]; %id of channels we extract
将频道数据(此处标记为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
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')
或单独绘制每个组件:
%% Plot each component
figure;
plot( EEG.times, Y_ICA(comp_idx(1),:))
hold on
plot( EEG.times, Y_ICA(comp_idx(2),:))
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;