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