sjdwjt 发表于 2008-3-18 21:21

请教振动信号EMD分解问题

各位高手,我是初学者在实验EMD程序对我的信号进行分析,遇到不少问题,请教大家帮忙看看,谢谢。原始信号是地面震动信号,如图横轴是采样点数,纵轴是幅度/V ,取其中12000到4000点组成signal3进行后续处理,采用不同的程序显示结果不同,不知道什么地方的问题,请大家帮忙看看,方法1:
M = max(max(abs(imf(1:rol-1,:))));
for j = 1:rol-1
subplot(rol+1,1,j+1);
plot(imf(j,:));
set(gca,'YTick',[]);
set(gca,'XTick',[]);
ylabel(['imf',int2str(j)]);
end
subplot(rol+1,1,1);
title('Empirical Mode Decomposition');
subplot(rol+1,1,rol+1);
plot(imf(rol,:),'r');
axis('tight');
set(gca,'YTick',[]);
set(gca,'XTick',[]);
ylabel('res.');
得到下面图,原始信号不会加入,请教大家如何在上面画出原始信号?如果采用命令emd_visu(signal,1:length(signal),imf);得到下面的图请教大家这个图画的怎么这样呢?原始信号显示的和原来不同了,为什么?图太多了,下面贴子继续贴,未完待续!!

[ 本帖最后由 zhangnan3509 于 2008-3-25 19:13 编辑 ]

sjdwjt 发表于 2008-3-18 21:31

接上面贴子,后来不知道用了什么命令画出了如下的图,:@L ,见谅,请大家帮忙看看这是怎么画的,而且三个结果都不同
但是我用其他方法画的和这个最相近,特别是信号的幅度,可我的信号幅度为什么这么小的?

zhangnan3509 发表于 2008-3-24 21:50

楼主,你的问题能不能说得再清楚一点。除了EMD分解图上要有原始信号之外,还有什么问题,怎么会出现3种结果?

sjdwjt 发表于 2008-3-25 18:38

感谢版主回帖!我想请教的就是一个信号,但是采用了不同的程序得到的EMD分解,画出图后居然可以有3个不同的样子,而且我不知道那个是对的,请版主帮忙分析下。信号已经放着贴子里。method1是采用方法1得到的,其中对于EMD画图没用使用emd_visu那个函数,所以得到了那样的图,EMD分解是直接调用程序的;method2是调用EMD分解程序后,再使用emd_visu函数得到的图,和method1得到的不同;最后一个图是我当时不知道用什么命令得到的,和前面的不同,请教版主,究竟哪个方法是正确结果呢?

zhangnan3509 发表于 2008-3-25 19:15

这和函数没关系,emd_visu也是一个显示EMD分解图的程序。如果不用它,结果也是一样的。这二者没有什么本质上的区别。

sjdwjt 发表于 2008-3-25 19:18

那为什么采用emd_visu后的原始信号都变得和原来的不同呢?而且不同方法得到的imf也不同,后面如果继续分析应该采用什么结果呢?

zhangnan3509 发表于 2008-3-25 19:37

回复 6楼 的帖子

我做出来的结果跟你不一样,我选的是1200点到4000点

[ 本帖最后由 zhangnan3509 于 2008-3-25 19:39 编辑 ]

sjdwjt 发表于 2008-3-25 19:41

写错了,我用的是12000到40000点:@L,版主可以试试我第一种方法的程序,在上面贴子里,为什么得到的EMD分解图和采用emd_visu画出的不同呢?

[ 本帖最后由 sjdwjt 于 2008-3-25 19:55 编辑 ]

sjdwjt 发表于 2008-3-26 21:21

版主对我这个程序研究了嘛?谢谢

zhangnan3509 发表于 2008-3-26 21:28

回复 9楼 的帖子

数据点是多少?28001吧?

sjdwjt 发表于 2008-3-27 10:21

不好意思版主,我的原始数据是48000点的,就是那个rawsignal.mat,我取了其中12000点到40000点得到的是signal信号,对它做emd分解然后画图,后面的结果都是signal信号变换的结果。

sjdwjt 发表于 2008-3-28 21:36

版主能帮我看看这个问题嘛?谢谢

zhangnan3509 发表于 2008-3-28 21:41

回复 12楼 的帖子

我可能是读取时有问题,我打开之后显示点数是28001点:@L

我觉得就算不用emd-visu,自己编写程序出来的结果也是一样的啊

=size(imf);
for i=1:m
   
    subplot(m,1,i);
    plot(imf(i,1:28000));
   
end
用这个显示也是一样。(这仅仅就是一个例子,楼主可以根据自己编程的习惯修改,照搬也许会出问题)

[ 本帖最后由 zhangnan3509 于 2008-3-28 21:51 编辑 ]

zhangnan3509 发表于 2008-3-28 21:49

回复 13楼 的帖子

另外我的意见是 可以改造emd_visu这个函数,自己编写的时候没必要全部参考这个程序,否则主程序阅读性差,循环多,而且也容易把自己弄乱了

sjdwjt 发表于 2008-3-28 22:19

signal的数据点数就是28001点的,截取了原始数据的12000到40000点,在matlab变量空间中显示就是1×28001的数据,难道是我的matlab有问题?我看到的都是横线,:@L,纵坐标怎么回事呢?就是用的版主的程序

imf=emd(signal);
=size(imf);
for i=1:m
   
    subplot(m,1,i);
    plot(imf(i,1:28000));
   
end
页: [1] 2 3
查看完整版本: 请教振动信号EMD分解问题