主要内容

自动信号标记自定义功能

这个例子展示了如何使用自定义自标记函数信号贴标签机标记心电图信号的QRS复合体和R峰。一个自定义函数使用先前训练过的循环深度学习网络来识别和定位QRS复合体。另一个自定义函数使用一个简单的峰值查找器来定位R峰。在这个例子中,网络标记了两个完全独立于网络训练和测试过程的信号的QRS复合体。

QRS复合体由ECG波形中的三个偏转组成,反映了心脏右心室和左心室的去极化。QRS也是人类心跳振幅最高的部分。QRS复合体的研究可以帮助评估一个人心脏的整体健康状况和是否存在异常。1].特别是,通过在QRS复合体中定位R峰并查看连续峰之间的时间间隔,诊断医生可以计算出患者的心率变异性并检测心律失常。

在本例中介绍了深度学习网络使用深度学习的波形分割,在那里,它使用公开可用的QT数据库中的ECG信号进行训练[2] [3.].数据包括来自105名患者的大约15分钟的ECG记录,采样频率为250 Hz。为了获得每个记录,检查人员在患者胸部的不同位置放置了两个电极,结果产生了双通道信号。数据库提供由自动化专家系统生成的信号区域标签[1].添加的标签使得使用这些数据来训练深度学习网络成为可能。

加载,重采样,并导入数据到信号标签

本例中标记的信号来自MIT-BIH心律失常数据库[4].数据库中的每个信号都以平均360hz的频率不规则采样,并由两名心脏病专家进行注释,以便验证结果。

加载两个MIT数据库信号,分别对应记录200和203。将信号重新采样到一个统一的网格,采样时间为1/250秒,这对应于QT数据库数据的名义采样率。

负载mit200Y200 = resample(ecgsig,tm,250);负载mit203Y203 = resample(ecgsig,tm,250);

开放信号贴标签机.在贴标签机选项卡上,单击进口并选择从工作空间成员列表。在对话框中,选择信号1美元而且y203.添加时间信息:选中时间的下拉列表中,并指定采样率250赫兹。点击导入和关闭.信号出现在标记信号集浏览器.通过选择信号名称旁边的复选框来绘制信号。

定义标签

定义要附加到信号上的标签。

  1. 定义QRS复合体的分类感兴趣区域(ROI)标签。点击添加定义贴标签机选项卡。指定标签名称作为QRSregions,选择标签类型ROI,进入数据类型作为分类,并加上2类别,QRS而且N/A,每个都在自己的线上。

  2. 定义的子标签QRSregions作为R峰的数值点标签。点击QRSregions标签定义浏览器来选择它。点击添加定义并选择添加子标签定义.指定标签名称作为Rpeaks,选择LabelType,然后进入数据类型作为数字

signalLabeler_ecgsignals_22a.png"height=

创建自定义自动贴标签函数

创建两个自定义标签功能,一个用于定位和标记QRS复合体,另一个用于定位和标记每个QRS复合体中的R峰。(代码findQRS而且findRpeaks函数将在示例后面出现。)要创建每个函数,请在贴标签机选项卡,展开自动化的价值图库和选择添加自定义功能信号贴标签机显示一个对话框,要求输入函数的名称、描述和标签类型。

  1. 对于定位QRS复合体的功能,请输入findQRS的名字字段并选择ROI随着标签类型.你可以离开描述字段为空,或者您可以输入自己的描述。

  2. 对于定位R个峰的函数,输入findRpeaks的名字字段并选择随着标签类型.你可以离开描述字段为空,或者您可以输入自己的描述。

如果你已经写好了函数,并且函数在当前文件夹或MATLAB®路径中,信号贴标签机将函数添加到图库中。如果你还没有写出函数,信号贴标签机在“编辑器”中打开空白模板,以便键入或粘贴代码。保存文件。保存文件后,函数就会出现在图库中。

标记QRS复合体和R峰

