格拉姆角场实战:东南大学轴承故障诊断数据集深度剖析与代码实现

1. 从振动信号到图像:为什么我们需要格拉姆角场?

如果你做过工业设备的故障诊断,尤其是像轴承、齿轮箱这类旋转机械,那你肯定对振动信号不陌生。我们拿到手的,往往就是一长串随时间变化的数字,专业点说叫“时域信号”。我刚开始接触东南大学这个轴承数据集的时候,看着那8个通道、每秒5120个采样点的海量数据,第一反应也是有点懵。这玩意儿直接扔给模型,比如LSTM或者1D-CNN,理论上当然可以,但效果和效率往往不尽如人意。模型需要从这些看似杂乱无章的波形里,自己去学习什么是“内圈故障”,什么是“滚子故障”,这太难为它了,相当于让一个没经验的新手直接去听设备运行的杂音来判断故障。

这时候,格拉姆角场(Gramian Angular Field, GAF)就派上用场了。你可以把它理解为一个“翻译官”或者“转换器”。它的核心任务,是把我们熟悉的一维时间序列(那串数字),转换成一个二维的图像。这个转换过程非常巧妙,它保留了原始信号的全部信息,同时以一种更结构化、更视觉友好的方式呈现出来。

为什么图像格式更好?因为计算机视觉领域在过去十年里太强大了。从AlexNet到ResNet,再到现在的Vision Transformer,我们有无数经过千锤百炼、在ImageNet上证明过自己的图像分类模型。把故障诊断问题,从一个抽象的时间序列分类问题,转化成一个具体的图像分类问题,我们就能直接“借用”这些强大的图像模型,站在巨人的肩膀上。我自己实测下来,用GAF把振动信号转成图像,再用一个轻量级的CNN(比如ResNet18)去训练,模型的收敛速度和最终准确率,通常都比直接处理原始信号要好上一个档次。

简单来说,GAF的转换过程分两步走:第一步,把时间序列数据通过某种缩放(比如缩放到[-1, 1]或[0, 1]区间),然后通过反余弦函数(arccos)映射到极坐标的角度上。这一步保证了每个数据点的唯一性。第二步,利用三角函数的和差公式,计算不同时间点数据之间的“关系”,这个关系值就构成了最终图像的像素值。最终生成的是一张正方形的、颜色深浅代表数据关联度的“热力图”。内圈故障的信号和正常信号的“关联模式”在这张图里会呈现出肉眼可能难以察觉,但模型极易捕捉的差异。

所以,面对东南大学轴承数据集,我们的核心思路就清晰了:深入理解数据集的原始结构 -> 对原始振动信号进行必要的预处理 -> 利用GAF将每个样本(一段信号)转换为一张图像 -> 构建一个图像分类模型进行故障诊断。接下来,我们就一步步拆解这个流程。

2. 庖丁解牛:深度剖析东南大学轴承故障数据集

拿到数据集,最忌讳的就是不管三七二十一,直接开始写代码。磨刀不误砍柴工,花点时间把数据集的来龙去脉、内部结构搞清楚,后面能避开无数个坑。东南大学这个数据集在故障诊断领域非常经典,很多论文都用它做基准测试,我们正好借这个机会把它吃透。

2.1 试验台与数据来源:数据是在什么环境下产生的?

原始资料里提到了试验台的构成:电机、控制器、行星齿轮箱、减速齿轮箱、刹车等等。这个信息至关重要,因为它决定了我们数据的物理意义。振动信号不是凭空产生的,是传感器在设备特定部位“听”到的声音。这个试验台模拟了真实的工业传动场景,电机提供动力,经过两级齿轮箱减速,最后刹车施加负载。

这里我特别想强调一下“工况”。这个数据集最良心的一点在于,它不是简单地在一种状态下测故障。它包含了两种典型的工况组合

  • 工况A:转速20Hz(约1200转/分钟),负载0V(可理解为空载,0牛米)。
  • 工况B:转速30Hz(约1800转/分钟),负载2V(约7.32牛米)。

