【问题标题】:Hilbert–Huang transform: Instantaneous frequency希尔伯特-黄变换:瞬时频率
【发布时间】:2014-06-14 09:43:44
【问题描述】:

我正在用 Java 实现“经验模式分解”。下一步是希尔伯特-黄 变换,我需要找到如何获得“瞬时频率”。有人知道如何获得吗?

使用 EMD 方法,任何复杂的数据集都可以分解为有限且通常数量很少的分量,即固有模态函数 (IMF) 的集合。下一步是希尔伯特-黄变换。从这里我计算信号的相位,在我必须计算瞬时频率之后,我在 Matlab 代码中搜索,如下链接:http://read.pudn.com/downloads100/sourcecode/math/408870/emd/instfreq/archive/ifreq.m__.htm

但我不明白。

谢谢

【问题讨论】:

  • 请详细说明您想要实现的目标以及您尝试实现的目标。
  • 您愿意分享您的 java 代码,以便其他人可以从它的实现中受益吗?

标签: java matlab frequency decomposition hilbert-curve


【解决方案1】:

实例频率可以在Python中计算

def hilb(s, unwrap=False):
    from scipy.signal import hilbert
    H = hilbert(s)
    amp = np.abs(H)
    phase = np.arctan2(H.imag, H.real)
    if unwrap: phase = np.unwrap(phase)
    return amp, phase

inst_amp, phase = hilb(imf, unwrap=True)
inst_freq = np.diff(phase)

【讨论】:

  • 为什么这个答案没有被选为最佳?
  • 嗨,我在使用你的代码,但在 hilbert(s) 中获取了 nan 值,可能是什么问题?
【解决方案2】:

Hilbert-Huang 变换是经验模态分解 (EMD) 和 Hilbert 变换的组合。

首先,EMD 是一种算法,可为您提供内在模式函数 (IMF)。

然后将希尔伯特变换应用于每个 IMF。

从 IMF,希尔伯特变换给出一个 pi/2 相位延迟信号,您可以从中计算相位,以及相位的时间导数,它与瞬时频率成正比。

您将在该页面上找到有关 EMD 算法变体的有趣教程和详细信息:http://perso.ens-lyon.fr/patrick.flandrin/emd.html

【讨论】:

    【解决方案3】:

    您可以使用 Hilbert-Huang 变换 (HHT) 处理您的信号数据,HHT 是经验模式分解 (EMD) 和 Hilbert 谱分析 (HSA) 与 Matlab 或 Python 的结合。在 Matlab 或 Python 中,有 HHT 方法可以直接使用,不需要自己计算瞬时频率(IF)。

    以 Matlab 为例:

    首先,你可以通过对信号数据实现 emd 来获得 IMF 和残差,代码为: [IMF,residual,info] = emd(signal,'Interpolation','pchip', 'Display', 0);

    那么,IF,即IMFINSF,可以通过hht(IMF, fs)得到,其中fs是采样频率 [P,F,T,IMFINSF,IMFINSE]=hht(IMF,fs);

    另外,Python中还有一些工具和方法。

    【讨论】:

    • 能分享一下python工具吗
    猜你喜欢
    • 1970-01-01
    • 2019-10-16
    • 2012-08-10
    • 2020-09-27
    • 2018-11-26
    • 1970-01-01
    • 2017-01-31
    • 2010-09-11
    • 1970-01-01
    相关资源
    最近更新 更多