目录

  • 简介
  • EMD算法原理
  • python实现EMD案例

本教程为脑机学习者Rose发表于公众号:脑机接口社区 .QQ交流群:903290195

简介

SSVEP信号中含有自发脑电和大量外界干扰信号,属于典型的非线性非平稳信号。传统的滤波方法通常不满足对非线性非平稳分析的条件,1998年黄鄂提出希尔伯特黄变换(HHT)方法,其中包含经验模式分解(EMD)和希尔伯特变换(HT)两部分。EMD可以将原始信号分解成为一系列固有模态函数(IMF) [1],IMF分量是具有时变频率的震荡函数,能够反映出非平稳信号的局部特征,用它对非线性非平稳的SSVEP信号进行分解比较合适。

EMD算法原理

任何复杂的信号均可视为多个不同的固有模态函数叠加之和,任何模态函数可以是线性的或非线性的,并且任意两个模态之间都是相互独立的。在这个假设基础上,复杂信号x(t)x(t)x(t)的EMD分解步骤如下:
步骤1:
寻找信号 全部极值点,通过三次样条曲线将局部极大值点连成上包络线,将局部极小值点连成下包络线。上、下包络线包含所有的数据点。

步骤2:
由上包络和下包络线的平均值m1(t)m_{1}(t)m1​(t) ,得出
h1(t)=x(t)−m1(t)h_1(t)=x(t)-m_{1}(t)h1​(t)=x(t)−m1​(t)
若h1(t)h_{1}(t)h1​(t)满足IMF的条件,则可认为h1(t)h_{1}(t)h1​(t)是x(t)x(t)x(t)的第一个IMF分量。

步骤3:
若h1(t)h_{1}(t)h1​(t)不符合IMF条件,则将h1(t)h_{1}(t)h1​(t)作为原始数据,重复步骤1、步骤2,得到上、下包络的均值m11(t)m_{11}(t)m11​(t),通过计算h11(t)=h1(t)−m11(t)h_{11}(t)=h_{1}(t)-m_{11}(t)h11​(t)=h1​(t)−m11​(t)是否适合IMF分量的必备条件,若不满足,重复如上两步kkk次,直到满足前提下得到h1k(t)=h1(k−1)(t)−m1k(t)h_{1k}(t)=h_{1(k-1)}(t)-m_{1k}(t)h1k​(t)=h1(k−1)​(t)−m1k​(t)。第1个IMF表示如下:
c1(t)=h1k(t)c_{1}(t)=h_{1k}(t)c1​(t)=h1k​(t)

步骤4:
将c1(t)c_{1}(t)c1​(t)从信号x(t)x(t)x(t)中分离得到:
r1=x(t)−c1(t)r_{1}=x(t)-c_{1}(t)r1​=x(t)−c1​(t)
将r1(t)r_{1}(t)r1​(t)作为原始信号重复上述三个步骤,循环nnn次,得到第二个IMF分量c2(t)c_{2}(t)c2​(t)直到第nnn个IMF分量 ,则会得出:

