Как график отфильтровывает данные 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 транспонируется.