news 2026/4/22 16:29:56

智瞳·工业装备健康透视—基于谱幅自适应融合的退化评估智能算法(Python)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
智瞳·工业装备健康透视—基于谱幅自适应融合的退化评估智能算法(Python)

算法特点

1. 多频带谱幅融合创新

改进传统单频带健康指数的局限性,实现全频段谱幅信息的自适应加权融合

通过优化权重分配,实现关键故障频带的自动识别与增强

2. 多目标协同优化

将可分性、单调性、稀疏性三个关键性能指标统一到优化框架中

提出信噪比优化模型,平衡健康指数在不同退化阶段的动态特性

3. 凸优化理论应用

将健康指数构建转化为凸优化问题,保证全局最优解

引入松弛变量处理单调性约束,提高模型可行性和鲁棒性

4. 可解释性设计

优化权重可视化,揭示各频带对健康状态的贡献度

故障特征与物理频带对应,实现数据驱动→物理理解的闭环

5. 自适应退化阶段划分

结合K-means聚类与能量特征,动态识别不同退化阶段

避免传统等分方法的假设偏差,更符合实际退化过程

6. 稀疏性增强

针对故障特征的稀疏特性,引入L1正则化提取关键故障频率

降低冗余信息干扰,提高健康指数对早期微弱故障的敏感性

算法步骤

1. 数据预处理

加载振动信号数据,进行分段加窗处理

计算频谱和包络谱,获取频域特征矩阵

2. 退化阶段识别

动态划分正常、早期退化、严重退化等阶段

建立阶段标签用于可分性约束

3. 可分性优化建模

构建正常与退化阶段的最大分离度目标函数

引入类间距最大化约束,增强健康指数的判别能力

4. 单调性约束嵌入

添加相邻时间点健康指数的单调递增约束

使用松弛变量处理非严格单调情况,提高模型可行性

5. 稀疏性权重学习

针对故障特征的稀疏分布,采用L1正则化提取关键频率

通过交叉验证优化正则化参数,平衡稀疏性与表达能力

6. 多目标协同求解

融合可分性、单调性、稀疏性构建统一优化问题

使用凸优化求解器(ECOS/SCS)获取全局最优权重

7. 健康指数计算与评估

应用优化权重计算广义健康指数

评估单调性、可分性、趋势性等关键性能指标

8. 结果可视化与解释

绘制健康指数退化曲线,标注各阶段边界

可视化权重分布,解释关键故障频带的贡献

import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy.fft import fft, fftfreq from scipy.signal import hilbert import cvxpy as cp from sklearn.cluster import KMeans from sklearn.linear_model import LassoCV, Ridge import warnings warnings.filterwarnings('ignore') # 设置中文字体 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False class GeneralizedHealthIndex: """ 基于谱幅融合的广义健康指数构建与优化模型 """ def __init__(self, fs=12000, segment_length=1024, overlap=0.5): """ 初始化参数 参数: ---------- fs : int 采样频率 (Hz) segment_length : int 分段长度 overlap : float 重叠率 (0-1) """ self.fs = fs self.segment_length = segment_length self.overlap = overlap self.weights = None self.health_indices = None def load_data(self, data_dir='data'): """ 加载西储大学轴承数据 参数: ---------- data_dir : str 数据目录路径 返回: ---------- data_dict : dict 加载的数据字典 labels : dict 数据标签 """ import os data_files = ['98raw.txt', '106raw.txt', '119raw.txt', '131raw.txt'] labels = { '98raw.txt': 'Normal', '106raw.txt': 'Ball Fault', '119raw.txt': 'Inner Race Fault', '131raw.txt': 'Outer Race Fault' } data_dict = {} for file in data_files: file_path = os.path.join(data_dir, file) if os.path.exists(file_path): # 读取数据 data = pd.read_csv(file_path, header=None, names=['vibration']) data_dict[file] = data['vibration'].values print(f"Loaded {file}: {labels[file]}, length: {len(data_dict[file])}") else: print(f"Warning: {file_path} not found!") return data_dict, labels def segment_signal(self, signal, max_segments=None): """ 信号分段 参数: ---------- signal : numpy array 原始振动信号 max_segments : int, optional 最大分段数 返回: ---------- segments : list 分段后的信号列表 """ segments = [] step = int(self.segment_length * (1 - self.overlap)) max_start = len(signal) - self.segment_length + 1 if max_segments is not None: max_start = min(max_start, max_segments * step) for i in range(0, max_start, step): segment = signal[i:i + self.segment_length] segments.append(segment) return np.array(segments) def compute_spectrum(self, signal_segments): """ 计算信号的频谱 参数: ---------- signal_segments : numpy array 分段后的信号,形状为 (n_segments, segment_length) 返回: ---------- spectrum_magnitude : numpy array 频谱幅值,形状为 (n_segments, n_frequencies) frequencies : numpy array 频率数组 """ n_segments = signal_segments.shape[0] n_frequencies = self.segment_length // 2 + 1 spectrum_magnitude = np.zeros((n_segments, n_frequencies)) for i in range(n_segments): # 应用汉宁窗 windowed_signal = signal_segments[i] * np.hanning(self.segment_length) # 计算FFT fft_result = fft(windowed_signal) # 取幅值(正频率部分) magnitude = np.abs(fft_result[:n_frequencies]) spectrum_magnitude[i] = magnitude # 频率数组 frequencies = fftfreq(self.segment_length, 1/self.fs)[:n_frequencies] return spectrum_magnitude, frequencies def compute_envelope_spectrum(self, signal_segments): """ 计算信号的包络谱 参数: ---------- signal_segments : numpy array 分段后的信号 返回: ---------- envelope_spectrum : numpy array 包络谱幅值 envelope_frequencies : numpy array 包络谱频率 """ n_segments = signal_segments.shape[0] n_frequencies = self.segment_length // 2 + 1 envelope_spectrum = np.zeros((n_segments, n_frequencies)) for i in range(n_segments): # 计算解析信号(希尔伯特变换) analytic_signal = hilbert(signal_segments[i]) # 计算包络 envelope = np.abs(analytic_signal) # 对包络信号进行FFT windowed_envelope = envelope * np.hanning(self.segment_length) fft_result = fft(windowed_envelope) magnitude = np.abs(fft_result[:n_frequencies]) envelope_spectrum[i] = magnitude # 频率数组 envelope_frequencies = fftfreq(self.segment_length, 1/self.fs)[:n_frequencies] return envelope_spectrum, envelope_frequencies

