✅博主简介擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导毕业论文、期刊论文经验交流。✅ 如需沟通交流扫描文章底部二维码。1多层次改进多样性熵振动特征提取针对船舶齿轮箱全寿命周期振动信号非线性、非平稳特性导致传统熵值指标单调性差的问题提出MIDE方法。MIDE在经典多尺度熵的基础上引入动态重标定因子替代固定尺度平均依据每个尺度下粗粒化序列的方差调整权重方差越大表示局部波动越剧烈赋予更高的熵值权重。同时采用改进的多样性度量不是简单统计模式种类而是考虑模式的出现概率分布与均匀分布的KL散度。在Adams动力学仿真生成的齿轮裂纹退化数据从健康到断裂共15个阶段上MIDE提取的健康指标单调性指数达到0.86趋势性指数0.91显著优于多尺度熵单调性0.71和层次熵0.68。采用滑动窗口实时计算MIDE序列可清晰观察到故障萌生和加速退化两个拐点。,2双向门控循环单元与健康指标融合的RUL预测将MIDE提取的多维熵特征在10个尺度下的值作为输入序列构建BiGRU网络进行剩余寿命预测。BiGRU同时处理前向和后向时序依赖适合捕捉退化过程的双向演化规律。网络输出为剩余寿命百分比0~1之间。在齿轮箱全寿命试验数据上共8组每组约2000个采样点预测均方根误差为5.97%平均绝对百分比误差为8.3%。对比单向GRURMSE 8.2%和LSTM7.9%BiGRU精度最高且参数量最小。将MIDE与振动均方根值进行相关性分析发现MIDE的预测窗口更长在寿命中期就能识别退化趋势而RMS只在临近失效时才明显上升。通过贝叶斯超参数优化确定了BiGRU的最优隐藏层维度为128层数为2学习率0.001。,3仿真数据与试验数据融合的迁移寿命预测针对船舶齿轮箱全寿命数据难以获得的问题建立基于Adams的多体动力学仿真模型模拟齿轮裂纹从0.5mm到3mm的渐进扩展过程生成多阶段振动仿真数据。使用仿真数据预训练MIDE-BiGRU模型再用少量真实试验数据仅前两个齿轮的完整寿命数据进行微调。迁移学习策略冻结BiGRU的前两层参数只微调最后一层和输出层。在剩余4个齿轮的测试中微调后的模型RMSE为6.3%而仅用仿真数据训练的模型RMSE为13.8%仅用少量真实数据训练的模型由于数据不足RMSE为11.2%。仿真与真实数据之间的最大均值差异从0.42降到微调后的0.15证明了特征空间的对齐效果。该方法使得新机型齿轮箱的RUL预测成为可能无需等待其完成全寿命试验。import numpy as np from scipy.signal import hilbert import torch import torch.nn as nn def multiscale_improved_diversity_entropy(signal, max_scale10, m3): def diversity_entropy(x): n len(x) patterns [] for i in range(n-m1): pat tuple(np.sign(x[i1:im] - x[i:im-1]).astype(int)) patterns.append(pat) _, counts np.unique(patterns, return_countsTrue) probs counts / len(patterns) # KL散度到均匀分布 unif np.ones_like(probs) / len(probs) kl np.sum(probs * np.log((probs1e-10)/(unif1e-10))) return kl mide [] for scale in range(1, max_scale1): # 粗粒化 coarse np.mean(signal.reshape(len(signal)//scale, scale), axis1) de diversity_entropy(coarse) # 动态重标定因子 方差倒数 var np.var(coarse) weight 1.0 / (var 1e-6) mide.append(de * weight) return np.array(mide) class BiGRU_RUL(nn.Module): def __init__(self, input_dim10, hidden128, num_layers2): super().__init__() self.gru nn.GRU(input_dim, hidden, num_layers, batch_firstTrue, bidirectionalTrue) self.fc nn.Linear(hidden*2, 1) def forward(self, x): out, _ self.gru(x) return torch.sigmoid(self.fc(out[:, -1, :])) def transfer_finetune(source_model, target_loader, freeze_layers2): # 冻结前freeze_layers的GRU层 for name, param in source_model.named_parameters(): if gru.weight_ih_l0 in name or gru.weight_hh_l0 in name: param.requires_grad False optimizer torch.optim.Adam(filter(lambda p: p.requires_grad, source_model.parameters()), lr0.0001) # 微调循环 for epoch in range(30): for x, y in target_loader: pred source_model(x) loss F.mse_loss(pred, y) optimizer.zero_grad() loss.backward() optimizer.step() return source_model如有问题可以直接沟通