基于深度学习的航空发动机剩余寿命预测

背景介绍

  近年来,随着微电子技术的进步与发展,传感器愈加智能化、微型化且价格低廉,相关产品在国防军工、机械装备、医疗电子以及环境治理等领域具有广泛的应用。传感器工作过程中能够产生大量的监测数据,工程师如何从数据中提取有用信息来辅助管理人员制定决策信息显得尤为关键。

  基于数据驱动的RUL预测方法是大数据时代的产物,吸引了众多学者们的目光。该方法通过信号处理等技术对传感器获取的监测数据进行分析和挖掘,提取出反映系统退化失效的特征,最终实现对设备的RUL预测,具体框架如下图所示:

在这里插入图片描述

图1 预测性维护系统的架构

系统框架

  本项目利用CMAPSS开源数据集进行训练,通过LSTM模型对传感器采集的数据进行识别,预测出涡轮喷气发动机风扇的剩余寿命(RUL),后续和同学一起成功部署到边缘网关~

数据集介绍

  CMAPSS数据集中有四个子集分别是FD001、FD002、FD003、FD004,数据是以文本形式给出,每个子数据集中的大概内容如下: 数据集的地址为:

columns = ['unit_number','time_in_cycles','setting_1','setting_2','TRA','T2','T24','T30',
           'T50','P2','P15','P30','Nf','Nc','epr','Ps3 0','phi','NRf','NRc','BPR','farB',
          'htBleed','Nf_dmd','PCNfR_dmd','W31','W32' ]

  其中,unit_number表示发动机编号,范围是0-100;time_in_cycles可以代表时间相关的编号;setting_1,2,3操作设置,TRA,T2 … W32表示传感器采集的结果(21组)。

  传感器数据归一化处理:

x 1 = x − min ⁡ ( x ) max ⁡ ( x ) − min ⁡ ( x ) {x^1} = {{x - \min (x)} \over {\max (x) - \min (x)}} x1=max(x)min(x)xmin(x)

程序算法

  长短期记忆(LSTM)网络作为典型的深度学习模型,在机器翻译、时间序列预测等领域得到广泛应用。因此,本文通过构建LSTM网络,实现了基于数据驱动的健康状况评估建模方法和RUL预测方法。

数据预处理:最后得到的数据维度为[100,],具体采用的程序如下:

def _generate_test_from_unit_list(self,num_steps,unit_number_RUL_scaled_list,knee_point_np):
    
    test_X_list=[]
    test_Y_list=[]    
           
    for i in range(len(unit_number_RUL_scaled_list)):
        unit_number_i=unit_number_RUL_scaled_list[i]
        unit_number_i_var=unit_number_i.var(axis=0)
        good_index_i=unit_number_i_var>-1   
        unit_number_i_good=unit_number_i[:,good_index_i]
        knee_point_i=knee_point_np[i,0] 

        unit_number_i_good=unit_number_i_good[0:unit_number_i_good.shape[0],:]
        test_X_i=[]
        test_Y_i=[]
        test_X_i,test_Y_i=self._generate_test_from_one_unit(unit_number_i_good,TIMESTEPS=num_steps)
                
        test_Y_i=np.transpose(test_Y_i,[0,2,1])
        test_X_list.append(test_X_i)
        test_Y_list.append(test_Y_i)
                
    return test_X_list,test_Y_list
    
def _generate_test_from_one_unit(self,multi_seq,TIMESTEPS=10):
    X = []
    Y = []
    num_blocks=len(multi_seq)//TIMESTEPS 
        
    for i in range(len(multi_seq)//TIMESTEPS):
        X.append(multi_seq[len(multi_seq)-(num_blocks-i)*TIMESTEPS:len(multi_seq)-(num_blocks-i-1)*TIMESTEPS,0:multi_seq.shape[1]-1])
        Y.append([multi_seq[len(multi_seq)-(num_blocks-i)*TIMESTEPS:len(multi_seq)-(num_blocks-i-1)*TIMESTEPS,multi_seq.shape[1]-1]])
    return np.array(X, dtype=np.float32), np.array(Y, dtype=np.float32)        

模型结构:其中input_size表示传感器的通道数量,输入参数的种类;output_size表述为输出参数,具体为预测的剩余寿命(RUL);num_steps表述矩阵维度,需要大于最小长度;max_epoch表示模型训练相关的参数:增加_max_epoch,可以提高准确性,但是设置过大会造成模型过拟合,增加训练成本和带来资源消耗问题等。

def __init__(self, sess,
             lstm_size=128,
             num_layers=1,
             num_steps=10,
             input_size=21,
             output_size=1,
             logs_dir="logs",
             plots_dir="figures",
             max_epoch=5):

    self.sess = sess
    self.lstm_size = lstm_size
    self.num_layers =num_layers
    self.num_steps = num_steps
    self.input_size=input_size
    self.output_size=output_size
    self.logs_dir = logs_dir
    self.plots_dir = plots_dir
    self.max_epoch=max_epoch
    self.build_graph()

结果展示

  采用测试集数据对模型的准确性进行验证,具体的结果如下所示:

在这里插入图片描述

图2 基于LSTM模型的航空发动机寿命预测结果展示
  • 2
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值