主要内容

使用小波散射和复发性深网络故障检测

这个例子展示了如何在声学故障分类的录音空气压缩机使用小波散射网络搭配了一个递归神经网络。提供机会的例子使用GPU加速小波散射变换的计算。如果你想利用GPU,你必须有并行计算工具箱™和GPU的支持。金宝app看到GPU计算的需求(并行计算工具箱)获取详细信息。

数据集

声录音收集的数据集包含一个单级往复式空气压缩机(1]。这些数据是在16岁千赫采样。空气压缩机的规格如下:

  • 空气压力范围:0 - 500磅/ m2, 0-35公斤/平方厘米

  • 感应电动机:5 hp 415 v, 5点,50赫兹,1440 rpm

  • 压力开关:15,范围100 - 213 PSI

每个记录代表一个7 8个州包括健康状态和故障状态。7个错误的状态包括:

  1. 漏进气阀(LIV)的错

  2. 漏出口阀(值列表)的错

  3. 止回阀(NRV)的错

  4. 活塞环的错

  5. 飞轮的错

  6. 骑士带错

  7. 轴承故障

数据集下载并解压缩数据文件在一个文件夹,你有写权限。这个例子假定您在下载临时目录中的数据指定为tempdir在MATLAB®。如果你选择使用不同的文件夹中,该文件夹代替tempdir在下面。录音被存储为。wav文件在文件夹命名为各自的国家。

url =“//www.tatmou.com/金宝appsupportfiles/audio/AirCompressorDataset/AirCompressorDataset.zip”;downloadFolder = fullfile (tempdir,“AirCompressorDataSet”);如果~ (fullfile (tempdir,存在“AirCompressorDataSet”),“dir”)loc = websave (downloadFolder url);解压缩(loc fullfile (tempdir“AirCompressorDataSet”))结束

使用一个audioDatastore管理数据访问。每个子文件夹仅包含指定类的录音。使用文件夹名称的类标签。

datasetLocation = fullfile (tempdir,“AirCompressorDataSet”,“AirCompressorDataset”);广告= audioDatastore (datasetLocation,“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);

检查每个类的例子。每个班有225记录。

countcats (ads.Labels)
ans =8×1225 225 225 225 225 225 225 225

将数据分为训练集和测试集。使用80%的数据进行训练和坚持剩下的20%进行测试。洗牌一次分裂的数据。

rng默认的广告= shuffle(广告);[adsTrain, adsTest] = splitEachLabel(广告,0.8,0.2);

验证每个类的例子是预期的数量。

uniqueLabels =独特(adsTrain.Labels);tblTrain = countEachLabel (adsTrain);tblTest = countEachLabel (adsTest);H =酒吧(uniqueLabels, [tblTrain。数,tblTest.Count],“堆叠”);传奇(H, [“训练集”,“测试集”),“位置”,“NorthEastOutside”)

选择一些随机绘图训练集的例子。

idx = randperm(元素个数(adsTrain.Files), 8);Fs = 16 e3;n = 1:元素个数(idx) x = audioread (adsTrain.Files {idx (n)});t =(0:大小(x, 1) 1) / Fs;次要情节(4 2 n);情节(t, x);如果7 n = = | | n = = 8包含(“秒”);结束标题(string (adsTrain.Labels (idx (n))));结束

小波散射网络

每个记录有50000 16岁千赫采样样本。构造小波散射网络基于数据特征。设置不变性规模为0.5秒。

N = 5 e4;Fs = 16 e3;= 0.5;sn = waveletScattering (“SignalLength”N“SamplingFrequency”Fs,“InvarianceScale”,0.5);

有了这些网络设置,有330散射路径和25时间窗口的例子。你可以看到下面的代码。

[~,npaths] =路径(sn);Ncfs = numCoefficients (sn);总和(npaths)
ans = 330
Ncfs
Ncfs = 25

注意这已经代表了一个倍减少每个记录的数据的大小。我们减少了数据规模从50000年到8250年的总样本。最重要的是,我们减少了数据在时间维度的大小从50000年到25个样本。这是至关重要的对我们使用的网络。试图使用一个周期性网络原始数据与50000年样品会立即导致记忆问题。

得到小波散射特性的训练集和测试集。如果你有一个合适的GPU并行计算工具箱,您可以设置useGPU真正的加快散射变换。这个函数helperBatchScatFeatures获得每个的散射变换的例子。

batchsize = 64;useGPU = false;scTrain = [];hasdata (adsTrain) sc = helperBatchScatFeatures (adsTrain、锡、N, batchsize useGPU);scTrain =猫(3 scTrain sc);结束

重复这个过程的测试集。

sct = [];hasdata (adsTest) sc = helperBatchScatFeatures (adsTest、锡、N, batchsize useGPU);sct =猫(3 sct sc);结束

把六月十阶散射系数。为训练集和测试集,将每个330 -由25个单元阵列的散射变换成一个元素用于培训和测试循环网络。

TrainFeatures = scTrain (2:,:,);TrainFeatures =挤压(num2cell (TrainFeatures [1 - 2]));YTrain = adsTrain.Labels;TestFeatures = sct (2:,:,);TestFeatures =挤压(num2cell (TestFeatures [1 - 2]));欧美= adsTest.Labels;

