TP T.S

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

SARA RACHIDI/HAMZA LAKROUNE

UNIVERSITE CADI AYYAD


T
FACULTE DES SCIENCES ET TECHNIQUES GUELIZ
DEPARTEMENT PHYSIQUE
-MARRAKECH-

OUTILS DE BASE DES FILTRES NUMERIQUE

I-BUT :

Etudes des outils de base des filtres numériques, ainsi mettre en évidences, au
niveau temporel et fréquentiel, les caractéristiques d’un filtre, d’étudier son régime
transitoire et permanent et de réaliser l’opération de filtrage de deux signaux de fréquences
différentes.

I- NTRODUCTION :

Définition : Un filtre numérique est un système linéaire à temps invariant, dont

La fonction est de modifier la répartition fréquentielle d’un signal.

Un filtre numérique est représentée par :


N M

 Equation récurrente : 
n0
an (k) . y (k-n) = 
m0
b (k).x(k-m) ,

 Réponse impulsionnelle : h(k),


( )
 Réponse en fréquence :H(f) = ()
,
( )
 fonction de transfert :H(z)= ( )
,

III- MANIPULATION :

1ère étapes :
Détermination de la réponse fréquentielle d’un filtre numérique.

Par exemple, on prend le filtre causal suivant régit par l’équation récurrente suivante :

Y(k)=0.0422 x(k) +0.0843 x (k-1) +0.0422 x (k-2) +1.3993 y (k-1) – 0.5779 y (k-2).

1-La réponse en fréquence du filtre en fonction de la fréquence en Hz à l’aide de la


commande « freqz » :

A partir de l’équation récurrente, on a :

b=(0.0422 ,0.0843 ,0.0422)

a=(1, -1.3993, 0.5779)

on calcule la reponse en fréquence donc avec Le programme suivant :

b=[0.0422 ,0.0843 ,0.0422] ;

a=[1, -1.3993, 0.5779] ;

fe=8000 ;

N=512 ;

[H,f]= freqz(b,a,N,fe) ;

2-tracer la courbe du module

On va par la suite tracer la courbe représentant le module de H(f)

A l’aide de la fonction « plot »

Le programme est le suivant :

b=[0.0422 ,0.0843 ,0.0422] ;

a=[1, -1.3993, 0.5779] ;

fe=8000 ;

N=512 ;

[H,f]= freqz(b,a,N,fe) ;

plot(f,abs(H)) ;
grid ;

Figure 1: le module de H(f)

2éme étape :

Excitation par un signal d’entré

Durant cette étape, on va exciter ce filtre par un signal d’entré

x(k)=cos (2π f0kTe) ; avec f0=500Hz ; te=1/fe ; fe=8000 Hz ;

1- on peut prévoir à l’ avance le signal de sortie puisque le signal x(k) est un signal propre de
forme « cosinus » avec une amplitude qui est égale à |H (f0)|.

Définition :

La definition se fait par le programme :

Fe=8000;

Te=1/Fe;

k=[0:1:199];

F0=500;
x=cos(2*pi*(F0/Fe)*k*Te);

Détermination de y(k) :

Pour déterminer le signal de sortie en utilise la commande « filter»

Le programme suivi est :

Fe=8000;

Te=1/Fe;

k=[0:1:199];

F0=500;

x=cos(2*pi*(F0/Fe)*k*Te);

b=[0.0422 ,0.0843 ,0.0422] ;


a=[1, -1.3993, 0.5779] ;
y=filter (b,a,x) ;
les graphes de x(k) et de y(k) :

Avec la commande « plot »

 Graphe de x(k) :
plot(k,x)
Figure 2 : la courbe x(k)

 Graphe de y(k) : plot(k,y)

Figure 3 : la courbe y(k)

Avec la commande « stem »


 Graphe de x(k) : stem(k,x)

Figure 4 : la courbe x(k) échantillonnée

 Graphe de y(k) : stem(k,y)

Figure 4 : la courbe y(k) échantillonnée


2- le gain obtenu d’après la figure «4 ou 3 » est : A= 0,9386.

3- d’après la courbe de la réponse en fréquence H(f), le gain A=1.

Remarque : On obtient presque la même valeur, donc on dit que l’accord est satisfait.

3éme étape :

Dans cette étape, nous allons essayer de modifier la fréquence du signal d’entré c-à-d au
lieu de f0=500Hz, on choisit f0=2500Hz.

4- d’après la courbe de la réponse en fréquence du filtre H(f), la bande passante est


comprise entre B=[0 Hz et 3500].

a B, Donc extraire le gain qui est égale a A1 =0,023

Programme du travaille

Fe=8000;

Te=1/Fe;

k=[0:1:199];

F0=2500;

