I am in need of an open source library for computing Fast wavelet transforms (FWT) and Inverse fast wavelet transforms (IFWT) - this is to be part of a bigger code I am currently writing.

The things I am looking for in the library:

1) Contains a good variety of wavelet families (Daub,Haar, Coif etc.)

2) Ability to run in parallel - VERY IMPORTANT

3) Reasonable documentation, so that I can include new wavelets of my own without having to modify the complete source ( Maybe an OOPS based approach would help?)

I am flexible about the language - C/C++/Fortran90/Fortran77/Python .... Any language would do for me, though I would prefer something which is optimized for speed and in parallel.

So far, I have found PyWavelets - it looks good, but it is in Python ( therefore considerably slow) and it doesn't run in parallel. I am going to use the DWT for processing really huge datasets, so speed is an important concern for me.

Its understandable there may not be anything with all the requirements I mentioned. But I wanted to hear from the community if they have any suggestions.

  • $\begingroup$ FWT works with different wavelet families? I thought it was only Haar wavelet. Also, why do you think Python is slow? The bottlenecks in PyWavelets are written in C for speed. $\endgroup$
    – endolith
    Aug 13 '13 at 14:07
  • $\begingroup$ @endolith , I agree that they are written in C. but I am talking of processing datasets which are about 100 GB atleast...so I hope you understand why I need to run it in parallel. As for your first statement, I am not sure thats the case... I have seen Coiflets being used for FWT as well. $\endgroup$
    – atmaere
    Aug 16 '13 at 1:25
  • 1
    $\begingroup$ This link can be useful for you. $\endgroup$
    – DaBler
    Feb 8 '17 at 18:56

you can have a look at the LTFAT's wavelet module http://ltfat.sourceforge.net/doc/wavelets/index.php

it runs in Matlab/Octave with backend written in C. It has fairly large database of wavelet filters and new ones can be added easily.

What exactly do you mean by

2) Ability to run in parallel - VERY IMPORTANT

Should the computation itself be somewhat parallelized or that it should be possible to run several batches of FWT calculations? I guess that running several instances of Octave should do the trick in the latter case.

  • $\begingroup$ Thanks. I mean the computation itself should be parallel.. $\endgroup$
    – atmaere
    Aug 15 '13 at 18:57
  • $\begingroup$ Ok, and what is the reason you want to do it in parallel? Is it just speed or is it the fact that the volume of your dataset entry won't fit in memory at once? Perhaps, you may be interested in my SegDWT algorithm. It addreses both these issues. What do you want to do with the coefficients? $\endgroup$ Aug 18 '13 at 20:33
  • $\begingroup$ Yes. My data will be atleast a few dozen GB in size. As of now, I just need a FWT which runs in parallel. I guess memory is more of a issue here than speed. As to what I further want to do with the coefficients, I am not sure of that as of now. I am developing a new data analysis algorithm which uses FWT as one of its steps. Can you give more details about your algorithm, if you don't mind? Thanks! $\endgroup$
    – atmaere
    Aug 19 '13 at 0:58
  • $\begingroup$ Well, it does not actually do anything else than computing wavelet coefficients from suitably overlapped blocks of the data. The resulting coefficients concanenated together are then equal to the coefficients of the whole input. If you are interested here are details ltfat.sourceforge.net/notes/ltfatnote026.pdf However, you can always go the easy way and do as many separate FWT as you like, but be aware that coefficients near the block boundaries are not correct. $\endgroup$ Aug 19 '13 at 20:13
  • $\begingroup$ Thanks, I will study the document. BTW, congrats on your PhD! $\endgroup$
    – atmaere
    Aug 19 '13 at 21:08

It's really good the LTFAT ToolBox but for few samples like 1024, 2048 (I think...).

For 262144 samples it's different. It's my case !. I have a huge signal with 262144 samples and sampled with 200Msps, 1D signal.

I want to use the cwt for making an scalogram and looking for frequencies around 10KHz, 20KHz, 100-500KHz, 1MHz and 2MHz. I thinks it's very hard to compute this type of signal, first for the lenght of it, and second the processing and time of processing.

I use Python and Matlab. I like python and Matlab. Also I worked with some scripts than I searched on the web but for few samples like 1024... 512... etc.

Waiting for your response and thanks in advance !. ;-)

PD: In your case search python scripts like Scipy (A Phyton librarie for math and processing), the MLPY (Machine Learning Python), with a cwt routine. I search for Matlab, but I think to expand to another programming languages and also, types of data processing.


You may want to look at this one: http://code.google.com/p/wavelet1d/ I just googled this library out, so use it in your own caution.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.