九类轴承:读研之掉进故障检测(九)—IMS轴承数据集时域分析_有效值状态划分

文章目录

  • 前言
  • 一、使用RMS进行全寿命数据的退化样本划分
    • 1.1 有效值(root mean square,RMS)
    • 1.2 有效值代码实现
  • 二、多种类时频分析
    • 2.1 时频指标与计算公式
    • 2.1 时频指标实现代码
  • 总结


前言

------本来以为简单的画个图了解一下辛辛那提的轴承数据集就完事了。但是随着最近论文的阅读,发现并不能如此草草了事。
------事情的起因是这样的。 因为要做状态的学习,但是看了这个所以就很困惑,怎么可以直接用RMS来进行状态划分呢?不是要用什么什么网络一顿操作嘛?


一、使用RMS进行全寿命数据的退化样本划分

1.1 有效值(root mean square,RMS)

------均方根(RMS)可以作为全寿命数据的退化样本划分的依据,是它反映了信号的整体能量或幅度大小的变化。
------具体表现在当设备处于正常工作状态时,其振动信号的RMS值通常是相对稳定的。然而,随着设备的退化和故障,其振动信号的RMS值可能会逐渐增加,表明设备的振动水平增大。
------在图像中的表现是无故障时 RMS 值在 0.1 附近,且曲线比较平缓,当轴承最终损坏时,其值增加至 0.7 左右,表明 RMS 指标值随着轴承损伤程度加深而逐渐升高,从图中还可以粗略看出,在 550 点左右,曲线出现上升趋势,暗示着故障的发生,可以较好反映轴承退化这一趋势。
------然而,RMS 指标对冲击信号不够敏感,因此,在对轴承各退化阶段的反映上不够清晰(图中箭头和矩形框所示)

1.2 有效值代码实现

