2016-04-09 4 views
1

Ich habe MATLAB R2011b und EEGLab 13.4.3b verwendet, um eine Biosemi-Datei (EEG-Aufzeichnung) zu laden, die mehrere falsche Auslöser enthält. Die Position der Trigger wird in header.BDF.Trigger.POS gespeichert und der Triggertyp ist in header.BDF.Trigger.TYP.Speichern einer transformierten .bdf-Datei

Nach the file mit dem Laden:

header = sopen('05-AM-200-Deci.bdf','r',[1:40],'OVERFLOWDETECTION:OFF'); 

gemacht I Transformationen header.BDF.Trigger.POS und header.BDF.Trigger.TYP Vektoren und ersetzt sie.

HINWEIS: Diese Transformationen sollten keinen Unterschied machen, denn auch wenn ich nur die bdf-Datei lade und versuche, sie zu speichern, bekomme ich genau die gleichen Fehler.

Hier ist die Struktur von header (extrahiert mit get()):

header = 

    FileName: '05-AM-200-Deci.bdf' 
     FILE: [1x1 struct] 
     TYPE: 'BDF' 
     ErrNum: [1025 0] 
     ErrMsg: '' 
    keycode: [1x34 double] 
      NS: 41 
    SampleRate: 1 
      T0: [2015 7 6 17 41 44] 
     Filter: [1x1 struct] 
     FLAG: [1x1 struct] 
     EVENT: [1x1 struct] 
    VERSION: -1 
    Patient: [1x1 struct] 
     PID: '05-AM-200' 
     RID: '05-AM-200' 
    HeadLen: 10752 
    reserved1: '24BIT          ' 
     NRec: 1207 
     Dur: 1 
      AS: [1x1 struct] 
     Label: {41x1 cell} 
    Transducer: {41x1 cell} 
    PhysDim: {41x1 cell} 
    PhysMin: [1x41 double] 
    PhysMax: [1x41 double] 
     DigMin: [1x41 double] 
     DigMax: [1x41 double] 
    PreFilt: [41x80 char] 
     GDFTYP: [1x41 double] 
     SPR: 1 
    THRESHOLD: [41x2 double] 
     Cal: [1x41 double] 
     Off: [1x41 double] 
     Calib: [41x40 double] 
     BDF: [1x1 struct] 
PhysDimCode: [41x1 double] 
     ELEC: [1x1 struct] 
    LeadIdCode: [41x1 double] 
    CHANTYP: '           ' 
InChanSelect: [40x1 double] 

Ich versuchte EEGLab Funktionen unter Verwendung der transformierten Datei (header) ohne Erfolg zu speichern. Ich weiß, wie man eine bdf-Datei in EEGLab unter Verwendung der GUI speichert. Die Verwendung von GUI erlaubt jedoch keine Transformation, die ich brauche.

Um die Datei zu speichern, habe ich versucht, pop_writeeeg() und swrite(), aber keiner von ihnen funktioniert.

habe ich die folgenden Befehle:

  1. erste Klappe:

    `pop_writeeeg(header);` 
    

    Returns:

    Reference to non-existent field 'trials'. 
    Error in pop_writeeeg (line 38) 
        if EEG.trials > 1 
    
  2. Dann habe ich versucht:

    `pop_writeeeg(header, '05-new', 'TYPE', 'BDF');` 
    

    Welche zurückgegeben:

    `swrite(header, '05-new');` 
    

    die zurückgegeben:

    Error SWRITE can not be applied, File 05-AM-200-Deci.bdf is not opened in WRITE mode 
    

Ich bin mir ziemlich sicher, dass

