function [Imf,nbits]=fun_emd(Sig)
if nargin<1
error('At least one input is needed!');
end
%Sig=Sig';
c=Sig;
SigLen=length(Sig);
t=1:SigLen;
c=Sig;
Imf=[];
nbits=[];
MaxLoop=1000;
[IndMax,IndMin]=ExtrPoint(c);%提取信号的极值点
[Index_zer]=ZeroPoint(c);%提取信号的零点
NExtr=length(IndMin)+length(IndMax);
NZero=length(Index_zer);
Bool=1;
NEtd=2;
IMFNum=0;
while NExtr>2&&Bool>0
h=c;
nLoop=1;
SD=1;
[IndMax,IndMin]=ExtrPoint(c);%提取信号的极值点%%%%%
[Index_zer]=ZeroPoint(c);%提取信号的零点%%%%%%%%%%%%%%%
NExtr=length(IndMin)+length(IndMax);
NZero=length(Index_zer);
%Bool=1;
%NEtd=2;
%IMFNum=0;
while (SD>0.3||(abs(NZero-NExtr)>1))&&(NExtr>2)&&nLoop<MaxLoop
%镜像拓展序列
LMaxEtd=fliplr(IndMax(1:min(end,NEtd)));
LMinEtd=fliplr(IndMin(1:min(end,NEtd)));
hlMaxEtd=h(LMaxEtd);
hlMinEtd=h(LMinEtd);
LMaxEtd=-LMaxEtd+1;
LMinEtd=-LMinEtd+1;
RMaxEtd=fliplr(IndMax(max(end-NEtd+1,1):end));
RMinEtd=fliplr(IndMin(max(end-NEtd+1,1):end));
hrMaxEtd=h(RMaxEtd);
hrMinEtd=h(RMinEtd);
RMaxEtd=2*SigLen-RMaxEtd;
RMinEtd=2*SigLen-RMinEtd;
%计算信号的上包络线
Max_Env=interp1([LMaxEtd,t(IndMax),RMaxEtd],[hlMaxEtd,h(IndMax),hrMaxEtd],t,'spline');
%计算信号的下包络线
Min_Env=interp1([LMinEtd,t(IndMin),RMinEtd],[hlMinEtd,h(IndMin),hrMinEtd],t,'spline');
Mean_Env=(Max_Env+Min_Env)/2;%计算包络线平均值
Preh=h;
h=h-Mean_Env;
alarm=1.0e-8;
SD=sum(((Preh-h).^2)./(Preh.^2+alarm));
[IndMax,IndMin]=ExtrPoint(h);
Index_zero=ZeroPoint(h);%%%%%%%%%%%%%%%%%%%%%
NExtr=length(IndMin)+length(IndMax);
NZero=length(Index_zero);%%%%%%%%%%%%%%%%%%%%%%
nLoop=nLoop+1;
end %提取到一个本征模分量
IMFNum=IMFNum+1;
disp([num2str(IMFNum),'IMFs have been obtained.']);
Imf=[Imf;h];
c=c-h;
[IndMax,IndMin]=ExtrPoint(c);%提取信号的极值点
Index_zer=ZeroPoint(c);%提取信号的零点
NExtr=length(IndMin)+length(IndMax);
NZero=length(Index_zer);
nbits=[nbits;nLoop-1];
Bool=1;
if (range(c)/range(Sig))<2e-4;
Bool=-1;
end
end
Imf=[Imf;c];
[n,m]=size(Imf);
xCor=[];
end
%提取信号的极大值和极小值
function [Pos_max,Pos_min]=ExtrPoint(Sig)
if nargin==0
error('At least one input is require.');
end
SigLen=length(Sig);
DSig=diff(Sig);
DSig1=DSig(1:end-1);
DSig2=DSig(2:end);
Pos_min=find(DSig1.*DSig2<0&DSig1<0)+1;
Pos_max=find(DSig1.*DSig2<0&DSig1>0)+1;
Pos_max=sort(Pos_max);
Pos_min=sort(Pos_min);
end
%提取信号的零点
function PZero=ZeroPoint(Sig)
if nargin==0
error('At least one inputis requere');
end
SigLen=length(Sig);
s1=Sig(1:SigLen-1);
s2=Sig(2:SigLen);
PZero=find(s1.*s2<0);
IndZero=find(Sig==0, 1);
if ~isempty(IndZero)
zero=find(Sig==0);
DZero=ifft([0,zero,0]);%%%%%%%%%%%%dfft
LZero=find(DZero==1);
RZero=find(DZero==-1);
IndZero=round((LZero+RZero)/2);
PZero=sort([PZero,IndZero]);
end
end
EMD.rar_EMD 程序_decomposition_emd matlab程序_emd程序_经验
版权申诉
57 浏览量
2022-09-24
10:16:50
上传
评论
收藏 1KB RAR 举报
我虽横行却不霸道
- 粉丝: 72
- 资源: 1万+
最新资源
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
- 基于MIC+NE555光敏电阻的声光控电路Multisim仿真原理图
- 基于JSP毕业设计-基于WEB操作系统课程教学网站的设计与实现(源代码+论文).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