✅博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 如需沟通交流,扫描文章底部二维码。
(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, tau=0, K=K, DC=0, init=1, tol=1e-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, m=3, delay=1): 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_counts=True) probs = counts / len(patterns) return -np.sum(probs * np.log(probs+1e-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'如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