时序分解 | Matlab实现EEMD集合经验模态分解时间序列信号分解
目录
- 时序分解 | Matlab实现EEMD集合经验模态分解时间序列信号分解
- 效果一览
- 基本介绍
- 程序设计
- 参考资料
效果一览
基本介绍
Matlab实现EEMD集合经验模态分解时间序列信号分解
1.分解效果图 ,效果如图所示,可完全满足您的需求~
2.直接替换数据即可用 适合新手小白 注释清晰~
3.附赠案例数据 直接运行main一键出图~
程序设计
- 完整源码和数据获取方式:Matlab实现EEMD集合经验模态分解时间序列信号分解。
function [modos its]=eemd(x,Nstd,NR,MaxIter)
%--------------------------------------------------------------------------
%WARNING: this code needs to include in the same
%directoy the file emd.m developed by Rilling and Flandrin.
% -------------------------------------------------------------------------
% OUTPUT
% modos: contain the obtained modes in a matrix with the rows being the modes
% its: contain the iterations needed for each mode for each realization
%
% INPUT
% x: signal to decompose
% Nstd: noise standard deviation
% NR: number of realizations
% MaxIter: maximum number of sifting iterations allowed.
% -------------------------------------------------------------------------
% Syntax
%
% modos=eemd(x,Nstd,NR,MaxIter)
% [modos its]=eemd(x,Nstd,NR,MaxIter)
% -------------------------------------------------------------------------
% NOTE: if Nstd=0 and NR=1, the EMD decomposition is obtained.
% -------------------------------------------------------------------------
iter=it;
if NR>=2
for i=2:NR
xconruido=x+Nstd*randn(size(x));
[temp, ort, it]=emd(xconruido,'MAXITERATIONS',MaxIter);
temp=temp/NR;
lit=length(it);
[p liter]=size(iter);
if lit<liter
it=[it zeros(1,liter-lit)];
end;
if liter<lit
iter=[iter zeros(p,lit-liter)];
end;
iter=[iter;it];
[filas columnas]=size(temp);
[alto ancho]=size(modos);
diferencia=alto-filas;
if filas>alto
modos=[modos; zeros(abs(diferencia),ancho)];
end;
if alto>filas
temp=[temp;zeros(abs(diferencia),ancho)];
end;
modos=modos+temp;
end;
参考资料
[1] https://blog.csdn.net/kjm13182345320/article/details/129215161
[2] https://blog.csdn.net/kjm13182345320/article/details/128105718