5

さて、EEGスキャンからのデータファイル(バイナリファイル、data.eeg)があり、matlabでファイルを読み取ってデータのセクションをプロットするコードは次のようになります。

sr=400;                                                     % Sample Rate
Nyq_freq=sr/2;                                              % Nyquist Frequency
fneeg=input('Filename  (with path and extension) :', 's');  
t=input('How many seconds in total of EEG ? : ');
ch=input('How many channels of EEG ? : ');
le=t*sr;                                                    % Length of the Recording
fid=fopen(fneeg, 'r', 'l');                                 % Open the file to read 
EEG=fread(fid,[ch,le],'int16');                             % Read Data -> EEG Matrix
fclose ('all');     
plot(EEG(:,3))

これが私の「翻訳」の試みです

from numpy import *
from matplotlib.pylab import *

sample_rate = 400
Nyquist = sample_rate/2.
fneeg = raw_input("Filename (full path & extension): ")
t = int(raw_input("How many secs in total of EEG?: "))
ch = int(raw_input("How many channels of EEG?: "))
le = t*sample_rate
fid = open(fneeg, 'r')
EEG = fromfile(fneeg, int16)

ここで、物事が私を混乱させます。ドキュメントによると、matlab の fread は、fread(loaded_file, size, data_type) を介してバイナリ ファイルを読み取る方法です。Python での代替手段は、numpy の fromfile を使用し、組み込みの reshape 関数を使用して (このスレッドのMATLAB to Python freadによると) reshaping を使用することです。これがどのように機能するのか、またはmatlabメソッドに関連しているのかさえわかりませんか? 私の質問が混乱している場合は申し訳ありませんが、matlab はまだ私にとって非常に新しいものです。

編集: 見たい場合は、ここにあるファイルを見てください: https://www.dropbox.com/s/zzm6uvjfm9gpamk/data.eeg

Edit2: 生の入力に対する回答は t=10、ch=32 です。実際、考えてみると、なぜユーザー入力を求めているのかさえわかりません..

4

1 に答える 1

2

あなた自身と@JoeKingtonのコメントで議論されているように、これはうまくいくはずです(テストのために入力内容を削除しました)

import numpy as np

sample_rate = 400
Nyquist = sample_rate/2.0
fneeg = 'data.eeg'
t = 10 
ch = 32
le = t*sample_rate
EEG = np.fromfile(fneeg, 'int16').reshape(ch, le, order='F')

reshape を使用しないと、次のようになります。

In [45]: EEG
Out[45]: array([ -39,  -25,  -22, ..., -168, -586,  -46], dtype=int16)

In [46]: EEG.shape
Out[46]: (128000,)

再形成あり:

In [47]: EEG.reshape(ch, le, order='F')
Out[47]: 
array([[ -39,  -37,  -12, ...,    5,   19,   21],
       [ -25,  -20,    7, ...,   20,   36,   36],
       [ -22,  -20,    0, ...,   18,   34,   36],
       ..., 
       [ 104,  164,   44, ...,   60,  -67, -168],
       [ 531,  582,   88, ...,   29, -420, -586],
       [ -60,  -63,  -92, ...,  -17,  -44,  -46]], dtype=int16)

In [48]: EEG.reshape(ch, le, order='F').shape
Out[48]: (32, 4000)
于 2013-11-12T20:43:19.243 に答える