Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Wavelet Coefficient Normalization?

318 views
Skip to first unread message

Krishnanand Balasundaram

unread,
Mar 21, 2011, 6:47:05 PM3/21/11
to
Hello,

I was reading through the CWT guide and it was very useful in understanding the functionality of wavelets. I however did not know if the energy that the CWT coefficients capture is normalized or not.

I am currently using the cwt to transform a normalized signal (i.e. the energy of the signal in the time domain is 1). I would like to know if the energy in the wavelet domain is automatically normalized by the CWT command?

If not, how would I go about normalizing the cwt coefficients produced.

Regards,

Krish

Wayne King

unread,
Mar 22, 2011, 6:15:21 AM3/22/11
to
"Krishnanand Balasundaram" <kbal...@ryerson.ca> wrote in message <im8kh9$c0s$1...@fred.mathworks.com>...

Hi Krish, No it is not. But you can use wscalogram with the CWT coefficient matrix to get a matrix in which the (i,j)-th entry is the percentage of energy the (i,j)-th CWT coefficient contributes to the total energy in the CWT coefficient matrix.
However, that is not the percentage of energy that wavelet coefficient contributes to the energy of the input signal.

Wayne

Krishnanand Balasundaram

unread,
Mar 22, 2011, 2:39:04 PM3/22/11
to
"Wayne King" <wmki...@gmail.com> wrote in message <im9srp$ki0$1...@fred.mathworks.com>...

Thanks Wayne,

Is there a way to normalize the coefficients on a scale by scale basis as well?

Regards,

Krish

Krishnanand Balasundaram

unread,
Mar 22, 2011, 5:14:04 PM3/22/11
to
"Krishnanand Balasundaram" <kbal...@ryerson.ca> wrote in message <imaqc8$fgg$1...@fred.mathworks.com>...

Another question to add on to this is I would like to know how I would go about finding the scale and time regions which contains a certain percentage of the energy (i.e. the threshold value which contains 90% of the total energy of the cwt coefficients)

Regards,

Krish

Wayne King

unread,
Mar 23, 2011, 6:28:05 AM3/23/11
to
"Krishnanand Balasundaram" <kbal...@ryerson.ca> wrote in message <imb3es$ste$1...@fred.mathworks.com>...

Hi Krish, you can do something like this:

t = linspace(0,1,1e3);
x = cos(2*pi*50*t).*(t<0.5)+cos(2*pi*200*t).*(t>0.5)+0.5*randn(size(t));
scales = 2:.1:30;
cfs = cwt(x,scales,'morl');
energy = sqrt(sum(abs(cfs).^2,2));
percentage = 100*energy/sum(energy);
plot(scales,percentage,'.-r');
hold on;
% Detect the scale of greatest energy.
[maxpercent,maxScaleIDX] = max(percentage)
plot(scales(maxScaleIDX),maxpercent,'k^','markerfacecolor',[0 0 0])

Wayne

Krishnanand Balasundaram

unread,
Mar 23, 2011, 2:43:04 PM3/23/11
to
"Wayne King" <wmki...@gmail.com> wrote in message <imchvl$euf$1...@fred.mathworks.com>...

Thanks again Wayne,

One last question with this is that we now have the percentage of energy per scale. What if I want to find which scales provide me with 90% of the energy?

Do you have any thoughts on how we could go about finding this automatically?

My initial guess would be to sort the percentage variable in descending order and continuously sum until we obtain 90% of the power. We will then know the scale ranges for which contains 90% of the energy.

Regards,

Krish

Wayne King

unread,
Mar 23, 2011, 2:57:20 PM3/23/11
to
"Krishnanand Balasundaram" <kbal...@ryerson.ca> wrote in message <imdevo$mcc$1...@fred.mathworks.com>...

Hi Krish, That would work, although either way you sort (ascending or descending), you can easily end up jumping over 90% by just adding one scale.

If you have access to the R2011a prerelease, there are new routines for a Fourier-transform based CWT and inverse CWT based on a 1998 paper by Torrence and Compo.
The routines are cwtft.m and icwtft.m. The 11a release will be out soon so you can wait for that. At any rate, for the supported wavelets, the normalization constants are known so that you can reconstruct a signal approximation based on select scales. In other words, you use the CWT to identify the scales of interest and then you can invert based only on those scales. This gives you a time- and scale-localized approximation to your signal.

Wayne

Yoshiki

unread,
Jan 31, 2012, 3:51:10 PM1/31/12
to
"Krishnanand Balasundaram" <kbal...@ryerson.ca> wrote in message <imaqc8$fgg$1...@fred.mathworks.com>...
Hello Krish,

I've encountered this problem. Heads up to the Mathworks guys that they should explicitly mention that the results are not normalized. The easiest way to normalize the results is to take the coefficients that result from the transformation and multiply them by a weighting function. The weighting function is a function of the scale and depends on the wavelet you are using, it usually is 1/sqrt(a) where a is the scale. After doing this, you can plot the results with mesh.
0 new messages