一、 EMD简介
EMD(Empirical Mode Decomposition)经验模态分解是1998年黄鄂博士在希尔伯特变换的基础上提出希尔伯特-黄变换(HHT)方法,其中包含经验模式分解(EMD)和希尔伯特变换(HT)两部分。EMD作为时频域的处理方法,可以将原始信号分解成为一系列固有模态函数(IMF),IMF分量是具有时变频率的震荡函数,能够反映出非平稳信号的局部特征。
- 自适应性
与小波相比,小波变换需要选择小波基,并且小波基的选择对整个小波分析的结果影响很大,所以小波分析的基函数缺乏适应性;而EMD依据的是数据自身的时间尺度特征来进行信号分解,无需预先设定任何基函数,即使是对于一段未知信号也可以将其分解成若干个内涵模态分量,因此具有良好的自适应性,适用于分析人体生理信号,如脑电、心电等非线性非平稳信号。
二、EMD分解步骤
EMD分解之前,需要先了解内涵模态分量的约束条件:
- 1、在整个数据段内,极值点的个数和过零点的个数必须相等或相差最多不能超过一个。
- 2、在任意时刻,由局部极大值点形成的上包络线和由局部极小值点形成的下包络线的平均值为零,即上、下包络线相对于时间轴局部对称。
简单来说,对于约束1,样本信号要反复跨越横轴,即相邻两个极值点之间一定要跨越一次横轴;对于约束2,不明白的我们往下看完它的分解步骤再讲。
算法步骤
- 找到原始信号X(t)的所有的极值点;
- 极值点拟合包络线。对于所有极大值点,通过三次样条函数拟合出上包络线Up_envelop;同理,将所有极小值点拟合出下包络线Low_envelop;(注:一定要包含所有极值点,不能有遗漏!)
- 计算均值包络线m(t)。即上、下包络线的均值;
- 原始信号X(t)减去均值包络线m(t),得到一个中间信号r(t);
- 判断中间信号r(t)是否满足IMF两个约束条件,如果满足则是一个IMF分量,不满足则返回步骤1反复迭代;
- 假设r(t)是分解出的第一个高频分量并记为IMF1,则均值包络线m(t)相对与IMF1是低频分量。然后将m(t)当作原始信号继续分解得到下一个IMF,直至残余分量是单调函数或常量时,停止分解。通常残余分量记为res。
EMD分解满足
三、Python代码实现EMD分解
1、代码实现算法过程
- 求极值点
'''
样本信号来自于实验室采集胎心电数据
信号总长度69082,这里只选取1024个采样点
采样频率250hz
FecgSignal.Normal()是自写的一个归一化函数,请自行删去
'''
arr1_1_1 = np.genfromtxt('fecg_data\date_312\channel_data\BLE1-1-RF-channel1.txt', delimiter='\n', dtype=float)
iSampleCount = 1024 # 采样数
iSampleRate = 250 # 采样频率
# data为取采样点后的数据,array类型
data = np.array(FecgSignal.Normal(arr1_1_1, iSampleCount))
t = np.linspace(0, iSampleCount/iSampleRate, iSampleCount)
w = np

本文介绍了经验模态分解(EMD)的基本原理,自适应性优势,以及如何通过Python实现EMD分解步骤,包括极值点检测、包络线拟合和IMF分量判断。重点展示了EMD在处理心电信号中的应用,以及如何筛选关键IMF分量用于重构和信号分析。
4440

被折叠的 条评论
为什么被折叠?



