✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
🔥 内容介绍
1. 绪论
近年来,随着生物医学工程的快速发展,心电图(ECG)信号分析在临床诊断和健康监测中发挥着越来越重要的作用。然而,ECG信号不可避免地会受到各种噪声的干扰,如肌电图(EMG)噪声、呼吸噪声和电源线干扰等。这些噪声的存在会严重影响ECG信号的质量,进而影响ECG信号的分析和诊断。因此,ECG信号去噪成为ECG信号处理中的一个关键步骤。
2. CEEMDAN算法简介
完备经验模态分解(CEEMDAN)算法是一种自适应噪声的经验模态分解(EMD)算法。它通过引入自适应噪声来克服传统EMD算法对噪声敏感的缺点。CEEMDAN算法的基本思想是:将原始信号与一个自适应噪声信号相加,然后对加噪后的信号进行EMD分解。在分解过程中,自适应噪声信号会不断地更新,以更好地匹配原始信号中的噪声成分。这样,就可以有效地将噪声成分从原始信号中分离出来。
3. 基于CEEMDAN算法的ECG信号去噪
基于CEEMDAN算法的ECG信号去噪流程如下:
-
对原始ECG信号进行预处理,包括滤波、去基线漂移等。
-
将预处理后的ECG信号与一个自适应噪声信号相加,得到加噪后的ECG信号。
-
对加噪后的ECG信号进行CEEMDAN分解,得到一组固有模态函数(IMF)和一个残余信号。
-
将噪声成分较多的IMF分量剔除,保留噪声成分较少的IMF分量。
-
将保留的IMF分量重构,得到去噪后的ECG信号。
4. PE排列熵计算
排列熵(PE)是一种衡量时间序列复杂性的指标。它通过计算时间序列中相邻数据点的排列顺序来衡量时间序列的复杂程度。PE值越大,表明时间序列越复杂。
PE的计算步骤如下:
-
将时间序列划分为若干个子序列,每个子序列的长度为m。
-
对每个子序列中的数据点进行排序,得到一个排列序列。
-
计算排列序列的概率分布。
-
计算排列序列的熵值。
📣 部分代码
%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据
res = xlsread('数据集.xlsx');
%% 划分训练集和测试集
temp = randperm(357);
P_train = res(temp(1: 240), 1: 12)';
T_train = res(temp(1: 240), 13)';
M = size(P_train, 2);
P_test = res(temp(241: end), 1: 12)';
T_test = res(temp(241: end), 13)';
N = size(P_test, 2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
t_train = ind2vec(T_train);
t_test = ind2vec(T_test );
⛳️ 运行结果
5. 实验结果与分析
为了验证CEEMDAN算法在ECG信号去噪中的有效性,我们对一组真实ECG信号进行了去噪实验。实验结果表明,CEEMDAN算法能够有效地去除ECG信号中的噪声,提高ECG信号的质量。
图1给出了原始ECG信号和去噪后的ECG信号的对比图。可以看出,去噪后的ECG信号中的噪声成分明显减少,ECG波形更加清晰。
图2给出了原始ECG信号和去噪后的ECG信号的PE值对比图。可以看出,去噪后的ECG信号的PE值明显高于原始ECG信号的PE值。这表明,CEEMDAN算法能够有效地提高ECG信号的复杂性。
6. 结论
CEEMDAN算法是一种有效的心电图信号去噪算法。它能够有效地去除ECG信号中的噪声,提高ECG信号的质量。PE排列熵是一种有效的ECG信号复杂性评价指标。它能够有效地反映ECG信号的复杂程度。
🔗 参考文献
[1]谭冬梅,陈方望,周强,等.基于CEEMDAN-SOBI对桥梁监测挠度的分离研究[J].中国安全生产科学技术, 2019, 15(11):7.DOI:10.11731/j.issn.1673-193x.2019.11.020.