多源信号风机齿轮点蚀故障诊断【附代码】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流查看文章底部二维码1基于小样本学习的振动信号图神经网络诊断针对风电机组齿轮箱点蚀故障样本稀缺的问题提出一种基于小样本学习的图神经网络方法。首先将振动信号通过离散小波变换转换为二维时频图像小波变换采用db4小波基分解5层得到不同尺度的细节系数和近似系数。然后将时频图像作为节点特征并构建一个图结构每个样本作为一个节点节点之间通过特征相似度连接如欧氏距离小于阈值。图神经网络通过消息传递机制聚合邻居节点信息能够在小样本条件下利用样本间的关系进行推理。具体采用原型网络思想为每个故障类别计算一个原型向量支持集中样本特征的平均值然后查询样本与原型之间的距离作为分类依据。在仅有每类5个标注样本的极低资源条件下该方法对点蚀程度的分类准确率达到85%以上远超传统SVM和CNN。2声信号的关系网络与边际学习模型声信号包含丰富的故障信息且采集非接触。将声信号通过短时傅里叶变换转换为频谱图然后使用预训练的VGG16提取深度特征向量。针对小样本问题采用关系网络进行分类关系网络由嵌入模块和关系模块组成嵌入模块提取特征关系模块计算查询样本与支持集中每个样本的相似度得分通过拼接后输入全连接网络回归一个0-1分数。同时引入边际学习模型对特征进行自适应变换使得同类样本特征聚集、异类分散。该方法在自建的风机声阵列数据集上对7类轴承故障包括点蚀、磨损、裂纹等的平均识别率达96.1%。3多源信号加权特征融合与联合诊断为了综合振动、声和电流三类信号的互补信息设计加权特征融合策略。首先分别对三类信号进行特征提取振动通过小波包变换提取能量熵声通过MFCC提取倒谱系数电流通过FFT提取谐波幅值。然后计算每个特征集与故障类别之间的互信息以此确定权重系数互信息越大的信号赋予更高权重。加权后的特征向量进行拼接形成融合特征再输入到基于图神经网络和关系网络的混合分类器中进行最终诊断。实验表明多源融合诊断相比单一振动信号诊断准确率提升了约12%在复杂故障模式如点蚀磨损复合下优势尤为明显。该方法为风电机组齿轮箱的智能运维提供了高精度、小样本友好的解决方案。import torch import torch.nn as nn import torch.nn.functional as F import pywt import librosa from torch_geometric.nn import GCNConv # 图神经网络小样本原型网络 class GNNPrototype(nn.Module): def __init__(self, in_dim, hid_dim, out_dim): super().__init__() self.gcn1 GCNConv(in_dim, hid_dim) self.gcn2 GCNConv(hid_dim, out_dim) def forward(self, x, edge_index): x F.relu(self.gcn1(x, edge_index)) x self.gcn2(x, edge_index) return x def prototype(self, support_x, support_y, edge_index): emb self.forward(support_x, edge_index) prototypes [] for c in torch.unique(support_y): prototypes.append(emb[support_yc].mean(0)) return torch.stack(prototypes) # 关系网络 class RelationNetwork(nn.Module): def __init__(self, feat_dim512, hid_dim256): super().__init__() self.embed nn.Sequential(nn.Linear(feat_dim, hid_dim), nn.ReLU(), nn.Linear(hid_dim, feat_dim)) self.relation nn.Sequential(nn.Conv2d(2, 2, 1), nn.ReLU(), nn.MaxPool2d(1), nn.Flatten(), nn.Linear(2*feat_dim, 1), nn.Sigmoid()) def forward(self, query, support): # query: (B, feat), support: (N_support, feat) query_emb self.embed(query) support_emb self.embed(support) # 计算所有配对 scores torch.zeros(query_emb.size(0), support_emb.size(0)) for i, q in enumerate(query_emb): for j, s in enumerate(support_emb): pair torch.stack([q,s], dim0).unsqueeze(0).unsqueeze(0) # (1,2,feat) scores[i,j] self.relation(pair) return scores # 加权融合 def weighted_fusion(features_dict, weights): # features_dict: {vib:arr, sound:arr, current:arr} fused np.zeros_like(features_dict[list(features_dict.keys())[0]]) for key, w in weights.items(): fused w * features_dict[key] return fused # 互信息估计权重 def estimate_mi_weight(X, y): # 使用sklearn的互信息 from sklearn.feature_selection import mutual_info_classif mi mutual_info_classif(X, y) return mi / mi.sum() # 离散小波变换时频图 def dwt_to_image(signal, levels5): coeffs pywt.wavedec(signal, db4, levellevels) # 将各层系数缩放到[0,255]合并成图像 img np.concatenate([c for c in coeffs], axis0) img (img - img.min()) / (img.max() - img.min()) * 255 return img.astype(np.uint8) ,如有问题可以直接沟通