一定用得到的时频分析方法!广义S变换、小波变换、短时傅里叶变换(STFT)、Wigner-Ville 分布,直接运行!

适用平台:Matlab2020版本及以上

在实际应用中,时频分析通常与机器学习/深度学习技术结合,以提高故障识别的性能。时频分析可以捕捉信号在时间和频率上的瞬时变化,有助于检测到与故障相关的瞬时特征,如脉冲、振动或其它突变。这对于处理非平稳信号和快速变化的故障非常关键,下面对四种时频分析方法进行介绍:

短时傅里叶变换(STFT):STFT基于傅里叶变换,将信号分为多个短时窗口,然后对每个窗口内的信号进行傅里叶变换。通过在不同时间位置上应用傅里叶变换,可以得到信号在时间和频率上的局部特征。其频谱是通过滑动时窗来计算的,故而时频率分辨率会受到 Heisenberg 测不准原理的限制,即利用短窗口时时间分辨率高,频率分辨率较低;而利用长窗口时频率分辨率较高,时间分辨率较低。一旦 STFT 确定了窗函数,则与之相应的时频分辨率也确定。可以看出,STFT 是一种单一分辨率的分析方法。

特点:

  • 提供信号在时间和频率上的局部信息。

  • 时域和频域分辨率之间存在折衷。

  • 依赖于窗口函数的选择,不同窗口可能适用于不同类型的信号。

小波变换: 小波变换使用小波基函数对信号进行分解,得到不同尺度和频率的成分。通过调整小波基函数的尺度和平移参数,可以实现对信号的多尺度分析。小波变换优于傅里叶变换的一点在于它可以显示信号的局部特征,而傅里叶变换则是研究信号的整体特性。

特点:

  • 具有较好的局部化特性,可以在时频域上实现较好的分辨率。

  • 适应信号的局部变化。

  • 小波基函数的选择影响分析结果。

广义 S 变换: 广义 S 变换是一种时频分析方法,旨在解决传统傅里叶变换和短时傅里叶变换对非平稳信号分析的限制。通过选择适当的核函数并调整参数,可以实现在不同时间和频率上的分辨率。能够捕捉信号在不同时间点的局部瞬时频率,适用于那些瞬时频率变化较大的信号,提供更为细致的时频分析结果。其核心思想是用一个可调节的核函数对信号进行局部化处理。

特点:

  • 可以处理非平稳信号,适用于具有瞬时频率变化的信号。

  • 不同参数的选择影响着分析结果,需要根据信号的特性进行调整。

Wigner-Ville 分布: Wigner-Ville 分布是一种联合时频分析方法,通过计算信号的瞬时自相关函数,得到信号在时频域上的信息。由于Wigner-Ville 分布不含任何窗函数,因此就避免了在线性时频分析方法中其时间分辨率以及频率分辨率不能兼顾的矛盾。Wigner-Ville 分布的时频分辨率很高,也有很好的时频聚集性,比较适合分析非平稳的信号,但是其缺点是时频面存在很严重的交叉项干扰问题,影响了时频分析的结果。

特点:

  • 提供了精确的时频信息,避免了模糊性。

  • 适用于非平稳信号。

  • 存在交叉项,可能导致干扰和歧义。

结果分析:

以上述原始信号为例,从4个时频图比较得出:

  • 短时傅里叶变换:由于采用固定的窗函数,使得其时频分辨率是固定不变的,虽然它能给出信号的联合时频特征,但在整体上呈现分辨率较低的情况;

  • 小波变换:在低频端频域分辨率很高,但是时间分辨率低,而在高频端时间分辨率比较好,频率分辨率相对来讲有些下降;

  • Wigner-Ville 分布:为双线性时频分析,其必然会有交叉项的影响,能量也比其他几种时频分析方法稍弱;

  • 广义 S 变换:时频谱上可以看出,广义 S 变换采用的高斯窗函数依据信号的频率不同,做出相应的窗口的改变,并且修正了小波变换的相位问题,因此在时频谱上相比,其时间分辨率和频率分辨率都有明显的改善。

综上,不同的时频分析方法在原理和特点上有所区别。选择合适的方法通常取决于所要分析的具体信号,例如对时域或频域分辨率的需求,对非平稳性的处理能力,以及对计算复杂性的容忍度,需多方面权衡进行选择。

欢迎感兴趣的小伙伴联系小编获得完整版代码哦~,关注小编会继续推送更有质量的学习资料、文章程序代码~

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Wigner-Ville分布是一种时频分析方法,用于分析非平稳信号的时频特性。在Python中实现Wigner-Ville分布可以通过计算信号的二阶短时傅里叶变换STFT)和函数操作来实现。 首先,我们需要导入必要的库,例如numpy和scipy的信号模块: ```python import numpy as np from scipy import signal ``` 然后,我们可以定义实现Wigner-Ville分布的函数。假设我们的信号存储在一个名为`signal`的数组中,并且采样频率为`fs`: ```python def wigner_ville(signal, fs): stft = np.abs(signal.spectrogram(signal, fs, nperseg=len(signal), noverlap=0))[2] wvd = np.zeros((stft.shape[0], stft.shape[1]), dtype=complex) for i in range(stft.shape[1]): for j in range(stft.shape[1]): wvd[i, j] = stft[i, j] * np.conj(stft[i, j]) return wvd ``` 在这个函数中,我们首先通过`signal.spectrogram`计算信号的STFT,并将其存储在`stft`中。然后,我们创建一个空的复数数组`wvd`来存储Wigner-Ville分布的结果。 接下来,我们使用两个嵌套的循环来计算Wigner-Ville分布。对于每个`i`和`j`,我们计算`stft[i, j]`的幅度平方,并将结果存储在相应位置的`wvd`中。 最后,我们返回`wvd`作为Wigner-Ville分布的结果。 使用这个函数,我们可以对任意信号进行Wigner-Ville分布的计算。例如,假设我们有一个名为`x`的信号,采样频率为`fs`,我们可以将其输入到上面定义的函数中,并得到Wigner-Ville分布的结果: ```python x = np.random.randn(1000) fs = 1000 wvd = wigner_ville(x, fs) ``` 这样,我们就可以得到信号`x`的Wigner-Ville分布结果,存储在数组`wvd`中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值