查看: 561|回复: 16|关注: 0

[已解决] 请教关于eemd的分量认识问题

[复制链接]

新手

11 麦片

财富积分


050


2

主题

10

帖子

1

最佳答案
  • 关注者: 2
新手,为了减缓模态混叠,看了推荐eemd,在论坛上扒到了中央大学的eemd代码,然后先用例子代码跑一下学习,程序如下:
clear all;
fs=1000;
dt=1/fs;
% t=1/fs:1/fs:1;
N=1000;
n=0:N-1;
t=dt*n;
f=fs*(0:N/2)/N;
y1=2*sin(2*pi*30*t);
y2=5*cos(2*pi*50*t);
x=y1+y2;
figure;
plot(t,x);

modes=eemd(x,0.5,100);%输入第一个数为原始信号,第二个数为所添加高斯白噪声的均方差,第三个数为总体平均次数。输出要转化,为下面的语句
modes=modes';
[a,b]=size(modes);
figure;
for i=1:a
    subplot(a,1,i);
    plot(t,modes(i,:));
end;



                               
登录/注册后可看大图



结果如下:

                               
登录/注册后可看大图

让我疑惑的是,看书上的例子,其仿真信号与我类似,eemd结果如下:

                               
登录/注册后可看大图


                               
登录/注册后可看大图

为什么我的eemd跑出来的IMF1会像是一个噪音信号?而他的如此完美?白噪声没有取好?求解惑····
下面附上中央大学eemd代码。


                               
登录/注册后可看大图



% This is an EMD/EEMD program
%
%   function allmode=eemd(Y,Nstd,NE)
%
% INPUT:
%       Y: Inputted data;
%       Nstd: ratio of the standard deviation of the added noise and that of Y;
%       NE: Ensemble number for the EEMD
% OUTPUT:
%       A matrix of N*(m+1) matrix, where N is the length of the input
%       data Y, and m=fix(log2(N))-1. Column 1 is the original data, columns 2, 3, ...
%       m are the IMFs from high to low frequency, and comlumn (m+1) is the
%       residual (over all trend).
%
% NOTE:
%       It should be noted that when Nstd is set to zero and NE is set to 1, the
%       program degenerates to a EMD program.
%
% References can be found in the "Reference" section.
%
% The code is prepared by Zhaohua Wu. For questions, please read the "Q&A" section or
% contact
%   zwu@fsu.edu
%

function allmode=eemd(Y,Nstd,NE)
xsize=length(Y);
dd=1:1:xsize;
Ystd=std(Y);
Y=Y/Ystd;

TNM=fix(log2(xsize))-1;
TNM2=TNM+2;
for kk=1:1:TNM2,
    for ii=1:1:xsize,
        allmode(ii,kk)=0.0;
    end
end

for iii=1:1:NE,
    for i=1:xsize,
        temp=randn(1,1)*Nstd;
        X1(i)=Y(i)+temp;
    end

    for jj=1:1:xsize,
        mode(jj,1) = Y(jj);
    end

    xorigin = X1;
    xend = xorigin;

    nmode = 1;
    while nmode <= TNM,
        xstart = xend;
        iter = 1;

        while iter<=10,
            [spmax, spmin, flag]=extrema(xstart);
            upper= spline(spmax(:,1),spmax(:,2),dd);
            lower= spline(spmin(:,1),spmin(:,2),dd);
            mean_ul = (upper + lower)/2;
            xstart = xstart - mean_ul;
            iter = iter +1;
        end
        xend = xend - xstart;

               nmode=nmode+1;

        for jj=1:1:xsize,
            mode(jj,nmode) = xstart(jj);
        end
    end

    for jj=1:1:xsize,
        mode(jj,nmode+1)=xend(jj);
    end

    allmode=allmode+mode;

end

allmode=allmode/NE;
allmode=allmode*Ystd;


eemd

eemd
微信图片_20190708162243.jpg
微信图片_20190708162445.jpg

论坛优秀回答者

中级

768 麦片

财富积分


5001500


11

主题

691

帖子

79

最佳答案
  • 关注者: 56
发表于 2019-7-10 02:40:59 | 显示全部楼层
很难做到类似的原因应该如下,一是白噪声的加入,你可以设置一下rng default, 看看这样子加入的白噪声变化性会不会减少,二是和eemd或emd的分解有关,这个其实个人觉得占主要作用。emd每次分解都是根据极值来进行插值然后求出包络,所以当你的极值个数不一样时,得出的结果会截然不同。这也就是说很难复制相同的分解结果,除非你就是拿的作者的原信号。

论坛优秀回答者

中级

768 麦片

财富积分


5001500


11

主题

691

帖子

79

最佳答案
  • 关注者: 56
发表于 2019-7-10 02:41:21 | 显示全部楼层
很难做到类似的原因应该如下,一是白噪声的加入,你可以设置一下rng default, 看看这样子加入的白噪声变化性会不会减少,二是和eemd或emd的分解有关,这个其实个人觉得占主要作用。emd每次分解都是根据极值来进行插值然后求出包络,所以当你的极值个数不一样时,得出的结果会截然不同。这也就是说很难复制相同的分解结果,除非你就是拿的作者的原信号。

论坛优秀回答者

中级

768 麦片

财富积分


5001500


11

主题

691

帖子

79

最佳答案
  • 关注者: 56
发表于 2019-7-10 02:41:38 | 显示全部楼层
很难做到类似的原因应该如下,一是白噪声的加入,你可以设置一下rng default, 看看这样子加入的白噪声变化性会不会减少,二是和eemd或emd的分解有关,这个其实个人觉得占主要作用。emd每次分解都是根据极值来进行插值然后求出包络,所以当你的极值个数不一样时,得出的结果会截然不同。这也就是说很难复制相同的分解结果,除非你就是拿的作者的原信号。

论坛优秀回答者

中级

768 麦片

财富积分


5001500


11

主题

691

帖子

79

最佳答案
  • 关注者: 56
发表于 2019-7-10 02:41:38 | 显示全部楼层
很难做到类似的原因应该如下,一是白噪声的加入,你可以设置一下rng default, 看看这样子加入的白噪声变化性会不会减少,二是和eemd或emd的分解有关,这个其实个人觉得占主要作用。emd每次分解都是根据极值来进行插值然后求出包络,所以当你的极值个数不一样时,得出的结果会截然不同。这也就是说很难复制相同的分解结果,除非你就是拿的作者的原信号。

论坛优秀回答者

中级

768 麦片

财富积分


5001500


11

主题

691

帖子

79

最佳答案
  • 关注者: 56
发表于 2019-7-10 02:41:39 | 显示全部楼层
很难做到类似的原因应该如下,一是白噪声的加入,你可以设置一下rng default, 看看这样子加入的白噪声变化性会不会减少,二是和eemd或emd的分解有关,这个其实个人觉得占主要作用。emd每次分解都是根据极值来进行插值然后求出包络,所以当你的极值个数不一样时,得出的结果会截然不同。这也就是说很难复制相同的分解结果,除非你就是拿的作者的原信号。

论坛优秀回答者

中级

768 麦片

财富积分


5001500


11

主题

691

帖子

79

最佳答案
  • 关注者: 56
发表于 2019-7-10 02:41:39 | 显示全部楼层
很难做到类似的原因应该如下,一是白噪声的加入,你可以设置一下rng default, 看看这样子加入的白噪声变化性会不会减少,二是和eemd或emd的分解有关,这个其实个人觉得占主要作用。emd每次分解都是根据极值来进行插值然后求出包络,所以当你的极值个数不一样时,得出的结果会截然不同。这也就是说很难复制相同的分解结果,除非你就是拿的作者的原信号。

论坛优秀回答者

中级

768 麦片

财富积分


5001500


11

主题

691

帖子

79

最佳答案
  • 关注者: 56
发表于 2019-7-10 02:41:39 | 显示全部楼层 |此回复为最佳答案
很难做到类似的原因应该如下,一是白噪声的加入,你可以设置一下rng default, 看看这样子加入的白噪声变化性会不会减少,二是和eemd或emd的分解有关,这个其实个人觉得占主要作用。emd每次分解都是根据极值来进行插值然后求出包络,所以当你的极值个数不一样时,得出的结果会截然不同。这也就是说很难复制相同的分解结果,除非你就是拿的作者的原信号。

新手

11 麦片

财富积分


050


2

主题

10

帖子

1

最佳答案
  • 关注者: 2
 楼主| 发表于 2019-7-10 09:37:14 | 显示全部楼层
ukjames 发表于 2019-7-10 02:41
很难做到类似的原因应该如下,一是白噪声的加入,你可以设置一下rng default, 看看这样子加入的白噪声变化 ...

谢谢层主的答疑,当时最大的困惑就是书上作者能把加入的白噪声完美的去掉而不会显示在IMF上,后面我不断的调整加入的白噪声还是会出现噪声IMF项,后面书中作者在对一个本身含有随机噪声的初始信号做eemd时,我发现他的结果中,前几个IMF也类似噪声信号,所以我猜想这种结果应该就是没有消噪产生的。
PS:看到层主有答复过对于IMF能量的计算代码是ie(k)=sum(E(k,:))^2,我在看有些资源的时候他给的是ie(k)=sum(E(k,:))^2*2*pi*fs;我查了书,描述的是对Hilbert谱平方后对频率做积分,得到瞬时能量谱,这样的话是不是要乘个频率呢?同样的疑问还有求边际谱的时候(bjp(m)=sum(E(m,:))*1/fs),有些困惑,希望得到层主的帮助。

新手

11 麦片

财富积分


050


2

主题

10

帖子

1

最佳答案
  • 关注者: 2
 楼主| 发表于 2019-7-10 09:39:39 | 显示全部楼层
ukjames 发表于 2019-7-10 02:41
很难做到类似的原因应该如下,一是白噪声的加入,你可以设置一下rng default, 看看这样子加入的白噪声变化 ...

谢谢层主的答疑,当时最大的困惑就是书上作者能把加入的白噪声完美的去掉而不会显示在IMF上,后面我不断的调整加入的白噪声还是会出现噪声IMF项,后面书中作者在对一个本身含有随机噪声的初始信号做eemd时,我发现他的结果中,前几个IMF也类似噪声信号,所以我猜想这种结果应该就是没有消噪产生的。
PS:看到层主有答复过对于IMF能量的计算代码是ie(k)=sum(E(k,:))^2,我在看有些资源的时候他给的是ie(k)=sum(E(k,:))^2*2*pi*fs;我查了书,描述的是对Hilbert谱平方后对频率做积分,得到瞬时能量谱,这样的话是不是要乘个频率呢?同样的疑问还有求边际谱的时候(bjp(m)=sum(E(m,:))*1/fs),有些困惑,希望得到层主的帮助。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表