CWT-CNN-GRU基于连续小波变换和卷积神经网络-门控循环单元故障诊断MATLAB代码


该代码实现了一个基于连续小波变换(CWT)和卷积神经网络-门控循环单元(CNN-GRU)的滚动轴承故障诊断系统。以下从研究背景、主要功能、算法步骤、技术路线、公式原理、参数设定、运行环境和应用场景八个方面进行简述。


1. 研究背景

滚动轴承是旋转机械的核心部件,其健康状态直接影响设备运行安全。本代码使用美国凯斯西储大学(CWRU)轴承数据中心公开数据集,该数据集包含正常状态、内圈故障、滚动体故障、外圈故障三种故障类型,每种故障有0.007、0.014、0.021英寸三种损伤直径,加上正常状态共10种工况,转速为1797 r/min。通过分析驱动端加速度振动信号,实现故障类型的自动识别。

2. 主要功能

  • 从原始振动信号中截取等长样本,并为每个样本添加类别标签。
  • 对每个样本进行连续小波变换,生成时频图并保存为图像。
  • 将时频图统一缩放至64×64像素,并进行归一化处理。
  • 构建并训练一个CNN-GRU混合神经网络,对时频图进行分类。
  • 评估模型在测试集上的准确率,绘制混淆矩阵和预测结果散点图。
  • 利用t-SNE对网络提取的特征进行降维可视化,展示特征分布。

3. 算法步骤

步骤1:数据预处理

  • 加载10个.mat文件(对应10种工况),每个文件包含一个振动信号序列(如X097_DE_time)。
  • 使用长度为1000的滑动窗口,从每个信号中截取100个样本,每个样本2048个点。
  • 将10类样本纵向堆叠,并添加标签列(1~10),保存为data_total_1797.mat

步骤2:时频图生成

  • 设置采样频率fs=12000 Hz,选择cmor3-3复Morlet小波。
  • 对每个样本进行连续小波变换,得到256个尺度下的时频系数。
  • 将系数取模后以图像形式显示,并保存为JPG文件。

步骤3:图像预处理

  • 读取所有JPG图像,按文件名中的数字顺序排序。
  • 将图像统一缩放至64×64像素,并归一化到[0,1]区间。
  • 将图像数据与对应标签存入cell数组,保存为resizeimg.mat

步骤4:数据集划分与网络构建

  • 加载resizeimg.mat,每个类别取前70个样本作为训练集,后30个作为测试集。
  • 构建CNN-GRU网络:
    • 输入层:64×64×3
    • 卷积层1:3×3卷积核,10个滤波器,批归一化,ReLU
    • 最大池化层1:2×2,步长2,Dropout 0.2
    • 卷积层2:5×5卷积核,24个滤波器,批归一化,ReLU
    • 最大池化层2:2×1,步长2,Dropout 0.1
    • 展平层
    • GRU层:30个隐藏单元,输出最后一个时间步
    • 全连接层1:64,Dropout 0.1
    • 全连接层2:32,Dropout 0.1
    • 全连接层3:10,Softmax,分类层
  • 设置训练选项:Adam优化器,30轮,初始学习率0.001,L2正则化0.0001,梯度裁剪阈值1。
  • 训练网络,计算测试准确率,绘制混淆矩阵和预测散点图。

步骤5:特征可视化

  • 提取训练集在输入层和最后一个全连接层的激活值。
  • 使用t-SNE降维至2维,并用散点图展示不同类别的分布。

4. 技术路线

采用"信号处理 + 深度学习"融合路线:
振动信号 → 连续小波变换(时频图) → 图像预处理 → CNN提取空间特征 → GRU捕捉时序依赖 → 全连接分类 → 故障类型识别

