Pyedflib错误读取信号

时间:2017-09-26 16:48:56

标签: python signals signal-processing european-data-format

我有一组包含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,但是如果有任何其他信息可能有用,那就问问。

一些额外的笔记:

  1. 我还尝试sig=f.readSignal(4,start=0,n=100)以确保文件的开头或任何类型的问题都不存在问题,它会返回一个长度为100的全0的数组。
  2. 当我在Matlab中检查它们时(即非零),这些值是正确的。
  3. 问题似乎是文件特定的(有些是正确处理的,而有些则没有),但是我找不到实际信号值以外的文件之间的差异
  4. f.readSignal(4)中使用的索引4在我的完整应用程序中没有硬编码,这仅用于演示目的(在我的示例文件中,4对应于EEG频道F4)。
  5. 谢谢!

    P.S。我也将它添加到pyedflib wiki中。

1 个答案:

答案 0 :(得分:1)

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