houlixian 发表于 2012-4-29 20:55

EMD分解疑惑,请各位大侠帮忙啊!

我自己用正弦信号,试了一段包络的程序,感觉上包络线不对吧,请各位帮忙啊!
程序如下:
clear;
clc
fs=512;N=256
t=0:1/fs:(N-1)/fs;t=t';
f1=5;f2=100;
x=sin(2*pi*f2*t)
n=length(x);
s=x;
t=0:length(s)-1;
s1=s;
sd=1;
if(sd>0.3)
    jd=find(diff(sign(diff(s1)))==-2)+1;%找h1极大值的位置
    jx=find(diff(sign(diff(s1)))==2)+1; %找h1极小值的位置
    ah=length(jd);
    al=length(jx);
    jdz(ah)=0;
    for i=1:ah
      bh=jd(i);
      jdz(i)=s1(bh);
    end                     %找出h1极大值对应函数值
    jxz(al)=0;
    for i=1:al
      bl=jx(i);
      jxz(i)=s1(bl);
    end                     %找出h1极小值对应函数值
    jsbl=spline(jd,jdz,t);%极大值拟和的上包络
    jxbl=spline(jx,jxz,t)%极小值拟和的下包络
    m1=(jsbl+jxbl)/2;       %上下包络均值
    m1=m1';
    h1=s1-m1;
    sd=sum(((s1-h1)./h1).^2);
end

subplot(511)
plot(t,x)
subplot(512)
plot(t,x)
axis()
hold on;
subplot(513)
plot(t,jxbl)
axis()
subplot(514)
plot(t,x)
axis()
subplot(515)
plot(t,jsbl)
%title('采用EMD中的包络方法');
结果如下:


上包络线是不是不对啊?

houlixian 发表于 2012-4-29 20:56

请各位大侠指点啊,还有就是为什么要求上下包络均值啊!

syxqq123 发表于 2012-4-30 10:58

EMD是针对调频调幅信号,至少是调频信号吧,你的那个正弦信号本身就是单一频率的信号,好像不用分解了吧
呵呵,我瞎说的不知道对不

syxqq123 发表于 2012-4-30 11:02

本帖最后由 syxqq123 于 2012-4-30 11:03 编辑

EMD将信号分解成N个本征模函数,正弦信号已经符合本征模函数的条件了:极值点和过零点数目相等或至多差一点;在任意点,由局部极大点和极小点构成的两条包络线平均值为0

houlixian 发表于 2012-4-30 11:06

那调幅也是可以的吧,这个信号的上下包络值应该是对称的吧,怎么会有这么大的差别呢?

syxqq123 发表于 2012-5-1 08:18

你这个上下包络计算得是对的吧,上包络接近1,下包络接近-1,符合正弦曲线的包络

1412 发表于 2015-1-14 12:55

sd=sum(((s1-h1)./h1).^2);这语句是不是有错误。关于SD,我见有sd = sum((x1-x2).^2)/sum(x1.^2);

mxlzhenzhu 发表于 2019-2-22 21:05

本帖最后由 mxlzhenzhu 于 2019-2-22 21:11 编辑

下面这两句代码,你写的很有水平哈:

jd=find(diff(sign(diff(s1)))==-2)+1;%找h1极大值的位置
jx=find(diff(sign(diff(s1)))==2)+1; %找h1极小值的位置

%%===========Test code===============
fs=1000;dt=1/fs;t=.';
y=cos(pi*t);
jd=find(diff(sign(diff(y)))==-2)+1;%找h1极大值的位置
jx=find(diff(sign(diff(y)))==2)+1; %找h1极小值的位置
plot(t(jd),y(jd),'o')
hold on
plot(t,y)
plot(t(jx),y(jx),'*')



页: [1]
查看完整版本: EMD分解疑惑,请各位大侠帮忙啊!