2017-09-26 7 views
1

私はEEG信号データを含むEDFファイルのコレクションを持っています。私はpyedflibを使用してファイルにアクセスしていますが、一部のファイルから信号を読み取ることが困難な場合がよくあります。基本的には、信号値を読み込もうとすると、すべて0の配列を持つファイルがいくつかあります。与えられた:これは、長さ「file_dur」*「のFS」の配列を返しますPyedflibエラー読み取り信号

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 

、しかし結果はすべて0の配列であり、次の警告が表示されます。

read -1, less than 8965120 requested!!! 

誰もがいずれかを持っていますこのような問題を引き起こす可能性のあるアイデア残念ながら、PHIのようにデータを共有することはできませんが、参考になるだけの追加情報があれば尋ねるだけです。

カップル余分ノート:

  1. 私もそれは一種のファイルか何かの始まりに問題ないことを確認するsig=f.readSignal(4,start=0,n=100)を試してみましたし、それがすべて0の配列を返します。長さ100
  2. Matlabで値を調べると値が正しい(つまりゼロ以外の値)。
  3. 問題はハードコードされていないファイルの特定は、(他の人はそうではありませんいくつかが正しく処理されている)、しかし私は
  4. f.readSignal(4)に使用されるインデックス4を実際の信号以外のファイル間の違いを見つけることができないように見えます私の完全なアプリケーションでは、これはデモンストレーションの目的にすぎません(私のサンプルファイルでは、4はEEGチャンネルF4に対応しています)。

ありがとう!

P.S.私はこれをpyedflib wikiにも追加しています。

答えて

1

同じハンドルが使用されている場合、pyedflibはファイル間をクリーンアップしません。上記のコードはうまく動作しますが、ドライバプログラムの内部でループとして実装された場合、pyedflibファイルハンドルを明示的に閉じていませんでした。各ファイルの後にf.close()を追加すると、正常に動作しました。

関連する問題