2
$\begingroup$

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:

x = audioread('samson.wav')

But I still can't get this kind of a result. How can I get this colour graph? Thank youthis is example of color graph that i would like to have as a result, by putting an audio as an input

$\endgroup$
7
$\begingroup$

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:

load handel
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:

enter image description here

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:

enter image description here

$\endgroup$
  • $\begingroup$ 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 $\endgroup$ – ashley mraz Mar 31 '14 at 3:57
  • $\begingroup$ 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 $\endgroup$ – ashley mraz Mar 31 '14 at 4:24
  • $\begingroup$ @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. $\endgroup$ – endolith Mar 31 '14 at 15:38
  • 1
    $\begingroup$ @ashleymraz, post updated with scalogram creation. $\endgroup$ – jojek Mar 31 '14 at 20:26
  • $\begingroup$ That's a real Morlet wavelet, not a complex one, though. wname='cmor' would be more similar to the OP's graph $\endgroup$ – endolith Mar 31 '14 at 21:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.