首页/文章/ 详情

轨道PHM论文学习 | 基于双尺度卷积神经网络(DS-WCNN)的铁路道岔转辙机故障诊断

6月前浏览12172

最近好几个群友问有没有做轨道PHM,的确做这个方向的很少,能接触拿到轨道项目的就北交、西南交大等几个高校。本期给大家推荐一篇发表在ChineseJournal of Electronics期刊上的铁路道岔转辙机故障诊断文章

论文链接:通过点击最左下角的阅读原文进行在线阅读及下载。

论文基本信息

论文题目:Vibration Signal-Based Fault Diagnosis of Railway Point Machines via Double-Scale CNN

论文期刊Chinese Journal of Electronics

Doihttps://doi.org/10.23919/cje.2022.00.229

作者CHEN Xiaohan1, HU Xiaoxi1,2, WEN Tao1, and CAO Yuan1,3

机构

1. The School of Electronic and Information Engineering, Beijing Jiaotong University, Beijing 100044, China

2. The State Key Laboratory of Rail Traffic Control and Safety, Beijing Jiaotong University, Beijing 100044, China

3. The National Engineering Research Center of Rail Transportation Operation Control System, Beijing Jiaotong University, Beijing 100044, China

一作简介陈霄汉,男,本科毕业于北京交通大学电子信息工程学院通信工程专业,目前为北京交通大学交通信息工程及控制专业在读硕士研究生,进行基于深度学习与联邦学习的铁路设备故障诊断的研究。

 摘要

在铁路运输行业中,铁路转辙机(Railway point machines, RPMs) 的故障诊断至关重要。由于运行振动信号能够反映机械设备的各种故障状况,振动传感与监测,更重要的是基于振动信号的RPM故障诊断受到了学者和工程师的关注。大多数基于振动信号的RPM故障诊断方法依赖于使用高采样率传感器收集的数据和人工特征提取,因此成本高且鲁棒性不足。为了克服这些缺点,我们提出了一个双尺度的第一层宽核卷积神经网络(DS-WCNN),用于使用廉价和低采样率的振动传感器进行RPM故障诊断。提出的第一层宽卷积核算法从振动观测中提取特征,特别适用于低采样率信号。同时,提出的双尺度结构通过结合两类时间尺度特征,提高了精度和噪声抑制能力。进行了大量的实验,包括加噪和对比,以证明所提出算法的鲁棒性和准确性。

关键词:转辙机;故障诊断;状态监测;振动信号;CNN

目录

1 引言
2 方法
3 振动信号描述
4 实验与结果分析
5 总结
注:小编能力有限,如有翻译不恰之处,请多多指正~
      若想进一步拜读,请下载原论文进行细读。

1 引言

道岔是铁路基础设施的重要组成部分之一,其中道岔转辙机(Railway Point Machine, RPM)用于实现列车的运行路线切换。然而,由于RPM暴露在室外,常常在较差的自然环境下运行,如变化的温度、湿度和不良天气,因此容易出现多种故障。中国国家铁路集团有限公司2020年的报告显示,铁路信号设备故障中超过四成由RPM故障引起的。目前,RPM的故障诊断主要依赖于人工巡检,这种方法效率低下、实时性差,且需要高昂的劳动成本。目前部分专家学者提出了一些机器学习算法,但普遍存在故障情形考虑不充分、传感器成本高、计算复杂等缺点,不适合大范围应用于RPM故障诊断。

2 方法

为了提高RPM的整体效率,需要采用成本效益高且准确的自动故障诊断方法。本研究提出了一种基于机械振动信号和深度学习模型的RPM故障诊断方法,在信号采集方面,研究团队以512Hz的采样频率对RPM运行过程的减速器外壳的机械振动信号进行采集,该采样频率避免了高精度传感器带来的成本提升。故障诊断算法方面,本文提出了一种双尺度宽卷积核的卷积神经网络(DS-WCNN),该算法通过使用低采样率的振动信号作为输入,实现了对于16种工况进行端到端的故障诊断。

图1 DS-WCNN结构图

DS-WCNN模型如图1所示,特征提取主要通过两个分支的卷积层完成,这些卷积层使用卷积核将输入的信息转化为输出特征。考虑到输入数据是一维时间序列,本文通过在分支的首层进行宽卷积,实现了对特征的有效提取。虽然首层的宽卷积核能够从大的感受野中提取特征,但不同尺寸的宽卷积核能够在不同尺度下提取信息。因此,本文将两种不同尺度的卷积层进行并联以提高特征提取能力。DS-WCNN模型还引入了最大池化层和全局平均池化层,最大池化层从特征图的池化区域中扫描并获取最大值作为特征的表征,从而减少了模型中的参数数量。全局平均池化层将每个特征图的特征组合并展平为特征向量以实现两分支的特征拼合。在完成特征拼合后,总特征经过全连接层与Dropout层后转化为输出层的16分类结果。

