代码:使用 eeglab 的函数自己做独立成分分析 ICA 去除噪声得到干净信号

步骤:

1. 准备脑电数据
2. 执行 ica
3. 获取 ica 分量是噪声的概率
4. 根据设定的阈值得到需要去除的 ica 通道
5. 去除噪声得到干净信号

%% ica
%use import to creat eeglab eeg
%使用下边的函数得到一个符合 eeglab 中的脑电结构的结构体
EEG=pop_importdata('setname','test','data',eegdata,'srate',1200,'chanlocs','ch16.locs');
% do ica
%使用函数执行 ica 得到独立分量
EEG=pop_runica(EEG,'icatype','runica');
%make noise label
%通过训练得到分量属于脑电和六类噪声的概率
EEG=iclabel(EEG);
noiselabel=round(EEG.etc.ic_classification.ICLabel.classifications(:,:)*100)
%flag noise to reject
%设定噪声概率的阈值用来之后进行噪声去除
noisethreshold = [0 0.4;0 0; 0 0; 0 0; 0 0; 0 0; 0 0];
EEG = pop_icflag(EEG, noisethreshold);
%get clean data
%得到含有干净信号的结构体
OUTEEG=pop_subcomp(EEG);

几点说明:

  1. eeglab 操作是很方便,很感谢开源免费,但是对于需要精细处理的话,还是会有很多的重复操作,不如自己取代码过来用,所以花了一天的时间找到了这些函数
  2. 可能我的数据确实还可以吧,设定低于 0.2 概率是脑电的分量去除,去除一个分量后的信号,和不去除的信号也基本一样
  3. 阈值的设定是针对 7 个标签,每个标签设定一个阈值区间,在阈值区间的进行标记在后边进行去除
  4. 对分量做标签是,有七个标签,分别是脑电,眼电,肌电,心电,线性噪声,通道噪声,其他,所以得到的 label 数组是 N x 7,比如下图:第一列第一行显示的是第一个独立分量是脑电的概率是 90%,第一行最后一个数字 6 说明是其他噪声的概率 为6%,这样看的话,倒数第四个独立分量是脑电的概率小,是噪声的概率大,需要去除

代码:使用 eeglab 的函数自己做独立成分分析 ICA 去除噪声得到干净信号_第1张图片

  1. OUTEEG是最后得到的去除 ica 噪声之后的 eeglab 结构的脑电数据。这里的函数是我在工具箱的函数中找的,具体的函数参数设置,直接打开函数查看就好,有兴趣并且需要更加精细处理的就自己看看吧

你可能感兴趣的:(脑机接口)