主要内容

Acoustics-Based机器故障识别与英特尔MKL-DNN代码生成

这个例子演示了代码生成Acoustics-Based机器故障识别使用很长一段短期记忆(LSTM)网络和光谱描述符。这个示例使用MATLAB®编码器™与深度学习支持生成一个墨西哥人(MATLAB可执行)的函数,利用性能英金宝app特尔®MKL-DNN图书馆。输入数据包括声学时序记录错误或健康的空气压缩机和输出是机械的状态机LSTM预测的网络。在音频预处理和网络培训的详细信息,请参见Acoustics-Based机器故障识别

例子要求

  • MATLAB编码器接口f或深度学习库支持包金宝app

  • 英特尔处理器支持英特尔高级向量扩展2(英特金宝app尔AVX2)

  • 英特尔深层神经网络库(MKL-DNN)

  • 英特尔MKL-DNN环境变量

为支持版金宝app本的库和设置环境变量信息,明白了先决条件与MATLAB编码器深度学习(MATLAB编码器)

准备输入数据集

指定一个采样率fs16 kHz和windowLength的512个样本,如中定义Acoustics-Based机器故障识别。集numFramesOne hundred.

fs = 16000;windowLength = 512;numFrames = 100;

要运行示例测试信号,生成一个粉红噪声信号。测试系统的性能在一个真实的数据集,数据集下载空气压缩机[1]

downloadDataset =虚假的;如果~ downloadDataset pinkNoiseSignal = pinknoise (windowLength * numFrames);其他的%下载AirCompressorDataset.zip组件=“音频”;文件名=“AirCompressorDataset / AirCompressorDataset.zip”;localfile = matlab.internal.examples.download金宝appSupportFile(组件,文件名);% downloadFolder解压缩下载的zip文件downloadFolder = fileparts (localfile);如果~ (fullfile (downloadFolder,存在“AirCompressorDataset”),“dir”)解压缩(localfile downloadFolder)结束%创建一个audioDatastore对象数据存储、管理数据。数据存储= audioDatastore (downloadFolder,“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);%使用countEachLabel每个类别的样本数据集的数量。countEachLabel(数据存储)结束

在MATLAB识别机器故障

在MATLAB运行流分类器,下载并解压缩系统开发的Acoustics-Based机器故障识别

组件=“音频”;文件名=“AcousticsBasedMachineFaultRecognition / AcousticsBasedMachineFaultRecognition.zip”;localfile = matlab.internal.examples.download金宝appSupportFile(组件,文件名);downloadFolder = fullfile (fileparts (localfile),“系统”);如果~存在(downloadFolder“dir”)解压缩(localfile downloadFolder)结束

访问recognizeAirCompressorFault系统的功能,添加downloadFolder搜索路径。

目录(downloadFolder)

创建一个dsp.AsyncBuffer对象音频流的方式和阅读dsp.AsyncBuffer对象积累分数。

audioSource = dsp.AsyncBuffer;scoreBuffer = dsp.AsyncBuffer;

加载pretrained网络,从网络中提取标签。

airCompNet = coder.loadDeepLearningNetwork (“AirCompressorFaultRecognitionModel.mat”);标签=字符串(airCompNet.Layers(结束). class);

初始化signalToBeTestedpinkNoiseSignal或从下拉列表中选择一个信号测试的文件您所选择的数据集。

如果~ downloadDataset signalToBeTested = pinkNoiseSignal;其他的[allFiles ~] = splitEachLabel(数据存储,1);allData = readall (allFiles);signalToBeTested =allData (6);signalToBeTested = cell2mat (signalToBeTested);结束

流一次一个音频帧代表系统部署在一个实时嵌入式系统。使用recognizeAirCompressorFault开发的Acoustics-Based机器故障识别计算音频功能和执行深度学习分类。

写(audioSource signalToBeTested);resetNetworkState = true;audioSource。NumUnreadSamples > = windowLength%得到音频数据的帧x =阅读(audioSource windowLength);%应用流分类器函数分数= recognizeAirCompressorFault (x, resetNetworkState);%存储分数进行分析写(scoreBuffer,得分);resetNetworkState = false;结束

计算分数的承认错误并显示它。

成绩=阅读(scoreBuffer);[~,labelIndex] = max(分数(最终,:),[],2);detectedFault =标签(labelIndex)
detectedFault =“飞轮”

情节的每一帧的每个标签。

情节(分数)传说(”“+标签,“位置”,“西北”)包含(“时间步”)ylabel (“分数”str = sprintf ()“预测成绩随着时间的步骤。\ nPredicted类:% s”,detectedFault);标题(str)

MATLAB生成可执行文件

创建一个代码生成配置对象生成一个可执行的。指定目标语言c++。

cfg = coder.config (墨西哥人的);cfg。TargetLang =“c++”;

创建一个配置对象的深度学习代码生成MKL-DNN图书馆。深度学习配置对象附加到代码生成配置对象。

