我收集了包含EEG信号数据的EDF文件。我正在使用pyedflib访问文件,但是我经常很难从某些文件中读取信号。基本上,有许多文件在尝试读取信号值时会得到全0的数组。鉴于:

def get_sig(fname):
  import pyedflib
  f=pyedflib.EdfReader(fname)
  file_dur=f.getFileDuration()
  fs=int(inFile.getSignalHeader(0)['sample_rate'])
  chan_names=f.getSignalLabels()
  #note... channel names and file duration are captured correctly

  sig=f.readSignal(4)
  return sig


这将返回一个长度为'file_dur'*'fs'的数组,但是结果为全0的数组,并显示以下警告:

read -1, less than 8965120 requested!!!


有人有什么想法会导致这样的问题吗?不幸的是,我无法共享任何数据,因为它是PHI,但是如果有任何其他有用的信息,请询问。

几个额外的注意事项:


我还尝试过sig=f.readSignal(4,start=0,n=100)来确保文件开头或排序中的任何内容都没有问题,并且它返回长度为100的全0数组。
当我在Matlab中检查值时,这些值是正确的(即非零)。
问题似乎是特定于文件的(某些文件已正确处理,而其他文件未正确处理),但是除实际信号值外,我找不到文件之间的任何差异
f.readSignal(4)中使用的索引4并未在我的完整应用程序中进行硬编码,这只是出于演示目的(在我的示例文件中,4对应于EEG通道F4)。


谢谢!

附言我也将其添加到pyedflib Wiki。

最佳答案

事实证明,如果使用相同的句柄,则pyedflib不会在文件之间清除。上面的代码可以正常运行,但是当在驱动程序内部实现为循环时,我并没有明确关闭pyedflib文件句柄。在每个文件之后添加f.close()后,它都可以正常工作。

关于python - Pyedflib错误读取信号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46431900/

10-12 20:56