python - Pyedflib 读取信号错误

标签 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 channel F4)。

谢谢!

附注我也将其添加到 pyedflib wiki 中。

最佳答案

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

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

相关文章:

c - 即使使用 SA_RESTART,哪些功能也会被信号中断?

c++ - 无法处理信号,导致系统调用中断

android - 减少样本数量的技术和算法

math - 逆 FFT 的计算复杂度

algorithm - 离散余弦变换公式差异

python - 一次替换多个正则表达式模式

python - 拼写检查算法输出所有内容而不仅仅是拼写错误(Python)?

python - 将数据更改为 float 后,数据透视表中没有可聚合的数字类型

python - 如何折叠/压缩/减少 pandas 中的字符串列

c - 调用 SIGINT 时终止线程 - C