import numpy as npimport osimport matplotlib.pyplot as pltfrom matplotlib import rcParamsconfig = { "font.family": 'serif', # 衬线字体 "font.size": 10, # 相当于小四大小 "font.serif": ['SimSun'], # 宋体 "mathtext.fontset": 'stix', # matplotlib渲染数学字体时使用的字体,和Times New Roman差别不大 'axes.unicode_minus': False # 处理负号,即-号}rcParams.update(config)def get_RMS(data): x = data X_mean = np.mean(x) x = x - X_mean # 零均值化(去直流分量) X_rms2 = np.sum(x ** 2) / len(x) # 3.均方值 X_rms = np.sqrt(X_rms2) # 4.均方根值(有效值) time_fea_list = [X_rms] time_domain_names_list = ['均方根(root mean square)'] return time_fea_list, time_domain_names_listdef IMF_data_acquisition(file_path, n): """ fun: 从IMF文件读取加速度数据 param file_path: mat文件绝对路径 return accl_data: 加速度数据,array类型 """ data = np.loadtxt(fname=file_path) accl_data = data[:, n] return accl_database_dir = r'F:/pycharm_dataset/IMS_use/2test_data'file_name_list = os.listdir(base_dir)all_time_domain_features_list = []for file_name in file_name_list: file_path = os.path.join(base_dir, file_name) data = IMF_data_acquisition(file_path=file_path, n=0) time_domain_features_list, time_domain_names_list = get_RMS(data=data) all_time_domain_features_list.append(time_domain_features_list)all_time_domain_features_arr = np.array(all_time_domain_features_list)feature_idx = 0 # Index of the RMS featureplt.plot(all_time_domain_features_arr[:, feature_idx], label='RMS')plt.title(time_domain_names_list[feature_idx])plt.show()

结果如图所示:

二、多种类时频分析

2.1 时频指标与计算公式

------为了拓展IMS轴承数据的时域分析指标,本文参考了github中一篇时域指标的内容
其链接位置:
https://github.com/HappyBoy-cmd/fault_diagnosis_signal_processing
------在给出代码之前,要先明确各个指标的概念与计算公式。对于离散的时间信号x1,x2,…,xN,各个指标的计算公式如下:


2.1 时频指标实现代码

import mathimport numpy as npimport osimport scipy.statsimport matplotlib.pyplot as pltfrom matplotlib import rcParamsconfig = { "font.family": 'serif', # 衬线字体 "font.size": 10, # 相当于小四大小 "font.serif": ['SimSun'], # 宋体 "mathtext.fontset": 'stix', # matplotlib渲染数学字体时使用的字体,和Times New Roman差别不大 'axes.unicode_minus': False # 处理负号,即-号}rcParams.update(config)def get_time_domain_features(data): x = data # ------有量纲指标------# X_mean = np.mean(x) # 1.平均值 X_std = np.std(x) # 2.方差 x = x - X_mean # 零均值化(去直流分量) X_rms2 = np.sum(x ** 2) / len(x) # 3.均方值 X_rms = np.sqrt(X_rms2) # 4.均方根值(有效值) X_max = np.max(x) # 5.最大值 X_min = np.min(x) # 6.最小值 X_p = max(abs(X_max), abs(X_min)) # 7.峰值 X_pp = X_max - X_min # 8.峰峰值 X_avg = np.mean(np.abs(x)) # 9.平均绝对幅值 X_r = np.mean(np.sqrt(np.abs(x))) ** 2 # 10.方根幅值 X_alpha = np.mean(np.power(x, 3)) # 11.偏度(歪度) X_beta = np.mean(np.power(x, 4)) # 12.峭度 # -------无量纲指标-------# X_wf = X_rms / X_avg # 13.波形指标 X_cf = X_pp / X_rms # 14.峰值指标 X_if = X_pp / X_avg # 15.脉冲指标 X_clf = X_pp / X_r # 16 裕度指标 X_pf = X_alpha / X_rms ** 3 # 17.偏度指标 X_kf = X_beta / X_rms ** 4 # 18.峭度指标 time_domain_features_list = [X_mean, X_std, X_rms2, X_rms, X_max, X_min, X_p, X_pp, X_avg, X_r, X_alpha, X_beta, X_wf, X_cf, X_if, X_clf, X_pf, X_kf] time_domain_names_list = ['平均值', '方差', '均方值', '均方根值', '最大值', '最小值', '峰值', '峰峰值', '平均绝对幅值', '方根幅值', '偏度', '峭度', '波形指标', '峰值指标', '脉冲指标', '裕度指标', '偏度指标', '峭度指标'] ##for i in range(len(time_domain_names_list)): #print(time_domain_names_list[i], ':', time_domain_features_list[i]) return time_domain_features_list, time_domain_names_listdef IMF_data_acquision(FilePath, n): """ fun: 从IMF文件读取加速度数据 return accl_data: 加速度数据,array类型 """ data = np.loadtxt(fname=file_path) accl_data = data[:, n] return accl_database_dir = r'F:/pycharm_dataset/IMS_use/2test_data'file_name_list = os.listdir(base_dir)all_time_domain_features_list = []for file_name in file_name_list: file_path = os.path.join(base_dir, file_name) data = IMF_data_acquision(FilePath=file_path, n=0) time_domain_features_list, time_domain_names_list = get_time_domain_features(data=data) all_time_domain_features_list.append(time_domain_features_list)all_time_domain_features_arr = np.array(all_time_domain_features_list)num_features = len(time_domain_names_list) # 总特征数量num_plots = num_features // 6 # 子图数量for plot_idx in range(num_plots): fig, axes = plt.subplots(2, 3, figsize=(12, 8)) for i, ax in enumerate(axes.flatten()): feature_idx = plot_idx * 6 + i ax.plot(all_time_domain_features_arr[:, feature_idx]) ax.set_title(time_domain_names_list[feature_idx]) plt.tight_layout() plt.show()

总结

一些数据分析:
峭度对冲击信号比较敏感,冲击往往意味着故障的发生,因此反映的故障信息也较多;随着轴承退化,其值从初始的 4 以下逐渐升高到 17 左右;峭度指标往往波动性较大,在轴承损伤严重的后期,曲线还出现了短暂的下降趋势;
均值指标则呈现总体平稳的趋势,只在轴承快损坏的后期阶段出现波动;偏度指标对冲击反映也十分明显,图形波动幅度较大;
峰值和裕度指标不能很好反映轴承性能退化这一过程,从其中所获取的有用信息也较少

综上述分析,RMS、峭度和偏度可以粗略描述轴承性能退化的这一趋势,可以用来组合作为轴承性能评估指标;而其他指标则不能很好地反映这一点,属于质量较差的指标,若选用会对最终评估结果带来干扰,因此,不作为评估指标

相关推荐

相关文章