x1=cos(2*pi*(F0/Fe)*k*Te);

b=[0.0422 ,0.0843 ,0.0422] ;


a=[1, -1.3993, 0.5779] ;
y1=filter (b,a,x1) ;

Traçage :

avec la commande plot :

 Plot (k, x1);


 Plot (k, y1);

D’âpres cette figure de y(k), On trouve presque la même valeur A1=0.025

avec la commande stem :


 stem(k,x1);

 stem(k,y1);

5) D’après ce figure on voit que |H(2500)|=0.02548 ;

6-
4émé etape :

Régime permanent et régime transitoire :

Utiliser la commande pour calculer la réponse impulsionnel

Le programme suivant est :

a=[1,-1.3993,0.5779];
b=[0.0422,0.0843,0.0422];
[h,k]=impz(b,a);
fe=8000;
te=1/fe;
f0=2500;
plot(k,h);
grid;

Tracé de [h,k]

 on l’a fait quand même


Le programme est le suivant :

a=[1,-1.3993,0.5779];
b=[0.0422,0.0843,0.0422];
[h,k]=impz(b,a);
fe=8000;
te=1/fe;
f0=2500;
plot(k,h)
x=cos(2*pi*f0*k*te);
y=filter(b,a,x);
hold on
plot(y,'r') ;
grid ;

-------graphe

figure 9 : la courbe h(k) et y1(k)

7-Interprétation

on peut décomposer le signal de sortie en deux parties :

 ére
1 ;

On l’appelle régime transitoire

 2éme partie est située au- ;

On l’appelle régime permanent


III- CONCLUSION :

Durant cette manipulation on a essayé de comprendre :

 comment filtrer des signaux de fréquences différentes.


 les amplitudes de ces signaux en régime permanent dépendent de l’amplitude de
la réponse en fréquence [H(f)] aux fréquences propres des signaux filtrés.
 Chaque signal filtré avoir deux régime :
o Régime transitoire lorsque H(f) n’est pas nulle.
o Régime permanent lorsque H(f) est nulle. FIN.

CONCEPTION DES FILTRES NUMERIQUES

I-BUT :

L’étude des méthodes de conception, par simulation, des filtres numériques non récursifs
RIF et récursive RII.

II-INTRODUCTION :

1-CONCEPTION DES FILTRES RIF :

2-1-Fréquence normalisée :
°
La fréquence normalisée est donnée par la relation : f= ; ou Fe est la fréquence
d’échantillonnage.

2-2-Filtre RIF passe bas :

Nous voulons réaliser un filtre numérique RIF à partir du gabarit ci-dessous selon le cahier
de charges du filtre numérique à réaliser : commande b=fir1 (N,fc/fe) ;

 Filtre passe bas.



 Fréquence de coupure fc=300Hz.
Hz.

1-optimiser l’ordre N du filtre :


minimum à la fréquence 500 Hz, on trouve que le N qui peut vérifier ça et N=16 ;

Le programme est le suivant :

N=16;
fc=300;
fe=8000;
b=fir1(N,(2*fc)/fe);
a=1;
[H,w]=freqz(a,b,512,fe);
plot(w/(2*pi),20*log10(abs(H)));
grid;

Le gain en db en fonction de la fréquence

2-Exprimer les coefficients an et bm du filtre

Pour avoir les coefficient an et bm , on utilise la commande « coef »=fir1(N,2*f0/fe)

Pour an =1 c’est déjà fixé par le prof, donc il reste juste a déterminer le bm à travers :

Commande b=fir1 (N, 2*fc/fe);

Le programme est le suivant :


N=16;
fc=300;
fe=8000;
b=fir1(N,(2*fc)/fe);
a=1;
On trouve donc les résultats :

- an=[1].
- bn=[0.0051 0.0088 0.0190 0.0361 0.0586 0.0831 0.1053 0.1208
0.1264 0.1208 0.1053 0.0831 0.0586 0.0361 0.0190 0.0088 0.0051].

3-Calculer la nouvelle attaénuation du filtre en db

2-4-choix de la fenêtre de pondération :

N’est pas réalisé

2-CONCEPTION DES FILTRES RII :

N’est pas réalisé

III- MANIPULATION :

A-Numérisation d’un filtre passe bas analogique CR:

Filtre analogique CR :

1-Calculer la fct de transfert :

RC=1ms
.
La fonction de transfert est : H(p)= .

2-En déduire les coefficients a et b de H(P) :

ba= [ 0.001,0] ;

aa= [ 0.001,1] ;

Remarque :

l’indice « a » veut dire analogique

3-calculer la réponse en fréquence H(f) avec la commande freqs

Le programme est le suivant :


ba= [ 0.001,0] ;
aa= [ 0.001,1] ;

