EMD分解解析

来源:互联网 发布:合工大网络公选课刷课 编辑:程序博客网 时间:2024/05/21 06:52

项目上的理论研究看到一种方法EMD+SVD方法识别,看了下EMD算法意义跟傅立叶变换差不多,也是将信号分解为不同的频率,但是区别与傅立叶无线长时间与小波变换选定小波基的问题,EMD给出了自适应分解方法。

关于时间序列平稳性的一般理解
所谓时间序列的平稳性,一般指宽平稳,即时间序列的均值和方差为与时间无关的常数,其协方差与时间间隔有关而也与时间无关。简单地说,就是一个平稳的时间序列指的是:遥想未来所能获得的样本时间序列,我们能断定其均值、方差、协方差必定与眼下已获得的样本时间序列等同。

反之,如果样本时间序列的本质特征只存在于所发生的当期,并不会延续到未来,亦即样本时间序列的均值、方差、协方差非常数,则这样一个时间序列不足以昭示未来,我们便称这样的样本时间序列是非平稳的。

形象地理解,平稳性就是要求经由样本时间序列所得到的拟合曲线在未来的一段期间内仍能顺着现有的形态“惯性”地延续下去;如果数据非平稳,则说明样本拟合曲线的形态不具有“惯性”延续的特点,也就是基于未来将要获得的样本时间序列所拟合出来的曲线将迥异于当前的样本拟合曲线。

事实上,世界上几乎不存在理想的“平稳”时间序列。欧阳首承教授曾指出:“平稳序列性消除了小概率事件”。即在欧阳教授的溃变论看来,EMD这一方法也是有问题的。但是,该方法确实扩展了平稳化这一传统思想的应用范围,即扩展到了对任何类型的时间序列的处理,也是了不起的新进展。

2:EMD方法:

EMD 方法在理论上可以应用于任何类型的时间序列(信号)的分解,因而在处理非平稳及非线性数据上,比之前的平稳化方法更具有明显的优势。所以,EMD方法一经提出就在不同的工程领域得到了迅速有效的应用,例如用在海洋、大气、天体观测资料与地球物理记录分析等方面。
该方法的关键是它能使复杂信号分解为有限个本征模函数(Intrinsic Mode Function,简称IMF),所分解出来的各IMF分量包含了原信号的不同时间尺度的局部特征信号。EMD分解方法是基于以下假设条件:
⑴数据至少有两个极值,一个最大值和一个最小值;
⑵数据的局部时域特性是由极值点间的时间尺度唯一确定;
⑶如果数据没有极值点但有拐点,则可以通过对数据微分一次或多次求得极值,然后再通过积分来获得分解结果。
经验模态分解的基本思想:将一个频率不规则的波化为多个单一频率的波+残波的形式。原波形 = ∑ IMFs + 余波。
    这种方法的本质是通过数据的特征时间尺度来获得本征波动模式,然后分解数据。这种分解过程可以形象地称之为“筛选(sifting)”过程。
