精华内容
下载资源
问答
  • emd分解

    千次阅读 2021-02-16 11:15:53
    %此版本为ALAN 版本的整合注释版 function imf = emd(x) % Empiricial Mode Decomposition (Hilbert-...while ~ismonotonic(x) %当x不是单调函数,分解终止条件 x1 = x; sd = Inf;%均值 %直到x1满足IMF条件,得c1 ...

    %此版本为ALAN 版本的整合注释版 
    function imf = emd(x)
    % Empiricial Mode Decomposition (Hilbert-Huang Transform)
    % imf = emd(x)
    % Func : findpeaks

    x= transpose(x(:));%转置为行矩阵
    imf = [];

    while ~ismonotonic(x) %当x不是单调函数,分解终止条件
       x1 = x;
       sd = Inf;%均值
    %直到x1满足IMF条件,得c1
       while (sd > 0.1) | ~isimf(x1) %当标准偏差系数sd大于0.1或x1不是固有模态函数时,分量终止条件
          s1 = getspline(x1);%上包络线
          s2 = -getspline(-x1);%下包络线
          x2 = x1-(s1+s2)/2;%此处的x2为文章中的h
          
          sd = sum((x1-x2).^2)/sum(x1.^2);
          x1 = x2;
       end
       
       imf{end+1} = x1;
       x          = x-x1;
    end

    imf{end+1} = x;
     

    展开全文
  • EMD分解

    2020-06-14 11:19:39
    参考文档: 经验模态分解EMD)——基础理论篇 官方文档: pyemd真是个神奇的工具,参考官方文档: pyemd 上代码吧: pip install EMD-signal import numpy as np import matplotlib.pyplot as plt import ...

    EMD 原理:

    参考文档: 经验模态分解(EMD)——基础理论篇

    官方文档:

    pyemd真是个神奇的工具,参考官方文档:

    pyemd

    上代码吧:

    pip install EMD-signal
    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd
    from PyEMD import EMD, Visualisation
    
    # 获取数据
    df_random = pd.read_csv('df_data.csv',index_col=['time'])
    y = df_data['colums1'].values
    plt.plot(y)

    from PyEMD import EMD, Visualisation
    import numpy  as np
    import matplotlib.pyplot as plt
    t = np.arange(len(y))
    emd = EMD()
    emd.emd(y)
    imfs, res = emd.get_imfs_and_residue()
    
    vis = Visualisation()
    #绘制IMF
    vis.plot_imfs(imfs=imfs, residue=res, t=t, include_residue=True)
    #绘制并显示所有提供的IMF的瞬时频率
    vis.plot_instant_freq(t, imfs=imfs)
    vis.show()
    

    重构:去除掉高频噪声后:

    plt.plot(y)
    plt.plot(+imfs[1,:]+imfs[2,:]+imfs[3,:])

     

    展开全文
  • emd分解代码

    2018-05-07 11:32:42
    emd分解 emd分解 emd分解
  • emd_EMD_EMD分解_源码

    2021-09-29 04:26:28
    emd分解算法程序,用于matlab,能成功实现分解
  • emd_EMD_EMD分解.zip

    2021-10-11 23:42:49
    emd_EMD_EMD分解.zip
  • 这是EMD分解的程序,很实用的,希望大家下载!经验模态分解(Empirical Mode Decomposition,简称EMD))方法被认为是2000年来以傅立叶变换为基础的线性和稳态频谱分析的一个重大突破,该方法是依据数据自身的时间尺度...

    这是EMD分解的程序,很实用的,希望大家下载!

    经验模态分解(Empirical Mode Decomposition,简称EMD))方法被认为是2000年来以傅立叶变换为基础的线性和稳态频谱分析的一个重大突破,该方法是依据数据自身的时间尺度特征来进行信号分解,无须预先设定任何基函数。这一点与建立在先验性的谐波基函数和小波基函数上的傅里叶分解与小波分解方法具有本质性的差别。正是由于这样的特点,EMD 方法在理论上可以应用于任何类型的信号的分解, 因而在处理非平稳及非线性数据上,具有非常明显的优势,适合于分析非线性、非平稳信号序列,具有很高的信噪比。所以,EMD方法一经提出就在不同的工程领域得到了迅速有效的应用,例如用在海洋、大气、天体观测资料与地震记录分析、机械故障诊断、密频动力系统的阻尼识别以及大型土木工程结构的模态参数识别方面。

    该方法的关键是经验模式分解,它能使复杂信号分解为有限个本征模函数(Intrinsic Mode Function,简称IMF),所分解出来的各IMF分量包含了原信号的不同时间尺度的局部特征信号。经验模态分解法能使非平稳数据进行平稳化处理,然后进行希尔伯特变换获得时频谱图,得到有物理意义的频率。与短时傅立叶变换、小波分解等方法相比,这种方法是直观的、直接的、后验的和自适应的,因为基函数是由数据本身所分解得到。由于分解是基于信号序列时间尺度的局部特性,因此具有自适应性。

    展开全文
  • EMD 分解

    千次阅读 2016-03-22 15:44:32
    今天看了些EMD信号分解方面的东西,matlab官网上有个Hilbert-Huang Transform的代码,代码效率极高啊,人家3句语句就解决了一个大问题,很牛啊!还有一个GRilling的EMD工具箱,好多文件,功能应该相当强大。  ...

    今天看了些EMD信号分解方面的东西,matlab官网上有个Hilbert-Huang Transform的代码,代码效率极高啊,人家3句语句就解决了一个大问题,很牛啊!还有一个GRilling的EMD工具箱,好多文件,功能应该相当强大。

        这里研究了研究matlab官网的代码,加了些注释、功能演示,效果如下

        原始信号由3个正弦信号加噪声组成,如下

    image

        下面为做EMD分解的结果

    image

    image

        第三次分解信号的瞬时频率如下

    image

        第四次分解信号的Hilbert分析

    image

       具体代码如下

    test.m文件

    clc
    clear all
    close all

    % [x, Fs] = wavread('Hum.wav');
    % Ts = 1/Fs;
    % x = x(1:6000);

    Ts = 0.001;
    Fs = 1/Ts;
    t=0:Ts:1;
    x = sin(2*pi*10*t) + sin(2*pi*50*t) + sin(2*pi*100*t) + 0.1*randn(1, length(t));

    imf = emd(x);
    plot_hht(x,imf,1/Fs);

    k = 4;
    y = imf{k};
    N = length(y);
    t = 0:Ts:Ts*(N-1);
    [yenvelope, yfreq, yh, yangle] = HilbertAnalysis(y, 1/Fs);
    yModulate = y./yenvelope;
    [YMf, f] = FFTAnalysis(yModulate, Ts);
    Yf = FFTAnalysis(y, Ts);

    figure
    subplot(321)
    plot(t, y)
    title(sprintf('IMF%d', k))
    xlabel('Time/s')
    ylabel(sprintf('IMF%d', k));

    subplot(322)
    plot(f, Yf)
    title(sprintf('IMF%d的频谱', k))
    xlabel('f/Hz')
    ylabel('|IMF(f)|');

    subplot(323)
    plot(t, yenvelope)
    title(sprintf('IMF%d的包络', k))
    xlabel('Time/s')
    ylabel('envelope');

    subplot(324)
    plot(t(1:end-1), yfreq)
    title(sprintf('IMF%d的瞬时频率', k))
    xlabel('Time/s')
    ylabel('Frequency/Hz');

    subplot(325)
    plot(t, yModulate)
    title(sprintf('IMF%d的调制信号', k))
    xlabel('Time/s')
    ylabel('modulation');

    subplot(326)
    plot(f, YMf)
    title(sprintf('IMF%d调制信号的频谱', k))
    xlabel('f/Hz')
    ylabel('|YMf(f)|');

     

    findpeaks.m文件

    function n = findpeaks(x)
    % Find peaks. 找极大值点,返回对应极大值点的坐标
       = find(diff(diff(x) > 0) < 0); % 相当于找二阶导小于0的点
       = find(x(n+1) > x(n));
    n(u) = n(u)+1;                      % 加1才真正对应极大值点

    % 图形解释上述过程
    % figure
    % subplot(611)
    % x = x(1:100);
    % plot(x, '-o')
    % grid on
    %
    % subplot(612)
    % plot(1.5:length(x), diff(x) > 0, '-o')
    % grid on
    % axis([1,length(x),-0.5,1.5])
    %
    % subplot(613)
    % plot(2:length(x)-1, diff(diff(x) > 0), '-o')
    % grid on
    % axis([1,length(x),-1.5,1.5])
    %
    % subplot(614)
    % plot(2:length(x)-1, diff(diff(x) > 0)<0, '-o')
    % grid on
    % axis([1,length(x),-1.5,1.5])
    %
    % n    = find(diff(diff(x) > 0) < 0);
    % subplot(615)
    % plot(n, ones(size(n)), 'o')
    % grid on
    % axis([1,length(x),0,2])
    %
    % u    = find(x(n+1) > x(n));
    % n(u) = n(u)+1;
    % subplot(616)
    % plot(n, ones(size(n)), 'o')
    % grid on
    % axis([1,length(x),0,2])

     

    plot_hht.m文件

    function plot_hht(x,imf,Ts)
    % Plot the HHT.
    % :: Syntax
       The array x is the input signal and Ts is the sampling period.
       Example on use: [x,Fs] = wavread('Hum.wav');
                       plot_hht(x(1:6000),1/Fs);
    % Func : emd

    % imf = emd(x);
    for k = 1:length(imf)
        b(k) = sum(imf{k}.*imf{k});
        th   = unwrap(angle(hilbert(imf{k})));  % 相位
        d{k} = diff(th)/Ts/(2*pi);          % 瞬时频率
    end
    [u,v] = sort(-b);
        = 1-b/max(b);                     % 后面绘图的亮度控制

    % Hilbert瞬时频率图
    N = length(x);
    c = linspace(0,(N-2)*Ts,N-1);           % 0:Ts:Ts*(N-2)
    for k = v(1:2)                          % 显示能量最大的两个IMF的瞬时频率
        figure
        plot(c,d{k});
        xlim([0 c(end)]);
        ylim([0 1/2/Ts]);
        xlabel('Time/s')
        ylabel('Frequency/Hz');
        title(sprintf('IMF%d', k))
    end

    % 显示各IMF
    M = length(imf);
    N = length(x);
    c = linspace(0,(N-1)*Ts,N);             % 0:Ts:Ts*(N-1)
    for k1 = 0:4:M-1
        figure
        for k2 = 1:min(4,M-k1)
            subplot(4,2,2*k2-1)
            plot(c,imf{k1+k2})
            set(gca,'FontSize',8,'XLim',[0 c(end)]);
            title(sprintf('第%d个IMF', k1+k2))
            xlabel('Time/s')
            ylabel(sprintf('IMF%d', k1+k2));
           
            subplot(4,2,2*k2)
            [yf, f] = FFTAnalysis(imf{k1+k2}, Ts);
            plot(f, yf)
            title(sprintf('第%d个IMF的频谱', k1+k2))
            xlabel('f/Hz')
            ylabel('|IMF(f)|');
        end
    end

    figure
    subplot(211)
    plot(c,x)
    set(gca,'FontSize',8,'XLim',[0 c(end)]);
    title('原始信号')
    xlabel('Time/s')
    ylabel('Origin');

    subplot(212)
    [Yf, f] = FFTAnalysis(x, Ts);
    plot(f, Yf)
    title('原始信号的频谱')
    xlabel('f/Hz')
    ylabel('|Y(f)|');

    emd.m文件

    function imf = emd(x)
    % Empiricial Mode Decomposition (Hilbert-Huang Transform)
    % EMD分解或HHT变换
    % 返回值为cell类型,依次为一次IMF、二次IMF、...、最后残差

      = 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)
     = 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);

    FFTAnalysis.m文件

    % 频谱分析
    function [Y, f] = FFTAnalysis(y, Ts)
    Fs = 1/Ts;
    L = length(y);
    NFFT = 2^nextpow2(L);

    y = y - mean(y);
    Y = fft(y, NFFT)/L;
    Y = 2*abs(Y(1:NFFT/2+1));
    f = Fs/2*linspace(0, 1, NFFT/2+1);
    end

    HilbertAnalysis.m文件

    % Hilbert分析
    function [yenvelope, yf, yh, yangle] = HilbertAnalysis(y, Ts)
    yh = hilbert(y);
    yenvelope = abs(yh);                % 包络
    yangle = unwrap(angle(yh));         % 相位
    yf = diff(yangle)/2/pi/Ts;          % 瞬时频率
    end

    展开全文
  • emd_EMD分解_源码

    2021-10-01 00:25:48
    进行emd分解,一个非常好的程序,直接调用即可
  • emd_EMD_EMD分解_源码.zip

    2021-09-30 18:20:45
    emd_EMD_EMD分解_源码.zip
  • EMD分解解析

    万次阅读 2019-07-08 09:11:54
    EMD分解解析
  • EMD分解matlab小程序,里面包含有EMD工具箱,非常的好用。
  • EMD分解程序

    2016-10-29 20:27:07
    EMD分解程序
  • EMD分解代码

    2018-12-22 19:53:57
    EMD分解程序,需要的童鞋自行下载,也可以联系我下载程序代码
  • emd分解matlab程序

    2018-12-19 21:57:53
    emd分解matlab程序
  • EMD分解MATLAB代码

    2018-04-03 22:50:09
    按照EMD原理写的EMD分解代码,内附测试信号,十分有用
  • 对该信号进行EMD分解,其中第一列为信号振幅,第二列为时间,共301组数据。
  • EMD分解MATLAB程序

    2017-03-18 21:38:06
    一些关于emd分解的MATLAB代码
  • wang'sEMD_held2qs_分解_经验模态分解_EMD_EMD分解_源码.zip
  • EMD分解小波去噪.zip

    2019-12-24 17:58:58
    提供了自己编写的EMD分解小波去噪程序,采用ECG信号,给出了几种小波去噪方法。提供了EMD分解滤波的原理
  • wang'sEMD_held2qs_分解_经验模态分解_EMD_EMD分解_源码.rar.rar
  • EMD分解matlab程序

    2016-10-21 11:28:22
    三个信号经过叠加,经过EMD分解,得到IMF分量。
  • 基于峭度的EMD分解

    2015-12-16 19:40:06
    基于峭度的EMD分解,完成多层EMD分解,并计算包络谱,频谱
  • 变模态分解EMD)的代码,适用于对非平稳非线性信号的分解分解后得到多个IMF和一个残基。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,051
精华内容 820
关键字:

emd分解