继前期推荐的两个公开数据集: 今天给大家推荐一个轴承故障 公开数据集,该数据集有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 Safety作者 :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, China b MINES Paris PSL University, CRC, Sophia Antipolis, France c Energy Department, Politecnico di Milano, Milan, Italy 作者简介 :沈卫明 , (Fellow, IEEE) 1983年和1986年分别在北京交通大学获得学士和硕士学位,1996年在法国贡比涅工业大学获得博士学位。沈老师目前是华中科技大学的教授,以及加拿大西安大略大学的兼 职教授。主要研究方向为智能软件代理、无线传感器网络、物联网、大数据及其在工业中的应用。沈教授是加拿大工程院和加拿大工程学院的院士,同时也是加拿大安大略省注册工程师。目录 3.1 数据读取
3.2 绘制时域图
3.3 绘制频域图
3.4 绘制stft时频域图
1 实验简介 轴承故障试验使用Spectra-Quest机械故障实验台进行,如图1所示。
图1 HUST轴承数据集实验台
实验台上从左到右依次为①速度控制器、②电机、③轴、④加速度传感器、⑤轴承和⑥数据采集卡。
需要注意的是,复合故障表示内圈和外圈都存在故障。所有故障都是人为预设的。
图2 故障轴承照片
表1 测试轴承参数[1]
ER-16K深沟球轴承的轴承故障特征频率如表2所示, 为转速,单位r/min。 表2 轴承故障特征频率[2]
用于数据采集的加速度传感器如图3所示,传感器模型如图4所示。具体信号采集设置如图5所示。
图3 三向加速度传感器的照片
图4 传感器模型
图5 信号采集设置
1.4 工况条件
1.5 采样设置
采样频率设置为25.6 kHz 。如图6所示,每次采样共记录262144个数据点(即10.2s )。 图6 文件描述
2 数据集细节 原始数据文件包括36个文件 (9个健康状态乘以4个工作条件),每个文件为Excel格式。例如,文件名“0.5X_B_65Hz ”表示在65Hz工作条件下发生滚动体中度故障,其中 0.5X表示中度故障 。
例如,“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 plt
from matplotlib import rcParams
import numpy as np
import pandas as pd
import os
config = {
"font.family" : 'serif' ,
"font.size" : 14 ,
"font.serif" : ['SimSun' ],
"mathtext.fontset" : 'stix' ,
'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 :]
df.columns = ['Column' ]
df_split = df['Column' ].str.split('\t' , expand=True )
df_split = df_split.astype(float)
df_split.reset_index(drop=True , inplace=True )
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' ]
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 = 25600
file_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_amp= 2 *np.abs(fft_result)/len(t)
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:
plt.xlim(0 , xlim)
plt.tight_layout()
plt.show()
fs = 25600
file_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 )
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:
plt.xlim(0 , xlim)
plt.tight_layout()
plt.show()
fs = 25600
file_name = r'0.5X_B_65Hz.xls'
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.