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);