Как график отфильтровывает данные EDF из определенного канала в MatLab

Привет, я пытаюсь построить определенный канал из данных 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 после использования чтения 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), я получаю изображение ниже, которое, как я считаю, отображает все каналы.

введите описание изображения здесь

Я хотел бы построить отфильтрованные данные 'MARKER', которые являются последним каналом в файле edf. Как я могу это сделать?

1 ответ

Решение

Есть ли подвох?
Я думаю, что вы можете просто построить выбранный канал, как в следующем примере:

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

Я должен загрузить Subject2.edf (отличается от вашего), и edfread.mи это похоже на работу.

Я думаю, нашел еще одну проблему в вашем коде:

Согласно документации Matlab:

plot(Y) создает двухмерный линейный график данных в Y относительно индекса каждого значения.
Если Y является вектором, то масштаб оси x составляет от 1 до длины (Y).
Если Y является матрицей, то функция plot отображает столбцы Y в зависимости от номера строки. Шкала оси X находится в диапазоне от 1 до количества строк в Y.
Если Y сложный, то функция plot строит мнимую часть Y относительно реальной части Y, так что plot(Y) эквивалентен plot(real(Y),imag(Y)).

График 1-D, данные должны быть в столбцах, а в вашей выборке данные - в строках.

Участок одного канала:
plot(data_alpha(10, :))

Участок двух каналов:
tmp = data_alpha(10:11, :);
plot(tmp') % tmp транспонируется.

Разместите все каналы (25 в моем примере):
plot(data_alpha') % data_alpha транспонируется.

Другие вопросы по тегам