我正在用Java实现“经验模式分解”。下一步是希尔伯特-黄变换,我需要找到如何获得“瞬时频率”。有人知道怎么拿到它吗?
使用EMD方法,任何复杂的数据集都可以分解成有限的、通常很少的分量,这些分量是固有模态函数(IMF)的集合。下一步是希尔伯特-黄变换。由此我计算了信号的相位,在我必须计算瞬时频率之后,我在Matlab代码中搜索,如下所示:http://read.pudn.com/downloads100/sourcecode/math/408870/emd/instfreq/archive/ifreq.m__.htm
但我不明白。
谢谢
发布于 2017-10-28 01:26:03
实例频率可以在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)发布于 2016-01-19 02:03:54
希尔伯特-黄变换是经验模态分解(EMD)和希尔伯特变换的结合。
首先,EMD是一种给出固有模式函数(IMF)的算法。
然后,将希尔伯特变换应用于每个IMF。
从国际货币基金组织,希尔伯特变换给出一个pi/2相位延迟信号,从中可以计算相位和相位的时间导数,它与瞬时频率成比例。
您可以在该页面上找到有关EMD算法变体的有趣教程和详细信息:http://perso.ens-lyon.fr/patrick.flandrin/emd.html
发布于 2019-06-27 15:35:46
您可以使用希尔伯特-黄变换(HHT)来处理信号数据,HHT是经验模式分解(EMD)和希尔伯特频谱分析(HSA)的组合,使用Matlab或Python。在Matlab或Python中,您可以直接使用HHT方法,而不需要自己计算瞬时频率(IF)。
以Matlab为例:
首先,对信号数据进行emd,得到IMF和残差,代码为: IMF,pchip,info = emd( signal,‘插值’,'pchip','Display',0);
其中fs为采样频率P,F,T,IMFINSF,IMFINSE=hht(IMF,fs);
此外,Python中还有一些工具和方法。
https://stackoverflow.com/questions/23347964
复制相似问题