分享一下我的成果:基于ISBM延拓的EMD
大家吧Rilling里面的boundary_conditions全部替换为我的boundary_sbm即可!参考论文是《Performance and limitations of HHT with an application to irregular waterwaves》(这个论文提出了原始的SBM),还有《An improved method for restraining the end effect in empirical modede composition and its applications to the fault diagnosis of large rotating machinery》(这一篇提出了ISBM),采样率设置越高越好!否则达不到第二篇论文效果! 我怎么上传不了附件呢?程序贴出来了!%
% 本算法在左右只延拓极大极小值点各一个
%
function = boundary_sbm(indmin,indmax,t,x,z,nbsym)
%
% isbm是判断是否进行isbm的算法,默认进行sbm而非isbm
% 但我默认进行isbm算法了
isbm=1;
lx=length(x);
if (length(indmin) + length(indmax) < 3)
error('Not Enough Extrema...')
end
%
% 前端处理
%
% 第一个极值是最极大值
if indmax(1) < indmin(1)
if length(indmin)<2 % indmin(2)不一定存在
tlmin=t(indmin(1))+t(indmax(1))-t(indmax(2));
else
tlmin=2*t(indmin(1))-t(indmin(2));
end
tlmax=2*t(indmax(1))-t(indmax(2));
%
% 此处s1,s2是斜率,严格遵守数学概念,有正负之分
s1=(z(indmax(2))-z(indmin(1)))/(t(indmax(2))-t(indmin(1)));
s2=(z(indmin(1))-z(indmax(1)))/(t(indmin(1))-t(indmax(1)));
zlmin=z(indmax(1))-s1*(t(indmax(1))-tlmin);
zlmax=zlmin-s2*(tlmin-tlmax);
%
% 是不是进行更精确的isbm算法
if isbm
if zlmin>z(1)
zlmin=z(1);
tlmin=t(1);
end
end
else % 第一个极值是最极小值
%
tlmin=2*t(indmin(1))-t(indmin(2));
if length(indmax)<2 % indmax(2)不一定存在
tlmax=t(indmax(1))+t(indmin(1))-t(indmin(2));
else
tlmax=2*t(indmax(1))-t(indmax(2));
end
s1=(z(indmin(2))-z(indmax(1)))/(t(indmin(2))-t(indmax(1)));
s2=(z(indmax(1))-z(indmin(1)))/(t(indmax(1))-t(indmin(1)));
%
% 此处s1,s2是斜率,严格遵守数学概念,有正负之分
zlmax=z(indmin(1))-s1*(t(indmin(1))-tlmax);% 草,这里曾经写错了tlmin
zlmin=zlmax-s2*(tlmax-tlmin);
%
% 是不是进行更精确的isbm算法
if isbm
if zlmax<z(1)
zlmax=z(1);
tlmax=t(1);
end
end
end
%
% 末端处理
%
if indmax(end) < indmin(end)
iflength(indmax)<2
trmax=t(indmax(end))+t(indmin(end))-t(indmin(end-1));
else
trmax=2*t(indmax(end))-t(indmax(end-1));
end
trmin=2*t(indmin(end))-t(indmin(end-1));
%
% 此处s1,s2是斜率,严格遵守数学概念,有正负之分
s1=(z(indmax(end))-z(indmin(end-1)))/(t(indmax(end))-t(indmin(end-1)));
s2=(z(indmin(end))-z(indmax(end)))/(t(indmin(end))-t(indmax(end)));
zrmax=z(indmin(end))-s1*(t(indmin(end))-trmax);
zrmin=zrmax-s2*(trmax-trmin);
%
% 是不是进行更精确的isbm算法
if isbm
if zrmax<z(end)
zrmax=z(end);
trmax=t(end);
end
end
else
%
if length(indmin)<2
trmin=t(indmin(end))+t(indmax(end))-t(indmax(end-1));
else
trmin=2*t(indmin(end))-t(indmin(end-1));
end
trmax=2*t(indmax(end))-t(indmax(end-1));
%
% 此处s1,s2是斜率,严格遵守数学概念,有正负之分
s1=(z(indmin(end))-z(indmax(end-1)))/(t(indmin(end))-t(indmax(end-1)));
s2=(z(indmax(end))-z(indmin(end)))/(t(indmax(end))-t(indmin(end)));
zrmin=z(indmax(end))-s1*(t(indmax(end))-trmin);
zrmax=zrmin-s2*(trmin-trmax);
%
% 是不是进行更精确的isbm算法
if isbm
if zrmin>z(end)
zrmax=z(end);
trmax=t(end);
end
end
end
%
% 完成延拓,更新处理后的序列
% 返回横坐标
tmin = ;
tmax = ;
% 返回纵坐标
zmin = ;
zmax = ;
end
什么是ISBM? 回复 3 # Cena马 的帖子
IMPROVED SLOPE BASED METHOD,你看一下第二篇论文,有几个图,一看就明白;我测试了作者的效果,对其所给类型曲线很有效~ ISBM也是头一回听说,学习一下,是把边界条件该一下吗。不知道效果如何呢。 回复 5 # nkdtxf 的帖子
对啊,你看看第二篇论文,虽然是英文的不过是中国人改进的算法(原理是外国人发明的),投的国外杂志,效果挺好,尤其对于非对称混合信号! 对一般的振动信号,故障诊断,效果如何呢。原理是外国人发明,是不是法国人那个算法呢
回复 7 # nkdtxf 的帖子
我还没做一般的故障试验,不是法国人G.RIILIG 回复 9 # 星上人 的帖子
去谷歌学术搜索,一搜就是 回复 10 # aishuishou 的帖子
谢谢楼主,我已经找到了。再请教一个问题,应该装哪个工具箱呢?我从网上下载的EMD工具箱,还有HHT工具箱,应该是装哪个呢?或者楼主能不能提供一个工具箱。
抱歉,由于我是刚刚接触,所以很多都不懂,多谢你的解答~ 回复 11 # 星上人 的帖子
你不搞HHT的话装emd工具箱就够了,可以装HHT(应该更全,我没试过)。我只把工具箱里最主要的emd.m完善了中文注释(程序貌似不小心改动哪了,不能运行了,但是可以参考注释),一回贴出来。分解的话这个emd.m就足够了,其他文件函数作用参见G.rilling的《ON EMPIRICAL MODE DECOMPOSITION AND ITS ALGORITHMS》一文。入门级问题论坛基本有结果了,为响应论坛精神,你可以先搜搜旧帖子看。 楼主的文章,再g学术中都没有找到可下载的 谢谢!还是高手!呵呵 回复 12 # aishuishou 的帖子
楼主,我初步知道怎么使用你的程序了,你能不能上这个帖子看看,用你给的那个算法和原先的算法哪个的效果更好?谢谢了~
http://forum.vibunion.com/thread-99245-1-1.html 回复 14 # bangder_ing 的帖子
去google学术搜索网站
页:
[1]
2