[H,f]= freqs(ba,aa) ;

plot(f,abs(H)) ;

grid ;

4-tracé le module :

figure 2 : la courbe |H(f)|

5- Mesurer la fréquence de coupure, et vérifier à la valeur théorique.

0,71 correspond a fc=1,6kHz=160 hz

Théoriquement on a wc=1000=2pfc

fc=1,6kHz=160 Hz

Remarque :

Les valeurs sont identiques


Conclusion :

D’après la figure « 2 » :

 on voit que le type de ce filtre est un passe haut .


 La fréquence de coupure de ce filtre est 160 Hz;
 Théoriquement on a fc= =160 Hz ;
 Donc les deux résultats sont identiques ;

- numérisation

1- transformation de p vers z-

On trouve
.
H(p)=
.

--- les valeurs des coefficients a et b ;

Pour trouver an et bn, on utilise la commande

Avec « n » veut dire numérique

[bn,an]=bilinear(ba,aa,fe);
N veut dire numérique

Le programme est le suivant :

ba= [ 0.001,0] ;

aa= [ 0.001,1] ;

fe=8000 ;

[bn,an]=bilinear(ba,aa,fe);

On trouve :

bn =

0.9412 -0.9412

an =

1.0000 -0.8824
2- calcul de la réponse en fréquence
H(f); On utilise la commande freqz
Le programme est le suivant :

ba= [ 0.001,0] ;

aa= [ 0.001,1] ;

bn=[0.9412 , -0.9412] ;
an=[ 1.0000 , -0.8824] ;

fe=8000 ;
N=512 ;

[Hn,fn]= freqz(bn,an,N,fe) ;
[Ha,fa]=freqz(ba,aa,512,fe);
plot(fn,20*log10(abs(Hn)),'r');
hold on
plot(fa,20*log10(abs(Ha)));

3- tracer : les deux courbes (analogique et numérique)

Figure 4: le module de H(f) analogique et numérique

4- mesurer la fréquence de coupure :


On ana d’après le tracé les choses suivantes :

H=1------------------Gdb=0db

H=0,7--------------Gdb=-3db

fc correspond a -3db est fc=160Hz

5- verifier que cette fréquence de coupure :

La relation qui lie la fréquence de coupure analogique et celle numérique est :


nf=arctg(πfaTe).

Conclusion :

La commande bilinéaire est une commande optimale pour faire la numérisation d’un filtre
analogique.

B.F iltrage d’un signal composite par deux filtres numériques de Tchebychev:

Nous allons utiliser maintenant deux filtres de Tchebychev, l’un passe haut et l’autre passe
bas

Le gabarit est le suivant :

 Filtre passe bas et passe haut.


 Ordre N=4.

 ante.
 Fréquences de coupure respectivement fc1=216 Hz et fc2=293 Hz.
 Le signal est definit par x=10*cos(2*pi*fc1*k*te)+10*sin(2*pi*fc2*k*te);

1-définir la variable de 0 à 149 avec un pas unité :


k=[0:1:149];

2-définir le signal x :

On définit le signal par le programme suivant :

fe=8000;
fc1=128;
fc2=382;
te=1/fe;
k=[0:1:149];
x=10*cos(2*pi*fc1*k*te)+10*sin(2*pi*fc2*k*te);

3-définir les deux filtres :

On définit les deux filtres à l’aide de la commande « cheby1 » par le programme suivant :
N=4;
fe=8000;
r=0.5;
fc1f=216;
fc2f=293;
te=1/fe;
k=[0:1:149];
x=10*cos(2*pi*128*k*te)+10*sin(2*pi*382*k*te);
[b1,a1]=cheby1(N,r,(2*fc1f)/fe);
[b2,a2]=cheby1(N,r,(2*fc2f)/fe,'high');

4-définir la réponse en fréquence des deux filtres H1(f) et H2(f) et tracer :

La définition se fait par la commande « freqz »

Suivant le programme suivant :


N=4;
fe=8000;
r=0.5;
fc1f=216;
fc2f=293;
te=1/fe;
k=[0:1:149];
x=10*cos(2*pi*128*k*te)+10*sin(2*pi*382*k*te);
[b1,a1]=cheby1(N,r,(2*fc1f)/fe);
[b2,a2]=cheby1(N,r,(2*fc2f)/fe,'high');
[H1,f1]= freqz(b1,a1,512,fe) ;

[H2,f2]= freqz(b2,a2,512,fe) ;

plot(f1,abs(H1));

hold on;

