✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
✅如需沟通交流,查看文章底部二维码
(1)融合正弦余弦及柯西变异的麻雀搜索算法优化VMD分解:
针对立井提升系统刚性罐道振动信号的非平稳性和强噪声干扰,提出了一种改进的麻雀搜索算法来自适应确定变分模态分解的最优参数。首先,在麻雀搜索算法中引入正弦余弦算子来平衡全局探索和局部开发能力,同时加入柯西变异扰动以增强种群多样性,避免算法陷入局部最优。将SCSSA的适应度函数定义为VMD分解后各模态分量的平均包络熵,通过迭代搜索得到最佳模态个数K和惩罚因子α。然后,利用最优参数对原始振动信号进行VMD分解,得到一系列本征模态函数。根据各IMF与原始信号的相关系数和峭度值,筛选出包含主要故障信息的分量进行信号重构。重构后的信号显著提升了信噪比,故障冲击特征更加明显。实验表明,SCSSA-VMD相比标准VMD在信噪比为-5dB的条件下,重构信号的峭度提升了约35%。
(2)一维时频分解与二维GAF图像融合的双通道诊断网络:
为了充分利用振动信号中的互补信息,设计了一个双通道并行诊断模型。通道一接收SCSSA-VMD重构后的一维信号,通过一维卷积神经网络提取局部时频特征,再输入双向长短期记忆网络捕捉信号在时间序列上的前后依赖关系。通道二采用格拉姆角场将原始一维振动信号转换为二维图像(GASF和GADF两个角度场),然后通过加权平均融合两种图像生成综合特征图。将融合图像输入二维CNN,提取图像中的纹理和形状特征。最终,两个通道提取的特征向量通过拼接方式进行融合,输入全连接层进行分类。双通道架构使得模型同时具备对时序动态信息和空间结构信息的建模能力。实验结果显示,双通道模型在刚性罐道故障诊断中的准确率达到99.44%,显著高于单通道模型(平均97.78%)。
(3)基于双通道融合的残差优化与抗噪性增强:
为了进一步提升双通道模型的鲁棒性和抗噪能力,在网络中引入了残差连接和注意力机制。在每个卷积块后添加跳跃连接,确保梯度能够有效传播,避免深层网络退化。同时在两个通道的特征融合前,分别引入通道注意力模块和空间注意力模块,对特征图进行重校准,增强与故障相关的特征通道并抑制噪声通道。在训练阶段采用了数据增强策略(添加高斯噪声、随机裁剪)模拟矿井实际环境中的干扰。在加入信噪比为0dB的噪声测试中,双通道融合模型仍能保持97.2%的准确率,而普通CNN-BiLSTM模型则降至85%以下。该模型已成功应用于某煤矿立井提升系统,实现了对罐道弯曲、接头松动等故障的准确预警。
import numpy as np import torch import torch.nn as nn from vmdpy import VMD import pywt # 改进麻雀搜索算法(SCSSA) class SCSSA: def __init__(self, pop=30, max_iter=50, dim=2, lb=[3,100], ub=[10,5000]): self.pop = pop; self.max_iter = max_iter; self.dim = dim self.lb = np.array(lb); self.ub = np.array(ub) def optimize(self, fitness_func): # 种群初始化 positions = np.random.uniform(self.lb, self.ub, (self.pop, self.dim)) fitness = np.array([fitness_func(p) for p in positions]) for t in range(self.max_iter): # 正弦余弦因子 r1 = np.sin(np.pi * t / self.max_iter) * (1 - t/self.max_iter) r2 = np.cos(np.pi * t / self.max_iter) # 更新发现者(前20%) for i in range(int(self.pop*0.2)): pos_new = positions[i] + r1 * np.random.randn(self.dim) * (positions[i] - positions[0]) # 边界处理并计算新适应度 # 更新加入者 for i in range(int(self.pop*0.2), self.pop): pos_new = positions[i] + np.random.randn(self.dim) * (positions[np.random.randint(self.pop)] - positions[i]) # 柯西变异扰动 if np.random.rand() < 0.1: idx = np.random.randint(self.pop) positions[idx] = positions[idx] + np.random.standard_cauchy(self.dim) # ... 保留最优解 best_idx = np.argmin(fitness) return positions[best_idx] def vmd_enhanced(signal, K, alpha): u, _, _ = VMD(signal, alpha, 0.5, 0, 10, 500, 0, K) # 根据峭度和相关系数筛选IMF selected = [] for i, comp in enumerate(u): kurt = np.mean((comp - np.mean(comp))**4) / (np.std(comp)**4 + 1e-8) corr = np.corrcoef(signal, comp)[0,1] if kurt > 3 and corr > 0.2: selected.append(comp) if len(selected) == 0: selected.append(u[-1]) # 保留最后一个 return np.sum(selected, axis=0) # 重构信号 # 双通道模型定义 class DualChannelModel(nn.Module): def __init__(self, num_classes): super().__init__() # 通道1:1D CNN + BiLSTM self.conv1d = nn.Sequential( nn.Conv1d(1, 32, 3, padding=1), nn.ReLU(), nn.MaxPool1d(2), nn.Conv1d(32, 64, 3), nn.ReLU(), nn.AdaptiveAvgPool1d(32) ) self.bilstm = nn.LSTM(64, 64, bidirectional=True, batch_first=True) # 通道2:2D CNN(接受GAF图像) self.conv2d = nn.Sequential( nn.Conv2d(1, 32, 3), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(32, 64, 3), nn.ReLU(), nn.AdaptiveAvgPool2d((8,8)) ) self.fc = nn.Linear(64*2 + 64*8*8, 128) # 融合特征维数 self.classifier = nn.Linear(128, num_classes) def forward(self, x1d, x2d): feat1 = self.conv1d(x1d).permute(0,2,1) lstm_out, _ = self.bilstm(feat1) feat1 = lstm_out.mean(dim=1) feat2 = self.conv2d(x2d).view(x2d.size(0), -1) concat = torch.cat([feat1, feat2], dim=1) fusion = torch.relu(self.fc(concat)) return self.classifier(fusion) # GAF图像生成函数 def gramian_angular_field(signal, method='sum'): # 归一化到[-1,1] norm_signal = (signal - signal.min()) / (signal.max() - signal.min()) * 2 - 1 # 计算角度和半径 phi = np.arccos(norm_signal) if method == 'sum': gaf = np.cos(phi.reshape(-1,1) + phi) else: gaf = np.cos(phi.reshape(-1,1) - phi) return gaf def train_dual_channel(): # 模拟数据加载 # ... model = DualChannelModel(num_classes=4) optimizer = torch.optim.Adam(model.parameters()) for epoch in range(50): for (x1d, x2d, y) in train_loader: pred = model(x1d, x2d) loss = nn.CrossEntropyLoss()(pred, y) loss.backward(); optimizer.step() return model ",如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