EDF,全称是 European Data Format,是一种标准文件格式,用于交换和存储医疗时间序列。其能够存储多通道的数据,允许每个信号拥有不同的采样频率。在内部,它包括标题和一个或多个数据记录。标题包含一些一般信息(患者标识,开始时间......等等)以及每个信号的技术规格(校准,采样率,过滤,......等等),编码为 ASCII 字符。数据记录包含小端 16 位整数的样本。 所以,EDF 也是多导睡眠图(PSG)录音的流行格式。
常见的读取 EDF 文件的软件有以下几种:
推荐使用 EDFbrowser,效果如下图所示,还能像视频一样播放。
在 Python 中可以使用 pyEDFlib
这个库来读取。可以读取信号的数量,信号的标签,信号的一些头文件等等。
import pyedflib
import numpy as np
f = pyedflib.EdfReader("D:/deepsleepnet/data/SC4001E0-PSG.edf")
n = f.signals_in_file
print("signal numbers:", n)
signal_labels = f.getSignalLabels()
print("Labels:", signal_labels)
signal_headers = f.getSignalHeaders()
print("Headers:", signal_headers)
______________________________________
signal numbers: 7
Labels: ['EEG Fpz-Cz', 'EEG Pz-Oz', 'EOG horizontal', 'Resp oro-nasal', 'EMG submental', 'Temp rectal', 'Event marker']
Headers: [{'label': 'EEG Fpz-Cz', 'dimension': 'uV', 'sample_rate': 100, 'physical_max': 192.0, 'physical_min': -192.0, 'digital_max': 2047, 'digital_min': -2048, 'prefilter': 'HP:0.5Hz LP:100Hz [enhanced cassette BW]', 'transducer': 'Ag-AgCl electrodes'}, {'label': 'EEG Pz-Oz', 'dimension': 'uV', 'sample_rate': 100, 'physical_max': 196.0, 'physical_min': -197.0, 'digital_max': 2047, 'digital_min': -2048, 'prefilter': 'HP:0.5Hz LP:100Hz [enhanced cassette BW]', 'transducer': 'Ag-AgCl electrodes'}, {'label': 'EOG horizontal', 'dimension': 'uV', 'sample_rate': 100, 'physical_max': 1009.0, 'physical_min': -1009.0, 'digital_max': 2047, 'digital_min': -2048, 'prefilter': 'HP:0.5Hz LP:100Hz [enhanced cassette BW]', 'transducer': 'Ag-AgCl electrodes'}, {'label': 'Resp oro-nasal', 'dimension': '', 'sample_rate': 1, 'physical_max': 2047.0, 'physical_min': -2048.0, 'digital_max': 2047, 'digital_min': -2048, 'prefilter': 'HP:0.03Hz LP:0.9Hz', 'transducer': 'Oral-nasal thermistors'}, {'label': 'EMG submental', 'dimension': 'uV', 'sample_rate': 1, 'physical_max': 5.0, 'physical_min': -5.0, 'digital_max': 2500, 'digital_min': -2500, 'prefilter': 'HP:16Hz Rectification LP:0.7Hz', 'transducer': 'Ag-AgCl electrodes'}, {'label': 'Temp rectal', 'dimension': 'DegC', 'sample_rate': 1, 'physical_max': 40.0, 'physical_min': 34.0, 'digital_max': 2731, 'digital_min': -2849, 'prefilter': '', 'transducer': 'Rectal thermistor'}, {'label': 'Event marker', 'dimension': '', 'sample_rate': 1, 'physical_max': 2048.0, 'physical_min': -2047.0, 'digital_max': 2048, 'digital_min': -2047, 'prefilter': 'Hold during 2 seconds', 'transducer': 'Marker button'}]
GitHub 上还有挺多大神都自造轮子来读取,在谷歌上搜一搜,可以搜到一些。
[1]. The Sleep-EDF Database [2]. European Data Format