EMD变体分解效果最好算法——CEEMDAN(五)

往期精彩内容:

时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较

全是干货 | 数据集、学习资料、建模资源分享!

EMD、EEMD、FEEMD、CEEMD、CEEMDAN的区别、原理和Python实现(一)EMD-CSDN博客

EMD、EEMD、FEEMD、CEEMD、CEEMDAN的区别、原理和Python实现(二)EEMD

EMD、EEMD、FEEMD、CEEMD、CEEMDAN的区别、原理和Python实现(三)FEEMD-CSDN博客

EMD、EEMD、FEEMD、CEEMD、CEEMDAN的区别、原理和Python实现(四)CEEMD-CSDN博客

拒绝信息泄露!VMD滚动分解 + Informer-BiLSTM并行预测模型-CSDN博客

风速预测(一)数据集介绍和预处理_风速数据在哪里下载-CSDN博客

风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博客

风速预测(三)EMD-LSTM-Attention模型-CSDN博客

风速预测(四)基于Pytorch的EMD-Transformer模型-CSDN博客

风速预测(五)基于Pytorch的EMD-CNN-LSTM模型-CSDN博客

风速预测(六)基于Pytorch的EMD-CNN-GRU并行模型-CSDN博客

前言

本文基于前期介绍的风速数据(文末附数据集),进行完全自适应噪声集合经验模态分解(CEEMDAN)的介绍与参数选择,最后通过Python实现对风速数据的CEEMDAN分解。风速数据集的详细介绍可以参考下文:

风速预测(一)数据集介绍和预处理_gldas-noah-v2.1数据集怎么看风速和气压-CSDN博客

Python 中 CEEMDAN包的下载安装:

# 下载
pip install EMD-signal

# 导入
from PyEMD import CEEMDAN

切记,很多同学安装失败,不是pip install EMD,也不是pip install PyEMD, 如果 pip list 中 已经有 emd,emd-signal,pyemd包的存在,要先 pip uninstall 移除相关包,然后再进行安装。

1 完全自适应噪声集合经验模态分解CEEMDAN介绍

1.1 CEEMDAN简介

针对 EMD 算法分解信号存在模态混叠的问题,EEMD 和 CEEMD 分解算法通过在待分解信号中加入随机白噪声来减轻 EMD 分解的模态混叠,但是这两种算法分解信号得到的模态分量中总会残留一定的白噪声,并且信号加噪声经EMD分解可能会产生不同数量的模态, 这将影响后续信号的分析和处理,为了解决这些问题,TORRES 等提出了一种改进算法——完全自适应噪声集合经验模态分解(CEEMDAN)。

1.2 CEEMDAN主要特点

CEEMDAN 分解从两个方面解决了上述问题:

  • 每次迭代加入经 EMD 分解后含辅助噪声的 IMF 分量; 

  • EEMD 分解和 CEEMD 分解是将经验模态分解后得到的模态分量进行总体平均, CEEMDAN 分解则在得到的第一阶 IMF 分量后就进行总体平均计算,得到最终的第一阶 IMF 分量,然后对残余部分重复进行如上操作,这样便有效地解决了白噪声从高频到低频的转移传递问题。

2 CEEMDAN分解的步骤

(1) EEMD 方法是将添加白噪声后的 M 个信号直接做 EMD 分解,然后相对应的 IMF 间直接 求均值。

(2) CEEMDAN 方法是每求完一阶 IMF 分量,又重新给残值加入白噪声(或白噪声的 IMF 分 量)并求此时的 IMF 分量均值,并逐次迭代。

3 基于Python的CEEMDAN实现

3.1 导入数据

​​​​

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')

# 读取已处理的 CSV 文件
df = pd.read_csv('wind_speed.csv' )
# 取风速数据
winddata = df['Wind Speed (km/h)'].tolist()
winddata = np.array(winddata) # 转换为numpy
# 可视化
plt.figure(figsize=(15,5), dpi=100)
plt.grid(True)
plt.plot(winddata, color='green')
plt.show()

3.2 CEEMDAN分解

from PyEMD import CEEMDAN

# 创建 CEEMDAN 对象
ceemdan = CEEMDAN(trials=100, epsilon=0.005)
# NE=100 epsilon=0.005(信噪比)

# 对信号进行 CEEMDAN分解
IMFs = ceemdan(winddata)

# 可视化
plt.figure(figsize=(20,15))
plt.subplot(len(IMFs)+1, 1, 1)
plt.plot(winddata, color='hotpink')
plt.title("原始信号")

for num, imf in enumerate(IMFs):
    plt.subplot(len(IMFs)+1, 1, num+2)
    plt.plot(imf, color='c')
    plt.title("IMF "+str(num+1), fontsize=10)
# 增加第一排图和第二排图之间的垂直间距
plt.subplots_adjust(hspace=0.8, wspace=0.2)
plt.show()

参数:

  • trials:迭代次数(集总平均次数),默认100

  • epsilon:信噪比,默认0.005

3.3 信号分量的重构

​​​​​​


# 分量重构
reconstructed_data = np.sum(IMFs, 0) # 沿y轴方向求和

