呆瓜在论文里使用了EMD方法,对于EMD方法,呆瓜刚开始接触时是懵逼的,完全不知道用来干什么。在请教了导师和夫哥后呆瓜也进行了自学,现在呆瓜对EMD有了初步的了解,也算是在论文之路上又前进了一步。

在本文最后,呆瓜对上证闭盘数据进行了EMD分解,但只是做了分解图,并未作出解读和分析。

本文结构大致如下图:

emd分解原理 emd分解图_emd分解原理

首先,信号处理是现代科学的一个重要研究领域,遍及通信、数据分析、模式识别、金融等几乎所有的应用领域。

信号处理方法有很多,所以EMD经验模态分解,是信号处理方法中的一种。

在学习EMD方法的过程中,呆瓜还了解一下时域分析和频域分析,如果EMD是主菜,那么时频域分析就是前菜。

时域分析

原理:时域分析是指控制系统在一定的输入下,根据输出量的时域表达式,分析系统的稳定性、瞬态和稳态性能。

时域特征值是衡量信号特征的重要指标,通常分为:有量纲参数、无量纲参数。

有量纲特征值,一般具有直观的物理含义,主要包括:最大值、最小值、峰值、均值、方差、标准差、均方值、均方根值(RMS)、均方误差(MSE)、均方根误差(RMSE)等。

有量纲特征值优点:对信号特征比较敏感。

有量纲特征值缺点:易受影响,不够稳定。

有量纲特征值的计算与意义请参考:

https://mp.weixin.qq.com/s/U55S84aoHrXeTzYDhd3O2A

无量纲特征值,主要包括峰值因子,脉冲因子,裕度因子,峭度因子,波形因子以及偏度因子等。

无量纲特征值优点:相对更稳定。

无量纲特征值的计算与意义请参考:

https://mp.weixin.qq.com/s/1vZbdtlkPofaWSjPdWrTiw

频域分析

原理:将线性系统的信号,分解为不同频率的正弦波,计算各种不同的正弦波在信号中所占的比例,揭示系统的时域性能,显示系统参数对系统性能的影响。

常见的频域分析法:(频谱、能量谱、功率谱、倒频谱、小波分析)。

具体介绍请参考(不是公众号的文章,无法进行超链接):

https://zhuanlan.zhihu.com/p/34989414

EMD,经验模态分解

原理:将任何时间序列数据分解为有限个IMF(本征模函数)+残波,所分解出来的IMF包含了原始信号不同时间尺度的局部特征信号。(就像一堆不同数字的硬币,机器将它们分为1毛、5毛、1元各组。)

优势:相对于时频域分析,不需要对数据进行预处理,可直接进行分析。

IMF:内涵模态分量,Intrinsic Mode Function,即原始信号被EMD分解后的各层信号分量。

IMF约束条件

1、在整个数据段内,极值点的个数和过零点的个数必须相等或相差最多不能超过一个。

2、在任意时刻,由局部极大值点形成的上包络线和由局部极小值点形成的下包络线的平均值为零,即上、下包络线相对于时间轴局部对称。

用图像表示即:

1)极值点的个数和过零点的个数相差不能超过1个:

emd分解原理 emd分解图_硬币的识别与计数 matlab 论文_02

下面这个则不正确(极值点个数-过零点个数>1):

emd分解原理 emd分解图_硬币的识别与计数 matlab 论文_03

2)上、下包络线相对于时间轴局部对称(呆瓜画的,差不多):

emd分解原理 emd分解图_硬币的识别与计数 matlab 论文_04

而不是这样:

emd分解原理 emd分解图_硬币的识别与计数 matlab 论文_05

EMD分解步骤:

1、根据原始信号上下极值点,分别画出上、下包络线,如下图(来自网络):

emd分解原理 emd分解图_硬币的识别与计数 matlab 论文_06

2、求上、下包络线的均值,画出均值包络线(粉色的):

emd分解原理 emd分解图_特征值_07

3、用原始信号减去均值包络线,得到中间信号:

emd分解原理 emd分解图_emd分解原理_08

4、判断该中间信号是否满足IMF的两个条件,如果满足,该信号就是一个IMF分量;如果不是,以该信号为基础,重新做1~4的分析,直到得到的信号满足条件。IMF分量的获取通常需要若干次的迭代。

5、得到第一个IMF后,用原始信号减IMF1,作为新的原始信号,再通过1~4的分析,可以得到IMF2,以此类推,完成EMD分解。

如何确定或设置IMF个数?

随着解析出来的IMF越多,则频率越低,而最后留下的残波是频率最低的信号。

对于解析出来的IMF个数,一般可以在软件里进行相应筛选条件设置,比如:单个IMF筛选的最大轮数、最大IMF个数、残波最大极值点数量、频率等等。

呆瓜认为,可以根据分析数据的实际时间段需求,对频率进行限制,从而可以得到满足频率的IMF以及余波。

Matlab软件

Matlab软件的安装请参考(呆瓜亲测,可用):

呆瓜用20190101-20200928每日上证闭盘价,做了一个EMD分解,如下。

Matlab软件的使用:

emd分解原理 emd分解图_多元经验模态分解_09

编辑器,是用来写代码指令的;

在编辑器里面写完代码后,运行代码;

命令行窗口显示代码运行的结果。

下面解释一下代码:

format shortG【得到的数据,整数值和小数小于等于9位不以指数形式显示,不加这句代码,此数据会显示为指数形式】

a=xlsread('文件地址',2)【a是自变量,xlsread()是matlab自带方法用来获取数据,2的意思是第二个表格】

emd(a,'interpolation','pchip')【将 a、imf和残波 画图】

数据图:

emd分解原理 emd分解图_多元经验模态分解_10

20190101-20200928上证每日闭盘数据进行EMD分解后的IMF:

emd分解原理 emd分解图_特征值_11

matlab中命令行显示的结果:

emd分解原理 emd分解图_matlab qr分解求特征值_12

其中:

CurrentIMF 表示第几个IMF,

Sift Iter表示生成该IMF对原始信号的迭代次数,

Relative Tol表示相对误差,

Stop Criterion Hit表示停止筛选的条件,

“The decomposition stopped because the number of extrema of the residual signal is less than 'MaxNumExtrema'.”

表示,分解停止的原因是余波的极值数小于“MaxNumExtrema”。

呆瓜还不太明白后面这三步,是不是要进行去噪,停止筛选的条件如何设置,以及MaxNumExtrema如何设置。

因为明天是祖国的生日,呆瓜想以发文的方式为祖国庆生,所以上面遗留的疑惑,留待之后再解决吧。

最后,神图镇楼(千岛湖的鱼,一鱼两吃):

emd分解原理 emd分解图_emd分解原理_13