2016-04-25 1 views
1

Ich muss einige EEG-Daten analysieren und ich versuche, die Vorverarbeitungsprozedur zu automatisieren.For-Schleife für verschiedene Datensätze und Bedingungen für EEGLAB

Ich habe 40 Teilnehmer. Jeder Teilnehmer hat 4 verschiedene Dateien für 4 Bedingungen.

So werden die Dateien gespeichert als

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

bis zu 40-4

Die Dateien sind von BioSemi (.bdf)

Ich habe die Vorbearbeitung Verfahren automatisieren konnte , aber jedes Mal, wenn ich eine andere Datei auswählen muss, führe das Skript aus und speichere es.

Ich möchte eine for-Schleife ausführen, die alles selbst erledigt (1-1 nehmen, die Vorverarbeitung ausführen, speichern, 1-2 ... usw. nehmen).

Im Anschluss gebe ich an, was ich bis jetzt habe.

Ich habe den ganzen Tag versucht, eine for-Schleife zu schreiben, aber es funktioniert einfach nicht.

Ich würde wirklich jede Hilfe zu schätzen wissen.

Dies ist das aktuelle Pre-Processing-Skript:


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 

Antwort

1

Hier ist, wie Sie die Dateinamen in einer Schleife zugreifen können, so dass Sie Ihren MATLAB-Skript ausgeführt werden können. Am einfachsten ist es, wenn Sie Ihre .bdf-Dateien in einen Ordner legen. Dann schreiben Sie eine Funktion, die die Funktionalität hüllt Sie wollen, wie folgt aus:

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 

Einige Kommentare:

  • Ich versuche Plattform zu sein Agnostiker mit der Verwendung von filesep() so dies funktionieren sollte auf Linux/Mac/Windows. Wenn Sie den Code im selben Verzeichnis wie die Datendateien ausführen, können Sie sicherlich vereinfachen diese

  • Stellen Sie sicher, geschweiften Klammern {} verwenden, wenn subject dereferencing. Wenn Sie den Standard Matlab Array-Referenz mit subject(1) verwenden, dann erhalten Sie einen Zelle-Array die Dateinamen Zeichenfolge enthält, anstatt nur die Ebene Dateinamen Zeichenfolge

  • Der dir() Befehl in MATLAB funktioniert genauso wie dir in Fenstern oder ls in Linux, und Sie Platzhalter verwenden, können angepasst Listen von Dateien zu erhalten, wie dir('1-*.bdf') nur eine Liste der betroffenen Person 1 der Dateien, die Sie

+0

Hallo @gariepy, danke für Ihre Antwort so viel zu bekommen, ich schätze wirklich wirklich. Leider kann ich es immer noch nicht zur Arbeit bringen. Es tut mir leid, aber dies ist mein erster Tag, an dem ich jemals Matlab programmiert oder benutzt habe. Muss ich den gesamten Pfadnamen wie 'D:/5 - EEG/EEG Recordings' eingeben, wo immer' Pfadname' oder 'Vollständiger_Pfadname' steht? Um es funktionieren zu lassen, sollte ich gehen: 'new-> function' Kopieren Sie den gesamten Code und fügen Sie ihn ein.Speichern Sie die Funktion in einem beliebigen Ordner 'SethPath-> AddFolder'. Ich erhalte die Fehlermeldung: "Die ausgewählte Sitzung kann nicht ausgewertet werden, da sie eine ungültige Anweisung enthält" – Glu

+0

Ja, speichere den Code in einer Datei, in diesem Fall rufe 'run_script_with_loop.m', weil MATLAB den folgenden Namen haben möchte 'function', um den Dateinamen zu finden. Stellen Sie sicher, dass sich der Ordner, in dem Sie die Datei speichern, in Ihrem Matlab-Pfad befindet. Dann sollten Sie '% run_script_with_loop ('D: \ MATLAB \ eeglab_current \ data_folder')' 'eingeben können, wobei' data_folder' der vollständige Name ist, an dem sich Ihre .'.bdf' Dateien befinden. – gariepy

+0

Auch sollte das '...' darstellen, wo der ganze Code von Ihrem Beispiel gehen sollte. – gariepy