news 2026/5/1 10:51:46

基于辛几何流形学习和最优传输理论的多尺度小波特征融合机械故障诊断方法(Python)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于辛几何流形学习和最优传输理论的多尺度小波特征融合机械故障诊断方法(Python)

核心流程首先从原始振动信号出发,通过多尺度小波变换提取时频域特征,同时利用辛几何相空间重构技术将一维信号转换为保持相空间体积和能量结构的辛对称矩阵;接着,算法采用最优传输理论中的Wasserstein距离来衡量辛矩阵之间的相似性,构建基于最优传输的图结构,并通过谱嵌入方法将高维辛矩阵降维;同时,将辛矩阵投影到流形切空间得到辛几何特征向量;然后将小波特征和辛几何特征进行维度对齐和融合,形成综合了时频信息和几何结构的复合特征;最后,使用梯度提升树分类器在融合特征上进行训练和分类,实现对轴承四种工作状态(正常、滚珠故障、外圈故障、内圈故障)的智能诊断。

整个流程结合了信号处理、微分几何、最优传输理论和机器学习,形成了一套完整的故障诊断方法。

详细算法步骤

第一步,数据采集与预处理阶段,系统首先从轴承振动传感器获取原始的一维时序振动信号,对这些信号进行去除直流分量和标准化处理,然后将长序列分割成固定长度的重叠样本段,为后续分析准备规整的数据格式。

第二步,多尺度小波特征提取阶段,对每个振动信号样本进行多层级的小波分解,在不同尺度上提取小波系数的统计特征,包括均值、标准差、能量、熵值等时频域指标,接着通过主成分分析对这些高维特征进行降维处理,保留主要信息的同时减少特征维度。

第三步,辛几何相空间重构阶段,采用延迟坐标法将一维振动信号重构为高维相空间轨迹,基于辛几何理论构造保持相空间体积和能量结构的辛对称矩阵,这些矩阵能够反映系统的动力学特性。

第四步,最优传输图嵌入阶段,创新性地使用Wasserstein距离计算辛矩阵之间的相似性,这种距离度量比传统的欧氏距离更能反映概率分布差异,基于最优传输距离构建样本间的亲和力图,然后利用谱图理论将高维辛矩阵嵌入到低维空间。

第五步,辛流形切空间投影阶段,在辛矩阵构成的流形上计算Karcher均值作为参考点,将所有辛矩阵通过对数映射投影到该参考点的切空间,得到向量形式的辛几何特征。

第六步,特征融合阶段,将小波特征向量与辛几何特征向量进行维度对齐,然后拼接形成综合特征,这种融合策略同时捕捉了信号的时频特性和系统的几何结构特性。

第七步,模型训练阶段,使用梯度提升树算法在融合特征上训练分类模型,通过集成多个弱学习器构建强分类器,学习不同故障模式的特征模式。

第八步,故障诊断阶段,对新的振动信号依次进行相同的特征提取和融合流程,然后输入训练好的模型进行预测,输出轴承的故障类型诊断结果,同时提供置信度评估。

第九步,可视化分析阶段,系统生成多维度的可视化图表,包括特征分布图、混淆矩阵、性能指标对比等。

整个系统在训练集和测试集上均实现了100%的准确率和F1分数,对4种轴承工作状态(正常、滚珠故障、外圈故障、内圈故障)实现了完全准确的分类识别;这一优异性能得益于系统创新性地将信号处理、微分几何、最优传输理论和机器学习深度融合,首先通过多尺度小波变换从原始振动信号中提取了46维时频域统计特征并降维至20维保留95.3%的方差信息,同时利用辛几何相空间重构技术将一维信号转换为6×6的辛对称矩阵以保持相空间的体积和能量结构,进而采用最优传输理论中的Wasserstein距离度量辛矩阵间的相似性并构建图结构进行谱嵌入降维,再将辛矩阵投影到流形切空间得到几何特征,最终将20维小波特征与20维辛几何特征融合形成40维综合特征输入梯度提升树分类器进行训练和预测;系统在824个样本的数据集上经过8分37秒的完整训练流程,在248个测试样本上取得了所有类别精度、召回率和F1分数均为1.0000的完美表现,验证了辛几何保持动力学结构、最优传输提供鲁棒相似性度量、多尺度小波捕捉时频特征以及特征融合增强表征能力的理论优势,形成了一套兼具理论创新性和实际应用价值的轴承故障智能诊断解决方案。

