DSPRelated.com
Forums

how to get spectrogram like plot using wavelets

Started by calmncool82 March 16, 2008
Hi everyone,

i did short time fourier transform(STFT) on 1-D speech signals, and
did spectrogram analysis. On one paper I found that it is possible to
come up with a wavelet based analogy of spectrograms, it was called
"scalogram" at that paper. So, I set about trying to figure out a way
to come up with scalogram code in matlab. After coding a matlab
program which does a full decomposition of any given 1-D signal using
dwt at each level, upto the desired level, unlike built in matlab
wavedec.m function, I am trying to figure out how to find a way to
translate the information i have (the approximation and detail
coefficients) into spectrogram like graph. I know I have to do some
sort of scale to frequency conversion, but I am not sure how to
acquire the scale information from the coefficients. Furthermore, what
do i do to the coefficients in order to find out the power (energy) of
the signal, do i just perform a square of all the approximation and
detail coefficients.. but then how do i combine them?

Given a 1-D signal, suppose, by performing STFT on a 1-D signal,
after windowing and performing fft, there ends up being 128 frequency
components and 200 (or something like that) time components. It is
possible to get the magnitude of the fft directly in matlab with the
abs() function for each frequency component. However, when using
wavelet, how is it possible to get the magnitude of each frequency
after performing "dwt" operation on the same 1-D windowed signal? I
was able to perform dwt of it and get the 128 subbands after full
decomposition till 7 levels (not using the matlab "wavedec" function).
I want to be able to get the frequency at each scale so that i can get
the magnitude like information, and so, I have looked up the mathworks
help site. There are 2 functions "centfrq" which computes the center
frequency of a wavelet and another function scale2freq which does the
frequency to scale conversion. However, the scale2freq function
requires that the user has to know the scale of the signal, according
to the example. If the signal is unknown, how is it possible to give
an accurate scale in order to get the pseudofrequency information for
each subband? basically, i want to be able to get a spectrogram like
picture using wavelets where i can get the power/energy of the signal
displayed in time and frequency. I even tried using continuous wavelet
transforms with the scales=1:2.^7 to get the coefficients and then
plotted them, but i couldnt get the right frequency or the proper plot.

I would really appreciate any help, regarding this problem. thanks in
advance.