未发表!基于STFT-SWT-双流CNN-SVM的小样本轴承故障诊断方法,MATLAB代码

。前言

6e3ddb4e95cd8c1bc84c39ab257d84ce.png

现如今,大家为了找创新点发个小论文,也真是煞费苦心!各大博主推出的很多算法层出不穷,各式各样的组合真是看花了眼!但有时也不能为了创新而创新,效果好才是真的好!

本期推出一种《基于STFT-SWT-双流CNN-SVM的小样本轴承故障诊断方法》,首先利用短时傅里叶变换和同步压缩小波变换两大方法的互补性,同时对轴承数据进行特征提取,然后将提取的特征采用双流CNN-SVM模型实现故障诊断。实验表明,在每种类型故障样本量仅为20的小样本情况下,本文提出的模型仍有较高的精度。实现了小样本轴承故障诊断方法。

此方法为作者独创,不要问,问就是肯定没有人发过!

STFT:短时傅里叶变换(short-time Fourier transform,STFT)

SWT:同步压缩小波变换(Synchrosqueezed Wavelet Transform, SWT)

现在网上已有关于STFT-CNN的故障诊断文献:

[1]余传粮,梁睿君,冉文丰,等.基于STFT和CNN的齿轮箱故障诊断[J].机械制造与自动化,2022,51(03):152-154+195.DOI:10.19344/j.cnki.issn1671-5276.2022.03.037.

也有关于SWT-CNN的故障诊断文献:

[1]唐纪凯,卢一相,柏壮壮,等.基于同步压缩小波变换和CNN的滚动轴承故障诊断[J].传感器与微系统,2022,41(06):130-133.DOI:10.13873/J.1000-9787(2022)06-0130-04.

但是还没有将两者融合的文章。

同步压缩小波变换(SWT)和短时傅立叶变换(STFT)在信号处理中具有一定的互补性:

互补性

( SWT · STFT )

①SWT的选择性缺失问题是指在进行小波变换时,小波基函数的选择可能会导致某些频率的信号被忽略或失真,SWT的选择性缺失问题可能会导致信号的频率信息丢失或失真。而短时傅立叶变换(STFT)在某种程度上可以避免选择性缺失问题,因为它使用固定的窗口函数对信号进行分析,窗口函数的频率特性与信号的频率特性相对应。在STFT中,信号在时间和频率上被分解成窄带信号,每个时间点上的频率信息都能够得到较好的保留。

②SWT具有多尺度分析的能力,相比于STFT,可以在不同尺度上对信号进行分析,提供更全面的频率信息。

本期代码实现功能:

d7a6ae2d8251a48a5758ceee6f9277f8.gif

①实现了同步压缩小波变换(SWT)-CNN的故障诊断

②实现了短时傅立叶变换(STFT)-CNN的故障诊断

③实现了SWT-STFT-双流CNN故障诊断

④实现了SWT-STFT-双流CNN-SVM故障诊断

⑤本次实验的数据集,每个故障类别有100个样本。分别选取训练集为样本总量的70%、30%、20%对以上四种方法进行对比,验证本文提出方法在小样本诊断时的优势。

3a7813f07aad51403c2d87b648b634f7.gif

模型结构图如下:

5cf961db2742f162bdca671bccfbf806.png

内容详解

一、数据处理

①对官方下载的西储大学数据进行处理,步骤如下:

  1. 一共加载10种数据,然后取每个数据的DE_time(%DE是驱动端数据 FE是风扇端数据 BA是加速度数据 选择其中一个就行)

  2. 设置滑动窗口w,每个数据的故障样本点个数s,每个故障类型的样本量m

  3. 将所有的数据滑窗完毕之后,综合到一个data变量中

  4. 有关西储大学数据的处理之前有文章也讲过,大家可以看这篇文章:西储大学轴承诊断数据处理,matlab免费代码获取

    最后得到的数据是一个1000*2048的矩阵,其中1000是样本量,2048是特征。1000又等于100*10,10是指10种故障状态,100是指每种状态有100个样本。在代码中是data_total_1797.mat

二,对数据进行SWT和STFT变换

SWT变换结果:

4ef58961b8176adafd972d3cd50c76f1.png

STFT变换结果:

5a8a220703a664a4bf26559e3402a21e.png

三,结果展示

本期模型数据中,一共取了10种状态的数据,每种状态数据有100个样本。下面分别对每个样本选取70,30,20个作为训练集,其余样本作为测试集,对四种方法进行对比验证。

为了有效对比,设定四种方法的CNN参数全部一致!

①当训练集中每个样本量为70个时,即700个样本作为训练集,剩余300个为测试集:

同步压缩小波变换(SWT)-CNN诊断结果

ef7d9c02466d71b8fd381952c06a027a.png

短时傅立叶变换(STFT)-CNN诊断结果:

62d0d2beaea5c2b618f9b17dca6bfc8a.png

SWT-STFT-双流CNN诊断结果:

20039b74f228f5e5a1141c54a26fb705.png

SWT-STFT-双流CNN-SVM诊断结果:

