Spectrogram of "sarigamapa" audio
Spectrograms with different Window functions
Spectrograms of Different Instruments
Flute
Gitar
Piano
Violin
Trumpt
Activity 6.1
Spectrogram
[x, Fs] = audioread('sarigamapa.wav');
x = x(:,1);
window_size = 2048;
hop_size = window_size/2;
[s,f,t] = spectrogram(x, window_size, hop_size,window_size,Fs,'yaxis');
waterplot(s,f,t)
figure()
subplot(121)
plot(x,'k')
xlabel('#samples')
ylabel('Amplitude')
grid on
subplot(122)
spectrogram(x, window_size, hop_size,window_size,Fs,'yaxis');
Change Window
hamming_window = window(@hamming,window_size);
hanning_window = window(@hanning,window_size);
kaiser_window = window(@kaiser,window_size);
gausswin_window = window(@gausswin,window_size);
Visualization
figure(1)
subplot(121)
plot(hamming_window,'LineWidth',2,'Color','k')
xlabel('#samples')
ylabel('Amplitude')
grid on
subplot(122)
spectrogram(x,hamming_window,hop_size,window_size,Fs,'yaxis');
sgtitle('Hamming Window')
figure(2)
subplot(121)
plot(hanning_window,'LineWidth',2,'Color','k')
xlabel('#samples')
ylabel('Amplitude')
grid on
subplot(122)
spectrogram(x,hanning_window,hop_size,window_size,Fs,'yaxis');
sgtitle('Hanning Window')
figure(3)
subplot(121)
plot(kaiser_window,'LineWidth',2,'Color','k')
xlabel('#samples')
ylabel('Amplitude')
grid on
subplot(122)
spectrogram(x,kaiser_window,hop_size,window_size,Fs,'yaxis');
sgtitle('Kaiser Window')
figure(4)
subplot(121)
plot(gausswin_window,'LineWidth',2,'Color','k')
xlabel('#samples')
ylabel('Amplitude')
grid on
subplot(122)
spectrogram(x,gausswin_window,hop_size,window_size,Fs,'yaxis');
sgtitle('Gausswin Window')
Waterplot Function
function waterplot(s,f,t)
% Waterfall plot of spectrogram
waterfall(f,t,abs(s)'.^2)
set(gca, 'XDir',"reverse", 'view',[30 50])
xlabel("Frequency (Hz)")
ylabel("Time (s)")
end
Activity 6.2
Compare Instruments Spectrograms
fs = 44100;
[y1,~] = audioread("andean-flute-theme-low_fybeqsnu1.mp3");
[y2,~] = audioread("zo_-pripyati-gitara.mp3");
[y3,~] = audioread("cirk-barabannaya-drob-i-marsh_-silachi.mp3");
[y4,~] = audioread("jamaican-piano_mytjcqbd.mp3");
[y5,~] = audioread("violin-trill_mk15cun_.mp3");
[y6,~] = audioread("z_uk-truba.mp3");
Create samples from audio files
n_start = 20000;
n_samples = 10000;
n_stop = n_start+n_samples;
flute = y1(n_start:n_stop,1);
gitar = y2(n_start:n_stop,1);
drum = y3(n_start:n_stop,1);
piano = y4(n_start:n_stop,1);
violin = y5(n_start:n_stop,1);
trumpt = y6(n_start:n_stop,1);
window_size = 2048;
hop_size = window_size/2;
Visualization
figure()
spectrogram(flute, window_size, hop_size,window_size,fs,'yaxis');
title('Flute Spectrogram')
figure()
plot(flute,'b','LineWidth',1)
xlim([0,n_samples])
xlabel('#samples')
ylabel('Amplitude')
title('Flute Waveform')
grid on
figure()
spectrogram(gitar, window_size, hop_size,window_size,fs,'yaxis');
title('Gitar Spectrogram')
figure()
plot(gitar,'k','LineWidth',1)
xlim([0,n_samples])
xlabel('#samples')
ylabel('Amplitude')
title('Gitar Waveform')
grid on
figure()
spectrogram(drum, window_size, hop_size,window_size,fs,'yaxis');
title('Drum Spectrogram')
figure()
plot(drum,'r','LineWidth',1)
xlim([0,n_samples])
xlabel('#samples')
ylabel('Amplitude')
title('Drum Waveform')
grid on
figure()
spectrogram(piano, window_size, hop_size,window_size,fs,'yaxis');
title('Piano Spectrogram')
figure()
plot(piano,'g','LineWidth',1)
xlim([0,n_samples])
xlabel('#samples')
ylabel('Amplitude')
title('Piano Waveform')
grid on
figure()
spectrogram(violin, window_size, hop_size,window_size,fs,'yaxis');
title('Violin Spectrogram')
figure()
plot(violin,'k','LineWidth',1)
xlim([0,n_samples])
xlabel('#samples')
ylabel('Amplitude')
title('Violin Waveform')
grid on
figure()
spectrogram(trumpt, window_size, hop_size,window_size,fs,'yaxis');
title('Trumpt Spectrogram')
figure()
plot(trumpt,'b','LineWidth',1)
xlim([0,n_samples])
xlabel('#samples')
ylabel('Amplitude')
title('Trumpt Waveform')
grid on
Spectrogram using Python
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
# read wav file
audio_file_path = r'sarigamapa.wav'
fs, data = wavfile.read(audio_file_path)
data = data[:,0]
# create window function
window_size = 256
window = np.hanning(window_size)
# create spectrogram
spectrogram = np.zeros((int(len(data)/window_size),window_size))
for i in range(spectrogram.shape[0]):
segment = data[i*window_size:(i+1)*window_size]
segment = segment*window
fft_data = np.fft.fft(segment)
fft_data = np.abs(fft_data)
spectrogram[i,:] = fft_data[:window_size]
# plot spectrogram
plt.imshow(spectrogram.T, aspect='auto')
plt.xlabel('Time')
plt.ylabel('Frequency')
plt.show()