Afg500
Afg500

Reputation: 11

Why are these two plots different?

Here I am plotting a spectrogram twice, once using imagesc and once using the spectrogram automatic plotting. I don't know why I get different scaling results, probably some filtering by the automatic plotting function but I would like to know what exactly and how to transform it so that it matches.

enter image description here

enter image description here

fs = 44100;

% Frequency sweep signal
sw = logspace(log10(500),log10(5000),fs*5);

x = 0.95 * sin(cumsum((2*pi*sw)/fs));

N = 128;
win_size = N;
noverlap = N/2;
win = window(@blackman,win_size);

[s,f,t] = spectrogram(x,win,noverlap,N,fs,'yaxis');

%% IMAGESC --- FIGURE 1
figure(1)
imagesc(t,f/1000,20*log(abs(s)));
title('Spectrogram');
set(gca,'Ydir','Normal');
xlabel('Time (secs)');
ylabel('Frequency (kHz)');
hcb=colorbar;
title(hcb,'Spectral Magnitude (dB)');

%% test with automatic spectrogram plot ---FIGURE2
figure(2)
spectrogram(x,win,noverlap,N,fs,'yaxis');

end

Help is appreciated :)

Upvotes: 1

Views: 135

Answers (1)

KKS
KKS

Reputation: 1389

Change your code "imagesc(t,f/1000,20*log(abs(s)))" as imagesc(t,f/1000,20*log10(abs(s))). log() is natural logarithm. When you calculate dB scale, you should use log10(), not log().

Upvotes: 1

Related Questions