ICEEMDAN画图工具(公开版)

最后更新于:2023-08-12 11:01:08

一、代码运行环境:

在使用该代码前,请务必安装时频域分析工具箱。(然后再在文末下载相关代码并使用)

工具箱下载路径在这里

下载文件并解压,按照步骤操作即可完成工具箱安装。

已测试MATLAB2016/2018/2019/2020,其他MATLAB版本理论上也可以使用。

二、文件说明

1.testICEEMDAN.m

用于测试ICEEMDAN功能的脚本文件,可以直接运行其中调用了pICEEMDAN和pICEEMDANandFFT。

2.pICEEMDAN.p

封装好的ICEEMDAN画图程序,p文件。

函数参数说明:

function imf = pICEEMDAN(data,FsOrT,Nstd,NE,MaxIter)
% 画信号ICEEMDAN分解图
% 输入:
% data为待分解信号
% FsOrT为采样频率或采样时间向量,如果为采样频率,该变量输入单个值;如果为时间向量,该变量为与y相同长度的一维向量。如果未知采样频率,可设置为1
% Nstd为附加噪声标准差与Y标准差之比
% NE为对信号的平均次数
% MaxIter:最大迭代次数
% 输出:
% imf为经ICEEMDAN分解后的各imf分量值
% 例1:(FsOrT为采样频率)
% fs = 100;
% t = 1/fs:1/fs:1;
% data = sin(2*pi*5*t)+2*sin(2*pi*20*t);
% imf = pICEEMDAN(data,fs,0.2,100);
% 例2:(FsOrT为时间向量,需要注意此时FsOrT的长度要与y相同)
% t = 0:0.01:1;
% data = sin(2*pi*5*t)+2*sin(2*pi*20*t);
% imf = pICEEMDAN(data,t,0.2,100);20

画图效果如下(参考):

3.pCEEMDandFFT.p

封装好的画图程序,可以绘制出信号ICEEMD分解与各IMF分量频谱对照图,p文件。

函数参数说明:

function imf = pICEEMDANandFFT(y,FsOrT,Nstd,NE,MaxIter)
% 画信号ICEEMDAN分解与各IMF分量频谱对照图
% 输入:
% y为待分解信号
% FsOrT为采样频率或采样时间向量,如果为采样频率,该变量输入单个值;如果为时间向量,该变量为与y相同长度的一维向量
% Nstd为附加噪声标准差与Y标准差之比
% NE为对信号的平均次数
% MaxIter:最大迭代次数
% 输出:
% imf为经ICEEMDAN分解后的各imf分量值
% 例1:(FsOrT为采样频率)
% fs = 100;
% t = 1/fs:1/fs:1;
% y = sin(2*pi*5*t)+2*sin(2*pi*20*t);
% imf = pICEEMDANandFFT(y,fs,0.2,100);
% 例2:(FsOrT为时间向量,需要注意此时FsOrT的长度要与y相同)
% t = 0:0.01:1;
% y = sin(2*pi*5*t)+2*sin(2*pi*20*t);
% imf = pICEEMDANandFFT(y,t,0.2,100);

% 注意:在使用该代码之前,请务必安装工具箱:http://hk.khscience.cn/docs/index.php/2020/04/09/1/

画图效果如下(参考):

4.kCEEMDAN.p

调整后的CEEMDAN函数,整合了iceemdan函数,并针对工具箱进行了统一性的调整。

函数参数说明:

function imf = kICEEMDAN(data,Nstd,NE,MaxIter)
% 统一封装后的ICEEMDAN函数,原始代码来源:http://bioingenieria.edu.ar/grupos/ldnlys/metorres/re_inter.htm
% 
% 输入:
% data:待分解的数据
% Nstd:为附加噪声标准差与data标准差之比
% NE:对信号的平均次数
% MaxIter:最大迭代次数
% 
% 输出:
% imf:内涵模态分量,统一为n*m格式,其中n为模态数,m为数据点数。例如 imf(1,:)即IMF1,imf(emd,:)即为残差

% 注意:在使用该代码之前,请务必安装工具箱:http://hk.khscience.cn/docs/index.php/2020/04/09/1/

5.pFFT.p

封装好的fft计算程序,在pICEEMDANandFFT中调用,一般不需要修改。

三、使用教程

该教学视频是针对“类EMD”画图工具代码(完整版)的使用教程。

视频中是以CEEMD代码为案例讲解的。

其他的“类EMD方法”都可以参考该教程。

视频中4:00开始演示的如何使用自己的数据导入并调用

四、 关于完整版与公开版代码

公开版代码的函数文件为p文件,可以被调用,但无法查看代码。完整版代码中全部为m文件,m文件可以查看源码并自由修改。

如果需要封装好的画图函数(pICEEMDAN.m、pICEEMDANandFFT.m、kICEEMDAN.m和pFFT.m)的源码,可在下述连接(完整版)获取。

编程不易,感谢支持~

五、获取公开版程序(需使用电脑浏览器打开)

ICEEMDAN公开版代码V2.2.8

六、获取完整版程序(使用电脑浏览器或者手机浏览器打开)

获取通道一(淘宝):点击此处获取完整版程序

获取通道二(本页面):点击下面“立即支付”按钮,付款后获取完整版代码下载链接和售后联系方式~本通道处于测试阶段,使用该通道可以额外优惠(仅需21元)。付款完成后刷新一下本页面即可看到下载链接。

(注意支付跳转失败的话,请使用浏览器打开本页面)

您需要先支付 21元 才能查看此处内容!立即支付

七、完整版代码重要更新

20211118 代码初始版本

八、常见问题

1.参数NE、Nstd、MaxIter该怎么设置?

NE: 噪声系数的数量。这是一个整数,代表生成噪声实例的次数。增加NE可以改善结果的一致性,但会增加计算时间。一般来说,NE的设置可以在50到100之间,具体可以根据你的数据和计算能力进行调整。

Nstd: 噪声标准差。这是一个浮点数,它定义了添加到信号中的噪声的标准偏差。通常,Nstd的值设置在0.1到0.2之间,它会影响到信号分解的精度。设置过高可能会引入太多噪声,过低则可能对噪声的效果不够。

MaxIter: 最大迭代次数。这是在执行经验模式分解过程中,每个模式(IMF)最大允许的迭代次数。如果迭代次数过少,可能无法得到一个好的IMF,如果过多,可能会导致计算时间过长。一般情况下,MaxIter的值可以设置在100到1000之间,具体取决于你的数据的复杂性和计算能力。

2.可以设置分解得到的imf的数量吗?

在网站现有的“类EMD”分解方法中,只有VMD分解是可以指定imf数的,其他的分解方法的分解数量均是自适应的,无法指定。(有些库或工具可能会提供这样的选项,但往往是通过当生成的IMF数等于指定数量时,分解强行停止,不是真正意义上的指定数量。)