Time-frequency representation of sound signal using Matlab

I am currently doing a project on sound signal processing by using MATLAB. I have a problem regarding creating the command line so that I can get a graph containing frequency by its time. But this graph is the result of an audio input. example:

But I still can't get this kind of a result. How can I get this colour graph? Thank you

• that looks like a complex morlet wavelet scalogram. dsp.stackexchange.com/a/7917/29 Commented Mar 30, 2014 at 19:41
• i think youre right... but how do i obtain this graph with an Audio input?? Commented Mar 31, 2014 at 13:34
• I don't know in Matlab. This is the python code I used to make those plots: phy.uct.ac.za/courses/python/examples/… phy.uct.ac.za/courses/python/examples/Wavelets.py Commented Mar 31, 2014 at 15:36
• Very similar question: dsp.stackexchange.com/q/10127/29 Commented Mar 31, 2014 at 21:47
• It is a wonderful code. Sorry, how can we find the Power versus period and time and Global power density?
– user20339
Commented Apr 1, 2016 at 14:47

I believe that this "color graph" you are looking for is a spectrogram (although it looks to me more like a scalogram, but you did not mentioned wavelets). Let me give you an example in MATLAB of obtaining such plot:

nfft = 512;
noverlap = 128;
win = hamming(nfft);
spectrogram(y, win, noverlap, nfft, Fs, 'yaxis')
colormap('jet')

So first line is loading of some standard test recording, it gives you two variables: Fs (sampling frequency) and y (your signal). Next you define length of your analysis: nfft in your Short Time Fourier Transform and by how many samples you want to shift your analysis window. When defining window you can use variety of them (simply check in MATLAB help), I've used most common one: Hamming window. Last line is for setting colour representation.

Computation of spectrogram is very straightforward, please refer to help for more details: click. The last argument 'yaxis' tells MATLAB to use horizontal time axis and vertical for frequency.

Having that you can play with length of your analysis window and the overlap. You must though understand one, most important thing: better resolution in time (short window) yields poorer resolution in frequency domain and vice versa - that's a trade-off.

In the end you should get something like:

EDIT:

Because you would like to obtain the scalogram, here's how to do it in MATLAB. Most important thing - you must have Wavelet Toolbox installed!

% Definition of signal consisting of two sinusoids
f1 = 10;
f2 = 40;
Fs = 1000;
t  = 0:1/Fs:1;
y =  sin(2*pi*t*f1) + sin(2*pi*t*f2);

wname = 'morl'; % Choosing the wavelet
scales = 1:1:128; % Defining scales
coefs = cwt(y, scales, wname); % Get wavelet coefficients

wscalogram('image', coefs, 'scales', scales, 'ydata', y); % Get the scalogram, together with time domain signal overlayed
colormap(jet) % Set the colormap

As a result you will get something like:

• yeah i just realise it as spectrogram.. im searching for the command line that can give me a result of a spectrogram graph of its frequency and time of its wavelet transform.. by putting an audio input.then i will get the result of its by spectrogram. basically the pic should be like what i posted earlier. thank you Commented Mar 31, 2014 at 3:57
• so i guess i actually should get a result of scalogram? because its a wavelet transform... but input of an audio that have been recorded Commented Mar 31, 2014 at 4:24
• @ashleymraz: STFT produces spectrograms, wavelet transforms produce scalograms. With a complex Morlet wavelet, they are very similar in concept, only differing in the spacing of the bins in time-frequency space. Commented Mar 31, 2014 at 15:38
• @ashleymraz, post updated with scalogram creation.
– jojeck
Commented Mar 31, 2014 at 20:26
• That's a real Morlet wavelet, not a complex one, though. wname='cmor' would be more similar to the OP's graph Commented Mar 31, 2014 at 21:42