Java 希尔伯特&x2013;黄变换:瞬时频率

Java 希尔伯特&x2013;黄变换:瞬时频率,java,matlab,frequency,decomposition,hilbert-curve,Java,Matlab,Frequency,Decomposition,Hilbert Curve,我正在用Java实现“经验模式分解”。下一步是希尔伯特-黄 变换,我需要找到如何得到“瞬时频率”。有人知道如何得到它吗 使用EMD方法,任何复杂的数据集都可以分解为有限且通常为少量的分量,这是一组固有模态函数(IMF)。下一步是希尔伯特-黄变换。根据这一点,我计算信号的相位,在我必须计算瞬时频率之后,我在Matlab代码中搜索如下链接: 但我不明白 感谢希尔伯特-黄变换是经验模态分解(EMD)和希尔伯特变换的组合 首先,EMD是一种算法,它提供了固有模态函数(IMF) 然后对每个imf应用Hil

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

使用EMD方法,任何复杂的数据集都可以分解为有限且通常为少量的分量,这是一组固有模态函数(IMF)。下一步是希尔伯特-黄变换。根据这一点,我计算信号的相位,在我必须计算瞬时频率之后,我在Matlab代码中搜索如下链接:

但我不明白


感谢

希尔伯特-黄变换是经验模态分解(EMD)和希尔伯特变换的组合

首先,EMD是一种算法,它提供了固有模态函数(IMF)

然后对每个imf应用Hilbert变换

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


您将在该页面上找到有关EMD算法变化的有趣教程和详细信息:

实例频率可以通过

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)

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

例如,使用Matlab:

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

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


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

请详细说明您想要实现的目标以及您尝试实现的目标。您是否愿意分享您的java代码,以便其他人可以从其实现中受益?为什么这个答案没有被选为最佳答案?您好,我使用了您的代码,但在hilbert中获得了nan值,有什么问题吗?你能分享一下python工具吗。