主要内容

用于深入学习Simulink模型的代码生成,用于分类ECG信号金宝app

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

此示例说明以下概念:

  • 模拟Simulink中的分类应用程序。金宝app用Matlab功能块执行ECG数据的预处理和小波变换。使用图像分类器从深度学习工具箱™块,用于加载预制网络并执行ECG数据的分类。

  • 配置代码生成模型。

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

第三方先决条件

验证GPU环境

要验证运行此示例所需的编译器和库是否正确设置,请使用Coder.CheckGPuInstall.功能。

envcfg = coder.gpuenvconfig('主持人');envcfg.deeplibtarget =.'cudnn';envcfg.deepcodegen = 1;Envcf​​g.quiet = 1;Coder.CheckGpuInstall(Envcf​​g);

ECG数据描述

此示例使用ECG数据物理体数据库。它包含来自三组人的数据:

  1. 心脏心律失常的人(Arr)

  2. 充血性心力衰竭的人(CHF)

  3. 鼻窦节奏的人(NSR)

它包括来自arr的人员的96篇录音,从瑞士法郎的人员30名录音,并从NSR的人员录音。这ECG_SIGNALS.MAT文件以时间序列格式包含测试ECG数据。此示例中的图像分类器可区分ARR,CHF和NSR。

算法工作流程

示出了用于Simulink模型的算法工作流的框图。金宝app

ECG深度学习Simulink模型金宝app

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

Open_System('ecg_dl_cwt');

ECG预处理子系统

心电图预处理子系统包含A.Matlab功能执行CWT以获得ECG信号的标量程的块,然后处理标量程以获取图像和一个图像分类器块从覆盖掠夺网络TRAIRATERNET.MAT.基于挤压深度学习CNN对图像分类进行预测。

Open_System('ECG_DL_CWT / ECG预处理');

ScalographFromecg.功能块定义一个调用的函数ECG_TO_SCALAPP.那:

  • 使用65536个样本的双精度ECG数据作为输入。

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

  • 从小波系数获取缩放图。

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

函数签名ECG_TO_SCALAPP.显示。

类型ECG_TO_SCALAPP.
函数ECG_IMAGE = ECG_TO_SCALAP图(ECG_SIGNAL)%CONFIGRY 2020 MathWorks,Inc.Persistent JetData;if(isempty(jetdata))jetdata = Colourmap(128,'单');终端%从ECG信号CFS = CWT_ECG(ECG_SIGNAL)获得小波系数;%从小波系数图像= IND2RGB(IM2UINT8(Rescale(CFS)),JetData)中获得缩放图;ECG_IMAGE = IM2UINT8(IMRESIZE(图像,[227,227]));结尾

ECG后处理

ECG后处理MATLAB功能块定义label_prob_image.基于从图像分类器输出的分数的最高分数找到缩放图像的标签的功能。它输出标签上的标签和打印上的信心。

类型label_prob_image.
function final_image = label_prob_image(ecg_image,sicrors,标签)%copyright 2020 Mathworks,Inc。得分= Double(得分);%获得最大置信度[prob,index] = max(得分);信心= prob * 100;%获得对应于最大置信标签的标签=擦除(char(标签(索引)),'_标签');text = cell(2,1);文本{1} = ['分类:'标签];文本{2} = ['信心:Sprintf('%0.2f',置信度)'%'];位置= [135 20 0 0;130 40 0 0];final_image = InsertObjectAnnotation(ECG_IMAGE,'矩形',位置,文本,'TextBoxopacity',0.9,'Fontsize',9); end

运行模拟

打开配置参数对话框。

仿真目标窗格,选择GPU加速。在里面深度学习组,选择目标库作为CUDNN.

要验证算法并显示在工作区中加载的测试ECG信号的标签和置信度分数,请运行模拟。

set_param('ecg_dl_cwt''simulationmode''普通的');SIM('ecg_dl_cwt');

生成并构建Simulink模型金宝app

代码生成窗格,选择作为C ++和启用生成GPU代码

打开代码> GPU代码窗格。在子类别中图书馆, 使能够Cublas.Cusolver.袖口

通过使用通过使用主机GPU在主机GPU上生成并金宝app构建Simulink模型SLBUILD.命令。代码生成器将文件放在一个中构建文件夹,一个名为的子文件夹ECG_DL_CWT_ERT_RTW.在当前的工作文件夹下。

status = evalc(“SLBUILD('ECG_DL_CWT')”);

生成的CUDA®代码

子文件夹命名ECG_DL_CWT_ERT_RTW.包含与Simulink模型中的不同块对应的生成的C ++代码以及在这些块中执行的特定操作。金宝app例如,文件TRAINATENNET0_ECG_DL_CWT0.H.包含包含某些属性的C ++类,例如numlayers.和成员职能等getbatchsize()预测()。这个班级代表预追查挤压已加载在Simulink模型中。金宝app

清理

关闭Simulink金宝app模型。

close_system('ECG_DL_CWT / ECG预处理');close_system('ecg_dl_cwt');

也可以看看

职能

相关话题