Code covered by the BSD License

### Highlights from continuous wavelet transform and inverse

4.66667
4.7 | 6 ratings Rate this file 46 Downloads (last 30 days) File Size: 5.83 KB File ID: #20821 Version: 1.2

# continuous wavelet transform and inverse

### jon erickson (view profile)

22 Jul 2008 (Updated )

Continuous wavelet transform (CWT) and Inverse CWT for reconstructing original signal.

File Information
Description

UPDATED OCT 14 2014
This collection of files is an extension of the wavelet software package originally written by Torrence and Compo (http://paos.colorado.edu/research/wavelets/software.html)

The main functions are:

1. contwt.m: (continuous wavelet transform). This is essentially Torrence and Compo's wavelet.m with a few modifications (more inputs and outputs for easier access)

2. invcwt.m: inverse continuous wavelet transform.

Please see the help in each function for details and usage.

Example usage:
%make a test signal
dt = 0.1
t = 0:dt:10;
x = cos(2*t)

%compute the CWT
[wave, period, scale, coi, dj,paramout, k] = contwt(x,dt);

%reconstruct the original signal
Xrec = invcwt(wave, 'MORLET', scale, paramout, k);

%Plot results
figure;
plot(t,x); %original signal
hold on;
plot(t, Xrec, 'r--')
legend('Original signal', 'Reconstructed Signal')
xlabel('Time');
ylabel('Signal (arbitrary units)')

%plot wavelet coeffs
figure;imagesc(abs(wave))
xlabel('Time (integer index)')
ylabel('Scale')

MATLAB release MATLAB 7.4 (R2007a)
MATLAB Search Path
`/`
19 Jun 2016 Johan Ibrahimowich

### Johan Ibrahimowich (view profile)

20 Nov 2015 Death Saurer

### Death Saurer (view profile)

That so very good day.
Let me turn to you asking for your kind help in order to get the code in matlab for the fourier transform of continuous-time (FFT) directly and inversely, since my knowledge in matlab are not very good.
I appreciate who I can help and collaborate.
Excuse my bad English and my native language is Spanish

Comment only
08 Apr 2015 jon erickson

### jon erickson (view profile)

Yousef - Glad you got the example code to run. The limitation you mentioned arises because I adapted Torrence and Compo's original code, which only had a small family of wavelet bases included. A few more could easily be added in the future simply by adding more in wave_bases.m.

Comment only
22 Feb 2015 Yousef

### Yousef (view profile)

I could run the code with the "example" you posted, but here is my main problem:
Why is this limited to only three family of functions. How about "db10" or "cgau8"?

Comment only
22 Feb 2015 Yousef

### Yousef (view profile)

hi,
I am trying to run the code. But there is an error:
where can I find ref.txt

Comment only
15 Oct 2014 Greg

### Greg (view profile)

Clean, concise, simple to use, excellent results. Thank you very much! If a few more wavelets could be added in the future, would be much appreciated.

19 May 2013 jon erickson

### jon erickson (view profile)

Venkata:
If you want to isolate a single scale (frequency) in the reconstruction, then zero out all coefficients for all scales and all time, except the selected scale. Then reconstruct.

Trevor: Yes, you are correct. Filling in zeros for gaps ensures those terms (time points) ensure the sums remain unchanged.
Just add 'haar' in the list of available wave bases, as you suggest.

Comment only
24 Jan 2013 trevor

### trevor (view profile)

Hi Jon,

Thanks for this fantastic code!
A question regarding time series with gaps:
As I understand, the Haar wavelet will ignore gaps, as long as they are replaced by zeros and the time series is zero-meaned. If this is correct, could you include (either here or in the wave_bases.m file) code for the Haar wavelet?

Thanks again.

22 Nov 2012 Venkata

### Venkata (view profile)

The example you have provided works fine. But, when I apply to my data, the reconstructed signal seems to be scaled down.

Secondly, could you plz tell me how to reconstruct only a particular periodic signal (frequency) from the wavelet coefficients..?

Thank you.

13 Nov 2011 ernesto

### ernesto (view profile)

hey friends Im working with myoelectric signal and i need to use the wavelet transform for processing the signal and i need some like a tutorial for get some knowledge

12 Oct 2011 jon erickson

### jon erickson (view profile)

Alexandre: MATLAB did not used to have the inverse cwt function in their wavelet toolbox as of 2008. Hence, at that time, it was filling a gap--that matlab hadn't yet implemented. I have not used the newer version of matlab wavelet toolbox, but my guess is that it is the same concept, but less full-fledged.

Zahra: CWT does not share the same notion of details and approximations--that is DWT only.

Comment only
16 Aug 2011 zahra Khawaja

### zahra Khawaja (view profile)

When I decompose the signal with the CWT, how can i reconstruct the details coefficients and the approximations coefficients, like in the discrete wavelet when we use the matlab function (wrcoef)?

Comment only
03 Aug 2011 Alexandre

### Alexandre (view profile)

Could you please explain how this differ from the Wavelet Toolbox (cwt.m function) ? Thanks.

Comment only
02 Apr 2011 jon erickson

### jon erickson (view profile)

If by "instantaneous frequency" you mean the "equivalent Fourier frequency" (i.e. sine wave in infinite time domain at oscillating at a single frequency), then here's the answer. The CWT "pseudofrequency" depends on the mother wavelet you use for the transform. Each mother wavelet has a corresponding "center frequency", and the relation is given as:

f = centerfrq(mother)/(a*delta).
a = scale
delta = sampling period.

I strongly encourage you to read up on wavelet theory, in order to become a competent user of this code.

Comment only
01 Apr 2011 Hani Ali

### Hani Ali (view profile)

Thank you very much Jon for the great files. Could you please explain how some one could obtain the instantaneous frequency from the transformed wavlet. I found a lot of literature on how to do so for a signal but not its transformed wavlet... I suspect it is rather easy, but i am somewhat lost... Thanks in advance!

Comment only
25 Feb 2011 jon erickson

### jon erickson (view profile)

Please note that the reconstructed signal is always centered. That is, the reconstruction process does not/cannot account for any 'dc offset' in the original signal.

Comment only
24 Jan 2011 Wayne Liu

### Wayne Liu (view profile)

For people who cannot reconstruct the signal, please check your downloaded 'invcwt.m'. In Line 34, if it is calling the function 'wave_bases', change it to 'wave_bases_rec'. Rerun your program and see if it works...

Comment only
30 Nov 2010 Jan Sieber

### Jan Sieber (view profile)

requested example (what's missing there?) Could be a documentation problem?

%% test invcwt(contwt(y))
dt=1e-3;
t=-pi:dt:pi;
y=sin(t);
% default is MORLET according to documentation:
[wave,per,scale,coi,dj,paramout,k]=contwt(y,dt);
yrec=invcwt(wave,'MORLET',scale,paramout,k);
plot(t,y-yrec);

Comment only
07 Jun 2010 jon erickson

### jon erickson (view profile)

Ajay and Ravi,
I have never experienced similar issues.
Please provide more specifics on your problem, and I'll try to respond. E.g., please copy/paste the commands you used. It would also be helpful if you posted an image of your original signal and the (erroneous) output.

Comment only
08 Mar 2010 Ravi Rastogi

### Ravi Rastogi (view profile)

Hi Jon, I am also having trouble reconstructing the signal back. I get a vector having all values NAN.

Comment only
07 Jan 2010 Ajay

### Ajay (view profile)

I meant does not seem to perform perfect reconstruction.

Comment only
07 Jan 2010 Ajay

### Ajay (view profile)

The inverse continuous transform does seem to perform a perfect reconstruction. Is there a way to retrieve the original signal back.

Comment only
20 May 2009 Jon

### Jon (view profile)

Bogdan:

worked as of this afternoon when I tested it.

Comment only
02 Nov 2008 Bogdan Hlevca

### Bogdan Hlevca (view profile)

It would be nice if you had more documentation for the software and attached the data file for the test function.
The link you provided does not work.