首页/文章/ 详情

综述:时变转速下的旋转机械故障诊断(上)

2天前浏览335

    本期给大家推荐一篇北京工业大学先进制造技术重点实验室的关于时变转速下旋转机械故障诊断的综述文章,该综述较为系统和全面的介绍了近5年来提出的在时变转速下旋转机械故障诊断的方法。旨在为研究人员、机构人员和公司工程师提供在时变转速下旋转机械故障诊断的初步认识。

    论文链接:通过点击本文左下角阅读原文进行在线阅读及下载。

    论文基本信息

    论文题目Rotating Machinery Fault Diagnosis under Time-Varying Speeds: A Review
    论文期刊IEEE Sensors Journal
    论文日期2023
    论文链接https://drive.weixin.qq.com/s?k=AJAAiAeoAEgBuFUHiP
    作者Dongdong Liu, Lingli Cui, and Huaqing Wang
    机构北京工业大学先进制造技术重点实验室
    通讯作者邮箱acuilingli@163.com

    目录

    0 摘要
    1 引言
    2 基于频谱分析的诊断方法

    注:本篇综述文章篇幅过长,先为大家分享前半部分,后续再分享后半部分内容)

    0 摘要

    旋转机械经常工作在时变转速下,非平稳工况以及恶劣的环境使得其关键零部件,如滚动轴承、齿轮等极易发生故障。因此,包括非平稳信号处理方法和数据驱动方法在内的许多故障诊断方法被开发出来。本文主要对近5年来提出的时变转速下旋转机械故障诊断方法进行综述。首先,对阶次跟踪、循环谱相关和广义解调等基于频谱分析的方法进行了综述。其次,将时频分析( TFA )在机械故障诊断中的方法分为后处理方法和基于线调频小波变换的方法进行了综述。然后,综述了专门针对时变转速工况提出的基于人工特征提取和基于深度学习的智能诊断方法。最后,对研究前景进行了展望,不仅回顾了相关的先进方法,分析了它们如何克服速度波动带来的问题,还讨论了它们的优缺点以及将它们应用于工业应用时将会遇到的挑战。本文期望为研究人员、机构和公司提供对该课题研究方法的初步认识。

    关键词:旋转机械故障诊断时变转速阶次跟踪时频分析智能化

    1 引言

    风力发电机、发动机和电动机等旋转机械在工业应用中得到了广泛的应用。然而,由于环境恶劣、运行工况多变,滚动轴承、齿轮等关键零部件极易发生故障[1]、[2]。有效的故障诊断可以减少停机时间,节省维修费用,保证设备安全运行[3],[4],[5]。因此,旋转机械的故障诊断至关重要且备受关注。时变转速普遍存在于各个工业领域,如风力发电机、采矿业和石油化工等工程[6]、[7]。据统计,海上风电机组总成本中约有20% ~ 25%用于运行维护[8]、[9]。
    然而,由于海上环境恶劣,风力发电机离岸的旋转速度会随着风力大小和方向的变化而剧烈波动,这使其故障诊断变得十分困难[10],[11]。时变运行模式在采矿业中也普遍存在。例如图1所示,采矿机械在运行时,整个运行周期包括填充、移动到卸载位置、卸载和返回初始位置。虽然一些常见的机器在变转速下不工作,但启动和停机过程也会产生非平稳信号[12],[13],并且这些过程包含了许多在恒转速条件下无法揭示的运行信息和一些故障信号[12]。因此,对于时变转速下旋转机械的故障诊断至关重要。迄今为止,针对变转速下的机械故障诊断问题,人们已经研究出了丰富的方法。这些方法可以分为两类。第一类侧重于机器在几种不同速度下运行的情况,因此信号对应于可变速度,但是也有一些运行条件,速度是常数[14],[15]。基于机器学习的智能方法在这种情况下备受欢迎,它们旨在提高在特定速度条件下的模型泛化性。第二类侧重于揭示对应转速连续变化机器的故障信号或实现模式识别,更符合前面提到的风电机组、矿山设备等工业应用。在本文中,我们关注的是第二类的相关情况,在这里说明一下时变速度是指连续变化的速度。  

    图1 算例在时变速度下运行。( a )海上风力发电机,( b )采矿机铲  
    时变的转速给机械故障诊断带来了巨大的困难。对于时域信号而言,当转速变化时,故障引起的冲击间隔时间会发生变化,即波形的周期模式不再存在,这使得通过分析冲击间隔时间来识别故障变得困难,降低了基于时域信号的机器学习方法的识别精度。此外,这些故障冲击的幅值也会因转速的变化而变化,这也为故障诊断增加了难度。对于信号的某一频谱或解调信号,由于故障冲击失去周期性,与故障相关的频率将变得模糊,用于恒转速下故障诊断的频率分析方法不再适用。因此,时变转速下旋转机械的故障诊断具有挑战性,是目前研究的热点。
    将时变的故障相关频率转换为恒定频率是恢复频谱分析有效性的一种有效解决方案。阶次跟踪( Order Tracking,OT )是实现这一目标的常用工具,通过对时域数据进行恒定角度增量的重采样来实现[16]。按照实现方式,OT分为硬件阶次跟踪( HOT ,一种全硬件技术)、计算阶次跟踪( COT ,由编码器信号实现)和无键相阶次跟踪( TOT ,由信号本身检测到的瞬时频率( IF )获得) [17] [18]。最近,循环谱相关理论[19]和广义解调[20]也被用于频谱分析。在这些基本方法的基础上,为了更好地揭示关键频率成分,许多先进的方法得到了进一步的发展。
    时频分析( Time-Frequency Analysis,TFA )也是时变转速下机械故障诊断的一种有效方法,它可以精确定位信号的频率成分并跟踪其变化。由于传统的TFA方法,如短时傅里叶变换( STFT ) [21]、小波变换( WT ) [22]和Wigner - Ville分布( WVD ) [23]的时频分辨率有限,已经开发了先进的方法用于故障诊断,如后处理方法[24]和基于chirplet变换( CT )的方法[ 25 ]。这些方法具有较高的分辨率,已在故障诊断中得到应用。
    除了基于频谱分析和TFA的方法外,随着机器学习方法的快速发展,智能故障诊断也备受关注[26],[27],[28],[29]。近年来,一些先进的方法被提出用于时变转速下的智能故障诊断。这些方法旨在采用信号处理方法去除速度波动的影响,提取与速度无关的特征[ 30 ]或设计更深层次的模型直接从原始信号中学习特征[31]。因此,这些方法大大减少了分析非平稳信号所需的人工。
    近年来,已有多篇文献对旋转机械故障诊断的研究进行了总结,如共振解调方法[32]、调制特征提取方法[33]、机器学习在机械故障诊断中的应用[26] [34]、深度学习在行星齿轮箱故障识别中的应用[35]、数据驱动方法在机械故障诊断中的应用[36]、迁移学习在机械故障诊断中的应用[37]、旋转机械健康指标构建[38] [39]等。然而,这些综述性论文主要集中于匀速运动。据我们所知,关于时变速度的综述论文非常有限。2014年,Lin等[40]对OT和TFA方法进行了简要综述,2019年,Lu等[17]对TOT方法进行了综述。此后,许多新的方法以及有意义的OT和TFA方法被提出。并且随着深度学习方法的不断涌现,针对时变速度的智能方法逐渐引起了更多的关注,并取得了巨大的成功。本文对近五年来时变转速下旋转机械故障诊断方法的研究现状进行了系统全面的综述,包括频谱分析方法、TFA方法和智能故障诊断方法。本文旨在帮助读者了解最新发表的方法,了解一些先进方法在实际应用中的局限性,以及类似方法的优缺点。此外,还提出了若干研究展望,可为相关研究人员的未来工作提供有价值的见解。
    值得注意的是,相关论文来自两个数据库,即Web of Science和Google Scholar。大多数论文发表在最近五年,少数超出此范围的经典和代表性论文也有涉及。将“阶次跟踪”、“广义解调”、“循环谱相关”、“时频分析”等算法相关的搜索关键词分别与“旋转机械”、“轴承”、“变速箱”、“轴”、“行星齿轮”等诊断对象使用布尔运算进行组合。针对第四节中的智能诊断方法,将“智能”、“机器学习”、“深度学习”、“卷积神经网络”等关键词,以及“时变”、“变转速”、“不平衡”等工况描述分别与上述诊断对象相结合。为了使论文与主题更相关,使论文对我们更有参考价值,根据期刊质量和内容的相关性对论文进行了提炼。可以看出,该综述是系统和全面的,希望这将为研究生、机构和公司提供时变转速下旋转机械故障诊断的初步认识。

    本综述的其余部分组织如下。在第二节中,我们重点研究了基于频谱分析的诊断方法。第三节对时频分析方法进行了综述。第四节对智能诊断方法进行了综述。第五部分给出了研究展望。第六节给出了结论。

    2 基于频谱分析的诊断方法

    基于频谱分析的方法主要集中在滚动轴承、定轴齿轮箱和行星齿轮箱的故障诊断。这些方法的诊断结果依赖于将突出的峰值与故障相关成分的计算值进行匹配[41],[42]。对于滚动轴承,当故障发生在不同部位时,例如外圈、内圈和滚动体,FCF(FCF:fault characteristic frequency)的值是不同的,因此可以通过分析FCF的值来识别故障类型[43]。对于定轴齿轮箱,当故障发生时,啮合振动会被轴频率调制,因此通常通过分析GMF(GMF:gear mesh frequency)或其谐波周围的边频带来定位故障[44]。对于行星齿轮箱,当故障发生在行星轮、齿圈和太阳轮等不同部位时,会产生不同的调幅特性,因此可以通过GMF及其谐波附近的边频带来识别故障[24],也可以通过FCFs进行幅值解调来识别故障[11]。

    当转速变化时,由故障引起的相邻冲击的间隔会发生变化,因此相关的频率如FCF,边带和GMF也会随着转速的变化而变化[45]。传统的频谱分析方法已不再适用。因此,需要通过重采样、广义解调等非平稳信号分析方法将相关频率转换为常量。变换后,相关频率成分可通过频谱分析方法揭示。各大学的研究人员,如新南威尔士大学[46],[47],[48],[49],里昂大学[50],[51],[52],北京交通大学[53],[54],[55],[56],西安交通大学[57],[58],[59],[60],北京工业大学[45],[61],[62]和渥太华大学[63],[64],[65]等,对这一课题做出了很大贡献。

    A. 基于阶次跟踪的方法

    1) 硬件阶次跟踪

    HOT由模拟仪表实现,它调整与转速成比例的采样率。在这个过程中,需要两个设备,即一个比率合成器和一个抗混叠跟踪滤波器[16],[66]。由于HOT是通过硬件电路实现的,因此省时且可以在线完成,但它也存在固有的缺陷。首先,在数据采集过程中动态调整采样率和截止频率,使数据采集受到延迟和误差的影响,特别是当速度快速波动时[67]。其次,需要额外的硬件组件,增加了复杂度和成本。
    2) 计算阶次跟踪

    对于COT,在相同的采样频率下对信号和转速表脉冲进行重编码,然后利用软件[16]对振动信号进行恒定角度增量的重采样。COT原理简单,如图2所示。  

    图2 .说明了两种COT方法:( a )转速计脉冲,( b )轴相位,( c )原始信号,( d )角度域信号。[注:完成COT有两种方法,即两种方法的步骤分别为( a )→( b )→( c )→( d )和( a )→( c )→( d )]。  

    通过一个例子来说明COT的有效性,如图3所示。振动信号从试验台采集,如图4所示。图3 ( a )显示了一个内圈故障轴承信号的包络谱,其中没有明显的峰值出现。然而,在包络信号的阶次谱中,如图3 ( b )所示,调制旋转频率( Or ),FCF ( Oinner ),边带( Oinner ± Or )及其相应的谐波出现得很清楚。为了实现复合轴承故障诊断,Tang等[68]提出了一种基于虚拟多通道信号的COT方法,该方法首先对振动信号进行重采样,然后通过变分模态分解( VMD )分解产生虚拟多通道信号。最后,采用约束独立成分分析( ICA )和快速傅里叶变换( FFT )生成阶次谱。此外,Yang等人[69]利用COT获得角域信号,然后应用随机共振来增强微弱的轴承振动。Song等人[57]用COT揭示了阶数和共振频率,然后用Vold - Kalman滤波和变分模态分解/提取( VMD / VME )实现振源分离。Wang等人[70]使用COT来获得角度轴承信号,然后提出了一种新的指标来确定最佳频带。该指标通过不同权重融合峭度、谱负熵和相关系数构建,再结合1 / 3二叉树结构进行频带选择。Zhang等人[71]提出了一种自适应阶次带能量比的行星齿轮箱故障诊断方法,该方法利用COT得到阶次谱,然后计算阶次带能量比作为指标。最后,将得到的指标送入机器学习分类器,实现自动识别。  

    图3 ( a )和( b )是内圈故障轴承包络信号的频谱和阶次谱
    图4 滚动轴承故障模拟试验台

    在基于COT的故障诊断中,另一个挑战是去除微弱信号故障诊断中的确定性干扰成分。例如,在轴承故障诊断中,微弱的故障振动通常被齿轮啮合振动所淹没[46],[47],[63]。当转速时变时,GMF及其周围的边带无法去除,因此常用的方案是在角度域对其进行分离。文献[47]提供了一个完整的基准方法:首先对振动信号进行重采样,然后采用时间同步平均( TSA )或离散/随机信号分离( DRS )去除确定性成分。其次,使用最小熵解卷积( MED )来提高故障冲击的冲量,然后使用带通滤波器来识别最佳频带。最后,通过重采样再次得到角域信号,然后计算阶次谱,揭示微弱的轴承FCF。  

    综合以上总结的方法可以得出,基于COT的频谱分析方法通常与先进的去噪算法或信号分解方法相结合来实现故障诊断。然而,需要注意的是,共振频率是由整个机械系统决定的,与转速无关[54],但是当信号重采样后,共振频率也会发生变化。因此,虽然在角域将特征频率转换为恒定频率,但依赖共振频率机制的去噪方法并不适用或性能下降,如谱峭度[72]、MED [73]、[74]等。需要指出的是,较大的轴相函数阶数意味着更高的精度,但它将包含大量的高阶方程,并将需要更多的计算时间。当速度波动复杂时,小度数会造成较高的插补误差。因此,应根据被监测设备的实际转速变化复杂程度来设计轴相函数的阶次。
    3) 无键相阶次跟踪

    尽管COT已经得到了广泛的应用和研究,但它的应用仍然需要硬件,例如转速计/编码器,以收集转速脉冲,这不仅带来了额外的成本,而且造成了安装上的困难。因此,TOT,即通过从信号本身获得的IF来实现阶比跟踪,近来受到了广泛的关注。

    提取IF的方法有多种,如基于TFR的谱峰搜索法、相位解调法和原子匹配法等。其中,基于TFR的方法最为常见,而如何从TFR中提取出准确的IF并实现跟踪是一个研究热点。举例说明了基于TFR的频率估计。图5显示了图4中从试验台采集的外圈故障轴承信号的包络TFR。研究者们对提取更精确的IFs给予了极大的关注,所开发的技术主要通过以下两个方面来提高精度。

    图5 ( a )通过STFT获得的TFR和( b )提取的频率。  
    第一种方法是生成时频脊线更清晰的TFR,通常采用信号预处理方法处理振动信号或采用更先进的TFA方法来实现。振动信号通常是多分量的,并且通常含有较重的噪声,因此一些研究人员专注于信号预处理方法来分离感兴趣的分量。在[75]中,原始信号被相关集 合经验模态分解( CEEMD )分解,然后从一个分量中检测出瞬时旋转频率( IRF )。最后,使用时谱峭度( TSK )选择一个成分,并对该成分进行重采样。Jiang等人[61]使用频谱幅度调制( SAM )来分离频率成分,并使用熵来评估不同权重的时频表示,以确定最优权重。最后,从修正信号的TFR中检测中频信号,并利用该中频信号对原始信号进行重采样,用于轴承故障诊断。  
    表1 列出了关于TOT的估计方法的参考文献  

    传统的TFA方法得到的TFRs中的时频脊总是受到噪声的影响,因此使用先进的TFA方法突出这些脊也是更好地估计频率的有效方法[76]。Wu等人[59]提出了一种非线性补偿解调变换( NCDT ),对重要的谐波分量进行解调和滤波,从而可以更准确地从滚动轴承振动信号的TFR结果中提取出微弱的旋转频率。在[60]中,采用广义线性线调频小波变换( GLCT )来获得精细的TFR,并对GLCT的参数进行了分析。Kumar等人[76]从基于傅里叶同步压缩变换( FSST )的TFR中提取IF,并对IF进行锐化,然后采用改进的VMD方法处理角度域信号。Zhao等[77]提出了迭代自适应关键模态分解( IACMD )来估计IF,然后提出了一种用于行星齿轮箱故障诊断的增强阶次谱分析方法,其中设计了加权峭度指标来确定固有模态函数( IMF )。Zhang等人[58]提出了一种时变正弦模式提取( TVSME )方法用于感应电机电流信号分析,利用广义解调进行准确的中频提取,然后通过对中频电流信号进行重采样。Yang等[78]利用广义参数化时-频变换( GPTFT )和峰值搜索法检测中频,然后对振动数据进行中频重采样。然后,利用基于角域数据选择共振频带,得到平方包络谱,识别轴承故障位置。最后,通过平方包络谱计算FCF与其邻域的能量比,称为邻域功率密度比( NPDR )指标来量化故障程度。  

    表2 列举不同检测方法的比较  
    第二种方法首先是将常用的TFA技术应用于采集信号,然后开发后处理方法来估计IF [79],[80],[82],[83],[85],[94]。在[ 86 ]中,首先通过STFT得到一个TFR,然后提出了一种最大跟踪方法来进行频率估计,其中提出了一种概率方法来推断实际频率。在文献[87]中,提出了一种基于能量重心校正的频率搜索方法和一种改进的Viterbi算法,可以自适应地优化IF轮廓,提高准确性。在[64]中,快速路径优化被用于优化IF的轮廓,通过使用STFT对轴承信号进行处理,可以从TFR中提取IFCF,IRF及其谐波分量。
    除了基于TFR的方法,相位解调在IF估计中也是有效的[48],[88],[89],[95]。该方法最早在文献[48]中提出,该方法基于相位解调提取GMF中的一个谐波分量,通过提取的中频计算的IRF对时域数据进行重采样。显然,由于带通滤波器无法有效地将目标谐波分量从多分量信号中分离出来,因此无法应用于大转速变化范围的应用场合。乌尔巴内克等[90]提出了一种两步频率检测操作,首先从TFR中提取一个粗略的中频,并用于对信号进行重采样。然后,对该分量进行分离,并通过相位解调得到准确的IF。通过这两个步骤,可以在较大的转速波动条件下从信号中提取出IF。彼得斯等人[91]将相位解调扩展到多分量的频率估计中,通过对谐波相位进行时间加权来实现,从而避免了低信噪比谐波的影响。最后通过提取的频率计算IRF,对振动信号进行重采样。Zhang等[93]利用增强型几何模态( ESGMD )对信号进行分解,并借助替代数据测试滤除干扰成分。提取IRF并对轴承信号进行重采样,用于故障识别。  
    基于TFR和基于相位解调的方法的比较如表2所示。无论是基于TFR的方法还是基于相位解调的方法,借助先进的信号处理方法和后处理方法,都可以很容易的从TFR中提取出一个IF。然而,对于大多数这些方法,在提取前必须手动选择一个目标时变时频脊线。当参考不同的IF执行重采样操作时,阶次谱会有所不同,这意味着这些方法无法扩展到在线故障检测中。期望能够研究出更多的自适应IF估计方法,以满足在线故障诊断的要求。  
    HOT、COT和TOT的比较见表3。研究发现,在实际应用中,应根据实际需求和条件进行方法选择。例如,如果需要实时状态监测,HOT和COT是两个很好的选择,但需要准备一个合适的安装位置。对于硬件安装位置不可得的情况,TOT方法是最佳选择,但在线故障诊断还需要进一步研究更多的自适应方法。

    B. 基于循环谱相关的方法

    循环谱相关( CSC )已被证明可以有效地揭示信号的耳周的模式,它是通过计算协方差函数的双重傅里叶变换来实现的[49],[96]。与包络分析相比,CSC可以揭示二阶循环平稳的周期性,例如具有更强噪声的轴承信号。
    表3 列出了HOT、COT和TOT的比较结果  
    图6 行星齿轮箱信号的谱相关图  

    图7 风力发电机组传动链试验台

    图8  ( a )行星齿轮箱,( b )故障太阳轮

    通过CSC,在频谱频率和循环频率的双变量图中呈现了周期图案,如图6所示。如图7和图8所示,信号是从包含故障太阳轮的行星齿轮箱中测量。前者可以精确定位载波频率,而周期性特征频率谐波则从循环频率方向揭示。谱轴可以整合形成改进包络谱( IES )或增强包络谱( EES ) [97]。

    然而,上述方法只能适用于恒转速条件下的信号。Abboud等人[50],[51]进一步将CSC扩展到非平稳循环信号,通过对角域信号应用谱相关或谱相干来实现。基于该理论,毛里齐奥等人[6]开发了一种新的频带选择工具,称为基于特征优化的改进包络谱( Improved Envelope Spectrum via Feature Optimization-gram,IESFOgram ),并应用于变转速下的轴承故障诊断。Schmidt等人[98]利用阶次-频谱和角-频谱构造了几种频带选择方法,用于时变转速下轴承和齿轮的故障诊断。

    与包络/阶次谱分析相比,基于CSC/阶次分析的谱可以更好地从循环平稳/循环非平稳信号中揭示周期的模式,但计算较为复杂,导致计算时间较长,特别是在分析高采样率下采集的信号时,如Safran发动机数据[52]。因此,研究更快速的方法可能会促进它们的应用。

    C. 基于广义解调的方法

    广义解调也是一种处理非平稳信号的有效技术,可以处理时变的非平稳信号在TFR [20]中,IF的轨迹可以转换为线性路径。与重采样技术不同的是,可以选择一个感兴趣的时变中频作为目标,将其转换为常数,其他频率成分仍然是可变的,这意味着对于多分量信号,可以在解调谱中突出感兴趣的故障相关成分。文[62]给出了一个例子来说明广义解调的原理。故障轴承信号的转速f r(t)由图4所示的试验台测量,相位函数pr(t)由图9 (a)所示,IRFf r(t)和IFCFf(t)及其谐波也是时变的,如图9 (b)所示。在由pr(t)计算的适当相位函数的引导下,IFCF及其二次谐波分别转换为常数,如图9 (c)和(d)所示。TFA [99]将其引入到时变转速下旋转机械的故障诊断中。Feng等人[100],[101]进一步将其推广到多分量行星齿轮箱信号的TFA。广义解调相关的TFA方法详见节III - B。

    最近,研究人员也研究了广义解调在旋转机械故障诊断频谱分析中的应用[102],[56],其中大部分集中在如何构造相位函数。在文献[65]中,提取了时变的轴承IFCF,并将提取的IFCF与常数增量相乘得到了IF的相位函数。该方法的优点是只需要一个IF,其余的IF都是在没有先验知识的情况下由IF估计得到的。在[103]中,相位函数是由转速计采集的转速计算得到的。OT将时变的频率转换为固定的常数值。例如,如果参考IRF对信号进行重采样,时变的旋转频率将转化为1的阶数,而其他分量将转化为1的倍数,这是由频率与旋转频率的关系决定的。然而,通过广义解调将时变频率转换为它们的起始频率,这意味着如果不同信号的转速随不同的轮廓而变化,即使被监测部位的健康状况相同,解调谱也会不同。因此,文献[62]提出了灵活的广义解调。通过引入一个基频,将时变的旋转频率转换为基频,将其他具有相同物理意义的频率转换为相同的基频频率相关常数值。

    广义解调在非平稳信号频谱分析中有其独特的优点,但其局限性也不容忽视。在解调操作中,可以选择感兴趣的频率,这有利于这些频率的解调,并防止故障无关频率分量的干扰,但未被选择的其他潜在故障特征频率仍然是时变的。如果一台被监测的机器结构复杂,需要监测的部件较多,那么所有部件引起的所有目标频率对应的相位函数都要提前计算,这是不现实的。因此,基于广义解调的方法适用于结构简单的机械或易发生故障的零部件较少的机械。

    D. 其他方法
    据我们所知,大多数基于频谱分析的时变转速下机械故障诊断方法依赖于重采样技术、循环谱相关或广义解调,其他方法仅有少数。在[104]中,首先从故障齿轮的信号中检测出一个中频信号,然后应用分数阶傅里叶变换( FrFT )来解调啮合频率及其边频带。在文献[105]中,首先得到滚动轴承信号的包络TFR,然后基于一个抽取的IF重构TFR,通过在时间轴上积分TFR即可计算出一维解调谱。然而,这些方法都有其固有的缺陷。例如,基于FrFT的方法只适用于旋转频率线性变化的情况,而基于TFR重构的方法则受制于时频分辨率。

    E. 比较

    基于OT、CSC和广义解调的频谱分析方法的优缺点如表4所示。需要指出的是,每种方法都有其固有的缺点和优势。因此,在实际应用中,应根据具体需求选择合适的方法。例如,如果被监测的机器是复杂的,但只有一个部件容易发生故障,则最好选择广义解调,因为被监测部件的故障相关部件的相位函数可以很容易地计算。如果机器是复杂的且所有部分都容易发生故障,广义解调不是很好的选择,因为它很难计算所有的相位函数,而OT可能更适合。CSC计算量大,但对噪声具有鲁棒性。因此,对于早期的故障诊断,CSC似乎更合适。  

    表4 列举了不同频谱分析方法的比较

    来源:故障诊断与python学习
    ACT振动非线性旋转机械电路航空pythonUM声学理论电机化机传动数字孪生
    著作权归作者所有,欢迎分享,未经许可,不得转载
    首次发布时间:2024-06-29
    最近编辑:2天前
    故障诊断与python学习
    硕士 签名征集中
    获赞 44粉丝 42文章 104课程 0
    点赞
    收藏
    作者推荐
    XJTUGearbox和XJTUSuprgear齿轮箱振动数据集(含轴承、齿轮、变转速、复合故障)

    目录1 数据集概述 1.1 声明 1.2 数据下载地址2 XJTUGearbox齿轮箱数据描述 2.1 实验设置 2.2 数据文件描述 2.3 XJTUGearbox实验台的技术资料3 XJTUSuprgear齿轮箱数据描述、 3.1 实验设置 3.2 数据文件描述 3.3 XJTUSuprgear实验台的技术资料4 绘制时域、频域、时频域图 4.1 XJTUGearbox数据集 4.1.1 数据读取 4.1.2 绘制时域图 4.1.3 绘制频域图 4.1.4 绘制时频域图 4.2 XJTUSuprgear数据集 4.2.1 数据读取 4.2.2 绘制时域图 4.2.3 绘制频域图 4.2.4 绘制时频域图 4.2.5 计算转速1 数据集概述1.1 声明XJTUGearbox和XJTuSuprgear数据集由中国陕西西安交通大学航空发动机研究所(http://iafe.xjtu.edu.cn/jgyjs/hkfdjyjs.htm)提供。这些故障诊断数据集是公开的,任何人都可以使用它们来验证诊断算法。出版物要求使用XJTUGearbox和xjtuupgear数据集引用以下论文。[1] Tianfu Li, Zheng Zhou, Sinan Li, Chuang Sun, Ruqiang Yan, Xuefeng Chen, “The emerging graphneural networks for intelligent fault diagnostics and prognostics: A guideline and a benchmark study,SignalProcessing,vol.168,pp.108653,2022.DOIMechanical Systems and10.1016/i.ymssp.2021.1086532 XJTUGearbox齿轮箱数据集描述2.1 实验设置实验平台如图1所示,由驱动电机、控制器、行星齿轮箱、平行齿轮箱和制动器组成。其中,电机类型是一个3相和3马力,其电源是三相交流电(230V,60/50Hz)。行星齿轮箱的X和Y方向安装了两个单轴加速度计(PCB352C04)来收集振动信号,并使用Y方向的信号。在实验中,在行星齿轮箱上模拟了4种行星轮故障和4种轴承故障。如图1(b)所示,齿轮失效包括齿面磨损、缺齿、齿根裂纹和断齿。轴承故障包括滚动体故障、内圈故障、外圈故障和上述三种轴承故障的混合故障。因此,与正常状态一起,共采集到9种振动信号。此外,在实验过程中电机转速设置为1800r/min,采样频率设置为20480Hz。 (a) 1.电机,2.控制器,3.行星齿轮箱,4.平行齿轮箱,5.制动器,6-7.水平和垂直方向的加速度计(b)齿轮和轴承的健康状况图1 XJTUGearbox数据集实验台 (a)实验台; (b)齿轮和轴承的健康状况2.2 数据文件描述如图2所示,XJTUGearbox数据集包括9个子文件夹。可以看出,行星齿轮箱的第一级行星轮是轴承故障,行星轮箱的第二级行星轮是齿轮故障。此外,每个子文件夹中包含2个txt文件,其中“Data_Chan1.txt”表示在Y方向收集的振动信号,“Data_Chan2.txt”表示在X方向收集的振动信号。2.3 XJTUGearbox试验台的技术资料XJTUGearbox试验台的技术信息如下图所示,详细信息可以在以下网址了解:https://spectraquest.com/drivetrains/details/dds/ 3 XJTUSuprgear齿轮箱数据集描述3.1 实验设置实验平台如图3(a)所示,其由驱动电机、皮带、轴和变速箱组成。其中,电机的型号为交流变频电机,其电源为单相交流(220V,60/50Hz)。12个单轴加速度计(PCB333B32)安装在变速箱上收集振动信号,并使用第一个传感器的信号。实验中,在直齿轮上加工了四种不同程度的裂纹,如图3(b)所示,再加上正常状态,共采集到五种振动信号。模拟了三种不同的转速,即900r/min、1200r/min,以及从0到1200r/min再到0的变转速。此外,在实验过程中,采样频率设置为10kHz。(a) 1.驱动电机,2.皮带,3.轴,4.加速度计,5.齿轮箱,6.负载,7.从动齿轮,8.主动齿轮(b) 直齿轮的健康状况图3 XJTUSuprgear数据集的测试台 (a)试验装置; (b)直齿轮的健康状况3.2 数据文件描述如图4所示,XJTUSuprgear数据集包括3个子文件夹,文件夹名称表示两个速度。此外,每个子文件夹包含5个txt文件,其中“suprgear02-15.txt“意味着试验齿轮的裂纹程度为0.2mm。此外,每个txt文件包含14列,其中第一列表示采集时间,最后一列表示速度脉冲信号,其他列表示由12个加速度计收集的振动信号。12个加速度计的详细安装位置如图5所示。图4 XJTUSuprgear数据集的内容图5 详细的传感器安装位置3.3 XJTUSuprgear实验台技术资料XJTUSuprgear试验台的技术信息如下所示:4 绘制时域、频域、时频域以下程序是基于jupyter notebook编辑器 4.1 XJTUGearbox数据集4.1.1 数据读取## 导入包from matplotlib import pyplot as pltfrom matplotlib import rcParamsimport numpy as npimport pandas as pdimport osconfig = { "font.family": 'serif', # 衬线字体 "font.size": 14, # 相当于小四大小 "font.serif": ['SimSun'], # 宋体 "mathtext.fontset": 'stix', # matplotlib渲染数学字体时使用的字体,和Times New Roman差别不大 'axes.unicode_minus': False # 处理负号,即-号}rcParams.update(config)##========绘制时域信号图========##def plt_time_domain(arr, fs=1600, ylabel='Amp($m/s^2$)', title='原始数据时域图', img_save_path=None, x_vline=None, y_hline=None): """ :fun: 绘制时域图模板 :param arr: 输入一维数组数据 :param fs: 采样频率 :param ylabel: y轴标签 :param title: 图标题 :return: None """ import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文 plt.rcParams['axes.unicode_minus'] = False # 显示负号 font = {'family': 'Times New Roman', 'size': '20', 'color': '0.5', 'weight': 'bold'} plt.figure(figsize=(12,4)) length = len(arr) t = np.linspace(0, length/fs, length) plt.plot(t, arr, c='g') plt.xlabel('t(s)') plt.ylabel(ylabel) plt.title(title) if x_vline: plt.vlines(x=x_vline, ymin=np.min(arr), ymax=np.max(arr), linestyle='--', colors='r') if y_hline: plt.hlines(y=0.2, xmin=np.min(t), xmax=np.max(t), linestyle=':', colors='y') #===保存图片====# if img_save_path: plt.savefig(img_save_path, dpi=500, bbox_inches = 'tight') plt.show()##========绘制频域信号图========##def plt_fft_img(arr, fs, ylabel='Amp(mg)', title='频域图', img_save_path=None, vline=None, hline=None, xlim=None): """ :fun: 绘制频域图模板 :param arr: 输入一维时域数组数据 :param fs: 采样频率 :param ylabel: y轴标签 :param title: 图标题 :return: None """ # 计算频域幅值 length = len(arr) t = np.linspace(0, length/fs, length) arr = arr - np.mean(arr) fft_result = np.fft.fft(arr) fft_freq= np.fft.fftfreq(len(arr), d=t[1]-t[0]) # FFT频率 fft_amp= 2*np.abs(fft_result)/len(t) # FFT幅值 # 绘制频域图 plt.figure(figsize=(12,4)) plt.title(title) plt.plot(fft_freq[0: int(len(t)/2)], fft_amp[0: int(len(t)/2)], label='Frequency Spectrum', color='b') plt.xlabel('频率 (Hz)') plt.ylabel('幅值') plt.legend() if vline: plt.vlines(x=vline, ymin=np.min(fft_amp), ymax=np.max(fft_amp), linestyle='--', colors='r') if hline: plt.hlines(y=hline, xmin=np.min(fft_freq), xmax=np.max(fft_freq), linestyle=':', colors='y') #===保存图片====# if img_save_path: plt.savefig(img_save_path, dpi=500, bbox_inches = 'tight') if xlim: # 图片横坐标是否设置xlim plt.xlim(0, xlim) plt.tight_layout() plt.show()def plt_stft_img(arr, fs, ylabel='Amp(mg)', title='stft时频域图', img_save_path=None, vline=None, hline=None, xlim=None): """ :fun: 绘制stft时频域图模板 :param arr: 输入一维时域数组数据 :param fs: 采样频率 :param ylabel: y轴标签 :param title: 图标题 :return: None """ import scipy.signal as signal import numpy as np import matplotlib.pyplot as plt f, t, nd = signal.stft(arr, fs=fs, window='hann', nperseg=128, noverlap=64,nfft=None, detrend=False, return_onesided=True, boundary='odd', padded=False, axis=-1) # fs:时间序列的采样频率, nperseg:每个段的长度,默认为256(2^n) noverlap:段之间重叠的点数。如果没有则noverlap=nperseg/2 #window :字符串或元组或数组,可选需要使用的窗。 # #如果window是一个字符串或元组,则传递给它window是数组类型,直接以其为窗,其长度必须是nperseg。 # 常用的窗函数有boxcar,triang,hamming, hann等,默认为Hann窗。 #nfft :int,可选。如果需要零填充FFT,则为使用FFT的长度。如果为 None,则FFT长度为nperseg。默认为无 # detrend :str或function或False,可选 # 指定如何去除每个段的趋势。如果类型参数传递给False,则不进行去除趋势。默认为False。 # return_onesided :bool,可选 # 如果为True,则返回实际数据的单侧频谱。如果 False返回双侧频谱。默认为 True。请注意,对于复杂数据,始终返回双侧频谱。 # boundary :str或None,可选 # 指定输入信号是否在两端扩展,以及如何生成新值,以使第一个窗口段在第一个输入点上居中。 # 这具有当所采用的窗函数从零开始时能够重建第一输入点的益处。 # 有效选项是['even', 'odd', 'constant', 'zeros', None]. # 默认为‘zeros’,对于补零操作[1, 2, 3, 4]变成[0, 1, 2, 3, 4, 0] 当nperseg=3. # padded:bool,可选 # 指定输入信号在末尾是否填充零以使信号精确地拟合为整数个窗口段,以便所有信号都包含在输出中。默认为True。 # 填充发生在边界扩展之后,如果边界不是None,则填充为True,默认情况下也是如此。 # axis :int,可选 # 绘制STFT时频域图 plt.figure(figsize=(12,4)) plt.pcolormesh(t, f, np.abs(nd), vmin = np.min(np.abs(nd)), vmax = np.max(np.abs(nd))) plt.title(title) plt.xlabel('时间(t)') plt.ylabel('频率 (Hz)') if vline: plt.vlines(x=vline, ymin=np.min(fft_amp), ymax=np.max(fft_amp), linestyle='--', colors='r') if hline: plt.hlines(y=hline, xmin=np.min(fft_freq), xmax=np.max(fft_freq), linestyle=':', colors='y') #===保存图片====# if img_save_path: plt.savefig(img_save_path, dpi=500, bbox_inches = 'tight') if xlim: # 图片横坐标是否设置xlim plt.xlim(0, xlim) plt.tight_layout() plt.show()def data_read(file_path): """ :fun: 读取xls数据 :param file_path: 文件路径 :return df: """ df = pd.read_csv(file_path, header=None)[12:] # 第17行开始为加速度数据 df.columns = ['Acc_data'] df = df.astype(float) return dffile_path = r'E:/03-公开数据集/XJTUGearbox-and-XJTUSuprgear-datasets/XJTU_Gearbox/1ndBearing_ball/Data_Chan1.txt'df = data_read(file_path)acc_z_arr= df['Acc_data']df4.1.2 绘制时域图fs = 20480 # 采样频率file_name = r'1ndBearing_Ball.txt'##=====绘制时域数据====##time_img_save_path = file_path.replace('.txt', '时域_.png')plt_time_domain(acc_z_arr, fs=fs, title=file_name, img_save_path=time_img_save_path)4.1.3 绘制频域图fs = 20480file_name = r'1ndBearing_Ball.txt'##=====绘制频域数据====##fft_img_save_path = file_path.replace('.txt', '频域_.png')plt_fft_img(acc_z_arr, fs=fs, title=file_name, img_save_path=fft_img_save_path)4.1.3 绘制时频域图fs = 20480file_name = r'1ndBearing_Ball.txt'##=====绘制STFT时频域数据====##stft_img_save_path = file_path.replace('.txt', '时频域_.png') plt_stft_img(acc_z_arr, fs=fs, img_save_path=stft_img_save_path)4.2 XJTUSuprgear数据集4.2.1 数据读取def data_read(file_path): """ :fun: 读取xls数据 :param file_path: 文件路径 :return df: """ df = pd.read_csv(file_path, header = None) df.columns = ['Column'] # 使用 split 方法分割每行的单元格,expand=True 会将分割后的每个元素作为单独的列返回 df_split = df['Column'].str.split('\t', expand=True) # 将分割后的所有列转换为 float 类型 df_split = df_split.astype(float) # 重置索引,以便将分割后的列与原始 DataFrame 的索引对齐 df_split.reset_index(drop=True, inplace=True) return df_splitfile_path = r'E:/03-公开数据集/XJTUGearbox-and-XJTUSuprgear-datasets/XJTU_Spurgear/0-20-0Hz/spurgear10.txt'df = data_read(file_path)acc_z_arr = df.iloc[:,2].valuesdf4.2.2 绘制时域图fs = 10000file_name = r'spurgear10.txt'##=====绘制时域数据====##time_img_save_path = file_path.replace('.txt', '时域_.png')plt_time_domain(acc_z_arr, fs=fs, title=file_name, img_save_path=time_img_save_path)4.2.3 绘制频域图fs = 10000file_name = r'spurgear10.txt'##=====绘制频域数据====##fft_img_save_path = file_path.replace('.txt', '频域_.png')plt_fft_img(acc_z_arr, fs=fs, title=file_name, img_save_path=fft_img_save_path)4.2.4 绘制时频域图fs = 10000file_name = r'spurgear10.txt'##=====绘制STFT时频域数据====##stft_img_save_path = file_path.replace('.txt', '时频域_.png') plt_stft_img(acc_z_arr, fs=fs, img_save_path=stft_img_save_path)4.2.5 计算转速from scipy import signaldef tacho2rpm(x, fs, TLeveL=1, Slope=1, PPR=1, NewFs=None, Filter=13): time = len(x) x1 = np.arange(0, time, 1) t = x1 / fs xDiff = np.diff(np.sign(x - TLeveL).flatten()) tDiff = t[1:] NewFs = fs if Slope > 0: tTacho = tDiff[np.where(xDiff == 2)] else: tTacho = tDiff[np.where(xDiff == -2)] rpmt = 60 / (PPR * np.diff(tTacho)) rpmt = (rpmt[0:-1] + rpmt[1:]) / 2 tTacho = tTacho[1:-1] # 平滑处理 if Filter > 1: a = 1 b = 1 / Filter * np.ones((1, Filter)).flatten() rpmt = signal.filtfilt(b, a, rpmt) else: pass t = np.arange(0, t[-1] + 1 / NewFs, 1 / NewFs) rpm = np.interp(t, tTacho, rpmt) return t, rpmfile_path = r'E:/03-公开数据集/XJTUGearbox-and-XJTUSuprgear-datasets/XJTU_Spurgear/0-20-0Hz/spurgear06.txt'df = data_read(file_path)##======获取编码器信号时间======##tacho_arr = df.iloc[:,13].valuesfs = 10000length = len(tacho_arr)t = np.linspace(0, length/fs, length)plt.figure(figsize=[12,3])plt.plot(t, tacho_arr)plt.ylabel('幅值')plt.xlabel('时间(t)')plt.title('编码器信号图')##======将编码器信号计算得到转速信号====##t, rpm = tacho2rpm(tacho_arr, PPR=1, TLeveL=4, fs=fs)plt.figure(figsize=[12,3])plt.plot(t, rpm)plt.ylabel('转速(rpm)')plt.xlabel('时间(t)')plt.title('转速-时间图')plt.show()print('最大转速:', np.max(rpm))最大转速:1182.963277659338可见将编码器信号转换至转速后,转速最大为1183rpm,与实际1200rpm很接近。file_path = r'E:/03-公开数据集/XJTUGearbox-and-XJTUSuprgear-datasets/XJTU_Spurgear/15Hz/spurgear00.txt'df = data_read(file_path)##======获取编码器信号时间======##tacho_arr = df.iloc[:,13].valuesfs = 10000length = len(tacho_arr)t = np.linspace(0, length/fs, length)plt.figure(figsize=[12,3])plt.plot(t, tacho_arr)plt.ylabel('幅值')plt.xlabel('时间(t)')plt.title('编码器信号图')##======将编码器信号计算得到转速信号====##t, rpm = tacho2rpm(tacho_arr, PPR=1, TLeveL=4, fs=fs)plt.figure(figsize=[12,3])plt.plot(t, rpm)plt.ylabel('转速(rpm)')plt.xlabel('时间(t)')plt.title('转速-时间图(900rpm)')plt.show()可见将编码器信号转换至转速后,转速为884rpm,与实际900rpm很接近。file_path = r'E:/03-公开数据集/XJTUGearbox-and-XJTUSuprgear-datasets/XJTU_Spurgear/20Hz/spurgear00.txt'df = data_read(file_path)##======获取编码器信号时间======##tacho_arr = df.iloc[:,13].valuesfs = 10000length = len(tacho_arr)t = np.linspace(0, length/fs, length)plt.figure(figsize=[12,3])plt.plot(t, tacho_arr)plt.ylabel('幅值')plt.xlabel('时间(t)')plt.title('编码器信号图')##======将编码器信号计算得到转速信号====##t, rpm = tacho2rpm(tacho_arr, PPR=1, TLeveL=4, fs=fs)plt.figure(figsize=[12,3])plt.plot(t, rpm)plt.ylabel('转速(rpm)')plt.xlabel('时间(t)')plt.title('转速-时间图(1200rpm)')plt.show()可见将编码器信号转换至转速后,转速为1177rpm,与实际1200rpm很接近。参考资料:https://blog.csdn.net/m0_37262671/article/details/128727703(Python 信号处理——阶次分析(常规实现及另类实现))编辑:李正平校核:陈凯歌、赵栓栓、董浩杰、曹希铭、赵学功、白亮、陈少华该文资料搜集自网络,仅用作学术分享,不做商业用途,若侵权,后台联系小编进行删除来源:故障诊断与python学习

    有附件
    未登录
    还没有评论
    课程
    培训
    服务
    行家
    VIP会员 学习 福利任务 兑换礼品
    下载APP
    联系我们
    帮助与反馈