Hilbert EMD 分解总结(转载)

标签:
matlabhilbertemd |
分类: 算法 |
这是对几篇参考文章的整理和总结,参考文章在后面会给出链接。
一、Hilbert变换测试
1. hilbert函数
matlab中,由hilbert函数得到的信号是合成的复信号,其虚部才是书上定义的Hilbert变换。这一点在基本概念一文中有说明。在上面的参考博文中,有这样几句代码:
y
yh
yi
|
http://s3/middle/84024a4a4d95cc65bb2b2&690<wbr>Hilbert-Huang <wbr>变换分析总结" TITLE="[转载]Matlab <wbr>Hilbert-Huang <wbr>变换分析总结" ACTION-DATA="http://s3/middle/84024a4a4d95cc65bb2b2&690" ACTION-TYPE="show-slide" STYLE="margin: 0px; padding: 0px; list-style: none;" />
这里主要看第五张图和第七张图
调制信号的产生如下
ts
fs
N
k
t
%
f1
f2
f3
a
m
x3
y
|
(1)包络的提取
第五张图中蓝色的线就是通过hilbert变换提取的包络,关键语句如下(y代表的是调制结果信号,也就是我们一般情况下所测得的信号):
yh
aabs
plot(t,
|
(2)高频信号的提取
这一点主要基于两个信号乘积的hilbert变换取决于高频信号的hilbert变换。
看第七张图,就是调制信号的瞬时频率,主要代码如下:
yh
aangle
af
plot(t(1:end-1),
|
这部分代码主要有两点需要注意
(i)unwrap
网上有如下解释:
对于复数函数,写为指数形式A(t)*exp(j*B(t)),程序中处理的是些离散点,由于用angle求得的相角不是B(t),而是C=rem(B(t),2*Pi)(限制在-Pi到Pi之间),unwrap就是根据C求B(会差一个常数),依据是数据足够密,所以相邻两点之间的相位变化不超过Pi。
(ii)af是归一化的结果,转换到实际频率要乘以fs
从结果上看,主要的高频信号为70Hz,与原信号相符
(3)有三个信号的情况
这个是我后来又增加的200Hz的调制信号,我们只看一下瞬时频率和包络,发现与前面的结论一致。
ts
fs
N
k
t
%
f1
f2
f3
a
m
x3
y
|
http://s9/middle/84024a4a4d95cc6632858&690<wbr>Hilbert-Huang <wbr>变换分析总结" TITLE="[转载]Matlab <wbr>Hilbert-Huang <wbr>变换分析总结" STYLE="margin: 0px; padding: 0px; list-style: none;" />
http://s10/middle/84024a4a4d95cc66aaf19&690<wbr>Hilbert-Huang <wbr>变换分析总结" TITLE="[转载]Matlab <wbr>Hilbert-Huang <wbr>变换分析总结" STYLE="margin: 0px; padding: 0px; list-style: none;" />
1. IMF代表固有模态函数
2. 第四次分解信号的Hilbert分析
http://s13/middle/84024a4a4d95cc672f5cc&690<wbr>Hilbert-Huang <wbr>变换分析总结" TITLE="[转载]Matlab <wbr>Hilbert-Huang <wbr>变换分析总结" STYLE="margin: 0px; padding: 0px; list-style: none;" />
(1)IMF4是分解出来的第四个固有模式函数
(2)IMF4的包络
yh
yenvelope
|
就是前面说的,做hilbert变换后求幅值。
(3)瞬时频率
yf |
这个在前面也说过
(4)调制信号
yModulate = y./yenvelope; |
这个也很好理解,信号结果
= 包络 * 调制信号,变换一下就是上面的公式。
三、G-Rilling EMD工具箱
这个真的相当强大!
原始信号如下,有2个频率,10Hz和100Hz
fs
ts
t
z
|
1. EMD分解得到固有模式函数
imf |
2. 绘制EMD分解图
emd_visu(z, |
z是原始信号,t是时间序列,imf就是emd函数的结果
解释一下产生图片中c2f和f2c,c2f代表由coarse到fine,就是由最后分解的结果不断向上叠加生成原始信号,f2c正好相反,是由第一分解的结果向下叠加。
3. 绘制时频图
[A,
[im,
disp_hhs(im)
|
其结果的坐标都是序列或归一化后的,想要得到实际时间和频率,进行简单变换即可
t = 横坐标
* ts
f = 纵坐标
* fs
http://s8/middle/84024a4a4d95cc66e2797&690<wbr>Hilbert-Huang <wbr>变换分析总结" TITLE="[转载]Matlab <wbr>Hilbert-Huang <wbr>变换分析总结" ACTION-DATA="http://s8/middle/84024a4a4d95cc66e2797&690" ACTION-TYPE="show-slide" STYLE="margin: 0px; padding: 0px; list-style: none;" />
这个时频图有如下含义,横轴是时间,纵轴是频率,颜色代表幅值,可以看出,在0.1(即100Hz)和0.01(10Hz)和0.005(5Hz)有明显的谱线。其中5Hz为最后的残差频率。查看im矩阵可知幅值,主要有两个,一个是4.5左右,另一个是
0.8左右,幅值可以通过边缘谱查看。
4. 图片背景的改善
(这是另一个信号的分析,只有一个频率10Hz)
colormap(flipud(gray)) |
http://s2/middle/84024a4a4d95cc6701e01&690<wbr>Hilbert-Huang <wbr>变换分析总结" TITLE="[转载]Matlab <wbr>Hilbert-Huang <wbr>变换分析总结" ACTION-DATA="http://s2/middle/84024a4a4d95cc6701e01&690" ACTION-TYPE="show-slide" STYLE="margin: 0px; padding: 0px; list-style: none;" />
5. 自己绘制时频图
imagesc(tt*ts,
ylabel('frequency/Hz'
set(gca,
xlabel('time/s'
title('Hilbert-Huang
|
6. 边缘谱的绘制
边缘谱其实就是对幅值进行时间上的积分。
edge_trum
ff
figure,
|
http://s15/middle/84024a4a4d95cc673258e&690<wbr>Hilbert-Huang <wbr>变换分析总结" TITLE="[转载]Matlab <wbr>Hilbert-Huang <wbr>变换分析总结" ACTION-DATA="http://s15/middle/84024a4a4d95cc673258e&690" ACTION-TYPE="show-slide" STYLE="margin: 0px; padding: 0px; list-style: none;" />
可以看到跟傅里叶频谱很类似。有两个频率,一个是10Hz,一个100Hz。