CHB-MIT数据集下载与预处理全指南:从数据获取到EEG分析实战

1次阅读
没有评论

共计 2107 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

背景与痛点

CHB-MIT 数据集是癫痫检测研究中最常用的公开脑电数据集之一,包含来自波士顿儿童医院 22 名患者的长期 EEG 记录。但在实际使用中,研究者常遇到以下问题:

  • 下载困难:MIT 官网服务器在国外,国内下载速度常低于 100KB/s,且不支持断点续传
  • 格式复杂:EDF 文件需要特殊解析工具,临床标注信息分散在多个.txt 文件中
  • 数据异构:不同患者采样率不同(从 256Hz 到 2kHz),电极数量也存在差异

高效下载方案

多线程下载工具对比

  1. wget 基础版:虽然简单但速度慢

    wget -r -np -nH --cut-dirs=2 https://physionet.org/files/chbmit/1.0.0/

  2. aria2 加速版:支持 16 线程和断点续传

    aria2c -x 16 -s 16 -c https://physionet.org/files/chbmit/1.0.0/chb01.edf

Python 自动下载脚本

import requests
from tqdm import tqdm

BASE_URL = "https://physionet.org/files/chbmit/1.0.0/"

# 病例列表从 chb01 到 chb24(注意缺少 chb12)
patients = [f"chb{f'{i:02d}'}" for i in range(1,25) if i != 12] 

def download_file(url, save_path):
    try:
        with requests.get(url, stream=True) as r:
            r.raise_for_status()
            total_size = int(r.headers.get('content-length', 0))
            with open(save_path, 'wb') as f, tqdm(
                unit='B', unit_scale=True,
                total=total_size, desc=save_path
            ) as pbar:
                for chunk in r.iter_content(chunk_size=8192):
                    f.write(chunk)
                    pbar.update(len(chunk))
    except Exception as e:
        print(f"下载失败 {url}: {e}")
        # 可添加重试逻辑

# 下载所有 EDF 文件
for patient in patients:
    download_file(f"{BASE_URL}{patient}.edf", f"./data/{patient}.edf")

数据处理实战

EDF 文件解析

使用 mne-python 库读取 EDF 文件:

import mne

# 加载 EDF 文件并自动转换单位
raw = mne.io.read_raw_edf('chb01.edf', preload=True)

# 查看通道信息
print(raw.info)

# 绘制原始信号
raw.plot(duration=5, n_channels=10)

关键预处理步骤

  1. 滤波处理:

    # 带通滤波(0.5-70Hz) + 工频陷波(50/60Hz)
    raw.filter(0.5, 70, fir_design='firwin')
    raw.notch_filter([50, 60])  # 根据实际电源频率选择

  2. 重参考:

    # 转换为平均参考
    raw.set_eeg_reference(ref_channels='average')

  3. 分段处理:

    # 创建事件段(发作与非发作)
    events = mne.events_from_annotations(raw)
    epochs = mne.Epochs(raw, events, tmin=-1, tmax=4, baseline=(-1, 0))

典型问题解决方案

EDF 格式差异

  • EDF+:支持不连续记录,需检查 raw.annotations 中的间断标记
  • 电极缺失 :使用raw.drop_channels(['EEG X-Y']) 移除无效通道

内存优化

# 使用 HDF5 保存预处理结果
raw.save('preprocessed_raw.fif', overwrite=True)

# 后续读取
raw = mne.io.read_raw_fif('preprocessed_raw.fif', preload=False)

进阶分析示例

时频分析

import matplotlib.pyplot as plt

# 计算并绘制时频图
frequencies = np.arange(5, 80, 2)
power = mne.time_frequency.tfr_morlet(epochs, frequencies, n_cycles=3, return_itc=False)
power.plot([0], baseline=(-1, 0), mode='logratio')

CHB-MIT 数据集下载与预处理全指南:从数据获取到 EEG 分析实战

完整项目建议

  1. 数据增强 :对少数类(发作样本) 应用滑动窗口增广
  2. 特征工程:提取时域(如 Hjorth 参数)、频域(功率谱)、非线性特征(熵值)
  3. 模型设计:尝试 1D-CNN+LSTM 混合架构处理时序信号

资源获取

已整理完整代码的 Colab Notebook:

通过这套流程,我们团队将原本需要 3 天的数据处理时间缩短到 2 小时。特别提醒注意 EDF 文件头中的采样率信息,某些病例存在多采样率混合的情况,需要特殊处理。

正文完
 0
评论(没有评论)