Fiche Rapport Tp4

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 7

TRAITEMENT DE SIGNAL

FICHE DE RAPPORT
SÉANCE #4 (TP4)
Filtrage Numérique

NOM ET PRÉNOM CLASSE

#1

#2

OBJECTIFS
Réaliser le filtrage des signaux synthétiques et audio . Réaliser la synthèse des filtres
numériques RII et RIF et se familiariser avec l’outil « filterDesigner » de Matlab.

1
TRAVAIL A FAIRE

Programme à compléter

2.1 Filtrage et fonction « filter » : Filtrage d'un signal par un filtre de


fonction de transfert

Fe=44100; % Fréquence d'échantillonnage du signal


Te=1/Fe; % Période d'échantillonnage du signal
N=Fe; % Nombre d'échantillons du signal
t=0:Te:(N-1)*Te; % Vecteur temps constitué de N échantillons
f=-Fe/2:Fe/N:Fe/2-Fe/N; % Constitution du vecteur fréquence entre -Fe/2 et Fe/2

2.1.1 Filtre RII de 1er ordre


a=-0.5;
b0 = 1+a;
b1 = 0;
a0 = 1;
a1 = a;
B1=[b0 b1];
A1=[a0 a1];

 Filtrage d'un échelon unité


echelon=ones(1,N);
rep_echelon= ; % Filtrage d'un échelon par le filtre de premier
% ordre
figure
stem(t(1:N),echelon(1:N),'k');
grid on;
hold on;
stem(t(1:N),rep_echelon(1:N),'r');
hold off
xlabel('Temps (s)');
ylabel('Amplitude');
legend('Signal d''entrée','Signal de srtie')
title('Filtre de 1er ordre : Filtrage d''un échelon')

 Filtrage d'un signal carré


fc=250; % Période du signal carré
carre=1+square(2*pi*fc*t); % Génération d'un signal carré de période 1/50 = 20 ms
rep_carre= ;% Filtrage d'un signal triangulaire par le filtre de premier
% ordre
Npts=floor(Fe/fc);
figure
stem(t(1:Npts),carre(1:Npts),'k');
grid on;
hold on;
stem(t(1:Npts),rep_carre(1:Npts),'r');
hold off
xlabel('Temps (s)');
ylabel('Amplitude');
legend('Signal d''entrée','Signal de srtie')
title('Filtre de 1er ordre : Filtrage d''un signal carré')

2
2.1.2. Filtre RII de 2ème ordre

a_1=-1.2;
a_2=.3;
% Définition des coefficients du filtre de second ordre
b0 = 1+a_1+a_2;
b1 = 0;
b2 = 0;
a0 = 1;
a1 = a_1;
a2 = a_2;
B2=[b0 b1 b2];
A2=[a0 a1 a2];
 Filtrage d'un échelon unité
rep_echelon= ;% Filtrage d'un échelon par le filtre de premier ordre
figure
stem(t(1:N),echelon(1:N),'k');
grid on;
hold on;
stem(t(1:N),rep_echelon(1:N),'r');
hold off
xlabel('Echantillon (n)');
ylabel('Amplitude');
legend('Signal d''entrée','Signal de srtie')
title('Filtre de 2ème ordre : Filtrage d''un échelon')

 Filtrage d'un signal carré


rep_carre= ; % Filtrage d'un signal triangulaire par le filtre de
premier ordre
Npts=floor(Fe/fc); % pour la visualisation sur une période du signal carré
figure
stem(t(1:Npts),carre(1:Npts),'k');
grid on;
hold on;
stem(t(1:Npts),rep_carre(1:Npts),'r');
hold off
xlabel('Temps (s)');
ylabel('Amplitude');
legend('Signal d''entrée','Signal de srtie')
title('Filtre de 2ème ordre : Filtrage d''un signal carré')

 Filtrage d'un fichier .wav


[x,Fs]=audioread('Mozart.wav'); % Lecture du fichier ".wav" et extraction du signal
% temporel (stéréo) plus la fréquence
% d'échantillonnage
% et le nombre de bits utilisé pour le
% codage de l'enregistrement audio

Signal audio original


disp('Signal original')
sound(x,Fs) % cette commande vous permet d'écouter le son sur votre PC.

Signal audio filtré par un filtre RII de second ordre


yrii(:,1)= ; % filtrage du canal de droite

yrii(:,2)= ; % filtrage du canal de gauche


disp('Signal audio filtré (RII de 2ème ordre)')
sound(yrii,Fs)

3
audiowrite('Mozart_traite_rii_ord2.wav',yrii,Fs); % Création du fichier ".wav" après
filtrage
figure
plot(t(1:100),x(1:100,1),'k*-');
grid on;
hold on;
plot(t(1:100),yrii(1:100,1),'r*:');
hold off
xlabel('Temps (s)')
ylabel('Amplitude')
legend('Signal original','Signal traité')
title('Signal audio filtré (RII de 2ème ordre)')

2.2 Réponses en fréquence d’un filtre et fonction « freqz »


Soit un filtre de fonction de transfert donnée par

%Dans ce cas le filtre est donné par ses zéros et pôles


%Le filtre possède deux zéros complexes conjugués
z0 = exp(j*pi/2) ;
z1 = z0' ;
%Le filtre possède deux pôles complexes conjugués
p0 = 0.7*exp(j*pi*5/6) ;
p1 = p0' ;
Z1=[z0;z1];
P1=[p0;p1];
%On peut retrouver les coefficients du filtre en fonctions des pôles et des zéros par
%identification des deux expressions :

