首页/文章/ 详情

顶刊开源代码分享|方差差异表示:一种用于故障迁移诊断的振动特征引导的分布对齐度量

2小时前浏览14

近年来,迁移学习的研究受到越来越多的关注,特别是在滚动轴承和齿轮故障诊断领域。其中,基于最大均值差异(Maximum Mean Discrepancy,MMD)的方法多数迁移方法都使用到了均值来度量分布差异,本文作者钱泉博士提出了一种新的基于振动特性的分布对齐度量来增强差异表示能力。该论文发表于Mechanical Systems and Signal Processing 期刊,非常值得阅读!

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

代码链接

Tensorflow框架: 
https://qinyi-team.github.io/2024/05/Variance-discrepancy-representation/
Pytorch框架: 
https://github.com/liguge/Variance-discrepancy-representation-pytorch
如果下载不了代码,文末有免费获取方法。

1 论文基本信息

论文题目Variance discrepancy representation: A vibration characteristic-guided distribution alignment metric for fault transfer diagnosis

论文期刊Mechanical Systems and Signal Processing

Doihttps://doi.org/10.1016/j.ymssp.2024.111544

论文时间:2024年

作者Quan Qian, Huayan Pu, Tianjia Tu and Yi Qin

所属机构:

State Key Laboratory of Mechanical Transmission, Chongqing University, Chongqing 400044, People’s Republic of China; 
College of Mechanical and Vehicle Engineering, Chongqing University, Chongqing 400044, People’s Republic of China

第一作者简介:钱泉,重庆大学机械工程专业博士研究生,中共党员,重庆大学在校生最高荣誉——学生年度人物获得者,长期从事于机械装备故障诊断与预测性维护,共发表国际知名SCI论文15篇,其中以一作发表中科院一区9余篇、中科院二区1篇、IF>10高水平论文3篇,谷歌学术累计被引380余次,累计影响因子110+;已经申请发明专利14项,其中以学生一作授权中国专利4项、公开中国专利5项和英国专利1项。

2 目录

1 论文基本信息
2 目录
3 摘要
4 引言
VDR分布对齐度量
5.1 对于MMD重新思考
5.2 VDR的定义
5.3 经验VDR
    5.3.1 有偏VDR
    5.3.2 无偏VDR
5.4 Student核函数
5.5 VDR模型
6 实验研究
6.1 基于轴承公开数据集的实验验证
6.2 基于2MW和3MW风电涡轮机轴承的实验验证
7 总结
注:本文只选中原论文部分进行分享,若想拜读,请下载原论文进行细读。
小编能力有限,如有翻译不恰之处,请多多指正~

3 摘要

基于最大均值差异(Maximum Mean Discrepancy, MMD)的领域自适应模型已被应用于故障迁移诊断。MMD使用希尔伯特空间中的均值来度量分布差异,但在某些情况下不能准确反映分布关系。同时,MMD的作用机理还有待于进一步研究。为此,提出了一种新的MMD方法,并从空间映射的角度对MMD的工作原理进行了理论探讨。本文提出了一种基于振动特性的分布对齐度量——方差差异表示(Variance Discrepancy Representation, VDR),该度量方法能够表达方差信息,以增强差异表示能力。本文建立了有偏和无偏的经验VDR,并推导了这两种统计量与真实的分布偏差之间的误差界,以保证VDR的可靠性。此外,设计了一种新的Student核函数,以保证VDR的鲁棒性和泛化能力。最后,构建了基于Student核的VDR故障诊断模型。在3个轴承数据集和涡轮机齿轮箱实际振动信号上的实验结果表明,与典型的、先进的故障迁移诊断方法相比,所提出方法具有优越性

4 引言

深度学习的成果在很大程度上依赖于足够的标签数据和训练数据集与测试数据集之间的相同分布假设,这在真实的工程中无法实现。由于我们不允许机器长时间工作在故障或接近故障的状态,这会导致故障数据的收集是非常费力的。此外,定期维护也会加剧故障数据的缺乏。由于工作条件的变化、机械结构的不同、噪声环境的特殊性等因素,也不可避免地会产生分布差异。因此,一个优秀的故障诊断方法,应当需要很少或根本没有标签数据。