这太关键了!在实际工厂里,设备不可能永远在同一个转速和负载下运行。一个只能在实验室固定工况下有效的诊断模型,是没有任何实用价值的。这个数据集同时提供了两种差异明显的工况,迫使我们的模型必须去学习故障的本质特征,而不是去记忆某个特定转速下的波形模式。我们在后续划分训练集和测试集时,必须有意识地将不同工况的数据混合,或者专门测试模型的跨工况泛化能力。

2.2 数据结构与故障类型:我们到底要诊断什么?

数据集主要分两大块:轴承数据集(bearingset)和齿轮箱数据集(gearset)。根据我们的标题,我们聚焦在轴承故障诊断上,所以接下来我们只深入分析 bearingset 文件夹。

打开 bearingset,你会发现它按故障类型和工况组织得井井有条。轴承的故障类型主要有五种:

  1. 健康状态:这是我们的“负样本”,设备运行良好的基准。
  2. 滚子故障:就是轴承里那些滚动的小钢珠出现了缺陷。
  3. 内圈故障:轴承内圈滚道上有损伤。
  4. 外圈故障:轴承外圈滚道上有损伤。
  5. 复合故障:内圈和外圈同时出现了问题。

每一种故障类型,都分别对应我们上面提到的工况A和工况B,存储在不同的CSV文件里。这意味着,对于同一种故障(比如内圈故障),我们能拿到它在低速空载和高速负载两种不同运行状态下的振动数据,这极大地丰富了数据的多样性。

2.3 数据通道详解:8列数字分别代表什么?

这是理解数据的核心,也是后续特征工程和GAF转换的基础。每个CSV文件有8列数据,对应8个采集通道。很多人会忽略通道的物理意义,直接全部喂给模型,这是不对的。不同位置的传感器,其信号对特定故障的敏感度是天差地别的。

我们来逐一拆解(结合我个人对机械结构的理解):

  • 第1列:电机振动信号。这是动力源的振动,它包含了电机本身的不平衡、不对中等信息,也会受到后端负载变化的影响。对于轴承故障,它是一个间接的、带有很多噪声的信号源。
  • 第2-4列:行星齿轮箱X, Y, Z方向振动。这是关键中的关键!根据描述“读取的数据应该为电机与行星齿轮箱连接部分的轴承”,我判断被测的故障轴承很可能就安装在这个位置。因此,这组三维振动信号是距离故障点最近、最直接的观测。X, Y, Z三个方向能捕捉到不同方向的振动分量,对于定位故障(比如区分内圈还是外圈)非常有价值。
  • 第5列:电机扭矩。这其实是一个过程量,反映了电机的负载情况。它不是一个振动信号,但在GAF转换时我们可能需要区别对待,或者用它作为工况的辅助标签。
  • 第6-8列:平行齿轮箱X, Y, Z方向振动。这个传感器在传动链的更下游。它的信号会受到前面齿轮箱、轴承以及自身齿轮啮合的综合影响,信噪比相对行星齿轮箱的信号会更低一些,但可能包含故障传播后的某些特征。

采集频率是5120Hz,这是一个非常标准的工业采样率,足以捕捉轴承故障特征频率(通常几十到几百赫兹)的高次谐波。理解了这个通道布局,我们在后续处理时就可以做出更明智的决策:例如,是优先使用行星齿轮箱的3个通道,还是融合所有8个通道?是做单通道GAF还是多通道融合GAF?心里就有谱了。

3. 实战第一步:数据读取、可视化与初探

理论分析完了,我们打开Python,开始动手。这一步的目标是把冰冷的CSV文件变成我们脑子里有直观感受的信号图,并检查数据质量。

首先,安装必要的库。除了经典的 pandas, numpy, matplotlib,我们后续还会用到 scipyscikit-learn

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
from pathlib import Path

# 设置中文字体和图表样式
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.style.use('seaborn-v0_8-darkgrid')

假设我们的数据集目录结构如下:

SEU_bearing_dataset/
├── bearing
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值