算法首先从滚动轴承的振动信号中提取关键特征,包括均方根值和最大值指标,通过信号处理技术确定故障起始时间点;然后构建改进的物理信息神经网络模型,该模型深度融合了深度学习的表达能力和物理先验知识的约束机制,通过多层次的网络架构结合注意力机制来捕捉时间序列中的长期依赖关系,同时在损失函数中引入物理约束项确保预测结果符合设备退化的基本物理规律,包括退化速率的非负性、退化过程的加速特性、平滑性约束等;在训练过程中采用自适应学习率调整和早停策略来优化模型参数,防止过拟合;为进一步提高预测的稳定性和可靠性,采用集成学习方法训练多个具有不同初始化和架构的模型,通过异常值检测和中位数聚合策略融合各模型的预测结果;最终基于训练好的模型对未来退化趋势进行外推,当预测的振动指标超过预设阈值时确定故障发生时间,从而实现对轴承剩余使用寿命的准确预测,为设备维护决策提供科学依据。
算法流程可适当参考:
开始 ↓ 振动信号采集与预处理 ↓ 特征提取(RMS、最大值) ↓ 确定故障起始时间(FPT) ↓ 构建改进的PINN模型 ↓ 物理约束设计 ├── 退化速率非负 ├── 退化过程加速 ├── 平滑性约束 └── 范围约束 ↓ 模型训练与优化 ├── 自适应学习率调整 ├── 早停机制 └── 梯度裁剪 ↓ 集成学习策略 ├── 多个模型并行训练 ├── 不同注意力机制 ├── 不同随机初始化 └── 异常值过滤 ↓ 预测结果聚合(中位数) ↓ 退化趋势外推与故障时间预测 ↓ 性能评估与可视化 ↓ 结束算法步骤
第一步:数据准备阶段,采集滚动轴承的振动信号数据,对原始信号进行分段处理,计算每段的统计特征包括均方根值和最大值,形成时间序列特征数据集。
第二步:故障起始时间确定,基于领域知识或统计方法识别轴承性能开始加速退化的时间点,作为模型训练的起始参考点。
第三步:物理信息神经网络构建,设计深度神经网络架构,融入注意力机制增强序列建模能力,在损失函数中引入物理约束项确保模型预测符合设备退化规律。
第四步:模型训练优化,采用自适应学习率调度策略,实施梯度裁剪防止训练不稳定,设置早停机制避免过拟合,监控训练过程中的各项损失指标。
第五步:集成预测实施,并行训练多个具有不同配置的模型,包括不同的注意力机制设置和随机初始化,获得多样化的预测结果。
第六步:预测结果融合,对各个模型的预测值进行异常值检测和过滤,采用中位数聚合策略得到最终的故障时间预测,提高结果的鲁棒性。
第七步:剩余寿命计算,基于训练好的模型对轴承未来性能退化趋势进行预测,当预测的振动指标超过预设的安全阈值时,计算从当前时刻到预测故障时间的时间间隔作为剩余使用寿命。
第八步:结果验证与可视化,将预测结果与实际故障时间进行对比分析,计算预测误差指标,生成退化趋势曲线和预测结果图表,为决策提供直观支持。
结果分析
预测精度表现:
轴承1_1: 预测2756 vs 实际2763 →误差7个时间步
轴承1_2: 预测2279 vs 实际2287 →误差8个时间步
轴承1_3: 预测1137 vs 实际1139 →误差2个时间步
平均绝对误差:5.67个时间步
模型稳定性分析:
前两个轴承: 集成预测标准差为0,说明3个模型预测完全一致,稳定性极高
第三个轴承: 标准差470.93,但通过中位数聚合得到了很好的最终预测
训练收敛性: 所有模型都成功收敛,没有出现训练失败
# 导入必要的模块 import os import time import scipy.io import scipy.stats from matplotlib import pyplot as plt import numpy as np import pandas as pd import torch import torch.nn as nn import torch.optim as optim from sklearn.preprocessing import StandardScaler import warnings warnings.filterwarnings('ignore') print("PyTorch版本:", torch.__version__) # 载入数据文件 PHM_path = 'PHM' PHM_bearing_files = [os.path.join(PHM_path, file) for file in os.listdir(PHM_path)] # 将mat文件转换为数组的函数 def mat_to_arr(file): """ 将MATLAB的.mat文件转换为Python数组 参数: file: 文件路径 返回: h: 原始振动信号 FPT: 故障起始时间 kurtosis: 峭度指标 rms: 均方根值 ma: 最大值 """ # 加载mat文件并重塑为1维数组 h = scipy.io.loadmat(file)['h'].reshape(-1) # 将信号重塑为多段,每段2560个点 h2 = h.reshape(-1, 2560) # 计算每段的峭度(反映信号尖峰程度的统计量) kurtosis = np.array([scipy.stats.kurtosis(i) for i in h2]) # 计算每段的均方根值(反映信号能量大小的指标) rms = np.array([np.mean(i**2)**0.5 for i in h2]) # 对RMS进行平滑处理,使用[0.3,0.4,0.3]的卷积核 rms = np.convolve(rms, [0.3, 0.4, 0.3], mode='same') # 计算每段信号的绝对最大值 ma = np.array([np.max(np.abs(i)) for i in h2]) # 计算故障起始时间(Fault Progression Time) FPT = int(len(h2)) * 1700 / 2560 print("故障起始时间FPT:", FPT) return h, FPT, kurtosis, rms, ma参考文章:
基于物理信息神经网络和多模态集成学习的滚动轴承退化趋势分析(Pytorch) - 哥廷根数学学派的文章
https://zhuanlan.zhihu.com/p/1970611012429416075
工学博士,担任《Mechanical System and Signal Processing》审稿专家,担任
《中国电机工程学报》优秀审稿专家,《控制与决策》,《系统工程与电子技术》,《电力系统保护与控制》,《宇航学报》等EI期刊审稿专家。
擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。