dlcfg = coder.DeepLearningConfig (“mkldnn”);cfg。DeepLearningConfig = dlcfg;

创建一个音频数据帧的长度windowLength

audioFrame = 1 (windowLength, 1);

调用codegen(MATLAB编码器)从MATLAB函数编码器生成c++代码recognizeAirCompressorFault函数。指定配置对象和模型参数。一个MEX-file命名recognizeAirCompressorFault_mex生成你的当前文件夹。

codegen配置cfgrecognizeAirCompressorFaultarg游戏{audioFrame, resetNetworkState}报告
代码生成成功:查看报告

使用MATLAB执行执行机器故障识别

初始化signalToBeTestedpinkNoiseSignal或从下拉列表中选择一个信号测试的文件您所选择的数据集。

如果~ downloadDataset signalToBeTested = pinkNoiseSignal;其他的[allFiles ~] = splitEachLabel(数据存储,1);allData = readall (allFiles);signalToBeTested =allData (8);signalToBeTested = cell2mat (signalToBeTested);结束

流一次一个音频帧代表系统部署在一个实时嵌入式系统。使用生成的recognizeAirCompressorFault_mex计算音频功能和执行深度学习分类。

写(audioSource signalToBeTested);resetNetworkState = true;audioSource。NumUnreadSamples > = windowLength%得到音频数据的帧x =阅读(audioSource windowLength);%应用流分类器函数分数= recognizeAirCompressorFault_mex (x, resetNetworkState);%存储分数进行分析写(scoreBuffer,得分);resetNetworkState = false;结束

计算分数的承认错误并显示它。

成绩=阅读(scoreBuffer);[~,labelIndex] = max(分数(最终,:),[],2);detectedFault =标签(labelIndex)
detectedFault =“飞轮”

情节的每一帧的每个标签。

情节(分数)传说(”“+标签,“位置”,“西北”)包含(“时间步”)ylabel (“分数”str = sprintf ()“预测成绩随着时间的步骤。\ nPredicted类:% s”,detectedFault);标题(str)

评估替代墨西哥人函数的执行时间工作流

使用抽搐toc测量MATLAB函数的执行时间recognizeAirCompressorFault和MATLAB执行(墨西哥人)recognizeAirCompressorFault_mex

创建一个dsp.AsyncBuffer对象记录执行时间。

timingBufferMATLAB = dsp.AsyncBuffer;timingBufferMEX = dsp.AsyncBuffer;

使用相同的记录,你选择了在前一节作为输入recognizeAirCompressorFault函数和它的墨西哥人等价的recognizeAirCompressorFault_mex

写(audioSource signalToBeTested);

测量MATLAB代码的执行时间。

resetNetworkState = true;audioSource。NumUnreadSamples > = windowLength%得到音频数据的帧x =阅读(audioSource windowLength);%应用流分类器函数抽搐scoreMATLAB = recognizeAirCompressorFault (x, resetNetworkState);写(timingBufferMATLAB toc);%应用流分类器墨西哥人的功能抽搐scoreMEX = recognizeAirCompressorFault_mex (x, resetNetworkState);写(timingBufferMEX toc);resetNetworkState = false;结束

策划执行时间为每个框架和分析资料。第一次调用的recognizeAirCompressorFault_mex消耗大约四倍的预算,因为它包括加载网络和重置的州。然而,在实际部署系统,初始化时间只发生一次。MATLAB函数的执行时间大约是10 ms的墨西哥人功能~ 1 ms,这远远低于32女士预算实时性能。

预算= (windowLength / fs) * 1000;timingMATLAB =阅读(timingBufferMATLAB) * 1000;timingMEX =阅读(timingBufferMEX) * 1000;frameNumber = 1:元素个数(timingMATLAB);perfGain = timingMATLAB. / timingMEX;情节(frameNumber timingMATLAB、frameNumber timingMEX,“线宽”,2)网格yline(预算,,{“预算”},“线宽”2)传说(“MATLAB函数”,“墨西哥人函数”,“位置”,“西北”)包含(“时间步”)ylabel (“执行时间”(女士))标题(“MATLAB和墨西哥人函数的执行时间配置文件”)

计算性能的墨西哥人扣除第一次调用MATLAB函数。这样做性能测试是在一台计算机上使用NVIDIA方形住宅区P620(26)版GPU和Intel®3.60 GHz Xeon®w - 2133 CPU。

PerformanceGain =总和(timingMATLAB(2:结束))/笔(timingMEX(2:结束)
PerformanceGain = 15.5501

这个例子在这里结束。部署机器故障识别覆盆子π,明白了Acoustics-Based机器故障识别代码生成树莓π

引用

[1]Verma Nishchal K。,等。基于“智能状态监测用空气压缩机的声学信号。”IEEE可靠性,卷65,不。1、2016年3月,页291 - 309。DOI.org (Crossref), doi: 10.1109 / TR.2015.2459684。