0

こんにちは、EEG ヘッドセットから記録された EDF データから特定のチャネルをプロットしようとしています。現時点では、すべてのチャネルを一緒にプロットしていますが、これは非常に乱雑に見えます。

これは、edfread をフィルタリングして使用し、edf データを取得するスクリプトです。

clc
clear all
close all

%Convert data from edf to Matlab
[header, data] = edfread('Subject2.edf');
hFs = 128; % half of sampling rate of Emotiv EEG 

%design elliptic filter
Wp = [8/64 12/64]; %passband 
Ws = [7/64 13/64]; %stopband
Rp = 1; %ripple in the pass band
Rs = 30; %stopband attenuation

[N, Wn] = ellipord(Wp, Ws, Rp, Rs);
[B, A] = ellip(N, Rp, Rs, Wp);

%averaging to remove common noise
for i=1:36
   datan(i,:)=data(i,:)-mean(data);
end

%filtering of entire data into alpha band
data_alpha = filtfilt(B,A,datan);

edf read を使用した後の EDF データのコードは次のとおりです。これを返します。

header = 

            ver: 0
      patientID: '2                                                                               '
       recordID: '2                                                                               '
      startdate: '14.07.16'
      starttime: '04.41.41'
          bytes: 9472
        records: 1257
       duration: 1
             ns: 36
          label: {1x36 cell}
     transducer: {1x36 cell}
          units: {1x36 cell}
    physicalMin: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    physicalMax: [1x36 double]
     digitalMin: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
     digitalMax: [1x36 double]
      prefilter: {1x36 cell}
        samples: [1x36 double]

したがって、`plot(data_alpha) を使用すると、以下の画像が得られます。これは、すべてのチャネルをプロットしていると思われます。

ここに画像の説明を入力

edf ファイルの最後のチャネルであるフィルター処理された 'MARKER' データをプロットしたいと思います。これどうやってするの?

4

1 に答える 1

1

キャッチはありますか?
次のサンプルのように、選択したチャネルを簡単にプロットできると思います。

ch = 10;
plot(data_alpha(ch, :))

「Subject2.edf」(あなたのものとは異なります)をダウンロードする必要がありedfread.m、動作するようです。

あなたのコードに別の問題が見つかったと思います:

Matlabのドキュメントによると:

plot(Y) は、各値のインデックスに対する Y のデータの 2 次元ライン プロットを作成します。
Y がベクトルの場合、x 軸のスケールの範囲は 1 から長さ (Y) までです。
Y が行列の場合、関数 plot は Y の列とその行番号をプロットします。x 軸のスケールの範囲は 1 から Y の行数までです
。Y が複素数の場合、関数 plot は Y の虚数部と Y の実数部をプロットします。これにより、plot(Y) は plot(real (Y),imag(Y))。

プロット 1-D、データは列にある必要があり、サンプルではデータは行にあります。

1 つのチャネルをプロットします。
plot(data_alpha(10, :))
ここに画像の説明を入力

2 つのチャネルをプロットします。
tmp = data_alpha(10:11, :);
plot(tmp') %tmp は転置されます。
ここに画像の説明を入力

すべてのチャネルをプロットします (私のサンプルでは 25):
plot(data_alpha')%data_alpha が転置されます。
ここに画像の説明を入力

于 2016-07-24T20:27:49.280 に答える