✅博主简介擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导毕业论文、期刊论文经验交流。✅ 如需沟通交流扫描文章底部二维码。1故障特征阶次发现与优化变分模态分解预处理针对两级行星一级平行结构的风电齿轮箱大量实验数据分析发现当高速轴或低速轴发生故障时在阶次包络谱上对应的故障特征阶次周围存在一种特殊的调制规律即两侧出现对称的边带边带间隔等于某轴的转频阶次。基于此定义了高、低速轴故障特征阶次及边带能量比作为诊断指标。然而噪声干扰较大时直接提取困难因此提出一种优化的变分模态分解方法。采用白鲸优化算法自适应搜索VMD的最佳模态数K和惩罚因子α以包络谱峰值因子最大化为适应度函数。分解后计算各IMF的排列熵筛选出排列熵最低最有规律的模态从而得到角度域下最干净的信号。仿真与实测信号验证该方法能有效增强故障调制特征。2考虑调制现象的新唯象模型建立基于单级定轴和单级行星齿轮箱的唯象模型考虑两级行星一级平行结构中各级齿轮之间以及高/低速轴间的耦合调制提出一种新的振动信号唯象模型。新模型不仅包含一、二级齿圈故障特征频率还特别包含了平行级高速轴/低速轴故障产生的调制边带以一系列调幅调频函数之和表示。通过对比已有的声音唯象模型和振动唯象模型仿真表明新模型能够更全面地反映实际故障信号中复杂的边带结构为参数辨识提供了更精确的基准。3基于参数辨识的自动故障诊断方法以新唯象模型为参考将实际实验信号的阶次包络谱与模型输出之间的残差最小化作为目标函数利用粒子群或遗传算法辨识模型中的关键参数如调制深度、故障特征阶次处的幅值。提取辨识得到的参数中平行级故障特征指标包括边带幅值比、调制指数等然后与预先建立的故障特征库中的指标进行相似度分析余弦相似度或皮尔逊相关系数超过阈值则判定为相应故障。对多组现场数据测试自动诊断准确率达到85%以上为风电场齿轮箱状态监测提供了可自动化的工具。import numpy as np from scipy.signal import hilbert import pywt from vmdpy import VMD # 白鲸优化BWO优化VMD参数简化 def bwo_vmd_optimize(signal, K_range(2,8), alpha_range(100,2000)): best_params None best_fitness -np.inf for K in range(K_range[0], K_range[1]1): for alpha in range(alpha_range[0], alpha_range[1]1, 100): # VMD分解 u, u_hat, omega VMD(signal, alpha, tau0, KK, DC0, init1, tol1e-7) # 选取能量最大的IMF计算包络谱峰值因子 envelope np.abs(hilbert(u[-1])) spectrum np.abs(np.fft.rfft(envelope)) peak_factor np.max(spectrum) / np.std(spectrum) if peak_factor best_fitness: best_fitness peak_factor best_params (K, alpha) return best_params # 排列熵计算 def permutation_entropy(series, m3, delay1): N len(series) patterns [] for i in range(N - (m-1)*delay): perm [series[i j*delay] for j in range(m)] sorted_idx np.argsort(perm) pattern tuple(sorted_idx) patterns.append(pattern) unique, counts np.unique(patterns, return_countsTrue) probs counts / len(patterns) return -np.sum(probs * np.log(probs1e-12)) # 唯象模型参数辨识遗传算法 def identify_model_params(experimental_signal, model_func, bounds): from scipy.optimize import differential_evolution def objective(params): model_signal model_func(params) error np.mean((model_signal - experimental_signal)**2) return error result differential_evolution(objective, bounds) return result.x # 相似度判断故障 def fault_diagnosis_by_similarity(features_extracted, fault_database): best_match None best_sim -1 for fault_name, feat_db in fault_database.items(): sim np.dot(features_extracted, feat_db) / (np.linalg.norm(features_extracted)*np.linalg.norm(feat_db)) if sim best_sim: best_sim sim best_match fault_name return best_match if best_sim 0.7 else normal如有问题可以直接沟通