基于深度学习网络的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)
准备数据
方法加载数据processTurboFanDataTrain
helper函数。的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);
EngineData
从基本工作区加载时使用从工作空间
块。在本例中,时间步进EngineData
是0.05.年代
O,我们设定了采样时间从工作空间
块到0.05。因此,在第一步,块输出的第一行EngineData
,在第二步,它输出第二行—对应于第二个引擎循环—以此类推。如果选择另一个引擎XData
,则块的采样时间需要相应更新。
set_param ([modelName,“从工作区”),“SampleTime”,“0.05”);
的有状态的预测
块加载预先训练的LSTM网络turbofanNet
mat文件,并在其输出端口返回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);
该图显示了模型运行时的情况。量规显示了估计的RUL,在本例中对应于90个周期。在模拟结束时,RUL以单个数组的形式返回给Base Workspace,其中包含在每次模拟迭代中计算的值。
您可以将该系统集成到更大的框架中,例如,在一个持续监视引擎状态的系统中,如果RUL低于给定的用户定义值,该系统将采取预防措施。
参考文献
萨克森纳,阿比纳夫,凯·戈贝尔,唐·西蒙,尼尔·埃克伦德。用于飞机发动机运行到故障模拟的损伤传播模型。在预测与健康管理,2008年。2008年榜单。国际气候变化会议,第1-9页。IEEE 2008。