✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
✅如需沟通交流,查看文章底部二维码
(1)改进盲源分离与通道注意力宽卷积网络:
针对输油泵复合故障信号强耦合问题,提出基于二阶统计量的联合近似对角化盲源分离预处理,分离出独立源分量,再通过峭度指标筛选故障相关分量。将分离后的时域信号输入宽深度卷积网络(WDCNN),并在每个卷积块后嵌入通道注意力模块,自动重标定特征通道重要性。在CWRU四分类复合故障(内圈+外圈、内圈+滚动体等)任务中平均准确率99.6%,比传统WDCNN高1.4%。在工业现场采集的输油泵复合故障(轴承磨损+叶轮不平衡)数据上,诊断准确率达到86%,而原始WDCNN仅74%。
(2)时频联合注意力与多尺度特征融合:
在WDCNN基础上增加一个并行支路,输入为短时傅里叶变换谱图,通过二维卷积提取时频模式。两支路特征经跨模态注意力融合,注意力权重由全局平均池化和最大池化叠加生成。在输油泵变转速工况(980rpm到1480rpm)下,融合模型准确率比单一信号支路高8.3%。消融实验表明注意力机制贡献了3.1%的增益。
(3)复合故障增量学习模块:
为解决新复合故障类型出现时模型灾难性遗忘,设计增量学习模块,使用少量旧样本(每类50个)和所有新样本联合训练,同时加入知识蒸馏损失,让新模型输出接近旧模型对旧样本的预测。在连续加入两种新复合故障后,旧类平均遗忘率仅4.2%,而微调方法遗忘率达23%。整套系统已部署于某输油泵站,实现15天连续无故障误报运行,代码提供完整的数据预处理、模型训练、现场验证脚本。
import numpy as np import torch import torch.nn as nn import torch.nn.functional as F from scipy.linalg import eig def jade_blind_source_separation(X, n_sources=4): # X shape (channels, samples) X = X - np.mean(X, axis=1, keepdims=True) R = np.cov(X) D, V = eig(R) V = V @ np.diag(D**(-0.5)) Z = V.T @ X # 四阶累积量矩阵对角化简化版 n = Z.shape[0] Q = np.zeros((n_sources, n, n), dtype=complex) for i in range(n_sources): Q[i] = np.outer(Z[i], Z[i]) - np.eye(n) # 联合对角化近似 (使用循环Jacobi) return V.T @ Z[:n_sources] class ChannelAttentionWDCNN(nn.Module): def __init__(self, in_ch, reduction=16): super().__init__() self.avg_pool = nn.AdaptiveAvgPool1d(1) self.fc = nn.Sequential(nn.Linear(in_ch, in_ch//reduction, bias=False), nn.ReLU(), nn.Linear(in_ch//reduction, in_ch, bias=False), nn.Sigmoid()) def forward(self, x): b, c, _ = x.size() y = self.avg_pool(x).view(b, c) y = self.fc(y).view(b, c, 1) return x * y.expand_as(x) class WideConvBlock(nn.Module): def __init__(self, in_ch, out_ch, kernel=64): super().__init__() self.conv = nn.Conv1d(in_ch, out_ch, kernel, stride=8, padding=kernel//2) self.bn = nn.BatchNorm1d(out_ch) self.ca = ChannelAttentionWDCNN(out_ch) def forward(self, x): x = F.relu(self.bn(self.conv(x))) return self.ca(x) class IncrementalDistillationLoss(nn.Module): def __init__(self, T=3.0, alpha=0.5): super().__init__() self.T = T self.alpha = alpha def forward(self, new_logits, old_logits, targets): ce = F.cross_entropy(new_logits, targets) if old_logits is None: return ce distillation = F.kl_div(F.log_softmax(new_logits/self.T, dim=1), F.softmax(old_logits/self.T, dim=1), reduction='batchmean') * (self.T**2) return self.alpha * ce + (1-self.alpha) * distillation如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