鉴于上述问题,基于领域自适应(Domain Adaptation, DA)的诊断方法提供了一种很有前景的解决方案,它可以通过消除两个领域之间的差异来将源域的先验知识迁移到不完整的目标域,以提高目标域的诊断准确性[11-13]。根据目标域标签信息的可用性,DA可以概括为三种类型:无监督DA,半监督DA和监督DA,其中无监督DA是最具挑战性和最受欢迎的。研究者探索了两个域的标签空间之间的关系的组合,封闭DA [14],部分DA [15,16],开放DA [17]和其他多个DA任务[18]。此外,根据目标和源域的数量,还生成了多目标封闭DA [19],多源DA [20,21]和其他几个变体[22]。许多学者开始关注细粒度的类条件分布对齐(Conditional Distribution Alignment, CDA)[23],以增强边缘分布对齐(Marginal Distribution Alignment, MDA)和CDA的域混淆能力。此外,许多联合分布对齐(Joint Distribution Alignment, JDA)的智能诊断算法,提出了更好地减小分布差距。此外,还建立了一些改进的JDA机制,以完善基于贝叶斯理论,从而获得更高的任务得分[18,24]。此外,为了提高类内紧致性和类间可分性,出现了基于判别度量学习的迁移故障诊断方法[25]。基于DA的诊断方法虽然具有很强的诊断精度提高能力,但每次新的诊断任务都需要从头开始训练,不能满足实际诊断的实时性要求。因此,提出了基于通用域泛化(Domain Generalization, DG)的方法来解决这个问题[26],其中目标域数据在训练阶段不可用。与DA任务类似,根据数据主题的数量来研究各种DG任务。

显然,上述所有迁移学习方法成功的关键在很大程度上依赖于一个优秀的差异度量指标。通用度量可分为基于显式度量的分布差异和基于隐式度量的分布差异。前者主要包括MMD[27]和相关性对齐(Correlation Alignment, CORAL)[28],可直接用于评估数据集偏倚。后者主要由  [29]和  [30]组成,它们由对抗机制间接执行[31,32]。  和  的测量原理分别基于单分类器判别和双分类器异或运算。
与基于度量的分布差异相比,基于对抗机制的方法难以达到纳什均衡,导致损失振荡和不稳定。MMD是显式分布对齐度量中最常用的,因为它具有出色的差异表示能力。然而,由于它是基于测量的差异的平均值,这导致在一些故障诊断案例它不能准确地反映分布的差异关系。具体地说,一维振动信号通常用作实现端到端诊断的输入,并且它们沿x轴近似沿着对称。通过对公开数据集不同正常轴承样本的概率密度函数可视化后可以看出,方差比平均值更能反映分布差异。虽然MMD可以通过空间映射扩大分布差异,但低维空间的差异表示能力差仍然限制了它的应用。
针对上述问题,本文提出了对MMD的新认识,并通过从低维到高维的空间映射,从理论上探讨了MMD的工作原理。首先在高维空间中构造一组能够表达方差信息的基。然后通过这些基向量扩展出一个希尔伯特空间。其次,基于核技巧提出了一种新的振动特征引导的分布对齐度量——VDR,以增强差异表示的能力,从而更好地实现领域混淆。此外,考虑到采集的振动监测信号通常服从长尾分布,甚至可能混杂一些异常样本,设计了一种新的Student核函数,以保证VDR的鲁棒性和泛化能力。最后,构建了基于VDR的DA故障诊断模型,实现了包括实验室轴承和实际风电涡轮机齿轮箱的故障迁移诊断。主要贡献和创新如下:
  • 本文从空间映射的角度对MMD的工作原理进行了理论上的探讨,为分布式一致性度量的发展奠定了基础。
  • 为了提高分布差异的表征能力,提出了一种基于自定义再生核Hilbert空间的振动特征引导VDR分布对齐度量。此外,推导了有偏和无偏的经验VDR统计量,并给出了这两种统计量与真实的分布差异的误差界。
  •  针对目前常用的高斯核函数对具有长尾离散性的异常样本鲁棒性差的问题,提出了一种新的Student核函数。

5 VDR分布对齐度量

5.1 对于MMD重新思考

图2 空间映射的实例说明

MMD中的“最大值”一词来源于空间映射,它将低维样本空间中的数据点映射到无限维Hilbert空间中的数据点,然后计算两域的平均差异表示。为了直观地展示空间映射的物理意义,图2中示出了将二维空间映射到三维空间的空间映射。通过空间映射,三维空间中的数据点比二维空间中的数据点获得更好的差异表示。

其次,从理论上探讨了MMD中空间映射的工作原理。设  是一个Hilbert空间,  是它的共轭空间,对于每个有界线性函数  ,存在唯一的  使得[37]:
 根据上式可以知道,  中的任意函数都可以表示为在基上的投影,其中  和  可以看作是无限维向量。现在,如何找到  中的基集成为一个关键问题。核函数  具有简单的数学运算性质,可以通过参考文献[38]满足上述要求:   基于上式,我们可以用  作为基的集 合来生成Hilbert空间  ,称为再生核Hilbert空间(RKHS)。因此,RKHS中的函数  可以表示为:   因此,低维原始样本空间中的数据点x通过函数被映射到无限维RKHS中,    意味着内核有一个固定在x的变量。核函数可以将低维样本空间的数据点转化为RKHS空间的数据点,从而实现空间映射。

