通过式(2 一 26)我们将幅度和瞬时相位作为时间的函数表示在三
维平面中,幅度的这种时一频分布被称为希尔伯特幅度谱,H(。,)t,
简称为希尔伯特谱。习惯上用幅度的平方来表示能量密度,这里如果
用幅度平方代替希尔伯特幅度谱中的幅度,将得到希尔伯特能量谱。
Hht 目前研究的最多的是 EMD 分解中的包络过程。HHT 变换 = EMD
分解+Hilbert 变换
至于适合什么样的数据,现在还没有定论,其一,EMD 算法还
没有建立一个合适的数学模型,也就缺乏严格的数学基础,很多诸如
收敛性、唯一性、正交性等数学问题根本无法进行,甚至连“什么信
号能进行 EMD 分析”目前也无法解释。其二,算法本身是操作性的,
到目前为止也是经验的(正如算法的名称一样),在没有找到其理论
支撑之前,无从考究。其三,一种算法,不可能对任何信号都有效,
所以不要指望 EMD 可以处理任何信号。百度文库 hht 讨论精华版。
http://wenku.baidu.com/view/76b96c4bcf84b9d528ea7aa7.html
1 Hilbert 谱
完成了经验模式分解过程就得到了所有可提取的
固有模态函数,在 Hilbert 变换的基础上,只要根据
公式(1-1)-(1-4)计算瞬时频率就可以了。对固有模态
函数进行 Hilbert 变换后,可以用下面方式表示信号
X t
n
j
1
a t
j
exp
i
t dt
j
(1-26)
由希尔伯特变换得出的振幅和频率都是时间的函
数,如果用三维图形表达幅值、频率和时间之间的关
系,或者把振幅用灰度的形式显示在频率-时间平面
上,就可以得到 Hilbert 幅值谱,简称 Hilbert 谱 (
, )
H w t 对时间积分,就得到希尔伯特边际谱
如果把 (
, )
H w t 。
h w :
(
)
(
)
h w
T
0
H w t dt
, )
(
(1-27)
边际谱提供了对每个频率的总振幅的量测,表达
了整个时间长度内累积的振幅。另外,作为希尔伯特
边际谱的附加结果,可以得到如式(1-28)定义的希
尔伯特瞬时能量:
( )
IE t
w
2
H w t dw
( , )
(1-28)
瞬时能量提供了信号能量随时间的变换情况。事
实上,如果振幅的平方对时间积分,可以得到希尔伯
特能量谱:
(1-29)
)
ES w
H w t dt
( , )
(
T
2
0
希尔伯特能量谱提供了对于每个频率的能量的量
测,表达了每个频率在整个时间长度内所累积的能量。
希尔伯特包络是时域信号绝对值的包络,它从信号中
提取调制信号,分析调制信号的变化,对提取故障特
征具有很大的优越性。
2.完整的 Emd 分解程序
N=1000;
n=1:N;
fs=1000;
t=n/fs;
fx=10;
fy=50;
x=cos(2*pi*fx*t);
y=10*cos(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);%希尔伯特谱
-%画出边际谱
%N=length(Cenf);%设置频率点数%完全从理论公式出发。
for k=1:size(E,1)
bjp(k)=sum(E(k,:))*1/fs;end
figure(3);
plot(Cenf(1,:)*fs,bjp);%
作边际谱图进行求取 Hilbert 谱时频率已经被抽样成具有一定窗
长 的 离散 频 率 , 所以 此 时 的频 率 轴 已 经是 中 心 频 率 xlabel(' 频 率
/ Hz');ylabel('幅值');
3.频率
关于频率的部分的话,把计算得到的频率乘以采样频率就是实际
频率了,至于为什么是 0.5,你应该懂的
hilbert 变换是对窄带信号才有效的,所以才有了 EMD 分解将任意信
号分解成多个窄带信号所以如果对一个窄带信号做 hilbert 变换的话,
去掉负频率,double 正频率就是 hilbert 谱了。
4.我写的简单验证程序
clear all
clc
fs=1000 %采样率
data=3072%采样点数
%-------------------读取获得数据-------------------------------------------
fid=fopen('97.mat','r')
N=data
x=fread(fid,N,'int16')
fclose(fid)
%-------------------------------------------------------------------------
%------------------ 进 行 imf 分 解 并 画 出 Hibert 谱
------------------------------
imf=emd(x)%对输入信号进行 emd 分解
[A,f,t]=hhspectrum(imf)%对每一层的 imf 分量求取瞬时振幅 A 和
瞬时频率 f
[E,t,Cenf]=toimage(A,f)%将每个 imf 洗好合成求取 Hibert 谱,E 为
对应幅值,Cenf 为网格中心频率
disp_hhs(E)%画出希尔伯特谱
%--------------------------------------------------------------------------
%------------------画出边际谱------------------------------
N=length(Cenf)
for k=1:size(E,1)
bjp(k)=sum(E(k,:))*1/fs*N
end
%完全利用定义里的积分公式
f=(0:N-3)/N*(fs/2)
figure(3)
plot(Cenf(1,:)*fs,bjp)%x 轴频率为被抽样后的离散频率
xlabel('频率/Hz')
ylabel('幅值')%绘制边际谱图
5 包络分析