You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EDF数据集解析为指定.MAT结构时cnt与mrk字段对应数据定位

EDF数据集与目标MAT结构字段对应关系

cnt字段(连续EEG信号)

EDF加载到MNE的raw对象后,连续脑电信号直接通过raw.get_data()方法提取即可。

  • 该方法默认返回数组维度为[通道数 × 时间点],按照要求做一次转置就能得到[时间点 × 通道数]的目标格式,转成int16类型后和参考样例结构完全匹配。

对应实现代码:

# 提取连续EEG信号,转置匹配cnt字段维度要求
cnt = raw.get_data().T.astype("int16")
# 维度校验:输出格式应为(总采样点数, 通道数)
print(cnt.shape)

mrk字段(事件标记结构体)

EDF中的事件标记全部存储在raw.annotations属性中,直接提取即可得到mrk需要的两个核心变量:

  • event_onsets:事件对应的采样点索引。先从raw.annotations.onset拿到事件的秒级时间戳,乘以采样率后取整,转成int32类型、调整形状为(1, 事件总数)即可,和参考数据格式一致。
  • event_codes:事件对应的类别标签。从raw.annotations.description拿到每个事件的文本描述后,按照定义的类别映射规则转成数值(比如left对应1、right对应-1),转成int16类型、调整形状和event_onsets对齐即可。

对应实现代码:

# 提取事件起始采样点
event_onsets = (raw.annotations.onset * sample_rate).round().astype("int32").reshape(1, -1)
# 映射事件编码,可根据实际EDF里的事件描述调整映射规则
event_codes = np.array(
    [1 if desc == "left" else -1 for desc in raw.annotations.description],
    dtype="int16"
).reshape(1, -1)

# 组装为Matlab兼容的mrk结构体,保存时用scipy.io.savemat即可正常识别
mrk = np.array([[(event_onsets, event_codes)]], dtype=[("pos", "O"), ("y", "O")])

注意:如果EDF文件事件没有写在标准Annotations段,而是存在单独的标记通道,先用mne.find_events(raw)针对标记通道检测事件,返回结果的第一列就是采样点索引、第三列就是事件编码,后续处理逻辑和上面完全一致。

内容的提问来源于stack exchange,提问作者Iuri Sampaio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:51:31