当前位置: 首页 > news >正文

东南大学严如强团队机械故障数据集实测:从下载到预处理全流程指南

东南大学机械故障数据集实战指南:从数据获取到模型训练全解析

在工业设备健康管理领域,高质量的数据集是算法研发和工程验证的基石。东南大学严如强教授团队开源的机械故障数据集(Mechanical-datasets)因其丰富的故障类型标注和标准化的采集条件,已成为国内外故障诊断研究的热门选择。本文将手把手带您完成从数据集获取到预处理再到模型训练的全流程操作,特别针对初次接触该数据集的研究人员和工程师提供实用指导。

1. 数据集获取与环境准备

1.1 官方渠道获取数据集

该数据集托管于GitHub平台,由团队博士生邵思羽维护。获取数据最可靠的方式是通过官方仓库:

git clone https://github.com/cathysiyu/Mechanical-datasets.git

数据集包含以下核心文件:

  • bearing_data/:轴承振动信号(包含内圈、外圈、滚动体故障)
  • gear_data/:齿轮箱多工况振动数据
  • documentation/:采集参数说明与标注规范
  • example_scripts/:MATLAB和Python的数据加载示例

常见问题解决方案

  • 若克隆速度慢,可尝试在URL后添加.git或使用SSH协议
  • 大文件下载失败时,建议开启git config --global http.postBuffer 524288000

1.2 本地环境配置

推荐使用Python 3.8+环境,主要依赖库包括:

库名称版本要求功能说明
numpy≥1.19数值计算基础库
pandas≥1.2数据框操作
scipy≥1.6信号处理工具
scikit-learn≥0.24机器学习工具链
PyTorch≥1.8深度学习框架(可选)

安装命令示例:

pip install numpy==1.21.3 pandas==1.3.4 scipy==1.7.1 scikit-learn==0.24.2

2. 数据结构解析与初步探索

2.1 数据集目录架构

Mechanical-datasets/ ├── bearing_data/ │ ├── normal/ # 正常状态样本 │ ├── inner_race_fault/ # 内圈故障 │ ├── outer_race_fault/ # 外圈故障 │ └── ball_fault/ # 滚动体故障 ├── gear_data/ │ ├── healthy/ # 健康状态 │ ├── missing_tooth/ # 缺齿故障 │ ├── root_crack/ # 齿根裂纹 │ └── surface_pitting/ # 表面点蚀 └── documentation/ ├── acquisition_params.csv # 采集参数 └── fault_types.xlsx # 故障类型编码

2.2 数据加载与可视化

使用Python加载轴承振动数据的示例代码:

import numpy as np import matplotlib.pyplot as plt # 加载单通道振动信号 bearing_normal = np.load('bearing_data/normal/channel1.npy') bearing_fault = np.load('bearing_data/inner_race_fault/channel1.npy') # 绘制时域波形对比 plt.figure(figsize=(12,4)) plt.subplot(121) plt.plot(bearing_normal[:1000]) plt.title('Normal Bearing') plt.subplot(122) plt.plot(bearing_fault[:1000], 'r') plt.title('Faulty Bearing') plt.show()

注意:实际采样率为12.8kHz,建议分析时标注正确的时间轴刻度

3. 专业级数据预处理流程

3.1 时频域特征工程

针对振动信号的典型特征提取方法:

  1. 时域特征(14个经典指标):

    • 均值、方差、峰值、峰峰值
    • 峭度(Kurtosis)、偏度(Skewness)
    • 波形指标、脉冲指标、裕度指标
  2. 频域特征

    • FFT频谱幅值(0-6.4kHz)
    • 包络谱分析(针对轴承故障)
    • 小波包能量熵(适合齿轮故障)

特征提取代码片段:

from scipy.stats import kurtosis, skew from scipy.fft import fft def extract_features(signal): features = { 'rms': np.sqrt(np.mean(signal**2)), 'kurtosis': kurtosis(signal), 'skewness': skew(signal), 'peak_to_peak': np.ptp(signal), 'spectral_centroid': np.sum(fft(signal)*np.arange(len(signal)))/np.sum(fft(signal)) } return features

3.2 数据增强策略

针对小样本场景的有效增强方法:

方法参数设置适用场景
时域抖动幅度±5%所有振动信号
频带随机滤波截止频率±200Hz轴承故障
时间扭曲拉伸/压缩率±10%低速工况
噪声注入SNR≥30dB抗干扰训练

4. 故障诊断模型实战

4.1 传统机器学习方案

构建随机森林分类器的完整流程:

from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split # 假设X是特征矩阵,y是标签 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) # 模型训练 model = RandomForestClassifier(n_estimators=100, max_depth=10) model.fit(X_train, y_train) # 评估 print(f"Test accuracy: {model.score(X_test, y_test):.2%}")

