我正在Java中实现"经验模式分解"。下一步是Hilbert–Huang变换,我需要找到如何获得"瞬时频率"。有人知道怎么得到它吗?
使用EMD方法,任何复杂的数据集都可以分解为有限的且通常是少量的分量,这是固有模函数(IMF(的集合。下一步是希尔伯特-黄变换。从中我计算了信号的相位,在我必须计算瞬时频率之后,我在Matlab代码中搜索,如下链接所示:http://read.pudn.com/downloads100/sourcecode/math/408870/emd/instfreq/archive/ifreq.m__.htm
但我不明白。
感谢
实例频率可以通过在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)
首先,EMD是一种算法,它为您提供了固有模式函数(IMF(。
然后将希尔伯特变换应用于每个IMF。
从IMF中,希尔伯特变换给出了一个π/2相位延迟信号,从中可以计算相位和相位的时间导数,该导数与瞬时频率成比例。
您将在该页面上找到有关EMD算法变体的有趣教程和详细信息:http://perso.ens-lyon.fr/patrick.flandrin/emd.html
您可以使用Hilbert-Huang变换(HHT(处理信号数据,该变换是经验模式分解(EMD(和Hilbert频谱分析(HSA(与Matlab或Python的结合。在Matlab或Python中,有HHT方法,您可以直接使用,不需要自己计算瞬时频率(IF(。
例如使用Matlab:
首先,您可以通过实现emd来获取IMF和残差信号数据,代码为:[IMF,残差,info]=emd(信号,‘插值’,‘芯片’,‘显示’,0(;
然后,IF,即IMFINSF,可以通过hht(IMF,fs(获得,其中fs是采样频率[P,F,T,IMFINSF,IMFINSE]=hht(IMF,fs(;
此外,Python中还有一些工具和方法。