声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2169|回复: 5

[HHT] 求助关于emd程序里的boundary_conditions函数

[复制链接]
发表于 2008-9-11 21:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
emd程序当中有这个函数boundary_conditions:
% 处理边界条件(镜像法)
function [tmin,tmax,zmin,zmax] = boundary_conditions(indmin,indmax,t,x,z,nbsym)
% 实数情况下,x = z
lx = length(x);
% 判断极值点个数
if (length(indmin) + length(indmax) < 3)
  error('not enough extrema')
end
% 插值的边界条件
if indmax(1) < indmin(1) % 第一个极值点是极大值
  if x(1) > x(indmin(1)) % 以第一个极大值为对称中心
    lmax = fliplr(indmax(2:min(end,nbsym+1)));
    lmin = fliplr(indmin(1:min(end,nbsym)));
    lsym = indmax(1);
  else % 如果第一个采样值小于第一个极小值,则将认为该值是一个极小值,以该点为对称中心
    lmax = fliplr(indmax(1:min(end,nbsym)));
    lmin = [fliplr(indmin(1:min(end,nbsym-1))),1];
    lsym = 1;
  end
else
  if x(1) < x(indmax(1)) % 以第一个极小值为对称中心
    lmax = fliplr(indmax(1:min(end,nbsym)));
    lmin = fliplr(indmin(2:min(end,nbsym+1)));
    lsym = indmin(1);
  else  % 如果第一个采样值大于第一个极大值,则将认为该值是一个极大值,以该点为对称中心
    lmax = [fliplr(indmax(1:min(end,nbsym-1))),1];
    lmin = fliplr(indmin(1:min(end,nbsym)));
    lsym = 1;
  end
end
% 序列末尾情况与序列开头类似
if indmax(end) < indmin(end)
  if x(end) < x(indmax(end))
    rmax = fliplr(indmax(max(end-nbsym+1,1):end));
    rmin = fliplr(indmin(max(end-nbsym,1):end-1));
    rsym = indmin(end);
  else
    rmax = [lx,fliplr(indmax(max(end-nbsym+2,1):end))];
    rmin = fliplr(indmin(max(end-nbsym+1,1):end));
    rsym = lx;
  end
else
  if x(end) > x(indmin(end))
    rmax = fliplr(indmax(max(end-nbsym,1):end-1));
    rmin = fliplr(indmin(max(end-nbsym+1,1):end));
    rsym = indmax(end);
  else
    rmax = fliplr(indmax(max(end-nbsym+1,1):end));
    rmin = [lx,fliplr(indmin(max(end-nbsym+2,1):end))];
    rsym = lx;
  end
end
   
% 将序列根据对称中心,镜像到两边
tlmin = 2*t(lsym)-t(lmin);
tlmax = 2*t(lsym)-t(lmax);
trmin = 2*t(rsym)-t(rmin);
trmax = 2*t(rsym)-t(rmax);
   
% 如果对称的部分没有足够的极值点
if tlmin(1) > t(1) || tlmax(1) > t(1) % 对折后的序列没有超出原序列的范围
  if lsym == indmax(1)
    lmax = fliplr(indmax(1:min(end,nbsym)));
  else
    lmin = fliplr(indmin(1:min(end,nbsym)));
  end
  if lsym == 1 % 这种情况不应该出现,程序直接中止
    error('bug')
  end
  lsym = 1; % 直接关于第一采样点取镜像
  tlmin = 2*t(lsym)-t(lmin);
  tlmax = 2*t(lsym)-t(lmax);
end   
   
% 序列末尾情况与序列开头类似
if trmin(end) < t(lx) || trmax(end) < t(lx)
  if rsym == indmax(end)
    rmax = fliplr(indmax(max(end-nbsym+1,1):end));
  else
    rmin = fliplr(indmin(max(end-nbsym+1,1):end));
  end
  if rsym == lx
    error('bug')
  end
  rsym = lx;
  trmin = 2*t(rsym)-t(rmin);
  trmax = 2*t(rsym)-t(rmax);
end
% 延拓点上的取值      
zlmax = z(lmax);
zlmin = z(lmin);
zrmax = z(rmax);
zrmin = z(rmin);
     
% 完成延拓
tmin = [tlmin t(indmin) trmin];
tmax = [tlmax t(indmax) trmax];
zmin = [zlmin z(indmin) zrmin];
zmax = [zlmax z(indmax) zrmax];
end
请问这里的处理边界条件是什么意思呢?怎么处理边界条件呢?目的是为了做什么呢?还有这里的nbsym的值多少呢?代表什么?求高手给俺指点一下,非常感谢!
回复
分享到:

使用道具 举报

发表于 2008-9-12 10:44 | 显示全部楼层
处理边界条件:一般是指端点你是当作极大值还是极小值处理,你的依据是什么。其实在EMD中边端处理包括了三样条自身的边端处理和EMD的端点处理。
怎么处理边界条件呢?:目前国内有几种,比较好的我觉得是法国的RILLING写的。
目的是为了做什么呢?:是抑制边端震荡(由三样条插值引起的)从二个边端延伸到信号中间,“污染”信号频率成分。
nbsym:可能是用来在极端的情况下限制极值点的。

评分

1

查看全部评分

发表于 2008-10-19 16:03 | 显示全部楼层

nbsym限制什么啊??不要乱讲

nbsym的真正用途是端点延拓的个数,这是因为不同的方法需要端点延拓的个数不同,有两边各一个和各2个之分

评分

1

查看全部评分

发表于 2009-4-28 18:12 | 显示全部楼层

回复 楼主 weiyuperfect 的帖子

有哪位仁兄可以不吝赐教呀,指点一下他是怎么具体镜像的?先行谢过!
发表于 2009-5-5 23:31 | 显示全部楼层
用一组短序列带进入函数计算下就OK了!
效果也一般,分解实际信号时,采样长度要够,但是分解的层数会变大,虚假分量变多。
可能是正交性造成的,所以目前来说,这方法有点悲观,能用用,但是严格成文的话,最好和小波比较!
发表于 2010-5-11 16:56 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-21 10:57 编辑
原帖由 weiyuperfect 于 2008-9-11 21:18 发表
emd程序当中有这个函数boundary_conditions:
% 处理边界条件(镜像法)
function [tmin,tmax,zmin,zmax] = boundary_conditions(indmin,indmax,t,x,z,nbsym)
% 实数情况下,x = z
lx = length(x);
% 判断极值点 ...


请教各位,在这个emd程序中, 以左延拓先极大后极小为例: tlmin = 2*t(lsym)-t(lmin);timin代表的是什么时间呢?t(lsym)代表的是对称轴所在的时间,lmin代表的是经过镜像以后的对称轴左边的极小值点的位置,t(lmin)不就是应该表示镜像以后所得到的在对称轴左边的极小值所在的时间吗 ?按这个公式来计算
tlmin = 2*t(lsym)-t(lmin);tlmin代表的是什么时间呢?请教大家!!!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-29 15:23 , Processed in 0.060150 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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