news 2026/4/15 15:57:41

基于物理信息神经网络PINN的滚动轴承退化趋势分析(Pytorch)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于物理信息神经网络PINN的滚动轴承退化趋势分析(Pytorch)

算法主要实现基于物理信息神经网络PINN的滚动轴承退化趋势分析。首先从轴承振动信号中提取RMS和最大值作为退化特征指标,通过分析信号特征确定故障起始时间(FPT)。然后构建融合物理先验知识的深度神经网络模型,该模型不仅学习历史数据规律,还引入退化过程的物理约束(如单调性、加速性等)。在训练阶段,通过优化数据拟合损失和物理约束损失的加权和,使网络学习符合物理规律的退化轨迹。训练完成后,利用学习到的退化模型外推预测轴承达到预设故障阈值的时间,从而计算剩余使用寿命。整个流程实现了数据驱动与物理知识的有机结合,提高了退化趋势预测的准确性和物理合理性。

算法流程可以适当参考:

开始 │ ├─ 数据预处理阶段 │ │ │ ├─ 加载轴承振动信号数据 │ │ │ ├─ 信号分段处理(每段2560个点) │ │ │ ├─ 特征提取:计算每段RMS和最大值 │ │ │ └─ 确定故障起始时间FPT │ ├─ 模型构建阶段 │ │ │ ├─ 设计PINN网络结构(输入层、隐藏层、输出层) │ │ │ ├─ 定义物理约束:退化单调性、加速特性、范围约束 │ │ │ └─ 设置自适应物理权重 │ ├─ 训练阶段 │ │ │ ├─ 准备训练数据(从FPT开始的历史数据) │ │ │ ├─ 定义复合损失函数(数据损失 + 物理损失) │ │ │ ├─ 使用Adam优化器进行训练 │ │ │ ├─ 实现学习率自适应调整 │ │ │ └─ 早停机制防止过拟合 │ ├─ 预测阶段 │ │ │ ├─ 使用训练好的模型进行退化趋势外推 │ │ │ ├─ 监测预测值达到故障阈值的时间 │ │ │ └─ 计算预测的故障时间FT │ ├─ 结果评估 │ │ │ ├─ 比较预测FT与实际FT │ │ │ ├─ 计算预测误差 │ │ │ └─ 生成可视化分析图表 │ └─ 结束

详细算法步骤

第一步,进行轴承振动数据的采集与预处理,将连续的振动信号分割为固定长度的数据段,为后续特征提取做好准备。

第二步,从每段振动信号中提取能够反映轴承健康状态的关键特征指标,包括表征信号能量的均方根值和体现信号冲击特性的最大值特征。

第三步,分析提取的特征序列,确定轴承性能开始显著退化的故障起始时间点,作为后续建模的基准参考。

第四步,构建物理信息神经网络模型架构,设计包含多个隐藏层的深度网络结构,并确定合适的激活函数。

第五步,在神经网络中嵌入轴承退化过程的物理先验知识,包括退化趋势的单调递增约束、退化速率的加速特性以及退化值的合理范围限制。

第六步,准备模型训练所需的数据样本,选取从故障起始时间开始的历史观测数据作为训练输入和目标输出。

第七步,定义包含数据拟合项和物理约束项的复合损失函数,通过加权求和的方式平衡数据驱动学习和物理规律遵循。

第八步,采用自适应优化算法对网络参数进行迭代更新,同时引入学习率动态调整策略以提高训练效率。

第九步,实施早停机制来防止模型过拟合,当验证损失不再改善时及时终止训练过程。

第十步,利用训练完成的物理信息神经网络模型对轴承未来退化趋势进行预测推演,模拟性能指标随时间的变化轨迹。

第十一步,根据预设的故障阈值判断标准,确定预测的退化曲线达到临界条件的时间点,即为预测的故障发生时间。

第十二步,将模型预测结果与实际观测数据进行对比分析,评估预测精度并生成全面的可视化分析报告。

实验运行结果详细分析

模型初始化与数据加载:

成功加载了PyTorch 2.2.2版本和三个轴承数据文件(Bearing1_1、1_3、1_4)

提取了每个轴承的振动信号特征(RMS和最大值),并计算了故障起始时间FPT

三个轴承的FPT分别为1861、1577、948个时间单位

PINN模型训练效果:

轴承1_1:训练3000步,损失从0.63降至0.048,预测FT=2756(实际2763),误差仅7

轴承1_3:训练3000步,损失从0.707降至0.054,预测FT=2279(实际2287),误差8

轴承1_4:训练3000步,损失从2.84降至0.013,预测FT=1147(实际1139),误差8

预测精度分析:

平均绝对误差仅7.67个时间单位,精度较高

3个轴承的预测误差均在10个时间单位以内

物理约束权重自适应调整(0.178、0.167、0.254),体现了数据驱动的适应性

# 导入必要的模块 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 # 设置测试轴承 test_bearing = ['1_1', '1_3', '1_4'] test_bearing_files = [] for f in PHM_bearing_files: if f[-7:-4] in test_bearing: test_bearing_files.append(f) print("测试轴承文件:", test_bearing_files) # 定义特征提取函数 def get_fea_FPT(bearing_files): """ 从轴承数据中提取特征和故障起始时间 参数: bearing_files: 轴承数据文件列表 返回: feature_list: 特征列表 FPT_list: 故障起始时间列表 """ feature_list = [] FPT_list = [] for i, file in enumerate(bearing_files): # 获取数据 h, FPT, kurtosis, rms, ma = mat_to_arr(file) h2 = h.reshape(-1, 2560) # 提取特征:RMS和最大值 fea = np.concatenate([ rms[:].reshape(-1, 1), # RMS特征 ma[:].reshape(-1, 1), # 最大值特征 ], axis=1) print(f"文件: {file[-14:-4]}, 数据形状: {h2.shape}, 特征形状: {fea.shape}, FPT: {FPT}") feature_list.append(fea) FPT_list.append(FPT) return feature_list, FPT_list

参考文章:

基于物理信息神经网络PINN的滚动轴承退化趋势分析(Pytorch) - 哥廷根数学学派的文章
https://zhuanlan.zhihu.com/p/1970778797109379648

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

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

基于小波核卷积与动态路由胶囊网络的旋转机械故障诊断方法(Pytorch)

首先从西储大学轴承数据库中加载三种健康状态的振动信号数据(正常、滚珠故障、内圈故障),对原始长信号进行分割、标准化预处理,并按比例划分为训练集和测试集。然后构建小波胶囊网络模型,该模型的核心是小波核卷积层&a…

作者头像 李华
网站建设 2026/4/15 4:26:11

金融数据接口实战:从入门到精通

金融数据接口实战:从入门到精通 【免费下载链接】akshare 项目地址: https://gitcode.com/gh_mirrors/aks/akshare 核心价值:AKShare能帮你解决哪些问题? Python金融数据获取的效率直接决定了量化投资研究的生产力。AKShare作为国内…

作者头像 李华
网站建设 2026/4/13 16:09:27

麦橘超然与Stable Diffusion对比:轻量设备下的推理速度实测

麦橘超然与Stable Diffusion对比:轻量设备下的推理速度实测 在显存有限的消费级显卡上跑大模型,常常像在窄巷里开卡车——不是不行,但得反复倒车、小心翼翼。最近不少朋友问:同样生成一张图,麦橘超然(Maji…

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

WuliArt Qwen-Image Turbo代码实例:RESTful API封装+JWT鉴权+限流保护

WuliArt Qwen-Image Turbo代码实例:RESTful API封装JWT鉴权限流保护 1. 为什么需要一个安全、可控的文生图服务接口 你刚在本地跑通了WuliArt Qwen-Image Turbo,输入一句“Cyberpunk street, neon lights, rain...”,几秒后一张10241024的赛博…

作者头像 李华
网站建设 2026/4/10 22:02:56

实战LeetCode刷题:VibeThinker-1.5B帮你自动生成代码

实战LeetCode刷题:VibeThinker-1.5B帮你自动生成代码 你有没有过这样的经历:打开LeetCode,盯着一道中等难度的动态规划题看了二十分钟,草稿纸上画满了状态转移图,却迟迟敲不出第一行dp [...]?或者刚写完一…

作者头像 李华
网站建设 2026/4/14 2:04:15

法律咨询录音分析,Fun-ASR辅助案件信息提取

法律咨询录音分析,Fun-ASR辅助案件信息提取 在律师事务所、法律援助中心和企业法务部门的日常工作中,一场30分钟的当事人面谈、一次1小时的调解录音、一段2小时的庭审旁听记录,往往蕴含着关键事实、争议焦点与证据线索。但人工逐字整理耗时极…

作者头像 李华