摘要:

针对列车轮对振动信号易受轮轨噪声影响、故障特征提取困难等问题,提出一种基于优化变分模态分解(Variational mode decomposition,VMD)和多尺度样本熵-能量(Multiscale sample entropy-energy,MSEEN)指标的故障诊断方法。首先搭建考虑轮轨接触关系的轮对振动实验台,分别进行正常、车轮扁疤、车轴裂纹及扁疤-裂纹耦合故障状态下的轮对振动测试。其次,利用遗传算法,以样本熵、相关系数和均方误差为适应值搜索VMD的最佳分解个数及分解中心频率。然后基于优化 VMD 分解不同状态下的轮对振动信号并提取本征模态函数(Intrinsic mode function,IMF)分量的MSEEN指标。最后将指标与BP神经网络结合进行轮对故障诊断,总识别率达到94.44 %。该方法可为实际运行工况中的列车轮对故障诊断提供借鉴。

学习内容:

实际运行工况中的轮对振动信号受到轮轨随机激励、环境噪声等因素影响,具有非线性、非平稳特征,基于传统信号处理方法难以提取故障特征信息。
在 经 验 模 态 分 解(Empirical mode decomposition,EMD)的基础上提出的变分模态分解(VMD)可将非平稳信号分解为不同时间尺度的平稳信号,且VMD鲁棒性较强,具有一定的抗噪及抗模态混叠能力。刘秀丽等利用VMD 和小波分析提取了行星轮磨损故障信息。吴东升等使用 VMD 对轴承信号进行降噪,并通过KPCA提取了故障特征信息。孟宗等通过计算 IMF 分量的能量占比确定 VMD 分解个数,提取到轴承的微弱故障特征。焦博隆等使用蝙蝠算法,以样本熵为指标对VMD的分解个数及分解中心频率进行优化,突出了转子裂纹的故障特征。吴守军等利用波形法确定VMD分解个数并对变
速箱故障信号进行了预处理。胡爱军等基于最大相关峭度获得VMD最佳分解中心频率,分离了轴承复合故障。

信息熵可直观反映信号故障状态,常被用来作为设备故障特征指标。吴守军等将散布熵作为变速箱故障特征指标。艾延廷等建立了融合熵距并对转子裂纹-碰摩耦合故障进行了诊断。李伟等基于多尺度模糊熵诊断了齿轮箱故障。潘震等以多尺度排列熵为特征值诊断了单向阀的故障。在样本熵的基础上提出的多尺度样本熵通过对数据进行粗粒化处理,改善了熵值仅在单一尺度上分析的局限性,从而可更准确地反映故障特征。


平台照片:

使用该实验台进行轮对系统正常、车轮扁疤、车轴裂纹和耦合故障工况下的振动响应测试。车轴裂纹深度为0.1 d(d为车轴直径),通过线切割获得,车轮扁疤类型为轮面擦伤,如图 2 所示。在建立耦合故障时,两者损伤程度不变。在轮对周围布置两个垂向的电涡流位移传感器。采样频率为 5 000 Hz,采样时间为10 s,轮对转速为600 r/min。


算法原理:

算法优化:

因多尺度样本熵对分布式故障的敏感性较低,故同时引入信号能量(EN)指标,时间序列xi的信号能量EEN的计算公式如下:
构建多尺度样本熵-能量指标XMSEEN作为轮对故障诊断特征向量,XMSEEN = { x1、x2},x1,x2分别为IMF1分量的多尺度样本熵HMSE和信号能量EEN。

最终结果:




程序代码:

Vxin: forwardtszs 扣扣:571485322
公众号:滚动轴承故障诊断与寿命预测

