Inverse wavelet transform using only one wavelet transform
4 views (last 30 days)
Show older comments
I used the code below to conduct cwt on signal first. Then, pick one cwt coefficient to reconstruct the signal, i.e., Re_signal using icwt.
In my understanding, the reconstructed Re_signal should be in the form of a wavelet. But the results turned out that the Re_signal equals to zero other than the specific time point.
Can anyone help me with this question?
Thank you a lot.
signal = rand(1,3000);
cwt_coef = cwt(signal);
icwt_coef = cwt_coef.*0;
icwt_coef(5,500) = cwt_coef(5,500);
Re_signal = icwt(icwt_coef);
plot(Re_signal)
4 Comments
Daniel
on 4 Apr 2023
TL;DR version: If you're looking for information on the mother wavelet, this might be of more interest than trying to construct it via synthetic CWT coefficients. Morse Wavelets - MATLAB & Simulink (mathworks.com)
With the huge caveat that my experience in wavelets is not that high, especially with the continuous variety, I don't think comparing the Fourier transform to the wavelet transform is entirely fair. They fulfill different purposes, since a Fourier transform is a one-dimensional representation of a one-dimensional input time signal, whereas the wavelet transform is a two-dimensional time-frequency representation of a one-dimensional input time signal.
Every Fourier coefficient in the DFT is orthogonal. So they'll have an independent effect. I'm not sure if this is true of MATLAB's continuous-time wavelet transform. It's true of the discrete-time version because the scaling was chosen to produce orthogonal coefficients. But for the discrete-time transform, if you plot row 87 you'll find the signal varying much more slowly than in row 1. So row 87 is being oversampled.
Because of that oversampling, I don't think you can, in general, produce a single nonzero coefficient in the (sampled, underlying-continuous, numerically approximated) cwt coefficients and have it be a valid cwt. So whatever numerical methods MATLAB is running to recover time data from a (valid, largely oversampled, intrinsically correlated) cwt coefficient set isn't likely to produce valid output on a single nonzero coefficient, because the cwt outputs aren't all orthogonal.
I apologize for the vague language. Again, it's been a while since I've delved into this level of theory. It's an area of interest, but wavelets are so special-use-case that it's not that easy to find an application that lets me play with them enough to develop expertise.
Answers (1)
Bruno Luong
on 4 Apr 2023
Edited: Bruno Luong
on 4 Apr 2023
I guess because you feed in random data, the scale cannot by estimate correctly therefore the first level of the scale (and also the fith) is too small and the motherwavelet is scaled to less than one sample.
Try signal that contains meaningful information content.
What disturb me is icwt accepts array of coefficients as input and nothing else. I don't know how it can figure out the absolute scale factor related to time sample rate.
Note that I knows a little to wavelet theory but I don't own the toolbox license and never pratice it.
See Also
Categories
Find more on Continuous Wavelet Transforms in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!