2

256Hz でサンプリングされた 64 チャネルの EEG データがあり、各チャネルの時間周波数分析を実行してスペクトログラムをプロットしようとしています。

データは NumPy 3d 配列に格納されます。次元の 1 つは長さ 256 で、各要素には、サンプリングされたすべての時点で読み取ったマイクロボルトが含まれます (データの各チャネルの合計長は 1 秒です)。

明確にするために: 私の 3D アレイは 64 256 913 (電極 * 電圧 * 試行) です。試行は、実験の 1 回の試行にすぎません。そこで私がやりたいことは、1 回の試行から 1 つの電極と 1D 電圧ベクトル全体を取り出し、時間-周波数スペクトログラムを作成することです。たとえば、 data[0,:,0] からスペクトログラム プロットを作成したいとします。

各電極について、y 軸が周波数、x 軸が時間、色/強度が電力であるプロットが必要です

私はpythonでこれを使ってみました:

from matplotlib.pyplot import specgram
#data = np.random.rand(256)
specgram(data, NFFT=256, Fs=256)

これにより、次のようなものが得られます。

ここに画像の説明を入力

すぐに、軸の範囲が正しくないため、これは正しくないように見えます

さらに、すべての EEG チャネルに対して同じコードを実行すると、すべてのデータに対して、まったく同じプロットが得られます (データがそれぞれ異なることを確認したにもかかわらず)。

私は信号処理にかなり慣れていません。データの配置方法または関数の使用方法のいずれかで間違っていた場所はありますか?

4

1 に答える 1

0

関数のドキュメントからspecgram

スペクトログラムをプロットします。

呼び出し署名:

specgram(x, NFFT=256, Fs=2, Fc=0, detrend=mlab.detrend_none, window=mlab.window_hanning, noverlap=128, cmap=None, xextent=None, pad_to=None, side='default', scale_by_freq=なし、mode='default'、scale='default'、**kwargs)

x のデータのスペクトログラムを計算してプロットします。データは NFFT 長のセグメントに分割され、各セクションのスペクトルが計算されます。各セグメントにウィンドウ関数 window を適用し、各セグメントのオーバーラップ量を noverlap で指定します。スペクトログラムは、(imshow を使用して) カラーマップとしてプロットされます。

x: 1-D 配列またはシーケンス データを含む配列またはシーケンス

あなたの問題は、1-D データを渡していないことのようです。試す:

from matplotlib.pyplot import specgram
specgram(data.flatten(), NFFT=256, Fs=256)
于 2015-08-07T20:07:58.420 に答える