主要内容

이번역페이지는최신내용을담고있지않습니다。최신내용을영문으로보려면여기를클릭하십시오。

覆盆子pi에신호분할심층신경망배포

이예제에서에서는단시간시간푸리에과양방향장단기(BILSTM)신경망신경망사용하여심전(ecg)신호신호파형분할하는를자세히설명분할하는를자세히설명합니다。또한,신호분할에사용되는코드와훈련된BiLSTM신경망을생성하고树莓裨™타깃(ARM®기반장치)에배포하는방법에관한정보도제공합니다。

이예제의사전훈련된신경망은딥러닝을사용한파형분할예제와비슷합니다。

이예제에서는다음을설명합니다。

  • 생성된코드가覆盆子π에배포되어실행되는것을MATLAB™에서검증하는公益诉讼(Processor-in-the-Loop)기반워크플로

  • 독립형실행파일생성

pil검증과정은독립형실행을배포하기전에생성코드의동작이설계와일치하는지확인하는주기의한부분입니다입니다주기의한부분입니다。

심전도데이터셋

이예제에서는공개적으로사용가능한QT데이터베이스의심전도신호를사용합니다(1] [2].105年이데이터는총명의환자로부터샘플레이트250 hz로측정한약15분분량의레이블이지정된심전도기록으로구성되었습니다。

심전심전도신호는다음다음심박모폴로지로나눌수3.].

  • p파 - 심방탈분극을나타qrs복합파이전의의편향

  • QRS복합파 - 심박의최대진폭부분

  • T파-심실재분극을나타내는QRS복합파이후의작은편향

심전도파형의이영역을분할하여사람심장의전반적인상태및이상유무를가늠하는측정기준을마련할수있습니다。

선행조건

지원되는라이브러리버전과환경변수설정에관한정보는深度学习与MATLAB编码器的先决条件(MATLAB编码器)(MATLAB编码器)항목을참조하십시오。

생성된코드의기능

생성된실행파일의핵심함수는다음을수행합니다。

  • 15,000개의단정밀도심전도이터샘플을입력값사용합니다。

  • 신호에대해단시간푸리에변환을계산합니다。

  • 출력값을표준화및정규화합니다。

  • 사전훈련된BiLSTM신경망을사용하여신호영역에레이블을지정합니다。

  • 레이블이있는출력파일을생성합니다。

waveformSegmentation함수

최상위함수또는함수라고도하는진입점함수함수는코드생성생성을정의하는함수함수코드생성이활성화된함수를호출진입점함수로부터c / c ++코드를생성하는함수정의해야합니다。진입점함수내의모든함수는코드생성을지원해야합니다。

이예제에서는waveformSegmentation이진입점함수입니다。이함수는심전도신호를입력값으로사용하고예측을위해입력값을훈련된BiLSTM신경망에전달합니다。performPreprocessing함수는원시신호를전처리하고단시간푸리에변환을적용합니다。genClassifiedResults00

类型waveformSegmentation
函数out = waveformsegation(in)%#codegen持久网络;如果是isempty(net)net = coder.loaddeeplearningnetwork('训练网络-stftbilstm.mat','net');End PreprocessedSignal = perforprepepessing(in);出=细胞(3,1);对于Indx = 1:3 out {indx,1} = genclassifedresults(net.predict(preprocessedsignal {1,Indx}));结束

覆盆子pi에대한연결생성하기

MATLAB支万博1manbetx持包树莓π함수raspi를사용하여覆盆子π에대한연결을생성합니다。아래코드를다음과같이변경합니다。

  • “raspiname”을사용중인覆盆子π이름으로변경

  • 'pi'를사용자이름으로으로

  • “密码”를사용자비밀비밀번호로로

r = raspi(“raspiname”'pi'“密码”);

이예제에서는코드와설계의검증을위한公益诉讼기반워크플로를살펴본다음독립형실행파일을만들고배포합니다。선택적으로,독립형실행파일을직접배포하려면公益诉讼실행을건너뛰고독립형실행파일만들기로이동하면됩니다。

公益诉讼墨西哥人함수생성하기

첫번째단계에서는waveformSegmentation함수용墨西哥人함수를생성하는기趁手반워크플로를알아봅니다。

정적라이브러리를위한코드생성구성객체설정하기