3 振动信号描述

ZDJ9 RPMs广泛应用于高铁及其他城市轨道交通系统。因此,我们在研究中考虑了这些机器。本研究的振动信号采集自中国最大的RPM供应商中国中车(西安)轨道交通工业集团有限公司的ZDJ9 RPM试验台本研究中的ZDJ9 RPM由电机、缓速器、滚珠丝杠、一个或多个安全开关、一排端子、开关电路控制器、两根指示杆和一根抛杆组成(图2)。电源需要380V三相交流电。一旦发出开关命令,电机就被激活。缓速器用于增加扭矩,并通过摩擦离合器将力传递给滚珠丝杠。因此,电能被转换成推套的直线运动。随后,推杆相对于推套产生推拉动作。最后,当指示杆检测到运动终止时,开关电路控制器切断电机电路,接通指示电路。

图2 ZDJ9 RPM的三维模型
常见故障会导致开关电阻的变化,直接影响电机转速。因此,电机振动可能反映了ZDJ9 RPM条件。如前所述,电机连接到缓速器,并在减速器壳体上放置一个垂直平面。马达的外壳是弯曲的。因此,在侧板上贴上振动传感器(如图3所示)。传感器检测垂直于地面的振动,采样率仅为512 Hz。我们选择检测垂直于RPM方向的振动,因为RPM是固定在安装装置(测试台上的测试台)上的。ZDJ9 RPM的运行时间约为8秒,相当于从正常位置到反向或从反向位置到正常位置的运动。因此,在工作期间采集一次振动信号样本,直到移动完成

图3 所贴传感器

我们考虑了16种场景,收集了944个样本,详见表1。正反运转模式下各工作状态的振动信号示例如图6所示。显然,a-d型和g型的工作信号非常相似。唯一的区别是不同负载的信号强度。在标准负载(b型)下,振动信号幅值最低。接近运动后突然的指示丢失是由于拉伸弹簧增大,导致动触点从静止触点(e型)中弹跳而出。当机械传动装置阻塞时,电机电流激增;因此,电机和机械传动部件运行异常,产生不同频率和振幅的振动(类型f)。解锁故障与其他工况的振幅和波形不同(类型h)。
表1 本研究所考虑的工况条件

图4 RPM正反运转模式下振动信号波形

4 实验与结果分析

图5 抗噪声能力对比结果
实验结果如图5所示,该方法在训练和测试数据集上的识别准确率分别为99.10%和97.71%,表明该算法的有效性。本文还进行了一系列针对首层宽卷积层的尺度的对比实验,确定了基于机械振动信号的RPM故障诊断中的最佳尺度与组合,并通过实验验证了双尺度具有优于单尺度和更多尺度的性能。实验还对比了DS-WCNN模型与其他经典的机器学习和信号处理方法,并通过向输入信号添加不同信噪比的噪声证明了该模型的鲁棒性优于其他算法。DS-WCNN模型以其创新性的架构和强大的特征提取能力,有力地推动了RPM故障诊断的研究。  

5 总结

本研究提出了一种基于廉价振动传感器的DS-WCNN RPM高精度、高效、鲁棒的故障诊断模型。该方案只需要采样率为512 Hz的一维振动信号(其他方法使用的频率为51200 Hz)。该方法在测试数据集上的准确率为97.71%,每个样本的平均推断时间为0.0003 s。此外,所提出的DS-WCNN具有足够的鲁棒性。当信噪比超过8 dB时,精度保持在90%


来源:故障诊断与python学习
System振动电源电路航空核能轨道交通电子python通信电机多尺度数字孪生控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-05-12
最近编辑:6月前
故障诊断与python学习
硕士 签名征集中
获赞 70粉丝 66文章 143课程 0
点赞
收藏
作者推荐

HUST Bearing公开数据集(含不同转速、复合故障)

