近年来,随着微电子技术的进步与发展,传感器愈加智能化、微型化且价格低廉,相关产品在国防军工、机械装备、医疗电子以及环境治理等领域具有广泛的应用。传感器工作过程中能够产生大量的监测数据,工程师如何从数据中提取有用信息来辅助管理人员制定决策信息显得尤为关键。
基于数据驱动的RUL预测方法是大数据时代的产物,吸引了众多学者们的目光。该方法通过信号处理等技术对传感器获取的监测数据进行分析和挖掘,提取出反映系统退化失效的特征,最终实现对设备的RUL预测,具体框架如下图所示:
本项目利用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)x−min(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()
采用测试集数据对模型的准确性进行验证,具体的结果如下所示: