% Author: Borra Federico, Ph.D.,
% Politecnico di Milano, DEIB
% email address: federico.borra@polimi.it
% April 2017; Last revision: 01/04/2017

clear all
close all
clc

%% Segnale audio da filtrare
[x,Fs]=audioread('gb.wav'); % caricare il file audio come una matrice di samples

T=5; %durata del segnale in secondi
N=Fs*T; % durata del segnale in samples
x=x(1:N); % prendo i primi P secondi di segnale 

t=(0:1/Fs:T-1/Fs);
figure(1)
plot(t,x)
xlabel('Time seconds')
title('Recorded Signal')

X=fft(x);
f=(-Fs/2:Fs/N:Fs/2-Fs/N);
figure(2)
plot(f,fftshift(abs(X)))
xlabel('Frequency Hz')
title('Fourier T. Abs Value')

%% Progetto del filtro passa basso
f_cut=1/20; 
hPB=fir1(64,f_cut);

HPB=fft(hPB,1024);
figure(3)
subplot(2,1,1)
plot(hPB)
xlabel('samples')
title('Low-pass filter')
subplot(2,1,2)
plot(linspace(-Fs/2,Fs/2,1024),fftshift(abs(HPB)))
xlabel('f [Hz]')
title('Low-pass filter in frequency')
%% Filtraggio (convoluzione)
xPB=conv(x,hPB);

figure(1)
hold on
plot(t,xPB(65:length(xPB)),'r')
xlabel('Time seconds')
title('Low Pass Filtered Signal')
hold off

figure(2)
hold on
XPB=fft(xPB(65:length(xPB)));
plot(f,fftshift(abs(XPB)),'r')
xlabel('Frequency Hz')
title({'Fourier T. Abs Value',['f cut=' num2str(Fs/2*f_cut) ' Hz']})
hold off

%% Ascolto del segnale prima e dopo il filtraggio
disp('Fai click per sentire il segnale originale')
pause
soundsc(x,Fs)

disp('Fai click per sentire il segnale filtrato')
pause
soundsc(xPB,Fs)

