← 返回项目
已完成·
EEG Convert - 脑电数据格式转换工具
支持 EDF/BDF/CDT 等多种脑电数据格式互转,集成 Butterworth 滤波和陷波滤波,提供命令行和 Python API 两种使用方式。

PythonMNE-PythonpyEDFlibNumPySciPy
简介
在脑电(EEG)研究和临床应用中,不同厂商的采集设备输出的数据格式各不相同。常见的格式包括:
- EDF(European Data Format)— 欧洲数据格式,最通用的标准
- BDF(BioSemi Data Format)— BioSemi 设备专用格式,24位精度
- CDT(Curry Data Format)— Neuroscan Curry 系统格式
- SET(EEGLAB Dataset)— MATLAB 环境下的 EEGLAB 格式
EEG Convert 是一个轻量级的 Python 工具库,用于在这些格式之间进行无损转换,同时支持在转换过程中应用数字滤波(高通、低通、陷波)。
核心功能
格式互转
支持以下格式之间的双向转换:
| 输入格式 | 输出格式 | 说明 |
|---|---|---|
| EDF | BDF / SET / MAT | 标准欧洲数据格式 |
| BDF | EDF / SET / MAT | BioSemi 24位高精度 |
| CDT | EDF / BDF / SET | Neuroscan Curry 格式 |
| SET | EDF / BDF / MAT | EEGLAB 数据集 |
信号滤波
转换过程中可同步应用数字滤波器:
- 高通滤波 — 去除基线漂移(默认 0.5 Hz)
- 低通滤波 — 去除高频噪声(默认 50 Hz)
- 陷波滤波 — 去除工频干扰(50/60 Hz)
滤波器采用 Butterworth IIR 设计,通过 scipy.signal 实现,支持零相位滤波(forward-backward)避免相位失真。
使用方式
命令行
# 基础转换
python -m eeg_convert -i input.edf -o output.bdf
# 带滤波转换
python -m eeg_convert -i input.cdt -o output.edf \
--low_pass 50 --high_pass 0.5 --notch 50Python API
import eeg_convert
# 读取源文件
reader = eeg_convert.EEGReader("input.edf")
print(f"通道数: {len(reader.signals)}")
print(f"采样率: {reader.signals['Fp1']} Hz")
print(f"时长: {reader.duration} 秒")
# 按时间读取数据(避免内存溢出)
data = reader.read_by_time(start_time_second=0, duration_second=300)
# 创建写入器
writer = eeg_convert.EEGWriter("output.bdf", reader.signals)
# 分块转换(每块 5 分钟)
for i in range(0, int(reader.duration), 300):
batch = reader.read_by_time(i, 300)
filtered = [reader.filter2(ch, reader.signals[ch],
low=0.5, high=50, notch=50)
for ch in reader.signals]
writer.write_samples(filtered)
writer.closed()技术实现
读取器架构
EEGReader 类封装了不同格式的读取逻辑:
- EDF/BDF — 基于
pyEDFlib直接读取二进制数据 - CDT — 通过
MNE-Python的read_raw_curry()接口 - SET — 借助
MNE-Python读取 EEGLAB 数据集
分块处理
针对长时间记录的大文件(数小时甚至数十小时),采用分块读取策略:
- 每次读取固定时长(默认 300 秒)
- 逐通道应用滤波器
- 写入目标文件后释放内存
- 避免一次性加载整个文件导致内存溢出
滤波器设计
# Butterworth 带通滤波示例
from scipy.signal import butter, filtfilt
def butter_bandpass(lowcut, highcut, fs, order=4):
nyq = 0.5 * fs
low = lowcut / nyq
high = highcut / nyq
b, a = butter(order, [low, high], btype='band')
return b, a
# 零相位滤波(消除相位延迟)
y = filtfilt(b, a, data)应用场景
多中心数据整合
不同实验室使用不同品牌的脑电设备(Neuroscan、BioSemi、Brain Products),数据格式各异。通过 EEG Convert 统一转换为 EDF 标准格式,便于后续联合分析。
数据预处理流水线
在机器学习模型训练前,通常需要:
- 格式标准化 → 2. 滤波去噪 → 3. 重参考 → 4. 分段
EEG Convert 可嵌入这一流水线的前两步。
临床数据归档
医院长期积累的脑电数据可能包含多种格式,统一转换为 EDF(医疗行业标准)便于归档和后续调阅。
项目地址
- GitHub: https://github.com/eegdb/eeg_convert
- 依赖: Python 3.8+, MNE-Python, pyEDFlib, NumPy, SciPy