CEEMDAN:完全噪声辅助聚合经验模态分解(matlab)——学习笔记3
CEEMDAN:完全噪声辅助聚合经验模态分解——学习笔记3
从EMD到CEEMDAN
1.EMD
EMD算法将基于原始信号的局部特征时间尺度,将原始信号分解为特征模态函数,即将其分解为从高频到低频的一系列IMF分量。
算法分解步骤如下:
对于一个任意信号s(t),通过三次样条插值分别提取出该信号的极大值、极小值包络线,根据得到的上下包络线计算得到均值曲线a(t)。则有:
h(t)=s(t)−a(t)\ h(t)=s(t)-a(t) \, h(t)=s(t)−a(t)
根据IMF分量成立条件判断h(t)是否为IMF分量,其中IMF作为单分量信号。其成立条件为:
(1)信号的局部极值点数和过零点数相等或至多相差一个,即信号中所有极大值和极小值围绕零轴线波动。
(2)在信号的任意一点上,由局部极大值和局部极小值分别连成的上包络线和下包络线的均值都为0。
如果h(t)满足条件,则有第一阶IMF分量:
IMF1:c1(t)=h(t)\ IMF_1:c_1(t)=h(t) IMF1:c1(t)=h(t)
第一阶剩余分量为:
r1(t)=s(t)−c1(t)\ r_1(t)=s(t)-c_1(t) r1(t)=s(t)−c1(t)
若r1(t)为非单调函数,则令:
s(t)=r1(t)\ s(t)=r_1(t) s(t)=r1(t)
再次通过三次样条插值取极值包络线,得到第2阶、第3阶……IMF分量,直到rn(t)为单调函数为止。
如果h(t)不满足条件,则令:
s(t)=h(t)\ s(t)=h(t) s(t)=h(t)
再次进行三次样条插值提取上下包络线,重复上述步骤,不断迭代,直到h(t)满足IMF分量条件为止。但是,为了让得到的分量具有物理意义,还需要对迭代次数进行限制,即仿柯西收敛准则,定义:
SD=∑t=0T∣hk−1(t)−hk(t)∣2/hk−1(t)2\ SD= \sum_{t=0}^{T}|h_{k-1}(t)-h_k(t)|^2/h_{k-1}(t)^2 SD=t=0∑T∣hk−1(t)−hk(t)∣2/hk−1(t)2
SD在0.2~0.3之间时,迭代筛选过程停止。
利用matlab自带的emd函数实现的emd分解如下:
采用一个任意的原始信号:
t=0.01:0.01:3;
f=10*sin(10*pi*t)+10*sin(20*pi*t)+20*sin(5*pi*t);
figure,plot(t,f,'linewidth',2.5),title('原始信号'),set(gcf,'color','w');
对其进行EMD分解,得到5个IMF分量:
[imf,residual]=emd(f,'Interpolation','spline','display',1);
EMD具有自适应性和多分辨率等特点,但是其缺点是:包络线拟合偏差,端点效应,模态混叠等。其中,模态混叠现象具体表现为:
(1)不同的特征频率出现在同一IMF分量中
(2)不同的IMF分量中存在相近的特征频率
针对模态混叠这一问题,又提出了其他三种分解方法:EEMD、CEEMD、CEEMDAN,它们都是建立在EMD算法的基础之上实现的。
2.EEMD&CEEMD
EEMD聚合经验模态分解与CEEMD互补聚合经验模态分解都是通过对原始信号添加足够多的随机白噪声,然后进行EMD分解,最后取平均值得到IMF分量。不同之处在于,CEEMD添加的噪声是成对的(一正一负),为的是解决EEMD中随机噪声残留的问题。这两种方法在此不做深究。
3.CEEMDAN
算法分解步骤如下:
其中Ek(∗)E_k(*)Ek(∗)为利用EMD算法产生的第k阶EMD分量,A(*)为计算的第一阶IMF分量所对应的一阶剩余分量,β\betaβ为常数系数,w为添加的随机噪声。确定添加噪声的次数M,得到M个初始量sM(t)=s(t)+βk−1Ek(wM)\ s_M(t)=s(t)+\beta_{k-1} E_k(w_M) sM(t)=s(t)+βk−1Ek(wM),对M个初始量采用EMD算法得到第一阶剩余分量,求平均值(/M)得到一阶平均剩余分量r1r_1r1,由公式:c1(t)=s(t)−r1c_1(t)=s(t)-r_1c1(t)=s(t)−r1可求出第一阶平均IMF分量,再令s(t)=r1s(t)=r_1s(t)=r1,重复上述步骤,以此类推,依次得到第2阶、第三阶IMF分量、……,直到rkr_krk不能再被分解为止。
用matlab编写程序实现:
原始信号:
t=0.01:0.01:3;
f=10*sin(10*pi*t)+10*sin(20*pi*t)+20*sin(5*pi*t);
figure,plot(t,f,'linewidth',2.5),title('原始信号'),set(gcf,'color','w');
通过CEEMDAN算法得到的九个IMF分量:
[modes its]=ceemdan(f,0.2,500,5000);
t=1:length(f);[a b]=size(modes);figure;
subplot(a+1,1,1);
plot(t,f,'k');% the f signal is in the first row of the subplot
ylabel('f')
set(gca,'xtick',[])
axis tight;color='rgbycmrgbycm';
for i=2:asubplot(a+1,1,i);plot(t,modes(i-1,:),color(i-1));ylabel (['IMF ' num2str(i-1)]);set(gca,'xtick',[])xlim([1 length(f)])
end
还可以对所分解得到的IMF分量进行选择,尤其是对于某些具有局部倾斜的信号,CEEMDAN算法可以很好的做到消除局部倾斜,选择的规则如下:
F=1/n∗∑i=1n[Ik(i)−I(i)]2\ F=\sqrt{1/n*\sum_{i=1}^{n}[I_k(i)-I(i)]^2} F=1/n∗i=1∑n[Ik(i)−I(i)]2
i表示数据点数,n表示数据点总个数,Ik(i)I_k(i)Ik(i)表示第k阶IMF分量,I(i)I(i)I(i)表示原始信号,F最小值对应的就是应选择的分量信号。
对应的代码如下:
%找到需要的分解信号
[m,n]=size(modes);
scanstep=length(f);
f=0;
F=zeros(1,m);
for k=1:mfor i=1:scanstepf=f+(modes(k,i)-f(1,i)).^2;endF(1,k)=sqrt((1/scanstep).*f);
end
minF_loc=find(F==min(min(F)))
figure,plot(t,modes(minF_loc,:)),xlabel('scanstep'),title(['第' num2str(minF_loc) '阶IMF分量(分解信号)']);
步骤流程图来自:
[1]陈净和. 基于噪声辅助经验模态分解的低温高速轴承故障诊断方法研究[D].北京交通大学,2019.
具体的程序参考:
https://download.csdn.net/download/nameacity/21390286
CEEMDAN:完全噪声辅助聚合经验模态分解(matlab)——学习笔记3相关推荐
- lmd matlab 信号处理程序,LMD经验模态分解matlab程序.doc
LMD经验模态分解matlab程序 LMD经验模态分解matlab程序--原味的 曾经也用滑动平均写过LMD,其实滑动平均的EMD才是原汁原味的居于均值分解. 分享给有需要的人,程序写的不好,只是希望 ...
- 图像 经验模态分解 matlab,emd经验模态分解matlab下载地址大全
一:下载EMD的MATLAB程序和MATLAB的时频工具包 EMD的MATLAB程序下载地址:http://perso.ens-lyon.fr/patrick.flandrin/emd.html MA ...
- 经验模态分解和各种进化及变种 EMD,EEMD,CEEMD,CEEMDAN,ESMD等简要介绍
EMD是时频分析常用的一种信号处理方式,EMD经过发展到现在也有很多不同的发展,本文总结了已知的各种优化和变种. 分类: EMD(经验模态分解):基本模态分解 EEMD(集合经验模态分解):EMD+白 ...
- 使用EMD【经验模态分解】对一维波形信号进行滤波去噪以及Python实现代码[emd eemd ceemdan]
使用EMD[经验模态分解]对一维波形信号进行滤波去噪以及Python实现代码 EMD[ Emprical Mode Decomposition]经验模态分解方法此处不再过多用赘述, 该信号处理方法可以 ...
- 多元经验模态分解_环境激励桥梁模态参数识别—环境激励模态参数识别概述
环境激励模态参数识别概述 1 结构模态参数识别 结构模态参数识别属于动力学的反问题,是利用外部激励和系统的响应求解系统的参数问题;这一过程亦称为模态分析(Modal Analysis).模态分析又分为 ...
- 经验模态分解与Python调用实例
经验模态分解与Python调用实例 经验模态分解 Python代码实现 经验模态分解 如果需要对一个信号进行降噪的话,我们通常会尝试将一个时域信号变换到不同的域空间,以期将信号中的噪声和有效信号在该域 ...
- EEMD(集合经验模态分解)
1. EEMD(集合经验模态分解)的概念 EEMD(Ensemble Empirical Mode Decomposition)是最常见的一种EMD改进方法.他的优势主要是解决EMD方法中的模态混叠现 ...
- 【Python】这篇文章能让你明白经验模态分解(EMD)——EMD在python中的实现方法
暂时打断一下滤波专题,插播一条EMD在python中实现方法的文章. 本篇是Mr.看海:这篇文章能让你明白经验模态分解(EMD)--EMD在MATLAB中的实现方法的姊妹篇,也就是要在python中实 ...
- R语言从经济时间序列中用HP滤波器,小波滤波和经验模态分解等提取周期性成分分析
经济时间序列的分析通常需要提取其周期性成分.最近我们被客户要求撰写关于经济时间序列的研究报告,包括一些图形和统计输出.这篇文章介绍了一些方法,可用于将时间序列分解为它们的不同部分.它基于<宏观经 ...
最新文章
- js 动态 添加 tabel 表格
- sort(()={return Math.random()-0.5)}乱序数组不准确
- 分支管理---Bug分支
- linux中登录p4后,linux下perforce(p4)的使用方法和命令
- 最优化课堂笔记04:非线性规划(考点4-5例题)
- python开发应用程序错误_Python 程序员经常犯的 10 个错误
- 【XSY2469】graph 分治 并查集
- java递归优化_在Java中谈尾递归--尾递归和垃圾回收的比较
- 天正坐标标注显示不全_广联达导入CAD图纸不显示怎么办?
- PAT之树:一般树、二叉树、完全二叉树、二叉搜索树、二叉平衡树、并查集
- 三维几何图形创作方法(Geometry3D)之二
- b区计算机211学校排名,考研B区院校排名
- linux firefox源码修改主页
- 复习高数下册8-10章主要内容(简略版)
- “呼死你”重出江湖 如何避免骚扰电话?
- “下一个江小白”靠什么成就?
- Quill富文本的使用以及自定义图片和视频处理事件
- 想随时定位自己做的智能设备在哪?安排,ESP32 + HaaS Python足矣,定位还能显示在地图上哦
- DSP在线升级程序步骤
- autotools工具使用