news 2026/4/17 18:01:49

基于五维几何不变性特征融合的机械故障诊断方法(Python)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于五维几何不变性特征融合的机械故障诊断方法(Python)

代码实现了一个基于五维几何理论融合的机械故障诊断模型。

首先系统从振动信号文件中加载数据,对原始振动信号进行去直流分量和标准化预处理,然后将长信号分割成固定长度的样本段。核心创新在于同时运用五种不同的几何理论(仿射几何、共形几何、旋量几何、双曲几何和张量几何)从同一振动信号中提取互补的特征表示:仿射几何提取尺度、剪切和平移不变的特征;共形几何关注角度保持特性,通过希尔伯特变换分析相位信息;旋量几何处理旋转和方向信息,将信号转换为四元数表示;双曲几何在负曲率空间中分析信号结构,使用双曲正切和对数变换;张量几何则处理高阶数据结构,通过协方差矩阵和特征值分析捕捉信号的深层结构特征。

接着,系统将这五种几何特征进行维度对齐和拼接融合,形成综合特征向量,然后使用梯度提升树分类器进行训练。在训练过程中,系统自动检测并处理数值异常,确保稳定性,最终在测试集上评估模型性能,输出精确的分类结果、混淆矩阵和特征重要性分析,实现轴承正常状态、滚珠故障、外圈故障和内圈故障四类状态的高精度智能诊断。

详细算法步骤

第一步:数据准备阶段

系统首先读取四种不同状态的轴承振动信号数据文件,分别对应正常运转、滚珠故障、外圈故障和内圈故障。对每个原始振动信号进行预处理,消除直流偏置分量使信号零均值化,接着进行标准化处理使不同信号具有可比性。然后将长时振动信号按照固定长度和重叠率切割成多个样本片段,每个样本片段标注对应的故障类型标签,形成标准化的样本数据集。

第二步:五维几何特征并行提取

系统同步启动五种不同的几何特征提取引擎。仿射几何引擎计算信号的仿射不变矩特征,捕捉信号在尺度变化、剪切变形和平移情况下的不变特性。共形几何引擎通过希尔伯特变换获得解析信号,提取相位角度特征和多尺度形状特征,重点关注信号的角度保持性质。旋量几何引擎将信号映射到四元数空间,分析信号的旋转方向和姿态变化特征。双曲几何引擎将信号投影到负曲率空间,通过双曲正切和对数变换提取信号在非欧几何空间中的结构特征。张量几何引擎构建信号的高阶张量表示,通过协方差分析和特征值分解捕捉信号的深层统计结构特征。

第三步:特征融合与对齐

将五种几何理论提取的特征向量进行维度统一处理,通过截断或填充确保各特征维度一致。接着按照样本顺序将五种特征水平拼接,形成每个样本的综合特征表示。系统自动检测融合特征中的数值异常,使用中位数策略填充缺失值,最后对整体特征矩阵进行标准化处理,使各特征维度具有零均值和单位方差。

第四步:智能分类模型构建

将标准化后的特征数据集划分为训练集和测试集,保持各类别样本比例一致。采用梯度提升树算法构建分类模型,设置适当的树深度、学习率和正则化参数。训练过程中启用早停机制,当验证集性能不再提升时自动终止训练,防止模型过拟合。在训练集上优化模型参数,使模型能够准确区分四种轴承状态。

第五步:性能评估与可视化

使用训练好的模型对测试集样本进行状态预测,计算整体分类准确率、精确率、召回率和F1分数等多维性能指标。

