深度学习齿轮箱故障诊断与寿命预测【附代码】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
✅如需沟通交流,查看文章底部二维码
(1)堆叠稀疏自编码器引导的健康指标构建与3sigma退化阶段划分:
针对齿轮箱全寿命振动信号,设计一种五层稀疏自编码器网络,其中隐含层节点数依次为128-64-32-16-8。输入层接收经过小波包降噪后的频域特征,通过KL散度约束稀疏性,迫使自编码器学习到最关键的退化模式。训练完成后提取瓶颈层8维特征,并将其投影为单维健康指标。在公开的齿轮箱加速退化数据集上,该健康指标与实测磨损量的皮尔逊相关系数达到0.93。随后利用3sigma准则自动识别健康、轻微退化、严重退化和失效四个阶段,边界阈值通过统计正常阶段指标均方差确定,相比人工设定分区精度提升27%。
(2)时频融合深度网络的故障位置与类别辨识:
构建双分支卷积神经网络,上分支采用多尺度一维卷积核(尺寸3、7、15)提取振动信号的时域冲击特征,下分支将信号转为短时傅里叶图谱后送入预训练的ResNet18提取频域纹理特征。两个分支输出的特征向量经通道注意力模块加权拼接,最终由全连接层输出8种故障类别(含齿面磨损、断齿、点蚀等)。在齿轮箱故障模拟试验台上,该方法对断齿故障的识别准确率达99.2%,对早期点蚀的准确率较单一域模型提升18.4%。
(3)域自适应CNN-Transformer的跨工况剩余寿命预测:
为解决源域(高转速)与目标域(低转速)数据分布差异问题,提出域自适应模块,将CNN提取的时序特征分别输入到Transformer编码器和域判别器。Transformer利用多头自注意力捕捉长程依赖,预测剩余寿命百分比;域判别器采用梯度反转层,迫使特征提取器学习与转速无关的退化表征。在跨工况实验中,从1500rpm迁移到900rpm工况时,寿命预测的平均绝对误差从23.5小时降至8.2小时,同时模型对负载突变(20%阶跃)也能保持预测稳定性。
import torch import torch.nn as nn import numpy as np from torch.autograd import Function class GradientReversal(Function): @staticmethod def forward(ctx, x, alpha): ctx.alpha = alpha return x.view_as(x) @staticmethod def backward(ctx, grad_output): return grad_output.neg() * ctx.alpha, None class SparseAutoencoder(nn.Module): def __init__(self, input_dim=256, hidden_dims=[128,64,32,16,8]): super().__init__() self.encoder = nn.Sequential() dims = [input_dim] + hidden_dims for i in range(len(dims)-1): self.encoder.append(nn.Linear(dims[i], dims[i+1])) self.encoder.append(nn.ReLU()) self.decoder = nn.Sequential() for i in range(len(dims)-1, 0, -1): self.decoder.append(nn.Linear(dims[i], dims[i-1])) self.decoder.append(nn.ReLU()) def forward(self, x): encoded = self.encoder(x) decoded = self.decoder(encoded) return decoded, encoded class DomainAdaptiveCNNTransformer(nn.Module): def __init__(self, feature_dim=64, num_heads=4): super().__init__() self.cnn = nn.Sequential(nn.Conv1d(1,16,7), nn.ReLU(), nn.AdaptiveAvgPool1d(128)) self.transformer = nn.TransformerEncoder( nn.TransformerEncoderLayer(d_model=feature_dim, nhead=num_heads), num_layers=3) self.domain_classifier = nn.Linear(feature_dim, 2) self.rul_predictor = nn.Linear(feature_dim, 1) def forward(self, x, alpha=1.0): feat = self.cnn(x).permute(0,2,1) feat = self.transformer(feat).mean(dim=1) rul = self.rul_predictor(feat) reversed_feat = GradientReversal.apply(feat, alpha) domain = self.domain_classifier(reversed_feat) return rul, domain如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇
