MEEMD--改进的EEMD算法及其应用研究

        总体平均经验模态分解(EEMD)虽然在一定程度上抑制了模态混淆现象,但是其计算量较大,添加的白噪声不能被完全中和。湖南大学的程军圣等人提出了改进的EEMD(MEEMD)。实验结果证明,MEEMD不仅能够抑制EMD分解过程中的模态混淆问题,而且缩小了工作量、减少了重构误差。

相关文献:[1]郑近德, 程军圣, 杨宇. 改进的EEMD算法及其应用研究[J]. 振动与冲击, 2013(21):21-26.


MATLAB

function modes=meemd(x,Nstd,Ne,MAXmodes,m,tao,theta0)
%----------------------------------------------------------------------
%   INPUTs
%   x: signal to decompose
%   Nstd: noise standard deviation
%   Ne: number of realizations
%   MaxIter: maximum number of sifting iterations allowed.
%  OUTPUTs
%  modes: contain the obtained modes in a matrix with the rows being the modes        
% -------------------------------------------------------------------------


%% 数量运算标准化
desvio_x=std(x);
x=x/desvio_x;

modes=zeros(size(x));
aux=zeros(MAXmodes+1,size(x,2)); %+1表示最后1行是余项
acum=zeros(size(x));

%%% 生成噪声信号
for i=1:Ne
    white_noise{i}=randn(size(x));
end

while  nnz(diff(sign(diff(x-acum))))>2
    %%% 生成IMF,平均计算
    for i=1:Ne
          [temp1, ~, ~]=emd(x-acum+Nstd*white_noise{i},'MaxNumIMF',MAXmodes);
          [temp2, ~, ~]=emd(x-acum-Nstd*white_noise{i},'MaxNumIMF',MAXmodes);
          te=min(size(temp1,1),size(temp2,1));
          a = zeros(MAXmodes+1,size(temp1,2));
          temp1=[temp1(1:te,:);a(te+1:MAXmodes+1,:)];
          temp2=[temp2(1:te,:);a(te+1:MAXmodes+1,:)];
          if te<=MAXmodes+1  
              aux=aux+(temp1+temp2)./(2*Ne);
          end
    end
    %%%计算全部的IMF的排列熵
    for i = 1:size(aux,1)
        auxPE=pec(aux(i,:),m,tao);
        if auxPE>=theta0
            acum=acum+aux(i,:);
        end
    end
    %%% 剩余信号进行EMD分解
        modes=emd(x-acum,'MaxNumIMF',MAXmodes);
        break
end

%%% 恢复原来的运算量级
modes=modes*desvio_x;

end

程序的输入为自行编辑的合成信号,读者可读入自己的数据。

计算结果:

 在MEEMD中关于EMD分解,很多程序将MaxNumIMF写为后面的MAXMODE;导致程序运行不同。这点应引起注意。

 [temp1, ~, ~]=emd(x-acum+Nstd*white_noise{i},'MaxNumIMF',MAXmodes);
 [temp2, ~, ~]=emd(x-acum-Nstd*white_noise{i},'MaxNumIMF',MAXmodes);

参考文献:

[1]郑近德, 程军圣, 杨宇. 改进的EEMD算法及其应用研究[J]. 振动与冲击, 2013(21):21-26.

  • 4
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
### 回答1: EEMD (Empirical Mode Decomposition) 是一种信号分解方法,它使用数据驱动的自适应方法,将非线性和非平稳信号分解成若干个具有不同频率的本征模态函数(EMD)。EEMD 算法在 Matlab 中有多种实现方式。 在 Matlab 中,可以使用自带的信号处理工具箱(Signal Processing Toolbox)来进行 EEMD 算法的实现。具体步骤如下: 1. 载入数据:将需要进行 EEMD 分解的信号数据导入 Matlab,可以是一维或多维数据。 2. 设置参数:根据具体需求,设置 EEMD 算法的参数,如本征模态函数的数目、迭代次数等。这些参数会影响分解结果的质量和计算速度。 3. 实现 EEMD 算法:调用 Matlab 提供的相关函数来实现 EEMD 算法。可以使用 `eemd` 函数进行信号的分解,并提供分解结果和相关的本征模态函数。 4. 分析结果:对 EEMD 分解得到的本征模态函数进行进一步分析,如计算频谱、幅度谱等。 5. 可视化展示:使用 Matlab 的绘图功能,将分解结果进行可视化展示。可以绘制原始信号和各个本征模态函数的图像,以便更好地理解信号的特征。 总体而言,通过 Matlab 中的 EEMD 算法实现,我们可以对非线性和非平稳信号进行有效的分解和分析,从而更好地理解信号的成分和特征。这不仅可以应用信号处理领域,还可以在其他科学领域(如生物医学、气象学等)中找到广泛的应用。 ### 回答2: EEMD(Empirical Mode Decomposition,经验模态分解)算法是一种将非线性和非平稳信号分解为有限个本征模函数(IMF)的方法。EEMD算法的主要步骤如下: 1. 首先,对原始信号进行预处理,去除趋势成分。 2. 将预处理后的信号加入高斯白噪声以提高分解的稳定性。 3. 对加入噪声后的信号进行一次EMD分解,得到一系列IMF。 4. 重复步骤3,进行多次EMD分解,得到一组IMF。 5. 对每一组IMF进行集合平均,得到一组累积模态函数(CMF)。 6. 对CMF进行一次EMD,得到归一化的IMF。 7. 重复步骤6,进行多次EMD,得到一组归一化的IMF。 8. 对每一组归一化IMF进行集合平均,得到最终的IMF。 9. 对最终的IMF进行重构,得到分解后的信号。 EEMD算法主要解决了传统EMD算法存在的模态混叠问题,同时通过引入高斯白噪声,提高了算法的稳定性和精确性。其主要优点包括:能够适应多尺度和多频段的信号分析,对信号的非线性和非平稳特性有较好的处理能力,同时能够提取出信号中的局部特征。 在MATLAB中,可以通过使用相应的EEMD工具箱或编写自定义函数来实现EEMD算法。常用的MATLAB工具箱包括CEEMDAN(Complete Ensemble EMD with Adaptive Noise)和EEMD工具箱等。这些工具箱提供了一系列函数和工具,可以方便地进行EEMD信号分解和重构,同时提供了参数调节和图形化展示等功能,使得EEMD算法的实现更加简单和高效。 ### 回答3: EEMD (Empirical Mode Decomposition) 是一种信号处理算法,用于对非线性和非稳定信号进行分解和分析。EEMD 算法在 MATLAB 中有广泛的使用。 EEMD 算法的主要思想是通过将信号分解为多个固有模态函数 (Intrinsic Mode Functions, IMF),得到信号的局部模态特征,然后对每个 IMF 进行辅助的 Hilbert 变换和整合来消除其频域的混叠效应,得到频率-振幅特性。 在 MATLAB 中,可以使用 eemd 函数来实施 EEMD 算法。该函数的语法如下: ``` imf = eemd(signal, ensemble number, noise ratio) ``` 其中,signal 是要进行分解的信号,ensemble number 是进行 EMD 操作的次数,noise ratio 是添加到信号中的白噪声的标准差。 eemd 函数的返回值是一个包含每个 IMF 的矩阵。每一列对应一个 IMF,而最后一列是信号的残差,即无法再分解的高频成分。可以根据需要选择提取其中的 IMFs 进行后续分析。 使用 EEMD 算法在 MATLAB 中进行信号分析的一般步骤如下: 1. 导入数据或生成需要分析的信号。 2. 调用 eemd 函数对信号进行 EEMD 分解,得到 IMFs。 3. 根据需求选择合适的 IMFs 进行频域或时域分析。 4. 结果可视化或进一步处理。 需要注意的是,在使用 EEMD 算法时,合适的参数选择对于分解结果的准确性和分解质量有重要影响。例如,ensemble number 可以决定信号的分解精细度,而 noise ratio 的选择则可以影响分解的结果。 总之,EEMD 算法是一种非线性和非稳定信号分析的有效工具,通过 MATLAB 中的 eemd 函数可以方便地实施该算法
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值