我正在使用 python 中的 emd 包将时间序列分解为 IMF 的。然后我想估计边际希尔伯特谱。
根据 Huang 的原始论文
https://arxiv.org/pdf/1401.4211.pdf
,傅里叶谱的幂律指数应该与边缘希尔伯特谱的一个匹配。边际 Hibert 谱由下式给出:
其中 Ai 是模式 i 的幅度和相位时间序列。
我正在使用的代码如下:
import emd
B = Btotal[2]
## Get IMF's
imf = emd.sift.sift(B)
T = len(B)
phase, inst_freq, inst_amp = emd.spectra.frequency_transform(imf, sample_rate, 'hilbert')#for i in range(len(IA.T)):
h = np.zeros(len(inst_freq.T))
for i in range(len(inst_freq.T)):
### Estimate marginal Hilbert Spectrum
h[i] =(1/T)*np.sum(inst_amp.T[i])
freq = []
for i in range(len(inst_freq.T)):
freq.append(np.nanmean(inst_freq.T[i]))
### Estimate Fourier Power Spectrum
a11 =psd(B, timeu='s')
plt.loglog(a11[0], a11[1],label=r'$Fourier \ Transform$')
plt.loglog(freq, h,label=r'$Marginal\ Hilbert \ Transform$')
fit_fourier =fun.curve_fit_log(a11[0][5::], a11[1][5::])
plt.loglog(a11[0][5::], fit_fourier[2],'k-.',lw=0.5,label=r'$k \ = $'+str(round(fit_fourier[0][1],2)))
fit_H =fun.curve_fit_log(freq[2:], h[2:])
plt.loglog(freq[2:], fit_H[2],'k-.',lw=0.5,label=r'$k \ = $'+str(round(fit_H[0][1],2)))
plt.legend(frameon=False)
关于我可能做错了什么的任何想法?
有第二个方程可以用来估计 h 为:
其中,频率 [ωi] 和幅度 [Ai] 的联合概率密度函数 (pdf) P(ω, A),它们是从所有模式 i = 1 · · · N 一起提取的。
在这种情况下,有人可以指出我如何在给定矩阵 IA、IF 的情况下执行积分?