从希尔伯特变换得到一组频率,哪一个是正确的?

2024-10-17 06:15:19 发布

您现在位置:Python中文网/ 问答频道 /正文

假设B是一个持续时间为T的信号,每dt=1秒采样一次。 对B采用经验模态分解(EMD)后, n个本征模函数(IMF)将被提取。 利用希尔伯特变换,计算了瞬时频率(IF)和瞬时振幅(A)。因此,IF是一个矩阵,行数等于信号B的长度,列数等于n(a也是)

import emd
B  = np.sin(np.linspace(0,2*np.pi,100000))+0.05*np.random.rand(100000)
dt = 1
time_vect = np.linspace(0, len(B), len(B))

## Get IMF's
imf = emd.sift.sift(B)
## Get instantaneous phase, frequency, and instantaneous amplitude
IP, IF, A = emd.spectra.frequency_transform(imf, sample_rate, 'hilbert')

现在我想用IF和a构造一个边际希尔伯特谱。我在文献中发现了以下公式:

enter image description here其中

enter image description here

T = len(B)
h = np.zeros(len(A.T))
for i in range(len(A.T)):
    h[i] =(1/T)*np.sum(A.T[i]**2)

让我困惑的是,积分的结果是一个长度为n的向量(即imf的数量)。另一方面,每个IMF的IF值不同于其他IMF,并且它们的排序也没有增加(就像我们在小波变换中所做的那样)。我的问题是,每个IMF的频率应该是多少。例如,如果我想把h[I]作为频率的函数来绘制,我应该怎么做


Tags: 函数getlenif信号npdt频率