plot(f2,abs(H2
----tracé :

Figure 5: le module de H1(f)et H2(f)

5-calculer les signaux Y1 et Y2 :

On réalise ça à l’aide de la commande filter suivant le programme suivant :

 N=4;
 fe=8000;
 r=0.5;
 fc1f=216;
 fc2f=293;
 te=1/fe;
 k=[0:1:149];
 x=10*cos(2*pi*128*k*te)+10*sin(2*pi*382*k*te);
 [b1,a1]=cheby1(N,r,(2*fc1f)/fe);
 [b2,a2]=cheby1(N,r,(2*fc2f)/fe,'high');
 [H1,f1]= freqz(b1,a1,512,fe) ;
 [H2,f2]= freqz(b2,a2,512,fe) ;
 y1=filter(b1,a1,x);
 y2=filter(b2,a2,x);
 plot(k1,abs(y1)) ;
 hold on ;
 plot(k2,abs(y2),'r') ;
 grid ;

 Tracé :

12
y1(k) y2((k)

10

0
0 50 100 150

Figure 6: les courbes de y1(k)et y2(k)

D’après la figure on voit que signal y1(k)[ à travers le filtre passe bas] à une ondulation

III- CONCLUSION :

Lors de cette manipulation on a appris comment :

 Réaliser un filtre numérique RIF à partir du gabarit selon le cahier de charges.


 Utiliser plusieurs fenêtres de pondérations afin de bien observer l’influence de ces
fenêtres sur la pente et la bande atténuée du filtre.
 Filtrage d’un signal composite par deux filtres numériques de Tchebychev.
LE PITCH DU PAROLE

I-BUT :

Cette manipulation a pour but de mettre en œuvre la procédure de mesure de la fréquence


fondamentale de la parole (pitch) par autocorrélation

II- MANIPULATION :

A-SON VOISE ET SON NON VOISE :

1-Enregistrer votre son voisé (la lettre <A> ) sur une durée de T=1s avec une fréquence
avec la commande x=wavrecord(N,fe)

Le programme est le suivant :

T=1;
fe=8000;
N=T*fe;
x=wavrecord(N,fe);

Astute:

après avoir validé le programme sur Matlab , il faut appuyer sur entrer en dictant
« AAAAAAAAA »

On peut voir le signal enregistré avec la commande plot :


T=1;
fe=8000;
N=T*fe;
x=wavrecord(N,fe);
plot(x);

On trouve :
2-Définir l’axe temporel :

Le programme est le suivant :


T=1;
fe=8000;
Te=1/fe;
t=[0:Te:T-Te] ;

3-Définir l’axe fréquentiel :

Le programme est le suivant :


T=1;
fe=8000;
N=T*fe;
f=[0:fe/N:fe-(fe/N)];

4-calculer le spectre X du signal x par la commande X=fft(x) ;


Le programme est le suivant :

T=1;
fe=8000;
N=T*fe;
f=[0:fe/N:fe-(fe/N)];
X=fft(x);

5-Tracer le spectre d’amplitude en fct de f avec la commande plot(f,abs(X)) ;


Le programme est le suivant :

T=1;
fe=8000;
N=T*fe;
f=[0:fe/N:fe-(fe/N)];
X=fft(x);
plot(f,abs(X));
grid;

-----le spectre n’est pas décroissant par ce que le son qui sort de la bouche qui est lui-même
un filtre, donc normalement puisqu’il est périodique ça doit être décroissant ms la bouche
à jouer sur les amplitudes (basses fréquence, hautes fréquences).

6-refaire le mm calcul pour une partie du signal x :

Le programme est le suivant :

x=x(3000 :4000 ) ;
-tracé ;
x=x(3000 :4000 ) ;

plot(x) ;

grid ;

---- commentaire :

Les fréquences fondamentales:

f=226,

----- pour N=1001 ; on va enregistrer un nouveau signal x , et on poursuit les même étapes
pour avoir les fondamentales.

Le programme est le suivant :

T=1;
fe=8000;
N=1001 ;
X=wavrecord(N,fe) ;
f=[0:fe/N:fe-(fe/N)];
X=fft(x);
Plot(f,abs(X)) ;

grid;

---la figure de X
x=x(3000 :4000 ) ;

plot(x);

----- les fréquences :

On déduit après avoir faire un zoom,-----l’harmonique fondamental est à f=200 Hz.

des amplitudes sont : (f=400,f=800,f=1200) .

B-AUTOCCORELATION :

Remarque :

Autaucorélation est un signal qui varié dans le temps, ca d , il n’a pas

d’harmonique 1-calculer l’autocorrélation du signal x

Le programme est le suivant :


R=xcorr(x,x) ;

2-traçage :

R=xcorr(x,x) ;

Plot(R) ;
--- commentaire :

Le signal R est périodique de période T =1s et pair ;

2- refaite la même chose (dépasser) ;

3- utiliser juste la moitié de cette

autoccorélation le programme est le suivant :


[Rmax,kmax]=max(R1) ;

R1=R(kmax :end) ;

Plot(R1);

Traçage :
4- localiser :

Localiser le premier pic ,

On prend le 1 er pic après le max :

On trouve :

 K0=60

Te, on trouve :

Avec la relation : T0=(60-1)*Te

On trouve T0=0 .0074

 Fréquence fondamentale

F0 On trouve avec la relation :

F0=1/T0 ;
III- CONCLUSION :

Dans cette manipulation, on a fait :

-L’enregistrement d’un son voisé et un son non voisé.

-Autoccorélation des signaux.

RECONNAISSANCE DES NUMEROS DTMF D’UN TELEFONE FIXE


I-BUT :

Le but de cette manipulation et de détecter les numéros DTMF d’un téléphone fixe a
partir de l’enregistrement des sons des tonalités de ces numéros.
Dans ce TP, a partir du son émet à partie de l’haut parleur, on peut tirer l’information

II- MANIPULATION :

A-Mesure des fréquence DTMF :

 On fait ouvrir un script qui va contenir des commandes pour ne


pas les répéter par la suite :
 Appeler le fichier des enregistrements DTMF qui va contenir lui -
même deux fichiers DTMF1 et DTMF2.

1- -Utiliser la commande [x,fe,Nbits]=wavrread(‘…..’) :

Pour extraire le signal qui correspond par exemple à un numéro 1 du


dossier DTMF1, on utilise la commande précédente après avoir
spécifié le chemin d’accès sur « Matlab » .

Le programme est le suivant :

2- -tracer le signal x avec la commande plot :

Le programme est le suivant :


[x,fe,Nbits]=wavread(‘1.wav’) ;

plot(x) ;

grid ;

Figure 1 : Signal x(k) (Enregistré 1 du dossier DTMF1)

 On va faire la même chose cette fois –ci , on vas extraire un


autre enregistrement du dossier DTMF3 :

Le programme suivi est :

[x,fe,Nbits]=wavread(‘1.wav’) ;

plot(x) ;

grid ;
Figure 2 : Signal x(k) avec stéréo (Enregistré 1 du dossier DTMF3)

Comparaison :
er
D’après les deux coures 1 et 2, on peut dire que le 1 fichier est un
enregistrement mono stéréo par un seul microphone par rapport au
2éme fichier : il s’agit d’un enregistrement stéréo qui utilisent deux
microphones.

3- -éliminer la voix gauche par le co mmande x=x(1 :end/2) ;

La voix gauche est la courbe verte, donc on doit l’éliminer par la


commande précédente x=x(1 :end/2) ;

Le programme suivi est :

[x,fe,Nbits]=wavread('1.wav');
x=x(1 :end/2) ;
plot(x);
grid;

Figure 3 : Signal x(k) sans stéréo avec une valeur moyenne non
nulle (Enregistré 1 du dossier DTMF3)

4- -éliminer la valeur moyenne du signal par la commande x=x -


mean(x) ;

D’après la figure 3, on voit clairement à une valeur moyenne qui n’est


pas nulle, do nc utilise le programme suivant pour l’éliminer :

[x,fe,Nbits]=wavread('1.wav');
x=x(1 :end/2) ;
x=x-mean(x);
plot(x);
grid;
Figure 4 : Signal x(k) sans stéréo avec une valeur moyenne
nulle (Enregistré 1 du dossier DTMF3)

5- -calculer le nombre d’échantillon du signal par la commande


N=lengh(x) ;

On conserve le même programme de tout à l’heure et on lui ajoute la


commande

N=lengh(x) ;

Le programme est :

[x,fe,Nbits]=wavread('1.wav');
x=x(1 :end/2) ;
x=x-mean(x);
N=length(x);

On trouve exactement : N =8784

6- -supprimer
7- -Définir l’axe fréquentielle f=[0 :fe/N :fe -fe/N] ;

Le programme de définition est :

[x,fe,Nbits]=wavread('1.wav');
x=x(1 :end/2) ;
x=x-mean(x);
N=length(x);
fe=8000;
f=[0:fe/N:fe-(fe/N)];

8- -calculer le spectre du signal x avec la commande X=fft(x) ;:

Le programme est le suivant :

[x,fe,Nbits]=wavread('1.wav');
x=x(1 :end/2) ;
x=x-mean(x);
N=length(x);
fe=8000;
f=[0:fe/N:fe-fe/N];
X=fft(x);
On aura les valeurs qui sont :
Figure 5 : qcq valeurs de valeurs de spectre

9- -tracer le spectre X du signal en

Le programme qui sert à tracer est :

[x,fe,Nbits]=wavread('1.wav');
x=x(1 :end/2) ;
x=x-mean(x);
N=length(x);
fe=8000;
f=[0:fe/N:fe-fe/N];
X=fft(x);
plot(f,abs(X));
grid;
Figure 6 : le spectre d’amplitude en fct de f

10 -Mesurer en Hz, les fréquences dans l’intervalles [0 :fe/2]

On fait un zoom sur le 1 ere et le 2éme harmonique, on va trouver


respectivement (600HZ, 1200) -------- correspond au chiffre numéro 1
dans les tableaux dés fréquence normalisés dans le TP.

Remarque :

-Pour les autres Harmonique, ce sont a cause de la distorsion non


linéaire et de l’ intermodulation.
-pour trouver avec précision les valeurs des fréquences de
harmonique, on utile l’icône « data cursor ».

11 -c’est déjà fait

B-Conception des filtres passes bandes :

Dans cette partie on va concevoir un filtre passe bande pour filtres les fréquence qui vas
nous renseigner sur le numéro approprié , on aura donc de 7 filtres passe bande , cela veut
dire que le signal d’entré va passer a travers les 7 filtres à la fin , on va avoir deux fréquence
correspond a un numéro , on va faire les questions 1-2-3 les fréquence correspondant au
numéro « 1 » , et c’est le même enchainement pour les autres filtres , on donne dans la
question directement les programmes de conception des filtres.

1- -utiliser la commande :[b,a]=butter() ; pour concevoir un filtr e passe


bande :

Le numéro : 1 ------- (f1=697 Hz,f5=1209 Hz)

La méthode de travaille : on fait f1 -2O et f5+20, car on a considéré


que la bande passante des filtres est B=40Hz

Le programme est le suivant :

- Le p rogramme des autres filtres est :

bandpass');
2- -Calculer H(f) et faire le traçage avec la
commande [H,f]=freqz(b,a,512,fe) ;

Le numéro : 1 ----- le programme est le suivant :

[H1,f1]=freqz(b1,a1,512,fe);

plot(f1,abs(H1));

grid;

calcule avec : [H1,f1]=freqz(b1,a1,512,fe);

….ect

traçage avec : plot(f1,abs(H1));


Figure 7 : le spectre d’amplitude en fct de f

- Le programme des autres filtres est :

e,'bandpass');

[H2,f2]=freqz(b2,a2,512,fe);

plot(f2,abs(H2));

grid;

[H3,f3]=freqz(b3,a3,512,fe);

plot(f3,abs(H3));

grid;

[H4,f4]=freqz(b4,a4,512,fe);

plot(f4,abs(H4));

grid;
[H5,f5]=freqz(b5,a5,512,fe);

plot(f5,abs(H5));

grid;

[H6,f6]=freqz(b6,a6,512,fe);

plot(f6,abs(H6));

grid;

[H7,f7]=freqz(b7,a7,512,fe);

plot(f7,abs(H7));

grid;

C-Conception des filtres passes bandes :

1-Filtrer le signal enregistré par l’ensemble des 7 filtres par la commande y=filter(b,a,x1):

Avec :

X1 :l’enregistré 1.wav de DTMF3

Le numéro : 1 ----- le programme est le suivant :

y1=filter(b1,a1,x);

- Le programme des autres filtres est :

y2=filter(b2,a2,x);

y3=filter(b3,a3,x);

y4=filter(b4,a4,x);

y5=filter(b5,a5,x) ;

y6=filter(b6,a6,x);

y7=filter(b7,a7,x);
2-mesurer les 7 puissances avec la commande P1=var(y1) ;

Le numéro : 1 ----- le programme est le suivant :

p1=var(y1);

- Le programme des autres filtres est :

p2=var(y2);

p3=var(y3);

p4=var(y4);

p5=var(y5);

p6=var(y6);

p7=var(y7);

3-On fait affichage avec stem :

Le programme est le suivant :

p=[p1,p2,p3,p4,p5,p6,p7];

stem(p);
Figure 8 : le spectre d’amplitude en fct de f

Remarque :

Pour ne pas avoir des valeurs assez grande, on travaille avec les fréquences normalisés avec
la commande « max(p) ; »

LE PROGRAMME TOUT ENTIER :

[H,f]=freqz(b1,a1,512,fe);

plot(f,abs(H))

[H,f]=freqz(b2,a2,512,fe);

plot(f,abs(H))
[H,f]=freqz(b3,a3,512,fe);

plot(f,abs(H))

[H,f]=freqz(b4,a4,512,fe);

plot(f,abs(H))

[H,f]=freqz(b5,a5,512,fe);

plot(f,abs(H))

dpass');

[H,f]=freqz(b6,a6,512,fe);

plot(f,abs(H))

[H,f]=freqz(b7,a7,512,fe);

plot(f,abs(H))

y1=filter(b1,a1,x);

p1=var(y1);

y2=filter(b2,a2,x);

p2=var(y2);

y3=filter(b3,a3,x);

p3=var(y3);

y4=filter(b4,a4,x);
p4=var(y4);

y5=filter(b5,a5,x);

p5=var(y5);

y6=filter(b6,a6,x);

p6=var(y6);

y7=filter(b7,a7,x);

p7=var(y7);

clf

p=[p1,p2,p3,p4,p5,p6,p7] ;

a=max(p) ;

p=p/a ;

stem(p) ;

On va voir
Figure 9 : le spectre d’amplitude en fct de f

Conclusion :

On le 1 et le 5, on peut également faire tout

combinaison, III- CONCLUSION :

Dans cette manipulation, on a fait la détection les numéros DTMF d’un téléphone fixe à
partie de l’enregistrement des sons des tonalités de ces numéros.

SYNTHESE DES NOTES MUSICALES D’UN PIANO.

I-BUT :

Cette manipulation a pour but de synthétiser les notes musicales d’un piano après avoir les
modéliser : La méthode additive.
II- MANIPULATION :

Les méthodes de synthèse du son d’une note musicale sont nombreux, en particulier , il
existe la méthode additive qui consiste a modéliser un signal original déjà enregistrée puis
faire synthèse en lui attaquant par la courbe d’ADSR pour se rapprocher du signal original.

A-MODELISATION :

1- extraire le fichier son par la commande x,fe,Nbits]=wavrread(‘…..’) :

Le programme est le suivant :

[x,fe,Nbits]=wavread('1piano_do.wav');

 Traçage du signal:

Le programme est le suivant:

[x,fe,Nbits]=wavread('1piano_do.wav');

plot(x);

grid;

Figure 1 : Signal x(k) en stem et plot (Enregistré 1 du dossier DTMF1)

Remarque : éliminer la voix gauche


[x,fe,Nbits]=wavread('1piano_do.wav');
x=x(1:end/2);
plot(x);
grid;

2- calculer le nombre d’échantillon du signal par la commande N=lengh(x) :

Le programme est le suivant :

[x,fe,Nbits]=wavread('1piano_do.wav');
x=x(1:end/2);
N=length(x) ;
plot(x);
grid;
On trouve exactement : N =75797

 La durée T du signal est :

T=Te*N ;

3- Exprimer l’axe temporel par la commande t=[0 :Te:T-Te] :

Le programme de définition est :

Declaration des variables:


[x,fe,Nbits]=wavread('1piano_do.wav');
x=x(1:end/2);
N=length(x);
Fe=8000;
Te=1/Fe;
T=N*Te;
t=[0:Te:T-Te];

4- Tracer la courbe temporelle du signal et exprimer les amplitudes principales :

[x,fe,Nbits]=wavread('1piano_do.wav');
x=x(1:end/2);
N=75797;
Fe=8000;
Te=1/Fe;
T=N*Te;
t=[0:Te:T-Te];
plot(t,x) ;

 Traçage par la commande plot(t,x) :


Figure 2 : courbe

 Exprimer les amplitudes principales


 Le programme est le suivant :

-----adsr :

b=[400,500,1600,2300,3400,4700,6000,16000] ;

adsr=[0,0.5,0.2,0.16,0.09,0.08,0.07,0] ;

plot(b,adsr);

>> grid;

 Traçage de la courbe d’adsr

Figure 3 : courbe

Remarque :
Avec hold on , on trace les deux signaux , et on les compare :
Le programme est le suivant :
[x,fe,Nbits]=wavread('1piano_do.wav');
x=x(1:end/2);
N=length(x);
plot(x);
grid;
hold on;
b=[400,500,1600,2300,3400,4700,6000,16000] ;
adsr=[0,0.5,0.2,0.16,0.09,0.08,0.07,0] ;
plot(b,adsr);
grid;

Le tracé :

Comparaison :

Les deux courbes sont presque les mêmes

7 -Définir l’axe fréquentielle f=[0 :fe/N :fe -fe/N] ;

Le programme de définition est :

[x,fe,Nbits]=wavread('1piano_do.wav');
x=x(1:end/2);
N=length(x);
Fe=8000;
f=[0:Fe/N:Fe-(Fe/N)];
plot(x);

6-calculer le spectre X du signal x par la commande Xfft(x);

Le programme de définition est :

[x,fe,Nbits]=wavread('1piano_do.wav');
x=x(1:end/2);
N=length(x);
Fe=8000;
f=[0:Fe/N:Fe-(Fe/N)];
X=fft(x);
On aura les valeurs qui sont :

Voir qcq valeurs

Figure 4 : qcq valeurs de valeurs de spectre

 Tracer son spectre d’amplitude


 Le programme est le suivant :
 [x,fe,Nbits]=wavread('1piano_do.wav');
 x=x(1:end/2);
 N=length(x);
 Fe=8000;
 f=[0:Fe/N:Fe-(Fe/N)];
 X=fft(x);
 plot(f,abs(X));
 grid;

Figure 5 :
7-Relever les amplitudes des différentes harmoniques et les placer sur un vecteur nommé
A:

A partir du tracé, on trouve :

La fréquence fondamentale, la 1ére harmonique

F0=74 HZ

F0 A1

2f0-----

3f0=

A=[180,220,200,120,50,20] ;

B-SYNTHESE :
1-créer un signal x1 contenant des cosinus de fréquence harmoniques celles qui sont
relevés dans le vecteur A :

On a trouvé :

Déclaration de l’axe temporelle ;


N=75797;
Fe=8000;
Te=1/Fe;
T=N*Te;
t=[0:Te:T-Te];
F0=75 ;
A=[180,220,200,120,50,20] ;
x1=180*cos(2*pi*F0*t) +220* cos(2*pi*2*F0*t)
+200*cos(2*pi*3*F0*t) +120* cos(2*pi*4*F0*t)
+50*cos(2*pi*5*F0*t) +20* cos(2*pi*6*F0*t) ;
plot(x1);
grid,

2-interpoler la courbe ADSR en utilisant la fonction interp1 selon :


ADSR=inter1(k,adsr,t/Te,’linear’) ;

Le programme est le suivant :


N=75797;
Fe=8000;
Te=1/Fe;
T=N*Te;
t=[0:Te:T-Te];
F0=75 ;
A=[180,220,200,120,50,20] ;
x1=180*cos(2*pi*F0*t) +220* cos(2*pi*2*F0*t)
+200*cos(2*pi*3*F0*t) +120* cos(2*pi*4*F0*t)
+50*cos(2*pi*5*F0*t) +20* cos(2*pi*6*F0*t) ;
b=[400,500,1600,2300,3400,4700,6000,16000] ;
adsr=[0,0.5,0.2,0.16,0.09,0.08,0.07,0] ;
ADSR=interp1(b,adsr,t/Te,'linear') ;

3-multiplier le signal x1pa la courbe ADSR (x2=ADSR .*x1) ;

Le programme est le suivant

[x,fe,Nbits]=wavread('1piano_do.wav');
x=x(1:end/2);
N=75797;
Fe=8000;
Te=1/Fe;
T=N*Te;
t=[0:Te:T-Te];
F0=75 ;
A=[180,220,200,120,50,20] ;
x1=180*cos(2*pi*F0*t) +220* cos(2*pi*2*F0*t)
+200*cos(2*pi*3*F0*t) +120* cos(2*pi*4*F0*t)
+50*cos(2*pi*5*F0*t) +20* cos(2*pi*6*F0*t) ;
b=[400,500,1600,2300,3400,4700,6000,16000] ;
adsr=[0,0.5,0.2,0.16,0.09,0.08,0.07,0] ;
ADSR=interp1(b,adsr,t/Te,'linear') ;
x2=x1.*ADSR ;
x2=x2/max(x2);
plot(x/max(x));
hold on;
plot(x2,'r');
grid;

 Traçage du spectre de :
4-Ecouter

Le programme est le suivant :

[x,fe,Nbits]=wavread('1piano_do.wav');
x=x(1:end/2);
N=75797;
Fe=8000;
Te=1/Fe;
T=N*Te;
t=[0:Te:T-Te];
F0=75 ;
A=[180,220,200,120,50,20] ;
x1=180*cos(2*pi*F0*t) +220* cos(2*pi*2*F0*t)
+200*cos(2*pi*3*F0*t) +120* cos(2*pi*4*F0*t)
+50*cos(2*pi*5*F0*t) +20* cos(2*pi*6*F0*t) ;
b=[400,500,1600,2300,3400,4700,6000,16000] ;
adsr=[0,0.5,0.2,0.16,0.09,0.08,0.07,0] ;
ADSR=interp1(b,adsr,t/Te,'linear') ;
x2=x1.*ADSR ;
x2=x2/max(x2);
plot(x/max(x));
hold on;
plot(x2,'r');
grid;
4- écouter les deux par la commande soundsc(x,fe), pause(2),soundsc(x2,fe)

5- Conclusion

Presque le même signal

III- CONCLUSION :

Dans ce TP on a pu faire la réalisation et la synthèse d’une note musicale d’un piano à partir
de la méthode additive.

Vous aimerez peut-être aussi