担任《Mechanical System and Signal Processing》《中国电机工程学报》《宇航学报》《控制与决策》等期刊审稿专家,擅长领域:信号滤波/降噪,机器学习/深度学习,时间序列预分析/预测,设备故障诊断/缺陷检测/异常检测。基于多频带谱幅自适应加权融合与凸优化理论的装备全生命周期可解释退化评估广义健康指数智能构建算法(Python)

参考文章:

智瞳·工业装备健康透视—基于谱幅自适应融合的退化评估智能算法(Python) - 哥廷根数学学派的文章
https://zhuanlan.zhihu.com/p/2000114112613599005

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

Elastic 和 Alteryx:为企业 agents 提供可信、可搜索的数据基础

作者:来自 Elastic Sunnie Weber Elastic 很高兴与 Alteryx 合作,帮助组织用可信、业务就绪的数据将 AI agents 开发落地。通过结合 Alteryx 的受治理数据准备平台与 Elasticsearch 的向量数据库和上下文工程平台,我们让像你这样的企业能够构…

作者头像 李华
网站建设 2026/4/23 9:57:53

基于Java的广告制品制作智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 开发广告制品制作智慧管理系统旨在提供一个全面且高效的解决方案,涵盖员工管理、客户管理、订单管理等多个功能模块。相比传统选题,“烂大街”的毕设项目多为单一或简单的系统设计与实现,而本系统的复杂…

作者头像 李华
网站建设 2026/4/22 12:58:40

OoderAgent Nexus 版本分支正式提交[号外]—核心四问

ooderAgent Nexus 版本分支已正式完成提交,经多维度严苛验证,5 大全场景测试全部通过,标志着这一年轻开源项目正式从技术原型迈入有实际场景、有核心价值的产品级新阶段。本次 Nexus 版本围绕 “AIGC 时代 AI 能力枢纽” 的核心定位完成全维度…

作者头像 李华
网站建设 2026/4/22 22:16:41

【bug】【Python】pandas中的DataFrame.to_excel()和ExcelWriter的区别

pandas中的DataFrame.to_excel()和ExcelWriter主要有以下区别:\nDataFrame.to_excel()是直接将DataFrame写入Excel文件,简单方便。ExcelWriter需要创建writer对象,并最终调用save()保存。\nDataFrame.to_excel()只能将一个DataFrame写入一个sheet。ExcelWriter可以将多个DataFr…

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

Elasticsearch:Apache Lucene 2025 年终总结

作者:来自 Elastic Benjamin Trent 及 Chris Hegarty 2025 年是 Apache Lucene 非常出色的一年;以下是我们的亮点。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训什么时候开始!你现在可以开始免费的 cloud 试用…

作者头像 李华
网站建设 2026/4/17 15:32:39

《写出优雅 Python 的秘密武器:深入理解上下文管理器,从文件到事务的全场景实战》

《写出优雅 Python 的秘密武器:深入理解上下文管理器,从文件到事务的全场景实战》 在我教授 Python 的这些年里,有一个语法结构几乎每次讲到都会让初学者恍然大悟、让资深开发者会心一笑——那就是 with 语句。它看似简单,却是 Python 世界中最具“工程气质”的设计之一:…

作者头像 李华