哈工大航发轴承数据集(HIT)

1、概述

这次给大家带来一个哈尔滨工业大学公开的轴承数据集,这个轴承是航空发动机内外转子之间的轴承(Inter-shaft bearing),也叫中介轴承。不清楚得可以看下图:

哈工大航发轴承数据集是由哈尔滨工业大学陈予恕团队的侯磊教授发布的:

部分数据集链接(https://github.com/HouLeiHIT/HIT-dataset) 

全部数据链接(https://drive.google.com/drive/folders/1Km1Go4ilB_bI033SBJ7eJ0uCzbqEqbgt?usp=sharing) 

该数据集包括了不同转速下的正常轴承、内圈故障轴承、外圈故障轴承的监测数据,传感器类型有2个电涡流位移传感器4个振动传感器,数据特色在于这是一个接近航空发动机实体的监测数据,更加具有参考意义,可用于信号处理、智能诊断、迁移学习等方面的研究。

该数据类型是.py格式的,我给转换成.mat格式了,方便matlab继续处理。此外,初步开展了正常、内圈故障、外圈故障的时域分析、频域分析和包络谱分析,供大家对这个数据有个大概的了解!

本内容相关资料参考了文献[1],使用该数据集,请引用该参考文献,促进知识传播!

[1]Hou, L., H. Yi, Y. Jin, M. Gui, L. Sui, J. Zhang, and Y. Chen. “Inter-Shaft Bearing Fault Diagnosis Based on Aero-Engine System: A Benchmarking Dataset Study”. Journal of Dynamics, Monitoring and Diagnostics, vol. 2, no. 4, Aug. 2023, pp. 228-42, doi:10.37965/jdmd.2023.314.

代码采用了Matlab 2024a进行运行,欢迎大家测试和提出问题!

2、试验台

如上图所示,该试验台主要由电机驱动系统、改进后的航空发动机润滑系统三部分组成。

电机驱动系统中,由2个电机分别驱动低压转子和高压转子,如下图所示。低压电机直接驱动低压转子,高压电机通过升速齿轮箱驱动高压转子。下表给出了2个电机的一些参数。

润滑系统主要起冷却和润滑作用,它由3个供油泵、1个回油泵、1个配备温度传感器的热泵组成。其中,如下图所示。

改进的航空发动机中,它去除了航空发动机原型中的转子叶片、燃烧室和一些辅助壳体,保留了航空发动机的主要部件——双转子结构,如下图所示。双转子结构包括了低压(LP)压气机、高压(HP)压压气机、低压涡轮和高压涡轮。主要的结构有壳体、中介轴承和五个支撑轴承。

中介轴承如下图所示:

3、故障轴承

在本数据集中,轴承的故障均为人为设置。故障轴承分别有内圈故障外圈故障,故障采用线切割加工而成。具体故障尺寸和故障轴承图片,如下所示。此外,本数据集也包含了正常轴承的数据。

该轴承的几何参数如下表所示,相应的故障系数计算如下:

该轴承参数不是标准轴承,应该是一个定制的轴承。此外,由于是双转子结构,即内圈和外圈均要旋转,所以fr为相对转速,有疑问的请参考该博文:https://mp.weixin.qq.com/s?__biz=MzI5NTM0MTQwNA==&mid=2247486350&idx=1&sn=7f07cb6c71561773f0d720ff0fb3191d&token=404908104&lang=zh_CN&scene=21#wechat_redirect

4、传感器

在该试验台中,不同传感器的布置位置如下图所示。

从图上能发现一共有6个测试位置。不同测点位置的传感器类型如下表所示:

其中,1和2测试位置相近,这里安装的位移传感器,它负责测量低压转子的水平和垂直位移响应。3、4、5、6位置安装加速度传感器,它们测量机匣振动响应。传感器的信号通过TRION-2402-dACC差分多功能模块,由 DEWETRON DEWE2-M7进行分析。采样频率设置为25000Hz。

5、工况设置和测试

该实验台采用了双电机驱动,模拟了航空发动机的双转子结构。通过调节2个电机不同的转速,模拟航空发动机中介轴承的工作状态和失效模式特性。

在该数据集中,当电机分别运行至指定转速后,采集中介轴承振动数据和位移数据。其中,高/低压转子的转速组合如下图所示:

上表中,LP表示低压转子,HP表示高压转子,共有28种转速组合。

所有测试的采样频率为25000Hz,每种转速组合下采集数据长度为20480,不同轴承(正常、内圈故障、外圈故障)的数据采集明细如下表所示:

根据上表所示,5个轴承共计有2412组数据。其中data1和data2为正常轴承的振动数据,data3和data4为不同内圈裂纹缺陷的轴承,data5为外圈裂纹缺陷的轴承。

值得注意是,每个轴承的转速组合并不完全覆盖表中的28个组合。换句话说,data2和data3中缺少一部分转速组合。下图分别为不同轴承中,高/低压转子的转速组合(data_analysis.m实现):

在上图中,data1和data3和data4覆盖了所有28个转速,每个转速分别有18个测试样本,即28*18=504。而data2和data5有25种转速组合,每个转速分别有18个测试样本,即25*18=450。

虽然部分轴承没有完全覆盖所有转速,但是仍然有3个轴承覆盖了所有转速,每个转速有18个样本,这些数据是充足的,它可被用于研究迁移学习的可行性和有效性。

每个data中为一个轴承的数据,源数据为python的.npy数据集,冷漠转换为了.mat格式,每个.npy均对应着一个data.mat数据,转换的代码文件为data_tranfrom2.py。

原始数据中,每个文件中有一个数组变量A,它有3个维度,第一个维度代表数据片段,如下图中sets of data;第二个维度为不同传感器通道,即下图中1,2,3,....,8;第三个维度为时间维度,它的大小为20480。

根据上面介绍可知,每个轴承的数据存储在一个数组变量中。以data1数据为例,变量的维度为504X6X20480,该变量的定义满足上图要求。在未定义的地方,默认值均为0。

6、数据分析

为了方便大家了解数据,本文选择了LP转速为5000rpm、HP转速为6000rpm工况下的一组数据进行分析。对应代码为main.m文件,下图为不同轴承的轴心轨迹对比结果:

从上图中能发现,对比故障轴承,正常状态下轴承的轴心轨迹范围相对较小,两个轴承的轴心轨迹差异也比较大,且没有明显的规律。内圈故障轴承的轴心轨迹具有明显的周期性(位移传感器测量低压转子的轴心轨迹,而低压转子连接轴承内圈),这与内圈故障的特性有关。外圈故障轴承的轴心轨迹是没有规律的。(分析的有不专业的地方欢迎指正哈!!!)

下面四幅图分别为不同通道的振动信号分析,从左到右分别对应时域信息、时域局部波形、频域波形、包络谱波形

不同轴承通道3的振动信号分析

不同轴承通道4的振动信号分析

不同轴承通道5的振动信号分析

不同轴承通道6的振动信号分析

从上述图中能发现,高压转子的旋转频率(101.318Hz)及其倍频能更多的被发现低压转子的频率在包络谱中很难找到,在频谱中能发现其峰值,但是相对于高压转子的转频很低

此外,理论内圈故障频率为156.0523Hz(8.5227*(101.318-83.0078)=156.0523),外圈故障频率为118.6007Hz(6.4773*(101.318-83.0078)=118.6007)。

然而,在包络谱图中很难在寻找到这些故障频率,仅在通道3中找到了外圈故障频率,相对转频101.318,它的幅值很微弱在通道6中找到了内圈故障频率148.926Hz,在data3和data4中均发现了,在data4中该幅值是更高的,这可能是因为data4对应轴承裂纹长度更长的原因。然而,在data2中,也能发现内圈故障频率148.926Hz,它对应的是正常轴承样本,它的幅值为0.016,低于data3中0.038和data4中0.059。因此,单独从有无故障特征峰值无法准确判断一定是有故障,还需要结合特征峰幅值进行判断

此外,从上述各个信号的频域图中能发现,信号中谐波成分及其倍频很多,这增加了信号分析的难度。

总的来说,对比凯斯西楚等一些轴承故障模拟试验台,该试验台获得的信号更加真实,具有更大的研究价值,有待提出先进的信号处理和故障诊断方法。

请各位读者注意哈:这是我粗浅的分析,有分析不对的地方,欢迎评论留言。涉及滚动体故障频率这块,我没有深入分析,感觉自己不懂,欢迎有想法的各位分析后,留下自己的看法,帮助后来人!

7、相关代码

代码主要分为三个(1个Python的代码文件.py,2个matlab的代码文件.m):

1、data_tranform2.py(批量将原始的数据.npy格式转换为matlab的.mat格式,运行前请修改文件夹路径,安装相应的环境

2、data_analysis.m(查看五个轴承数据的运行工况)

3、main.m(分析五个轴承的位移信号和加速度信息)

4、frequ_am_phase.m(幅值谱和相位谱计算函数)

说明:

frequ_am_phase.m函数

调用形式:

[freq,P1,Theta]=frequ_am_phase(y,fs,tol)

输入:

信号y,矩阵,行X列=单个信号的采样索引X信号数,比如信号的大小为8192X12,表示一个有12个信号的数据矩阵,每个信号长度为8192。注意,如果仅有一个信号,则y应该是一个列向量。同时,y的行数尽量为偶数,奇数的话会引起程序索引的警告。

      fs:采样频率,标量

     tol:相位阈值参数,标量(可缺省,下面讲解)

输出

       freq:表示幅值谱的横轴,向量,HzX1

       P1:表示幅值谱的纵轴,矩阵,单个信号的采样索引X信号数,类比信号y

       Theta:表示相位谱的纵轴,矩阵,单个信号的采样索引X信号数,类比信号y

5、采用matlab的envspectrum函数绘制包络谱,有疑问的请移步之前文章(包络谱分析

data_tranform2.py(批量将原始的数据.npy格式转换为matlab的.mat格式,运行前请修改文件夹路径,安装相应的环境)

import numpy as np
import scipy.io as io
import os

# 设置.npy文件所在的目录
npy_directory = 'F:\我的文档\硕士\数据\哈工大航发轴承数据\data_transform'
# 设置导出.mat文件的目录
mat_directory = 'F:\我的文档\硕士\数据\哈工大航发轴承数据\data_transform'

# 确保.mat文件保存目录存在
os.makedirs(mat_directory, exist_ok=True)

# 遍历.npys文件
for npy_file in os.listdir(npy_directory):
    if npy_file.endswith('.npy'):  # 检查文件扩展名
        # 生成完整的文件路径
        npy_file_path = os.path.join(npy_directory, npy_file)

        # 加载.npy文件
        data = np.load(npy_file_path)

        # 生成.mat文件名
        mat_file_name = npy_file.replace('.npy', '.mat')
        mat_file_path = os.path.join(mat_directory, mat_file_name)

        # 保存为.mat文件
        io.savemat(mat_file_path, {'data': data})

print("批量导出完成!")

data_analysis.m(查看五个轴承数据的运行工况,使用前请修改文件路径)

%% 不同数据的转速分析
clc
clear all
close all
%% 数据处理
%分析数据的标签和转速
load("data1.mat")
label=squeeze(data(:,8,:));
speed=squeeze(data(:,7,:));
figure
plot(speed(:,1)); hold on;
plot(speed(:,2));
legend('LP转速','HP转速')

load("data2.mat")
label=squeeze(data(:,8,:));
speed=squeeze(data(:,7,:));
figure
plot(speed(:,1)); hold on;
plot(speed(:,2));
legend('LP转速','HP转速')

load("data3.mat")
label=squeeze(data(:,8,:));
speed=squeeze(data(:,7,:));
figure
plot(speed(:,1)); hold on;
plot(speed(:,2));
legend('LP转速','HP转速')

load("data4.mat")
label=squeeze(data(:,8,:));
speed=squeeze(data(:,7,:));
figure
plot(speed(:,1)); hold on;
plot(speed(:,2));
legend('LP转速','HP转速')

load("data5.mat")
label=squeeze(data(:,8,:));
speed=squeeze(data(:,7,:));
figure
plot(speed(:,1)); hold on;
plot(speed(:,2));
legend('LP转速','HP转速')

main.m(分析五个轴承的位移信号和加速度信息,运行前请修改文件路径)

clc
clear all
close all
%% 数据分析
%data1  正常模式
load("F:\我的文档\硕士\数据\哈工大航发轴承数据\data_transform\data1.mat")
f1=squeeze(data(361:378,:,:));   %提取LP5000-HP6000转速的数据
f{1,1}=squeeze(f1(5,:,:))';f{1,2}='data1';
%data2  正常模式
load("F:\我的文档\硕士\数据\哈工大航发轴承数据\data_transform\data2.mat")
f1=squeeze(data(361:378,:,:));   %提取LP5000-HP6000转速的数据
f{2,1}=squeeze(f1(5,:,:))';f{2,2}='data2';
%data3  内圈故障模式
load("F:\我的文档\硕士\数据\哈工大航发轴承数据\data_transform\data3.mat")
f1=squeeze(data(361:378,:,:));   %提取LP5000-HP6000转速的数据
f{3,1}=squeeze(f1(5,:,:))';f{3,2}='data3';
%data4  内圈故障模式
load("F:\我的文档\硕士\数据\哈工大航发轴承数据\data_transform\data4.mat")
f1=squeeze(data(361:378,:,:));   %提取LP5000-HP6000转速的数据
f{4,1}=squeeze(f1(5,:,:))';f{4,2}='data4';
%data5  外圈故障模式
load("F:\我的文档\硕士\数据\哈工大航发轴承数据\data_transform\data5.mat")
f1=squeeze(data(307:324,:,:));   %提取LP5000-HP6000转速的数据
f{5,1}=squeeze(f1(5,:,:))';f{5,2}='data5';
fs=25000;   %采样频率
t=1/fs:1/fs:size(data,3)/fs;


%% 正常信号、内圈故障信号、外圈故障信号的对比
% 轴心轨迹
figure;
tiledlayout(1,5,'TileSpacing','tight','Padding','tight');
for i=1:size(f,1)    %不同轴承的轴心轨迹
    nexttile;
    plot(f{i,1}(:,1),f{i,1}(:,2),'b');
    axis([-2 2 -2 2]);
    title(strcat('轴心轨迹:',f{i,2}));
end


% 第3通道的振动信号
ch=3;   %第3个通道
figure;
tiledlayout(5,4,'TileSpacing','tight','Padding','tight');
for i=1:size(f,1)    %不同轴承
    %时域分析
    nexttile;
    plot(t,f{i,1}(:,ch),'b');xlabel('time/s');ylabel('幅值');
    axis([0 t(end) -1 1]);
    title(strcat(f{i,2},'CH3时域信号:'));
    nexttile
    plot(t(1001:1000+2048),f{i,1}(1001:1000+2048,ch),'b');xlabel('time/s');ylabel('幅值');
    axis([t(1001) t(1000+2048) -1 1]);
    title(strcat(f{i,2},'CH3时域信号细节:'));
    
    %频域分析
    [frequ,pin_yu,~]=frequ_am_phase(f{i,1}(:,ch),fs);
    [env frequ_env ~]=envspectrum(f{i,1}(:,ch),fs,"Method","hilbert",'Band',[frequ(2) frequ(end-1)]);

    nexttile;
    plot(frequ,pin_yu,'b');xlabel('frequency/Hz');ylabel('幅值');
    axis([0 fs/2 0 0.1]);
    title(strcat(f{i,2},'CH3时域信号:'));
    nexttile;
    plot(frequ_env,env,'b');xlabel('frequency/Hz');ylabel('幅值');
    axis([0 3000 0 0.1]);
    title(strcat(f{i,2},'CH3时域信号:'));
end

% 第4通道的振动信号
ch=4;   %第4个通道
figure;
tiledlayout(5,4,'TileSpacing','tight','Padding','tight');
for i=1:size(f,1)    %不同轴承
    %时域分析
    nexttile;
    plot(t,f{i,1}(:,ch),'b');xlabel('time/s');ylabel('幅值');
    axis([0 t(end) -1 1]);
    title(strcat(f{i,2},'CH4时域信号:'));
    nexttile
    plot(t(1001:1000+2048),f{i,1}(1001:1000+2048,ch),'b');xlabel('time/s');ylabel('幅值');
    axis([t(1001) t(1000+2048) -1 1]);
    title(strcat(f{i,2},'CH4时域信号细节:'));
    
    %频域分析
    [frequ,pin_yu,~]=frequ_am_phase(f{i,1}(:,ch),fs);
    [env frequ_env ~]=envspectrum(f{i,1}(:,ch),fs,"Method","hilbert",'Band',[frequ(2) frequ(end-1)]);

    nexttile;
    plot(frequ,pin_yu,'b');xlabel('frequency/Hz');ylabel('幅值');
    axis([0 fs/2 0 0.1]);
    title(strcat(f{i,2},'CH4时域信号:'));
    nexttile;
    plot(frequ_env,env,'b');xlabel('frequency/Hz');ylabel('幅值');
    axis([0 3000 0 0.05]);
    title(strcat(f{i,2},'CH4时域信号:'));
end

% 第5通道的振动信号
ch=5;   %第5个通道
figure;
tiledlayout(5,4,'TileSpacing','tight','Padding','tight');
for i=1:size(f,1)    %不同轴承
    %时域分析
    nexttile;
    plot(t,f{i,1}(:,ch),'b');xlabel('time/s');ylabel('幅值');
    axis([0 t(end) -1 1]);
    title(strcat(f{i,2},'CH5时域信号:'));
    nexttile
    plot(t(1001:1000+2048),f{i,1}(1001:1000+2048,ch),'b');xlabel('time/s');ylabel('幅值');
    axis([t(1001) t(1000+2048) -1 1]);
    title(strcat(f{i,2},'CH5时域信号细节:'));
    
    %频域分析
    [frequ,pin_yu,~]=frequ_am_phase(f{i,1}(:,ch),fs);
    [env frequ_env ~]=envspectrum(f{i,1}(:,ch),fs,"Method","hilbert",'Band',[frequ(2) frequ(end-1)]);

    nexttile;
    plot(frequ,pin_yu,'b');xlabel('frequency/Hz');ylabel('幅值');
    axis([0 fs/2 0 0.1]);
    title(strcat(f{i,2},'CH5时域信号:'));
    nexttile;
    plot(frequ_env,env,'b');xlabel('frequency/Hz');ylabel('幅值');
    axis([0 3000 0 0.05]);
    title(strcat(f{i,2},'CH5时域信号:'));
end

% 第6通道的振动信号
ch=6;   %第6个通道
figure;
tiledlayout(5,4,'TileSpacing','tight','Padding','tight');
for i=1:size(f,1)    %不同轴承
    %时域分析
    nexttile;
    plot(t,f{i,1}(:,ch),'b');xlabel('time/s');ylabel('幅值');
    axis([0 t(end) -1 1]);
    title(strcat(f{i,2},'CH6时域信号:'));
    nexttile
    plot(t(1001:1000+2048),f{i,1}(1001:1000+2048,ch),'b');xlabel('time/s');ylabel('幅值');
    axis([t(1001) t(1000+2048) -1 1]);
    title(strcat(f{i,2},'CH6时域信号细节:'));
    
    %频域分析
    [frequ,pin_yu,~]=frequ_am_phase(f{i,1}(:,ch),fs);
    [env frequ_env ~]=envspectrum(f{i,1}(:,ch),fs,"Method","hilbert",'Band',[frequ(2) frequ(end-1)]);

    nexttile;
    plot(frequ,pin_yu,'b');xlabel('frequency/Hz');ylabel('幅值');
    axis([0 fs/2 0 0.1]);
    title(strcat(f{i,2},'CH6时域信号:'));
    nexttile;
    plot(frequ_env,env,'b');xlabel('frequency/Hz');ylabel('幅值');
    axis([0 3000 0 0.1]);
    title(strcat(f{i,2},'CH6时域信号:'));
end

frequ_am_phase.m(幅值谱和相位谱计算函数)

function [freq,P1,Theta]=frequ_am_phase(y,fs,tol)
%% 作者:冷漠
%% 时间:2024年6月01日
%% 关注公众号 :"故障诊断与寿命预测工具箱",每天进步一点点
%% 绘制信号频域的幅值谱和相位谱
%% 参数解释:  
%     y: 表示输入信号,它可以为一个矩阵,行X列,具体为单个信号的采样索引X信号数
%        比如y的大小为8192X12,表示一个有12个信号的数据矩阵,每个信号长度为8192
%        注意,如果仅有一个信号,则y应该是一个列向量
%        同时,y的行数尽量为偶数,奇数的话会引起程序索引的警告
%     fs:表示采样频率
%     tol:相位阈值参数
%     freq:表示幅值谱的横轴
%     P1:表示幅值谱的纵轴
%     Theta:表示相位谱的纵轴

if nargin==2
    tol=1e-6;  %计算误差的默认阈值
end

L=size(y,1);         % 信号长度
% Y=fft(y,2^nextpow2(L));          % FFT 快速傅里叶变换
Y=fft(y,L);          % FFT 快速傅里叶变换
freq=(0:L/2)*fs/L;   % 设置频率刻度  横轴Hz
%幅值谱
P2 = abs(Y/L);
P1 = P2(1:L/2+1,:);
P1(2:end-1,:) = 2*P1(2:end-1,:);  %纵轴 幅值

%相位谱
P2(2:end-1,:)=2*P2(2:end-1,:);
for i=1:size(Y,2)
    Y(P2(:,i)<tol,i) = 0;
    theta(:,i) = angle(Y(:,i))/pi;
end
Theta=theta(1:L/2+1,:);
end

8、细节说明

1、在运行data_tranform2.py等文件时,请记得修改文件路径。同时,如果出现错误可以询问AI,并结合dubug功能进行解决。

2、本文中频域分析包络谱分析不了解的,可以参考之前的文章。在资源列表里面有。

3、该数据集的故障诊断难度明显高于一般的轴承故障模拟试验台,适用于验证智能诊断模型的有效性

4、本文是一个双转子的试验台,轴承的故障频率计算公式中转频应理解为内、外圈的相对转频,可参考博文:https://mp.weixin.qq.com/s?__biz=MzI5NTM0MTQwNA==&mid=2247486350&idx=1&sn=7f07cb6c71561773f0d720ff0fb3191d&token=404908104&lang=zh_CN&scene=21#wechat_redirect。

9、总结

上述是一个哈工大航发轴承数据集,它由哈尔滨工业大学陈予恕团队侯磊教授发布。

该数据集包含了5个轴承(2个正常、2个不同裂纹长度的内圈故障、1个外圈故障)的内圈位移数据、四个不同测点的振动数据,数据覆盖了最多达28种转速组合,数据分析难度高、数据量大,可用于信号处理、智能诊断、迁移学习等方面的研究。

此外,本文从时域、频域和包络谱角度,初步分析了LP转速为5000rpm、HP转速为6000rpm下中介轴承的轴心轨迹和振动信号。

10、相关资料

附件

xck8

1、上述源码    

①代码文件: 

data_tranform2.py(批量将原始的数据.npy格式转换为matlab的.mat格式)

data_analysis.m(查看五个轴承数据的运行工况)

main.m(分析五个轴承的位移信号和加速度信息)

frequ_am_phase.m(幅值谱和相位谱计算函数)

②数据文件

原始数据文件(python的文件):data1.npy、data2.npy、data3.npy、data4.npy、data5.npy

转换后数据文件(matlab的文件):data1.mat、data2.mat、data3.mat、data4.mat、data5.mat

2、相关参考

①Hou, L., H. Yi, Y. Jin, M. Gui, L. Sui, J. Zhang, and Y. Chen. “Inter-Shaft Bearing Fault Diagnosis Based on Aero-Engine System: A Benchmarking Dataset Study”. Journal of Dynamics, Monitoring and Diagnostics, vol. 2, no. 4, Aug. 2023, pp. 228-42, doi:10.37965/jdmd.2023.314.

②https://drive.google.com/drive/folders/1Km1Go4ilB_bI033SBJ7eJ0uCzbqEqbgt?usp=sharing

关注公众号“故障诊断与寿命预测工具箱”,每天进步一点点。 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值