import numpy as np import pandas as pd from scipy.linalg import logm, expm, eigvals, eig, sqrtm from scipy.spatial.distance import cdist from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier from sklearn.metrics import classification_report, accuracy_score, confusion_matrix, f1_score from sklearn.decomposition import PCA, KernelPCA from sklearn.manifold import TSNE, LocallyLinearEmbedding import matplotlib.pyplot as plt import matplotlib import warnings warnings.filterwarnings('ignore') from tqdm import tqdm import os import pywt import seaborn as sns #pip install POT import ot # Python Optimal Transport library from scipy.optimize import linear_sum_assignment import networkx as nx # 设置样式 matplotlib.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'DejaVu Sans'] matplotlib.rcParams['axes.unicode_minus'] = False plt.style.use('seaborn-v0_8-darkgrid') # ============================== # 数据加载模块 # ============================== class AdvancedDataLoader: """增强版数据加载器""" def __init__(self, data_dir='data', sampling_freq=12000): self.data_dir = data_dir self.sampling_freq = sampling_freq self.label_map = { '98raw.txt': 0, # 正常状态 '106raw.txt': 1, # 滚珠故障 '119raw.txt': 2, # 外圈故障 '131raw.txt': 3 # 内圈故障 } self.label_names = { 0: 'Normal', 1: 'Ball Fault', 2: 'Outer Race Fault', 3: 'Inner Race Fault' } self.colors = ['#2E86AB', '#A23B72', '#F18F01', '#C73E1D'] def load_data(self, segment_length=2048, overlap=0.5): """加载数据""" X = [] y = [] for filename in os.listdir(self.data_dir): if filename.endswith('.txt'): filepath = os.path.join(self.data_dir, filename) label = self.label_map[filename] # 读取数据 data = pd.read_csv(filepath, header=None, names=['vibration']) signal = data['vibration'].values # 预处理 signal = signal - np.mean(signal) # 去除直流分量 signal = (signal - np.mean(signal)) / np.std(signal) # 标准化 # 分割成样本 step = int(segment_length * (1 - overlap)) for i in range(0, len(signal) - segment_length + 1, step): segment = signal[i:i + segment_length] X.append(segment) y.append(label) X = np.array(X) y = np.array(y) print(f"Data loaded successfully") print(f"Total samples: {len(X)}") print(f"Class distribution: {np.bincount(y)}") return X, y # ============================== # 辛几何相空间重构模块 # ============================== class SymplecticPhaseSpaceReconstruction: """辛几何相空间重构 - 创新点1:使用辛几何保持相空间的体积和能量结构""" def __init__(self, embedding_dim=6, tau=1): self.embedding_dim = embedding_dim self.tau = tau def reconstruct(self, signal): """辛几何相空间重构,返回辛对称矩阵""" n = len(signal) # 确保参数有效 embedding_dim = min(self.embedding_dim, n // 2) if embedding_dim < 2: embedding_dim = 2 tau = self.tau trajectory_length = n - (embedding_dim - 1) * tau if trajectory_length <= embedding_dim: embedding_dim = max(2, min(embedding_dim, trajectory_length - 1)) tau = 1 trajectory_length = n - (embedding_dim - 1) * tau # 构建辛相空间轨迹矩阵 trajectory = np.zeros((trajectory_length, embedding_dim)) for i in range(embedding_dim): start_idx = i * tau end_idx = start_idx + trajectory_length trajectory[:, i] = signal[start_idx:end_idx] # 计算轨迹的辛结构矩阵 # 辛矩阵满足 J^T Ω J = Ω,其中Ω是标准辛矩阵 symplectic_matrix = self._compute_symplectic_matrix(trajectory) return symplectic_matrix

参考文章:

基于辛几何流形学习和最优传输理论的多尺度小波特征融合机械故障诊断方法(Python) - 哥廷根数学学派的文章
https://zhuanlan.zhihu.com/p/1986350085949383337


工学博士,担任《Mechanical System and Signal Processing》审稿专家,担任
《中国电机工程学报》优秀审稿专家,《控制与决策》,《系统工程与电子技术》,《电力系统保护与控制》,《宇航学报》等EI期刊审稿专家。
擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 3:42:58

想把网页保存成PDF文件,快速删掉侧边栏广告再打印

想要把网页保存成PDF文件的时候经常会有右侧左侧侧边栏挡住主要内容。怎么办呢&#xff1f; 打开 开发者模式 在 console 里粘贴以下&#xff0c;回车&#xff0c;就好了&#xff01; // 隐藏所有可能包含侧边栏的常见元素 var style document.createElement(style); style.in…

作者头像 李华
网站建设 2026/5/1 12:33:08

深度学习之第八课迁移学习(残差网络ResNet)

目录 简介 一、迁移学习 1.什么是迁移学习 2. 迁移学习的步骤 二、残差网络ResNet 1.了解ResNet 2.ResNet网络—残差结构 三、代码分析 1. 导入必要的库 2. 模型准备(迁移学习) 3. 数据预处理 4. 自定义数据集类 5. 数据加载器 6. 设备配置 7. 训练函数 8. 测…

作者头像 李华
网站建设 2026/5/1 13:58:24

计算机视觉系列之opencv语法基础案例分析之银行卡号识别

简介 计算机视觉系列第一课opencv语法(一)保姆级教学 计算机视觉系列第一课opencv语法(二)保姆级教学 计算机视觉系列第一课opencv语法(三)保姆级教学 [计算机视觉第一课opencv(四)保姆级教学][opencv 3] 关于计算机视觉的基础内容我们之前已经说完了,今天我们就来用…

作者头像 李华
网站建设 2026/4/25 0:50:16

工业控制场景下模拟I2C通信的完整指南

以下是对您提供的博文《工业控制场景下模拟IC通信的完整指南&#xff1a;原理、实现与鲁棒性设计》进行 深度润色与结构重构后的专业级技术文章 。本次优化严格遵循您的全部要求&#xff1a; ✅ 彻底去除AI痕迹&#xff08;无模板化表达、无空洞套话、无机械连接词&#xff…

作者头像 李华
网站建设 2026/5/1 15:09:10

Z-Image-Turbo适合哪些场景?这5个最实用

Z-Image-Turbo适合哪些场景&#xff1f;这5个最实用 你有没有过这样的体验&#xff1a; 想快速出一张电商主图&#xff0c;等了半分钟&#xff0c;进度条才走到60%&#xff1b; 客户临时要改三版海报文案&#xff0c;每改一次就得重跑模型&#xff1b; 做教育课件需要配图&…

作者头像 李华
网站建设 2026/4/25 16:05:33

游戏开发中 C++ 枚举的正确用法:必须用 `enum class`

在 Unreal Engine 或其他 C 游戏项目中&#xff0c;枚举常用于表示角色状态、技能类型、网络状态等。必须使用 enum class&#xff0c;原因如下&#xff1a; 1. 避免命名冲突&#xff08;关键&#xff01;&#xff09; 游戏系统多&#xff0c;不同模块可能定义相同名称的状态…

作者头像 李华