✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
如需沟通交流,查看文章底部二维码


(1)双通道特征提取架构:

频域LSTM与时频域可变形Transformer:为了充分挖掘滚动轴承故障信号中的多维度信息,设计了一种双通道并行特征提取网络。第一通道接收原始频域信号(通过FFT变换得到),使用长短期记忆网络(LSTM)捕捉频域谱线之间的序列依赖关系。由于频域中故障特征频率(如边频带)呈现周期性规律,LSTM能够有效学习这些隐含模式。第二通道处理连续小波变换生成的时频图像,采用可变形卷积网络替代传统卷积,因为可变形卷积能够根据图像内容自适应地调整采样网格位置,从而精确提取时频图中不规则形状的故障特征区域(如调制边带形成的弯曲条纹)。在可变形卷积之后,连接一个轻量级Transformer编码器,利用自注意力机制将局部特征整合为全局表示,避免信息丢失。两个通道的输出通过加权融合层(可学习权重)合并,输入分类器。在凯斯西储大学数据集上,该方法对10种故障状态的平均诊断准确率达到99.2%,相比单通道方法提升约1.5%。

(2)多尺度残差卷积自编码器与健康指标提取:

针对剩余寿命预测中健康指标(HI)构建困难的问题,提出了多尺度残差卷积自编码器(MSR-CAE)。该自编码器在编码器部分使用三个并行的卷积分支,不同分支具有不同尺寸的卷积核(3、7、11),分别捕捉高频微弱冲击、中频调制以及低频趋势变化。每个分支内部引入残差连接,缓解深层网络的梯度消失问题。编码器输出的低维潜在向量即为健康指标。为了增强健康指标对退化过程的表征能力,改进了损失函数,除了常规的重构误差外,还增加了单调性正则项和相关性惩罚项。单调性正则项鼓励健康指标随时间单调变化(非递减),相关性惩罚项则强制健康指标与真实剩余寿命百分比之间的Pearson相关系数最大化。在PHM2012数据集上,提取的健康指标在单调性、趋势性和鲁棒性三个指标上均优于传统方法,为后续寿命预测提供了优质输入。

(3)双向门控循环单元与自注意力融合的剩余寿命预测:

在获得健康指标序列后,将其输入到剩余寿命预测网络中。该网络采用双向门控循环单元(BiGRU)作为基础模块,BiGRU能够同时向前和向后处理序列,充分利用历史与未来信息,对滚动轴承的缓慢退化过程有更好的建模能力。在每个时间步,BiGRU的输出经过一个自注意力层,自注意力机制为不同时间步分配权重,使得模型能够聚焦于退化加速的关键阶段(如寿命末期)。此外,为了减少过拟合,在BiGRU层之间以及自注意力层之后使用了Dropout和权重衰减。预测输出采用分段线性标签,即在早期健康阶段寿命标签为常数,进入退化阶段后标签线性递减。该方法在PHM2012数据集上得到的平均绝对误差(MAE)为0.12(归一化后),均方根误差(RMSE)为0.18,显著优于单层LSTM或简单GRU模型。

import torch
import torch.nn as nn
import torch.nn.functional as F
from torchvision.ops import DeformConv2d

# 可变形卷积 + Transformer 分支
class DeformableTransformerBranch(nn.Module):
    def __init__(self, in_channels=1, hidden_dim=256):
        super().__init__()
        self.deform_conv = DeformConv2d(in_channels, 64, kernel_size=3, padding=1)
        self.conv1 = nn.Conv2d(64, 128, 3, stride=2)
        self.transformer = nn.TransformerEncoder(
            nn.TransformerEncoderLayer(d_model=128, nhead=8, batch_first=True),
            num_layers=3
        )
    def forward(self, x):
        x = self.deform_conv(x)
        x = F.relu(self.conv1(x))
        b, c, h, w = x.shape
        x = x.flatten(2).transpose(1, 2)  # (b, h*w, c)
        x = self.transformer(x)
        x = x.mean(dim=1)  # 全局池化
        return x

# 频域LSTM分支
class FreqLSTMBranch(nn.Module):
    def __init__(self, input_dim=256, hidden_dim=128):
        super().__init__()
        self.lstm = nn.LSTM(input_dim, hidden_dim, batch_first=True, bidirectional=True)
    def forward(self, x):
        # x: (b, seq_len, input_dim)
        out, (h, c) = self.lstm(x)
        return out[:, -1, :]  # 取最后一个时间步

# 多尺度残差卷积自编码器
class MSRCAE(nn.Module):
    def __init__(self):
        super().__init__()
        self.encoder = nn.ModuleList([
            nn.Sequential(nn.Conv1d(1, 16, 3, padding=1), nn.ReLU(), nn.MaxPool1d(2)),
            nn.Sequential(nn.Conv1d(1, 16, 7, padding=3), nn.ReLU(), nn.MaxPool1d(2)),
            nn.Sequential(nn.Conv1d(1, 16, 11, padding=5), nn.ReLU(), nn.MaxPool1d(2))
        ])
        self.fc_encode = nn.Linear(16*3*64, 64)  # 假设输入长度256
        self.decoder = nn.Sequential(nn.Linear(64, 16*3*64), nn.ReLU(), 
                                     nn.ConvTranspose1d(48, 1, 4, stride=2, padding=1))
    def forward(self, x):
        multi_feats = [branch(x) for branch in self.encoder]
        concat = torch.cat(multi_feats, dim=1).flatten(1)
        hi = self.fc_encode(concat)  # 健康指标
        recon = self.decoder(hi).view(x.shape)
        return hi, recon

# 单调性损失函数
def monotonic_loss(hi_sequence):
    diff = hi_sequence[:, 1:] - hi_sequence[:, :-1]
    neg_diff = torch.clamp(-diff, min=0)
    return torch.mean(neg_diff ** 2)
",


如有问题,可以直接沟通

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇 

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