定义网络

召回有1440训练例子和360测试集的例子。相应的TrainFeaturesTestFeatures细胞数组分别有1440和360个元素。

利用散射路径的数量特征的数量。创建一个周期性网络与单个LSTM隐藏层有512个单位。遵循LSTM层与一个完全连接层最后一个softmax层。使用“zscore”规范化所有散射路径网络的输入。

[inputSize ~] =大小(TrainFeatures {1});numHiddenUnits = 512;numClasses =元素个数(独特(YTrain));层= [sequenceInputLayer (inputSize“归一化”,“zscore”)lstmLayer (numHiddenUnits“OutputMode”,“最后一次”)fullyConnectedLayer (numClasses) softmaxLayer classificationLayer];

列车网络的

列车网络与一个迷你50时代批处理大小为128。优化器使用一个亚当,最初学习的速度1的军医。每个时代洗牌的数据。

maxEpochs = 50;miniBatchSize = 128;选择= trainingOptions (“亚当”,“InitialLearnRate”1的军医,“MaxEpochs”maxEpochs,“MiniBatchSize”miniBatchSize,“SequenceLength”,“最短”,“洗牌”,“every-epoch”,“阴谋”,“训练进步”,“详细”,真正的);网= trainNetwork (TrainFeatures、YTrain层,选择);
培训在单CPU。初始化输入数据规范化。| = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | | |时代迭代时间| Mini-batch | Mini-batch |基地学习| | | | (hh: mm: ss) | | |损失精度率| | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | 1 | 1 | 00:00:08 | 16.41% | 2.1281 | 1.0000 e-04 | | 5 | 50 | 00:00:59 | 100.00% | 0.0536 | 1.0000 e-04 | | 100 | | 00:01:51 | 100.00% | 0.0072 | 1.0000 e-04 | | 150 | | 00:02:40 | 100.00% | 0.0064 | 1.0000 e-04 | | 19 | 200 | 00:03:27 | 100.00% | 0.0025 | 1.0000 e-04 | | 23 | 250 | 00:04:14 | 100.00% | 0.0015 | 1.0000 e-04 | | 300 | | 28 00:05:00 | 100.00% | 0.0012 | 1.0000 e-04 | | 32 | 350 | 00:05:45 | 100.00% | 0.0007 | 1.0000 e-04 | | 400 | | 37 00:06:29 | 100.00% | 0.0006 | 1.0000 e-04 | | 41 | 450 | 00:07:12 | 100.00% | 0.0005 | 1.0000 e-04 | | 46 | 500 | 00:07:55 | 100.00% | 0.0005 | 1.0000 e-04 | | 550 | | 00:08:41 | 100.00% | 0.0004 | 1.0000 e-04 | | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |培训完成:达到最终的迭代。

在训练中,网络取得了近乎完美的表现。为了确保我们没有overfit训练数据,使用了测试集来确定我们的网络推广到看不见的数据。

YPred =分类(净,TestFeatures);精度= 100 * (YPred = =次)/元素个数之和(欧美)
精度= 100

在这种情况下,我们看到了测试集上的表现也很好。

YPred图confusionchart(欧美)

总结

在这个例子中,使用小波散射变换用一个简单的周期性网络以空气压缩机故障进行分类。散射变换允许我们提取鲁棒特性为我们的学习问题。此外,数据简化实现的时间维度的数据通过使用小波散射变换是至关重要的,以创建一个计算可行的问题我们的复发性网络。

引用

[1]Verma Nishchal K。,Rahul Kumar Sevakula, Sonal Dixit, and Al Salour. “Intelligent Condition Based Monitoring Using Acoustic Signals for Air Compressors.”IEEE可靠性65年,没有。1(2016年3月):291 - 309。https://doi.org/10.1109/TR.2015.2459684

helperbatchscatfeatures——这个函数返回给定输入信号小波时间散射特性矩阵。如果useGPU被设置为真正的在GPU,散射变换计算。

函数sc = helperBatchScatFeatures (ds、锡、N, batchsize useGPU)%这个函数仅仅是为了支持小波的例子金宝app%的工具箱。在将来发布的版本中可能会改变或删除。%从音频数据存储读取批数据批= helperReadBatch (ds, N, batchsize);如果useGPU批= gpuArray(批处理);结束%获得散射特性S = sn.featureMatrix(批处理,“转换”,“日志”);收集(批处理);S =收集(年代);%子样品的特性% sc = S (: 1:6:,:);sc = S;结束

helperReadBatch——这个函数从数据存储中读取指定大小的批次,并返回单一的输出精度。每一列的输出是一个单独的信号从数据存储中。输出列可能少于批量大小,如果数据存储没有足够的记录。

函数batchout = helperReadBatch (N, ds batchsize)%这个函数只支持小波工具箱的例子。金宝app它可能变化百分比或在将来的版本中被删除。%% batchout = readReadBatch (N, ds batchsize) ds是数据存储的地方% ds是数据存储% batchsize batchsizekk = 1;(hasdata (ds) & & kk < = batchsize tmpRead =阅读(ds);batchout (:, kk) =投(tmpRead (1: N),“单一”);% #好< AGROW >kk = kk + 1;结束结束

2021年版权MathWorks公司。

另请参阅

相关的例子

更多关于