主要内容

基于深度学习的Simulink心电信号分类万博1manbetx

这个例子展示了如何在Simulink (R)模型中使用小波变换和深度学习网络对心电信号进行分类。万博1manbetx这个例子使用了预先训练好的卷积神经网络基于小波分析和深度学习的时间序列分类基于时间序列数据的CWT图像对心电信号进行分类的小波工具箱的例子。有关培训的信息,请参见基于小波分析和深度学习的时间序列分类(小波工具箱)

心电图数据说明

本例使用来自生理网数据库。它包含了三组人的数据:

  1. 心律失常患者(ARR)

  2. 充血性心力衰竭(CHF)患者

  3. 鼻窦节律正常者

其中包括急性呼吸道反应患者的96次录音,慢性心力衰竭患者的30次录音,以及轻微呼吸道反应患者的36次录音。的ecg_signalsMAT-file包含时间序列格式的测试心电数据。本例中的图像分类器区分ARR、CHF和NSR。

算法流程

给出了Simulink模型的算法工作流框图。万博1manbetx

心电图深度学习Simulink模型万博1manbetx

给出了用万博1manbetx于心电信号分类的Simulink模型。当模型运行时,视频查看器块显示分类心电信号。

open_system (“ecg_dl_cwtMDL”);

心电预处理子系统

心电图预处理子系统包含MATLAB函数块,该块执行CWT获得心电信号的标量图,然后对标量图进行处理获得图像。它还包含一个图像分类器块从深度学习工具箱™加载预训练的网络trainedNet.mat并基于SqueezeNet深度学习CNN对图像分类进行预测。

open_system (“ecg_dl_cwtMDL /心电图预处理”);

ScalogramFromECG函数块定义了一个名为ecg_to_scalogram:

  • 使用65536个双精度心电数据样本作为输入。

  • 应用小波变换从心电数据中创建时频表示。

  • 由小波系数得到尺度图。

  • 将标量图转换为大小(227 × 227 × 3)的图像。

的函数签名ecg_to_scalogram显示。

类型ecg_to_scalogram
版权所有2020 The MathWorks, Inc. persistent jetdata;if(isempty(jetdata)) jetdata = ecgColorMap(128,'single');从心电信号cfs = cwt_ecg(ecg_signal)获取小波系数;从小波系数中获取尺度图image = ind2rgb(im2uint8(rescale(cfs)),jetdata);Ecg_image = im2uint8(imresize(image,[227,227]));结束

心电图后处理

心电图后处理MATLAB函数块定义label_prob_image函数,该函数根据图像分类器输出的分数中的最高分为标量图图像查找标签。它输出标签和置信度叠加的尺度图图像。

类型label_prob_image
The MathWorks, Inc. scores = double(scores);获得最大置信度[prob,index] = max(分数);置信度=概率*100;%获取最大置信度标签对应的标签= erase(char(labels(index)),'_label');Text = cell(2,1);text{1} =['分类:'标签];text{2} = ['Confidence: ' sprintf('%0.2f', Confidence)' % ');位置= [135 20 0 0;130 40 0 0]; final_image = insertObjectAnnotation(ecg_image,'rectangle',position,... text,'TextBoxOpacity',0.9,'FontSize',9); end

运行模拟

为了验证该算法,并显示加载在工作空间中的测试心电信号的标签和置信度评分,请运行仿真。

set_param (“ecg_dl_cwtMDL”“SimulationMode”“正常”);sim卡(“ecg_dl_cwtMDL”);

代码生成

借助GPU Coder™,您可以加速NVIDIA®GPU上模型的执行,并为模型生成CUDA®代码。看到用于心电信号分类的深度学习Simulink模型的代码生成万博1manbetx(GPU编码器)欲知详情。

清理

关闭Simulink万博1manbetx模型。

close_system (“ecg_dl_cwtMDL /心电图预处理”);close_system (“ecg_dl_cwtMDL”);