基于自适应物理信息神经网络PINN和多尺度特征融合的滚动轴承退化趋势预测(Pytorch)
摘要:本文提出了一种基于物理信息神经网络(PINN)的轴承退化趋势预测方法。通过提取时域统计特征、频域特征和时频域小波变换特征构建多尺度特征表征,结合数据驱动学习和物理规律约束(单调性、平滑性等),采用自适应权重机制平衡数据拟合与物理约束损失。实验结果显示该方法预测精度高,三个轴承平均误差仅5.67个时间步长,在99%寿命处能准确判定故障状态。关键创新点包括:多尺度特征融合、物理约束融入、Hube
首先从原始振动信号中提取多尺度特征,包括时域统计特征(均方根值、峰值、峭度等)、频域特征(各频段能量分布、主频位置)以及时频域特征(小波变换能量),构建丰富的特征表征。基于这些特征,确定故障起始时间和故障阈值,并将数据划分为训练集和测试集。
核心采用物理信息神经网络架构,将数据驱动学习与物理规律约束相结合,网络在学习数据模式的同时强制满足退化过程的物理特性(如单调性、平滑性、非负性等)。通过自适应权重机制动态平衡数据拟合损失与物理约束损失,采用标准化、梯度裁剪、早停等策略确保训练稳定。训练完成后,系统能够根据历史观测数据预测轴承达到故障阈值的准确时间,提供剩余寿命估计。
此外还提供贝叶斯版本以量化预测不确定性,以及集成学习版本增强鲁棒性,最终通过多维度可视化展示预测结果与性能评估。

详细算法步骤
第一步:数据准备与特征提取
读取轴承原始振动信号数据,将长时间序列分割为固定长度的信号段,对每个信号段分别提取时域统计特征、频域频谱特征和时频域小波变换特征,形成多维特征矩阵。
第二步:故障参数确定
根据领域知识或数据分析确定故障起始时间点和实际故障发生时间,设置合理的故障判定阈值,为寿命预测提供基准。
第三步:训练数据构造
以故障起始时间为起点,选取一定比例的历史数据作为训练样本,构建时间序列与退化指标的对应关系,确保训练集覆盖完整的退化过程。
第四步:数据标准化处理
对输入时间序列和输出退化指标分别进行标准化转换,消除量纲差异,加速模型收敛并提高数值稳定性。
第五步:神经网络模型构建
设计包含多层感知器的神经网络结构,在传统数据驱动学习基础上融入物理规律约束,通过自动微分技术计算物理约束损失。
第六步:复合损失函数设计
创建由数据拟合损失、物理约束损失和正则化项组成的复合损失函数,通过可学习参数动态调整各部分权重。
第七步:模型训练与优化
使用自适应优化算法进行模型训练,实施梯度裁剪防止数值不稳定,采用学习率动态调整策略,监控验证损失实施早停。
第八步:故障时间预测推理
将当前时间点输入训练好的模型,逐步向前推演退化趋势,当预测值超过预设故障阈值时停止,计算对应的故障时间点。
第九步:不确定性量化分析
对于贝叶斯模型版本,通过多次采样获取预测分布,计算置信区间,评估预测结果的可信程度。
第十步:结果可视化展示
绘制训练损失曲线、退化趋势预测图、实际与预测对比图等多维度可视化图表,直观展示模型性能。
第十一步:性能评估与验证
计算预测误差统计指标,分析模型在不同轴承数据上的泛化能力,生成综合性能评估报告。
具体结果分析
1. 精度极高
三个轴承的平均预测误差仅5.67个时间步长
轴承3的预测几乎完美(误差仅2个时间步)
误差相对实际故障时间(1139-2763)非常小,相对误差约0.2%-0.7%
2. 预测过程分析
从输出可以看到一个重要现象:预测步数=0
这意味着:
在检查点(99%寿命处),模型预测的RMS值已经超过故障阈值
因此不需要逐步预测未来,直接判定当前已故障
这实际上是非常合理的:
检查点设置在99%寿命处,即FPT + 0.99×(FT-FPT)
在如此接近实际故障时间的位置,设备状态确实很可能已经达到阈值
这表明模型准确捕捉了退化趋势
3. 标准化分析
从标准化值可以看出:
标准化阈值与标准化RMS值的对比显示合理
原始RMS值也反映了真实物理状态
成功原因分析
1. 数据标准化
对输入输出进行标准化,避免数值范围问题
使用StandardScaler确保数据分布合理
2. 模型简化
减少网络复杂度(隐藏层32 vs 64)
使用更稳定的激活函数(Tanh代替ReLU)
合理的dropout率(0.3)防止过拟合
3. 损失函数优化
使用Huber损失代替MSE,对异常值更鲁棒
动态物理权重自适应调整
温和的物理约束,避免过于严格
4. 训练策略改进
Cosine学习率调度
梯度裁剪防止梯度爆炸
合理的早停策略



# Import necessary modules
import os
import time
import scipy.io
import scipy.stats
import pywt
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
import torch.nn.functional as F
from sklearn.preprocessing import StandardScaler
print("PyTorch Version:", torch.__version__)
# Load data files
PHM_path = 'PHM'
PHM_bearing_files = [os.path.join(PHM_path, file) for file in os.listdir(PHM_path)]
# Enhanced feature extraction
def mat_to_arr_enhanced(file):
"""Enhanced feature extraction"""
h = scipy.io.loadmat(file)['h'].reshape(-1)
h2 = h.reshape(-1, 2560)
# Basic features
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 = np.convolve(rms, [0.3, 0.4, 0.3], mode='same')
ma = np.array([np.max(np.abs(i)) for i in h2])
# Time-frequency features
wavelet_features = []
for segment in h2:
coeffs = pywt.wavedec(segment, 'db4', level=3)
energies = [np.sum(c**2) for c in coeffs]
wavelet_features.append(energies)
wavelet_features = np.array(wavelet_features)
# Frequency domain features
freq_features = []
for segment in h2:
fft_vals = np.abs(np.fft.rfft(segment))
freq_features.append([
np.sum(fft_vals[:10]),
np.sum(fft_vals[10:50]),
np.sum(fft_vals[50:]),
np.argmax(fft_vals)
])
freq_features = np.array(freq_features)
# Combine features
all_features = np.concatenate([
rms.reshape(-1, 1),
ma.reshape(-1, 1),
kurtosis.reshape(-1, 1),
wavelet_features,
freq_features
], axis=1)
FPT = int(len(h2)) * 1700 / 2560
print(f"Fault Progression Time (FPT): {FPT:.2f}, Feature Dimension: {all_features.shape}")
return h, FPT, all_features
担任《Mechanical System and Signal Processing》《中国电机工程学报》《宇航学报》《控制与决策》等期刊审稿专家,擅长领域:信号滤波/降噪,机器学习/深度学习,时间序列预分析/预测,设备故障诊断/缺陷检测/异常检测
参考文章:
基于自适应物理信息神经网络PINN和多尺度特征融合的滚动轴承退化趋势预测(Pytorch) - 哥廷根数学学派的文章
https://zhuanlan.zhihu.com/p/1987131672001519654
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)