SSVEP数据集的预处理部分
1. 数据集
2. 读懂数据格式
1. Benchmark dataset
file_name =['S1.mat']
load(file_name)
# 可以从变量区看到data是一个4D的数据
# 查看数据格式 size(data),可以发现是一个 64 * 1500 * 40 * 6
[num_channel, num_sample, num_trial, num_block] = size(data)
# 以上分别存储了通道数,采样点数,trial数和block数的4个变量
# 对于SSVEP信号来说的话,我们只需要选取枕区部分的通道进行分析就够了,这是SSVEP的基础知识,本文不展开解释了,在这里我们选取枕区的9个通道
eeg=data([48 54:58 61:63], :, :, :)
# 接下来更新一下变量
[num_channel,~,~,~] = size(eeg)
# 接下来截取每一个trial的数据长度,为了提高ITR,不会用一整段的SSVEP信号
# 根据数据集的说明文档,我们做如下设置:
# cue : 0.5 , delay_time : 0.14 , timewindow = 1
# 提示时间 0.5秒
# 视觉延迟0.14秒(参考陈小刚博士的博士论文或者他的期刊论文)
# 时间窗设置1秒
eeg_temp = eeg(:,(cue_time+delay_time)*250 :(cue_time+delay_time+timewindow)*250,:,:)
# 接下来更新一下变量
[num_channel, num_sample, num_trial, num_block] = size(eeg_temp)
# 滤波
# Range : [8,90]
Wp = [8/fs*2, 90/fs*2];
Ws = [4/fs*2, 100/fs*2];
[N, Wn]=cheb1ord(Wp, Ws, 3, 60);
[b, a] = cheby1(N, 0.5, Wn);
for i = 1:num_trial
for j =1:num_channel
for k =1:num_block
eeg(j,:,i,k) = filtfilt(b,a,eeg_temp(j,:,i,k))
end
end
end
# 完成到这里,就可以用eeg的信号导入算法进行预测了
2. BETA dataset
BETA的预处理手法和Benchmark大同小异,不同的是BETA是一个结构体,我们要从结构体获取脑电信号和对应的标签。
- 导入数据后看到如下结构体:
显然,EEG就是一个4维的脑电信号,跟Benchmark一摸一样,不一样的是在这个数据库里,标签是在suppl_info给出,我们把freqs单独拿出来就ok。
- 开始操作
# 导入数据
load('S1.mat')
# 先存储label信息
label = data.suppl_info.freqs
# 再处理脑电信号
eeg_temp = data.EEG
eeg_temp = eeg_temp([48 54:58 61:63], :, :, :)
# 可以先滤波再切数据,也可以先切数据再滤波,看个人需求
# 切数据
eeg_temp1 = eeg_temp (:,(cue_time+delay_time)*250 :(cue_time+delay_time+timewindow)*250,:,:)
# 接下来更新一下变量
[num_channel, num_sample, num_trial, num_block] = size(eeg_temp1)
# 滤波
# Range : [8,90]
Wp = [8/fs*2, 90/fs*2];
Ws = [4/fs*2, 100/fs*2];
[N, Wn]=cheb1ord(Wp, Ws, 3, 60);
[b, a] = cheby1(N, 0.5, Wn);
for i = 1:num_trial
for j =1:num_channel
for k =1:num_block
eeg(j,:,i,k) = filtfilt(b,a,eeg_temp(j,:,i,k))
end
end
end