Where can I see the list of built-in wavelet functions that I can pass to scipy.signal.cwt?
Asked Answered
C

1

7

scipy.signal.cwt's documentation says:

scipy.signal.cwt(data, wavelet, widths)

wavelet : function Wavelet function, which should take 2 arguments. The first argument is the number of points that the returned vector will have (len(wavelet(width,length)) == length). The second is a width parameter, defining the size of the wavelet (e.g. standard deviation of a gaussian). See ricker, which satisfies these requirements.wavelet : function Wavelet function, which should take 2 arguments.

Beyond scipy.signal.ricket, what are the other built-in wavelet functions that I can pass to scipy.signal.cwt?

I see in scipy / scipy / signal / wavelets.py

__all__ = ['daub', 'qmf', 'cascade', 'morlet', 'ricker', 'cwt']

and looking at the arguments of each of those wavelet functions, only ricket seems to work with scipy.signal.cwt(data, wavelet, widths) (as only ricker takes precisely 2 arguments).

Chaunce answered 18/5, 2014 at 16:3 Comment(5)
"Beyond scipy.signal.ricket, what are the other built-in wavelet functions that I can pass to scipy.signal.cwt?" There aren't any. dsp.stackexchange.com/a/18104/29Sonneteer
@Sonneteer Thanks for the link! (nice to see DSP migration consistency)Chaunce
Yeah why isn't this question on DSP.SE?Sonneteer
@Sonneteer got migrated here, not sure why. Well at least it didn't get closed.Chaunce
I guess because it's about a specific software, not theory.Sonneteer
C
7

I asked the question on the SciPy Users List , answer 1:

I found the module for CWT quite confusing, so I rolled my own:

https://github.com/Dapid/fast-pycwt

It is built for speed (I got my running time from 4 h down to 20 min). It is not thoroughly tested, and it is limited to single and double; but for me it is in a "good enough" state.

Answer 2:

You might also find my version useful:

https://github.com/aaren/wavelets

I also found scipy wavelets confusing. My version includes a faster cwt that can take wavelets expressed in either frequency or time.

I found it more intuitive to have wavelet functions that take time/frequency and width as arguments rather than the present method (I prefer thinking in real space rather than sample space).

Presently, the morlet wavelet that comes with scipy, scipy.signal.wavelets.morlet, cannot be used as input to cwt. This is unfortunate I think.

Additionally, the present cwt doesn't allow complex output. This doesn't make a difference for ricker but wavelet functions are complex in general.

My modified 'cwt' method is here:

https://github.com/aaren/wavelets/blob/master/wavelets.py#L15

It can accept wavelet functions defined in time or frequency space, uses fftconvolve, and allows complex output.

My background on this is based on a reading of Torrence and Compo:

Torrence and Compo, 'A Practical Guide to Wavelet Analysis' (BAMS, 1998)

http://paos.colorado.edu/research/wavelets/

hope that helps a bit,

aaron

Chaunce answered 20/5, 2014 at 23:26 Comment(1)
As the author of the first one, I recommend the second, unless you really need the speed.Pilate

© 2022 - 2024 — McMap. All rights reserved.