这个例子展示了如何在Simulink (R)模型中使用小波变换和深度学习网络来分类心电信号。金宝app这个例子使用了来自利用小波分析和深度学习对时间序列进行分类小波工具箱™的例子,以分类心电信号的图像从CWT的时间序列数据。有关培训的信息,请参见利用小波分析和深度学习对时间序列进行分类(小波工具箱).
此示例使用ECG数据生理网数据库。它包含了三组人的数据:
心律不齐(ARR)患者
充血性心力衰竭患者
窦性心律正常者
它包括来自arr的人员的96篇录音,从瑞士法郎的人员30名录音,并从NSR的人员录音。的ecg_signals
mat文件以时间序列格式包含测试心电数据。本例中的图像分类器区分ARR、CHF和NSR。
示出了用于Simulink模型的算法工作流的框图。金宝app
示出了用金宝app于分类ECG信号的Simulink模型。当模型运行时,视频查看器
块显示分类的ECG信号。
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) % Copyright 2020 The MathWorks, Inc. persistent jetdata;If (isempty(jetdata)) jetdata = colourmap(128,'single');从心电信号中得到小波系数cfs = cwt_ecg(ecg_signal);%从小波系数图像中获取尺度图= ind2rgb(im2uint8(rescale(cfs)),jetdata);ecg_image = im2uint8 (imresize(形象,[227227]));结束
的心电图后处理
MATLAB函数块定义label_prob_image.
基于从图像分类器输出的分数的最高分数找到缩放图像的标签的功能。它输出标签和叠加的缩放图像覆盖。
类型label_prob_image.
function final_image = label_prob_image(ecg_image, scores, labels) % Copyright 2020 The MathWorks, Inc. scores = double(scores);获得最大置信[probb,index] = max(scores);信心=概率* 100;%获取最大置信度对应的标签label = erase(char(labels(index)),'_label');文本=细胞(2,1);text{1} =['分类:'标签];text{2} =['信心:' sprintf('%0.2f',信心)]' % ');Position = [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模型代码生成金宝app(GPU编码器)更多细节。
关闭Simulink金宝app模型。
close_system(“ecg_dl_cwtMDL /心电图预处理”);close_system(“ecg_dl_cwtMDL”);