• 大小: 24KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: Matlab
  • 标签: EMD  

资源简介

本程序为使用matlab编写的EMD的实现程序,并且在程序中对提取包络线的三次样条函数进行了改进,利用本程序可以提高EMD的使用精度。本人多次使用本程序或在本程序的基础上改进新算法,并发表学术论文。

资源截图

代码片段和文件信息

function imf = emd(x)                          %EMD的实现函数
% Empiricial Mode Decomposition (Hilbert-Huang Transform)
% imf = emd(x)
% Func : findpeaks

x   = transpose(x(:));
imf = [];
while ~ismonotonic(x)
   x1 = x;
   sd = Inf;
   while (sd > 0.1) | ~isimf(x1)
      s1 = getspline(x1);                        %s1是极大值包络
      s2 = -getspline(-x1);                      %s2是极小值包络
      x2 = x1-(s1+s2)/2;                         %x2是原信号减去极大值包络和极小值包络之和的平均值之后的剩余部分
      
      sd = sum((x1-x2).^2)/sum(x1.^2);           %极大值与极小值包络平均值的平方和与原信号的平方和之比小于0.1,则认为满足IMF的第二个条件。
      x1 = x2;
   end
   
   imf{end+1} = x1;                               %x1是个向量
   x          = x-x1;
end
imf{end+1} = x;

% FUNCTIONS

function u = ismonotonic(x)                                       %判断X是否是单一分量

u1 = length(findpeaks(x))*length(findpeaks(-x));
if u1 > 0 u = 0;
else      u = 1; end

function u = isimf(x)                                             %判断X是否是IMF分量

N  = length(x);
u1 = sum(x(1:N-1).*x(2:N) < 0);                                   %零点总数
u2 = length(findpeaks(x))+length(findpeaks(-x));                  %极大值与极小值总数
if abs(u1-u2) > 1 u = 0;                                         %极值点数与零点数相等或相差一个时,为IMF分量
else              u = 1; end                                     %findpeaks(x)得到极大值点,findpeaks(-x)得到极小值点

function s = getspline(x)                                         %三次样条插值得到极大值点的包络

N = length(x);
p = findpeaks(x);
s = spline([0 p N+1][0 x(p) 0]1:N);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-03-30 10:35  EMD-Hermite\
     文件        1690  2011-02-28 16:17  EMD-Hermite\emd.m
     文件        1424  2011-03-01 09:37  EMD-Hermite\EMD_Hermite.m
     文件        3406  2011-03-01 16:07  EMD-Hermite\EMD_Hermite_tst.asv
     文件        3406  2011-03-10 15:20  EMD-Hermite\EMD_Hermite_tst.m
     文件        3865  2011-03-01 14:41  EMD-Hermite\EMD_Hermite_tst_1.m
     文件        3409  2011-03-01 16:13  EMD-Hermite\EMD_Spline_tst.m
     文件         382  2011-03-01 11:29  EMD-Hermite\point.m
     文件         652  2011-02-25 10:36  EMD-Hermite\subHermite.m
     文件        1240  2011-03-01 11:15  EMD-Hermite\subHermite_test.asv
     文件        1234  2011-03-01 11:22  EMD-Hermite\subHermite_test.m
     文件         468  2011-02-28 15:05  EMD-Hermite\tst.m
     文件       66732  2011-03-01 16:07  EMD-Hermite\untitled.emf

评论

共有 条评论