【问题标题】:how plot filtered EDF data from a specific channel in MatLab如何在 MatLab 中绘制来自特定通道的过滤 EDF 数据
【发布时间】:2016-07-24 18:40:23
【问题描述】:

您好,我正在尝试从 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读取后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 文件中的最后一个通道。我该怎么做?

【问题讨论】:

    标签: matlab plot european-data-format


    【解决方案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))。

    一维图,数据应按列显示,而在您的样本中,数据应按行显示。

    绘制一个通道:
    plot(data_alpha(10, :))

    绘制两个通道:
    tmp = data_alpha(10:11, :);
    plot(tmp') %tmp 已转置。

    绘制所有通道(我的示例中为 25 个):
    plot(data_alpha') %data_alpha 已转置。

    【讨论】:

    • 没有任何问题,我只是对 MatLab 的语法不是很熟悉,所以在过滤数据后很难绘制数据。
    猜你喜欢
    • 1970-01-01
    • 2016-11-12
    • 2020-02-06
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多