找到并标记输入信号的QRS复合体。

  1. 标记信号集浏览器,选中右侧的复选框1美元

  2. 选择QRSregions标签定义浏览器。

  3. 自动化的价值画廊,选择findQRS

  4. 点击Auto-Label并选择自动标记所有信号.在出现的对话框中,输入250Hz采样率参数字段,单击好吧

信号贴标签机定位并标记所有信号的QRS复合体,但仅显示选中复选框的信号的标签。QRS复合体在图中和标签查看器轴中显示为阴影区域。点击激活平移器淘洗沙金的人显示按TAB键并放大标记信号的区域。

signalLabeler_ecgsignals2_22a.png"height=

找到并标注QRS复合体对应的R峰。

  1. 选择Rpeaks标签定义浏览器。

  2. 回到贴标签机选项卡。在自动化的价值画廊,选择findRpeaks

  3. 点击Auto-Label并选择自动标记所有信号.点击好吧在出现的对话框中。

标签及其数值出现在图和标签查看器轴中。

signalLabeler_ecgsignals3_22a.png"height=

导出标记信号和计算心率变异性

导出标记信号以比较每个患者的心率变异性。在贴标签机选项卡上,单击出口并选择到文件标记信号集列表。在出现的对话框中,给出名称HeartRates.mat并添加可选的简短描述。点击出口

回到MATLAB®命令窗口。加载标记的信号集。对于集合中的每个信号,计算心率变异性作为连续心跳之间时间差的标准偏差。绘制差异的直方图并显示心率变异性。

负载心率nms = getMemberNames(hearttrates);K = 1:心率。NumMembers v = getLabelValues(心率,k,[“QRSregions”“Rpeaks”]);hr = diff(cellfun(@(x) x. location,v));子图(2,1,k)直方图(hr,0.5:0.025:1.5)"hrv = "+ std(hr)) ylabel(nms(k)) ylim([0 6])结束

图中包含2个轴对象。坐标轴对象1包含一个直方图类型的对象。该节点表示hrv = 0.18764。坐标轴对象2包含一个直方图类型的对象。该节点表示hrv = 0.17064。"width=

findQRS功能:查找QRS复合体

findQRS函数查找并标记输入信号的QRS复合体。

这个函数使用了一个辅助函数,computeFSST,对输入数据进行重构并计算傅里叶同步压缩变换(FSST)。你可以储存computeFSST在同一目录下的单独文件中或嵌套在其中findQRS把它插在期末考试之前结束声明。

findQRS使用分类(深度学习工具箱)函数和训练好的深度学习网络来识别QRS区域。深度学习网络输出一个分类数组,将输入信号的每个点标记为属于P区域、QRS复合体、T区域或不属于这些区域。此函数使用将QRS复合体对应的点标签转换为QRS感兴趣区域标签signalMask然后丢弃剩下的。的df参数只选择持续时间大于20个样本的QRS复合体作为感兴趣区域。如果您没有指定采样速率,该函数将使用默认值250hz。

