当前位置: 首页 > news >正文

[故障诊断方向]基于二维时频图像和数据增强技术的轴承故障诊断模型

1. ​引言(Introduction)​

  • 背景与问题​:滚动轴承是旋转机械的关键部件,约30%的机械故障源于轴承失效(如疲劳点蚀、塑性变形和热变化)。传统故障诊断方法(如基于振动检测或解析模型)存在局限性:模型复杂度高、泛化能力差,且数据驱动方法(如SVM或ELM)在特征提取深度不足。深度学习方法(如CNN)虽有效,但在实际应用中面临标记故障数据稀缺的挑战,导致模型过拟合。
  • 现有解决方案​:数据增强技术(如SMOTE或基于GAN的方法)被用于扩充样本,但传统方法(如复制样本或一维GAN)易导致数据分布边缘问题或特征丢失。本文旨在解决两个关键问题:(a)一维信号特征提取不足;(b)生成数据质量低和训练不稳定。
  • 贡献​:
    • 使用连续小波变换(CWT)将一维振动信号转换为二维时频图像,充分利用时频域信息。
    • 提出基于QP-Div的GANs-QP数据增强方法,避免梯度消失问题并自动满足Lipschitz约束。
    • 集成数据增强与CNN,构建端到端故障诊断模型,在样本不足条件下提升精度。

2. ​理论背景(Theoretical Background)​

2.1 ​连续小波变换(CWT)​
  • 原理​:CWT将一维时间序列信号 x(t) 转换为二维时频图像,通过小波函数 ψ(t) 的尺度和位移变换捕捉信号局部特征:

 其中 a 为尺度参数(关联频率),τ 为位移参数(关联时间)。频域形式为:

 

  • CWT能有效处理非平稳信号,在故障诊断中提取判别性特征。
  • 应用优势​:相比一维信号,时频图像包含更丰富的结构信息(如图5所示),适合作为CNN输入。

 图5

2.2 ​生成对抗网络(GANs)基础
  • GANs框架​:由生成器(Generator)和判别器(Discriminator)组成对抗训练(图1)。目标是最小化真实数据分布 p(x) 与生成数据分布 q(x) 的差异,常用JS散度:

 但JS散度在分布无重叠时梯度消失(如Wasserstein距离虽稳定但需额外约束)。

 

图1 

2.3 ​QP-Div与GANs-QP
  • QP-Div(Quadratic Potential Divergence)​​:一种新型概率散度,直接在双空间定义

 

3. ​提出的方法(Proposed Method)​

  • 整体框架​:如图2所示,方法分为三步:
    1. 数据预处理​:原始一维振动信号通过CWT转换为128×128像素的二维时频图像(图5)。
    2. 数据增强​:使用CWT-GANs-QP生成新样本。生成器和判别器网络结构见表2(如生成器使用转置卷积层,判别器使用卷积层)。
    3. 故障诊断​:结合原始和生成样本训练2D-CNN(结构见表3),输出故障类别。

 

图2 

  • 关键创新​:
    • CWT转换​:增强特征表达力,解决一维信号非平稳性问题。
    • CWT-GANs-QP​:直接处理二维图像,生成高质量样本(如MMD和SSIM指标优于传统方法)。
    • 端到端训练​:CNN结构包括卷积层(C1-C3)、池化层(P1-P3)和全连接层(FC1),使用Softmax分类。

4. ​实验与结果(Experiments and Discussion)​

4.1 ​案例一:CWRU标准数据集
  • 数据集​:包含10类轴承状态(正常、内圈/外圈/滚动体故障,缺陷直径0.007/0.014/0.021英寸),每类2400个样本(400点/样本)。训练集80%(19200图像),测试集20%(4800图像)。

 

图4 

  • 小样本诊断性能​:训练样本减少时,CNN准确率显著下降(表4)。如样本数从19200减至100时,准确率从100%降至79.06%,证实数据不足导致过拟合。
  • 数据增强质量评估​:
    • 生成数据质量​:使用MMD、EMD、KL散度和SSIM指标(表5)。训练样本≥1200时,CWT-GANs-QP生成数据质量高(SSIM >0.89);样本<600时质量劣化(图6显示图像模糊)。

 

 

图6 

方法对比​:CWT-GANs-QP在MMD、SSIM等指标上优于DCGANs、WGANs和WGANs-GP(表6)。图7显示DCGANs有棋盘伪影,WGANs改进但仍有约束问题,而CWT-GANs-QP图像更接近真实。 

 图7

  • 诊断精度提升​:
    • 数据增强效果​:加入生成样本后,准确率显著提高(表7)。如1200真实样本+1200生成样本时,准确率从99.12%升至99.29%。
    • 方法对比​:CWT-GANs-QP-CNN优于其他数据增强方法(表8)。如1200样本+1200生成样本时,准确率99.29%,高于DCGANs(98.66%)和WGANs(99.11%)。
  • 其他图像方法对比​:与Gram角场(GAF)对比(图8),CWT时频图像特征更丰富(表9)。GAF-GANs-QP准确率较低(98.25% vs. 99.29%),证明CWT更优。

 

 