{r2(t)=r1(t)−c2(t)⋯rn(t)=rn−1(t)−cn(t)\begin{cases} r_{2}(t)=r_{1}(t)-c_{2}(t)\\ \cdots\\ r_{n}(t)=r_{n-1}(t)-c_{n}(t)\\ \end{cases} ⎩⎪⎨⎪⎧​r2​(t)=r1​(t)−c2​(t)⋯rn​(t)=rn−1​(t)−cn​(t)​

步骤5:
当rn(t)r_{n}(t)rn​(t)变成单调函数后,剩余的rn(t)r_{n}(t)rn​(t)成为残余分量。所有IMF分量和残余分量之和为原始信号x(t)x(t)x(t):
x(t)=∑nci(t)+rn(t)x(t)=\sum^{n}c_{i}(t)+r_{n}(t)x(t)=∑n​ci​(t)+rn​(t)

用EMD进行滤波的基本思想是将原信号进行EMD分解后,只选取与特征信号相关的部分对信号进行重构。如下图中a部分为原始信号,b部分为将原始信号进行EMD分解获得的6个IMF分量和1个残余分量,c部分为将分解获得的6个IMF分量和1个残余分量进行重构后的信号,可以看出SSVEP信号用EMD分解后,基本上包含了原有信号的全部信息。

图片来源于[1]

python实现EMD案例

# 导入工具库
import numpy as np
from PyEMD import EMD, Visualisation

构建信号
时间t: 为0到1s,采样频率为100Hz,S为合成信号

# 构建信号
t = np.arange(0,1, 0.01)
S = 2*np.sin(2*np.pi*15*t) +4*np.sin(2*np.pi*10*t)*np.sin(2*np.pi*t*0.1)+np.sin(2*np.pi*5*t)
# 提取imfs和剩余信号res
emd = EMD()
emd.emd(S)
imfs, res = emd.get_imfs_and_residue()
# 绘制 IMF
vis = Visualisation()
vis.plot_imfs(imfs=imfs, residue=res, t=t, include_residue=True)

# 绘制并显示所有提供的IMF的瞬时频率
vis.plot_instant_freq(t, imfs=imfs)
vis.show()

参考
[1] 基于稳态视觉诱发电位的脑-机接口系统研究

脑机学习者Rose笔记分享,QQ交流群:903290195
更多分享,请关注公众号

EMD算法原理与python实现相关推荐

  1. 手把手教你EMD算法原理与Python实现(更新)

    Rose今天主要介绍一下EMD算法原理与Python实现.关于EMD算法之前介绍过<EMD算法之Hilbert-Huang Transform原理详解和案例分析>, SSVEP信号中含有自 ...

  2. python kmeans聚类 对二维坐标点聚类_Kmeans均值聚类算法原理以及Python如何实现

    第一步.随机生成质心 由于这是一个无监督学习的算法,因此我们首先在一个二维的坐标轴下随机给定一堆点,并随即给定两个质心,我们这个算法的目的就是将这一堆点根据它们自身的坐标特征分为两类,因此选取了两个质 ...

  3. 匈牙利算法原理与Python实现

    匈牙利算法原理与Python实现 今天学习一个新的算法-匈牙利算法,用于聚类结果分析,先用图表示我当前遇到的问题: 这两列值是我用不同算法得到的聚类结果,从肉眼可以看出第一列聚类为0的结果在第二列中对 ...

  4. Apriori 算法原理以及python实现详解

    Apriori 算法原理以及python实现 ​ Apriori算法是第一个关联规则挖掘算法,也是最经典的算法.它利用逐层搜索的迭代方法找出数据库中项集的关系,以形成规则,其过程由连接(类矩阵运算)与 ...

  5. LM(Levenberg–Marquardt)算法原理及其python自定义实现

    LM算法原理及其python自定义实现 LM(Levenberg–Marquardt)算法原理 LM算法python实现 实现步骤: 代码: 运行结果: LM(Levenberg–Marquardt) ...

  6. PageRank算法原理与Python实现

    本文转载自https://blog.csdn.net/ten_sory/article/details/80927738 PageRank算法原理与Python实现 PageRank算法,即网页排名算 ...

  7. 经验模式分解EMD算法原理

    目录 简介 假设条件与原理 假设条件 基本原理 EMD的优缺点 存在的问题 简介 经验模态分解(Empirical Mode Decomposition, EMD)算法是由 NE. Huang 等人提 ...

  8. 统计学习方法笔记(一)-k近邻算法原理及python实现

    k近邻法 k近邻算法 算法原理 距离度量 距离度量python实现 k近邻算法实现 案例地址 k近邻算法 kkk近邻法(kkk-NN)是一种基本分类和回归方法. 算法原理 输入:训练集 T={(x1, ...

  9. [转载] python价值算法_PangRank算法原理及其Python实现

    参考链接: 页面排名算法Page Rank和Python实现 文章目录 算法来源 早期搜索引擎采用分类目录的方法,通过人工进行网页分类,并整理出高质量的网页. 后来,随着网页的增多,人工分类已经不现实 ...

最新文章

  1. TensorFlow MNIST初级学习
  2. 学生信息管理C语言 密码,求学生信息管理系统C语言版
  3. 决策树ID3和C4.5算法Python实现源码
  4. Java学习需要掌握哪些技能?
  5. 看风水用什么罗盘最好_兰花用什么花盆栽植最好?
  6. NeurIPS2021 HRFormer:HRNet又出续作啦!国科大北大MSRA提出高分辨率Transformer,开源!...
  7. 梅林安装opkg后安装iperf3_阳台到底有没有必要安装推拉门?利与弊告诉你,不要等安装后后悔...
  8. Java实训项目:GUI学生信息管理系统(2019)【中】
  9. 芒果超媒2021年净利润21亿元 芒果TV会员数达5040万
  10. uboot中DEBUG定义
  11. 四则运算2扩展---c++
  12. linux window nginx性能,KVM虚拟机 Nginx性能测试
  13. unbuntu下 配置vim 详解
  14. ai-人工智能的本质和未来_带有人工智能的动画电子设备-带来难以想象的结果...
  15. 2020第三届中青杯问题总结
  16. 使用HTTP下载单词音标,特此记录
  17. 开启注册丨ACL-IJCAI-SIGIR顶级会议论文报告会(AIS 2020)
  18. python猴子分桃_猴子分桃 - Ryan in C++ - 博客园
  19. eclipse制作app入门教程
  20. python 答题卡识别_opencv+python机读卡识别整合版

热门文章

  1. layer重复弹出(layui弹层同时存在多个)的解决方法
  2. ORACLE 存储过程异常捕获并抛出
  3. 将字符串转换为日期时间
  4. 应用中有使用到集群么?多大规模?
  5. noip搜索模拟题 骰子
  6. centos iptables 防火墙配置
  7. BEGINNING SHAREPOINT#174; 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers 总结
  8. 【GoldenGate】使用OGG,两个Oracle库之间单向同步数据
  9. sql server 2005 中的同义词
  10. C语言杂谈:指针与数组 (上) (转)