EMD和VMD

作者:桂。

时间:2017-03-06  20:57:22

链接:http://www.cnblogs.com/xingshansi/p/6511916.html 


前言

本文为Hilbert变换一篇的内容补充,主要内容为:

  1)EMD原理介绍

  2)代码分析

  3)一种权衡的小trick

  4)问题补充

内容主要为自己的学习总结,并多有借鉴他人,最后一并给出链接。

一、EMD原理介绍

  A-EMD的意义

很多人都知道EMD(Empirical Mode Decomposition)可以将信号分解不同频率特性,并且结合Hilbert求解包络以及瞬时频率。EMD、Hilbert、瞬时频率三者有无内在联系?答案是:有。

按照Hilbert变换一篇的介绍,

f(t)=dΦ(t)d(t)f(t)=dΦ(t)d(t)

然而,这样求解瞬时频率在某些情况下有问题,可能出现f(t)f(t)为负的情况:我1秒手指动5下,频率是5Hz;反过来,频率为8Hz时,手指1秒动8下,可如果频率为-5Hz呢?负频率没有意义。

考虑信号

x(t)=x1(t)+x2(t)=A1ejω1t+A2ejω2t=A(t)ejφ(t)x(t)=x1(t)+x2(t)=A1ejω1t+A2ejω2t=A(t)ejφ(t)

为了简单起见,假设A1A1和A2A2恒定,且ω1ω1和ω2ω2是正的。信号x(t)x(t)的频谱应由两个在ω1ω1和ω2ω2的δδ函数组成,即

X(ω)=A1δ(ω−ω1)+A2δ(ω−ω2)X(ω)=A1δ(ω−ω1)+A2δ(ω−ω2)

因为假设ω1ω1和ω2ω2是正的,所以该信号解析。求得相位

Φ(t)=A1sinω1t+A2sinω2tA1cosω1t+A2cosω2tΦ(t)=A1sin⁡ω1t+A2sin⁡ω2tA1cos⁡ω1t+A2cos⁡ω2t

分别取两组参数,对tt求导,得到对应参数下的瞬时频率:

参数

ω1=10Hzω1=10Hz和ω2=20Hzω2=20Hz.

  • 组1:{A1=0.2,A2=1A1=0.2,A2=1};
  • 组2:{A1=1.2,A2=1A1=1.2,A2=1}

对于组2,瞬时频率出现了负值。

可见

对任意信号进行Hilbert变换,可能出现无法解释、缺乏实际意义的频率分量。Norden E. Hung等人对瞬时频率进行研究后发现,只有满足特定条件的信号,其瞬时频率才具有物理意义,并将此类信号成为:IMF/基本模式分量。 

  B-EMD基本原理

此处给一个原理图:

  C-基本模式分量(IMF)

EMD分解的IMF其瞬时频率具有实际物理意义,原因有两点:

  • 限定1
    • 在整个数据序列中,极值点的数量NeNe(包括极大值、极小值点)与过零点的数量必须相等,或最多相差1个,即(Ne−1)≤Ne≥(Ne+1)(Ne−1)≤Ne≥(Ne+1).
  • 限定2
    • 在任意时间点titi上,信号局部极大值确定的上包络线fmax(t)fmax(t)和局部极小值确定的下包络线fmin(t)fmin(t)的均值为0.

限定1即要求信号具有类似传统平稳高斯过程的分布;限定2要求局部均值为0,同时用局部最大、最小值的包络作为近似,从而信号局部对称,避免了不对称带来的瞬时频率波动。

  D-VMD

关于VMD(Variational Mode Decomposition),具体原理可以参考其论文,这里我们只要记住一点:其分解的各个基本分量——即各解析信号的瞬时频率具有实际的物理意义

 

二、代码分析

首先给出信号分别用VMD、EMD的分解结果:

给出对应的代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

%--------------- Preparation

clear all;

close all;

clc;

% Time Domain 0 to T

T = 1000;

fs = 1/T;

t = (1:T)/T;

freqs = 2*pi*(t-0.5-1/T)/(fs);

% center frequencies of components

f_1 = 2;

f_2 = 24;

f_3 = 288;

% modes

v_1 = (cos(2*pi*f_1*t));

v_2 = 1/4*(cos(2*pi*f_2*t));

v_3 = 1/16*(cos(2*pi*f_3*t));

% for visualization purposes

wsub{1} = 2*pi*f_1;

wsub{2} = 2*pi*f_2;

wsub{3} = 2*pi*f_3;

% composite signal, including noise

f = v_1 + v_2 + v_3 + 0.1*randn(size(v_1));

% some sample parameters for VMD

alpha = 2000;        % moderate bandwidth constraint

tau = 0;            % noise-tolerance (no strict fidelity enforcement)

K = 4;              % 4 modes

DC = 0;             % no DC part imposed

init = 1;           % initialize omegas uniformly

tol = 1e-7;

 

%--------------- Run actual VMD code

[u, u_hat, omega] = VMD(f, alpha, tau, K, DC, init, tol);

subplot(size(u,1)+1,2,1);

plot(t,f,'k');grid on;

title('VMD分解');

subplot(size(u,1)+1,2,2);

plot(freqs,abs(fft(f)),'k');grid on;

title('对应频谱');

for i = 2:size(u,1)+1

    subplot(size(u,1)+1,2,i*2-1);

    plot(t,u(i-1,:),'k');grid on;

    subplot(size(u,1)+1,2,i*2);

    plot(freqs,abs(fft(u(i-1,:))),'k');grid on;

end

 

%---------------run EMD code

imf = emd(f);

figure;

subplot(size(imf,1)+1,2,1);

plot(t,f,'k');grid on;

title('EMD分解');

subplot(size(imf,1)+1,2,2);

plot(freqs,abs(fft(f)),'k');grid on;

title('对应频谱');

for i = 2:size(imf,1)+1

    subplot(size(imf,1)+1,2,i*2-1);

    plot(t,imf(i-1,:),'k');grid on;

    subplot(size(imf,1)+1,2,i*2);

    plot(freqs,abs(fft(imf(i-1,:))),'k');grid on;

end

  附上两个子程序的code.

VMD:

+ View Code

EMD:

+ View Code

关于EMD,有对应的工具箱。VMD也有扩展的二维分解,此处不再展开。

 

三、一种权衡的小trick

关于瞬时频率的原理以及代码,参考另一篇博文。

比较来看:

  • EMD分解的IMF分量个数不能人为设定,而VMD(Variational Mode Decomposition)则可以;
  • 但VMD也有弊端:分解过多,则信号断断续续,没有多少规律可言。

能不能取长补短呢?

自己之前做了一个小code,放在这里,供大家交流使用(此理论为自己首创,版权所有,拿去也不介意!(●'◡'●))。
给定一个信号,下图是EMD分解结果,分解出了5个分量。

再来一个VMD(设定分量个数为3)的分解结果:

比较两个结果,可以发现:VMD的低频分量,更容易表达出经济波动的大趋势,而EMD则不易观察该特性。
或许有人会说:几个EMD分量叠加一下,也会有该效果,但如果不观察分解的数据,如何确定几个分量相加呢?更何况EMD总的IMF个数也是未知!

VMD的优势观察到了,但如何确定分量个数呢?
再来一个效果图:

这里分析了VMD分量从1~9,9种情况下某特征的曲线,可以观察到:个数增加到一定数量,曲线有了明显的下弯曲现象(该特性容易借助曲率,进行量化分析,不再展开),这个临界的个数就是分解的合适数量,此处:K=3,因为到4就有了明显的下弯曲。

可见通过该特征,即可理论上得出最优K。下面讲一讲这个某特征为何物?

上一段代码:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

for st=1:9

    K=st+1;

    [u, u_hat, omega] = VMD(data, length(data), 0, K, 0, 1, 1e-5);

    u=flipud(u);

    resf=zeros(1,K);

    for i=1:K

        testdata=u(i,:);

        hilbert(testdata'); 

        z=hilbert(testdata');                   % 希尔伯特变换

        a=abs(z);                               % 包络线

        fnor=instfreq(z);                       % 瞬时频率

        resf(i)=mean(fnor);     

    end

    subplot(3,3,st)

    plot(resf,'k');title(['个数为',num2str(st)]);grid on;

end

 

  没错,该特征就是:分量瞬时频率的均值。如果分解个数过大,则分量会出现断断絮絮地现象,特别是在高频,这样一来,即使是高频,平均瞬时频率反而低一些,这也是下弯曲的根本原因。

这个小trick就介绍到这里。

 

四、问题补充

HHT算法中,有两处存在端点效应,VMD是否也有呢?这一点没有再去验证。另外,关于Hilbert的端点效应,在另一篇博文已经给出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1380520.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

什么是MDM

MDM或移动设备管理是一种软件应用程序,用于管理企业中的终端,如笔记本电脑、智能手机、平板电脑等。随着越来越多的员工使用这些设备,各种形式和规模的企业现在都转向移动设备管理,以增强数据安全性并提高生产力。 MDM是什么意思…

AVS3中的AMVR和EMVR

在AVS2中运动预测中使用的MV都是1/4像素精度,通过在整像素间插值能显著提升非整像素运动预测的精度,同时带来的问题是随着MV精度的提高编码MVD所需的比特数也会增加。 AMVR AMVR支持的MVD编码5种精度的MVR{1/4,1/2,1,2,4},索引为0到4&#x…

无线网络视频监控系统基本概念和术语

无线网络视频监控系统基本概念和术语 1.网络摄像机与模拟摄像机的区别 模拟摄像机,或称摄像头,输出CVBS模拟视频信号,PAL制或者NTSC制。模拟摄像机多采用CCD器件,目前也有采用CMOS器件的。有枪机、半球、球机等多种形式&#xff0…

掌握Python的X篇_27_Python中标准库文档查阅方法介绍

前面的博文介绍了python的基本语法、模块及其导入方法。前人将各种方法封装成模块、库、函数供我们使用,如何去使用前人做好的东西,那就需要去查阅文档。今天就介绍python中官方文档的查阅方式。对于初学者而言,python自带的文档就已经足够好…

基本动态规划问题的扩展

基本动态规划问题的扩展 应用动态规划可以有效的解决许多问题,其中有许多问题的数学模型,尤其对一些自从57年就开始研究的基本问题所应用的数学模型,都十分精巧。有关这些问题的解法,我们甚至可以视为标准——也就是最优的解法。…

shell脚本安装nginx

shell脚本原理 以删除桌面文件的脚本为例,执行脚本后,shell脚本将代码给内核,内核读取后执行命令,如果shell脚本也在桌面上,执行后这个脚本文件也会被删除。 变量 echo $SHELL$符表示SHELL是一个变量,变量…

Python(七十九)字符串的常用操作——字符串内容对齐操作的方法

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

docker实现Nginx

文章目录 1.docker 安装2.docker环境实现Nginx 1.docker 安装 1.使用环境为红帽8.1,添加源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo2.安装 yum install docker-ce docker-ce-cli containerd.io显示出错 Docker C…

Vue [Day7] 综合案例

核心概念回顾 state:提供数据 getters:提供与state相关的计算属性 mutations:提供方法,用于修改state actions:存放异步操作 modules:存模块 功能分析 https://www.npmjs.com/package/json-server#ge…

反介入/区域拒止:现代战争的演变

译者说明 本文译自美国空军Christopher J. McCarthy少校的一篇文章,略去了原文最后的作者简介。 原文地址(可能需要科学上网): https://www.usnwc.edu/Lucent/OpenPdf.aspx?id95 本文仅为翻译,不代表译者赞成或反对原…

UE4莫名其妙崩溃的解决办法

pin error stack edgraph balabala...... 先检查蓝图把报错的节点全部去掉,有的运行不会提示蓝图报错,只能一个一个找。。。。 c报错一般都会有提示,所以基本都可以解决 把磁盘空间留大一点,玄学 总是在这里报错,这个不用管&am…

叛乱怎么自定义服务器,» 叛乱:沙漠风暴 服务器安装Mod教程

叛乱:沙漠风暴 服务器安装Mod教程 4.6 (78) 叛乱:沙漠风暴 服务器 租用 v2pg.com 获取API KEY 比如 59f0601123331222f0755f9e8551ea639 就是申请的KEY, 保存好。 打开后台 “服务器设置” 然后编辑 Engine.ini

叛乱联机服务器未响应,叛乱沙漠风暴怎么开服 叛乱沙漠风暴开服操作指南详解 安装准备-游侠网...

叛乱沙漠风暴怎么开服?游戏一款多人联机操作游戏,在开服前期要做好相应的准备工作,也就是设置一些选项,这里给大家带来了“xudong162”分享的叛乱沙漠风暴开服操作指南详解,详情一起看下文中介绍吧。 推荐阅读: 开服操…

叛乱联机服务器未响应,叛乱沙漠风暴开服注意事项及操作指南经验一览

叛乱沙漠风暴开服注意事项及操作指南经验一览,该游戏其实是一款多人联机的操作游戏,玩家在开服前期要做好相应的准备工作,其实也不是什么困难的事,就是设置一些选项方便操作,这里给大家带来了叛乱沙漠风暴开服注意事项…

叛乱2 linux服务器,叛乱沙漠风暴服务器配置教程 叛乱沙漠风暴怎么开服

第 2 页 服务器配置 服务器配置 大多数服务器配置是通过INI文件和启动参数执行的。 可以使用任何纯文本编辑器编辑INI文件,例如Notepad,Notepad ,Sublime Text和VSCode。 配置文件的位置位于以下目录中(相对于安装目录): Windows:…

叛乱找不到社区服务器,叛乱沙漠风暴常见问题及解决方法_叛乱沙漠风暴常见问题QA_游戏堡...

《 1.Q:游戏卡在读取页面怎么办 A:看看你按回车键没 一直读取进不去游戏说明网络不好 直接卡死说明电脑玩不了这游戏了,建议升级配置 2.Q:游戏什么配置可以玩 A:可游玩最低配置:GTX950M,i74700&…

叛乱沙漠风暴不显示服务器,叛乱沙漠风暴进服务器闪退怎么回事_叛乱沙漠风暴闪退解决方法...

相信大家在玩叛乱沙漠风暴的时候,偶尔也会遇到一进入服务器就闪退的情况吧,这非常的影响我们的游戏体验,那么出现这种状况的原因是什么呢?又该如何解决呢?就让我们一起来看一看吧! 叛乱沙漠风暴进服务器闪退…

在Vue中动态引入图片为什么要用require

静态资源和动态资源 静态资源 动态的添加src 动态资源 我们通过网络请求从后端获取的资源 动态的添加src会被当成静态资源 动态的添加src最终会被打包成: 动态的添加图片最会会被编译成一个静态的字符串,然后再浏览器运行中会去项目中查找这个资源…

SpringSecurity 详解(通俗易懂)

SpringSecurity 详解 1、SpringSecurity讲解1.1、SpringSecurity完整流程1.2、认证流程 2、登录,退出,注册_分析说明2.1、登录2.2、校验2.3、退出2.4、注册2.5、SecurityContextHolder说明 3、代码实现3.1、引入依赖3.2、登录 退出 注册3.2.1、SpringSec…

一个在线的PS

http://www.uupoop.com/