정적정적이브러리를를위한위한코드구성구성를만들고검증모드모드'PIL'로설정합니다。대상언어를“c++”로설정합니다。

cfg = coder.config('lib'“是”,真的);cfg.verificationMode =.'PIL';cfg。TargetLang =“c++”

딥러닝코드생성을위한구성객체설정하기

编码器。ARMNEONConfig객체를만듭니다。ARM Compute Library의의버전raspberrypi에있는버전으로지정합니다。覆盆子pi의아키텍처를합니다합니다。(이예제예제에서ARM Compute Library v19.05가필요필요)

dlcfg =编码器。DeepLearningConfig ('arm-compute');dlcfg。ArmComputeVersion ='19 .05';dlcfg.armArchitecture ='ARMV7'

코드생성구성객체의DeepLearningConfig속성을딥러닝구성객체로설정합니다。MATLAB소codegen에서스주석이표시되도록구성객체를설정합니다。

cfg.deeplearningconfig = dlcfg;cfg.matlabsourcecomments = 1;

覆盆子π를위한코드생성하드웨어파라미터구성하기

覆盆子pi용编码器。硬件객체를만들고이를코드코드생성구성구성객체연결연결연결연결연결

hw = coder.hardware('覆盆子pi');cfg。硬件= hw;

覆盆子π에빌드폴더를지정합니다。

cfg.hardware.builddir =.'〜/波形'

codegen함수를사용하여소스c++코드생성하기

codegen함수를사용하여c++코드를생성합니다。MATLAB支万博1manbetx持包树莓π硬件와함께codegen을사용하는하는,생성된코드가보드에다운로드되어컴파일。matlab과覆盆子pi에서실행되는생성된코드의통신을위해pil pemx함수가생성됩니다。

覆盆子pi에서환경변수ARM_COMPUTELIBld_library_path.를설정해야합니다。深度学习与MATLAB编码器的先决条件(MATLAB编码器)(MATLAB编码器)항목을참조하십시오。

codegen配置CFG.waveformSegmentation-  args.{coder.typeof(单((15000)),[15000],[0])}报告
###目标设备没有本机通信支持。万博1manbetx检查连接配置注册...部署代码。这可能需要几分钟的时间。###目标设备没有本机通信支持。万博1manbetx检查连接配置注册... ###功能'waveformseation'的连接配置:'Raspberry PI'生成的ELF的位置:/ Home / Pi / WaveformSegation / MATLAB_WS / R2020B / C /用户/ Eshashah / Onedrive _-_ Mathworks / Documents/ matlab / examples / deeplearning_shared-ex28372959 / codegen / lib / waveformsegation / pil代码代成成功:查看报告

覆盆子π에서실행프로그램실행하기

垫子Ecgsignal_test.를불러옵니다。이파일은은생성된된코드테스트할수있는샘플심전심전신호를저장하고하고신호를저장하고하고

테스트신호에대해생성된waveformSegmentation_pil墨西哥人함수를실행합니다。

加载ecgsignal_test.mat;= waveformSegmentation_pil(测试);
###启动应用程序:'codegen\lib\waveformSegmentation\pil\waveformSegmentation。###启动应用程序waveformSegmentation.elf…

예측된레이블과함께신호를표시합니다。

标签=分类(出{1}(1,2000:3000));msk = signalmask(标签);Plotsigroi(MSK,测试(1,2000:3000))标题('预测标签'的)

公益诉讼墨西哥人함수의출력값을확인한후,waveformSegmentation함수의독립형실행파일을만들수있습니다。

이어지는부분에서는MATLAB编码器앱을사용하여독립형실행파일을생성하고覆盆子π에서예측하기위한코드내에배포하는코드생성워크플로를보여줍니다。

MATLAB编码器앱을사용하여독립형실행파일만들기

MATLAB编码器앱은MATLAB®코드로부터C코드나c++코드를생성합니다。워크플로기반의사용자인터페이스단계에따라코드생성과정을진행할수있습니다。다음단계에서는MATLAB编码器앱을사용하는간략한워크플로를설명합니다。자세한내용은MATLAB编码器(MATLAB编码器)使用MATLAB编码器应用程序生成C代码(MATLAB编码器)항목을참조하십시오。

진입점함수파일선택하기

00코드생성아래에있는MATLAB编码器를클릭합니다。앱에选择源文件페이지가열립니다。진입점함수이름인waveformSegmentation을입력하거나선택합니다。

下一个를클릭하여定义输入类型페이지로이동합니다。

입력유형정의하기

1.让我直接输入输入或全局类型를선택하고입력값을单형(1 x15000)으로설정합니다。

2.下一个를클릭하여生成代码단계로이동합니다。ARM Compute Library를사용한코드생성에서mex생성이지원되지않으므로检查运行时间问题단계는건너뜁니다。

코드생성하기

1.코드생성대화상자에서값을설정합니다。

  • 构建类型可执行文件(. exe)로설정합니다。

  • C ++로설정합니다。

  • 硬件板覆盆子PI.로설정합니다。

2.更多设置버튼을클릭합니다。

  • 自定义代码창에있는추가소스소스(附加源文件)에서ecgsegmentation_main.cpp를찾아서선택합니다。C / c++메인함수작성에대한자세한내용은生成示例C / C ++主要功能的结构(MATLAB编码器)항목을참조하십시오。

  • 硬件창에서覆盆子pi보드의用户名密码를설정합니다。

  • 深度学习창에서目标库ARM Compute.로설정합니다。ARM Compute库版本arm compute架构를지정합니다。

3.설정설정창을닫고닫고를를생성

4.下一个를클릭하여完成工作流程페이지로이동합니다。

생성된실행파일디렉터리가져오기

생성된코드를覆盆子π에서테스트하기위한다음과같은코드라인생성이완료되면심전도신호입력값을생성된코드디렉터리에복사합니다。이디렉터리는직접찾거나Raspi.utils.getRemoteBuildDirectory.API를사용하여찾을수있습니다。이함수는codegen함수를사용하여생성된이진파일의디렉터리를나열합니다。이진파일이하나의디렉터리에만있다고가정하고다음을입력합니다。

applicationdirpaths = ...

raspi.utils.getRemoteBuildDirectory(“applicationName”、“waveformSegmentation”);

targetdirpath = applicationDirpaths {1} .Directory;

입력파일을覆盆子π에복사하기

실행프로그램을실행하는데필요한파일을복사하려면Putfile.을사용합니다。이함수는MATLAB支持包万博1manbetx树莓π硬件가있어야사용할수있습니다。Input.csv.이도신호샘플샘플신호신호샘플샘플샘플샘플샘플신호샘플샘플샘플샘플샘플샘플샘플샘플샘플샘플샘플샘플샘플샘플。

r.cputfile('input.csv',targetdirpath);

输入= dlmread(“input.csv”);

覆盆子π에서실행프로그램실행하기

matlab에서覆盆子pi에있는실행프로그램을실행출력파일을matlab으로가져옵니다。입력파일이름을을실행실행파일의명령줄줄로해야해야해야해야

exename ='waveformse派..%可执行名称

命令= ['cd ' targetDirPath ';/ ' exeName];

系统(r,命令)

outputPath = strcat (targetDirPath, / * . txt);

getfile(r,输出路径)

예측된레이블과함께신호를표시합니다。출력값이그림에표시되어있습니다。

加载ecgsignal_test.mat;

标签=分类(textread('out.txt','%s')');

msk = signalMask(标签(1,2000:3000));

2000:3000 plotsigroi (msk、测试(1))

标题('预测标签')

참고문헌

[1] McSharry,Patrick E.等。“一种用于产生合成心电图信号的动态模型。”生物医学工程学报。卷。50,第3,2003,PP。289-294。

[2] Laguna,Pablo,RaimonJané,Pere Caminal。“自动检测多放宽ECG信号中的波边界:使用CSE数据库验证。”计算机和生物医学研究。卷。27,第1,1994,第45-60页。45-60。

[3] Goldberger,Ary L.,Luis A. N. Amaral,Leon Glass,Jeffery M. Hausdorff,Plamen Ch。伊万诺夫,罗杰尔G. Mark,Joseph E. Mietus,George B.穆迪,Chung-Kang Peng,H. Eugene Stanley。“Physiobank,PhysioToolkit和PhysioIoneet:复杂生理信号的新研究资源的组成部分。”循环。卷。101,23,2000,PP。E215-E220。[循环电子页面,http://circ.ahajournals.org/content/101/23/e215.full].

참고항목

함수

관련항목