In [9]:
%matplotlib inline
In [1]:
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import hilbert, chirp
In [2]:
duration = 1.0
fs = 400.0
samples = int(fs*duration)
t = np.arange(samples) / fs
In [3]:
signal = chirp(t, 20.0, t[-1], 100.0)
signal *= (1.0 + 0.5 * np.sin(2.0*np.pi*3.0*t) )
In [4]:
t
Out[4]:
array([ 0. , 0.0025, 0.005 , 0.0075, 0.01 , 0.0125, 0.015 ,
0.0175, 0.02 , 0.0225, 0.025 , 0.0275, 0.03 , 0.0325,
0.035 , 0.0375, 0.04 , 0.0425, 0.045 , 0.0475, 0.05 ,
0.0525, 0.055 , 0.0575, 0.06 , 0.0625, 0.065 , 0.0675,
0.07 , 0.0725, 0.075 , 0.0775, 0.08 , 0.0825, 0.085 ,
0.0875, 0.09 , 0.0925, 0.095 , 0.0975, 0.1 , 0.1025,
0.105 , 0.1075, 0.11 , 0.1125, 0.115 , 0.1175, 0.12 ,
0.1225, 0.125 , 0.1275, 0.13 , 0.1325, 0.135 , 0.1375,
0.14 , 0.1425, 0.145 , 0.1475, 0.15 , 0.1525, 0.155 ,
0.1575, 0.16 , 0.1625, 0.165 , 0.1675, 0.17 , 0.1725,
0.175 , 0.1775, 0.18 , 0.1825, 0.185 , 0.1875, 0.19 ,
0.1925, 0.195 , 0.1975, 0.2 , 0.2025, 0.205 , 0.2075,
0.21 , 0.2125, 0.215 , 0.2175, 0.22 , 0.2225, 0.225 ,
0.2275, 0.23 , 0.2325, 0.235 , 0.2375, 0.24 , 0.2425,
0.245 , 0.2475, 0.25 , 0.2525, 0.255 , 0.2575, 0.26 ,
0.2625, 0.265 , 0.2675, 0.27 , 0.2725, 0.275 , 0.2775,
0.28 , 0.2825, 0.285 , 0.2875, 0.29 , 0.2925, 0.295 ,
0.2975, 0.3 , 0.3025, 0.305 , 0.3075, 0.31 , 0.3125,
0.315 , 0.3175, 0.32 , 0.3225, 0.325 , 0.3275, 0.33 ,
0.3325, 0.335 , 0.3375, 0.34 , 0.3425, 0.345 , 0.3475,
0.35 , 0.3525, 0.355 , 0.3575, 0.36 , 0.3625, 0.365 ,
0.3675, 0.37 , 0.3725, 0.375 , 0.3775, 0.38 , 0.3825,
0.385 , 0.3875, 0.39 , 0.3925, 0.395 , 0.3975, 0.4 ,
0.4025, 0.405 , 0.4075, 0.41 , 0.4125, 0.415 , 0.4175,
0.42 , 0.4225, 0.425 , 0.4275, 0.43 , 0.4325, 0.435 ,
0.4375, 0.44 , 0.4425, 0.445 , 0.4475, 0.45 , 0.4525,
0.455 , 0.4575, 0.46 , 0.4625, 0.465 , 0.4675, 0.47 ,
0.4725, 0.475 , 0.4775, 0.48 , 0.4825, 0.485 , 0.4875,
0.49 , 0.4925, 0.495 , 0.4975, 0.5 , 0.5025, 0.505 ,
0.5075, 0.51 , 0.5125, 0.515 , 0.5175, 0.52 , 0.5225,
0.525 , 0.5275, 0.53 , 0.5325, 0.535 , 0.5375, 0.54 ,
0.5425, 0.545 , 0.5475, 0.55 , 0.5525, 0.555 , 0.5575,
0.56 , 0.5625, 0.565 , 0.5675, 0.57 , 0.5725, 0.575 ,
0.5775, 0.58 , 0.5825, 0.585 , 0.5875, 0.59 , 0.5925,
0.595 , 0.5975, 0.6 , 0.6025, 0.605 , 0.6075, 0.61 ,
0.6125, 0.615 , 0.6175, 0.62 , 0.6225, 0.625 , 0.6275,
0.63 , 0.6325, 0.635 , 0.6375, 0.64 , 0.6425, 0.645 ,
0.6475, 0.65 , 0.6525, 0.655 , 0.6575, 0.66 , 0.6625,
0.665 , 0.6675, 0.67 , 0.6725, 0.675 , 0.6775, 0.68 ,
0.6825, 0.685 , 0.6875, 0.69 , 0.6925, 0.695 , 0.6975,
0.7 , 0.7025, 0.705 , 0.7075, 0.71 , 0.7125, 0.715 ,
0.7175, 0.72 , 0.7225, 0.725 , 0.7275, 0.73 , 0.7325,
0.735 , 0.7375, 0.74 , 0.7425, 0.745 , 0.7475, 0.75 ,
0.7525, 0.755 , 0.7575, 0.76 , 0.7625, 0.765 , 0.7675,
0.77 , 0.7725, 0.775 , 0.7775, 0.78 , 0.7825, 0.785 ,
0.7875, 0.79 , 0.7925, 0.795 , 0.7975, 0.8 , 0.8025,
0.805 , 0.8075, 0.81 , 0.8125, 0.815 , 0.8175, 0.82 ,
0.8225, 0.825 , 0.8275, 0.83 , 0.8325, 0.835 , 0.8375,
0.84 , 0.8425, 0.845 , 0.8475, 0.85 , 0.8525, 0.855 ,
0.8575, 0.86 , 0.8625, 0.865 , 0.8675, 0.87 , 0.8725,
0.875 , 0.8775, 0.88 , 0.8825, 0.885 , 0.8875, 0.89 ,
0.8925, 0.895 , 0.8975, 0.9 , 0.9025, 0.905 , 0.9075,
0.91 , 0.9125, 0.915 , 0.9175, 0.92 , 0.9225, 0.925 ,
0.9275, 0.93 , 0.9325, 0.935 , 0.9375, 0.94 , 0.9425,
0.945 , 0.9475, 0.95 , 0.9525, 0.955 , 0.9575, 0.96 ,
0.9625, 0.965 , 0.9675, 0.97 , 0.9725, 0.975 , 0.9775,
0.98 , 0.9825, 0.985 , 0.9875, 0.99 , 0.9925, 0.995 ,
0.9975])
In [5]:
signal
Out[5]:
array([ 1. , 0.97295768, 0.84319119, 0.61685866, 0.31165687,
-0.04395215, -0.41296169, -0.75341365, -1.02308934, -1.18482474,
-1.21181324, -1.09216072, -0.8319516 , -0.45619014, -0.00720057,
0.4596103 , 0.88233759, 1.20081779, 1.3654765 , 1.34549858,
1.13496981, 0.75578765, 0.25651065, -0.29311808, -0.81154718,
-1.21755327, -1.44338742, -1.4467994 , -1.21975789, -0.79202444,
-0.22845951, 0.3800417 , 0.93092382, 1.3274956 , 1.49662849,
1.40332339, 1.05912096, 0.52224498, -0.11119527, -0.72389097,
-1.19916674, -1.44392832, -1.40812138, -1.09644886, -0.56939238,
0.06735714, 0.6835126 , 1.15098705, 1.37136758, 1.2980269 ,
0.94764065, 0.39796245, -0.22831021, -0.79050215, -1.16193996,
-1.25959787, -1.06422567, -0.62572152, -0.05188822, 0.51723521,
0.94354044, 1.12516413, 1.02220911, 0.66701323, 0.15589971,
-0.3758618 , -0.78960292, -0.9799924 , -0.90303487, -0.58753361,
-0.12661014, 0.34861528, 0.70598039, 0.84948553, 0.74608776,
0.43426801, 0.0117747 , -0.39393391, -0.66382673, -0.72261897,
-0.56061544, -0.23543637, 0.14688711, 0.46557988, 0.62304685,
0.57515202, 0.3442982 , 0.01116593, -0.31222775, -0.51945958,
-0.54462593, -0.38381496, -0.09596242, 0.21736088, 0.44668664,
0.51237831, 0.39253988, 0.13127656, -0.17609685, -0.41644249,
-0.49961258, -0.39233068, -0.13246485, 0.18264084, 0.43096755,
0.5120601 , 0.38769261, 0.10061608, -0.23785403, -0.48908681,
-0.54291824, -0.36611086, -0.02228794, 0.34808948, 0.58312282,
0.56953627, 0.29761993, -0.12550753, -0.51499864, -0.68736823,
-0.54681901, -0.1385232 , 0.36047398, 0.71526339, 0.74283794,
0.40708304, -0.15024499, -0.66520822, -0.87497657, -0.65243449,
-0.0833508 , 0.56034044, 0.94775435, 0.85922394, 0.31234865,
-0.42866441, -0.97682232, -1.02403152, -0.51630325, 0.29769881,
0.9835482 , 1.15197714, 0.68218135, -0.19131964, -0.9899293 ,
-1.25186828, -0.80186684, 0.12878 , 1.01462748, 1.33121979,
0.86868592, -0.12493758, -1.06999571, -1.3919417 , -0.87434925,
0.19034667, 1.15948404, 1.42713189, 0.80752172, -0.32997794,
-1.27493061, -1.41948571, -0.65508458, 0.53981748, 1.39392768,
1.34229195, 0.40695164, -0.8015122 , -1.47856878, -1.16448416,
-0.06467095, 1.07668347, 1.47810491, 0.86113731, -0.34748769,
-1.30442195, -1.33866047, -0.42933972, 0.77288625, 1.40708394,
1.02202397, -0.09406445, -1.12128484, -1.3092287 , -0.53143174,
0.6213062 , 1.2843419 , 0.97024817, -0.064862 , -1.0214222 ,
-1.17248329, -0.42189452, 0.62877458, 1.15719864, 0.76646333,
-0.20977116, -0.98388182, -0.94894937, -0.16013014, 0.7240463 ,
0.98762668, 0.44021217, -0.440964 , -0.92073919, -0.62009925,
0.17956005, 0.7909912 , 0.71011593, 0.03532327, -0.63550033,
-0.73112122, -0.19556003, 0.48123389, 0.70649305, 0.30435793,
-0.34452113, -0.65713203, -0.37099464, 0.23289119, 0.59919868,
0.40675247, -0.14777806, -0.54379047, -0.42231962, 0.08715152,
0.49770863, 0.42645359, -0.0476198 , -0.46463723, -0.42551337,
0.02589315, 0.4462904 , 0.42346137, -0.01968151, -0.44328393,
-0.42202044, 0.02815725, 0.45562078, 0.42078444, -0.05208918,
-0.48275189, -0.41719483, 0.09368523, 0.52320882, 0.40640547,
-0.15610029, -0.57383546, -0.3811696 , 0.24249939, 0.6287065 ,
0.33199884, -0.3545468 , -0.67793805, -0.24795075, 0.49025938,
0.70678187, 0.11845784, -0.64136145, -0.69562748, 0.06346151,
0.79063905, 0.62173594, -0.2965713 , -0.91029102, -0.46354424,
0.56595001, 0.96278542, 0.20799188, -0.83821837, -0.90597515,
0.13968341, 1.0600715 , 0.70378266, -0.54592126, -1.16343523,
-0.34217985, 0.94289271, 1.08011246, -0.15272421, -1.23250044,
-0.76628883, 0.70141685, 1.30577299, 0.23232795, -1.17244053,
-1.07908614, 0.43319147, 1.40802629, 0.54035674, -1.06135843,
-1.27665967, 0.21242653, 1.43793743, 0.74153781, -0.96592275,
-1.37913261, 0.08331603, 1.44207133, 0.82905578, -0.92841318,
-1.40682657, 0.0660929 , 1.44628649, 0.80285557, -0.96417287,
-1.36566684, 0.16398662, 1.44916273, 0.66144591, -1.06163147,
-1.24321938, 0.36413287, 1.42191005, 0.40471766, -1.18153799,
-1.01544834, 0.63139837, 1.31509848, 0.04713727, -1.25819971,
-0.66451095, 0.90015065, 1.0759272 , -0.36371754, -1.21060301,
-0.20533452, 1.07490504, 0.67857786, -0.73507216, -0.97152127,
0.28929978, 1.05321928, 0.16094471, -0.94105457, -0.53315705,
0.68602068, 0.77612032, -0.35460101, -0.87232481, 0.0123023 ,
0.83283854, 0.28805963, -0.68798323, -0.51228655, 0.47703459,
0.645514 , -0.23932608, -0.6892222 , 0.00804616, 0.65631482,
0.19297389, -0.56582475, -0.34988786, 0.43833624, 0.45764768,
-0.29268753, -0.51784282, 0.14407184, 0.53628242, -0.00335276,
-0.52081812, -0.12274156, 0.47967395, 0.2309092 , -0.42035834,
-0.3203634 , 0.34910265, 0.39194398, -0.27070297, -0.44738173,
0.18862353, 0.48876727, -0.10523509, -0.51822016, 0.02209234,
0.53772253, 0.05981046, -0.54906938, -0.13983565, 0.55388907,
0.21755748, -0.5536965 , -0.2926693 , 0.54995246, 0.36492867,
-0.54411382, -0.43412476, 0.53766725, 0.50005422, -0.53214506,
-0.56249527, 0.5291244 , 0.62117348, -0.5302119 , -0.67571628,
0.53701522, 0.72559632, -0.55110148, -0.77006638, 0.57394101])
In [6]:
#The amplitude envelope is given by magnitude of the analytic signal.
#The instantaneous frequency can be obtained by differentiating the instantaneous phase in respect to time.
#The instantaneous phase corresponds to the phase angle of the analytic signal.
analytic_signal = hilbert(signal)
amplitude_envelope = np.abs(analytic_signal)
instantaneous_phase = np.unwrap(np.angle(analytic_signal))
instantaneous_frequency = np.diff(instantaneous_phase) / (2.0*np.pi) * fs
In [7]:
instantaneous_phase
Out[7]:
array([ -2.89494825e-01, 1.28919690e-01, 5.61820659e-01,
9.05157987e-01, 1.27027577e+00, 1.61206530e+00,
1.94923360e+00, 2.29522710e+00, 2.62413810e+00,
2.97384309e+00, 3.30574747e+00, 3.65802551e+00,
3.99926963e+00, 4.35367914e+00, 4.70688983e+00,
5.06411416e+00, 5.42891030e+00, 5.79064607e+00,
6.16461907e+00, 6.53298584e+00, 6.91308349e+00,
7.28977721e+00, 7.67373277e+00, 8.05933435e+00,
8.44656649e+00, 8.84037443e+00, 9.23198297e+00,
9.63245701e+00, 1.00303979e+01, 1.04359840e+01,
1.08419055e+01, 1.12518347e+01, 1.16661912e+01,
1.20808502e+01, 1.25027525e+01, 1.29234113e+01,
1.33512749e+01, 1.37792976e+01, 1.42118930e+01,
1.46478900e+01, 1.50851318e+01, 1.55285884e+01,
1.59715449e+01, 1.64211861e+01, 1.68712886e+01,
1.73259638e+01, 1.77839564e+01, 1.82434603e+01,
1.87088492e+01, 1.91740799e+01, 1.96455217e+01,
2.01178087e+01, 2.05941794e+01, 2.10742429e+01,
2.15555646e+01, 2.20429160e+01, 2.25303652e+01,
2.30236756e+01, 2.35185928e+01, 2.40168038e+01,
2.45194943e+01, 2.50227737e+01, 2.55321789e+01,
2.60418345e+01, 2.65564670e+01, 2.70737814e+01,
2.75931451e+01, 2.81181352e+01, 2.86432859e+01,
2.91745966e+01, 2.97071733e+01, 3.02433504e+01,
3.07838933e+01, 3.13249005e+01, 3.18721780e+01,
3.24195609e+01, 3.29717826e+01, 3.35271038e+01,
3.40838914e+01, 3.46469726e+01, 3.52099254e+01,
3.57788910e+01, 3.63498800e+01, 3.69232071e+01,
3.75021326e+01, 3.80805285e+01, 3.86652740e+01,
3.92510020e+01, 3.98399274e+01, 4.04340907e+01,
4.10281585e+01, 4.16292071e+01, 4.22309154e+01,
4.28364759e+01, 4.34466451e+01, 4.40566114e+01,
4.46732132e+01, 4.52899885e+01, 4.59108172e+01,
4.65361161e+01, 4.71617911e+01, 4.77942940e+01,
4.84273949e+01, 4.90645907e+01, 4.97060240e+01,
5.03477402e+01, 5.09955386e+01, 5.16440857e+01,
5.22963539e+01, 5.29531009e+01, 5.36106913e+01,
5.42741934e+01, 5.49392503e+01, 5.56075706e+01,
5.62803124e+01, 5.69538786e+01, 5.76324957e+01,
5.83132116e+01, 5.89967595e+01, 5.96850164e+01,
6.03747011e+01, 6.10689869e+01, 6.17660818e+01,
6.24655104e+01, 6.31694188e+01, 6.38750043e+01,
6.45844314e+01, 6.52972566e+01, 6.60123135e+01,
6.67318184e+01, 6.74536537e+01, 6.81787530e+01,
6.89075780e+01, 6.96384902e+01, 7.03733656e+01,
7.11110789e+01, 7.18516110e+01, 7.25961300e+01,
7.33430525e+01, 7.40935190e+01, 7.48473074e+01,
7.56035899e+01, 7.63636810e+01, 7.71265143e+01,
7.78924152e+01, 7.86619863e+01, 7.94341323e+01,
8.02098085e+01, 8.09886741e+01, 8.17702606e+01,
8.25554974e+01, 8.33435506e+01, 8.41347220e+01,
8.49294113e+01, 8.57268110e+01, 8.65276351e+01,
8.73316538e+01, 8.81384919e+01, 8.89488651e+01,
8.97621772e+01, 9.05785650e+01, 9.13984055e+01,
9.22210595e+01, 9.30470058e+01, 9.38762128e+01,
9.47082906e+01, 9.55438023e+01, 9.63823894e+01,
9.72239737e+01, 9.80689561e+01, 9.89168617e+01,
9.97679255e+01, 1.00622329e+02, 1.01479675e+02,
1.02340329e+02, 1.03204178e+02, 1.04070959e+02,
1.04941040e+02, 1.05814192e+02, 1.06690413e+02,
1.07570009e+02, 1.08452669e+02, 1.09338472e+02,
1.10227509e+02, 1.11119488e+02, 1.12014644e+02,
1.12913034e+02, 1.13814522e+02, 1.14719314e+02,
1.15627263e+02, 1.16538214e+02, 1.17452313e+02,
1.18369485e+02, 1.19289815e+02, 1.20213469e+02,
1.21140317e+02, 1.22070299e+02, 1.23003351e+02,
1.23939400e+02, 1.24878569e+02, 1.25820983e+02,
1.26766717e+02, 1.27715689e+02, 1.28667719e+02,
1.29622762e+02, 1.30580765e+02, 1.31541915e+02,
1.32506505e+02, 1.33474368e+02, 1.34445411e+02,
1.35419531e+02, 1.36396372e+02, 1.37376296e+02,
1.38359700e+02, 1.39346356e+02, 1.40336444e+02,
1.41329675e+02, 1.42325366e+02, 1.43324122e+02,
1.44326302e+02, 1.45331684e+02, 1.46340837e+02,
1.47353180e+02, 1.48367729e+02, 1.49385364e+02,
1.50406305e+02, 1.51430394e+02, 1.52458619e+02,
1.53490047e+02, 1.54523442e+02, 1.55559967e+02,
1.56599699e+02, 1.57642540e+02, 1.58689817e+02,
1.59740283e+02, 1.60792487e+02, 1.61847864e+02,
1.62906481e+02, 1.63968183e+02, 1.65034448e+02,
1.66103884e+02, 1.67174849e+02, 1.68249020e+02,
1.69326655e+02, 1.70407361e+02, 1.71492508e+02,
1.72580822e+02, 1.73670530e+02, 1.74763452e+02,
1.75860235e+02, 1.76960082e+02, 1.78063974e+02,
1.79171048e+02, 1.80279540e+02, 1.81391228e+02,
1.82507243e+02, 1.83626325e+02, 1.84748809e+02,
1.85874494e+02, 1.87001895e+02, 1.88132458e+02,
1.89267699e+02, 1.90406029e+02, 1.91546965e+02,
1.92691112e+02, 1.93837634e+02, 1.94987282e+02,
1.96141605e+02, 1.97299055e+02, 1.98458397e+02,
1.99620933e+02, 2.00786822e+02, 2.01955824e+02,
2.03128921e+02, 2.04305178e+02, 2.05483085e+02,
2.06664153e+02, 2.07849541e+02, 2.09038059e+02,
2.10229542e+02, 2.11424188e+02, 2.12621092e+02,
2.13821138e+02, 2.15025822e+02, 2.16233661e+02,
2.17443336e+02, 2.18656150e+02, 2.19872590e+02,
2.21092196e+02, 2.22315551e+02, 2.23542044e+02,
2.24770278e+02, 2.26001650e+02, 2.27237767e+02,
2.28477073e+02, 2.29718447e+02, 2.30962909e+02,
2.32210609e+02, 2.33461518e+02, 2.34716558e+02,
2.35974718e+02, 2.37234322e+02, 2.38497046e+02,
2.39764732e+02, 2.41035662e+02, 2.42308488e+02,
2.43584324e+02, 2.44863518e+02, 2.46146005e+02,
2.47432622e+02, 2.48722294e+02, 2.50013183e+02,
2.51307213e+02, 2.52606747e+02, 2.53909564e+02,
2.55213436e+02, 2.56520211e+02, 2.57831326e+02,
2.59145908e+02, 2.60463774e+02, 2.61784483e+02,
2.63106772e+02, 2.64432408e+02, 2.65763973e+02,
2.67098672e+02, 2.68433074e+02, 2.69770397e+02,
2.71114264e+02, 2.72461768e+02, 2.73809832e+02,
2.75160362e+02, 2.76515137e+02, 2.77873859e+02,
2.79236565e+02, 2.80601654e+02, 2.81966987e+02,
2.83336020e+02, 2.84713022e+02, 2.86092975e+02,
2.87469881e+02, 2.88849613e+02, 2.90239321e+02,
2.91633121e+02, 2.93023530e+02, 2.94415539e+02,
2.95815887e+02, 2.97221562e+02, 2.98627427e+02,
3.00033843e+02, 3.01443264e+02, 3.02858669e+02,
3.04281053e+02, 3.05703748e+02, 3.07121906e+02,
3.08545563e+02, 3.09984057e+02, 3.11423974e+02,
3.12852010e+02, 3.14283686e+02, 3.15736388e+02,
3.17193174e+02, 3.18633451e+02, 3.20074242e+02,
3.21538324e+02, 3.23010401e+02, 3.24465833e+02,
3.25917757e+02, 3.27390357e+02, 3.28875431e+02,
3.30348657e+02, 3.31813973e+02, 3.33292971e+02,
3.34788740e+02, 3.36281556e+02, 3.37762170e+02,
3.39246411e+02, 3.40751087e+02, 3.42264458e+02,
3.43761696e+02, 3.45250572e+02, 3.46762932e+02,
3.48297655e+02, 3.49812462e+02, 3.51304984e+02,
3.52823890e+02, 3.54381877e+02, 3.55915416e+02,
3.57408654e+02, 3.58931921e+02, 3.60518789e+02,
3.62073741e+02, 3.63559170e+02, 3.65080179e+02,
3.66713639e+02, 3.68298470e+02, 3.69747833e+02,
3.71235511e+02, 3.72997497e+02, 3.74653897e+02,
3.75903615e+02])
In [12]:
fig = plt.figure()
ax0 = fig.add_subplot(211)
ax0.plot(t, signal, label='signal')
ax0.plot(t, amplitude_envelope, label='envelope')
ax0.set_xlabel("time in seconds")
ax0.legend()
ax1 = fig.add_subplot(212)
ax1.plot(t[1:], instantaneous_frequency)
ax1.set_xlabel("time in seconds")
ax1.set_ylim(0.0, 120.0)
Out[12]:
(0.0, 120.0)
In [17]:
fig2 = plt.figure()
ax2 = fig2.add_subplot(211)
ax2.plot(t, instantaneous_phase, label='phase')
ax2.plot(t, signal, label='envelope')
ax2.set_xlabel("time in seconds")
#ax2.legend()
Out[17]:
<matplotlib.text.Text at 0x957e048>
In [ ]:
Content source: lalonica/PhD
Similar notebooks: