滚动轴承深度学习故障诊断系统【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 如需沟通交流,扫描文章底部二维码。
(1)基于特征灰度图的振动信号二维表示方法
卷积神经网络在图像识别领域取得了巨大成功,其特征提取能力很大程度上依赖于二维图像的局部相关性结构。如何将一维振动信号有效转换为携带故障特征的二维图像表示,从而充分发挥卷积神经网络的强项,是滚动轴承智能诊断领域的一个核心研究问题。本研究提出了一种基于特征灰度图的振动信号二维表示方法,该方法在传统直接重排策略的基础上引入了多种时频特征融合的思路。首先,算法对原始振动信号进行多窗口分段,每段信号分别计算其时域统计特征如均方根值、峭度因子、波形因子,以及频域特征如主频能量比、谱重心、谱熵等指标,这些特征值构成了一组反映信号当前状态的多维特征向量。然后,我们将连续若干段的特征向量按时间顺序排列形成一个二维矩阵,矩阵中每一行对应一段信号的特征,每一列对应一类特征指标的时序变化,从而生成具有时序连续性与特征互补性的二维灰度图。这种表示方式相比简单的信号重排能够保留更加丰富的故障语义信息,有利于卷积神经网络从空间局部性中挖掘故障演化规律。
(2)多尺度卷积神经网络与极限学习机协同诊断架构
传统的卷积神经网络在故障诊断任务中常常面临两个突出问题:一是网络深度不断增加导致训练耗时显著增长,在工业场景下难以满足快速部署需求;二是单一卷积尺度难以覆盖故障特征在不同时频分辨率下的多样性表现。针对这两个问题,本研究提出了多尺度卷积神经网络与极限学习机协同的MCNN-ELM诊断架构。在前端的特征提取阶段,网络包含三条并行的卷积支路,每条支路采用不同尺寸的卷积核分别捕获细粒度局部特征、中等粒度区域特征以及大粒度全局特征,三条支路的输出经过通道维度拼接后形成多尺度融合特征图。与传统CNN将分类任务交由全连接层完成不同,我们将多尺度卷积之后的特征向量作为极限学习机的输入,极限学习机的输入层到隐藏层之间采用随机初始化权重并保持固定,只需通过岭回归一次求解即可得到隐藏层到输出层的最优权重,极大地缩短了训练时间。这种CNN负责特征提取、ELM负责快速分类的协同架构,在保持高诊断精度的同时将训练耗时降低到了传统全监督深度模型的几分之一。
(3)面向工程应用的诊断系统集成与可视化交互
为将所研究的深度学习诊断算法转化为可在工业现场实际使用的诊断系统,本研究在算法核心之上构建了一套完整的工程化软件架构。系统采用分层设计思想,自底向上依次包括数据采集层、信号预处理层、智能诊断层、决策推理层以及人机交互层。数据采集层支持加速度传感器、声发射传感器以及温度传感器等多种感知设备的并发数据接入,通过统一的数据缓存接口屏蔽底层硬件差异。信号预处理层完成数据清洗、异常值剔除、归一化以及前述的特征灰度图转换等工作。智能诊断层封装了训练好的MCNN-ELM诊断模型,提供故障类型识别、故障严重程度评估以及置信度估计等核心服务。决策推理层根据诊断结果结合维护规则库给出具体的处置建议,如继续监测、计划性维护或者立即停机检查。人机交互层提供了友好的图形化界面,实时展示振动波形、特征灰度图、诊断结果以及历史趋势,支持工程人员对诊断结果进行人工复核与反馈。整个系统已在多个工业项目中成功部署,运行稳定性与诊断准确性均得到了实际工程应用的检验。
import numpy as np
import torch
import torch.nn as nn
from scipy.stats import kurtosis
# 1. 特征灰度图生成:多维特征沿时间堆叠成2D
def signal_to_feature_image(signal, win_len=512, n_win=32):
feats = []
for i in range(n_win):
seg = signal[i*win_len:(i+1)*win_len]
# 时域 + 频域多维特征
rms = np.sqrt(np.mean(seg**2))
krt = kurtosis(seg)
peak = np.max(np.abs(seg))
crest = peak / (rms + 1e-9)
spec = np.abs(np.fft.rfft(seg))
sf = np.argmax(spec) / len(spec) # 主频归一化位置
sc = (np.arange(len(spec)) * spec).sum() / (spec.sum() + 1e-9)
ent = -(spec/spec.sum() * np.log(spec/spec.sum() + 1e-12)).sum()
feats.append([rms, krt, peak, crest, sf, sc, ent])
img = np.array(feats).T # (特征维, 时间步)
return (img - img.min()) / (img.max() - img.min() + 1e-9)
# 2. 多尺度CNN特征提取主干
class MultiScaleCNN(nn.Module):
def __init__(self, c_in=1):
super().__init__()
self.s1 = nn.Sequential(nn.Conv2d(c_in, 16, 3, padding=1), nn.ReLU())
self.s2 = nn.Sequential(nn.Conv2d(c_in, 16, 5, padding=2), nn.ReLU())
self.s3 = nn.Sequential(nn.Conv2d(c_in, 16, 7, padding=3), nn.ReLU())
self.fuse = nn.Sequential(
nn.Conv2d(48, 32, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
nn.Conv2d(32, 64, 3, padding=1), nn.ReLU(), nn.AdaptiveAvgPool2d(1))
def forward(self, x):
m = torch.cat([self.s1(x), self.s2(x), self.s3(x)], dim=1)
return self.fuse(m).flatten(1) # (B, 64)
# 3. 极限学习机:随机隐层 + 岭回归输出层
class ExtremeLearningMachine:
def __init__(self, dim_in=64, n_hidden=512, n_class=10, reg=1e-3):
# 输入到隐藏层的随机权重保持固定
self.W = np.random.randn(dim_in, n_hidden) * 0.1
self.b = np.random.randn(n_hidden) * 0.1
self.beta = None
self.reg = reg
self.n_class = n_class
def fit(self, X, Y):
H = np.tanh(X @ self.W + self.b) # 隐层激活
# 岭回归一步求解,无需迭代
I = np.eye(H.shape[1])
self.beta = np.linalg.pinv(H.T @ H + self.reg * I) @ H.T @ Y
def predict(self, X):
H = np.tanh(X @ self.W + self.b)
return (H @ self.beta).argmax(axis=1)
# 4. CNN+ELM 联合推理流水线
def diagnose(signal, cnn_model, elm_model, device='cpu'):
img = signal_to_feature_image(signal)
x = torch.tensor(img[None, None], dtype=torch.float32).to(device)
feat = cnn_model(x).detach().cpu().numpy()
return elm_model.predict(feat)



如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇
更多推荐



所有评论(0)