function showspectrogram(y,fs)
if nargin<2
fs = 8192;
end;
Ly = length(y);
if (Ly<256)
y(Ly+1:256)=0;
end;
L = 256;
Nfft = 256;
Noverlap = 256;
num_segs = 1025;
while num_segs > 1024
Noverlap = Noverlap-10;
shift = abs(L-Noverlap);
num_segs = 1 + fix( (Ly-L)/shift );
end;
window = 0.54-0.46*cos(2*pi*(0:L-1)/(L-1));
window = window(:); y = y(:);
B = zeros( Nfft/2+1, num_segs );
iseg = 0;
while( iseg<num_segs )
nstart = 1 + iseg*shift;
ysegw = window .* y( nstart:nstart+L-1);
YF = fft( ysegw, Nfft );
iseg = iseg + 1;
B(:,iseg) = YF(1:Nfft/2+1);
end
F = (0:(Nfft/2))/Nfft * fs;
T = ( L/2 + shift*(0:num_segs-1) ) / fs;
subplot(2,1,1);
imagesc(T,F,20*log10(abs(B)+eps)); axis xy; colormap(jet);
ylabel('frequency (Hz)'); xlabel('time (sec)'); title('Spectrogram (dB)');
maxsampleused = nstart+L-2;
subplot(2,1,2);
plot((0:maxsampleused)/fs,y(1:maxsampleused+1));
axis([min(T),max(T),min(y),max(y)]);
xlabel('time (sec)'); ylabel('signal');