7aa53d5e87f83802f7c4351eafd05697.png

到这里,可以发现,当样本量为70%时,四种效果基本相当,不分上下。都能够达到一个比较不错的诊断效果。

提示:为节省篇幅,这里不再展示30%的训练结果。直接展示每个样本量为20个时的小样本训练结果。大家在写论文的过程中可以多考虑几种情况。

②当训练集中每个样本量为20个时,即200个样本作为训练集,剩余800个为测试集:

同步压缩小波变换(SWT)-CNN诊断结果

421a39678e19d556f97610b71738fc14.png


短时傅立叶变换(STFT)-CNN诊断结果:

829e72dcdc4d908c89ba03fb9fa28c49.png


SWT-STFT-双流CNN诊断结果:

3fdf3c2a680fe4df89a783f1be8e8f7c.png


SWT-STFT-双流CNN-SVM诊断结果:

8898669ebcc8e43404a944097674fb3c.png

可以看到,当采用小样本数据进行模型训练时,本文提出的SWT-STFT-双流CNN-SVM模型相比于其他模型精度很高,达到了97%以上。

同时为了证明上述结果的非偶然性,笔者对提到的《SWT-STFT-双流CNN-SVM模型》做了10次实验,实验准确率均在90%以上,平均准确率达到了95%以上,最高一次准确率达到98.875%。明显优于其他3种模型。

在写论文的时候,你也可以对上述模型做多次实验,对平均结果行一个统计,突出所提模型的优越性,这里就不再赘述。

本期所提出的并行CNN网络结构如下,与上面给出的示意图结构是一致的。

3330f5964e05fb1479797416ab38bfa7.jpeg

此照程序代码每个文件夹都包含了一个说明.txt,请运行前仔细阅读,会帮助你更好的理解程序。步骤一步步执行即可。

在此承诺,以上实验均真实有效!

代码目录

5a28831c3325b1c16097268636cb31f3.png

代码获取

链接:https://mbd.pub/o/bread/ZZ6TmZhx

9b0ea70e1f5356413b12c5f918ce4642.png

参考文献:

[1]余传粮,梁睿君,冉文丰,等.基于STFT和CNN的齿轮箱故障诊断[J].机械制造与自动化,2022,51(03):152-154+195.DOI:10.19344/j.cnki.issn1671-5276.2022.03.037.

[2]唐纪凯,卢一相,柏壮壮,等.基于同步压缩小波变换和CNN的滚动轴承故障诊断[J].传感器与微系统,2022,41(06):130-133.DOI:10.13873/J.1000-9787(2022)06-0130-04.

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
function [S, f, t] = stft(x, fs, window, nfft, noverlap) % STFT - Short-time Fourier Transform % [S, f, t] = stft(x, fs, window, nfft, noverlap) % x: input signal % fs: sampling frequency % window: window function (default: hamming) % nfft: number of FFT points (default: length of window) % noverlap: number of samples overlapped between adjacent frames (default: 0) % S: STFT matrix (nfft/2+1 x nframes) % f: frequency vector % t: time vector % Example: % [x, fs] = audioread('speech.wav'); % [S, f, t] = stft(x, fs, hamming(512), 512, 256); % imagesc(t, f, 20*log10(abs(S))); % axis xy; colormap(jet); colorbar; xlabel('Time (s)'); ylabel('Frequency (Hz)'); % Written by Yuancheng Zhu (yzhu@nd.edu) % Last update: 2021/9/9 % Check inputs narginchk(2, 5); if nargin < 3 || isempty(window) window = hamming(256); end if nargin < 4 || isempty(nfft) nfft = length(window); end if nargin < 5 || isempty(noverlap) noverlap = 0; end if ~isvector(window) || ~isnumeric(window) error('Window function must be a numeric vector.'); end if ~isscalar(fs) || ~isnumeric(fs) || fs <= 0 error('Sampling frequency must be a positive scalar.'); end if ~isscalar(nfft) || ~isnumeric(nfft) || nfft <= 0 error('Number of FFT points must be a positive scalar.'); end if ~isscalar(noverlap) || ~isnumeric(noverlap) || noverlap < 0 error('Number of overlapped samples must be a non-negative scalar.'); end if noverlap >= length(window) error('Number of overlapped samples must be less than the window length.'); end % Calculate STFT parameters nframes = fix((length(x)-noverlap)/(length(window)-noverlap)); if nframes < 1 error('Signal is too short for STFT with the given parameters.'); end x = x(:); window = window(:); S = zeros(nfft/2+1, nframes); t = (nfft/2:nfft/2+nframes-1) / fs; % Compute STFT for i = 1:nframes idx = (1:length(window)) + (i-1)*(length(window)-noverlap); if idx(end) > length(x) idx = idx(idx <= length(x)); xw = [x(idx); zeros(length(window)-length(idx), 1)]; else xw = x(idx) .* window; end X = fft(xw, nfft); S(:, i) = X(1:nfft/2+1); end f = (0:nfft/2)' / nfft * fs; end

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天吃饺子

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值