# -*- coding: utf-8 -*-
"""
Created on Wed Feb 20 19:24:58 2019@author: Vinícius Rezende Carvalho
"""
import numpy as npdef  VMD(f, alpha, tau, K, DC, init, tol):"""u,u_hat,omega = VMD(f, alpha, tau, K, DC, init, tol)Variational mode decompositionPython implementation by Vinícius Rezende Carvalho - vrcarva@gmail.comcode based on Dominique Zosso's MATLAB code, available at:https://www.mathworks.com/matlabcentral/fileexchange/44765-variational-mode-decompositionOriginal paper:Dragomiretskiy, K. and Zosso, D. (2014) ‘Variational Mode Decomposition’, IEEE Transactions on Signal Processing, 62(3), pp. 531–544. doi: 10.1109/TSP.2013.2288675.Input and Parameters:---------------------f       - the time domain signal (1D) to be decomposedalpha   - the balancing parameter of the data-fidelity constrainttau     - time-step of the dual ascent ( pick 0 for noise-slack )K       - the number of modes to be recoveredDC      - true if the first mode is put and kept at DC (0-freq)init    - 0 = all omegas start at 01 = all omegas start uniformly distributed2 = all omegas initialized randomlytol     - tolerance of convergence criterion; typically around 1e-6Output:-------u       - the collection of decomposed modesu_hat   - spectra of the modesomega   - estimated mode center-frequencies"""if len(f)%2:f = f[:-1]# Period and sampling frequency of input signalfs = 1./len(f)ltemp = len(f)//2 fMirr =  np.append(np.flip(f[:ltemp],axis = 0),f)  fMirr = np.append(fMirr,np.flip(f[-ltemp:],axis = 0))# Time Domain 0 to T (of mirrored signal)T = len(fMirr)t = np.arange(1,T+1)/T  # Spectral Domain discretizationfreqs = t-0.5-(1/T)# Maximum number of iterations (if not converged yet, then it won't anyway)Niter = 500# For future generalizations: individual alpha for each modeAlpha = alpha*np.ones(K)# Construct and center f_hatf_hat = np.fft.fftshift((np.fft.fft(fMirr)))f_hat_plus = np.copy(f_hat) #copy f_hatf_hat_plus[:T//2] = 0# Initialization of omega_komega_plus = np.zeros([Niter, K])if init == 1:for i in range(K):omega_plus[0,i] = (0.5/K)*(i)elif init == 2:omega_plus[0,:] = np.sort(np.exp(np.log(fs) + (np.log(0.5)-np.log(fs))*np.random.rand(1,K)))else:omega_plus[0,:] = 0# if DC mode imposed, set its omega to 0if DC:omega_plus[0,0] = 0# start with empty dual variableslambda_hat = np.zeros([Niter, len(freqs)], dtype = complex)# other initsuDiff = tol+np.spacing(1) # update stepn = 0 # loop countersum_uk = 0 # accumulator# matrix keeping track of every iterant // could be discarded for memu_hat_plus = np.zeros([Niter, len(freqs), K],dtype=complex)    #*** Main loop for iterative updates***while ( uDiff > tol and  n < Niter-1 ): # not converged and below iterations limit# update first mode accumulatork = 0sum_uk = u_hat_plus[n,:,K-1] + sum_uk - u_hat_plus[n,:,0]# update spectrum of first mode through Wiener filter of residualsu_hat_plus[n+1,:,k] = (f_hat_plus - sum_uk - lambda_hat[n,:]/2)/(1.+Alpha[k]*(freqs - omega_plus[n,k])**2)# update first omega if not held at 0if not(DC):omega_plus[n+1,k] = np.dot(freqs[T//2:T],(abs(u_hat_plus[n+1, T//2:T, k])**2))/np.sum(abs(u_hat_plus[n+1,T//2:T,k])**2)# update of any other modefor k in np.arange(1,K):#accumulatorsum_uk = u_hat_plus[n+1,:,k-1] + sum_uk - u_hat_plus[n,:,k]# mode spectrumu_hat_plus[n+1,:,k] = (f_hat_plus - sum_uk - lambda_hat[n,:]/2)/(1+Alpha[k]*(freqs - omega_plus[n,k])**2)# center frequenciesomega_plus[n+1,k] = np.dot(freqs[T//2:T],(abs(u_hat_plus[n+1, T//2:T, k])**2))/np.sum(abs(u_hat_plus[n+1,T//2:T,k])**2)# Dual ascentlambda_hat[n+1,:] = lambda_hat[n,:] + tau*(np.sum(u_hat_plus[n+1,:,:],axis = 1) - f_hat_plus)# loop countern = n+1# converged yet?uDiff = np.spacing(1)for i in range(K):uDiff = uDiff + (1/T)*np.dot((u_hat_plus[n,:,i]-u_hat_plus[n-1,:,i]),np.conj((u_hat_plus[n,:,i]-u_hat_plus[n-1,:,i])))uDiff = np.abs(uDiff)        #Postprocessing and cleanup#discard empty space if converged earlyNiter = np.min([Niter,n])omega = omega_plus[:Niter,:]idxs = np.flip(np.arange(1,T//2+1),axis = 0)# Signal reconstructionu_hat = np.zeros([T, K],dtype = complex)u_hat[T//2:T,:] = u_hat_plus[Niter-1,T//2:T,:]u_hat[idxs,:] = np.conj(u_hat_plus[Niter-1,T//2:T,:])u_hat[0,:] = np.conj(u_hat[-1,:])    u = np.zeros([K,len(t)])for k in range(K):u[k,:] = np.real(np.fft.ifft(np.fft.ifftshift(u_hat[:,k])))# remove mirror partu = u[:,T//4:3*T//4]# recompute spectrumu_hat = np.zeros([u.shape[1],K],dtype = complex)for k in range(K):u_hat[:,k]=np.fft.fftshift(np.fft.fft(u[k,:]))return u, u_hat, omega