分解过程是:找出原数据序列X(t)所有的极大值点并用三次样条插值函数拟合形成原数据的上包络线;同样,找出所有的极小值点,并将所有的极小值点通过三次样条插值函数拟合形成数据的下包络线,上包络线和下包络线的均值记作ml(其实,有学者将平均值改用中位值,可能更合理,因为是非平稳时间序列),将原数据序列X(t)减去该平均包络ml,得到一个新的数据序列hl,:
X(t)-ml=hl
由原数据减去包络平均后的新数据,若还存在负的局部极大值和正的局部极小值,说明这还不是一个本征模函数,需要继续进行“筛选”。如下图示意:EMD经验模态分解
EMD的Python代码实现如下:
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Tue Jan 10 15:28:19 2017
  4.  
  5. @author: admin
  6.  
  7. EMD算法,经验模态分解方法
  8. ismonotonic 判定当前的时间序列是否是单调序列
  9. findpeaks 寻找当前时间序列的极值点
  10. isImf 判断当前的序列是否为IMF序列
  11. getspline 获取当前样条曲线
  12. emd 经验模态分解方法
  13. """
  14. import numpy as np
  15.  
  16. from scipy.interpolate import interp1d
  17.  
  18.  
  19.  
  20. #判定当前的时间序列是否是单调序列
  21. def ismonotonic(x):
  22. max_peaks=findpeaks(x)
  23. min_peaks=findpeaks(-1*x)
  24. all_num=len(max_peaks)*len(min_peaks)
  25. if all_num>0:
  26. return False
  27. else:
  28. return True
  29. #寻找当前时间序列的极值点
  30. def findpeaks(x):
  31. df_index=np.nonzero(np.diff((np.diff(x)>0)+0)<0)
  32. u_data=np.nonzero((x[df_index[0]+1]>x[df_index[0]]))
  33. df_index[0][u_data[0]]+=1
  34. return df_index[0]
  35. #判断当前的序列是否为IMF序列
  36. def isImf(x):
  37. N=np.size(x)
  38. pass_zero=np.sum(x[0:N-2]*x[1:N-1]<0)
  39. peaks_num=np.size(findpeaks(x))+np.size(findpeaks(-x))
  40. if abs(pass_zero-peaks_num)>1:
  41. return False
  42. else:
  43. return True
  44. #获取当前样条曲线
  45. def getspline(x):
  46. N=np.size(x)
  47. peaks=findpeaks(x)
  48. print '当前极值点个数:',len(peaks)
  49. f=interp1d(np.concatenate(([0,1],peaks,[N+1])),np.concatenate(([0,1],x[peaks],[0])),kind='cubic')
  50. return f(np.linspace(1,N,N))
  51. #经验模态分解方法
  52. def emd(x):
  53. imf=[]
  54. while not ismonotonic(x):
  55. x1=x
  56. sd=np.inf
  57. while sd>0.1 or (not isImf(x1)):
  58. print isImf(x1)
  59. s1=getspline(x1)
  60. s2=-getspline(-1*x1)
  61. x2=x1-(s1+s2)/2
  62. sd=np.sum((x1-x2)**2)/np.sum(x1**2)
  63. x1=x2
  64. imf.append(x1)
  65. x=x-x1
  66. imf.append(x)
  67. return imf
  68.  
  69. if __name__ == '__main__':
  70. test=np.array([0.109017283,0.923722444,1.651182239,2.020828578,1.799564813,1.422650123,0.662718505,0.330908056,0.147316657,0.396244021,0.453235051,0.916266988,1.053167851,0.63681763,0.532051493,0.08994018,-0.717732329,-0.855063616,-0.680475165,0.071406017,0.913073764,1.855207585,2.682944133,2.667465224,2.479280179,1.992408687,1.348050833,0.994006146,0.822142278,0.591994742,0.886954149,1.260592311,1.230028317,1.217631396,0.644643686,-0.135081116,-0.711964767,-1.064944545,-0.777929926,-0.146634022,0.601942369,1.625442452,2.087659234,2.174841679,1.944062547,1.418676464,0.57214484,0.036795538,-0.000609289,-0.26336984,0.094634086,0.297793896,0.396835119,0.007259407,-0.858480906,-1.394269789,-1.85579278,-2.160075311,-1.824350703,-1.291997551,-0.538101879,0.267661313,0.699446876,1.217420847,0.781731188,0.036382748,-0.437728422,-1.00805078,-1.325132926,-1.159238528,-1.021807838,-0.824617407,-0.79444614,-0.886456075,-1.424007393,-1.955984975,-2.68713261,-2.773011756,-2.671641565,-1.684411326,-0.962753773,0.089646659,0.683509031,0.974626316,0.57909196,0.316738557,-0.261988737,-1.078689298,-1.06546717,-0.981400467,-0.572131872,-0.342081116,-0.090577818,-0.224030397,-0.706924146,-1.320851645,-1.916472444,-1.941698461,-1.716268291,-1.087495455,-0.005622723,0.938624738,1.683385158,2.046688054,1.845156075,1.439595372,0.658465234,0.197282301,0.108990311,0.395379929,0.71815339,0.90361103,0.988130991,0.718943517,0.474426139,-0.188698577,-0.812292702,-0.917224647,-0.816960237,0.075973199,0.93365717,2.02850965,2.385186217,2.84923888,2.551232478,2.008260359,1.432964394,0.969423566,0.511909795,0.821705124,0.830056202,1.101133254,1.200842308,1.09199242,0.374060592,-0.157511494,-0.727140266,-1.015692864,-0.798837593,-0.376662826,0.688543921,1.44398107,2.093600529,2.087501624,1.912169477,1.396776932,0.713375255,0.036906952,-0.423291188,-0.325659809,0.021862763,0.295402323,0.28425045,-0.106604795,-0.38752117,-1.301782234,-1.820414882,-2.227422449,-2.132089253,-1.364103799,-0.484017931,0.44159941,0.801395813,0.86830821,0.930058769,0.21739668,-0.59377128,-1.074263788,-1.348982832,-1.092444315,-0.891845989,-0.665540137,-0.594968238,-0.932225219,-1.26198678,-1.965360528,-2.56298185,-2.770659502,-2.531302519,-1.954089722,-0.876918807,0.106246548,0.881404745,0.934158755,0.612265788,0.211081193,-0.507947232,-0.932325305,-1.113714709,-0.99951518,-0.549967323,-0.368592797,-0.051758275,-0.204206489,-0.627646631,-1.311060114,-1.725636347,-1.767148474,-1.658875671,-0.977381775,0.177248256,0.708712405,1.618516084,2.190492579,1.740386247,1.252984145,0.608749079,0.363034806,-0.092511633,0.177119024,0.644482762,0.916047958,1.110210837,0.883652232,0.475328758,-0.319724597,-0.672705358,-1.040423538,-0.555686523,0.001917248,1.016588957,1.811638672,2.55399336,2.857595409,2.338898565,1.813261182,1.178062425,0.934934391,0.659534713,0.6195693,1.100961118,1.22232423,1.109416176,0.91643165,0.342533287,-0.095494363,-0.828440558,-1.148293964,-0.912005693,-0.343021309,0.673082205,1.48036216,2.05082745,2.227430421,1.911263804,1.214131671,0.666121988,-0.036771033,-0.345128535,-0.323386902,0.086955281,0.31408288,0.062055494,-0.060151388,-0.586766977,-1.370055457,-1.83086834,-2.160409852,-2.03587881,-1.488370129,-0.520083487,0.344308001,0.901225381,1.007126713,0.860427071,0.100294868,-0.466612601,-0.878705299,-1.287068192,-1.292928333,-0.756712711,-0.714507057,-0.574854071,-0.930436328,-1.332537049,-1.953298191,-2.536412336,-2.719579176,-2.400670348,-2.005796991,-0.930500161,-0.232093818,0.63685561,1.076818372,0.788627522,0.19029056,-0.441066144,-0.818181571,-0.94212841,-0.914718186,-0.426309126,-0.338644033,-0.318258323,-0.35855891,-0.751326219,-1.346293002,-1.872268772,-1.813731021,-1.825806728,-1.008774526,-0.096930157,0.912181974,1.59755862,1.995292294,1.683425842,1.226951085,0.741508777,0.392138023,-0.066970314,0.437033816,0.499947822,0.98096552,1.152774873,1.003317487,0.355506082,-0.188551511,-0.71075053,-0.944332939,-0.60684374,0.06883858,0.915825004,1.878621401,2.788487197,2.751431604,2.607898791,1.953746064,1.308510202,0.815496473,0.675471764,0.609660989,0.765761838,1.213866346,1.224456795,1.046346949,0.48951725,-0.1180711,-0.678253216,-1.163668713,-1.006752546,-0.209134924,0.618424395,1.338712995,2.144335655,2.189153994,1.919323153,1.336410932,0.687377732,0.197791543,-0.264135607,-0.389046089,0.10134643,0.123204129,0.362306059,-0.104290662,-0.462812978,-1.389614804,-2.018226227,-2.090158845,-2.156900602,-1.364570545,-0.54400289,0.245051502,0.820141412,1.236885947,0.730875022,0.171962686,-0.574929903,-1.099692438,-1.326460192,-1.037592207,-0.990098498,-0.75882144,-0.663838057,-0.778637544,-1.492871117,-1.93728779,-2.669997981,-2.765273027,-2.703818636,-1.811793161,-0.881770045,-0.101729215,0.665772292,0.900051065,0.810425434,0.203821811,-0.303296165,-0.882685263,-1.112648061,-0.919990368,-0.607717734,-0.16889155,-0.124096817,-0.367863657,-0.7468802,-1.190157527,-1.829022384,-2.013316502,-1.565775935,-0.949470017,-0.036270582,0.885709983,1.516190761,1.962792,1.755829909,1.34090882,0.585741158,0.41592322,0.167202804,0.100395912,0.693491215,0.857434468,1.078040532,0.892954388,0.319421869,-0.477122982,-0.640958313,-0.917970562,-0.693800602,0.07486551,0.882088444,1.932504512,2.536218765,2.653056324,2.620551492,2.047450897,1.486514578,0.760812914,0.529488564,0.721147496,1.017759832,1.291356399,1.268749244,0.994756982,0.546338771,0.005470246,-0.679870108,-1.022651188,-0.911746069,-0.209403194,0.539374804,1.456473605,2.098420262,2.278280095,1.965780113,1.446810422,0.797081644,-0.144424684,-0.415806448,-0.308241862,-0.199792708,0.180267733,0.204297954,-0.020299192,-0.583344961,-1.377633851,-1.98829777,-2.106512546,-2.058789968,-1.569749459,-0.586754507,0.279791461,0.813192112,1.097461001,0.79090674,0.169698694,-0.485460119,-0.97252802,-1.312240054,-1.314039416,-0.966614942,-0.676900117,-0.568073154,-0.853087532,-1.407034487,-1.940366437,-2.548221342,-2.67148577,-2.530109293,-1.86601462,-0.960242583,-0.125098067,0.541319563,0.787644763,0.872996827,0.170964107,-0.313200813,-0.836092516,-0.86189034,-0.82348505,-0.710481637,-0.289782451,-0.02931777,-0.254921212,-0.504876273,-1.313806027,-1.942718063,-1.903046494,-1.75535689,-0.954649301,0.107804587,0.990410642,1.694138856,1.92773298,1.772889412,1.298709907,0.451497622,0.323067287,0.217507125,0.127295246,0.435588416,0.978293378,0.897066111,0.703067936,0.486139599,-0.256411242,-0.570023542,-1.012993272,-0.695449963,0.05714376,1.005991431,1.91214884,2.54027472,2.729207716,2.478946813,2.048048118,1.322614728,0.892236734,0.727786572,0.464881713,1.13150453,1.145338706,1.399744137,1.173505408,0.334165851,-0.17328917,-0.421702534,-1.052567556,-0.805666406,-0.226289745,0.71457546,1.541680462,1.925950382,2.142002888,1.941288388,1.303176656,0.86545862,0.089206336,-0.194186259,-0.299745338,-0.130750262,0.29539201,0.218211651,0.019573489,-0.695108578,-1.219421588,-2.088314963,-2.029184457,-1.935945376,-1.421613558,-0.703895405,0.219624687,0.879724094,1.151883827,0.664974365,0.320497681,-0.204244358,-1.067880917,-1.221221764,-1.274274433,-1.122752241,-0.542762993,-0.54960226,-0.901144878,-1.349959254,-2.022980715,-2.683041781,-3.040421826,-2.52587578,-1.911632003,-1.008721106,-0.117571075,0.452291165,0.831593769,0.710657431,0.084801918,-0.362192605,-0.898287957,-1.057963805,-1.059102842,-0.664226196,-0.216044783,-0.197475685,-0.267576057,-0.533605417,-1.229490352,-1.683794982,-1.711421829,-1.546635492,-0.919818724,0.195124872,0.86912713,1.595959783,2.149283983,1.832965974,1.304806576,0.777212547,0.257325356,0.089283895,0.218378723,0.532385959,0.821819455,1.041833552,0.813539672,0.551427509,-0.167430333,-0.592376188,-0.897749884,-0.642169826,0.158798914,1.097909916,1.868679493,2.690376834,2.799761068,2.573721519,2.219200072,1.514866503,0.940801201,0.659241945,0.635976703,0.939534967,1.390744749,1.065947651,0.954648456,0.462176339,-0.176155501,-0.94671653,-0.978198128,-0.781321477,-0.353391749,0.561856557,1.311274558,2.183050409,2.223204043,1.881877142,1.216471404,0.621827184,0.213769777,-0.21041209,-0.1806488,-0.120037556,0.232590606,0.315554207,-0.183485333,-0.499133249,-1.062473036,-2.062758043,-2.392517584,-2.027855309,-1.356717898,-0.595951667,0.243530928,0.854944466,0.924644103,0.603937018,0.349137988,-0.451795247,-1.13710706,-1.160504643,-1.338281904,-0.963233539,-0.615737749,-0.703087749,-0.88502226,-1.358334797,-1.804762654,-2.490966144,-2.792119405,-2.543667484,-1.893413702,-0.82038406,-0.061411753,0.554843667,0.907828719,0.685049245,0.270306473,-0.311298026,-0.762297867,-0.983101498,-0.852937231,-0.39745762,-0.373061091,-0.153213336,-0.453246235,-0.639457211,-1.306863873,-1.817465689,-2.11955641,-1.645831815,-0.985565996,-0.135478895,0.843848566,1.587976366,1.922424867,1.622655347,1.290817933,0.79296454,0.246072343,0.048678883,0.28747078,0.697893244,0.871531451,1.001147145,0.727426085,0.309470368,-0.130393546,-0.705879296,-0.807310676,-0.567024971,0.070552608,1.027721798,2.017732592,2.578811439,2.794785514,2.5325754,1.875773699,1.310802825,0.88266031,0.507873649,0.736633336,0.983317804,1.218546888,1.298241775,1.020728566,0.478851188,-0.191858799,-0.675383013,-1.040148114,-1.118409241,-0.307993256,0.607382214,1.528601262,2.158627881,2.091706438,1.983053132,1.332809039,0.591123805,0.047815713,-0.240747141,-0.201941826,0.023758618,0.148822866,0.133438029,0.051234872,-0.633936803,-1.167563409,-1.999384987,-2.245266884,-1.878467898,-1.291868277,-0.690685328,0.28002948,0.988405793,1.164376541,0.639839055,0.352820595,-0.414892285,-0.995611558,-1.29065593,-1.305144088,-0.94155473,-0.715488153,-0.388002846,-0.831069207,-1.378638392,-2.001402882,-2.598142328,-2.545008218,-2.457426611,-1.857896015,-0.838729797,-0.036287033,0.624239946,0.828104841,0.632963942,0.351438327,-0.330392435,-0.862314802,-0.877382456,-0.913828862,-0.55878097,-0.399048458,-0.070955054,-0.428471673,-0.830223816,-1.214079042,-1.752409258,-2.034682983,-1.703987719,-0.933949178,0.022002545,0.788448708,1.543599478,1.77016346,1.780282492,1.13690551,0.80158394,0.18319297,0.007839728,0.436114527,0.804023668,0.834264496,1.044113411,1.067308549,0.353215342,-0.019232626,-0.612533015,-0.878214747,-0.66932725,0.202289168,1.022161557,1.802109014,2.560401658,2.664392055,2.55176304,2.15318781,1.414482769,0.774108468,0.653814401,0.620034633,1.152987994,1.02917479,1.202147561,1.095491536,0.399022552,-0.189194187,-0.702875003,-0.905335007,-0.947002662,-0.276366024,0.540618004,1.421205693,2.057544132,2.123991274,1.986977834,1.3516866,0.564728076,0.072936971,-0.139515321,-0.116666995,0.066820912,0.209477896,0.175928167,-0.022931366,-0.658574771,-1.342225682,-1.814484841,-2.04115025,-1.961012232,-1.227301986,-0.740710286,0.261647014,0.863823144,1.192557517,0.818455843,0.158598985,-0.425635,-0.954101856,-1.249835805,-1.411292381,-0.848748422,-1.038969085,-0.608067023,-1.005208327,-1.396809084,-1.860144252,-2.588215993,-2.560470248,-2.443287963,-1.890030919,-1.041409682,-0.082564465,0.671464195,0.646713621,0.756020044,0.218929504,-0.32535547,-0.666257495,-1.080192805,-1.014246477,-0.469821835,-0.167600262,-0.132775472,-0.343086823,-0.706504097,-1.421995229,-1.780922194,-2.011247285,-1.746105767,-0.862797414,0.003034901,1.094702419,1.555537576,1.971481329,1.682913528,1.370888759,0.861899237,0.386088878,-0.093055835,0.325231424,0.58865618,0.94961958,0.993077094,0.705909715,0.496521307,-0.241688561,-0.727492958,-0.866931451,-0.380340713,0.262336905,0.819190425,1.817971934,2.619867219,2.544885569,2.661271109,1.968476042,1.501227392,0.76208704,0.526768741,0.921255193,1.009857837,1.17756798,1.164801902,1.128681275,0.515267555,-0.417382328,-0.858657107,-0.734101988,-0.855471292,-0.459332164,0.498983721,1.390638802,2.090053278,2.169577533,1.917123985,1.307231148,0.515928442,0.162622357,-0.274465299,-0.262318803,0.019498957,0.209283088,0.185785017,-0.032631817,-0.400659304,-1.254888885,-1.972474849,-2.272805675,-2.044485232,-1.590227774,-0.405210129,0.279805005,0.737955083,1.043165865,0.623976688,0.24921761,-0.499203208,-1.014145224,-1.231914122,-1.123173282,-1.032033718,-0.83651997,-0.62940561,-0.932366519,-1.318799851,-2.185468437,-2.451010988,-2.721548847,-2.632285195,-1.89710948,-0.867270251,0.209672292,0.598905772,1.021963015,0.608448297,0.211672053,-0.427991703,-0.836982446,-1.097629584,-1.058331714,-0.614862668,-0.213092226,-0.169096787,-0.302174593,-0.691195916,-1.25509417,-1.860890978,-1.974292024,-1.577115159,-0.926516714,-0.134789668])
  71. Ts = 0.001;
  72. #t=np.linspace(0,1,1000)
  73. #test =np.sin(2*np.pi*10*t) + np.sin(2*np.pi*50*t) + np.sin(2*np.pi*100*t) + 0.1*np.random.random(len(t))
  74. test_imf=emd(test)
  75. print test_imf
  76.  
  77.  

1 0