核心内容摘要
职场暗流涌动:天海翼的出差,一场意想不到的“博弈”
算法特点
多频带谱幅融合创新改进传统单频带健康指数的局限性实现全频段谱幅信息的自适应加权融合通过优化权重分配实现关键故障频带的自动识别与增强
多目标协同优化将可分性、单调性、稀疏性三个关键性能指标统一到优化框架中提出信噪比优化模型平衡健康指数在不同退化阶段的动态特性
凸优化理论应用将健康指数构建转化为凸优化问题保证全局最优解引入松弛变量处理单调性约束提高模型可行性和鲁棒性
可解释性设计优化权重可视化揭示各频带对健康状态的贡献度故障特征与物理频带对应实现数据驱动→物理理解的闭环
自适应退化阶段划分结合K-means聚类与能量特征动态识别不同退化阶段避免传统等分方法的假设偏差更符合实际退化过程
稀疏性增强针对故障特征的稀疏特性引入L1正则化提取关键故障频率降低冗余信息干扰提高健康指数对早期微弱故障的敏感性算法步骤
数据预处理加载振动信号数据进行分段加窗处理计算频谱和包络谱获取频域特征矩阵
退化阶段识别动态划分正常、早期退化、严重退化等阶段建立阶段标签用于可分性约束
可分性优化建模构建正常与退化阶段的最大分离度目标函数引入类间距最大化约束增强健康指数的判别能力
单调性约束嵌入添加相邻时间点健康指数的单调递增约束使用松弛变量处理非严格单调情况提高模型可行性
稀疏性权重学习针对故障特征的稀疏分布采用L1正则化提取关键频率通过交叉验证优化正则化参数平衡稀疏性与表达能力
多目标协同求解融合可分性、单调性、稀疏性构建统一优化问题使用凸优化求解器ECOS/SCS获取全局最优权重
健康指数计算与评估应用优化权重计算广义健康指数评估单调性、可分性、趋势性等关键性能指标
结果可视化与解释绘制健康指数退化曲线标注各阶段边界可视化权重分布解释关键故障频带的贡献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, fs12000, segment_length1024, overlap
0.
: 初始化参数 参数: ---------- fs : int 采样频率 (Hz) segment_length : int 分段长度 overlap : float 重叠率 (0-
self.fs fs self.segment_length segment_length self.overlap overlap self.weights None self.health_indices None def load_data(self, data_dirdata): 加载西储大学轴承数据 参数: ---------- 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, headerNone, names[vibration]) data_dict[file] data[vibration].values print(fLoaded {file}: {labels[file]}, length: {len(data_dict[file])}) else: print(fWarning: {file_path} not found!) return data_dict, labels def segment_signal(self, signal, max_segmentsNone): 信号分段 参数: ---------- 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