• 大小: 6KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: 其他
  • 标签: LMD代码  

资源简介

很简单的局部均值分解代码,可能不够完善,需要修改能够使用

资源截图

代码片段和文件信息

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\link.m

     文件        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\Untitled8.m

     文件        386  2013-01-11 10:30  LMD\zhaochun1.m

     目录          0  2018-08-15 15:55  LMD

----------- ---------  ---------- -----  ----

                11459                    12


评论

共有 条评论

相关资源