이번역페이지는최신내용을담고있지않습니다。최신내용을영문으로보려면여기를클릭하십시오。
이예제에서에서는단시간시간푸리에과양방향장단기(BILSTM)신경망신경망사용하여심전(ecg)신호신호파형분할하는를자세히설명분할하는를자세히설명합니다。또한,신호분할에사용되는코드와훈련된BiLSTM신경망을생성하고树莓裨™타깃(ARM®기반장치)에배포하는방법에관한정보도제공합니다。
이예제의사전훈련된신경망은딥러닝을사용한파형분할예제와비슷합니다。
이예제에서는다음을설명합니다。
생성된코드가覆盆子π에배포되어실행되는것을MATLAB™에서검증하는公益诉讼(Processor-in-the-Loop)기반워크플로
독립형실행파일생성
pil검증과정은독립형실행을배포하기전에생성코드의동작이설계와일치하는지확인하는주기의한부분입니다입니다주기의한부분입니다。
이예제에서는공개적으로사용가능한QT데이터베이스의심전도신호를사용합니다(1] [2].105年이데이터는총명의환자로부터샘플레이트250 hz로측정한약15분분량의레이블이지정된심전도기록으로구성되었습니다。
심전심전도신호는다음다음심박모폴로지로나눌수3.].
p파 - 심방탈분극을나타qrs복합파이전의의편향
QRS복합파 - 심박의최대진폭부분
T파-심실재분극을나타내는QRS복합파이후의작은편향
심전도파형의이영역을분할하여사람심장의전반적인상태및이상유무를가늠하는측정기준을마련할수있습니다。
霓虹灯확장을지원하는手臂프로세서
臂计算库(타깃手臂하드웨어에필요)
MATLAB®Coder™
嵌入式编码器™
深度学习工具箱™
지원되는라이브러리버전과환경변수설정에관한정보는深度学习与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}));结束
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_COMPUTELIB
와ld_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®코드로부터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].
codegen
(MATLAB编码器)|FSST.
|signalMask