这个例子展示了如何在Simulink (R)模型中使用小波变换和深度学习网络来分类心电信号。万博1manbetx这个例子使用了预训练的卷积神经网络利用小波分析和深度学习对时间序列进行分类小波工具箱™基于连续小波变换的时间序列数据的图像来分类心电信号的例子。有关培训的信息,请参见利用小波分析和深度学习对时间序列进行分类(小波工具箱).
这个例子使用的心电图数据来自生理网数据库。它包含三组人的数据:
心律失常患者(ARR)
充血性心力衰竭患者
鼻窦节律正常者(NSR)
其中包括96份ARR的录音,30份CHF的录音,以及36份NSR的录音。的ecg_signals
mat文件包含时间序列格式的测试心电数据。本例中的图像分类器区分了ARR、CHF和NSR。
给出了Simulink模型的算法流程框图。万博1manbetx
给出了心万博1manbetx电信号分类的Simulink模型。当模型运行时,视频查看器
块显示分类心电信号。
open_system (“ecg_dl_cwtMDL”);
的心电图预处理
子系统包含一个MATLAB函数
块,执行小波变换得到心电信号的尺度图,然后对尺度图进行处理得到图像。它还包含一个图像分类器
从深度学习工具箱™加载预先训练的网络trainedNet.mat
并基于SqueezeNet深度学习CNN对图像分类进行预测。
open_system (“ecg_dl_cwtMDL /心电图预处理”);
的ScalogramFromECG
函数块定义一个被调用的函数ecg_to_scalogram
:
采用65536个双精度心电数据作为输入。
利用小波变换建立心电数据的时频表示。
由小波系数得到尺度图。
将尺度图转换为大小(227 * 227 * 3)的图像。
的功能签名ecg_to_scalogram
显示。
类型ecg_to_scalogram
Copyright 2020 The MathWorks, Inc. persistent jetdata;如果(isempty(jetdata)) jetdata = colourmap(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
Copyright 2020 The MathWorks, Inc. scores = double(scores);%获得maximum confidence [probb,index] = max(scores);信心=概率* 100;%获取最大置信度对应的标签label = erase(char(labels(index)),'_label');文本=细胞(2,1);text{1} =['分类:'标签];text{2} =['信心:' sprintf('%0.2f',信心)]' % ');位置= [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”);