Filtrage passe-bas ideal

Contents

Preliminaires

Lecture du fichier audio (stereo). On convertit le signal stereo en signal mono

[signal, fe] = audioread('music.wav');
signal = 0.5*signal(:,1) + 0.5*signal(:,2);

ecoute du signal

sound(signal,fe);

recuperation de sa taille et creation de l'echelle temporelle en seconde

T = length(signal) ;
Time = linspace(0,T/fe,T);

affichage des echantillons avec une echelle adaptee

figure(1);
plot(Time,signal);
title('Echantillons temporels du signal audio');
xlabel('Temps (s)');
ylabel('Amplitude');

Etude frequentielle

calcul de la fft du signal et du spectre

fft_signal = fft(signal);
spectre_signal = abs(fftshift(fft_signal));

creation de l'echelle frequentielle adaptee

Frequences = linspace(-fe/2,fe/2,T);

affichage du spectre

figure(1)
plot(Frequences,spectre_signal);
title('Spectre du signal');
xlabel('frequence (Hz)');
ylabel('Amplitude');

Filtrage passe-bas ideal

Choix de la frequence de coupure du filtre

fc = 8000;

Creation du filtre ideal valant 1 dans la bande passante et 0 dans la bande coupee

H = zeros(T,1);
index_fc = fix(fc/fe*T);
H(1:index_fc) = 1;
H(end-index_fc+1:end) = 1;

Affichage du gain de la fonction de transfert du filtre ideal

figure(1)
plot(Frequences,fftshift(H));
title('Module de la fonction de transfert du filtre ideal');
xlabel('frequence (Hz)');
ylabel('Amplification');

Annulation des composantes frequentielles superieures a fc:

fft_signal_PB = fft_signal.*H;
fft_signal_PB_mod = abs(fft_signal_PB);

Affichage du spectre filtre par supperposition au spectre original

figure(1)
plot(Frequences,spectre_signal,'b',Frequences,fftshift(fft_signal_PB_mod),'r');
title('Spectre du son filtre');
xlabel('frequence (Hz)');
ylabel('Amplitude');

Calcul de la transformee de fourier inverse pour obtenir le signal filtre:

signal_PB = ifft(fft_signal_PB,'symmetric');

Affichage des echantillons du signal filtre

figure(1);
plot(Time,signal,'b',Time,signal_PB,'r');
title('Echantillons temporels du signal audio');
xlabel('Temps (s)');
ylabel('Amplitude');

Ecoute du signal filtre

sound(signal_PB,fe);