4.2 深度学习方法示例

使用1D CNN处理原始振动信号:

import torch import torch.nn as nn class FaultDiagnosisCNN(nn.Module): def __init__(self, num_classes): super().__init__() self.conv_layers = nn.Sequential( nn.Conv1d(1, 32, kernel_size=64, stride=8), nn.ReLU(), nn.MaxPool1d(4), nn.Conv1d(32, 64, kernel_size=3), nn.ReLU(), nn.MaxPool1d(2) ) self.classifier = nn.Linear(64*15, num_classes) # 需根据实际输入调整 def forward(self, x): x = self.conv_layers(x) x = x.view(x.size(0), -1) return self.classifier(x)

提示:输入数据需预处理为(batch_size, 1, signal_length)格式

5. 工程实践中的关键技巧

在实际项目中使用该数据集时,有几个经验值得分享:

  1. 采样率统一:虽然数据集标注了12.8kHz采样率,但不同批次数据建议重新验证
  2. 故障严重度分级:原始数据包含多种故障尺寸,可进一步细分为轻微/中等/严重三级
  3. 跨设备泛化测试:建议将数据按采集设备划分验证集,测试模型泛化能力

齿轮故障诊断的特殊处理:

# 齿轮信号特有的阶次分析 def order_analysis(signal, rpm, sampling_rate): rotation_freq = rpm / 60 order = np.fft.fftfreq(len(signal), d=1/sampling_rate) / rotation_freq spectrum = np.abs(np.fft.fft(signal)) return order, spectrum

遇到信号截断问题时,可以尝试重叠分帧处理:

  • 帧长:2048点(约0.16秒)
  • 帧移:512点(75%重叠率)
  • 加窗:汉宁窗减少频谱泄漏
http://www.jsqmd.com/news/653392/

相关文章:

  • 嵌入式Linux--U-Boot(五)NAND命令实战:从擦除到烧写的完整流程
  • 2026奇点大会AI学习助手深度解密(仅限首批参会者验证的4层知识蒸馏架构)
  • G7080 G6080 TR8580 MB548 E568 TS6320 TS8380 g3800 MG3810打印机废墨垫清零软件,错误代码5B00,P07,E08,1700亲测可以用,推荐。
  • 三菱FX5U Socket通信避坑指南:被动模式下的5个常见错误与稳定连接秘诀
  • 群晖Docker实战:Calibre Web构建个人云端数字书房
  • Vue项目中天地图动态标注的添加与删除实践
  • 遥感数字图像处理教程【2.3】
  • 别再硬编码了!用QML的property alias让组件复用像搭积木一样简单(附Column+Repeater实战)
  • MIUI12.5免TWRP直刷Magisk Root教程(附卡米救砖指南)
  • 用ESP32-S3和OV2640摄像头DIY一个智能猫眼,再也不用担心门外是谁了(附ILI9488屏幕显示教程)
  • 如何让机器人实现100%无死角覆盖:ROS回溯螺旋算法的工业级解决方案
  • PCB接地设计
  • LlamaFactory-webui保姆级教程:从零开始训练你的第一个大语言模型(附避坑指南)
  • ZYNQ7Z035 TCP数据上传速度上不去?手把手教你排查LWIP协议栈配置与内存优化
  • 生成式AI响应慢、结果不准、成本飙升?立即执行这6个链路探针埋点,30分钟定位根因
  • STM32开发效率翻倍:用VS Code + EIDE插件实现代码编辑、编译、烧录、调试一站式搞定
  • Kubernetes Pod 生命周期与状态机
  • 终极Windows风扇控制指南:告别噪音与高温的完整解决方案
  • K8s Kustomize介绍(Kubernetes官方声明式配置管理工具,通过叠加overlay方式定制资源)kubectl内置、Patch补丁机制、GitOps
  • 2025年03月CCF-GESP编程能力等级认证Python编程六级真题解析
  • 避坑指南:RK3588J交叉编译OpenCV时GTK配置失败的几种原因及解决方案
  • 版图后仿必看:如何通过SPICE网表参数识别STI应力效应问题?
  • Windows Defender完全禁用终极指南:快速彻底关闭系统防护的完整教程
  • Dify 1.0 在Windows Docker环境下的PostgreSQL数据目录权限问题终极解决方案
  • 2026年比较好的LED显示屏公司选择指南 - 品牌宣传支持者
  • 【SITS2026独家数据】:92.7% ROUGE-L提升背后——新闻摘要生成的3层对齐架构
  • DownKyi:3个超实用技巧帮你轻松搞定B站视频下载
  • 手把手教你用STM32F030和面包板搞定QN8027调频发射(附完整代码)
  • 移动端架构演进历程解析
  • 数学的上帝粒子!一个运算符能导出所有基本函数