草庐IT

CEEMDAN算法及其应用

Zhi Zhao 2024-03-01 原文

目录

前言

一、CEEMDAN 算法

1 算法原理

2 MATLAB程序

二、CEEMDAN 算法的应用 

1 CEEMDAN—小波阈值联合去噪

2 CEEMDAN—小波包分析降噪

3 CEEMDAN—时频峰值滤波

结束语

参考文献


前言

针对EMD算法分解信号存在模态混叠的问题,EEMD和CEEMD分解算法通过在待分解信号中加入成对正负高斯白噪声来减轻EMD分解的模态混叠。但是这两种算法分解信号得到的本征模态分量中总会残留一定的白噪声,影响后续信号的分析和处理。

为了解决这些问题,TORRES 等提出了一种改进算法——完全自适应噪声集合经验模态分解(Complete EEMD with Adaptive Noise,CEEMDAN),又称完全集合经验模态分解。

CEEMDAN 分解从两个方面解决了上述问题:1)加入经 EMD 分解后含辅助噪声的 IMF 分量,而不是将高斯白噪声信号直接添加在原始信号中;2) EEMD 分解和 CEEMD 分解是将经验模态分解后得到的模态分量进行总体平均,CEEMDAN 分解则在得到的第一阶 IMF分量后就进行总体平均计算,得到最终的第一阶 IMF分量,然后对残余部分重复进行如上操作,这样便有效地解决了白噪声从高频到低频的转移传递问题。

一、CEEMDAN 算法

1 算法原理

为经过 EMD 分解后得到的第 个本征模态分量,CEEMDAN 分解得到的第  个本征模态分量为为满足标准正态分布的高斯白噪声信号,为加入白噪声的次数,为白噪声的标准表,为待分解信号。CEEMDAN 分解步骤如下:

1)将高斯白噪声加入到待分解信号得到新信号,其中q=1,2. 对新信号进行EMD分解,得到第一阶本征模态分量

2)对产生的 N 个模态分量进行总体平均就得到CEEMDAN 分解的第 1个本征模态分量:

3)计算去除第一个模态分量后的残差:

4)在 中加入正负成对高斯白噪声得到新信号,以新信号为载体进行 EMD 分解,得到第一阶模态分量,由此可以得到 CEEMDAN 分解的第 2个本征模态分量:

5)计算去除第二个模态分量后的残差:

6)重复上述步骤,直到获得的残差信号为单调函数,不能继续分解,算法结束。此时得到的本征模态分量数量为 K,则原始信号被分解为:

2 MATLAB程序

clc;
clear;
close all;

fs=4000;   % 采样频率为4000Hz
t=(0:1/fs:(2-1/fs))';
N=length(t);
x1=0.25*cos(0.875*pi*50*t);
x2=0.3*sin(2*pi*50*t).*(1+1.5*sin(0.5*pi*40*t));
x3=0.15*exp(-15*t).*sin(200*pi*t);
x=x1+x2+x3;
nt=0.2*randn(N,1);
y=x+nt;

%% CEEMDAN分解
Nstd = 0.2;                % 高斯白噪声标准差,一般选择0-1
NR = 100;                  % 加入噪声的次数,一般选择50-100
MaxIter = 500;            % 最大迭代次数
[imf, its]=ceemdan(y,Nstd,NR,MaxIter);
[m, n]=size(imf);
CC=zeros(1,m);  % 相关系数
figure;
for i=1:m
    subplot(m/2,2,i);plot(imf(i,:));ylabel(['IMF',num2str(i)]);
    CC(i)=corr(imf(i,:)',y,'type','Pearson');   % 相关系数
end
CEEMDAN分解的各个IMF分量
CEEMDAN分解的各个IMF分量与待分解信号y(t)的相关系数
IMF1IMF2IMF3IMF4IMF5IMF6IMF7
0.37020.2354

0.2431

0.2012

0.17930.75280.7492
IMF8IMF9IMF10IMF11IMF12IMF13IMF14
0.45660.06870.02870.0174-0.00290.01110.0028

二、CEEMDAN 算法的应用 

利用CEEMDAN算法分解含噪声信号时,若将含噪声较多的 IMF分量直接舍弃,容易造成有效信息的缺失,因此,需要采用其他去噪方法对含噪声较多的高频 IMF分量进行去噪处理,最后将去噪后的 IMF分量和未去噪处理的 IMF分量进行重构,从而得到去噪后的信号。

1 CEEMDAN—小波阈值联合去噪

论文复现:CEEMDAN-小波阈值联合的球磨机筒体振动信号去噪方法研究。

首先运用 CEEMDAN 算法将信号分解成一系列 IMF 分量; 其次采用连续均方误差准则确定含噪声较多的高频 IMF 分量; 然后采用小波阈值去噪方法对含噪声较多的高频 IMF 分量进行去噪处理; 最后将去噪处理的 IMF 分量和未去噪处理的 IMF 分量进行重构,获得联合去噪方法去噪后的信号。

MATLAB代码链接:CEEMDAN—小波阈值联合去噪

2 CEEMDAN—小波包分析降噪

论文复现:基于 CEEMDAN -小波包分析的隧道爆破信号去噪方法。

首先,通过 CEEMDAN 分解得到多个本征模态分量,利用相关系数筛选出包含噪声的模态分量,并通过模态分量的频谱图及方差贡献率进行校核。然后,利用小波包阈值降噪方法对含有噪声的模态分量进行处理。最后,将未经处理的模态分量与去噪完成的模态分量进行重构,得到最终纯净的爆破振动信号。同时,通过小波包能量谱分析验证此降噪方法的可行性。

MATLAB代码链接:CEEMDAN—小波包分析降噪

3 CEEMDAN—时频峰值滤波

论文复现:基于 CEEMDAN 的时频峰值滤波微地震随机噪声压制方法。

原始微地震数据经 CEEMDAN 分解为若干个本征模态分量 IMF;通过计算 IMF 的样本熵将 IMF 划分为需滤波和存留的两个组分,对需 TFPF 滤波的 IMF 分量逐一选择时窗长度进行滤波;将处理后的 IMF 与不需处理的 IMF 重构即可得到最终的滤波信号。

MATLAB代码链接:

结束语

大家的点赞和关注是博主最大的动力,博主所有博文中的代码文件都可分享给您(除了少量付费资源),如果您想要获取博文中的完整代码文件,可通过C币或积分下载,没有C币或积分的朋友可在关注、点赞和评论博文后,私信发送您的邮箱,我会在第一时间发送给您。博主后面会有更多的分享,敬请关注哦!

参考文献

[1] TORRES M E, COLOMINAS M A, SCHLOTTHAUER G, et al. A complete ensemble empirical mode decomposition with adaptive noise[C] // IEEE International Conference on Acoustics, Speech and Signal Processing, IEEE, 2011 :4144-4147.

[2] 蔡改贫, 赵小涛, 胡显能, 等. CEEMDAN-小波阈值联合的球磨机筒体振动信号去噪方法研究[J]. 机械科学与技术, 2020, 39(7) : 1077-1085.

[3] 王海龙,赵岩,王海军,彭婵媛,仝潇.基于 CEEMDAN -小波包分析的隧道爆破信号去噪方法.爆炸与冲击.(网络首发)

[4] 陈毅军,程 浩,巩恩普,等. 基于 CEEMDAN 的时频峰值滤波微地震随机噪声压制方法[J]. 石油地球物理勘探,2021,56(2):234-241.

有关CEEMDAN算法及其应用的更多相关文章

  1. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  2. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  3. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  4. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  5. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  6. ruby-on-rails - 如何在 Gem 中获取 Rails 应用程序的根目录 - 2

    是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在

  7. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  8. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  9. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  10. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

随机推荐