--- a +++ b/getData.m @@ -0,0 +1,108 @@ +% An example to get the BCI competition IV datasets 2a, 2b is the same +% Data from: http://www.bbci.de/competition/iv/ +% using open-source toolbox Biosig on MATLAB: http://biosig.sourceforge.net/ +% Just an example, you should change as you need. + +function data = getData(subject_index) + +subject_index = 6; % 1-9 + +%% T data +session_type = 'T'; % T and E +dir_1 = ['D:\MI\BCICIV_2a_gdf\A0',num2str(subject_index),session_type,'.gdf']; % set your path of the downloaded data +[s, HDR] = sload(dir_1); + +% Label +% label = HDR.Classlabel; +labeldir_1 = ['D:\MI\true_labels\A0',num2str(subject_index),session_type,'.mat']; +load(labeldir_1); +label_1 = classlabel; + +% construct sample - data Section 1000*22*288 +Pos = HDR.EVENT.POS; % use POS to get trials +% Dur = HDR.EVENT.DUR; +Typ = HDR.EVENT.TYP; + +k = 0; +data_1 = zeros(1000,22,288); +for j = 1:length(Typ) + if Typ(j) == 768 + k = k+1; + data_1(:,:,k) = s((Pos(j)+500):(Pos(j)+1499),1:22); + end +end + +% wipe off NaN +data_1(isnan(data_1)) = 0; + + +% E data +session_type = 'E'; +dir_2 = ['D:\Lab\MI\BCICIV_2a_gdf\A0',num2str(subject_index),session_type,'.gdf']; +% dir = 'D:\Lab\MI\BCICIV_2a_gdf\A01E.gdf'; +[s, HDR] = sload(dir_2); + +% Label +% label = HDR.Classlabel; +labeldir_2 = ['D:\Lab\MI\true_labels\A0',num2str(subject_index),session_type,'.mat']; +load(labeldir_2); +label_2 = classlabel; + +% construct sample - data Section 1000*22*288 +Pos = HDR.EVENT.POS; +% Dur = HDR.EVENT.DUR; +Typ = HDR.EVENT.TYP; + +k = 0; +data_2 = zeros(1000,22,288); +for j = 1:length(Typ) + if Typ(j) == 768 + k = k+1; + data_2(:,:,k) = s((Pos(j)+500):(Pos(j)+1499),1:22); + end +end + +% wipe off NaN +data_2(isnan(data_2)) = 0; + +%% preprocessing +% option - band-pass filter +fc = 250; % sampling rate +Wl = 4; Wh = 40; % pass band +Wn = [Wl*2 Wh*2]/fc; +[b,a]=cheby2(6,60,Wn); + +% a better filter for 4-40 Hz band-pass +% fc = 250; +% Wl = 4; Wh = 40; +% Wn = [Wl*2 Wh*2]/fc; +% [b,a]=cheby2(8,20,Wn); + +for j = 1:288 + data_1(:,:,j) = filtfilt(b,a,data_1(:,:,j)); + data_2(:,:,j) = filtfilt(b,a,data_2(:,:,j)); +end + +% option - a simple standardization +%{ +eeg_mean = mean(data,3); +eeg_std = std(data,1,3); +fb_data = (data-eeg_mean)./eeg_std; +%} + +%% Save the data to a mat file +data = data_1; +label = label_1; +% label = t_label + 1; +saveDir = ['D:\MI\standard_2a_data\A0',num2str(subject_index),'T.mat']; +save(saveDir,'data','label'); + +data = data_2; +label = label_2; +saveDir = ['D:\MI\standard_2a_data\A0',num2str(subject_index),'E.mat']; +save(saveDir,'data','label'); + +end + + +