基于CNN-LSTM的轴承剩余寿命预测,MATLAB代码

CNN-LSTM 预测轴承剩余寿命:MATLAB 端到端实现与可视化全解析

关键词:剩余寿命预测(RUL)、CNN-LSTM、1D 卷积、LSTM 门控、预测性维护、MATLAB R2024b

先说结论,免得你看到一半再翻回来:CNN-LSTM 端到端跑通了,测试集输出 RMSE 0.0887 、MAE 0.0711 、R² 0.9056。

先把事情从头上捋清楚:这套数据是什么、模型怎么搭、每一步在算什么、跑出来什么样。


一、研究背景:为什么要预测轴承的"剩余寿命"

轴承是旋转机械里最不起眼、也最要命的部件。电机、风机、机床、轨道交通的轮轴,哪一样离了轴承都转不起来。

它坏起来又不动声色:先是内圈滚道上一点极微小的剥落,振动信号里多了一个几乎看不见的冲击,然后缺口慢慢扩大,等真到了肉眼可见、耳朵可闻的程度,往往离突发故障就不远了。

所以工业界真正想要的能力不是"识别它现在有没有坏"(那是故障诊断),而是在它还正常的时候,就回答一句:"它大概还能撑多久。" 这就是剩余寿命预测,Remaining Useful Life,简称 RUL。

传统做法靠物理模型和统计模型,门槛高、通用性差。深度学习起来之后,思路变了:不用去猜轴承内部到底发生了什么,直接把振动信号当数据,让网络自己学"退化规律"。

而这类数据的本质是时序 ------故障是随时间一点点累积的。所以处理时序的 LSTM 天然适合。但同时,一段振动信号里又藏着丰富的局部模式(冲击、谐波、边带),这又是卷积 CNN 的强项。把两者拼起来的 CNN-LSTM,就是想两头都占。

这次要做的,就是把 CNN 特征提取和 LSTM 时序建模拼成一个端到端的 CNN-LSTM,输入输出维度保持不变,只动模型结构。


二、主要功能:这套代码到底干了什么

一句话概括:读入轴承振动特征数据 → 训练一个 CNN-LSTM 回归模型 → 输出连续递减的 RUL 曲线 → 给出指标和一堆图。

具体拆开是这么几块:

  • 数据加载与划分 :从 feature_reconstructedData.mat 里取出 7 个轴承的特征,Bearing 1--2 作训练集,Bearing 3 作测试集。
  • 标签构建:剩余寿命不用真实运行时长,而是按"从 1 到 0 线性递减"的方式归一化,1 代表全新,0 代表彻底失效。
  • 数据预处理:z-score 标准化(用训练集均值方差,测试集复用同一套参数),NaN 归零。
  • 模型:CNN 特征提取模块 + LSTM 时序建模模块 + 全连接回归头。
  • 输出 :RMSE / MAE / R² 三项指标,外加 7 张可视化图和一份 .mat 结果文件。

输入是 26 维、输出是 1 维标量------这是整套流程定死的一条硬约束:不许因为换模型就改数据流的形状。


三、数据与技术路线

先看数据长什么样。这是整套系统能跑通的地基。

特征是怎么来的

原始振动信号是采样得到的一维时间序列。直接喂给网络太"重",所以先做特征工程,从每段信号里抽出 26 个特征:

类型 数量 具体特征
时域特征 14 均值、标准差、均方根 RMS、方差、峰值、峰峰值、偏度、峭度、波形因子、峰值因子、脉冲因子、裕度因子、能量、绝对均值
频域特征 12 频谱能量、主频率、主频幅值、频率中心、均方频率、均方根频率、频率方差、频率标准差、前 5 峰值平均幅值、频谱峭度、频谱偏度、频谱平坦度

注意这 14 个时域特征里,峭度和脉冲因子、裕度因子这一类,恰恰是轴承冲击型故障最敏感的量------这是特征工程里最有分量的几个。

标签怎么定

每个轴承从开始运行到失效,健康度一路下降。代码用一条直线来近似这条退化曲线:第一个样本标签是 1,最后一个样本标签是 0,中间线性插值。

这是一种常见的简化假设(IEEE PHM 数据挑战赛里也常这么处理)。它不完美,但胜在确定、可复现,适合做方法演示。

技术路线串起来

复制代码
原始振动信号
   │  特征提取(14时域 + 12频域 = 26维)
   ▼
特征矩阵(N × 26)
   │  z-score 标准化
   ▼
标准化特征
   │  重排为 序列(每样本 1 通道 × 26 时间步)
   ▼
1D-CNN 特征提取  →  最大池化  →  1D-CNN  →  最大池化
   │  (局部模式)
   ▼
LSTM 时序建模(取最后一步输出)
   │  (退化趋势)
   ▼
全连接 + 回归输出
   │
   ▼
RUL 预测值(0 ~ 1)

重点在那句"重排为序列"。这是 CNN-LSTM 能不能接住这 26 维数据的关键:把 26 个特征当作 26 个时间步、每个时间步 1 个通道,这样 1D 卷积就能沿着"特征轴"滑窗,LSTM 就能沿同一根轴做时序建模。


四、算法步骤

把整套流程压成 6 步,照着能复现:

  1. 加载数据 :load('feature_reconstructedData.mat'),取出 7 个轴承的 cell 数据。
  2. 划分与组装:Bearing 1--2 拼接成训练集(约 3670 样本),Bearing 3 单独作测试集(约 2373 样本);同时取出对应标签列。
  3. 标准化 :用训练集的均值和标准差做 z-score,测试集复用;isnan 的位置置 0(防某个特征方差为 0 除出 NaN)。
  4. 构建网络:按上面的结构搭 CNN-LSTM,把每个 26 维样本重排成 1×26 的序列。
  5. 训练:Adam 优化器,150 个 epoch,留 20% 作验证集,取验证损失最小的那版网络。
  6. 预测与评估 :对测试集 predict,算 RMSE / MAE / R²,画图、存结果。

其中第 4 步是整套流程的核心:把 26 维特征重排成序列,CNN 和 LSTM 才接得住。


五、公式原理

不讲玄的,把每一层在算什么写清楚。

1D 卷积(特征提取模块)

沿时间/特征轴滑窗,每个滤波器学一种局部模式:

复制代码
y[t] = Σ_{i=0}^{K-1} x[t+i] · w[i] + b

K 是卷积核大小(这里取 3),w、b 是可学习参数。CNN 的意义在于:先用局部视野捕捉"冲击、谐波"这类短程特征,再越堆越高、视野越来越大。

ReLU 激活

复制代码
f(x) = max(0, x)

引入非线性,同时缓解梯度消失。

最大池化

对窗口内取最大值,作用是降采样 + 让特征对微小平移更鲁棒,同时把序列长度压下来,喂给后面的 LSTM 时更轻。

LSTM 门控(时序建模模块)

LSTM 靠三个门控制信息取舍,这是它记住"长期退化趋势"的机制:

复制代码
遗忘门    f_t = σ(W_f · [h_{t-1}, x_t] + b_f)
输入门    i_t = σ(W_i · [h_{t-1}, x_t] + b_i)
候选状态  g_t = tanh(W_g · [h_{t-1}, x_t] + b_g)
细胞状态  c_t = f_t ⊙ c_{t-1} + i_t ⊙ g_t
输出门    o_t = σ(W_o · [h_{t-1}, x_t] + b_o)
隐藏状态  h_t = o_t ⊙ tanh(c_t)

σ 是 sigmoid,⊙ 是逐元素相乘。这里取 OutputMode='last',只用序列最后一步的隐藏状态去做回归------也就是让网络"看完整个序列后给出一个判断"。

损失函数

回归用均方误差:

复制代码
MSE = (1/n) · Σ (y_i - ŷ_i)²

评估指标

复制代码
RMSE = sqrt( (1/n) Σ (y_i - ŷ_i)² )     # 与标签同量纲,越小越好
MAE  = (1/n) Σ |y_i - ŷ_i|              # 对异常值不敏感
R²   = 1 - Σ (y_i - ŷ_i)² / Σ (y_i - ȳ)²  # 越接近 1 越好

六、模型与参数设定

网络结构一张表说清楚:

层 配置
sequenceInput 1 通道,MinLength = 26
1D 卷积 1 核长 3,32 个滤波器,padding=same
ReLU ---
最大池化 1 池化窗口 2,步长 2
1D 卷积 2 核长 3,64 个滤波器,padding=same
ReLU ---
最大池化 2 池化窗口 2,步长 2
LSTM 100 个隐藏单元,OutputMode=last
Dropout 0.2
全连接 1 50 神经元 + ReLU
Dropout 0.2
全连接 2 25 神经元 + ReLU
全连接 3 1 神经元(输出 RUL)
regressionLayer MSE 损失

训练超参:

参数 取值
优化器 Adam
初始学习率 0.005
学习率衰减 piecewise,每 50 epoch 减半
最大轮数 150
MiniBatchSize 64
验证集比例 20%
梯度阈值 1
L2 正则 0.001
输出网络 验证损失最优的一版
Shuffle 每 epoch 打乱

一句话总结这组参数:学习率给得不算小但有衰减兜底,L2 阈值和梯度裁剪都在压过拟合,最后取验证最优推出去。


七、运行环境

  • 软件 :MATLAB R2024b(版本号 24.2.0)
  • 工具箱 :Deep Learning Toolbox(用到 trainNetwork / predict / convolution1dLayer 等)
  • 计算 :单 CPU 训练,全程约 218 秒
  • 数据 :feature_reconstructedData.mat,含 7 个轴承的特征与标签

一个踩坑点,值得单独说:在 R2024b 里,convolution1dLayer 和 maxPooling1dLayer 已经原生支持序列输入 ,所以这次实现不需要 sequenceFoldingLayer / sequenceUnfoldingLayer 那套"先折叠再展开"的老做法。如果你照着旧教程套 fold 层,在 R2024b 训练阶段会直接报错。


八、实验结果

实测指标:

指标 数值
RMSE 0.0887
MAE 0.0711
R² 0.9056
训练时间 ~218 s

预测效果和新增的可视化,一图看全:

除了基础的预测对比,这次还补了 5 类更"能看出东西"的图:

  • 二维特征分布:PCA 主成分降维,看训练集和测试集在特征空间里是否同分布。
  • 三维时序特征轨迹:取 RMS、峭度、频谱峭度三个特征画三维退化轨迹,颜色映射 RUL,直观看到"越接近失效,点在空间里越往外漂"。
  • 模型特征热力图:把第一层 1D 卷积的权重可视化,看网络到底学到了哪些局部模式。
  • 训练损失细分:把训练损失按迭代进度切成早/中/晚三段,叠加验证损失,看收敛节奏。

九、应用场景

这套 CNN-LSTM 的 RUL 预测思路,落地场景其实很广:

  • 工业预测性维护:风电机组、电机、泵、压缩机等旋转设备的轴承健康监测,从"坏了再修"转向"快坏了提前修"。
  • 轨道交通:轮轴轴承的在线监测,关系到行车安全。
  • 机床与产线:主轴轴承状态跟踪,配合排产做计划性更换,减少非计划停机。
  • PHM 故障预测:作为端到端深度学习方法的一个可对比基线,验证"特征工程 + 深度学习"这条路。

把标签换成别的连续退化量(刀具磨损、电池健康、钢丝绳直径),这套"CNN 提特征 + LSTM 建模 + 回归输出"的框架可以整体平移复用。


结语

跑通一套 CNN-LSTM 不难------难的是在"不动数据管线"的约束下,把一个 26 维扁平特征塞进去还不改输出形状,还能跑出 R² 0.9 的成绩。

模型是工具,数据形状才是那个真正的变量。

*:主轴轴承状态跟踪,配合排产做计划性更换,减少非计划停机。

  • PHM 故障预测:作为端到端深度学习方法的一个可对比基线,验证"特征工程 + 深度学习"这条路。

把标签换成别的连续退化量(刀具磨损、电池健康、钢丝绳直径),这套"CNN 提特征 + LSTM 建模 + 回归输出"的框架可以整体平移复用。


结语

跑通一套 CNN-LSTM 不难------难的是在"不动数据管线"的约束下,把一个 26 维扁平特征塞进去还不改输出形状,还能跑出 R² 0.9 的成绩。

模型是工具,数据形状才是那个真正的变量。

本文代码与结果基于 MATLAB R2024b 完整运行验证,指标与图表均由程序直接输出,可复现。

相关推荐
牧羊人.3335 小时前
动手学深度学习 07|Resnet网络与迁移学习
网络·人工智能·深度学习·神经网络·算法·cnn·迁移学习
菜鸟~noob2331 天前
【电子战】 第26篇:大气衰减——氧气与水汽吸收【含matlab代码】
开发语言·matlab
菜鸟~noob2331 天前
【电子战】第25篇:自由空间、双射线与菲涅尔区【含matlab代码】
开发语言·算法·matlab
一只废狗狗狗狗狗狗狗狗狗1 天前
Network架构1——卷积神经网络CNN
人工智能·算法·cnn
田里的水稻2 天前
IL_策略训练---CNN/1D神经网络种类三
人工智能·神经网络·机器学习·cnn·机器人·迁移学习
数智工坊2 天前
视觉SLAM第4讲|李群与李代数:位姿优化的数学基石
人工智能·深度学习·线性代数·cnn
Raspberry_Pi_官方账号2 天前
观察、理解与响应:Raspberry Pi 5 上的低功耗 CNN、VLM 和 SLM 工作负载
人工智能·神经网络·cnn·树莓派·raspberrypi
Evand J2 天前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
梦帮科技2 天前
端侧编译原理:TVM / MLIR 计算图模式匹配、算子融合与显存生命周期复用
网络·人工智能·深度学习·神经网络·自然语言处理·cnn·mlir