MATLAB从2018a开始给出了内置函数来实现经验模式分解(EMD)与希尔伯特-黄变换(HHT),函数名分别是emd与hht,用户可以直接调用两个函数来实现经验模式分解以及与希尔伯特-黄变换。

一、MATLAB函数库内的emd函数

语法格式:

1. [imf,residual] = emd(X)

2. [imf,residual,info] = emd(X)

3. [___] = emd(___,Name,Value)

4. emd(___)

格式1. 返回输入序列x的本征模态函数(固有模态函数)imf和残差(剩余信号)residual。当x为一列向量时返回的Imf为一矩阵,imf矩阵中每一列存储着不同层分解的imf函数;返回的residual为一列向量。

格式2. info用于返回附加信息,这些附加信息从IMFs和残差中获取。

格式3. 使用一个或多个由Name,Value组合的参数来估计emd。指定可选的以逗号分隔的名称、值参数对,Name是参数名必须在引号内,Value是对应的值,可以按任何顺序指定多个名称和值参数如Name1,Value1,...,NameN,ValueN.

例如: 'MaxNumIMF',5 。

'SiftRelativeTolerance' — 柯西收敛准则

对应的Value可指定为一个正数,Value缺省时为0.2。SiftRelativeTolerance是筛选停止标准之一,当相对公差小于SiftRelativeTolerance指定的Value值时,筛选停止。

'SiftMaxIterations' — 筛选迭代的最大次数

对应的Value可指定为一个正整数,Value缺省时为100。SiftMaxIterations是筛选停止标准之一,当迭代次数大于siftmaxiteration指定的Value值时,筛选停止。

'MaxNumIMF' —提取的最大imf个数

对应的Value可指定为一个正整数,Value缺省时为10。MaxNumIMF是筛选停止标准之一,生成的imf数量等于MaxNumIMF时,分解停止。

'MaxNumExtrema' — 残差信号极值的最大个数

对应的Value可指定为一个正整数,Value缺省时为1。MaxNumExtrema是筛选停止标准之一,当极值个数小于MaxNumExtrema时,分解停止。

'MaxEnergyRatio' — 信号残差能量比

可选项有两种:

'spline':x为光滑信号

'pchip':x为非光滑信号

'spline'采用三次样条插值法,'pchip'采用三次Hermite插值法。

命令窗口中生成的表显示了sift迭代次数、相对误差以及每个生成的IMF的sift停止准则,这个信息也包含在info中。当输入为('Display',1)或缺省时显示表,当输入为('Display',0)时隐藏表。

格式4. 将原始信号、imf 和残差信号绘制在同一图形中。

二、例子

1. 由具有明显频率变化的正弦波组成的非平稳连续信号。以手提钻的振动或烟花声的非平稳连续信号为例。

加载信号X以及采样频率fs。

load('sinusoidalSignalExampleData.mat','X','fs');

t = (0:length(X)-1)/fs;

xlabel('Time(s)');

混合信号包含具有不同幅值和频率的正弦波。

为了创建希尔伯特谱图,需要信号的 IMFs。执行经验模式分解以计算信号的固有模式函数和残差。由于信号不平滑,指定'pchip'作为Interpolation方法。

[imf,residual,info] = emd(X,'Interpolation','pchip');

Current IMF  |  #Sift Iter  |  Relative Tol  |  Stop Criterion Hit

1      |        2     |     0.   |  SiftMaxRelativeTolerance

2      |        2     |    0.   |  SiftMaxRelativeTolerance

3      |        1     |     0.   |  SiftMaxRelativeTolerance

4      |        2     |      0.05929   |  SiftMaxRelativeTolerance

5      |        2     |      0.11317   |  SiftMaxRelativeTolerance

6      |        2     |      0.12599   |  SiftMaxRelativeTolerance

7      |        2     |      0.13802   |  SiftMaxRelativeTolerance

8      |        3     |      0.15937   |  SiftMaxRelativeTolerance

9      |        2     |      0.15923   |  SiftMaxRelativeTolerance

分解停止是因为残差信号的极值数小于'MaxNumExtrema'。

在命令窗口中生成的表指出了每个生成的IMF的筛选迭代次数,相对误差和筛选IMF的停止标准。此信息也包含在info。可以通过指定Display为0来隐藏表。(emd(X,'Interpolation','pchip','Display',0))

使用经验模态分解得到的imf分量创建Hilbert谱图。

hht(imf,fs);

频率/时间图是一个稀疏图,垂直颜色条表示IMF中每个点的瞬时能量。该图表示从原始混合信号分解的每个分量的瞬时频谱。从图中可看到在1s处三个imf的频率有明显的变化。

2. 可视化信号的剩余模态函数和本征模态函数

加载信号X以及采样频率fs。

load('sinusoidalSignalExampleData.mat','X','fs');

emd(X,'Interpolation','pchip'); % 格式4. 将原始信号、imf 和残差信号绘制在同一图形中。

Current IMF  |  #Sift Iter  |  Relative Tol  |  Stop Criterion Hit

1      |        2     |     0.   |  SiftMaxRelativeTolerance

2      |        2     |    0.   |  SiftMaxRelativeTolerance

3      |        1     |     0.   |  SiftMaxRelativeTolerance

4      |        2     |      0.05929   |  SiftMaxRelativeTolerance

5      |        2     |      0.11317   |  SiftMaxRelativeTolerance

6      |        2     |      0.12599   |  SiftMaxRelativeTolerance

7      |        2     |      0.13802   |  SiftMaxRelativeTolerance

8      |        3     |      0.15937   |  SiftMaxRelativeTolerance

9      |        2     |      0.15923   |  SiftMaxRelativeTolerance

分解停止是因为残差信号的极值数小于'MaxNumExtrema'。

生成具有原始信号,前3个IMF和残差的交互式图。右键单击图中的空白区域打开IMF选择器窗口。使用IMF选择器有选择地查看生成的IMF,原始信号和残差。

从列表中选择要显示的IMF。选择是否在图上显示原始信号和残差。

选定的IMF会显示在图上。

使用该图来可视化从原始信号分解而来的单个成分(单个IMF)以及残差。需要注意,残差是根据总的IMF计算而来,不会根据IMF选择器窗口中选择的IMF而改变。

本文仅供参考,详细信息访问: