Hilbert-Huang Transform(希尔伯特-黄变换)
在我们正式开始讲解Hilbert-Huang Transform之前,不妨先来了解一下这一伟大算法的两位发明人和这一算法的应用领域
Section I 人物简介
希尔伯特:公认的数学界“无冕之王”,1943年去世于瑞士苏黎世。除此之外,自不必过多介绍。
黄锷:1937年出生于湖北省;1975年进入NASA(美国国家宇航局);美国国家工程院院士。
Section II Hilbert-Huang的应用领域
医学领域:探测心率不齐、登革热的扩散、血压的变化
交通领域:探测公路桥梁安全
安全领域:辨识发言者的身份
地理领域:地震工程
航天领域:卫星资料分析
在了解了这一伟大发明的背景后,下面我们要正式的开始入手希尔伯特-黄变换了,我将尝试以尽可能简要的语言向大家介绍这一发明,并尽可能的避免不必要的数学推导。
Section III Hilbert-Huang的算法详细介绍
如下图所示,在希尔伯特-黄的运算步骤中,原始脑电信号/其他时序信号被作为Huang的算法的输入,在经过huang的算法处理过后被当做Hilbert的输入进行处理。这便是Hilbert-Huang最简单明了的运算步骤。在这里为了继续往下的讲解更加方便,我们先来介绍两个概念。上文中,我们提到了“huang的算法”,在正式的书面语言中,我们并不这么称呼它,而是将“huang的算法”称为EMD(Empirical mode decomposition,经验模式分解)。而另外一个概念IMF在这里直接讲解或许会使大家晕头转向(或许有人注意到图中的IMF后面有一个‘s’,而这里却没有加‘s’,对英语只有基础了解的人也应猜到IMF不止一个)。
当将到这里的时候,大部分人或许会萌生出一个念头——“难道Huang仅仅是对Hilbert的锦上添花吗”。好吧,至少本人当初就是这样想的,毕竟Hilbert比huang更早出名,而且Hilbert是数学史上公认的“大牛”,哦,不对,是“大王”。用当前时兴的话来说就是“huang有可能抱了Hilbert的大腿”。但当我真正了解了这一伟大的发明之后,我才彻彻底底打消了这个十分愚蠢的念头。
我个人并不喜欢吊人胃口,这里把结论说在前面“Huang的算法几乎是Hilbert使用的前提条件,Hilbert Transform则是Hilbert-Huang算法的精要所在”(注意句中出现了“几乎”一词)。下面我就给大家讲一下这句话的由来。比如我们造了一款叫做“榔头”的手机,“榔头”手机对用户的使用提出了下列要求:1.晚上不能使用。2.下雨天不能打。3.室内不能打。4.室外的偏远郊区也不能打。实际上,Hilbert正是这样一款“榔头”手机,它对用户的使用提出了近乎苛刻的要求。Hilbert变换算法要求输入信号只能是线性稳态的。请注意这里是两个词“线性”“稳态”。无论是在自然界还是在人类社会中,绝大部分的信号要么是“线性非稳态”,要么是“非线性稳态”,要么干脆是“非线性非稳态”。我们关心的重点——EEG信号正是这样一类“非线性非稳态”的信号。这也就导致了绝大部分信号不能够愉快的进入Hilbert的“碗里”来。此时,Huang的EMD算法起到了这样的作用,它能够将所有的时域信号转化为“线性稳态”,解了Hilbert算法的软肋。
首先,我们先说一说Huang的EMD算法。为了讲解清晰起见,我将对照下图予以讲解:
上图中,深蓝色的线条是EEG信号(截取自瑞士联邦理工学院DEAP数据库 s01 trail1 channel1的前200个数据点)。图中,红线上的红点是该EEG signal的极大值点,绿线上的绿点是该signal的极小值点。我们分别为极大值点和极小值点做三次包络线做好的包络线分别是红色包络线和绿色包络线两条线。为这两条线做出均值线即为图中围绕y=0轴(注意y=0轴的位置,并非是图中的坐标系的x轴,x轴所代表的线是y=-10)震荡的浅蓝色均值线。之后,我们将原始EEG信号减去均值线,得到疑似IMF线(图中未标出)(这里终于出现IMF了,可是我还是无法让你直观理解,大家先暂且忍忍,强行记忆一下)。之后,我们对疑似IMF进行判断(需要同时满足两个条件,下面讲)。如果满足条件,则疑似IMF升级为正式IMF。然后将原始信号减去正式IMF的结果赋值给原始信号,说白了就是让这一IMF从原始信号里“滚蛋”。就好比蒙面歌王的某一期的获胜者一样,都赢了,不滚干嘛,难道还要和加时赛选手(减完后剩下的原始信号,也即新原始信号)在一起吗?另一个方面,如果疑似IMF未能通过检验,则将当前IMF作为原始信号,并回到做极值点的包络线那一步重新开始。现在讲一下两个重要的条件:
条件1:均值线(总得有很多数构成吧)的平均值趋近于0(一般和0做差<0.1)
条件2:原始信号的极值点个数(包括极大值点个数+极小值点个数)和原始信号同y=0的交点个数之差不能大于1(小于等于1)
那么这样一个程序什么时候可以循环结束呢,答案是,当某一次IMF被发现是单调函数或者是缺少极大/小值点即可让程序结束。下图是程序流程图。
空口无凭,我们处理一段真正的脑电试试看(程序会在之后给出)
图中共有4*2个图,位于(1,1)这个位置的是脑电的原始信号。之后从(1,2)->(4,2)均为IMF。其中,除了(1,1)自身,每一副图都是(1,1)的一个IMF(现在知道什么是IMF了吧)。通过观察不难发现。一个典型的IMF分量的上下包络线肯定是对称的。最后一个IMF(4,2)被称为余项用r表示。观察即可知该IMF分量没有极小值点(端点除外),所以程序才会结束。通常来讲,别的书上会这样用数学公式告诉你:
其中ξ(t)就是原始信号,IMFi就是K个固有模态函数。rK就是原始信号减完IMF后剩下的余项。
下面是求解EMD算法的Matlab源程序,特此声明,本程序为我本人在网上找到的,除了注释外,其他版权皆归属原作者,由于不清楚原作者是谁,未能标出,如果侵犯权利,请联系我删除源码。
%非主函数,被调用
function n = findpeaks(x)%用于寻找极值点,该函数只会求极大值
% Find peaks.
% n = findpeaks(x)
n = find(diff(diff(x)>0)<0);%一阶导数大于0二阶导数小于0的点
u = find(x(n+1)>x(n));
n(u) = n(u) + 1;
end
%非主函数,被调用
%判断x是否单调,返回0代表不是单调,返回1代表是单调
function u = ismonotonic(x)
u1 = length(findpeaks(x))*length(findpeaks(-x));%如果最大/最小值有一个为0即可判断程序满足退出条件了
if u1 > 0
u = 0;
else
u = 1;
end
end
%非主函数,被调用。判断当前x是不是真IMF
function u = isimf(x)
N = length(x);
u1 = sum(x(1:N-1).*x(2:N) < 0);%求x与y=0轴交点的个数
u2 = length(findpeaks(x))+length(findpeaks(-x));%求极值点个数
if abs(u1-u2) > 1
u = 0;
else
u = 1;
end
end
%非主函数,被调用,作用是获得x的包络线
function s = getspline(x)
N = length(x);
p = findpeaks(x);
s = spline([0 p N+1],[0 x(p) 0],1:N);
end
%主函数
function imf = emd(x)
% Empiricial Mode Decomposition (Hilbert-Huang Transform)
% imf = emd(x)
% Func : findpeaks
x = transpose(x(:));
imf = [];
while ~ismonotonic(x)
x1 = x;
sd = Inf;
while (sd > 0.1) || ~isimf(x1)
s1 = getspline(x1);
s2 = -getspline(-x1);
x2 = x1-(s1+s2)/2; sd = sum((x1-x2).^2)/sum(x1.^2);
x1 = x2;
end imf(end+1,:) = x1;
x = x-x1;
end
imf(end+1,:) = x;
end
Section IV Hilbert算法的介绍
在上一章中,我们介绍了EMD算法,在这一部分中,我会介绍Hilbert算法,这一节有些许数学趣味,对数学趣味不感兴趣的直接跳到应用部分。
由最后一步可以知道,当频率大于0时,相位向左移90度;反之,向右移90度。这便是希尔伯特变换。
一般来讲,对于原始信号x(t)的希尔伯特变换H[x(t)],通常被写为
z(t)=x(t)+j H[x(t)]
其中,x(t)被称为复信号z(t)的实部,H[x(t)]被称为复信号z(t)的虚部, z(t)被称为x(t)的解析信号
一般情况下,matlab会将z(t)给出,而不直接给出原始信号的希尔伯特变换,所以需要使用imag函数求解z(t)的虚部,这才是真正的希尔伯特变换。
Hilbert-Huang Transform(希尔伯特-黄变换)的更多相关文章
- Hilbert-Huang Transform: matlab 希尔伯特-黄变换: matlab实现
关于Hilbert-Huang的matlab实现,材料汇总,比较杂...感谢所有网络上的贡献者们:) 核心:以下代码计算HHT边际谱及其对应频率 工具包要求:G-Rilling EMD Toolbox ...
- View Transform(视图变换)详解
http://www.cnblogs.com/graphics/archive/2012/07/12/2476413.html 什么是View Transform 我们可以用照相机的原理来阐释3D图形 ...
- (转)View Transform(视图变换)详解
原文作者讲得太好了,唯有这篇让我对视图矩阵了解的清晰了很多. --------------------------------------------------------------------- ...
- css3的transform ,2D变换
transformtransform的中文翻译就是变换,改变,改观,转换的意思 在css中的主要作用就是对一个div或元素进行样式的改变. 他的属性(变换方式)有:平移,旋转,缩放,扭曲transla ...
- talib 中文文档(十四):Math Transform Functions 数学变换
Math Transform Functions ACOS - Vector Trigonometric ACos 函数名:ACOS 名称:acos函数是反余弦函数,三角函数 real = ACOS( ...
- 形象易懂讲解算法I——小波变换
https://zhuanlan.zhihu.com/p/22450818?refer=dong5 最早发于回答:能不能通俗的讲解下傅立叶分析和小波分析之间的关系? - 咚懂咚懂咚的回答现收入专栏. ...
- SCOI2020后摸鱼实况记录
6.27:回家之后摸摸摸,等辉夜更新辉夜真好看. 6.28:口胡了一场比赛,发现原题大战,感觉很有毒.然后不知道干了啥,一天就结束了.晚上发现兰斯10居然汉化了,马上跑去白嫖下载,waiting... ...
- 信号处理——Hilbert变换及谱分析
作者:桂. 时间:2017-03-03 23:57:29 链接:http://www.cnblogs.com/xingshansi/articles/6498913.html 声明:转载请注明出处, ...
- QT 使用QPainter 绘制图形 和 世界变换 world transform
1. 绘制椭圆 饼状型 贝塞尔曲线 绘制图像重写方法 void paintEvent(QPaintEvent *event)即可. void Widget::paintEvent(QPaintEve ...
随机推荐
- 关于.NET异常处理的思考
年关将至,对于大部分程序员来说,马上就可以闲下来一段时间了,然而在这个闲暇的时间里,唯有争论哪门语言更好可以消磨时光,估计最近会有很多关于java与.net的博文出现,我表示要作为一个吃瓜群众,静静的 ...
- 分布式系列文章——Paxos算法原理与推导
Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...
- Git Bash的一些命令和配置
查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...
- 02.LoT.UI 前后台通用框架分解系列之——灵活的菜单栏
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...
- 微软新神器-Power BI横空出世,一个简单易用,还用得起的BI产品,你还在等什么???
在当前互联网,由于大数据研究热潮,以及数据挖掘,机器学习等技术的改进,各种数据可视化图表层出不穷,如何让大数据生动呈现,也成了一个具有挑战性的可能,随之也出现了大量的商业化软件.今天就给大家介绍一款逆 ...
- [C#] 走进异步编程的世界 - 开始接触 async/await
走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $&qu ...
- PHP之使用网络函数和协议函数
使用其他Web站点的数据 <html> <head> <title> Stock Quote From NASDAQ </title> </hea ...
- 张小龙宣布微信小程序1月9日发布,并回答了大家最关心的8个问题
2016 年 12 月 28 日,张小龙在微信公开课 PRO 版的会场上,宣布了微信小程序的正式发布时间. 微信小程序将于 2017 年 1 月 9 号正式上线. 同时他解释称,小程序就像PC时代的网 ...
- ubuntu系统(华硕笔记本)屏幕亮度用Fn控制的调节设置
亲测配置: 系统:Linux lite 3.2 x86_64(Ubuntu其他版本可参考修改) 笔记本:华硕(asus)1201N 达到的效果: 可以正常使用Fn+F5调暗,Fn+F6调亮. 设置步骤 ...
- Linux常用命令
命令格式与目录处理命令 ls 命令格式与目录处理命令 ls 命令格式:命令 [-选项][参数] 例:ls -la /etc 说明: 1)个别命令使用不遵循格式 2)当有多个选项时,可以写在一起 3)简 ...