1

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

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

但我不明白。

谢谢

4

3 回答 3

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)
于 2017-10-27T17:26:02.520 回答
0

您可以使用 Hilbert-Huang 变换 (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中也有一些工具和方法。

于 2019-06-27T07:35:45.717 回答
0

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

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

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

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

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

于 2016-01-18T18:03:54.120 回答