主要内容

基于深度学习网络的Simulink时间序列预测

这个例子展示了如何在Simulink®模型中使用LSTM深度学习网络来预测发动机的剩余使用寿命(RUL)。可以在Simulink模型中包含网络有状态的预测块,它预测每个模拟步骤的RUL。

的数据涡扇发动机退化模拟数据集如[1]中所述。该示例使用经过训练的LSTM网络来预测发动机的RUL(预测性维护),在给定的时间序列数据代表发动机中的各种传感器的情况下,以周期为单位进行测量。用于训练网络的数据包含100台发动机的模拟时间序列数据。每个序列有17个不同长度的特征,对应于一个完整的运行到故障(RTF)实例。有关如何训练网络的更多信息,请参见使用深度学习的序列对序列回归

下载数据

下载并解压涡扇发动机退化模拟数据集。

涡扇发动机退化模拟数据集的每个时间序列代表一个不同的发动机。每台发动机启动时的初始磨损程度和制造变化都是未知的。发动机在每个时间序列的开始时都是正常工作的,在序列的某个点出现故障。在训练集中,故障的大小不断增长,直到系统失效。

数据包含一个zip压缩的文本文件,包含26列数字,用空格分隔。每一行是在单个操作周期中获得的数据的快照,每列是一个不同的变量。这些列对应于以下内容:

  • 第一栏-单元编号

  • 第二列-以周期为单位的时间

  • 列3-5 -操作设置

  • 列6-26 -传感器测量1-21

创建一个目录来存储涡扇发动机退化模拟数据集。

dataFolder =“数据”如果~存在(dataFolder“dir”mkdir (dataFolder);结束

下载并提取涡扇发动机退化模拟数据集。

文件名= matlab.internal.examples.downloadSupportFile(“nnet”“数据/ TurbofanEngineDegradationSimulationData.zip”);解压缩(文件名,dataFolder)

准备数据

方法加载数据processTurboFanDataTrainhelper函数。的processTurboFanDataTrain函数从中提取数据filenamePredictors并返回单元格数组XTrain,其中包含训练预测数据。

filenamePredictors = fullfile(dataFolder,“train_FD001.txt”);[XTrain] = processTurboFanDataTrain(filenamePredictors);

删除常量值的特征

由于训练网络时使用的特征在所有时间步长中都不是恒定的,因此需要去除所有时间步长的常量值特征进行预测。找到具有相同最小值和最大值的数据行,并删除这些行。

m = min([XTrain{:}],[],2);M = max([XTrain{:}],[],2);idxConstant = M == M;i = 1:numel(XTrain) XTrain{i}(idxConstant,:) = [];结束

规范化训练预测器

将训练预测因子归一化,使其均值和单位方差为零。为了计算所有观测值的平均值和标准差,水平连接序列数据。

mu = mean([XTrain{:}],2);sig = std([XTrain{:}],0,2);i = 1:numel(XTrain) XTrain{i} = (XTrain{i} - mu) ./ sig;结束

为一个引擎提取数据

在Simulink模型中,我们只计算一个引擎的RUL。在这个例子中,我们提取的第9个元素XTrain并将其存储在一个名为SensorData。Y你可以选择任何其他的发动机XTrain单元阵列。SensorData是17乘201的双数组。每一行对应一个特征,每列对应给定周期的传感器读数。

SensorData = XTrain{9};

Simulink模型有一个相关的仿真时间,在本例中需要与发动机周期相关。因此,我们定义了一个名为EngineData,它将传感器数据存储为可在Simulink模型中加载的时间序列对象。因为在Simulink中默认的模拟时间是10.0发动机运行201个循环时间领域的EngineData需要是一个大小为201 × 1的数组,其值从0到10线性增加。

时间= linspace(0,10,201)';EngineData =时间序列(SensorData',时间);

该图的顶部面板显示了每个传感器在每个周期的读数,底部面板显示了发动机的RUL,以周期为单位。201循环后,发动机停止工作。注意,如果您从XTrain数据,那么就需要适应了时间领域的EngineData因此,由于每个发动机运行的循环次数不同。

基于Simulink的RUL预测模型

加载Simulink模型RULPredictionLSTM.slx

modelName =“RULPredictionLSTM”;open_system (modelName);

RULPredictionLSTM.png

EngineData从基本工作区加载时使用从工作空间块。在本例中,时间步进EngineData0.05.年代O,我们设定了采样时间从工作空间块到0.05。因此,在第一步,块输出的第一行EngineData,在第二步,它输出第二行—对应于第二个引擎循环—以此类推。如果选择另一个引擎XData,则块的采样时间需要相应更新。

set_param ([modelName,“从工作区”),“SampleTime”“0.05”);

有状态的预测块加载预先训练的LSTM网络turbofanNetmat文件,并在其输出端口返回RUL。的有状态的预测块在每次预测时更新网络状态,改进对当前RUL的预测。的一半计块显示仿真过程中计算出的RUL值(以发动机循环为单位)。

RUL_sigSpec = Simulink.HMI.SignalSpecification;RUL_sigSpec。BlockPath = Simulink。BlockPath (“RULPredictionLSTM /状态预测”);set_param (“RULPredictionLSTM /一半计”“绑定”RUL_sigSpec)

运行模拟

因为模拟从mat文件读取数据,所以它运行得非常快,很难跟上。要降低模拟速度,请将模拟节奏选项设置为0.5。

set_param (modelName“EnablePacing”“上”);set_param (modelName“PacingRate”, 0.5);

要计算RUL,运行模拟。

sim (modelName);

RULPredictionLSTMOutput.png

该图显示了模型运行时的情况。量规显示了估计的RUL,在本例中对应于90个周期。在模拟结束时,RUL以单个数组的形式返回给Base Workspace,其中包含在每次模拟迭代中计算的值。

您可以将该系统集成到更大的框架中,例如,在一个持续监视引擎状态的系统中,如果RUL低于给定的用户定义值,该系统将采取预防措施。

参考文献

  1. 萨克森纳,阿比纳夫,凯·戈贝尔,唐·西蒙,尼尔·埃克伦德。用于飞机发动机运行到故障模拟的损伤传播模型。在预测与健康管理,2008年。2008年榜单。国际气候变化会议,第1-9页。IEEE 2008。

另请参阅

|||

相关的话题

Baidu
map