使用Python WFDB库读取UCDDB数据库.rec文件报错:缺少.hea文件
解决UCDDB数据库EEG信号读取问题
问题原因
你用wfdb.rdrecord()报错,是因为该数据库的.rec文件并非标准WFDB格式——标准WFDB记录必须配套.hea头文件,但UCDDB的.rec是和EDF文件绑定的原始数据文件,无法被rdrecord()直接识别。
解决方案
以下提供两种可行的读取方式:
方法1:直接读取EDF文件(推荐)
UCDDB每个记录都有对应的.edf文件,WFDB原生支持EDF格式,无需额外头文件:
# 读取本地EDF文件(假设文件存储在/content目录下) record = wfdb.rdrecord('/content/ucddb002', format='edf') # 提取EEG信号数据(先通过record.sig_name确认EEG通道名称) eeg_channel_indices = [i for i, name in enumerate(record.sig_name) if 'EEG' in name] eeg_data = record.p_signal[:, eeg_channel_indices]
- 执行后
record对象会包含所有信号元数据(采样率、通道名称等)和原始信号矩阵p_signal - 可通过
record.sig_name查看全通道列表,过滤出带"EEG"标识的通道即可提取目标数据
方法2:手动生成.hea文件读取.rec
如果必须读取.rec文件,需要借助数据库提供的.txt文件生成对应的.hea头文件:
- 打开
ucddb002.txt,提取关键信息:- 信号通道总数、采样率(UCDDB统一为250Hz)
- 每个通道的名称、物理单位、增益参数等
- 在
.rec同目录下创建ucddb002.hea文件,写入符合WFDB规范的内容(示例):ucddb002 8 250 1000000 EEG1 0 1 0 0 0 EEG1 EEG2 0 1 0 0 0 EEG2 ECG 0 1 0 0 0 ECG ... # 按txt文件中的通道顺序依次补充- 第一行格式:
[记录名] [通道数] [采样率] [总采样点数] - 后续每行格式:
[通道名] [增益] [偏移] [采样位数] [基准值] [单位] [注释]
- 第一行格式:
- 执行读取代码:
record = wfdb.rdrecord('/content/ucddb002') eeg_data = record.p_signal[:, [0,1]] # 假设前两个通道为EEG信号
注意事项
- UCDDB的
.txt文件包含了记录的完整通道详情,生成.hea时必须保证信息与实际通道一致 - 优先选择EDF读取方式,可避免手动编写头文件的繁琐和出错概率
内容的提问来源于stack exchange,提问作者Daniel Dantas
相关产品推荐
相关产品推荐

