基于双路神经网络的滚动轴承故障诊断 融合了原始振动信号 和 二维信号时频图像 的多输入(多通道)故障诊断方法 单路和双路都可 时频图像算法可选小波变换,短时傅里叶变换,马尔可夫变迁场,格拉姆角场,S变换,递归图等 数据集可选凯斯西储大学,东南大学,江南大学等等 Pytorch和Tensorflow框架做的。 以下可视化结果适用小波和短时傅里叶变换,其它时频图像算法效果并没有这

在滚动轴承故障诊断领域,如何更精准、高效地识别故障一直是研究热点。今天咱就来聊聊基于双路神经网络,融合原始振动信号与二维信号时频图像的多输入故障诊断方法,并且用 Pytorch 和 Tensorflow 框架来实现。

一、数据准备

数据集咱可以选择凯斯西储大学、东南大学或者江南大学等公开的数据集。这些数据集里包含了不同工况下滚动轴承的振动数据,为我们的模型训练提供了丰富素材。

二、时频图像算法

时频图像算法有多种选择,像小波变换(Wavelet Transform)、短时傅里叶变换(Short - Time Fourier Transform, STFT)、马尔可夫变迁场、格拉姆角场、S 变换、递归图等等。不过可视化结果表明,小波变换和短时傅里叶变换效果相对较好。

1. 短时傅里叶变换代码示例(Python + Numpy)

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import stft

# 假设我们有一段振动信号数据
fs = 1000  # 采样频率
t = np.linspace(0, 1, fs, endpoint=False)
signal = np.sin(2 * np.pi * 50 * t) + np.sin(2 * np.pi * 120 * t)

f, t, Zxx = stft(signal, fs=fs, window='hann', nperseg=128, noverlap=120, nfft=256)
plt.pcolormesh(t, f, np.abs(Zxx), shading='gouraud')
plt.title('STFT Magnitude')
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()

代码分析

这段代码首先定义了采样频率 fs 和时间序列 t,生成了一个简单的混合正弦信号 signal。然后通过 scipy.signal 库中的 stft 函数进行短时傅里叶变换。window='hann' 指定了窗函数为汉宁窗,nperseg=128 表示每个段的长度,noverlap=120 表示段与段之间重叠的点数,nfft=256 表示傅里叶变换的点数。最后通过 plt.pcolormesh 将时频图绘制出来。

2. 小波变换代码示例(Python + PyWavelets)

import pywt
import numpy as np
import matplotlib.pyplot as plt

# 假设同样的振动信号
fs = 1000
t = np.linspace(0, 1, fs, endpoint=False)
signal = np.sin(2 * np.pi * 50 * t) + np.sin(2 * np.pi * 120 * t)

coeffs = pywt.wavedec(signal, 'db4', level=5)
approx = pywt.waverec(coeffs[:1], 'db4')
detail = pywt.waverec([None] + coeffs[1:], 'db4')

plt.figure(figsize=(12, 6))
plt.subplot(3, 1, 1)
plt.plot(t, signal)
plt.title('Original Signal')
plt.subplot(3, 1, 2)
plt.plot(t, approx)
plt.title('Approximation Coefficient')
plt.subplot(3, 1, 3)
plt.plot(t, detail)
plt.title('Detail Coefficient')
plt.tight_layout()
plt.show()

代码分析

这里使用 pywt 库进行小波变换。pywt.wavedec 函数对信号 signal 进行小波分解,'db4' 是选用的小波基函数,level=5 表示分解的层数。之后通过 pywt.waverec 函数分别重构出近似系数和细节系数,并绘图展示原始信号、近似系数和细节系数。

三、双路神经网络模型(以 Pytorch 为例)

import torch
import torch.nn as nn


class DualPathNet(nn.Module):
    def __init__(self):
        super(DualPathNet, self).__init__()
        # 原始振动信号路径的卷积层
        self.conv1_raw = nn.Conv1d(1, 16, kernel_size=5, padding=2)
        self.relu1_raw = nn.ReLU()
        self.pool1_raw = nn.MaxPool1d(kernel_size=2, stride=2)
        # 时频图像路径的卷积层
        self.conv1_img = nn.Conv2d(1, 16, kernel_size=5, padding=2)
        self.relu1_img = nn.ReLU()
        self.pool1_img = nn.MaxPool2d(kernel_size=2, stride=2)

        self.fc1 = nn.Linear(16 * 250 + 16 * 125 * 125, 128)
        self.relu_fc1 = nn.ReLU()
        self.fc2 = nn.Linear(128, num_classes)

    def forward(self, x_raw, x_img):
        out_raw = self.conv1_raw(x_raw)
        out_raw = self.relu1_raw(out_raw)
        out_raw = self.pool1_raw(out_raw)
        out_raw = out_raw.view(-1, 16 * 250)

        out_img = self.conv1_img(x_img)
        out_img = self.relu1_img(out_img)
        out_img = self.pool1_img(out_img)
        out_img = out_img.view(-1, 16 * 125 * 125)

        out = torch.cat((out_raw, out_img), 1)
        out = self.fc1(out)
        out = self.relu_fc1(out)
        out = self.fc2(out)
        return out

代码分析

这个 DualPathNet 类定义了双路神经网络。初始化函数 init 中分别定义了原始振动信号路径(一维卷积层)和时频图像路径(二维卷积层)的网络结构。在 forward 函数中,分别对输入的原始振动信号 xraw 和时频图像 ximg 进行卷积、激活、池化操作,然后将两者展平并拼接起来,经过全连接层 fc1fc2 输出最终结果。

四、总结

基于双路神经网络,融合原始振动信号和二维时频图像的故障诊断方法,在理论和实践上都展现出一定优势。通过选择合适的时频图像算法和搭建有效的神经网络模型,有望在滚动轴承故障诊断中取得更好的效果。后续还可以进一步探索不同数据集、不同时频图像算法对诊断精度的影响,不断优化模型性能。

基于双路神经网络的滚动轴承故障诊断 融合了原始振动信号 和 二维信号时频图像 的多输入(多通道)故障诊断方法 单路和双路都可 时频图像算法可选小波变换,短时傅里叶变换,马尔可夫变迁场,格拉姆角场,S变换,递归图等 数据集可选凯斯西储大学,东南大学,江南大学等等 Pytorch和Tensorflow框架做的。 以下可视化结果适用小波和短时傅里叶变换,其它时频图像算法效果并没有这

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