这个例子展示了如何在Simulink (R)模型中使用小波变换和深度学习网络来分类心电信号。万博1manbetx这个例子使用了来自利用小波分析和深度学习对时间序列进行分类小波工具箱™的例子,以分类心电信号的图像从CWT的时间序列数据。有关培训的信息,请参见利用小波分析和深度学习对时间序列进行分类(小波工具箱).
本例使用的ECG数据来自生理网数据库。它包含了三组人的数据:
心律不齐(ARR)患者
充血性心力衰竭患者
窦性心律正常者
其中包括96份ARR患者的录音,30份CHF患者的录音,以及36份“噪音过高”患者的录音。的ecg_signals
mat文件以时间序列格式包含测试心电数据。本例中的图像分类器区分ARR、CHF和NSR。
给出了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
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模型代码生成万博1manbetx(GPU编码器)为更多的细节。
关闭Simulink万博1manbetx模型。
close_system (“ecg_dl_cwtMDL /心电图预处理”);close_system (“ecg_dl_cwtMDL”);