5. 公式原理

  • 连续小波变换(CWT)
    W(a,b) = \\int x(t) \\psi\^\**{a,b}(t) dt,其中 \\psi* {a,b}(t) = \\frac{1}{\\sqrt{a}} \\psi\\left(\\frac{t-b}{a}\\right)
    本代码采用复Morlet小波(cmor3-3),中心频率fc≈3 Hz。尺度序列长度totalscal=256,实际尺度scal由中心频率和尺度长度计算得到:
    cparam=2∗fc∗totalscalcparam = 2 * fc * totalscalcparam=2∗fc∗totalscal; a=totalscal:−1:1a = totalscal:-1:1a=totalscal:−1:1; scal=cparam./ascal = cparam ./ ascal=cparam./a;
  • GRU单元
    更新门 zt=σ(Wz⋅[ht−1,xt])z_t = \sigma(W_z \cdot [h_{t-1}, x_t])zt=σ(Wz⋅[ht−1,xt])
    重置门 rt=σ(Wr⋅[ht−1,xt])r_t = \sigma(W_r \cdot [h_{t-1}, x_t])rt=σ(Wr⋅[ht−1,xt])
    候选隐藏状态 h~t=tanh⁡(W⋅[rt⊙ht−1,xt])\tilde{h}t = \tanh(W \cdot [r_t \odot h{t-1}, x_t])h~t=tanh(W⋅[rt⊙ht−1,xt])
    最终输出 ht=(1−zt)⊙ht−1+zt⊙h~th_t = (1-z_t) \odot h_{t-1} + z_t \odot \tilde{h}_tht=(1−zt)⊙ht−1+zt⊙h~t
  • 卷积层
    输出特征图 = 激活( 卷积(输入) + 偏置 )
  • t-SNE
    一种非线性降维算法,通过最小化高维空间中数据点对之间的条件概率与低维空间中对应概率之间的KL散度,将高维数据映射到2/3维可视化空间。

6. 参数设定

参数 说明
采样频率 fs 12000 Hz 信号采样率
小波函数 cmor3-3 复Morlet小波,带宽3,中心频率3
尺度长度 totalscal 256 CWT尺度个数
样本长度 2048 每个样本的时域点数
滑动窗口 w 1000 截取样本时的步长
每类样本数 100 每类工况截取100个样本
训练/测试样本数 70 / 30 每类前70训练,后30测试
图像尺寸 64×64×3 缩放后的时频图尺寸
卷积核1 3×3×10 第一层卷积
卷积核2 5×5×24 第二层卷积
GRU单元数 30 GRU层隐藏单元数
全连接层 64, 32, 10 三层全连接
Dropout率 0.2, 0.1 防止过拟合
训练轮数 MaxEpochs 30
初始学习率 0.001
L2正则化 0.0001
梯度裁剪阈值 1 防止梯度爆炸

7. 运行环境

  • MATLAB版本:建议R2020b及以上

8. 应用场景

本系统适用于工业旋转机械的智能故障诊断与状态监测,尤其可用于:

  • 风力发电机、压缩机、电机等设备的轴承故障预警。
  • 生产线的自动化质量检测。
  • 基于振动信号的预测性维护系统,减少非计划停机。
  • 科研教学中的深度学习与信号处理融合实验。

完整代码私信回复CWT-CNN-GRU基于连续小波变换和卷积神经网络-门控循环单元故障诊断MATLAB代码

相关推荐
freexyn2 小时前
Matlab速成笔记七十三:三角函数运算的用法
开发语言·笔记·matlab
划水的code搬运工小李3 小时前
Origin技巧(五)连接matlab控制台
开发语言·matlab
shy^-^cky4 小时前
卷积神经网络(CNN)客观题(含答案+解析)
人工智能·神经网络·cnn
no_work13 小时前
基于python预测含MLP决策树LGBM随机森林XGBoost等
python·决策树·随机森林·cnn
陈天伟教授15 小时前
人工智能应用- 机器做梦:02.回顾卷积神经网络
人工智能·神经网络·cnn
SugarFreeOixi17 小时前
Matlab多个图窗重叠问题解决,平铺函数TileFigs
开发语言·matlab
陈天伟教授20 小时前
人工智能应用- 机器做梦:03.回顾卷积神经网络
人工智能·神经网络·cnn
kaikaile19951 天前
基于PCNN和NSCT的图像融合MATLAB实现
开发语言·图像处理·算法·matlab