主要内容

基于深度学习的Simulink心电信号分类

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

心电图数据描述

这个例子使用的是生理网数据库。它包含了三组人的数据:

  1. 患有心律失常的人

  2. 充血性心力衰竭人士

  3. 窦性心律正常者(NSR)

它包括96个ARR患者的录音,30个CHF患者的录音,36个NSR患者的录音。的ecg_signalsmat文件包含时间序列格式的测试心电图数据。本例中的图像分类器区分ARR、CHF和NSR。

算法流程

给出了Simulink模型的算法流程框图。

心电图深度学习Simulink模型

给出了用于心电信号分类的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
function ecg_image = ecg_to_scalogram(ecg_signal) %版权所有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(形象,[227227]));结束

心电图后处理

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

类型label_prob_image
The MathWorks, Inc. scores = double(scores);%获得最大置信度[prob,index] = max(分数);信心=概率* 100;获取最大置信度标签= erase(char(labels(index)),'_label');文本=细胞(2,1);text{1} = [' category: ' label];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模型的代码生成(GPU编码器)为更多的细节。

清理

关闭Simulink模型。

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