继前期推荐的两个公开数据集:哈工大航空发动机轴承数据集(HIT bearing dataset)北交风力发电机行星齿轮箱数据集(WT-planetary-gearbox-dataset)今天给大家推荐一个轴承故障公开数据集,该数据集有4种转速工况,9种健康状态,考虑了复合故障,诊断起来更具有挑战性。该数据集是华中科技大学沈卫明老师团队在2024年公开,因此目前基于该数据集的论文不是很多,小伙伴们赶紧用起来吧!对于研究轴承故障诊断的小伙伴们,再也不用担心写论文找不到数据啦!数据集基本信息该数据集包括轴承在4种不同工况条件下的9种不同健康状态的振动信号。这些数据集是公开的,任何人都可以使用它们来验证滚动轴承的诊断算法。使用HUSTbearing数据集的出版物请引用以下论文:参考论文:Domain Generalization for Cross-Domain Fault Diagnosis: an Application-oriented Perspective and a Benchmark Study论文期刊:Reliability Engineering and System SafetyDoi:https://doi.org/10.1016/j.ress.2024.109964作者:Chao Zhao(a c), Enrico Zio(b c), Weiming Shen(a)机构:a State Key Laboratory of Digital Manufacturing Equipment and Technology, Huazhong University of Science & Technology, Wuhan 430074, Chinab MINES Paris PSL University, CRC, Sophia Antipolis, Francec Energy Department, Politecnico di Milano, Milan, Italy数据集下载:https://github.com/CHAOZHAO-1/HUSTbearing-dataset公开日期:2024年作者简介:沈卫明,(Fellow, IEEE) 1983年和1986年分别在北京交通大学获得学士和硕士学位,1996年在法国贡比涅工业大学获得博士学位。沈老师目前是华中科技大学的教授,以及加拿大西安大略大学的兼 职教授。主要研究方向为智能软件代理、无线传感器网络、物联网、大数据及其在工业中的应用。沈教授是加拿大工程院和加拿大工程学院的院士,同时也是加拿大安大略省注册工程师。上述链接若打不开,文末有百度网盘链接。目录1 实验简介1.1 轴承故障实验台1.2 测试轴承参数1.3 传感器及相关设置1.4 工况条件1.5 采样设置2 数据集细节3 数据读取与展示3.1 数据读取3.2 绘制时域图3.3 绘制频域图3.4 绘制stft时频域图4 参考文献1 实验简介1.1 轴承故障实验台轴承故障试验使用Spectra-Quest机械故障实验台进行,如图1所示。图1 HUST轴承数据集实验台实验台上从左到右依次为①速度控制器、②电机、③轴、④加速度传感器、⑤轴承和⑥数据采集卡。9种健康状态的轴承如图2所示,分别表示(1) 正常,(2) 内圈中度故障,(3) 内圈重度故障,(4) 外圈中度故障,(5) 外圈重度故障,(6) 滚动体中度故障,(7) 滚动体重度故障,(8) 外圈内圈复合中度故障,(9) 外圈内圈复合重度故障。需要注意的是,复合故障表示内圈和外圈都存在故障。所有故障都是人为预设的。图2 故障轴承照片1.2 测试轴承参数被测轴承类型为ER-16K,详细参数见表1。表1 测试轴承参数[1]ER-16K深沟球轴承的轴承故障特征频率如表2所示, 为转速,单位r/min。表2 轴承故障特征频率[2]1.3 传感器及相关设置用于数据采集的加速度传感器如图3所示,传感器模型如图4所示。具体信号采集设置如图5所示。图3 三向加速度传感器的照片图4 传感器模型图5 信号采集设置1.4 工况条件实验共设置4种不同的速度工况条件,工况条件包括:1) 65Hz (3900rpm)2) 70Hz (4200rpm)3) 75Hz (4500rpm)4) 80Hz (4800rpm)1.5 采样设置采样频率设置为25.6 kHz。如图6所示,每次采样共记录262144个数据点(即10.2s)。图6 文件描述2 数据集细节原始数据文件包括36个文件(9个健康状态乘以4个工作条件),每个文件为Excel格式。例如,文件名“0.5X_B_65Hz”表示在65Hz工作条件下发生滚动体中度故障,其中0.5X表示中度故障。故障状态用以下代码表示:H:健康I:内圈故障O:外圈故障B:球故障C:组合故障。例如,“O_80Hz”表示在80Hz工作条件下,外圈重度故障。图7 部分文件示例3 数据读取与展示以0.5X_B_65Hz.xls数据为例,展示其时域图、频域图、stft时频域图。3.1 数据读取首先是先了解如何用python读取数据。它的格式是xls,用pd.read_csv()函数读取,但还需要再处理一下。下面定义了1个data_read()函数。## 导入包from matplotlib import pyplot as pltfrom matplotlib import rcParamsimport numpy as npimport pandas as pdimport osconfig = { "font.family": 'serif', # 衬线字体 "font.size": 14, # 相当于小四大小 "font.serif": ['SimSun'], # 宋体 "mathtext.fontset": 'stix', # matplotlib渲染数学字体时使用的字体,和Times New Roman差别不大 'axes.unicode_minus': False # 处理负号,即-号}rcParams.update(config)def data_read(file_path): """ :fun: 读取xls数据 :param file_path: 文件路径 :return df: Dataframe,五列分别为'Time', 'Speed', 'Acc_x', 'Acc_y', 'Acc_z' """ df = pd.read_csv(file_path)[17:] # 第17行开始为加速度数据 df.columns = ['Column'] # 使用 split 方法分割每行的单元格,expand=True 会将分割后的每个元素作为单独的列返回 df_split = df['Column'].str.split('\t', expand=True) # 将分割后的所有列转换为 float 类型 df_split = df_split.astype(float) # 重置索引,以便将分割后的列与原始 DataFrame 的索引对齐 df_split.reset_index(drop=True, inplace=True) # 现在 df_split 包含了分割后的五列数据 # 为这些新列设置列名 df_split.columns = ['Time', 'Speed', 'Acc_x', 'Acc_y', 'Acc_z'] return df_split file_path = r'E:\03-公开数据集\HUST-bearing-dataset\Raw data (原始数据)/0.5X_B_65Hz.xls'df = data_read(file_path)acc_z_arr= df['Acc_z'] # 选择z轴数据df图8 一个xls文件内具体内容可知,该数据为5列,分别为'Time', 'Speed', 'Acc_x', 'Acc_y', 'Acc_z'。3.2 绘制时域图选择z轴的加速度传感器数据进行展示。##========绘制时域信号图========##def plt_time_domain(arr, fs=1600, ylabel='Amp($m/s^2$)', title='原始数据时域图', img_save_path=None, x_vline=None, y_hline=None): """ :fun: 绘制时域图模板 :param arr: 输入一维数组数据 :param fs: 采样频率 :param ylabel: y轴标签 :param title: 图标题 :return: None """ import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文 plt.rcParams['axes.unicode_minus'] = False # 显示负号 font = {'family': 'Times New Roman', 'size': '20', 'color': '0.5', 'weight': 'bold'} plt.figure(figsize=(12,4)) length = len(arr) t = np.linspace(0, length/fs, length) plt.plot(t, arr, c='g') plt.xlabel('t(s)') plt.ylabel(ylabel) plt.title(title) if x_vline: plt.vlines(x=x_vline, ymin=np.min(arr), ymax=np.max(arr), linestyle='--', colors='r') if y_hline: plt.hlines(y=0.2, xmin=np.min(t), xmax=np.max(t), linestyle=':', colors='y') #===保存图片====# if img_save_path: plt.savefig(img_save_path, dpi=500, bbox_inches = 'tight') plt.show()fs = 25600file_name = r'0.5X_B_65Hz.xls'##=====绘制时域数据====##time_img_save_path = file_path.replace('.xls', '时域_.png')plt_time_domain(acc_z_arr, fs=fs, title=file_name, img_save_path=time_img_save_path)共10.2s的数据,单位 。3.3 绘制频域图##========绘制频域信号图========##def plt_fft_img(arr, fs, ylabel='Amp(mg)', title='频域图', img_save_path=None, vline=None, hline=None, xlim=None): """ :fun: 绘制频域图模板 :param arr: 输入一维时域数组数据 :param fs: 采样频率 :param ylabel: y轴标签 :param title: 图标题 :return: None """ # 计算频域幅值 length = len(arr) t = np.linspace(0, length/fs, length) fft_result = np.fft.fft(arr) fft_freq= np.fft.fftfreq(len(arr), d=t[1]-t[0]) # FFT频率 fft_amp= 2*np.abs(fft_result)/len(t) # FFT幅值 # 绘制频域图 plt.figure(figsize=(12,4)) plt.title(title) plt.plot(fft_freq[0: int(len(t)/2)], fft_amp[0: int(len(t)/2)], label='Frequency Spectrum', color='b') plt.xlabel('频率 (Hz)') plt.ylabel('幅值') plt.legend() if vline: plt.vlines(x=vline, ymin=np.min(fft_amp), ymax=np.max(fft_amp), linestyle='--', colors='r') if hline: plt.hlines(y=hline, xmin=np.min(fft_freq), xmax=np.max(fft_freq), linestyle=':', colors='y') #===保存图片====# if img_save_path: plt.savefig(img_save_path, dpi=500, bbox_inches = 'tight') if xlim: # 图片横坐标是否设置xlim plt.xlim(0, xlim) plt.tight_layout() plt.show()fs = 25600file_name = r'0.5X_B_65Hz.xls'##=====绘制频域数据====##fft_img_save_path = file_path.replace('.xls', '频域_.png')plt_fft_img(acc_z_arr, fs=fs, title=file_name, img_save_path=fft_img_save_path)可见明显的主频及倍频。3.4 绘制stft时频域图def plt_stft_img(arr, fs, ylabel='Amp(mg)', title='频域图', img_save_path=None, vline=None, hline=None, xlim=None): """ :fun: 绘制stft时频域图模板 :param arr: 输入一维时域数组数据 :param fs: 采样频率 :param ylabel: y轴标签 :param title: 图标题 :return: None """ import scipy.signal as signal import numpy as np import matplotlib.pyplot as plt f, t, nd = signal.stft(arr, fs=fs, window='hann', nperseg=128, noverlap=64,nfft=None, detrend=False, return_onesided=True, boundary='odd', padded=False, axis=-1) # fs:时间序列的采样频率, nperseg:每个段的长度,默认为256(2^n) noverlap:段之间重叠的点数。如果没有则noverlap=nperseg/2 #window :字符串或元组或数组,可选需要使用的窗。 # #如果window是一个字符串或元组,则传递给它window是数组类型,直接以其为窗,其长度必须是nperseg。 # 常用的窗函数有boxcar,triang,hamming, hann等,默认为Hann窗。 #nfft :int,可选。如果需要零填充FFT,则为使用FFT的长度。如果为 None,则FFT长度为nperseg。默认为无 # detrend :str或function或False,可选 # 指定如何去除每个段的趋势。如果类型参数传递给False,则不进行去除趋势。默认为False。 # return_onesided :bool,可选 # 如果为True,则返回实际数据的单侧频谱。如果 False返回双侧频谱。默认为 True。请注意,对于复杂数据,始终返回双侧频谱。 # boundary :str或None,可选 # 指定输入信号是否在两端扩展,以及如何生成新值,以使第一个窗口段在第一个输入点上居中。 # 这具有当所采用的窗函数从零开始时能够重建第一输入点的益处。 # 有效选项是['even', 'odd', 'constant', 'zeros', None]. # 默认为‘zeros’,对于补零操作[1, 2, 3, 4]变成[0, 1, 2, 3, 4, 0] 当nperseg=3. # padded:bool,可选 # 指定输入信号在末尾是否填充零以使信号精确地拟合为整数个窗口段,以便所有信号都包含在输出中。默认为True。 # 填充发生在边界扩展之后,如果边界不是None,则填充为True,默认情况下也是如此。 # axis :int,可选 # 绘制STFT时频域图 plt.figure(figsize=(12,4)) plt.pcolormesh(t, f, np.abs(nd), vmin = np.min(np.abs(nd)), vmax = np.max(np.abs(nd))) plt.title(title) plt.xlabel('时间(t)') plt.ylabel('频率 (Hz)') if vline: plt.vlines(x=vline, ymin=np.min(fft_amp), ymax=np.max(fft_amp), linestyle='--', colors='r') if hline: plt.hlines(y=hline, xmin=np.min(fft_freq), xmax=np.max(fft_freq), linestyle=':', colors='y') #===保存图片====# if img_save_path: plt.savefig(img_save_path, dpi=500, bbox_inches = 'tight') if xlim: # 图片横坐标是否设置xlim plt.xlim(0, xlim) plt.tight_layout() plt.show()fs = 25600file_name = r'0.5X_B_65Hz.xls'##=====绘制STFT时频域数据====##stft_img_save_path = file_path.replace('.xls', '时频域_.png') plt_stft_img(acc_z_arr, fs=fs, img_save_path=stft_img_save_path)与fft频域图一致,频率主要集中在低频(0-1000Hz)。4 参考文献[1] Luo W, Yan C, Yang J, et al. Vibration response of defect-ball-defect of rolling bearing with compound defects on both inner and outer races[C]//IOP Conference Series: Materials Science and Engineering. IOP Publishing, 2021, 1207(1): 012006.[2] Mishra C, Samantaray A K, Chakraborty G. Ball bearing defect models: A study of simulated and experimental fault signatures[J]. Journal of Sound and Vibration, 2017, 400: 86-112.来源:故障诊断与python学习

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