# PIWavelet

Python Interface for Wavelet Analysis

# PIWavelet

Python programming Interface for Wavelet Analysis

DISCLAIMER
This module is a Python programming interface for the the matlab package for wavelet, cross-wavelet and coherence-wavelet analysis provided by Aslak Grinsted, John C. Moore and Svetlana Jevrejeva.
http://noc.ac.uk/using-science/crosswavelet-wavelet-coherence
This software may be used, copied, or redistributed as long as it is not sold and this copyright notice is reproduced on each copy made. This routine is provided as is without any express or implied warranties whatsoever.

Part of the code are originally from the project of kPyWavelet

TO RUN:

It is necessary to have gnuoctave installed in your machine Gnu Octave: http://www.gnu.org/software/octave/ (sudo apt-get install octave)

### INSTALL:

							
$python setup.py install   ### OBSERVATION: Octave supports most but not all of the core syntax and commands of MatLab. The main noticable differences are nested functions are not allowed, and GUIs (including uigetfile, etc.) are not supported. ### AUTHORS Eduardo S. Pereira. Email: pereira.somoza@gmail.com Regla D. Somoza. Email: duthit@gmail.com # Usage ### Initialization Initialization of the piwavelet class  >> import numpy as np >> from piwavelet import piwavelet   ### Wavelet Coherence Analysis: Given tow signal, with zero mean, to start the wavelet coherence analysis, it is necessary to call the wcoherence (Wavelet Coherence) class:  >> mycoherence = piwavelet.wcoherence(x,y) >> Rsq,period,scale,coi,sig95=mycoherence()   The returned values are:  Rsq Coherence Wavelet period a vector of "Fourier" periods associated with Wxy scale a vector of wavelet scales associated with Wxy coi the cone of influence sig95 Significance Plot wavelet coherence of the signals x,y.  >> mycoherence = piwavelet.wcoherence(x,y) >> mycoherence.plot(t = time, title='My Title',units='year')   Parameters :  Key Mean title (string) Title of the Plot t array with time units: (string) Units of the period and time (e.g. 'days') Optional parameters  Key Default Mean gray (boolean) True for gray map False levels List with significance level that will be showed in the plot [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0] labels List with the Label of significance level that will be apper into the color bar. If not defined, the levels list is used instead None pArrow (boolean) True for draw vector of phase angle (it has problem not recomended for large sample of data) False pSigma (boolean) True for draw the significance contour lines True nameSave (string) path plus name to save the figure, if it is define, the plot is saved but not showed None scale (boolean) True for not log2 scale of the Plot False ### Example Consider tow stochastic signals, as presented in the following image: The signal must be standardized with zero means. e.g. :$y_{i,std} = (y_{i}-\bar{y})/\sigma$where$y_{i}$is the$i$-th data values,$\bar{y}$is the mean value and$\sigma$is the standard deviation of the$y\$ series.

The code bellow shows the coherence analysis for these signal


>>> import numpy as np
>>> from piwavelet import piwavelet
>>> y1 = np.random.rand(100) #Generation of the Random Signal 1
>>> y2 = np.random.rand(100) #Generation of the Random Signal 2
>>> x = np.arange(0,100,1) # Time step
>>> y1 = (y1-y1.mean())/y1.std() #Normalization of the Signal 1
>>> y2 = (y2-y2.mean())/y2.std() #Normalization of the Signal 2
>>> myCoherence = piwavelet.wcoherence(y1,y2) #Wavelet Coherence Analysis
>>> myCoherence.plot(t = x, title='Test',units='sec') # Plot of the Coherence Map
>>> Rsq,period,scale,coi,sig95=myCoherence() # If you want to know the individual properties.




The method plot generate the coherence map of the signal. The Figure 2 shows the result obtained from myCoherence.plot().

### Wavelet Cross Power Spectrum Analysis:

Given tow signal, with zero mean, to start the cross wavelet analysis, it is necessary to call the wcross (Wavelet Cross Spectrum) class:


>> myXSpec = piwavelet.wcross(x,y)
>> xwt,period, scale, coi, sig95=myXSpec()



 xwt cross Wavelet period a vector of "Fourier" periods associated with Wxy scale a vector of wavelet scales associated with Wxy coi the cone of influence sig95 Significance

Plot wavelet coherence of the signals x,y.


>> myXSpec = piwavelet.wcross(x,y)
>> myXSpec.plot(t = time, title='My Title',units='year')



Parameters :

 Key Mean title (string) Title of the Plot t array with time units: (string) Units of the period and time (e.g. 'days')

Optional parameters

 Key Default Mean gray (boolean) True for gray map False levels List with significance level that will be showed in the plot [0.125, 0.25, 0.5, 1, 2, 4, 8] labels List with the Label of significance level that will be apper into the color bar. If not defined, the levels list is used instead ['1/8', '1/4', '1/2', '1', '2', '4', '8'] pArrow (boolean) True for draw vector of phase angle (it has problem not recomended for large sample of data) False pSigma (boolean) True for draw the significance contour lines True nameSave (string) path plus name to save the figure, if it is define, the plot is saved but not showed None scale (boolean) True for not log2 scale of the Plot False

#### Example

Consider the tow stochastic, standardized with zero means, signals:

The code bellow computing and plot the Cross Wavelet Power Spectrum of these signals:


>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from piwavelet import piwavelet
>>> y1 = np.random.rand(50) #Generation of the Random Signal 1
>>> y2 = np.random.rand(50) #Generation of the Random Signal 2
>>> x = np.arange(0,50,1) # Time step
>>> y1 = (y1-y1.mean())/y1.std() #Normalization of the Signal 1
>>> y2 = (y2-y2.mean())/y2.std() #Normalization of the Signal 2
>>> myXSpec = piwavelet.wcross(y1,y2) #Cross Wavelet Analisys
>>> myXSpec.plot(t = x, title='Test',units='sec') # Plot of the Cross Power Spectrum Map
>>> xwt,period, scale, coi, sig95=myXSpec() # If you want to know the individual properties.'



The Figure 5 shows the Cross Wavelet Power Spectrum map.

### Extra Functions

#### Continues Wavelet Transform

In this package is available some wavelets mother functions (Morlet, Paul, DOG, Mexican hat), Continuous wavelet transform of the signal at specified scales, Inverse continuous wavelet transform, Significance testing for the onde dimensional wavelet transform, the Allen and Smith autoregressive lag-1 autocorrelation alpha, Lag-1 autoregressive theoretical power spectrum

These functions are originally presented in the kPyWavelet package (https://github.com/regeirk/kPyWavelet)

Also it was implemented a plotWavelet function that plot the normalized data, the wavelet transform, the power spectrum of the wavelet and the scale averaged wavelet spectrum as determined by the avg1 and avg2 parameters

Below is presented the example to run the wavelet transform (Default Morlet mother wavelet) and the plot of the wavelet.


>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from piwavelet import piwavelet
>>> y1 = np.random.rand(50) #Generation of the Random Signal
>>> y1 = (y1-y1.mean())/y1.std() #Normalization of the Signal 1
>>> wave, scales, freqs, coi, fft, fftfreqs=piwavelet.cwt(y1) # If you want to know the individual properties.'
>>> piwavelet.plotWavelet(y1,title='test',label='Random Signal',units='days')



The Figure 6 shows the Resultant graphics.

### Bibliography

[1] Mallat, Stephane G. (1999). A wavelet tour of signal processing
[2] Addison, Paul S. The illustrated wavelet transform handbook
[3] Torrence, Christopher and Compo, Gilbert P. (1998). A Practical
Guide to Wavelet Analysis
[4] Grinsted, A., Moore, J.C., Jevrejeva, S., 2004,
Nonlin. Processes Geophys., 11, 561–566, doi:10.5194/npg-11-561-2004
[5] Jevrejeva, S., Moore, J.C., Grinsted, A., 2003,
J. Geophys. Res., 108(D21), 4677, doi:10.1029/2003JD003417
[6] Torrence, C., Webster, P. ,1999,
J.Clim., 12, 2679–2690

#### Credits:

Author : Eduardo S. Pereira. (pereira.somoza@gmail.com)