MMD通过空间映射获得RKHS上两域的样本映射的平均差异表示。进而得出不同核函数所生成的RKHS具有特定物理意义的结论,为研究其他统计量的差异表示提供了理论保证和良好的指导。

5.2 VDR的定义

如引言部分分析,故障监测信号的方差表示比均值表示更有意义。虽然MMD可以通过高维空间映射来提高线性可分性,但它仍然存在差异表示不佳的风险。因此,我们探索了RKHS中一种新的分布对齐度量,称为VDR。
通过上一小节的结论,可以通过以下基    构造一个新的RKHS    ,它可以反映方差信息:    
然后,VDR度量定义如下:   
VDR的平方用于方便地计算公式(14):    
根据两个希尔伯特空间的张量积    仍然是另一个希尔伯特空间    ,通过内积的双线性可以得到以下等式:  
其中,    和    ,从上式中可以看出,VDR的工作特性也像MMD一样简单。
5.3 经验VDR统计量
5.3.1 有偏VDR统计
给定m个数据样本  ,并且在  中有n个数据样本  ,则有偏VDR是两个V统计量和样本平均值之和。   

根据VDR的工作特性和  可以得到:   

类似于  以及  可以分别表示为:   

可以看出,这些式子完全依赖于VDR的数学性质。这也揭示了为什么我们在方程中使用张量积,而不是直接定义方差形式(点积)。
5.3.2 无偏VDR统计

无偏VDR统计量是两个U统计量和一个样本平均值的总和。   

应当注意,考虑VDR的工作特性中的平均值,上式减去一个自由度。

尽管无偏VDR统计与有偏VDR统计相比不具有系统误差,但以下不等式可以成立:   

因此,当数据样本相对充足时,建议使用有偏VDR统计量来衡量两个域之间的分布差异。反之亦然,当数据样本有限时,更推荐无偏VDR统计量,以减少经验误差。

作者在此处进行了有偏和无偏统计量的经验误差界理公式推导,建议读者下载文章仔细阅读哦!

5.4 Student核函数
从上一章节中经验VDR统计量的定义,可以看出核函数    对于VDR的差异表示很重要。常用的高斯函数对异常样本和长尾分布的鲁棒性较差。然而,由于噪声干扰、人为操作误差等因素的影响,这种情况在实际中总是存在。

图3 模拟信号的分布拟合: (a) N(0, 1); (b) N(0, 1)+N(10, 0.1)
为了更好地说明问题,图3绘制了模拟信号的分布拟合,其中信号用高斯分布  模拟,异常干扰用  模拟。从图3(b)中可以观察到,当信号离开干扰时,Student分布比高斯分布更有鲁棒性。
为此,Student内核函数由Student分布设计和激励,即:   
其中,    是自由度,    是伽马函数,可以表示为:   显然,当    固定时,可以精确地计算    。
5.5 VDR模型

图4 基于VDR的诊断模型

如图4所示,基于VDR的DA诊断模型采用一维卷积神经网络作为主干网络来提取故障特征。为了节省计算资源,所有的优化损失都放在最后一个全连接层。
本文研究的是一般情境,即无监督域自适应,其中只有源域数据有标签。SoftMax交叉熵损失在源域上工作,通过监督学习获得区分特征。提出的有偏VDR分布对齐方法也就是VDR损失来缩减两域之间的差距。    

6 实验研究

6.1 基于轴承公开数据集的实验验证
作者使用了CWRU,JNU和SEU三个轴承公开数据集,以及几个常用的基于分布对齐度量的智能诊断模型被用作比较方法来评估VDR的有效性和优越性,其中包括基于    距离的DANN [31],基于    距离的MCD [32],基于CORAL距离的DCORAL [46]和具有高斯核的基于MMD距离的DDC [47]。
6.2 基于2 MW和3 MW风电涡轮机轴承的实验验证

图11 实际2 MW风力涡轮机的传动结构

图13 实际3 MW风力涡轮机的传动结构

为了进一步评估所提出的VDR分布对齐度量的有效性,作者使用了2 MW风力涡轮机齿轮箱轴承(Wind Turbine Gearbox Bearing, WTGB)和3MW风力涡轮机变速齿轮箱轴承的实际振动信号进行验证。

作者在文中进行了充分的对比实验和消融实验,建议读者下载文章仔细阅读哦!

6.3 局限性和未来工作

所提出的VDR度量与Student核的验证,只有封闭的迁移诊断任务。在实际工程中,源域和目标域之间的标签空间关系是不可预测的,也可能是开集和部分集。另一方面,VDR优良的差异表示能力主要取决于方差统计量。然而,方差统计量不一定适用于电流、电压、温度等其它监测信号,这两个局限性极大地限制了VDR的工程价值和应用潜力。在未来的工作中,我们将针对其他监测信号的特点,设计一种更通用的分布对齐度量,并将该度量与基于均值的度量相结合,以增强故障迁移诊断任务中的差异表示能力。

7 总结

本文从空间映射的角度,对MMD的工作原理进行了理论探讨。然后,提出了一种新的VDR分布对齐度量,该度量能够表达方差信息,以提高差异表示能力,实现域混淆。在有限样本条件下,给出了有偏和无偏VDR统计量及其误差界,以供真实的应用。此外,提出了一种新的Student核函数,以帮助VDR消除异常样本的干扰,获得良好的鲁棒性。基于Student核的VDR模型在6个交叉方位迁移任务中的平均诊断准确率超过87%。最后,利用实验室轴承数据集,将该方法成功应用于实际涡轮机齿轮箱轴承故障诊断。实验表明,该方法比其他分布式对齐度量方法具有更强的迁移诊断性能。值得注意的是,VDR可以很容易地扩展到其他DA任务中,例如多源DA、开放DA和部分DA。

免费获取方法

点击1次文末广告,对本文点赞+在看,发送截图至后台,即可免费获得链接(代码+论文)。由于是人工发送,不一定及时发送,最晚24h内发送。




 
客官,球球再点个广告,再走吧~

编辑:曹希铭

校核:李正平、陈凯歌、赵栓栓、赵学功、白亮、陈少华、任超

该文资料搜集自网络,仅用作学术分享,不做商业用途,若侵权,后台联系小编进行删除

点击左下角阅读原文,即可在线阅读论文。


来源:故障诊断与python学习
ACTMechanicalSystem振动旋转机械通用UGpython理论传动
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-10-14
最近编辑:2小时前
故障诊断与python学习
硕士 签名征集中
获赞 56粉丝 59文章 132课程 0
点赞
收藏
作者推荐

机械故障诊断基础学习 | 一文读懂傅里叶级数和傅里叶变换,采样定理以及FFT

