✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流查看文章底部二维码1改进的自适应噪声集成经验模态分解与余弦相似度筛选针对滚动轴承振动信号非线性、非平稳且信噪比低的特点提出基于余弦相似度改进的ICEEMDAN算法。首先采用ICEEMDAN将原始振动信号分解为一系列本征模态函数该算法通过添加自适应白噪声和求取局部均值的方式有效克服了模态混叠问题。然而分解后会产生大量IMF分量其中部分包含噪声或与故障无关。为此计算每个IMF与原始信号之间的余弦相似度。余弦相似度衡量两个向量在方向上的一致性对幅度不敏感因此能够有效识别与原始信号结构相关的真实模态分量。设定相似度阈值筛选出余弦相似度大于0.5的IMF作为关键分量。这种方法无需人为设定分解层数完全由信号自适应决定大幅降低了后续特征提取的冗余度。2样本熵与转速-负载多源特征融合经过筛选得到的关键IMF分量包含了轴承故障冲击的主要信息。分别计算每个关键分量的样本熵值样本熵能够量化时间序列的复杂度和不规则性当轴承出现故障时振动信号的规律性被破坏样本熵会发生显著变化。仅靠样本熵可能不足以区分某些相似故障类型因此进一步引入轴承运行工况参数转速和负载。将每个关键分量的样本熵值与转速、负载数值拼接构成多维特征向量。这种多源融合策略既保留了振动信号中的故障冲击模式又包含了工况信息使得不同故障类别在特征空间中具有更好的可分离性。例如内圈故障在低速重载下特征明显而外圈故障在高速轻载下更易识别融合工况信息后模型能够自适应调整判断依据。3互信息与性别机制萤火虫算法优化贝叶斯网络结构传统贝叶斯网络结构学习在大规模节点时效率低下且易陷入局部最优。提出MGM-FA算法首先计算各个特征节点与故障类别节点之间的互信息根据互信息值排序构建网络骨架图剔除不相关的冗余节点。然后采用改进的萤火虫算法进行结构搜索。该算法引入性别机制将萤火虫种群分为雄性和雌性雄性负责全局探索雌性负责局部开发两者通过吸引力公式协同进化。同时加入局部优化器对当前最优网络结构进行边增、边删、边转操作提高寻优精度。在数据量不足时融合专家知识作为先验约束例如已知“转速”不可能直接指向“样本熵值”但在某些条件下可通过中间节点关联。通过这种方式即便只有少量样本也能学习到可靠的贝叶斯网络结构。最终利用最大似然估计学习条件概率表实现轴承故障类型的概率推理输出各类故障的后验概率。import numpy as np from PyEMD import CEEMDAN from sklearn.metrics.pairwise import cosine_similarity import math # 1. ICEEMDAN 余弦相似度筛选 def iceemdan_cs(signal, max_imfs8): # 使用 PyEMD 的 CEEMDAN近似实现 ceemdan CEEMDAN() imfs ceemdan.ceemdan(signal, max_imfmax_imfs) # 计算每个IMF与原始信号的余弦相似度 selected [] for i in range(imfs.shape[0]): imf imfs[i] # 对齐长度 min_len min(len(signal), len(imf)) sim cosine_similarity(signal[:min_len].reshape(1,-1), imf[:min_len].reshape(1,-1))[0][0] if sim 0.5: selected.append(imf) return selected # 2. 样本熵计算 def sample_entropy(time_series, m2, rNone): if r is None: r 0.2 * np.std(time_series) N len(time_series) def _maxdist(xi, xj): return max([abs(ua-va) for ua,va in zip(xi,xj)]) def _phi(m): x [[time_series[j] for j in range(i,im-1)] for i in range(N-m1)] C 0 for i in range(N-m1): for j in range(N-m1): if i ! j and _maxdist(x[i], x[j]) r: C 1 return C / ((N-m1)*(N-m)) if _phi(m) 0 or _phi(m1) 0: return -np.log(1e-10) return -np.log(_phi(m1) / _phi(m)) # 3. MGM-FA 优化贝叶斯网络结构 class MGM_FA: def __init__(self, n_nodes, n_generations50, pop_size30): self.n_nodes n_nodes self.n_gen n_generations self.pop_size pop_size # 性别比例雄性60% self.n_males int(0.6 * pop_size) self.n_females pop_size - self.n_males def mutual_information(self, data, idx_i, idx_j): # 离散化后计算互信息简化 return np.random.rand() # 实际实现需要离散化统计 def skeleton_based_on_mi(self, data, threshold0.1): # 构建骨架图互信息大于阈值的节点间存在潜在边 skeleton [] for i in range(self.n_nodes): for j in range(i1, self.n_nodes): mi self.mutual_information(data, i, j) if mi threshold: skeleton.append((i,j)) return skeleton def optimize(self, data, expert_constraintsNone): skeleton self.skeleton_based_on_mi(data) # 初始化雄性种群全局探索和雌性种群局部开发 males [self.random_DAG(skeleton) for _ in range(self.n_males)] females [self.random_DAG(skeleton) for _ in range(self.n_females)] for gen in range(self.n_gen): # 雄性吸引雌性雌性向最优雄性移动 best_male min(males, keylambda dag: self.bic_score(dag, data)) for i in range(self.n_females): # 性别机制雌性向最优雄性学习同时保留部分自身结构 females[i] self.crossover(females[i], best_male) # 局部优化器边增/删/转 females[i] self.local_operator(females[i], data) # 雄性根据当前最优雌性更新 best_female min(females, keylambda dag: self.bic_score(dag, data)) for i in range(self.n_males): males[i] self.crossover(males[i], best_female) # 如果提供专家知识强制添加或删除某些边 if expert_constraints: for dag in malesfemales: self.apply_constraints(dag, expert_constraints) # 返回最优网络 all_individuals males females best min(all_individuals, keylambda dag: self.bic_score(dag, data)) return best def bic_score(self, dag, data): # 贝叶斯信息准则评分简化 return np.random.rand() def random_DAG(self, skeleton): # 从骨架图中随机生成有向无环图 return [] def crossover(self, dag1, dag2): return dag1 def local_operator(self, dag, data): return dag def apply_constraints(self, dag, constraints): pass如有问题可以直接沟通