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

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

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.xdnf.cn/news/15817.html

相关文章:

  • 数据分析综合应用 30分钟精通计划
  • 动态规划——数位DP经典题目
  • 量子计算与AI融合的技术突破与实践路径
  • 6. 装饰器模式
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘pillow’问题
  • 小架构step系列19:请求和响应
  • Java行为型模式---中介者模式
  • [故障诊断方向]SNNs:针对小样本轴承故障诊断的孪生神经网络模型
  • Selenium 中 findElement 方法全解析:定位网页元素的 7 种方式
  • BeanFactory 和 FactoryBean 的区别
  • Java行为型模式---访问者模式
  • 用Dynamic chunk去干掉tokenizer?
  • 从零入门:云迁移原理详解与华为Rainbow实战指南
  • 数据结构 队列
  • 信息系统风险的安全技术防范思路
  • 教育科技内容平台的破局之路:从组织困境到 UGC 生态的构建
  • CCF编程能力等级认证GESP—C++7级—20250628
  • [FFmpeg] AVFormatContext、AVInputFormat、AVOutputFormat | libavformat
  • 为任意Java程序配置Socks5与HTTP代理的方法
  • 2025年水安备考:水利水电安全员C类考试题
  • 基于Scrapy-Redis的分布式爬虫系统:工业级实现与深度优化
  • nodejs值process.kill
  • CCF编程能力等级认证GESP—C++8级—20250628
  • 信息学奥赛一本通 1579:【例 5】皇宫看守 | 洛谷 P2458 [SDOI2006] 保安站岗
  • 教你如何借助AI精读文献
  • MC0463四大名著-水浒签到
  • 在Vscode中使用Kimi K2模型:实践指南,三分钟生成个小游戏
  • 网络大提速,RDMA,IB,iWrap
  • 深度学习中的模型剪枝工具Torch-Pruning的使用
  • 如何解决AttributeError: ‘NoneType‘ object has no attribute问题