1

我使用 MATLAB R2011b 和EEGLab 13.4.3b加载了一个 Biosemi .bdf文件(EEG 记录),其中包括几个虚假触发器。触发器的位置存储在header.BDF.Trigger.POS,触发器类型在header.BDF.Trigger.TYP

加载文件后:

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

header.BDF.Trigger.POS我对和header.BDF.Trigger.TYP向量进行了转换并替换了它们。

注意:这些转换不应该产生影响,因为即使我只加载 bdf 文件然后尝试将其保存回来,我也会得到完全相同的错误。

这是header(用 提取的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]

我尝试使用 EEGLab 函数保存转换后的文件 ( header) 无济于事。我知道如何使用 GUI 在 EEGLab 中保存 bdf 文件。但是,使用 GUI 不允许进行我需要的转换。

为了保存我尝试使用的文件pop_writeeeg()swrite()但它们都不起作用。

我使用了以下命令:

  1. 首先采取:

    `pop_writeeeg(header);`
    

    回报:

    Reference to non-existent field 'trials'.  
    Error in pop_writeeeg (line 38)
        if EEG.trials > 1
    
  2. 然后我尝试了:

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

    哪个返回:

    Reference to non-existent field 'chanlocs'.
    Error in pop_writeeeg (line 66)
    if ~isempty(EEG.chanlocs)
    
  3. 我的下一个想法是使用swrite()以下方式:

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

    哪个返回:

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

我很确定我在这里遗漏了一些简单的东西。

有谁知道如何将转换后的 EEG (bdf) 数据保存回 bdf 文件?

4

1 回答 1

1

EEGLAB 工具箱不包含您需要的功能;你想要Biosig 工具箱(它是 EEGLAB 的插件)。Biosig 函数的范例是不寻常的。它使用带有文件句柄的数据结构。因此,要打开文件并保存修改后的数据,您需要执行以下步骤:

1) 打开 BDF 文件并读入数据。此步骤检索文件元数据并创建元数据的结构(如问题所示)。

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

2) 即使转换仅涉及元数据,您也必须使用原始数据和元数据重新写入文件。您的数据必须位于大小为 Rows x Number_of_Channels 的变量中。根据 .bdf 文件的功能,您可能需要添加一个表示状态通道的附加列。

% 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)打开文件写入警告:这将擦除磁盘上的文件

meta_data = sopen(meta_data,'w');

4) 将数据保存到文件中:

swrite(meta_data,transformed_data);

5)关闭文件:

sclose(meta_data);

我使用此处提供的测试文件对此进行了测试。BDF 格式很旧并且有很多选项,因此在此脚本中有一个额外的步骤来填写“状态”通道(通道 17),以使其与 Biosig 功能一起使用。

[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

问题中链接的 .bdf 文件也需要“丢失频道”的破解。

于 2016-04-11T20:18:35.697 回答