齿轮典型故障精确建模与智能诊断【附代码】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流查看文章底部二维码1齿轮齿根裂纹与断齿精确动力学建模基于有限元方法构建单对齿轮三维实体模型在齿根圆处预制不同长度1mm、2mm、3mm和不同角度30°、45°、60°的裂纹通过瞬态动力学求解器计算啮合过程中的应力分布及振动加速度响应。仿真结果显示裂纹深度超过2mm时齿根应力集中系数达到3.2边频带幅值比正常齿轮高出11dB。断齿故障模型移除一个完整轮齿冲击能量集中在啮合频率的奇数倍频仿真数据与试验台实测值误差小于5%。2刚柔耦合多体动力学箱体模型建立齿轮箱刚柔耦合模型将箱体视为柔性体模态中性文件导入齿轮视为刚体。在不同转速500-3000rpm和负载10-100Nm下仿真提取箱体表面测点振动信号。揭示了转速增加造成边频带展宽负载增加使啮频幅值线性增长但边频带相对幅值下降的规律。生成108种工况仿真数据填补了小样本条件下齿轮故障数据空白。3融合仿真与真实数据的CBAM-STCN诊断网络针对真实样本稀缺将仿真数据与少量真实数据混合训练。模型采用时间卷积网络TCN为主干嵌入卷积块注意力模块CBAM同时关注通道和空间特征。当真实数据每类仅20个时加入仿真数据每类200个后诊断准确率从67%提升至94.5%。在两种未知工况下准确率分别达94.5%和93.7%且对不同程度裂纹轻度、中度、重度的分类准确率均超过90%优于纯真实数据训练的模型82%。import numpy as np from scipy.signal import find_peaks import torch import torch.nn as nn from torch.nn.utils import weight_norm class Chomp1d(nn.Module): def __init__(self, chomp_size): super().__init__() self.chomp_size chomp_size def forward(self, x): return x[:, :, :-self.chomp_size].contiguous() class TemporalBlock(nn.Module): def __init__(self, n_inputs, n_outputs, kernel_size, stride, dilation, padding, dropout0.2): super().__init__() self.conv1 weight_norm(nn.Conv1d(n_inputs, n_outputs, kernel_size, stridestride, paddingpadding, dilationdilation)) self.chomp1 Chomp1d(padding) self.relu1 nn.ReLU() self.dropout1 nn.Dropout(dropout) self.conv2 weight_norm(nn.Conv1d(n_outputs, n_outputs, kernel_size, stridestride, paddingpadding, dilationdilation)) self.chomp2 Chomp1d(padding) self.relu2 nn.ReLU() self.dropout2 nn.Dropout(dropout) self.net nn.Sequential(self.conv1, self.chomp1, self.relu1, self.dropout1, self.conv2, self.chomp2, self.relu2, self.dropout2) self.downsample nn.Conv1d(n_inputs, n_outputs, 1) if n_inputs ! n_outputs else None self.relu nn.ReLU() def forward(self, x): out self.net(x) res x if self.downsample is None else self.downsample(x) return self.relu(out res) class CBAM_STCN(nn.Module): def __init__(self, num_inputs1, num_channels[32,64,128], kernel_size3, dropout0.2, num_classes5): super().__init__() layers [] num_levels len(num_channels) for i in range(num_levels): dilation 2 ** i in_channels num_inputs if i 0 else num_channels[i-1] out_channels num_channels[i] layers [TemporalBlock(in_channels, out_channels, kernel_size, stride1, dilationdilation, paddingdilation*(kernel_size-1), dropoutdropout)] self.tcn nn.Sequential(*layers) self.cbam CBAM(num_channels[-1], reduction8) self.fc nn.Linear(num_channels[-1], num_classes) def forward(self, x): x self.tcn(x) x self.cbam(x) x x.mean(dim-1) return self.fc(x) class CBAM(nn.Module): def __init__(self, channels, reduction8): super().__init__() self.avg_pool nn.AdaptiveAvgPool1d(1) self.max_pool nn.AdaptiveMaxPool1d(1) self.fc nn.Sequential(nn.Linear(channels, channels//reduction, biasFalse), nn.ReLU(), nn.Linear(channels//reduction, channels, biasFalse)) self.sigmoid nn.Sigmoid() def forward(self, x): b, c, _ x.size() avg self.avg_pool(x).view(b,c) max self.max_pool(x).view(b,c) avg_out self.fc(avg) max_out self.fc(max) att self.sigmoid(avg_out max_out).view(b,c,1) return x * att如有问题可以直接沟通