初次学习希尔伯特黄变换HHT,并用matlab编程实现。
这是网上比较经典的一个例子:
%示例程序
N=100;
n=1:N;
fs=1000;
t=n/fs;
fx=50;
fy=150;
x=2*sin(2*pi*fx*t);
y=sin(2*pi*fy*t);
z=x+y;
data=z;
imf=emd(data); % 对输入信号进行EMD分解
[A,f,t]=hhspectrum(imf); % 对IMF分量求取瞬时频率与振幅:A:是每个IMF的振幅向量,f:每个IMF对应的瞬时频率,t:时间序列号
[E,t,Cenf]=toimage(A,f); % 将每个IMF信号合成求取Hilbert谱,E:对应的振幅值,Cenf:每个网格对应的中心频率。这里横轴为时间,纵轴为频率。即时频图(用颜色表示第三维值的大小)和三维图(三维坐标系:时间,中心频率,振幅)
cemd_visu(data,1:length(data),imf); % 显示每个IMF分量及残余信号
disp_hhs(E); % 希尔伯特谱
安装了EMD工具箱和TFTB时间序列工具箱后,运行以上程序报错:instfreq不应为负值。检查程序后发现无误,其实是工具箱安装问题。
Empirical Mode Decomposition Toolbox(EMD Toolbox)