Сигнал чтения ошибки Pyedflib
У меня есть коллекция файлов 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)
чтобы убедиться, что это не проблема с началом файла или чем-то в этом роде, и он возвращает массив всех 0 с длиной 100. - Значения верны, когда я проверяю их в Matlab (т. Е. Не ноль).
- Кажется, проблема связана с файлом (некоторые обрабатываются правильно, а другие нет), однако я не могу найти никаких различий между файлами, кроме фактических значений сигнала
- Индекс 4 используется в
f.readSignal(4)
не полностью прописан в моем полном приложении, это просто для демонстрационных целей (в моих файлах примеров 4 соответствует каналу EEG F4).
Спасибо!
PS Я добавляю это и в вики pyedflib.
1 ответ
Оказывается, что pyedflib не очищает между файлами, если используется один и тот же дескриптор. Приведенный выше код будет работать нормально, однако, когда он реализован как цикл внутри программы драйвера, я явно не закрывал дескриптор файла pyedflib. Как только я добавил f.close()
после каждого файла все работало нормально.