2016-04-25 65 views
1

いくつかのEEGデータを分析する必要があり、前処理手順を自動化しようとしています。EEGLABの異なるデータセットと条件のループについて

私は40人の参加者を持っています。すべての参加者は、4つの条件に対して4つの異なるファイルを持っています。

1-1 
1-2 
1-3 
1-4 
2-1 
2-2 
2-3 
2-4 
... 

40-4までのファイルがBioSemi(な.bdf)からあるように、ファイルが保存されている

Iは、前処理手順を自動化することができましたしかし、別のファイルを選ぶ必要があるたびに、スクリプトを実行して保存してください。

私はそれだけで(1-1を取る、前処理を実行する、保存する、1-2を取る...など)forループを実行したいと思います。

私がこれまでに得たものを貼り付けています。

私は一日中ループを書くことを試みてきましたが、うまくいきません。

本当に助けていただければ幸いです。


subject = '1-1.bdf' 

%Open EEGLAB and inizialize several EEGLAB variables (listed in the output 
%function 
[ALLEEG EEG CURRENTSET ALLCOM] = eeglab; 

%Load a file 
%EEG=pop_loadset; % pop up window to input arguments 

EEG = pop_biosig(subject) %Reads in the dataset frin a BIOSEMI file 

% Stores the dataset into EEGLAB 
[ALLEEG EEG CURRENTSET ] = eeg_store(ALLEEG, EEG); 

%Change sampling rate to 512 
EEG = eeg_checkset(EEG);  
EEG = pop_resample(EEG, 512);  
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, CURRENTSET); %save it as a new dataset 

% Edit Channel Location 
EEG = eeg_checkset(EEG); 
EEG=pop_chanedit(EEG, 'lookup','D:\\Matlab\\eeglab_current\\eeglab13_5_4b\\plugins\\dipfit2.3\\standard_BESA\\standard-10-5-cap385.elp'); 
% Store the dataset into EEGLAB 
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 2,'overwrite','on','gui','off'); 

% Add some comments 
EEG.comments = pop_comments(EEG.comments,'','Sampling rate was changed to 512.',1); 
% You can see the comments stored with the dataset either by typing >> EEG.comments or selecting the menu option Edit->About this dataset. 

%Select Data. Remove EXG5:EXG8 
EEG = eeg_checkset(EEG); 
EEG = pop_select(EEG,'nochannel',{'EXG5' 'EXG6' 'EXG7' 'EXG8'}); 
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 2,'overwrite','on','gui','off'); 


%HighPassFilter 0.5 
EEG = eeg_checkset(EEG); 
EEG = pop_eegfilt(EEG, 0.5, 0, [], [0], 0, 0, 'fir1', 0); 
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 2,'overwrite','on','gui','off'); 

%LowPassFilter 50 
EEG = eeg_checkset(EEG); 
EEG = pop_eegfilt(EEG, 0, 50, [], [0], 0, 0, 'fir1', 0); 
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 2,'overwrite','on','gui','off'); 


%ReReference to 35 36 (EXG3. EXG4) 
EEG = eeg_checkset(EEG); 
EEG = pop_reref(EEG, [35 36]); 
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 2,'overwrite','on','gui','off'); 

% Reject Continuous By Eye 
EEG = eeg_checkset(EEG); 
pop_eegplot(EEG, 1, 0, 1); 

eeglab redraw % Update the EEGLAB window to view changes 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

%Automatic Channel Rejection 
EEG = eeg_checkset(EEG); 
EEG = pop_rejchan(EEG, 'elec',[1:34] ,'threshold',5,'norm','on','measure','prob'); 
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 2,'overwrite','on','gui','off'); 

eeglab redraw % Update the EEGLAB window to view changes 

答えて

1

ここでは、あなたのMATLABスクリプトを実行できるようにあなたは、ループ内でのファイル名にアクセスすることができます方法は次のとおりです。

これは、現在の前処理スクリプトです。一番簡単なことは、自分自身で.bdfファイルをフォルダに入れることです。

function run_script_with_loop(pathname) 

file_struct_list = dir([pathname filesep() '*.bdf']); %% get list of .bdf files in the pathname specified 

filename_list = {file_struct_list.name}; %% extract the filenames into a cellarray 
for subject = filename_list %% this iterates over the elements of the cell array, one-by-one, setting the `filename` variable like a loop variable 
    [ALLEEG EEG CURRENTSET ALLCOM] = eeglab; 
    full_pathname = [pathname filesep() subject{1}]; 
    EEG = pop_biosig(full_pathname); %% perform your processing 
    ... 
end 

いくつかのコメント:

  • 私は、これは動作するはずですので filesep()の使用と不可知論プラットフォームになるしようとしている。このように続いて、必要な機能をラップする関数を記述linux/mac/windowsにあります。あなたは、データファイルと同じディレクトリ内のコード を実行している場合、あなたは確かに この

  • subjectを逆参照するときに、中括弧{}を使用していることを確認し簡素化することができます。あなたはsubject(1)で標準のMATLAB配列リファレンスを使用する場合は、ファイル名の文字列を含むセル配列を取得します、代わりに単なるファイル名の文字列

  • のMATLABでdir()コマンドは、ちょうど窓でdir、またはlsのように動作しますLinuxでは、あなたは、唯一の主題1のデータファイル

+0

こんにちは@gariepyのリストを取得するにはdir('1-*.bdf')のように、ファイルのカスタマイズされたリストを取得するには、ワイルドカードを使用することができ、あなたの応答のためにあなたをとても感謝し、私は本当に感謝しています。残念ながら私はまだそれを動作させることはできません。申し訳ありませんが、これはプログラミングやMatlabを使用した初日です。 'pathname'または' full_pathname'と書かれているところで、 'D:/ EEG/EEG Recordings'のようにpath_name全体を入力する必要がありますか? これを動作させるには、 'new-> function'コードをすべてコピー&ペーストしてください。'SethPath-> AddFolder'フォルダに関数を保存します。 「無効な文が含まれているため、選択したセッションを評価できません」 – Glu

+0

はい、コードをファイルに保存します。この場合は、run_script_with_loop.mと呼びます。 'function'はファイル名にマッチします。ファイルを保存するフォルダがMATLABのパスにあることを確認してください。次に '%run_script_with_loop( 'D:\ MATLAB \ eeglab_current \ data_folder')'と打ち込むことができます。ここで、 'data_folder'は.bdfファイルがある場所のフルネームです。 – gariepy

+0

また、 '...'は、あなたの例のすべてのコードをどこに置くべきかを表すことを意図しています。 – gariepy

関連する問題