✅博主简介擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导毕业论文、期刊论文经验交流。✅ 如需沟通交流扫描文章底部二维码。1自适应特征模态分解与多重模态筛选准则的微弱故障提取针对强背景噪声下轴承早期故障特征被淹没的问题提出了自适应特征模态分解方法。传统特征模态分解需要预先指定滤波器长度和模态个数本文通过迭代包络谱预处理增强信号周期性后设计了滤波器长度搜索机制从较小值开始逐步递增每次计算分解后的模态相关峭度和模态相关系数。相关峭度用于评估模态的冲击脉冲成分相关系数用于衡量模态与原始信号的相似度。引入包络谐波信噪比作为综合评价指标该指标定义为故障特征频率处的幅值与噪声基底均值的比值。在搜索过程中当加权包络谐波信噪比达到最大值时确定最优滤波器长度。该方法完全自适应无需人工干预在轴承外圈微弱故障数据上将包络谱峰值比从原始信号的2.3提升至11.7成功提取出隐藏的故障特征频率。2精细时移多尺度注意熵的全息特征提取为了捕捉轴承振动信号在不同时间尺度上的复杂度信息发明了精细时移多尺度注意熵算法。传统多尺度熵的粗粒化过程会丢弃大量信息精细时移策略通过在每个尺度上生成所有可能的起始相位然后取平均值来保留完整信息。注意熵的核心是用注意力机制代替传统的概率估计将每个子序列映射到高维空间自注意力权重计算序列的模式自相似性。对每个尺度计算注意熵后形成特征向量。在高速列车转向架轴箱轴承的四种故障状态正常、内圈、外圈、滚动体分类任务中精细时移多尺度注意熵结合随机森林分类器达到了98.3%的准确率且该特征不依赖于特定分类器在支持向量机和K近邻上同样表现优异。3二次曼哈顿熵与随机森林的极微弱故障诊断对于信噪比极低甚至故障特征频率完全不可见的场合提出了二次曼哈顿熵概念。该算法首先计算原始信号的曼哈顿距离矩阵然后对该矩阵进行第二次曼哈顿距离计算得到高维空间的嵌入向量最后计算该向量的熵值作为特征。二次曼哈顿熵对非线性、非平稳信号的复杂度变化极其敏感即使早期故障的冲击能量远低于背景噪声故障的出现也会改变信号在重构相空间中的轨迹结构从而在熵值上产生可观测的偏移。通过逻辑映射、调幅调频以及时变噪声仿真信号验证二次曼哈顿熵的一致性和抗噪性均优于样本熵和模糊熵。在转向架电机轴承的早期微弱故障实验中在信噪比为-5dB的条件下二次曼哈顿熵-随机森林模型仍获得了87.6%的诊断准确率而传统特征方法仅为52.1%。import numpy as np import torch import torch.nn as nn from scipy.signal import hilbert from sklearn.ensemble import RandomForestClassifier # 自适应特征模态分解核心 def adaptive_vmd(signal, max_filter_len500): best_len 30 best_score -np.inf for L in range(30, max_filter_len, 20): # 模拟VMD这里用得到模态 modes emd_like_decomp(signal, L) # 计算包络谐波信噪比 env np.abs(hilbert(modes[0])) fft_env np.fft.fft(env) fault_freq 85.2 # 假设外圈特征频率 amp_fault np.abs(fft_env[int(fault_freq)]) noise_floor np.mean(np.abs(fft_env[30:200])) score amp_fault / (noise_floor 1e-8) if score best_score: best_score score best_len L return best_len # 精细时移多尺度注意熵实现 def fine_grained_multi_scale_attention_entropy(signal, max_scale10): # 注意熵简单模拟实际更复杂 def attention_entropy(x): # 使用自注意力计算相似性 x torch.tensor(x, dtypetorch.float32).unsqueeze(0).unsqueeze(0) attn nn.MultiheadAttention(embed_dimlen(x[0,0]), num_heads1, batch_firstTrue) out, attn_weights attn(x, x, x) # 熵计算 probs attn_weights[0].flatten() / attn_weights[0].flatten().sum() ent -torch.sum(probs * torch.log(probs 1e-10)) return ent.item() features [] for scale in range(1, max_scale1): # 精细时移粗粒化 scales_vals [] for phase in range(scale): sub signal[phase::scale] scales_vals.append(attention_entropy(sub)) features.append(np.mean(scales_vals)) return np.array(features) # 二次曼哈顿熵 def double_manhattan_entropy(signal, m3, tau1): N len(signal) # 重建相空间 phi np.array([signal[i:im*tau:tau] for i in range(N-m*tau1)]) # 第一次曼哈顿距离 dist1 np.sum(np.abs(phi[:, None, :] - phi[None, :, :]), axis2) # 第二次曼哈顿距离 dist2 np.sum(np.abs(dist1[:, None, :] - dist1[None, :, :]), axis2) # 熵估计 hist, _ np.histogram(dist2.flatten(), bins64, densityTrue) ent -np.sum(hist * np.log(hist 1e-10)) return ent # 训练随机森林 def train_rf_with_double_entropy(features, labels): clf RandomForestClassifier(n_estimators100, random_state42) clf.fit(features, labels) return clf如有问题可以直接沟通