Reference to non-existent field 'chanlocs'. 
Error in pop_writeeeg (line 66) 
if ~isempty(EEG.chanlocs) 
  • Mein nächstes nehmen swrite() die folgende Art und Weise zu verwenden, war Mir fehlt hier etwas Einfaches.

    Kennt jemand, wie man umgewandelte EEG (bdf) Daten zurück zu einer bdf Datei speichert?

  • +0

    Bitte fügen Sie die [link] (ftp://sccn.ucsd.edu/pub/daily/) den EEGLAB-Versionen bei, damit Benutzer Ihr Problem beheben können und der Link zur .bdf-Datei, die Ihnen Probleme zusammen mit der Code, der die Transformation anwendet. Ohne diese Informationen ist es praktisch unmöglich, Ihnen zu helfen. – Oleg

    +0

    Sie können nicht nur die Kopfzeile speichern, sondern müssen die Daten einschließen. Tatsächlich sind die Syntaxen 'save (HDR, Daten)' oder 'srrite (HDR, Daten)' – Oleg

    +0

    Ich habe den Link zu EEGLab hinzugefügt und werde die bdf-Datei heute Abend hinzufügen. Ich nahm an, dass Daten Teil der Kopfzeile in bdf-Dateien sind. Ist das nicht der Fall? – epo3

    Antwort

    1

    Die EEGLAB-Toolbox enthält nicht die Funktionen, die Sie benötigen; Sie wollen die Biosig toolbox (es ist ein Plugin für EEGLAB). Das Paradigma der Biosig-Funktionen ist ungewöhnlich. Es verwendet eine Datenstruktur mit dem Dateihandle in der Struktur. Um eine Datei zu öffnen und Ihre geänderten Daten zu speichern, müssen Sie die folgenden Schritte ausführen:

    1) Öffnen Sie die BDF-Datei und lesen Sie die Daten ein.Dieser Schritt ruft Dateimetadaten ab und erstellt eine Struktur der Metadaten (wie in der Frage gezeigt).

    [raw_data,meta_data] = sload('05-AM-200-Deci.bdf',[1:40],'OVERFLOWDETECTION:OFF'); 
    

    2) Auch wenn die Transformationen nur Metadaten beinhalten, müssen Sie die Datei mit den Rohdaten & Metadaten neu schreiben. Ihre Daten müssen in einer Variablen mit der Größe Rows x Number_of_Channels enthalten sein. Abhängig von den Funktionen der .bdf-Datei müssen Sie möglicherweise eine zusätzliche Spalte hinzufügen, die den Statuskanal darstellt.

    % do the transforms here. If it does not affect the raw data, no need to change variables. 
    transformed_data = raw_data; % transformed data to be saved to a file 
    meta_data.fZ = zeros([1 meta_data.NS]); 
    transformed_data(:,meta_data.NS)=0; 
    

    3) Öffnen Sie die Datei zum Schreiben WARNUNG: DIESES

    meta_data = sopen(meta_data,'w'); 
    

    4) DIE AKTEN DISK ERASE werden Ihre Daten in die Datei speichern:

    swrite(meta_data,transformed_data); 
    

    5) Schließen Sie die Datei:

    sclose(meta_data); 
    

    Ich testete thi s unter Verwendung der verfügbaren Testdateien here. Das BDF-Format ist alt und hat viele Optionen, daher gibt es in diesem Skript einen zusätzlichen Schritt, um den "Status" -Kanal (Kanal 17) zu füllen, damit er mit den Biosig-Funktionen funktioniert.

    [s,hdr] = sload('Newtest17-2048.bdf');  % get the raw data from the file 
    hdr.fZ = zeros([1 hdr.NS]); s(:,hdr.NS)=0; % (create "missing" channel values) 
    hdr = sopen(hdr,'w');      % open the file for writing (ERASES FILE!) 
    swrite(hdr,s);        % write data to the file 
    sclose(hdr);        % close the file 
    

    Der Hack für den "fehlenden Kanal" wird auch für die in der Frage verknüpfte .bdf-Datei benötigt.

    +0

    Danke für den Hinweis, dass 'sclose()' verwendet werden sollte. Ich habe versucht, die bdf-Datei (Link in der Frage) sowohl in "myFileRef" als auch in "transformed_data" (1., 2. und 3.) zu laden. 4) zurückgegebener Fehler 'Warnung SOPEN: HDR.PhysDimCode des/der folgenden Kanals (e) ist (sind) nicht definiert: Fehler SOPEN (GDF/EDF/BDF) -W: PhysMin (41) passt nicht in header' aber es löschte die Datei. 5) Returned 'Undefined function' minus 'für Eingabeargumente vom Typ' struct '. Fehler in SWRITE (Linie 38) \t \t data = Daten - repmat (HDR.PhysMin (:)‘, Größe (Daten, 1), 1);' – epo3

    +0

    Das Beispiel Skript, das ich oben geben funktioniert für mich mit Ihrer Probe file, * if * Sie fügen den "mach it work" -Schritt ein, indem Sie einige Füllreihen für den zusätzlichen Kanal hinzufügen, wie im Beispiel. Ersetzen Sie den Namen der Testdatei durch Ihre Datei und verwenden Sie 41 statt 17 (extra Kanal) und sehen Sie, ob es für Sie funktioniert. Ich sehe immer noch den Fehler über PhysMin (41), aber die Daten werden in die Datei geschrieben. – mhopeng

    +0

    Ich habe genau das gemacht, was Sie gestern empfohlen haben und habe den Fehler bekommen. Ich glaube nicht, dass die Datei gespeichert wurde (wird aber heute Nacht überprüft). – epo3