资源简介
很简单的局部均值分解代码,可能不够完善,需要修改能够使用
代码片段和文件信息
function [envmin envmaxenvmoyindminindmaxindzer] = envelope(txINTERP)
%computes envelopes and mean with various interpolations
NBSYM = 2; % 边界延拓点数
DEF_INTERP = ‘spline‘;
if nargin < 2
x = t;
t = 1:length(x);
INTERP = DEF_INTERP;
end
if nargin == 2
if ischar(x)
INTERP = x;
x = t;
t = 1:length(x);
end
end
if ~ischar(INTERP)
error(‘interp parameter must be ‘‘linear‘‘‘‘ ‘‘cubic‘‘ or ‘‘spline‘‘‘)
end
if ~any(strcmpi(INTERP{‘linear‘‘cubic‘‘spline‘}))
error(‘interp parameter must be ‘‘linear‘‘‘‘ ‘‘cubic‘‘ or ‘‘spline‘‘‘)
end
if min([size(x)size(t)]) > 1
error(‘x and t must be vectors‘)
end
s = size(x);
if s(1) > 1
x = x‘;
end
s = size(t);
if s(1) > 1
t = t‘;
end
if length(t) ~= length(x)
error(‘x and t must have the same length‘)
end
lx = length(x);
[indminindmaxindzer] = extr(xt);
%boundary conditions for interpolation
[tmintmaxxminxmax] = boundary_conditions(indminindmaxtxNBSYM);
% definition of envelopes from interpolation
envmax = interp1(tmaxxmaxtINTERP);
envmin = interp1(tminxmintINTERP);
if nargout > 2
envmoy = (envmax + envmin)/2;
end
end
function [tmintmaxxminxmax] = boundary_conditions(indminindmaxtxnbsym)
% computes the boundary conditions for interpolation (mainly mirror symmetry)
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(endnbsym+1)));
lmin = fliplr(indmin(1:min(endnbsym)));
lsym = indmax(1);
else% 如果第一个采样值小于第一个极小值,则将认为该值是一个极小值,以该点为对称中心
lmax = fliplr(indmax(1:min(endnbsym)));
lmin = [fliplr(indmin(1:min(endnbsym-1)))1];
lsym = 1;
end
else
if x(1) < x(indmax(1))% 以第一个极小值为对称中心
lmax = fliplr(indmax(1:min(endnbsym)));
lmin = fliplr(indmin(2:min(endnbsym+1)));
lsym = indmin(1);
else% 如果第一个采样值大于第一个极大值,则将认为该值是一个极大值,以该点为对称中心
lmax = [fliplr(indmax(1:min(endnbsym-1)))1];
lmin = fliplr(indmin(1:min(endnbsym)));
lsym = 1;
end
end
% 序列末尾情况与序列开头类似
if indmax(end) < indmin(end)
if x(end) < x(indmax(end))
rmax = fliplr(indmax(max(end-nbsym+11):end));
rmin = fliplr(indmin(max(end-nbsym1):end-1));
rsym = indmin(end);
else
rmax = [lxfliplr(indmax(max(end-nbsym+21):end))];
rmin = fliplr(indmin(max(end-nbsym+11):end));
rsym = lx;
end
else
if x(end) > x(indmin(end))
rmax = fliplr(indmax(max(end-nbsym1):end-1));
rmin = fliplr(indmin(max(end-nbsym+11):end));
rsym = indmax(end);
else
rmax = fliplr(indmax(max(end-nbsym+11):end));
rmin = [lxfliplr(indmin(max(end-nbsym+21):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);
% in case symmetrized parts do not extend enough% 如果对称的部分没有足够的极值点
if tlmin(1) > t(1) | tlmax(1) > t(1)% 对折后的序列没有超出原序列的范围
if lsym == indmax(1)
lmax = fliplr(indmax(1:min(endnbsym)));
else
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3957 2013-01-11 10:32 LMD\envelope.m
文件 1705 2013-01-11 10:33 LMD\extr.m
文件 58 2010-12-15 23:23 LMD\li
文件 843 2013-01-11 10:29 LMD\lmd1.m
文件 1916 2013-01-14 17:17 LMD\move.m
文件 100 2013-01-11 10:29 LMD\nengliang.m
文件 189 2013-01-11 10:34 LMD\pos.m
文件 991 2013-01-11 10:35 LMD\position.m
文件 971 2010-12-16 10:56 LMD\smove.m
文件 343 2013-01-11 10:35 LMD\Unti
文件 386 2013-01-11 10:30 LMD\zhaochun1.m
目录 0 2018-08-15 15:55 LMD
----------- --------- ---------- ----- ----
11459 12
评论
共有 条评论