%Pour le filtre précédent, nous avons N=M=2, avec :

%Nous obtenons par identification que


b0=1
b1=-2*real(z0);
b2=z0*conj(z0);

a0=1;
a1=-2*real(p0);
a2=p0*conj(p0);

B= ;

A= ;

%Placement des zéros et des pôles dans le plan complexe


figure
% Trace les zéros et les pôles dans le plan complexe
title ('Zéros et pôles de la fonction de transfert')
legend('zéros','pôles')
grid on

4
 Calcul des réponses en fréquence du filtre sur la bande

[Hf,F] = ; % Réponse en fréquence

figure
subplot(2,1,1)
semilogx(2*pi*F,20*log10(abs(Hf)))
title ('Module de la réponse en fréquence')
xlabel('Fréquence (rad/s)')
ylabel('Amplitude (dB)')
axis([-2*pi*Fe/2 2*pi*Fe/2 -150 50])
grid on
subplot(2,1,2)
semilogx(2*pi*F,180*angle(Hf)/pi)
title ('Phase de la réponse en fréquence')
xlabel('Fréquence (rad/s)')
ylabel('Phase (deg)')
axis([-2*pi*Fe/2 2*pi*Fe/2 -45 180])
grid on

2.3 Synthèse de filtre RIF et fonction « fir1 »


Dans cet exercice, on se propose de faire la synthèse de filtre passe-bas RIF de fréquence de
coupure égale à 10 kHz l'aide de la méthode des fenêtres et de comparer le résultat avec celui
donné par la fonction FIR1.
Nfir=31; % ordre du filtre
fc= ;% fréquence de coupure du filtre passe-bas

Fenêtres de pondération
wrect = window(@rectwin,Nfir);
whann = window(@hanning,Nfir);
figure
stem(0:Nfir-1,[wrect,whann]);
axis([0 Nfir-1 0 1]);
legend('Fenêtre rectangulaire','Fenêtre de Hanning');
xlabel('Indice de l''échantillon (n)')
grid on

 Calcul des coefficients de la réponse impulsionnelle du filtre par transformée de Fourier


inverse et troncature de la réponse cible
n=0:1:(Nfir-1);
h=2*fc*sinc(2*(n-(Nfir-1)/2)*fc/Fe)/Fe; % Réponse impulsionnelle du filtre

hrect=(h.').*wrect; % Pondération de h par la fenêtre rectangulaire


hrect=hrect/sum(hrect); % Normalisation de la somme des coefficients à 1

hhann=(h.').*whann; % Pondération de h par la fenêtre de hanning


hhann=hhann/sum(hhann); % Normalisation de la somme des coefficients à 1
[Hrect,F] = freqz(hrect,1,N,Fe); % Réponse en fréquence avec la fenêtre
rectangulaire
[Hhann,F] = freqz(hhann,1,N,Fe); % Réponse en fréquence avec la fenêtre de hanning

 Calcul des coefficients de la réponse impulsionnelle à l'aide de la fonction FIR1


hrectfir1=fir1(Nfir-1,2*fc/Fe,wrect); % Il faut introduire une fréquence de
coupure normalisée par Fe/2
hhannfir1=fir1(Nfir-1,2*fc/Fe,whann); % Il faut introduire une fréquence de
coupure normalisée par Fe/2

[Hrectfir1,F] = freqz(hrectfir1,1,N,Fe); % Réponse en fréquence


[Hhannfir1,F] = freqz(hhannfir1,1,N,Fe); % Réponse en fréquence

5
figure
subplot(2,1,1)
stem(hrect)
hold on
stem(hrectfir1,'r-*')
hold off
title ('Réponses impulsionnelles avec une fenêtre rectangulaire')
xlabel('Echantillon (n)')
ylabel('Amplitude')
grid on
legend('A partir de la réponse cible','Fonction FIR1')
subplot(2,1,2)
stem(hhann)
hold on
stem(hhannfir1,'r-*')
hold off
title ('Réponses impulsionnelles avec une fenêtre de hanning')
xlabel('Echantillon (n)')
ylabel('Amplitude')
legend('A partir de la réponse cible','Fonction FIR1')
grid on

figure
subplot(2,1,1)
plot(F,abs(Hrect),'b*')
hold on
plot(F,abs(Hrectfir1),'r+')
hold off
title ('Module de la réponse en fréquence avec une fenêtre rectangulaire')
xlabel('Fréquence (Hz)')
ylabel('Amplitude')
grid on
legend('A partir de la réponse cible','Fonction FIR1')
subplot(2,1,2)
plot(F,abs(Hhann),'b*')
hold on
plot(F,abs(Hhannfir1),'r+')
hold off
title ('Module de la réponse en fréquence avec une fenêtre de hanning')
xlabel('Fréquence (Hz)')
ylabel('Amplitude')
legend('A partir de la réponse cible','Fonction FIR1')
grid on

2.4 L’outil « filterDesigner »

Réalisez la manipulation proposée dans la partie 2.4 du TP

6
Contenu du Rapport
Le Rapport doit contenir :

 Les commandes Matlab qui ont permis de compléter le programme ;


 Toutes les figures illustrant les manipulations faites, y compris le paragraphe 2.4;
 Les conclusions obtenues

Vous aimerez peut-être aussi