我使用MATLAB R2011b和EEGLab 13.4.3b加载包含多个虚假触发器的Biosemi .bdf文件(EEG记录)。触发器的位置存储在header.BDF.Trigger.POS
中,触发器类型位于header.BDF.Trigger.TYP
。
使用
加载 the file 后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()
的文件,但都没有。
我使用了以下命令:
首先:
`pop_writeeeg(header);`
返回:
Reference to non-existent field 'trials'.
Error in pop_writeeeg (line 38)
if EEG.trials > 1
然后我尝试了:
`pop_writeeeg(header, '05-new', 'TYPE', 'BDF');`
返回了:
Reference to non-existent field 'chanlocs'.
Error in pop_writeeeg (line 66)
if ~isempty(EEG.chanlocs)
我的下一步是以下列方式使用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文件?
答案 0 :(得分:1)
EEGLAB工具箱不包含您需要的功能;你想要Biosig toolbox(它是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);
我使用可用的测试文件here对此进行了测试。 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文件也需要“缺少频道”的黑客攻击。