图8 

 

案例二:实验室真实数据集
  • 数据集​:使用SQI故障模拟器采集5类状态(正常、内圈/外圈/滚动体/复合故障),每类200样本。训练集80%(800图像),测试集20%(200图像)。

 

  • 结果​:
    • 数据增强效果​:生成800样本时,诊断准确率从93.75%提升至99.35%(表10)。过多生成样本(>800)会因误差导致性能下降。
    • 分类性能​:CWT-GANs-QP的F1均值(99.33%)显著高于DCGANs(96.01%)和WGANs-GP(98.28%)(表11)。
    • 泛化性​:在SVM、SAE等分类器上,数据增强均提升F1均值≥4.67%(表12),证明方法鲁棒。

 

5.核心代码实现(基于PyTorch框架) 

1. CWT时频图像转换模块
import numpy as np
import pywt
import torch
import torch.nn as nn
from torchvision.transforms import Resizeclass CWTTransform:def __init__(self, scales=128, wavelet='morl'):"""连续小波变换(CWT)将一维信号转为时频图像:param scales: 尺度参数数量(决定频率分辨率):param wavelet: 小波类型,默认为Morlet小波"""self.scales = scalesself.wavelet = waveletself.resize = Resize((128, 128))  # 统一输出尺寸def __call__(self, signal):""":param signal: 一维振动信号 (n_samples, signal_length):return: 时频图像 (n_samples, 1, 128, 128)"""# 生成尺度序列(根据信号长度自适应)max_scale = len(signal[0]) // 2scale_range = np.arange(1, max_scale, max_scale // self.scales)cwt_images = []for s in signal:# 计算CWT系数coef, _ = pywt.cwt(s, scale_range, self.wavelet)# 取绝对值并归一化coef_abs = np.abs(coef)coef_norm = (coef_abs - coef_abs.min()) / (coef_abs.max() - coef_abs.min())# 转换为PyTorch张量并调整尺寸tensor = torch.from_numpy(coef_norm).float().unsqueeze(0)  # 添加通道维度resized = self.resize(tensor)cwt_images.append(resized)return torch.stack(cwt_images, dim=0)  # (n_samples, 1, 128, 128)
2. GANs-QP数据增强模块 
class Generator(nn.Module):"""生成器网络(对应论文表2)"""def __init__(self, latent_dim=100, output_channels=1):super().__init__()self.main = nn.Sequential(# 输入: latent_dim维噪声nn.Linear(latent_dim, 1024),nn.BatchNorm1d(1024),nn.ReLU(inplace=True),# 转置卷积上采样nn.ConvTranspose2d(1024, 512, kernel_size=5, stride=2, padding=2, output_padding=1),nn.BatchNorm2d(512),nn.ReLU(inplace=True),nn.ConvTranspose2d(512, 256, kernel_size=5, stride=2, padding=2, output_padding=1),nn.BatchNorm2d(256),nn.ReLU(inplace=True),nn.ConvTranspose2d(256, 128, kernel_size=5, stride=2, padding=2, output_padding=1),nn.BatchNorm2d(128),nn.ReLU(inplace=True),nn.ConvTranspose2d(128, 64, kernel_size=5, stride=2, padding=2, output_padding=1),nn.ReLU(inplace=True),nn.ConvTranspose2d(64, output_channels, kernel_size=5, stride=2, padding=2, output_padding=1),nn.Tanh())def forward(self, z):z = z.view(-1, 1024, 1, 1)  # 调整形状以适应转置卷积return self.main(z)class Discriminator(nn.Module):"""判别器网络(对应论文表2)"""def __init__(self, input_channels=1):super().__init__()self.main = nn.Sequential(# 输入: input_channels x 128 x 128nn.Conv2d(input_channels, 64, kernel_size=5, stride=2, padding=2),nn.LeakyReLU(0.2, inplace=True),nn.Conv2d(64, 128, kernel_size=5, stride=2, padding=2),nn.BatchNorm2d(128),nn.LeakyReLU(0.2, inplace=True),nn.Conv2d(128, 256, kernel_size=5, stride=2, padding=2),nn.BatchNorm2d(256),nn.LeakyReLU(0.2, inplace=True),nn.Conv2d(256, 512, kernel_size=5, stride=2, padding=2),nn.BatchNorm2d(512),nn.LeakyReLU(0.2, inplace=True),nn.Conv2d(512, 1024, kernel_size=5, stride=2, padding=2),nn.LeakyReLU(0.2, inplace=True),nn.Flatten(),nn.Linear(1024 * 4 * 4, 1))def forward(self, x):return self.main(x)def qp_div_loss(D, real_imgs, fake_imgs, lambda_param=10.0):"""QP-Div损失函数(论文公式10-12):param D: 判别器实例:param real_imgs: 真实图像 (batch, C, H, W):param fake_imgs: 生成图像 (batch, C, H, W):param lambda_param: 公式中的λ:return: (判别器损失, 生成器损失)"""# 判别器输出D_real = D(real_imgs)D_fake = D(fake_imgs)# 计算距离(论文d(x_r,x_f))dist = torch.norm(real_imgs - fake_imgs, p=2, dim=(1,2,3)).view(-1, 1)# 判别器损失(公式10)T_diff = D_real - D_fakeD_loss = T_diff - (T_diff**2) / (2 * lambda_param * dist)D_loss = -D_loss.mean()  # 最大化目标# 生成器损失(公式11)G_loss = T_diff.mean()return D_loss, G_loss
3. 2D-CNN故障诊断模块 
class BearingFaultClassifier(nn.Module):"""轴承故障分类CNN(对应论文表3)"""def __init__(self, num_classes=10):super().__init__()self.features = nn.Sequential(# C1: 128x128输入nn.Conv2d(1, 32, kernel_size=3, padding=1),nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2, stride=2),  # 输出: 64x64# C2nn.Conv2d(32, 64, kernel_size=3, padding=1),nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2, stride=2),  # 输出: 32x32# C3nn.Conv2d(64, 128, kernel_size=3, padding=1),nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2, stride=2)   # 输出: 16x16)self.classifier = nn.Sequential(nn.Flatten(),nn.Linear(128 * 16 * 16, 512),  # FC1nn.ReLU(inplace=True),nn.Dropout(0.5),nn.Linear(512, num_classes)     # 输出层)def forward(self, x):x = self.features(x)return self.classifier(x)

6. ​结论(Conclusion)​

  • 主要贡献​:提出的CWT-GANs-QP-CNN方法有效解决了滚动轴承故障诊断中的数据不足问题。CWT时频图像增强特征表达,GANs-QP生成高质量样本,CNN实现高精度分类(标准数据集准确率>99%,真实数据集>99.35%)。
  • 优势​:
    • 生成数据质量高(SSIM >0.93),优于传统GANs变体。
    • 在样本稀缺条件下提升诊断性能(如1200样本时准确率提升0.17–5.57%)。
    • 方法泛化性强,适用于不同分类器和数据集。
http://www.dtcms.com/a/287864.html

相关文章:

  • 家庭KTV v1.1.9 | 曲库丰富,无限制免费K歌
  • Kotlin main函数
  • RabbitMQ—事务与消息分发
  • JUC并发包CountDownLatch减法计数器的使用实例(多线程)
  • Git 完全手册:从入门到团队协作实战(2)
  • 万字解析LVS集群
  • Pandas 30分钟
  • Mybatis:注解完成增删改查
  • steam游戏搬砖项目超完整版实操分享
  • 解惑LINQ中的SelectMany用法
  • 48Days-Day03 | 删除公共字符,两个链表的第一个公共结点,mari和shiny
  • CCF编程能力等级认证GESP—C++8级—20250628
  • 【EMC设计基础--信号环路分析、PCB设计规则】
  • 深入解析文件操作(上)- 二进制文件和文本文件,流的概念,文件的打开和关闭
  • Visual Studio Code(VSCode)中设置中文界面
  • 使用C#对象将WinRiver项目文件进行复杂的XML序列化和反序列化实例详解
  • STM32_Hal库学习ADC
  • XSS的反射型、DOM型、存储型漏洞
  • sqli-labs靶场通关笔记:第32-33关 宽字节注入
  • Go语言中的类型转换与类型推断解析
  • Spring AI硬核攻略:235个模块解析 + 6大场景实战
  • view和pure的区别
  • 智能合约代理与批量调用优化:最小代理与MultiCall的应用
  • Python趣味算法:百钱百鸡问题——双重循环优化与算法效率分析
  • 【Bluedroid】btif_av_sink_execute_service之服务器启用源码流程解析
  • Typecho博客Ajax评论功能实现全攻略
  • 我是怎么设计一个防重复提交机制的(库存出库场景)
  • 【C语言进阶】结构体
  • Windows原生环境配置Claude Code MCP(通过JSON)
  • 简单易懂,快表 详解