2

我有一个 .edf 文件,可以使用“pyedflib”读取,代码如下。该代码基本上是采用 .edf 文件并将其转换为 numpy 数组。阵列形状为 65*20000。

file = pyedflib.EdfReader(file_name)
n = file.signals_in_file
signal_labels = file.getSignalLabels()
sigbufs = np.zeros((n,file.getNSamples()[0]))
for i in np.arange(n):
    sigbufs[i,:]=file.readSignal(i)

return sigbufs

而且我还有一个 .edf.event 文件,它与 .edf 文件的信息相对应。下面给出了基于文件文本的内容。

"""Xü## 时间分辨率:160 ìÿÿÿÿ XüT0 持续时间:4.2 ZüT2 持续时间:4.1ZüT0 持续时间:4.2 ZüT1 ​​持续时间:4.1ZüT0 持续时间:4.2 ZüT1 ​​持续时间:4.1ZüT0 持续时间:4.2 ZüT2 持续时间:4.1ZüT0 持续时间:4.2 ZüT2 持续时间: 4.1ZüT0 持续时间:4.2 ZüT1 ​​持续时间:4.1ZüT0 持续时间:4.2 ZüT1 ​​持续时间:4.1ZüT0 持续时间:4.2 ZüT2 持续时间:4.1ZüT0 持续时间:4.2 ZüT1 ​​持续时间:4.1ZüT0 持续时间:4.2 ZüT2 持续时间:4.1ZüT0 持续时间:4.2 ZüT2 持续时间:4.1ZüT0持续时间:4.2 ZüT1 ​​持续时间:4.1ZüT0 持续时间:4.2 ZüT1 ​​持续时间:4.1ZüT0 持续时间:4.2 ZüT2 持续时间:4.1ZüT0 持续时间:4.2 ZüT1 ​​持续时间:4.1 """

T0、T1 和 T2 是实验类型,此文件给出了实验的持续时间。

我的目的是提取这些信息以用于上述数据。我可以通过实现一些正则表达式技术来做到这一点。但是由于我未来的实现有很多数据,所以找到模式真的很耗时。

因此,我的问题是:有没有可以读取 .edf.event 文件的库或工具?

此外,如果您想查看 .edf.event 文件,可以查看下面的链接。

https://www.physionet.org/pn4/eegmmidb/S001/

4

2 回答 2

2

我也遇到了这个问题。事实证明 edf.event 文件似乎是一种仅与特定 physionet 软件兼容的文件类型。幸运的是,事件文件中的所有注释信息都可以在它们提供的 edf 文件中找到。为了检索注释,使用这段代码将 edf 文件的所有注释打印为 numpy 数组:

file = pyedflib.EdfReader(file_name)  
annotations = file.readAnnotations()  
print(annotations)  

编辑:要将带注释的代码分配给特定数据集的每个文件中的数据(加上删除 0 值的最后半秒),请使用以下脚本:

import urllib.request
import numpy as np
import pyedflib

timeArray = np.array([round(x,5) for x in np.arange(0,124.5,.00625)])
timeArray = timeArray.reshape(19920,1)
reader = pyedflib.EdfReader('your/path/here/S001R05.edf')
annotations = reader.readAnnotations()
intervals = np.append(annotations[0],[124.5])
codes = annotations[2]
codeArray = []     
counter = 1
for timeVal in timeArray:
    if timeVal == 124.5:
        break
    elif timeVal / intervals[counter] == 1.0:
        counter += 1

    codeArray.append(codes[counter - 1])

invertCodeArray = np.array(codeArray).reshape(19920,1)
numSignals = reader.signals_in_file
signal_labels = reader.getSignalLabels()
dataset = np.zeros((numSignals, reader.getNSamples()[0]))
for signal in np.arange(numSignals):
    dataset[signal, :] = reader.readSignal(signal)

dataset = dataset[:,:-80].transpose()
masterSet = np.concatenate((timeArray,invertCodeArray,dataset),axis=1)
于 2018-04-10T19:20:39.703 回答
0
import wfdb

path='staffiii/data/'
#location of file on physionet server. This corresponds to STAFF III database

filename='001c'
#patient file name

sig, fields = wfdb.rdsamp(filename, pn_dir=path)

ann_ref = wfdb.rdann(filename,'event',pn_dir=path)

使用它,在 rdann 传递参数作为 'event' 用于读取 *.event 文件和 'atr' 用于读取 *.atr 文件。

于 2021-10-05T08:41:13.363 回答