基于双路神经网络的滚动轴承故障诊断 融合了原始振动信号 和 二维信号时频图像 的多输入(多通道)故障诊断方法 单路和双路都可 时频图像算法可选小波变换,短时傅里叶变换,马尔可夫变迁场,格拉姆角场,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进行卷积、激活、池化操作,然后将两者展平并拼接起来,经过全连接层fc1和fc2输出最终结果。
四、总结
基于双路神经网络,融合原始振动信号和二维时频图像的故障诊断方法,在理论和实践上都展现出一定优势。通过选择合适的时频图像算法和搭建有效的神经网络模型,有望在滚动轴承故障诊断中取得更好的效果。后续还可以进一步探索不同数据集、不同时频图像算法对诊断精度的影响,不断优化模型性能。
基于双路神经网络的滚动轴承故障诊断 融合了原始振动信号 和 二维信号时频图像 的多输入(多通道)故障诊断方法 单路和双路都可 时频图像算法可选小波变换,短时傅里叶变换,马尔可夫变迁场,格拉姆角场,S变换,递归图等 数据集可选凯斯西储大学,东南大学,江南大学等等 Pytorch和Tensorflow框架做的。 以下可视化结果适用小波和短时傅里叶变换,其它时频图像算法效果并没有这