基于优化VMD的滚动轴承故障诊断研究相关推荐

  1. wpdec函数_BP神经网络滚动轴承故障诊断研究

    摘要:滚动轴承在煤机设备中广泛应用,在恶劣工况下容易发生故障.为了能够及时准确地获取滚动轴承的运转状态,采用BP神经网络算法与小波函数对轴承振动信号进行分解,从而对滚动轴承进行状态监测以及故障诊断.实 ...

  2. 瞬时转速 matlab,基于瞬时转速的发动机故障诊断研究

    基于瞬时转速的发动机故障诊断研究 对本系统中瞬时转速的采集进行了误差分析,并讨论了影响瞬时转速波动的几个因 (本文共3页) 阅读全文>> 汽车发动机按照其所用燃料可分为柴油机和汽油机.柴油 ...

  3. 基于混合蛙跳算法优化SVM的滚动轴承故障诊断python实现

    1.混合蛙跳算法(SFLA)原理 混合蛙跳算法(SFLA)是一种受自然生物模仿启示而产生的基于群体的协同搜索方法,由局部搜索和全局信息交换两部分组成. 混合蛙跳算法中,每个青蛙的位置代表了一个可行解. ...

  4. 计算机仿真应用于诊断什么故障,基于MATLAB/Simulink的机械故障诊断研究

    摘要:机械故障诊断技术能够提供高质量的监控系统,提升管理效率,降低维护成本.通过MATLAB/Simulink仿真技术可以简洁地将故障诊断的结果图像化表达出来,提高故障诊断的质量和效率.该文模拟了机械 ...

  5. MATLAB环境下基于迁移学习的滚动轴承故障诊断

    这篇文章主要讲解一下如果迁移学习对滚动轴承进行故障诊断,但是文中所用的微调预训练的 SqueezeNet 卷积神经网络是自然图像训练出来的,与轴承故障诊断中所使用的时频谱图相距甚远,虽然分类精度较高, ...

  6. 基于灰度图的滚动轴承故障诊断python

    1.一维信号转灰度图 因为这种方法是信号输入到二维卷积里面去进行特征提取, 所以需要对一维信号进行转换,本文采用的是转换成灰度图. 我们首先采集原始振动信号,然后根据自己需求,准备制作多大的图片,截图 ...

  7. 【故障诊断】基于贝叶斯优化支持向量机的轴承故障诊断附matlab代码

    1 内容介绍 贝叶斯网络(Bayesian Network或BN)是人工智能领域进行建模和不确定性推理的一个有效工具.贝叶斯网推理的基本任务是:给定一组证据变量观察值,通过搜索条件概率表计算一组查询变 ...

  8. Limited Data Rolling Bearing Fault Diagnosis With Few-Shot Learning(基于小样本学习的有限数据滚动轴承故障诊断)

    Limited Data Rolling Bearing Fault Diagnosis With Few-Shot Learning 基于小样本学习的有限数据滚动轴承故障诊断 摘要 这一篇文章主要研 ...

  9. 基于CNN-LSTM的滚动轴承故障诊断

    为了实现基于CNN-LSTM的滚动轴承故障诊断,需要完成以下步骤: 数据准备:收集包含滚动轴承故障和正常工作数据的数据集,并将其预处理成适合输入模型的形式. 模型设计:设计一个包含CNN和LSTM的深 ...

最新文章

  1. Android 开发工具类 36_ getSimSerial
  2. C++复习 第一部分c到c++的过度
  3. 为什么 JavaScript 的 this 要这么用?
  4. 14行代码AC——习题5-4 交换学生(Foreign Exchange, UVa 10763)——解题报告
  5. hive与hbase集成
  6. PyTorch 之 requires_grad,requires_grad_(),grad_fn
  7. Python数据分析学习笔记02:Python语言基础、IPython与Jupyter笔记本
  8. unix和linux命令_在Linux / UNIX中查找命令
  9. 前端工程师-JavaScript
  10. c# oracle异常,C# 连接Oracle数据库异常总结
  11. Lua教程(二):C++和Lua相互传递数据示例
  12. QT 使用全局钩子监听鼠标事件和键盘事件
  13. 对软件系统进行验收测试,宁夏软件系统验收测试_找小赛
  14. nmds与mds的区别_NMDS分析
  15. cad文字递增快捷键_Auto CAD2014数字递增复制快捷键是什么呢?
  16. 腾讯员工的1则匿名帖子,让我细思极恐:不要低估人性的恶
  17. [转]作为黑客的你应该拥有的10个小工具
  18. css常见的几种布局
  19. 白光干涉仪(光学3D表面轮廓仪)与台阶仪的区别
  20. Ubuntu16.04安装搜狗中文输入法1(安装完成后将英文输入法列为常用输入法,中文列为第二输入法)

热门文章

  1. Python:为logging加点颜色
  2. VMware苹果开发环境
  3. 妈妈们的接种本有用了,输入生产批号就能查到问题疫苗
  4. 分享一下PMP备考攻略?
  5. python使用pandas报错Glyph * missing from current font
  6. Cannot GET /问题解决
  7. 学习服务器过程遇到的英文单词,mark
  8. 客服办公助手工具,辅助客服聊天的工具推荐
  9. 数据透视表可以两列汇总列吗_列出所有数据透视表样式宏
  10. mysql命令行方式导入sql文件