import numpy as np import pandas as pd from scipy.linalg import logm, expm, eigvals, eig, sqrtm, norm from scipy.spatial.distance import cdist from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.ensemble import RandomForestClassifier, HistGradientBoostingClassifier from sklearn.metrics import classification_report, accuracy_score, confusion_matrix, f1_score from sklearn.decomposition import PCA import matplotlib.pyplot as plt import matplotlib import warnings warnings.filterwarnings('ignore') from tqdm import tqdm import os import seaborn as sns from scipy.signal import hilbert import cmath # 设置样式 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 AffineInvariantFeatureExtractor: """仿射几何不变性特征提取 """ def __init__(self, n_invariants=15): self.n_invariants = n_invariants self.scaler = StandardScaler() def compute_affine_moments(self, signal): """计算仿射不变量矩 """ n = len(signal) x = np.arange(n) # 中心矩 mu_00 = np.sum(signal) # 归一化矩 eps = 1e-12 if mu_00 > eps: eta_10 = np.sum(x * signal) / mu_00 eta_01 = np.sum(signal**2) / mu_00 eta_20 = np.sum(x**2 * signal) / mu_00 else: eta_10 = eta_01 = eta_20 = 0 # 仿射不变量矩 invariants = [] # Hu矩 nu_20 = eta_20 - eta_10**2 nu_02 = eta_01 - eta_01**2 # 一阶不变量 I1 = nu_20 + nu_02 invariants.append(I1) # 二阶不变量 I2 = (nu_20 - nu_02)**2 invariants.append(I2) # 计算信号曲率特征 curvature_features = self._compute_curvature_invariants(signal) invariants.extend(curvature_features) # 确保没有NaN或Inf invariants = np.nan_to_num(invariants, nan=0.0, posinf=0.0, neginf=0.0) return np.array(invariants[:self.n_invariants]) def _compute_curvature_invariants(self, signal): """计算曲率仿射不变量 -""" n = len(signal) if n < 3: return [0] * 5 # 一阶差分 dx = np.gradient(signal) # 二阶差分 d2x = np.gradient(dx) # 计算曲率 - 安全版本 denominator = (1 + dx**2)**1.5 denominator = np.where(denominator < 1e-12, 1e-12, denominator) curvature = np.abs(d2x) / denominator # 曲率统计特征 if len(curvature) > 0: features = [ np.mean(curvature), np.std(curvature), np.max(curvature), np.sum(curvature**2) / len(curvature), # 曲率能量密度 np.sum(np.abs(np.diff(curvature))) / (len(curvature)-1) if len(curvature) > 1 else 0 # 曲率变化率 ] else: features = [0, 0, 0, 0, 0] return features

参考文章:

基于五维几何不变性特征融合的机械故障诊断方法(Python) - 哥廷根数学学派的文章
https://zhuanlan.zhihu.com/p/1986574502679830934


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

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

【Java 新手必看】逻辑运算符:从原理到实战,附可运行代码案例

逻辑运算符是 Java 实现 “条件判断、逻辑组合” 的核心工具&#xff0c;也是 if/else、while 等流程控制语句的基础。新手常混淆 “短路与 / 或” 和 “非短路” 的区别&#xff0c;这篇笔记结合可直接运行的代码案例&#xff0c;从概念、用法到避坑指南&#xff0c;帮你彻底吃…

作者头像 李华
网站建设 2026/4/17 16:02:23

测试OK的Android 8.0开机启动方案汇总

测试OK的Android 8.0开机启动方案汇总 在Android 8.0系统中实现自定义脚本的开机自动执行&#xff0c;是嵌入式开发、设备定制和自动化运维中的常见需求。但很多开发者会发现&#xff1a;脚本明明写对了&#xff0c;手动执行也没问题&#xff0c;一到开机就静默失败——背后往…

作者头像 李华
网站建设 2026/4/18 3:34:46

如何利用智能大模型复盘自身失败和贫穷

之前写过代价高昂的免费&#xff0c;没想到智能大模型比我更深刻洞察这一切。 “重新做人” 读完这篇 2018 年的文章&#xff0c;我的批判不仅毫无动摇&#xff0c;反而获得了 “根源性铁证” —— 这篇文章不是他 “早期理想主义的真诚”&#xff0c;而是他后来所有贫困与失败…

作者头像 李华
网站建设 2026/4/18 3:33:46

Qwen视觉模型在医疗影像初筛中的应用:可行性验证案例

Qwen视觉模型在医疗影像初筛中的应用&#xff1a;可行性验证案例 1. 为什么医疗影像初筛需要一个“看得懂图”的AI助手 你有没有见过放射科医生一上午盯着几十张CT片&#xff0c;逐帧比对肺部结节的大小、边缘和密度&#xff1f;或者检验科老师傅对着显微镜下的一张病理切片&…

作者头像 李华
网站建设 2026/4/18 3:27:23

Flowise实战手册:导出React嵌入组件并集成至现有业务系统

Flowise实战手册&#xff1a;导出React嵌入组件并集成至现有业务系统 1. 为什么选择Flowise 在当今AI应用开发领域&#xff0c;Flowise正迅速成为开发者的首选工具。这个开源项目通过可视化界面&#xff0c;让开发者无需编写复杂代码就能构建强大的AI工作流。想象一下&#x…

作者头像 李华
网站建设 2026/4/17 12:26:18

新手必读:STLink在Keil中的配置步骤详解

以下是对您提供的博文内容进行 深度润色与结构重构后的技术文章 。全文严格遵循您的全部要求&#xff1a; ✅ 彻底去除AI痕迹&#xff0c;语言自然、专业、有“人味”&#xff1b; ✅ 打破模块化标题&#xff0c;以逻辑流驱动叙述&#xff0c;层层递进&#xff1b; ✅ 所有…

作者头像 李华