主要内容

用于深入学习Simulink模型的代码生成,用于分类ECG信号万博1manbetx

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

此示例说明以下概念:

  • 通过预处理和执行ECG数据的小波变换模拟Simulink中的分类应用程序万博1manbetx图像分类器从深度学习工具箱™块,用于加载预制网络并执行ECG数据的分类。

  • 配置代码生成模型。

  • 为Simulink模型生成可执行的CUDA。万博1manbetx

第三方先决条件

验证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,30名与瑞士法郎的人员录音的录音,以及与NSR人员的36人录音。这ECG_SIGNALS.MAT文件以时间序列格式包含测试ECG数据。此示例中的图像分类器可区分ARR,CHF和NSR。

算法工作流程

示出了用于Simulink模型的算法工作流的框图。万博1manbetx

ECG深度学习Simulink模型万博1manbetx

示出了用万博1manbetx于对ECG信号进行分类的Simulink模型。当模型运行时,视频查看器块显示分类的ECG信号。

Open_System('ecg_dl_cwt');

ECG预处理子系统

ECG预处理子系统包含A.Matlab功能执行CWT以获得ECG信号的标量程的块,然后处理缩放图以获得图像和一个图像分类器块从拍摄掠夺网络TroustNet.Mat.基于Sheezenet深学习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_SCALAPAL(ECG_SIGNAL)%CONFIGRY 2020 MathWorks,Inc.Persistent JetData;if(isempty(jetdata))jetdata = Colourmap(128,'单');END%从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,scores,标签)%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模型万博1manbetx

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

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

通过使用通过使用“在主机GPU上生成并构建Si万博1manbetxmulink模型RTWBuild.命令。代码生成器将文件放在一个中构建文件夹,一个名为的子文件夹ECG_DL_CWT_ERT_RTW.在您当前的工作文件夹下。

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

生成的CUDA®代码

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

清理

关闭Simulink万博1manbetx模型。

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