贝叶斯网络滚动轴承故障识别算法设计与实现【附代码】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、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_imfs=8): # 使用 PyEMD 的 CEEMDAN(近似实现) ceemdan = CEEMDAN() imfs = ceemdan.ceemdan(signal, max_imf=max_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, m=2, r=None): 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,i+m-1)] for i in range(N-m+1)] C = 0 for i in range(N-m+1): for j in range(N-m+1): if i != j and _maxdist(x[i], x[j]) <= r: C += 1 return C / ((N-m+1)*(N-m)) if _phi(m) == 0 or _phi(m+1) == 0: return -np.log(1e-10) return -np.log(_phi(m+1) / _phi(m)) # ================== 3. MGM-FA 优化贝叶斯网络结构 ================== class MGM_FA: def __init__(self, n_nodes, n_generations=50, pop_size=30): 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, threshold=0.1): # 构建骨架图:互信息大于阈值的节点间存在潜在边 skeleton = [] for i in range(self.n_nodes): for j in range(i+1, self.n_nodes): mi = self.mutual_information(data, i, j) if mi > threshold: skeleton.append((i,j)) return skeleton def optimize(self, data, expert_constraints=None): 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, key=lambda 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, key=lambda 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 males+females: self.apply_constraints(dag, expert_constraints) # 返回最优网络 all_individuals = males + females best = min(all_individuals, key=lambda 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如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇
