在预测领域中对原始数据进行分解,可以提高预测精度。分解算法在故障诊断领域也有重要作用。
CEEMDAN 算法是由 Torres M E.等人于2011 年提出的一种新型信号分解算法,较好地解决了经验模态分解(EEMD)存在的模态混叠现象。其具体分解过程如下描述:
步骤 1:将待分解信号 x(t) 添加 K 次均值为 0的高斯白噪声,构造共 K 次实验的待分解序列xi(t),其中i=1,2,3....,k.。
式中:为高斯白噪声权值系数; it 为第 i 次处理时产生的高斯白噪声。
步骤 2:对上述序列 xi(t) 进行 EMD 分解,分解得到第 1 个模态分量(IMF)并取其均值作为CEEMDAN 分解得到的第 1 个 IMF。
式中:IMF1(t) 表示 CEEMDAN 分解得到的第 1 个模态分量; r1(t) 表示第 1 次分解后的余量信号。
步骤 3:将分解后得到的第 j 阶段余量信号添加特定噪声后,继续进行 EMD 分解。
式中: IMFj (t)表示 CEEMDAN 分解得到的第 j 模态分量;Ej-1(.) 表示对序列进行 EMD 分解后的第 j -1个 IMF 分量;j-1表示 CEEMDAN 对第 j -1阶段余量信号加入噪声的权值系数; r j(t) 表示第 j阶段余量信号。
步骤 4:迭代停止,如果满足 EMD 停止条件,第 n 次分解的余量信号 rn(t) 为单调信号,则迭代停止,CEEMDAN 算法分解结束。
原理图如下所示:
Colominas等人提出的ICEEMDAN信号处理方法,是由自适应噪声完全集合经验模态分解(CEEMDAN)的基础上发展而来。改进的方法不同于CEEMDAN在分解过程中直接添加高斯白噪声,而是选取白噪声被EMD分解后的第K个IMF分量。以分解风速序列为例,具体步骤如下:
load ('wind_7.mat');%输入你的分解数据
Nstd = 0.2;
NR = 500;
MaxIter = 5000;%Nstd/NR/MaxIter;可根据你的输入数据类型,查找相关文献参考
SNRFlag = 1;%当数值为1时,为ICEEMDAN分解当数值为2时,为CEEMDAN分解。
[modes,its]=fenjie(wind_7,0.2,500,5000,1);%提取子程序分解
t=1:length(wind_7);
[a b]=size(modes);
figure;
subplot(a+1,1,1);
plot(t,wind_7);% 注意最后展示的图像处理,包含原始序列。
ylabel('wind_7')
set(gca,'xtick',[])
axis tight;
for i=2:a
subplot(a+1,1,i);
plot(t,modes(i-1,:));
ylabel (['IMF ' num2str(i-1)]);
set(gca,'xtick',[])
xlim([1 length(wind_7)])
end;
subplot(a+1,1,a+1)
plot(t,modes(a,:))
ylabel(['IMF ' num2str(a)])
xlim([1 length(wind_7)])
CEEMDAN分解
ICEEMDAN分解
这里,输入数据用的是.mat文件,读者也可以自行通过EXCEL读入。通过两种分解的图像分析可看出,ICEEMDAN的分解可以更彻底,当然数据类型不同,具体结果要看具体分析。
文件资料中包含EMD文件,具体分解过程中要用到EMD分解。两种分解都是通过EMD分解的基础上发展而来的。
[1]魏炘、石强、符文熹、陈良. 考虑CEEMDAN样本熵和SVR的短期风速预测[J]. 水电能源科学, 2020, v.38;No.243(11):213-216.