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


    背景介绍

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

      基于数据驱动的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' ]
    
    • 1
    • 2
    • 3

      其中,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)        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    模型结构:其中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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    结果展示

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

    在这里插入图片描述

    图2 基于LSTM模型的航空发动机寿命预测结果展示
  • 相关阅读:
    MYSQL指令
    C++ Qt开发:QUdpSocket实现组播通信
    详解JS遍历数组的十八种方法
    RK3568开发板评测篇(二):开发环境搭建
    deepin-anything 源码刨析
    基于数据增强与集成学习的小样本识别技术
    react实战 系列 —— React 的数据流和生命周期
    linux系统中通配符与常用转义字符
    (十一)【Jmeter】线程(Threads(Users))之jp@gc-Ultimate Thread Group
    MySQL 多种查询方法
  • 原文地址:https://blog.csdn.net/qq_41137829/article/details/127726794