• 大小: 3KB
    文件类型: .zip
    金币: 2
    下载: 2 次
    发布日期: 2021-07-27
  • 语言: Matlab
  • 标签: dsp  滤波算法  

资源简介

经验模态分解是2000年以来以傅立叶变换为基础的线性和稳态频谱分析的一个重大突破,它是依据信号自身的时间尺度特征对信号进行分解,无需预先设定任何基函数,这一点与建立在先验性的谐波基函数和小波基函数上的傅立叶分解与小波分解方法有本质区别。EDM方法理论上可以应用于任何类型信号的分解,因而在处理非平稳及非线性数据上,具有非常明显的优势,具有很高的信噪比。

资源截图

代码片段和文件信息

function imf = emd(x)
% Empiricial Mode Decomposition (Hilbert-Huang Transform)
% EMD分解或HHT变换
% 返回值为cell类型,依次为一次IMF、二次IMF、...、最后残差
x   = transpose(x(:));
imf = [];
while ~ismonotonic(x)
    x1 = x;
    sd = Inf;
    while (sd > 0.1) || ~isimf(x1)
        s1 = getspline(x1);         % 极大值点样条曲线
        s2 = -getspline(-x1);       % 极小值点样条曲线
        x2 = x1-(s1+s2)/2;
       
        sd = sum((x1-x2).^2)/sum(x1.^2);
        x1 = x2;
    end
   
    imf{end+1} = x1;
    x          = x-x1;
end
imf{end+1} = x;
% 是否单调
function u = ismonotonic(x)
u1 = length(findpeaks(x))*length(findpeaks(-x));
if u1 > 0
    u = 0;
else
    u = 1;
end
% 是否IMF分量
function u = isimf(x)
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;
else
    u = 1;
end
% 据极大值点构造样条曲线
function s = getspline(x)
N = length(x);
p = findpeaks(x);
s = spline([0 p N+1][0 x(p) 0]1:N);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-11-21 19:51  EMD\
     文件        1081  2017-11-21 19:47  EMD\emd.m
     文件         912  2017-11-21 19:50  EMD\findpeaks.m
     文件         235  2017-11-21 19:48  EMD\HilbertAnalysis.m
     文件        1688  2017-11-21 19:49  EMD\plot_hht.m
     文件        1114  2017-11-21 19:51  EMD\test.m

评论

共有 条评论