背景及摘要很多初学者刚接触故障诊断可能觉得很简单,套用深度学习模型进行训练,分类准确率很容易就达到99%。但是在工作或者在解决实际问题时,深度学习方法几乎是用不上(至少目前是这样)。 最近在读时献江老师等人的《机械故障诊断及典型案例解析》这本书时,发现其内容真的很丰富,故障诊断方法讲解的详细全面,且有实际丰富的案例,更加容易消化理解各方法特点及其应用场景。 这期给大家分享时域信号是如何转换到频域中的,在实际应用中又是如何将离散信号转换成频谱的。通过阅读本文,你将会学到傅里叶级数、傅里叶变换、采样定理等知识,还会了解到什么是频率混叠、频率泄露、栅栏效应。 参考资料:书籍:机械故障诊断及典型案例解析(第2版,时献江) 目录 1. 傅里叶级数 1.1 傅里叶级数原理及典型信号频谱特点2. 典型信号的傅里叶变换 2.1 单位脉冲信号( 函数) 2.1 周期单位脉冲信号(梳妆 函数)3. 信号的采样 3.1 连续信号的采样 3.2 采样定理 3.3 采样点数和频率分辨率4. 离散傅里叶变换(DFT) 4.1 DFT的理论公式及计算过程5. 快速傅里叶变换(FFT) 5.1 FFT方法提出背景 5.2 FFT计算案例摘要随机信号的时域分析只能提供有限的时域特征信息,若想进行信号的精密分析与诊断,需要更进一步的频谱分析。因为故障发生时往往会引起信号频率成分的变化,而且很多故障特征频率也是可以计算的,通过监测该频率的幅值变换规律,就可以监控故障的发展过程。频谱分析的理论基础是傅里叶变换,傅里叶变换包括傅里叶级数和傅里叶积分。本章主要介绍傅里叶级数及典型信号的傅里叶变换、采样定理以及DFT的过程。 通过阅读本文将了解到(或带着以下疑问去阅读) 频域是什么,频域包含哪些信息?时域是怎么转换到频域的,时域转换到频域的原理是什么?连续信号转换到离散信号有什么要注意的吗? FT、DFT、FFT之间是什么关系?时间分辨率和频率分辨率之间的关系?直流分量是什么,会有什么影响? 1、傅里叶级数1.1 傅里叶级数原理及典型信号频谱特点(1) 基本原理给定一个周期函数 ,在一定条件下,可以根据如下公式展成傅里叶级数。 (1)式中 ——基频,Hz, ——周期,s。系数 和 用下面的公式进行计算 ,即: (2) (3) (4)式中, 是 的均值,称为直流分量, , 为交流分量,也称谐波分量。在数学上,傅里叶级数的概念是任何一个周期函数都可以用无限个三角函数去拟合。在信号处理领域的物理意义为:对任何一个周期信号都可以分解成直流成分和无限个不能再分解的简谐信号(谐波分量)的叠加,或称任意周期信号中包括的频率成分如式(2)和式(3)所示。工程信号处理的一个主要任务就是分析和处理复杂信号中所包含的频率成分,这可以由傅里叶变换来完成。利用和差化积公式,我们可以得到更简洁的傅里叶级数表达式: (5)于是,幅值 和相位 ,可分别表示为: (6) (7)式中, 也可以采用复数描述傅里叶级数,根据欧拉公式有: (8) (9)代入式 (1) 式变为: 即: (10)式中, 。此时出现了负频率,这是由于用复数表示 , 函数的结果。下面求系数 : 可见 , 是一个复数量。由于 本身可以表示信号的幅值和相位,所以 称为有限区间 上信号 的离散频谱。 其中, 称为幅值谱,为复数谱的幅值,为实谱幅值 的一半;, 称为相位谱。(2) 周期信号傅里叶级数谱的特点根据式 (5) 可以绘出傅里叶级数的幅值谱图如图1所示。可见,周期信号的频谱是离散的,每条谱线只出现在基波频率的整倍数上,不存在非整倍数的频率分量,随着谐波次数的增加,谐波幅值是逐渐下降的。根据这些特征,很容易在频域内判别信号是周期还是非周期的。图1 傅里叶级数的幅值谱图例如,图2(c)中的两个周期信号的频率分别为2Hz和3Hz, 其合成显然为周期信号,且基频为1Hz 。图2(d)为其计算频谱图,并没有图1的特征,其实,此时如果认为基频幅值为零,其仍然具有周期函数的主要频谱特征。另外,也可对图3(c)中的合成信号进行频谱分析,结果如图3(d)所示,显然图中两个信号频率不成比例关系,虽然其时域波形很像周期信号,但是其谱特征为非周期信号(实际为准周期信号)。图2 两个正弦信号的叠加(有公共周期)图3 两个正弦信号的叠加(无公共周期)(3) 典型信号的傅里叶级数谱傅里叶级数的典型例子是方波信号[见图4(a)],方波的傅里叶级数表达式为: 图4 方波及其频谱方波的频谱特点是只有奇次谐波。根据方波信号的频谱图4(b) ,也很容易判断其为周期信号。2、典型信号的傅里叶变换2.1 单位脉冲信号 ( 函数) (1) 函数的定义 (11)如图5(b)所示, 函数可以看作是图5(a)所示的矩形函数当 的极限。 图5 单位脉冲函数(2) 函数的性质① 函数的筛选性质a. 任何一函数 与 相乘的积分值等于此函数在零点的函数值 。 b. 任一函数 与具有时移 的单位脉冲函数 乘积的积分值是在该时移点上此函数的函数值 : 根据这些性质可以看到函数 与处于时间轴上某点的单位脉冲函数相乘后的积分都等于该点的函数值,而其他所有点皆为零。这样,就等于通过这一处理将任意点的函数值筛选出来。这一特性后面被用来描述信号的采样过程。 ② 函数的卷积性质a.任一函数 与 的卷积仍是此函数本身: (12)b.同理,任一函数 与具有时移 的单位脉冲函数 的卷积是时移后的该函数 : (13)也可以采用图6所示的图解方法描述,一个在坐标原点对称的矩形函数 与具有时移的两个单位脉冲 和 作卷积,其结果是将 移至在这两个单位脉冲函数所在位置上,即一函数与时间轴上任一点的单位脉冲函数卷积,其结果是将该函数原封不动地搬移到单位脉冲函数所在的时间轴位置。 图6 任一函数与 函数的卷积(3) 函数的频谱 函数时频域波形及对应频谱如图7所示,可知其在整个频域上都有分布。 图7 函数的频谱(4) 函数的物理意义 函数也叫冲击函数,是用以把一些抽象的不连续的物理量表示成形式上连续且能进行各种数学运算的广义函数。例如,它可以把集中载荷表示为分布载荷(分布面积为零,载荷集度为无穷大),把理想的碰撞冲量表示成一般冲量(作用的时间为零,作用力为无穷大 ),可以作为一种理想的脉冲激励函数。例如,采用敲击实验法测量叶片的共振频率,就是利用脉冲激励原理实现的。由锤敲击产生的冲击脉冲相当一个 函数,其频谱在理论上是一根直线,也就是在所有的频段具有相同的能量,称为白噪声。在与叶片的固有频率交叉处,会产生共振,引起系统的自由衰减振动,检测这个振动频率就是被测叶片的固有频率。 反之,直流信号的频谱是 函数,所以当信号中含有直流成分时,在频谱中的0频率附近就会有较高幅值的谱峰 ( 函数)出现,这会严重影响其他计算结果的显示比例,而且处于0点附近,不易被察觉,易产生误判,如图8(a) 所示。所以,如前所述,信号处理前一般都要进行均值化处理。零均值化处理后的频谱如图8(b) 所示,可见,简谐信号的幅值已变为最大值,说明 函数的影响被剔除。图8 含有均值和不含均值的简谐信号的频谱 2.2 周期单位脉冲信号 (梳状 函数)(1) 定义周期单位脉冲序列 如图9(a)所示,其解析表达式为: (14)式中, 为周期脉冲序列 的周期。图9 周期单位脉冲序列及其频谱(2) 梳状 函数的频谱频谱图如9(b)所示,周期单位脉冲序列的频谱仍是一个周期单位脉冲序列,其幅值为时域周期 的倒数, 即 ;频谱的周期也是时域周期的倒数。梳状函数主要用于从数学上描述信号的采样过程。3、信号的采样 在信号处理领域,计算机只能处理离散的时间序列函数,因此计算机需要把连续变化的信号变成离散信号后再进行相关的处理与运算。3.1 连续信号的采样一个连续时间信号 的采样过程如图10所示,图10(b)中的采样开关称为采样器,在采样器作用下的实际采样信号用 表示。信号处理系统的采样一般多为定时等间隔周期采样,采样间隔为 ,此时,当 时刻,采样开关闭合,采样器的输出恒等于 采样开关闭合时间为 ,到达 时刻,采样开关打开,采样器的输出为零。这样,在采样器的作用下就得到了图10(c)所示的采样器的输出信号 。图10 连续时间信号的采样过程梳状 函数 可以作为理想采样开关,来描述理想的采样过程。从数学上讲,采样信号 可以看成 和 的乘积,即: 从物理意义上,上述描述的理想采样过程可理解为脉冲调制过程:输入信号 作为调制信号,单位脉冲序列 作为载波,经过理想采样开关,得到理想采样序列 ,如图11所示。图11 理想采样过程3.2 采样定理信号的采样确定了连续时间信号 的采样表达式 ,那么,采样间隔 必须符合什么样的条件时, 才能保留有原连续时间信号 的所有信息。香农(Shannon)采样定理解决了此类问题。设连续时间信号 ,其傅里叶换为 , 频谱中的最高频率成分为 ,对连续时间信号 采样,采样频率为 ,采样后的离散时间信号为 ,如果满足条件 ,可以从离散时间信号 中恢复原连续时间信号 ,否则,会发生频率混叠,从离散信号 中无法恢复原连续时间信号 。我们可以用下面的图解说明这个过程。假设 为连续函数, 为无穷脉冲序列,其采样间隔为 ,波形如图12(a), (b) 所示。将 与 相乘即可以得到离散的 信号,其波形如图12(e) 所示,此过程称为采样,也称为时域离散, 叫做采样函数。可以利用卷积定理来讨论采样在频域中的变化过程。 和 的傅里叶变换分别表示于图12(c) 和(d) 中。依据卷积定理,图12(f)中的图像应是图12(c)和(d) 的频域函数 的卷积。由于 是无限个 函数,所以根据函数卷积性质,只需将 移到每个 函数位置上即可,可见离散后的信号的频谱是一个周期函数,只需观察其中的一个周期即可,它与连续函数 的傅里叶变换相同。图12 波形采样过程 (普通采样频率) 图13 波形采样过程(较低采样频率)如在上例中,加大采样间隔 (即采样频率变小),其结果如图13所示。可见由于增大了 ,频域采样函数 变得更密,因为频域脉冲函数的间隔减小,它们与频谱 的卷积就产生了波形的相互重叠,如图13(f)所示,函数的傅里叶变换由于采样引起的这种畸变称为混叠效应。混叠效应产生的原因在于采样间隔 太大, 也就是采样频率过低。如何才能不产生这种现象呢?在图14中可以看出,当 脉冲函数的频率间隔小于 ,即 ,卷积便出现重叠现象,这里 是连续函数 的最高频率成分。图14 不产生混叠现象时的频谱如果令 , 称为采样频率, 不发生混叠效应的公式为: (15)即: 如果认为信号中的最高频率 等于 的话, 则有: (16)这就是香农采样定理。实际工程中,取: 对未知的信号最高频率成分 ,可由信号的低通滤波器的截止频率产生。 3.3 采样点数与频率分辨率信号分析处理过程中,首先要确定的是采样频率 ,采样频率应符合采样定理。其次要确定采样点数 和频率分辨率 。采样点数受到快速傅里叶变换( FFT) 变换的限制,一般情况下,只能取1024或2048 这类 的点数。采样频率 、采样点数 和频率分辨率 之间的关系如下: (17)式中, 为采样总时间长度(单位为s); 为采样间隔。频率分辨率决定了频谱的分析精度,要想提高频率分辨率(降低 ),应尽量减少采样频率 ,或增加采样点数 。例,已知某信号的最高频率 ,希望达到的频率分辨率 ,试选择采样频率 、采样长度 及采样 。采样频率 ,取: 频率分辨率 ,采样时间长度 为: 采样点数 ,于是: 此时, 应取 应取1024,采样频率为 : 由于采样长度未变,此时,频率分辨率仍然不变,且 符合要求。4、离散傅里叶变换(DFT) 离散傅里叶变换 (Discrete Fourier Transform, DFT)是一种用计算机计算傅里叶变换的方法。4.1 DFT的理论公式及计算过程连续时间信号 经采样后得到长度为 的时间列 ,此时频谱 仍是连续的,但是,实际运算中只能对有限项进行计算,因此必须对连续的频率轴离散化,以便与时域采样信号相对应。根据DFT的定义,一个连续函数的DFT求解过程需要三步:时域离散、时域截断和频域离散,时域离散的过程已经在3.1中讨论过了,这里仅简单介绍,重点讨论时域截断和频域离散后两步过程。(1) 第一步:时域离散如图15(a)~(c)所示,对 [图15(a)]进行波形采样,即将 乘以采样函数 [图15(b)],采样间隔为 。图15(c)表示采样结果和它的傅里叶变换。这是对原始波形的第一次修改,一般将这一步修改叫做时域离散。由前面的3.2可知,采样后多少会产生一些混叠误差,可遵循采样定理来减少这一误差。(2) 第二步:时域截断采样后的函数 ,仍有无穷多个样本值,不适合计算机计算,所以必须将采样后的函数 进行截断,使之为有限个样本点。图15(d)表示了截断函数(矩形窗函数)和它的傅里叶变换。 为截断函数的区间宽度。图15(e)表示截断后有限宽度的离散时间函数,其傅里叶变换是带混叠效应的频率函数与截断窗函数的傅里叶变换作卷积。它的影响已在图15(e)中表示出来,使其傅里叶变换结果出现了皱褶(为了清楚起见,图中有意夸大了),称为频率泄漏。要想减少这种频率泄漏,可将截断窗函数的长度尽可能选得长些,因为矩形函数的傅里叶变换是 ,若增加截断函数的长度 ,该函数就越近于 函数。这时,在频域的函数卷积中由于截断所引起的皱褶(或误差)也就越小。一般总希望截断函数的长度尽可能选得长些,但是,由于计算机内存的限制,不可能无限长,因此,频率泄漏现象总是存在的,这在后面我们还要讨论。这是对原信号傅里叶变换的第二次修改,称为对离散波形的时域截断,时域截断会产生频域泄漏误差。 图15 DFT过程的图解说明(3) 第三步:频域离散(或称时域延拓)将原始波形修改到图15(e)还不行,因为频域函数还是连续的,仍不能用计算机进行频域的计算。所以还必须用频域采样函数 把频域函数离散化。根据式(17),频率离散的间隔 应为 。我们知道,时域采样引起频域的周期化。那么,在频域上采样的结果也会引起时域函数的周期化。当用图15(f)所示频域采样函数 与图15(e)所示的频域函数相乘时,相当于图15(f)所示时域函数 与 相卷积,由于 也是梳状 函数,相当于把 平移至各个 函数处,如图15(g)的 所示,这引起了时域函数的周期化,称为时域延拓。为了保证时域延拓时周期函数能够首尾相接,频域采样间隔 必须是窗长度 的倒数。频域采样也会引起一种误差,称为栅栏效应。我们可以把频域采样函数出现的位置想象成光栅的一根线,用其与原始信号相比,只有光栅线位置上的信号能被看到,其他都被栅栏挡住了,所以称为栅栏效应。与时域信号不同,频谱多呈函数的特性,所以很小的栅栏效应就会引起很大的幅值误差。解决栅栏效应的办法就是减少 的值,即减少采样频率,或加长时域截断窗 的长度,但这些也都是有限制的。因此,栅栏效应也总是多少存在的。图15(g)为最终的变换结果,可见,离散里叶变换相当于将原时间函数和频域函数二者都截断并修改成周期函数。其中中间的 个时间采样值和 个频域采样值为真值其余均为周期化产生的。或者说,为了进行傅里叶变换,DFT方法用长度为 矩形函数截取任意一段非周期函数,将其左右时域延拓后,形成一个新的周期为 的周期函数,然后对其进行傅里叶变换,根据傅里叶级数的特点,此时信号的基频 即为频谱信号的频率分辨率。值得一提的是,当采用计算机计算傅里叶变换时,得到的频谱并不在图15(g)所示的位置。而在图16所示的位置。当频谱的离散时间序列为 时,其中 为正频率部分,根据频谱的延拓性, 部分其实为负频率部分,或者说是右边第一个延拓谱的负频率部分。不管怎么说,由于实数的频谱是正负频率对称的,因此,只有前一半的计算点( 点)有意义。图16 DFT运算频谱的实际位置 5、快速傅里叶变换(FFT) 5.1 快速傅里叶变换(FFT)的方法提出背景FFT其是一种高效快速计算DFT的算法。对于 点的时间序列 的直接计算DFT,需要进行 次复数乘法和 复数加法的运算。已知一次复数乘法等于四次实数乘法,一次复数加法等于两次实数加法。因此,对大的 来说(数据处理中一般取 =1024),这是一个相当大的运算量。所以,虽然早就有了DFT理论及计算方法,但因计算工作量大、计算时间长,限制了实际应用,迫使人们想办法提高对DFT的计算速度。1965年,美国学者库利(Cooly)和图基(Tueky)提出了快速算法,即FFT(Fast Fourier Transform,FFT)算法。基于FFT总的计算量为 次,相对直接DFT减少次数为 ,可见计算次数减少一半以上。5.2 FFT计算案例对一个时间函数 进行分析,其中信号频率 采样频率 ,采样点数 点,计算结果如图17所示 图17 FFT运算结果可见,在图17(b) 点频谱图上除了10Hz 处的谱峰外,还有 90 Hz 谱峰,这是10Hz 的负频率成分,即被测10Hz信号的幅值轴对称成分,因此 FFT 的运算结果只取前 点即可,即图 7(a) 所示的 点频谱图是正确的。## 导入包from matplotlib import pyplot as pltfrom matplotlib import rcParamsimport numpy as npimport pandas as pdconfig = { "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(mg)', 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) 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.subplot(1,2,1) 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() ##=====双边频谱图====## plt.subplot(1,2,2) plt.plot(fft_freq[0: int(len(t))], fft_amp[0: int(len(t))], 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() return fft_freq, fft_amp fs = 100 # 采样频率f = 10 # 模拟正弦信号频率time = 10.24 # 采样时长t = np.linspace(0, time, int(time*fs))data = 10*np.sin(2*np.pi*f*t) plt_time_domain(data, fs)fft_freq, fft_amp = plt_fft_img(data, int(time*fs)) 注意,幅值为6点多,与10相差了一些,这是因为时域截断时没有截到整周期,导致出现了频率泄露,因此幅值降低了。可以试试把采样时长设置为10s,这个时候幅值接近10,即频率泄露很轻了。 6、总结 频域是什么,频域包含哪些信息?在实际应用场景中,很多信号都为周期信号,如旋转机械振动、交流电流信号。这个周期其实也等同于频率,把这个周期信号用频率、幅值和相位进行描述,就是到频域了。 时域是怎么转换到频域的,时域转换到频域的原理是什么?傅里叶级数告诉我们,任何一个周期函数都可以用无限个三角函数去拟合。时域信号通过分解成傅里叶级数,即一个时域信号是由哪些个三角函数组合,把它给找出来,这个过程就是傅里叶变换。连续信号怎么转换到离散信号,有什么要注意的吗?因为计算机只能离散信号,所以需要将连续信号离散化。连续信号经过等周期的定期采样,得到离散信号。信号离散化需要满足采样定理,即采样频率 需要大于2倍信号中最大频率 。 FT、DFT、FFT之间是什么关系?FT,傅里叶变换,是一种将信号从时域转换到频域的理论,研究的主要是连续信号。DFT,离散傅里叶变换,由于工程应用需要,计算机只能处理离散信号,因此DFT主要是处理离散信号转换至频域。FFT,快速傅里叶变换,由于DFT直接计算比较复杂,计算工作量大,因此提出一种能提升计算效率的算法,即FFT。频率混叠、频率泄露分别是什么?当采样频率 小于2倍信号中最大频率 ,实际频谱中的高频部分会出现叠加,即频率混叠。在DFT时,需要用一个窗口截取信号,该窗口较小,或这窗口没有截取到周期部分时,导致在时域延拓时,信号首尾没有对接上,在频谱上出现了其它额外的频率成分,即出现了频率泄露。 直流分量是什么,会有什么影响?当信号中有直流部分,如 中1就是直流部分。当信号中含有直流成分时,在频谱中的0频率附近就会有较高幅值的谱峰出现,这会严重影响其他计算结果的显示比例。 编辑:李正平审核、校对:陈凯歌,赵栓栓,曹希铭,赵学功,白亮,陈少华如需转载,请后台联系作者说明:部分图片来源网络,若有侵权,烦请联系处理来源:故障诊断与python学习

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