主要内容

心电信号深度学习Simulink模型的代码生成金宝app

这个例子演示了如何使用强大的信号处理技术和卷积神经网络来对心电信号进行分类。我们还将展示如何从Simulink®模型生成CUDA®代码。金宝app这个例子使用预先训练的CNN网络基于小波分析和深度学习的时间序列分类小波工具箱示例™ 根据时间序列数据的CWT图像对ECG信号进行分类。有关培训的信息,请参阅基于小波分析和深度学习的时间序列分类.

此示例说明了以下概念:

  • 在Simulink中建模分类应用。金宝app使用MATLAB函数块对心电数据进行预处理和小波变换。使用图像分类器block来自Deep Learning Toolbox™,用于加载预训练网络并对心电数据进行分类。

  • 为代码生成配置模型。

  • 为Simulink模型生成CUDA可执行文件。金宝app

第三方的先决条件

验证GPU环境

要验证运行此示例所需的编译器和库是否正确设置,请使用coder.checkGpuInstall(GPU编码器)功能。

envCfg = coder.gpuEnvConfig (“主机”); envCfg.DeepLibTarget=“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);

心电图数据描述

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

  1. 心律失常(ARR)患者

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

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

其中包括96份ARR患者的录音,30份CHF患者的录音,以及36份“噪音过高”患者的录音。这个ecg_signalsMAT文件包含时间序列格式的测试ECG数据。本例中的图像分类器区分ARR、CHF和NSR。

算法流程

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

心电深度学习Simulink模型金宝app

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

open_system (“ecg_dl_cwt”);

心电预处理子系统

这个心电预处理子系统包含一个MATLAB函数块,执行CWT以获取ECG信号的比例图,然后处理该比例图以获取图像和图像图像分类器从中加载预训练网络的块trainedNet.mat并基于挤压网深度学习CNN对图像分类进行预测。

open_system (“ecg\u dl\u cwt/ecg预处理”);

这个心电图标度图函数块定义一个名为心电标度图:

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

  • 通过应用小波变换从ECG数据创建时频表示。

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

  • 转换缩放图的大小(227x227x3)的图像。

签名的功能心电标度图显示。

类型心电标度图
函数ecg_image=ecg_至_标度图(ecg_信号)%MathWorks,Inc.持久jetdata版权所有;如果(isempty(jetdata))jetdata=colormap(128,'single');结束%从ECG信号中获取小波系数cfs=cwt_ECG(ECG_信号);%从小波系数图像中获取比例图=ind2rgb(im2uint8(重新缩放(cfs)),jetdata;ecg_image=im2uint8(imresize(图[227227]);结束

心电后处理

这个心电后处理MATLAB功能块定义了label_prob_image函数,该函数根据图像分类器输出的分数中的最高分为标度图图像找到标签。它输出标度图图像,上面印有标签和置信度。

类型label_prob_image
函数最终图像=标签问题图像(ecg图像,分数,标签)%MathWorks,Inc.版权所有。分数=双倍(分数);%获得最大置信度[prob,index]=max(分数);置信度=概率*100;%获取与最大置信标签对应的标签=擦除(字符(标签(索引)),“U标签”);文本=单元格(2,1);文本{1}=['Classification:'label];text{2}=['Confidence:'sprintf('%0.2f',Confidence')%];位置=[135 20 0;130 40 0 0];最终图像=插入对象注释(ecg图像,'矩形',位置,文本,'TextBoxOpacity',0.9,'FontSize',9);结束

运行模拟

打开“配置参数”对话框。

模拟目标窗格中,选择GPU加速. 在深度学习组,选择目标库为cuDNN.

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

set_param (“ecg_dl_cwt”,“模拟模式”,“正常”);sim卡(“ecg_dl_cwt”);

生成并构建Simulink模型金宝app

代码生成窗格中,选择语言作为C++并使生成GPU的代码.

打开代码生成> GPU代码窗玻璃在子类别中,使库布拉斯,库索尔弗卡夫特.

在主机GPU上使用生成和构建Simulink模金宝app型slbuild命令。代码生成器将文件放在生成文件夹,子文件夹名为ecg_dl_cwt_ert_rtw在当前工作文件夹下。

状态= evalc (“slbuild('ecg_dl_cwt')”);

生成的CUDA®代码

名为的子文件夹ecg_dl_cwt_ert_rtw包含生成的与Simulink模型中的不同块对应的c++代码,以及在这些块中执行的特定操作。金宝app例如,文件培训网络0\u ecg\u dl\u cwt0.h包含C++类,其中包含某些属性,如努姆莱耶斯以及成员功能,例如getBatchSize(),预测. 这个类代表预先训练好的学生挤压网已加载到Simulink模型中。金宝app

清理

关闭Simulink金宝app模型。

close_system (“ecg\u dl\u cwt/ecg预处理”);close_system (“ecg_dl_cwt”);

相关的话题