plt.figure(figsize=(15,5))
plt.plot(winddata, linewidth=1, color='hotpink', label='PM2.5')
plt.plot(reconstructed_data, linewidth=1, color='c', label='分解重构结果')
plt.title("CEEMDAN 分解重构结果", fontsize=10, loc='center')
plt.xticks(fontsize=10) # x 轴刻度字体大小
plt.yticks(fontsize=10) # y 轴刻度字体大小
plt.legend(loc='upper right') # 绘制曲线图例,信息来自类型 label
plt.show()

对比 EMD 重构:

CEEMDAN分解重构效果明显好于EMD!

3.4 信号分量的处理

通过完全自适应噪声集合经验模态分解(CEEMDAN)得到了信号的分量,可以进行许多不同的分析和处理操作,以下是一些常见的对分量的利用方向:

(1)信号重构:将分解得到的各个本征模态函数(IMF)相加,可以重构原始信号。这可以用于验证分解的效果,或者用于信号的重建和恢复。

(2)去噪:对于复杂的信号,可能存在噪声或干扰成分。通过分析各个IMF的频率和振幅,可以识别和去除信号中的噪声成分。

(3)频率分析:分析每个IMF的频率成分,可以帮助理解信号在不同频率上的振荡特性,从而揭示信号的频域特征。

(4)特征提取:每个IMF代表了信号的局部特征和振荡模式,可以用于提取信号的特征,并进一步应用于机器学习或模式识别任务中。

(5)信号预测:通过对分解得到的各个IMF进行分析,可以探索信号的未来趋势和发展模式,从而用于信号的预测和预测建模。

(6)模式识别:分析每个IMF的时域和频域特征,可以帮助对信号进行模式识别和分类,用于识别信号中的不同模式和特征。

(7)异常检测:通过分析每个IMF的振幅和频率特征,可以用于探测信号中的异常或突发事件,从而用于异常检测和故障诊断。

在得到了信号的分量之后,可以根据具体的应用需求选择合适的分析和处理方法,以实现对信号的深入理解、特征提取和应用。

3.5 CEEMDAN优缺点

优点:

  • 完备性,即把分解后的各个分量相加能够获得原信号的性质。 

  • 更快的计算速度,正是由于上一条,相较于 EEMD 该方法不需要太多的平均次数,可以 有效提升程序运算速度。 

  • 更好的模态分解结果,EEMD 分解可能会出现多个幅值很小的低频 IMF 分量,这些分量 对于信号分析意义不大,CEEMDAN 方法可以减少这些分量数目。

  • 解决了 EEMD 算法中会出现不同模态数量的问题。

缺点:

  • 模态中仍包含一些残余噪声;

  • 与 EEMD 相比,在分解的早期阶段存在一些“伪”模态,即前两种或三种模式包含大量的相 似噪声和类似的信号尺度(ICEEMDAN 解决了该问题);

  • 利用 CEEMDAN 算法分解含噪声信号时,若将含噪声较多的 IMF 分量直接舍弃,容易造 成有效信息的缺失

参考文献

[1]《非平稳数据分解理论  从入门到实践》.蒋锋,杨华.中国财政经济出版社.

### 使用信号分解技术去除斑点噪声的方法 #### 斑点噪声特性分析 斑点噪声是一种乘性噪声,在医学成像、雷达图像以及合成孔径雷达(SAR)图像中较为常见。这种类型的噪声具有特定的空间分布特征,通常表现为局部区域内的强度波动。 #### 基于经验模态分解(EMD)及其改进版本的技术 对于斑点噪声的去除,可以采用基于经验模态分解的经验方法,特别是其优化变体——完全集成经验模态分解与自适应噪声(COMPLETE ENSEMBLE EMPIRICAL MODE DECOMPOSITION WITH ADAPTIVE NOISE, CEEMDAN)[^2]。此方法能够有效地将原始带有噪声的数据分解为若干个内在模式函数(Intrinsic Mode Functions, IMFs),并通过适当的选择来重构干净的目标信号。 具体来说: - **预处理阶段**:向输入数据添加一定量的小幅度白噪音,以增强算法稳定性; - **多尺度分解**:利用CEEMDAN对含噪图像执行多层次的时间序列分解操作; - **阈值设定**:针对每一个得到的IMF分量计算相应的能量指标或其他统计参数,并据此设置合理的门限值用于区分有效信息和干扰项; - **重建过程**:仅保留那些被认为代表真实结构特性的低频部分或主要振荡模式来进行最终图像重组。 ```matlab % MATLAB伪代码示例展示如何使用CEEMDAN进行斑点噪声抑制 clear all; close all; % 加载带斑点噪声的SAR图像 img_noisy = imread('noisy_sar_image.png'); gray_img = rgb2gray(img_noisy); % 如果图像是彩色,则转换为灰度级 double_gray = im2double(gray_img); % 应用CEEMDAN imf = ceemdan(double_gray,'Mode','complete'); % 对各层IMF应用软/硬阈值化处理 (这里简化表示) for i=1:length(imf)-1 imf{i} = wthresh(imf{i},'s',sqrt(mean(imf{i}.^2))); % 软阈值化 end % 重构建清晰图像 cleaned_img = sum(cat(3,imf{:}),3); imshow(cleaned_img,[0 1]); title('去噪后的SAR图像') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值