函数[labelVals,labelLocs] = findQRS(x,t,parentLabelVal,parentLabelLoc,varargin)这是一个模板,用于创建自动标记的自定义函数。% x是一个矩阵,其中每一列都包含对应于a的数据%的通道。如果通道的长度不同,则x是单元格数组列向量的%。% t是一个矩阵,其中每一列都包含对应于a的时间%的通道。如果通道的长度不同,那么t是单元格数组列向量的%。% parentLabelVal是与输出相关联的父标签值%子标签或当输出不是子标签时为空。当父标签为时,% parentLabelLoc包含一个空向量属性,当父标签是一个ROI或一个点时,ROI限制的向量当父标签是一个点时,% location。% labelVals必须是具有数字、逻辑或字符串输出的列向量%值。当输出标签为属性时,% labelLocs必须为空向量%两列矩阵的ROI限制时,输出标签是ROI,或一列当输出标签为点时,点位置的%向量。labelVals = cell(2,1);labelLocs = cell(2,1);如果nargin<5 Fs = 250;其他的Fs = varargin{1};结束Df = 20;负载(“trainedQTSegmentationNetwork”“净”Kj = 1:size(x,2) sig = x(:, Kj);%重塑输入和计算傅里叶同步压缩变换mitFSST = computeFSST(sig,Fs);%使用训练网络预测哪些点属于QRS区域netPreds =分类(net,mitFSST,MiniBatchSize=50);为QRS区域创建一个信号掩码,并指定最小序列长度QRS = categorical([netPreds{1} netPreds{2}]',“QRS”);msk = signalMask(QRS,MinLength=df,SampleRate=Fs);R = roimask(msk);标记QRS复合体为感兴趣的区域labelVals{kj} = r.Value;labelLocs{kj} = r.ROILimits;结束labelVals = vertcat(labelVals{:});labelLocs = cell2mat(labelLocs);在这里插入computeFSST,如果你想把它嵌套在findQRS中。结束

computeFSST功能:重塑输入和计算傅里叶同步压缩变换

此函数使用fsst函数来计算输入的傅里叶同步压缩变换(FSST)。如在使用深度学习的波形分割,当给出每个训练或测试信号的时频图作为输入时,网络性能最佳。FSST产生了一组对循环网络特别有用的特征,因为变换具有与原始输入相同的时间分辨率。功能:

  • 用随机数填充输入数据,并将其重新塑造为预期的2 × 5000单元格数组堆栈

  • 指定长度为128的Kaiser窗口和默认形状因子 β 0 5 提供足够的频率分辨率。

  • 提取频率范围为0.5 Hz ~ 40hz的数据。

  • 将FSST的实部和虚部视为独立的特征。

  • 通过减去平均值和除以标准差使数据归一化。

函数signalsFsst = computeFSST(xd,Fs) xd =重塑([xd;randn(10000-length(xd),1)/100],5000,2);signalsFsst = cell(1,2);k = 1:2 [ss,ff] = fsst(xd(:,k),Fs,kaiser(128));Sp = ss(ff>0.5 & ff<40,:);signalsFsst{k} = normalize([real(sp);imag(sp)],2);结束结束

findRpeaks函数:寻找R个峰

该函数定位感兴趣的QRS区域的最突出的峰值findQRS.该函数应用MATLAB®islocalmax函数的绝对值的信号在区间定位findQRS

函数[labelVals,labelLocs] = findRpeaks(x,t,parentLabelVal,parentLabelLoc,varargin) labelVals = 0 (size(parentLabelLoc,1),1);labelloc = 0 (size(parentLabelLoc,1),1);kj = 1:size(parentLabelLoc,1) tvals = t>=parentLabelLoc(kj,1) & t<=parentLabelLoc(kj,2);Ti = t(tvals);lc = islocalmax(abs(xi),MaxNumExtrema=1);labelVals(kj) = xi(lc);labelLocs(kj) = ti(lc);结束结束

参考文献

[1]拉古纳,巴勃罗,雷蒙Jané,和Pere Caminal。多导联心电信号中波边界的自动检测:CSE数据库的验证计算机和生物医学研究。第27卷第1期,1994年,第45-60页。

Goldberger, Ary L., Luis A. N. Amaral, Leon Glass, Jeffery M. Hausdorff, Plamen Ch. Ivanov, Roger G. Mark, Joseph E. Mietus, George B. Moody,彭仲康和H. Eugene Stanley。“PhysioBank, PhysioToolkit,和PhysioNet:复杂生理信号新研究资源的组成部分。”循环。卷101,第23期,2000年,第e215-e220页。[流通电子页:http://circ.ahajournals.org/content/101/23/e215.full].

拉古纳、巴勃罗、罗杰·g·马克、阿里·l·戈德伯格和乔治·b·穆迪。”心电图QT和其他波形间隔测量算法的评估数据库。心脏病学中的计算机。第24卷,1997,第673-676页。

[4]穆迪、乔治·B、罗杰·g·马克。“MIT-BIH心律失常数据库的影响。”IEEE医学与生物工程杂志.第20卷第3期,2001年5月至6月,第45-50页。

另请参阅

应用程序

对象

相关的例子

更多关于