Filière D'Ingénieur Energie Renouvelable Et Mobilité Electrique (Enr@Me)
Filière D'Ingénieur Energie Renouvelable Et Mobilité Electrique (Enr@Me)
Filière D'Ingénieur Energie Renouvelable Et Mobilité Electrique (Enr@Me)
Traitement du signal
1
EnR@ME TP de Traitement du signal Sefyani Fouad
AVANT PROPOS
Les Travaux Pratiques de traitement du signal présentés dans ce manuel constituent une illustration de
ce que les méthodes de traitement des signaux numériques sont capables de réaliser. Elles permettent à l’étudiant
de mieux comprendre ses implications pratiques. L’outil de base de ces travaux pratiques est le traitement
numérique mis en œuvre par le puissant logiciel MATLAB.
Les séances de travaux pratiques sont au nombre de cinq. Il s’agit des manipulations suivantes : [1]
Outils de base des filtres numériques [2] Conception des filtres numériques. [3] Mesure du pitch de la parole. [4]
Reconnaissance des numéros DTMF d’un téléphone fixe. [5] Synthèse des notes musicales d’un piano.
L’utilisation des signaux physiques donne une dimension pratique quant à l’utilisation des outils et
méthodes de traitement des signaux numériques. La maîtrise du savoir-faire en matière de traitement du signal
numérique est l’objectif escompté à travers les différentes manipulations présentées dans ce manuel de Travaux
Pratiques.
2
EnR@ME TP de Traitement du signal Sefyani Fouad
I - INTRODUCTION
MATLAB (MATrix LABoratory) est un logiciel de calcul matriciel mis au point par l’université
d’Albuquerque (Nouveau-Mexique, Etats-Unis) et développé par la société MathWorks. MATLAB est écrit en
langage C et conçu à la base pour un être un environnement informatique de calcul scientifique et de
visualisation de données. Il peut être considéré comme un langage de programmation au même titre que le
langage C, Pascal ou Basic. C’est un langage interprété, c’est-à-dire qu’il n’est pas nécessaire de compiler un
programme. Les instructions, écrites dans la fenêtre de commande, sont exécutées immédiatement après avoir été
tapées (après la frappe de return).
Dans le cadre universitaire, MATLAB constitue un outil standard pour les cours d’algèbre linéaire ainsi
que pour des cours plus avancés dans d’autres domaines. Dans l’industrie il est utilisé pour la recherche ainsi
pour la résolution des problèmes pratiques de l’ingénieur et des problèmes mathématiques.
MATLAB en tant que logiciel de conception des systèmes de traitement du signal est largement
répandu, aujourd’hui, autant dans les universités que dans les centres de recherche et développement, ainsi que
dans l’industrie.
MATLAB est un outil puissant qui permet la résolution de nombreux problèmes en beaucoup moins de
temps qu’il ne faudrait pour les formuler en C ou en Pascal.
MATLAB est un langage parfaitement adapté au traitement du signal. C’est aussi un excellent outil de
traitement numérique qui présente de nombreux avantages pour l’étude et même la conception des systèmes de
traitement numériques des signaux. Parmi ces avantages on peut citer :
La syntaxe MATLAB est très proche du formalisme de l’algèbre linéaire, ce qui permet de transcrire
rapidement en code des opérations comme le produit scalaire de deux vecteurs (corrélation) ou encore le
produit d’une matrice et d’un vecteur (transformée).
Toutes les variables sont par définition des matrices de complexes, ce qui signifie qu’on n’a pas à
déclarer une variable avant de l’utiliser (exemple la ligne a = 1 crée la variable a puis lui affecte la
valeur 1).
MATLAB comprends de nombreuses librairies, notamment pour le traitement numérique des signaux,
ce qui permet de réaliser rapidement des opérations comme le filtrage numérique et les transformées
discrètes et même de concevoir des filtres numériques (Butterworth, Chebyshev,…).
MATLAB comprend également une bonne librairie graphique, ce qui permet d’observer facilement les
caractéristiques des signaux, leurs analyses spectrales et le comportement des systèmes numériques
(réponses impulsionnelle, réponse en fréquence, fonction de transfert,…).
MATLAB compte plus de 500 fonctions prédéfinis et près de 80 000 fonctions ! dans ses Toolbox.
Leurs natures étant très diversifiées. Même les utilisateurs les plus chevronnés ne prétendent pas
connaître parfaitement la totalité des fonctions de MATLAB.
1 – Répertoire de travail :
Il est souhaitable de travailler dans votre répertoire et non dans le répertoire de MATLAB. De même
vous pouvez organiser vos fichiers dans des sous répertoires.
Pour que vos fonctions et scripts soient accessibles à partir de la ligne de commande MATLAB il faut,
au début de chaque session MATLAB, déclarer vos répertoires de travail. Ceci est réalisé à l’aide de la
commande path. Cette commande permet de déclarer le chemin à suivre par MATLAB pour exécuter
vos fichiers.
Il faut aussi se placer dans votre répertoire de travail. Pour cela il est possible de se déplacer dans
l’arborescence du disque de travail à l’aide des commandes cd et dir (même syntaxe que MS-DOS).
Par défaut, les scripts et fonctions sont enregistrés dans le répertoire work sous MATLAB.
Une variable est déclaré en scalaire (a = 5), complexe (a = 5 + 2j) ou format texte (a = ‘bonjour’).
3
EnR@ME TP de Traitement du signal Sefyani Fouad
Lorsque le nombre de variables déclarés dans une cession MATLAB est élevé, il se peut qu’il soit utile
de les sauvegarder dans un fichier d’extension .mat pour une réutilisation ultérieure. Ceci est rendu
possible à l’aide de la commande save dont la syntaxe est :
Exemple :
save toto.mat A, B, C
Si le nom des variables est omis, tout l’espace de travail est sauvé.
Si l’extension du fichier est omise elle sera automatiquement .mat
Si de plus, le nom du fichier est omis, la sauvegarde se fera dans le fichier matlab.mat.
Pour recharger les variables sauvées dans un fichier .mat, il suffit de taper : load nom du fichier.
Si le nom du fichier est omis, MATLAB chargera le fichier matlab.mat
Pour effacer plusieurs variables dans l’espace de travail on utilise la commande clear.
Exemple :
clear x supprime la variable x
3 – Scripts
Il est parfois (souvent) souhaitable, pour ne pas avoir à taper plusieurs fois une même séquence
d’instructions, de la stocker dans un fichier. Ainsi on pourra réutiliser cette séquence dans une autre
session de travail. Un tel fichier est dénommé script ou fichier de commande.
Sous windows, Pour créer un nouveau fichier de commande, choisir New M-file dans le menu File.
Une fenêtre Untitled apparaît alors, dans laquelle la suite de commande désirées peut être éditée comme
dans un traitement de texte et de sauver le fichier avec une extension .m
Pour ouvrir un fichier script, toto.m par exemple, dans la fenêtre de commande MATLAB il suffit de
taper open toto.m
Pour enregistrer le fichier, choisir Save as… dans le menu File, introduire le nom désiré, par exemple
toto, sélectionner le dossier de destination, puis enregistrer. Le nom du fichier doit comporter
l'extension .m
Par défaut, les fichiers .m sont stockés dans le dossier work.
En tapant le nom du fichier sous MATLAB, la suite d’instructions s’exécute.
Si la fenêtre du script est active, par exemple lors de l’édition du fichier, il suffit de choisir la
commande save dans le menu File pour enregistrer les modifications.
Les variables définies dans l’espace de travail sont accessibles pour le script. De même les variables
définies dans le script sont accessibles dans l’espace de travail. Les fichiers de commandes partagent les
variables définis dans la fenêtre de commande. Il s’agit donc de variables globales.
Dans le fichier script, il est possible, et même recommandé, d’introduire des commentaires. Ceci est
réalisé à l’aide du caractère %. Toute commande située après % n’est pas prise en compte par
MATLAB jusqu’à la ligne suivante.
MATLAB ne voit pas les espaces blancs entre les différents caractères des instructions de commandes.
Par conséquent on peut aérer suffisamment le fichier pour qu’il soit facilement lisible.
4 – Fonctions
nom fonction est une chaîne de caractère qui correspond au nom de la fonction. Ce nom doit être
différent de celui des autres fonctions déjà disponibles. Le fichier de commandes doit porter le même
nom que la fonction. E1, E2,… sont les variables transmises à la fonction lorsqu’elle est invoquée. S1,
4
EnR@ME TP de Traitement du signal Sefyani Fouad
S2,… sont les variables retournées par la fonction après son exécution. Ces dernières variables définies
à l’intérieur de la fonction sont locales.
Par défaut, les fichiers .m contenant les fonctions sont stockés dans le dossier work.
Exemple :
% la fonction calcul la somme et le produit de deux nombres.
function [a, b] = somprod (x,y)
% Cette fonction retourne la somme et le produit de deux nombres.
a=x+y;
b=x*y;
Le nom de la fonction doit impérativement être le même que le nom du fichier dans lequel elle est
stockée, sinon MATLAB ne prendra pas en compte ce nom mais uniquement celui du fichier.
Les variables de l’espace de travail ne sont pas accessibles à la fonction sauf si elles sont entrées comme
variable d’entrée. De même les variables définies dans une fonction ne sont pas accessibles dans
l’espace de travail.
Il est vivement recommandé, avant d’écrire une fonction, de consulter la documentation ou le help afin
de savoir s’il n’existe pas déjà une fonction similaire et peut être mieux écrite.
Avant d’utiliser une fonction MATLAB pour la première fois il est souhaitable de consulter la
documentation ou le help pour vérifier qu’elle réalise bien ce que vous désirez.
5 – Help
MATLAB est pourvu d’une fonction d’aide très utile : help. Ainsi si vous tapez help sur la ligne de
commande apparaissent tous les répertoires accessibles depuis MATLAB ainsi qu’une explication (en
anglais) concernant ces répertoires.
Si vous tapez help suivi du nom du répertoire, MATLAB affiche une explication brève sur toutes les
fonctions et scripts de ce répertoire.
Enfin si vous tapez help suivi du fichier script ou fonction apparaît une explication détaillée sur
l’utilisation de la fonction ou du script.
1 - Commande générales :
whos : Affiche les variables actuellement présentes en mémoire ainsi qu’une série
d’informations comme leur nature, leur taille en nombre de lignes et de
colonnes pour les matrices, leur taille en bytes, etc...
exist (‘Nom variable’) : Affiche la valeur 1 si la variable Nom Variable existe, et la valeur 0 si la
variable n’existe pas.
save Nom Fichier : Enregistre dans le fichier Nom Fichier l’ensemble des variables définies et
actuellement présentes en mémoire.
Load Nom Fichier : Charge les variables stockées dans le fichier Nom Fichier.
X = input (‘message’) : Cette commande permet de saisir une donnée, elle produit l’apparition à
l’écran du ‘message’ et attend l’introduction des éléments de X. Essayer avec
5
EnR@ME TP de Traitement du signal Sefyani Fouad
pause : provoque un arrête momentané sur l’écran. presser sur n’importe quelle
touche pour reprendre la main sur le clavier.
2 - Caractères spéciaux
3 - Valeur particulières
ans : Variable créée automatiquement quand le résultat d’une expression n’est pas
affecté à une variable.
pi : Constante correspondant au nombre .
i, j : Constantes correspondant à 1 .
4 - Définitions de scalaires
5 - Définition de vecteurs
y = [y0 : D : yMax] : Définit un vecteur ligne dont la première composante est y0 et la dernière
yMax. Les valeurs intermédiaires sont obtenues par adjonction successive de
l’incrément D.
y = [y0 : yMax] : Si l’incrément D est omis, il vaut par défaut 1.
Donc y = [y0, y0+1, ..., yMax-1, yMax].
y = [1 : 5] : Définit le vecteur : y = [1 2 3 4 5].
y = linspace ( y0, yMax, n): Définit un vecteur ligne dont les n composants sont linéairement espacés
entre les valeurs y0 et yMax.
w = logspace (d1, d2, n) : Définit un vecteur ligne dont les n composants sont logarithmiquement
espacées entre les valeurs 10dl et 10 d2. C’est une fonction adaptée à la
création de vecteurs de pulsations utilisées pour visualiser des réponses
fréquentielles.
6
EnR@ME TP de Traitement du signal Sefyani Fouad
6 - Définitions de matrices
1 2 3
A = [1 2 3 ; 4 5 6; 7 8 9] : Définit la matrice : A 4 5 6
7 8 9
r = [10, 11, 12]
1 2 3
4 5 6
A = [A; r] : Modifie A par adjonction de r comme nouvelle ligne A
7 8 9
10 11 12
ones (n, m) : Définit une matrice de dimension n x m avec tous les éléments égaux à 1
1 1 1
O = ones (2, 3) : Définit la matrice : O
1 1 1
zeros (n, m) : Définit une matrice de dimension n x m avec tous les éléments égaux à 0
size (A) : Définit un vecteur dont la première composante est le nombre de lignes de A
et la seconde son nombre de colonnes.
E = eye (size (A)) : Définit une matrice E de même dimension que A, qui contient des 1 sur la
diagonale principale et des 0 partout ailleurs.
1 0 0
0 1 0
E
0 0 1
0 0 0
diag(v) : Si v est un vecteur à n composantes, alors diag(v) est une matrice carrée de
dimension n qui porte sur la diagonale principale les éléments du vecteur v.
1 0 0
D = diag ([1 2 3]) : Définit la matrice diagonale : D 0 2 0
0 0 3
V=[] : Définit une matrice V de dimension 0 x 0.
EXEMPLE :
Soit A = [1 2 3; 4 5 6; 7 8 9; 10 11 12];
1 2 3
A = A (1 : 3, :) : Produit la matrice A 4 5 6
7 8 9
A = A (3, 2) : Visualise la valeur 8
7
EnR@ME TP de Traitement du signal Sefyani Fouad
3 6 0
1
x = x’ : Produit le vecteur x 0
2
1 5i 3 7i
W = Z’ : Produit la matrice W
2 6i 4 8i
Transposé
1 5i 3 7i
W = Z’. : Produit la matrice W
2 6i 4 8i
Addition et soustraction
Les opérations sont définies uniquement si les variables ont la même dimension ou si une des variables
est un scalaire.
2 6 10
C = A+B : Produit la matrice C 6 10 14
10 14 0
2
y = x –1 : Produit le vecteur y 1
1
Multiplication et division
8
EnR@ME TP de Traitement du signal Sefyani Fouad
Puissance
A^n : correspond à An. Cette opération est définie si A est une matrice carrée et si n est un
scalaire.
Z = y.^x : Correspond à une élévation en puissance élément par élément. Donne le vecteur :
0.5
z 1
1
1
z = x.^2 : Donne le vecteur z 0
4
9 - Fonctions
Ces fonctions sont définies uniquement pour des matrices carrées. Soit A une matrice de dimension n x n ;
poly(A) : Vecteur ligne de dimension n+1 dont les éléments sont les coefficients du polynôme
caractéristique det(sI-A) ordonnés en puissances décroissantes. .
[V, D] = eig(A) : Calcule les vecteurs propres et les valeurs propres de la matrice A et les retourne
respectivement dans les matrices V et D. Chaque colonne de la matrice V correspond
à un vecteur propre associé à la valeur propre se trouvant dans la colonne
correspondante de la matrice D. Ceci peut être écrit de la manière suivante : AV= VD
Exemple :
9
EnR@ME TP de Traitement du signal Sefyani Fouad
Les fonctions suivantes opèrent sur les colonnes d’une matrice ou sur les éléments d’un vecteur ligne ou
colonne.
Soient x = [ 6 4 1 2 5 3 ] et A = [ 9 8 4; 1 6 5; 3 2 7 ]
mx = max (x) : Fournit l’élément le plus grand du vecteur x, mx = 6.
mA = max (A) : Définit un vecteur contenant la valeur maximale de chaque colonne de la matrice A,
mA = [ 9 8 7].
mvA = mean (A) : Définit un vecteur contenant la valeur moyenne calculée sur chaque colonne de la
matrice A, mvA = [ 4.333 5.333 5.333].
sx = sort(A) : Classe les éléments de chaque colonne de la matrice A selon l’ordre croissant,
sx = [1 2 3 4 5 6 ]
sA = sort(A) : Classe les éléments de chaque colonne de la matrice A selon l’ordre croissant
1 2 4
sA 3 6 5
9 8 7
sux = sum(x) : Calcule la somme de tous les éléments du vecteur x, sux = 21.
suA = sum(A) : Définit le vecteur contenant la somme calculée sur chaque colonne de la matrice A,
sux = [13 16 16]
MATLAB dispose également de fonctions qui opèrent sur des polynômes représentés par des vecteurs
de coefficients.
r = roots (p) : Définit un vecteur colonne dont les composantes sont les racines du polynôme
s3 – 6s2 – 72s – 27,
12.1229
r 5.7345
0.3884
10
EnR@ME TP de Traitement du signal Sefyani Fouad
p2 = poly (r) : Calcule les coefficients d’un polynôme définit par ses racines, p2 = [1 –6 –72 –27].
v = polyval (p, x): Retourne, dans v, les valeurs calculées du polynôme p en chaque point de x.
c = conv (a, b) : Effectue le produit des polynômes a(s) = s2 + 2s + 3 et b(s) = 4s2 + 5s + 6 puis fournit
un vecteur contenant les coefficients du polynôme résultant, c = [4 13 28 27 18].
[q, r] = deconv (B, A) : Réalise la division polynomiale B/A et retourne dans q les coefficients du polynôme
quotient et dans r ceux du reste. C’est-à-dire B = A q + r
Exemple :
[q, r] = deconv(c, a)
ans q= 4 5 6
r= 0 0 0 0 0
On peut vérifier ce résultat en utilisant la commande conv entre les polynômes q et a pour voir si le
résultat donne bien le polynôme c.
[r, p, k] = residue (B, A) : effectue la division des polynômes B par A et la retourne sous la forme
B( x ) r (1) r (2) r ( n)
suivante : ... k ( x)
A( x) x p(1) x p(2) x p ( n)
1 1 1
Ainsi : 2
x 5x 6 x 3 x 2
[B, A] = residue (r, p, k) : Effectue l’opération inverse et retourne dans B les coefficients de B(x) et
dans A ceux de A(x).
10 - graphiques
Avec MATLAB les données peuvent être examinées graphiquement. Pour la représentation d’un graphe
à l’écran il est possible de choisir le type d’échelle désiré pour les axes x et y.
Plot (x, y, ‘s1s2s3’) : Donne la courbe y(x). s1 et s2 et s3 sont trois paramètres qui précisent la
couleur, le type de point et la nature de lignes d’interpolation choisies.
11
EnR@ME TP de Traitement du signal Sefyani Fouad
Plot (x, y, t, z) : Donne la courbe y(x) et la courbe z(t) sur le même graphique. Eventuellement on peut
ajouter les données concernant la couleur, le type point et la nature d’interpolation
stem (n, y) : analogue à la commande plot sauf qu’elle trace la courbe du signal numérique y en
fonction du pas d'échantillonnage n.
subplot (nml) : subdivise la fenêtre du graphe en n lignes et m colonnes et choisie la l ème pour être
active. Les zones graphiques sont numérotées de la gauche vers la droite et de haut
vers le bas.
Une fois le graphe est visualisé à l’écran, il est possible d’introduire un titre et des noms indicatifs pour
les axes x et y.
gtext (‘texte’) : Place le message entre apostrophe sur le graphique en cours. Une fois la position
choisie est indiquée par le témoin de la souris, il suffit d’y cliquer ou d’appuyer sur
une touche du clavier.
xlabel (‘texte’) : Ajoute le texte écrit entre apostrophe sur le graphe pour la légende de l’axe des x.
ylabel (‘texte’) : Ajoute le texte écrit entre apostrophe sur le graphe pour la légende de l’axe des y.
axis ([xmin xmax ymin ymax]): Définit les limites des coordonnées des axes x et y en tenant compte des
limites mentionnées par xmin, xmax, ymin et ymax
Exemple :
t = 0 : 0.05 : 4*pi ;
x = cos (t) ; y = sin(t) ;
plot ( t, x, ‘r.’, t, y, ‘g*’)
xlabel (‘t en radian’), ylabel (‘cos(t) en rouge et sin(t) en vert’)
12
EnR@ME TP de Traitement du signal Sefyani Fouad
0
TP N 1 OUTILS DE BASE DES FILTRES NUMERIQUES
I - BUT
Le but de cette manipulation est l’étude des outils de base des filtres numériques. Il s’agit de mettre en
évidence, 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.
II - INTRODUCTION
Si un système numérique, linéaire et invariant dans le temps est utilisé pour modifier la distribution
fréquentielle des composantes d'un signal selon des spécifications données, en s'appuyant sur des opérations
arithmétiques, alors il s'appelle filtre numérique. L'opération de traitement qui consiste à modifier cette
distribution à l'aide d'un système numérique s'appelle filtrage numérique.
Le principal traitement opéré par des systèmes numériques SLTI est le filtrage. Historiquement, ils ont
été développés et étudiés dans le but de pouvoir simuler les filtres analogiques sur ordinateur. Ceci a permis de
vérifier les performances et d'optimiser les paramètres de ces filtres avant leurs éventuelles réalisations. Ceci est
rendu possible vu les progrès actuels de la technologie des circuits intégrés numériques. Ainsi, des méthodes
propres pour la synthèse et la conception des filtres numériques ont été également développées.
La fonction filter dans MATLAB permet de réaliser le filtre numérique décrit par :
N M
a 0 y (k ) a
n 1
n y (k n) b
m 0
m x(k m)
b [b0 , b1 ,...b M ] : vecteur ligne contenant les coefficients de la partie non récursive du filtre.
a [a 0 , a1 ,...a N ] : vecteur ligne contenant les coefficients de la partie récursive du filtre.
x : vecteur ligne contenant le signal d'entrée.
La fonction freqz dans MATLAB permet de calculer la réponse en fréquence d'un filtre numérique à
partir des coefficients, a et b, de l'équation récurrente qui régit son état. La syntaxe de cette fonction est :
III - MANIPULATION
De façon générale, un filtre numérique peut être vu comme une boîte fonctionnelle, qui transforme un
signal d'entrée x(k) en un signal de sortie y(k). Les signaux étant bien sûr discrets.
x(k) y(k)
Filtre numérique
Tous les filtres que nous allons étudier sont linéaires et invariants dans le temps. Un tel filtre doit obéir
au principe de superposition. La relation d'entrée-sortie est régie par l'équation récurrente suivante :
N M
y (k )
n 1
an y(k n) b x(k m)
m0
m
13
EnR@ME TP de Traitement du signal Sefyani Fouad
L'échantillon y(k) de la sortie est une combinaison linéaire des M+1 échantillons du signal d'entrée et
des N derniers échantillons du signal de sortie.
Fréquence normalisée :
Nous allons déterminer la réponse en fréquence d'un filtre numérique. Prenons le filtre causal suivant :
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).
Utiliser la commande freqz, sous sa forme standard, pour déterminer la réponse en fréquence du filtre
en fonction de la fréquence en Hz.
Tracer la courbe du module de la réponse en fréquence H(f).
2ème étape :
Ce filtre sera excité par un signal d'entrée x(k) = cos(2f0k*Te). Avec f0 = 500 Hz. Fe = 8000Hz.
1) Peut-on prévoir le signal de sortie en s'appuyant juste sur la courbe de la réponse en fréquence H(f) du
filtre ?
Définir le vecteur k allant de 0 jusqu'à 199 avec un pas unité.
Définir le signal x(k) et déterminer le signal de sortie y(k) à travers ce filtre (Attention à la fréquence
normalisée).
Tracer sur un graphe, en utilisant la commande plot plutôt que stem, les deux signaux x(k) et y(k).
2) Déterminer, sur la courbe de y(k), le gain obtenu sur le signal d'entrée.
3) Retrouver cette valeur en utilisant la courbe du module de la réponse en fréquence. L'accord est-il
satisfaisant ?
3ème étape :
Nous allons modifier, maintenant, la fréquence du signal d'entrée x1(k) à 2500 Hz plutôt que 500 Hz.
Le signal de sortie peut être décomposé en deux parties : la 1ère partie est située sur les 15 premiers
échantillons et la 2ème partie se trouve au delà de l'échantillon 15.
14
EnR@ME TP de Traitement du signal Sefyani Fouad
0
TP N 2 CONCEPTION DES FILTRES NUMREIQUES
I - BUT
Cette manipulation a pour but d'étudier les méthodes de conception, par simulation, des filtres
numériques non récursifs RIF et récursive RII.
1 - Introduction
Nous avons vu, jusqu'à maintenant, que le comportement d'un filtre numérique dépend des valeurs des
coefficients an et bm contenus dans l'équation récurrente qui régit sa relation d'entrée sortie. La réponse en
fréquence des filtres idéals est définie par des formes carrées. Néanmoins nous pouvons réaliser ces filtres en
passant par des approximations. Suivant les pentes stipulées dans le cahier des charges, et suivant les ondulations
admises dans la bande passante et dans la bande atténuée, on peut réaliser le filtre correspondant.
2 - Fréquence normalisée :
Les fonctions de conception de filtre utilisent la fréquence normalisée cette fois-ci sur l’intervalle [0,
2 f0
fe/2]. Par conséquent, la fréquence normalisée utilisée sera donnée par la relation suivante : f 0n où Fe
Fe
est la fréquence d'échantillonnage, elle est rapportée à l'intervalle [0 1]. Étant donné que la fréquence est une
quantité positive elle ne peut dépasser Fe/2.
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 , f c );
Filtre passe bas.
Fréquence d’échantillonnage fe = 8000 Hz.
Fréquence de coupure fc = 300 Hz. Atténuation de 10 dB au minimum à la fréquence 1500 Hz
1) Optimiser l’ordre N du filtre
2) Exprimer les coefficients an et bm du filtre
3) Calculer la nouvelle atténuation du filtre en dB
Nous allons 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
Commande b fir1( N , f c , win ); win fenetre( N 1);
fenêtre boxcar, ham min g , hanning, blackman,...
Choisir une à une ces fenêtres et tracer la réponse en fréquence pour l’ordre déjà établie dans la
question précédente.
Commenter et discuter la pente et les ondulations en dB de chaque filtre synthétisé.
1 - Introduction
Historiquement, les premiers filtres étaient évidemment analogiques. Avec l’avènement des systèmes
numériques, une classe importante des filtres numériques, à réponse impulsionnelle infinie dite récursifs, RII, a
été issue directement de la numérisation de ces filtres analogiques par le biais de la transformation bilinéaire.
Nous allons étudier aussi la conception des filtres numériques sans partir d’un filtre analogique connu,
mais en se basant uniquement sur le gabarit de la réponse en fréquence qui exprime des données spectrales
concernant la forme, le gain, l'argument et les fréquences de coupure du filtre numérique. Les filtres analogiques
de Butterworth et de Chebyshev, les plus couramment utilisés, possèdent des réponses en fréquence et des
fonctions de transfert entièrement définis par des expressions analytiques. La réalisation pratique de ces filtres
analogiques est assurée par l’utilisation des composantes électroniques telles les multiplieurs, les additionneurs
15
EnR@ME TP de Traitement du signal Sefyani Fouad
et les retardateurs. La numérisation de ces filtres est réalisée directement sous MATLAB par des commandes
bien spécifiées (butter, cheby1,…) qui calculent les coefficients an et bm du filtre à partir du gabarit de la
réponse en fréquence de filtres analogiques.
Nous allons d’abord définir l’expression analytique des réponses en fréquence des filtres analogiques.
Ensuite on présentera les commandes butter et cheby1 à travers leurs syntaxes pour entamer l’étude de la
conception des filtres passe bas et passe bande numériques.
2 - Le filtre de Butterworth :
Le filtre de Butterworth d’ordre N est défini pour avoir une réponse fréquentielle plate au maximum
dans la bande passante avec une atténuation de – 3dB pour f = fc. Il satisfait l’équation suivante :
1
H( f ) . La syntaxe de la commande du filtre de Butterworth numérique est :
f 2N
1 ( )
fc
[b, a] = butter (N, fc) : N est l'ordre du filtre (il y' en a plusieurs, chaque ordre défini une
forme différente de la réponse en fréquence.)
fc est la fréquence de coupure normalisée (rapporté entre 0 et 1) du
filtre. Par défaut ce filtre est passe bas.
[b, a] = butter (N, fc, 'high') : fc est dans ce cas défini par un vecteur contenant les fréquences de
coupure normalisée fc = [f1, f2]
'high' pour filtre passe haut.
'bandpass' pour filtre passe bande.
'stop' pour filtre coupe bande.
[b, a] = butter (N, c,,’s’) : N est l'ordre du filtre. wc est la pulsation de coupure en Hz. Par
défaut ce filtre est passe bas.
3 - Le filtre de Chebyshev :
Le filtre de Chebyshev d’ordre N est définit pour avoir une amplitude constante dans la bande
1
passante. Il satisfait l’équation suivante : H ( f ) où PN (f) est le polynôme de Chebyshev
1 PN ( f )
2 2
d’ordre N. On constate que plus est grand, meilleur est la pente dans la bande de transition et inversement. La
syntaxe de la commande du filtre de Chebyshev numérique est :
[b, a] = cheby1 (N, R, fc) : N est l'ordre du filtre (il est l'ordre du polynôme de Chebyshev). Il
y' en a plusieurs, chaque ordre défini une forme différente de la
réponse en fréquence. R est le paramètre qui détermine l'amplitude
des oscillations, en décibel, dans la bande passante du filtre. La
valeur la plus utilisée est 0.5. fc est la fréquence de coupure
normalisée du filtre. Par défaut ce filtre est passe bas.
[b, a] = cheby1 (N, R, fc, 'high') : fc est dans ce cas défini par un vecteur contenant les fréquences de
coupure normalisée fc = [f1, f2] 'high' pour filtre passe haut.
'bandpass' pour filtre passe bande. 'stop' pour filtre coupe bande.
[ba,aa] = cheby1 (N, R, c,’s’) : N est l'ordre du filtre. c est la fréquence de coupure en Hz. rad.
Remarque :
La commande [H,]=freqs(ba,aa) Permet de calculer sur 200 points l’amplitude de la réponse
fréquentielle H en fonction de la pulsation sur une échelle de 10 fois .
16
EnR@ME TP de Traitement du signal Sefyani Fouad
La numérisation des filtres analogiques, une fois le cahier de charge défini, est réalisée par la méthode
de la transformation bilinéaire, la plus couramment utilisée. Cette méthode consiste à trouver une
correspondance entre le domaine de stabilité en p et le domaine de stabilité en z. Il ressort de cette méthode la
pT
1 e
2 1 z 1 2
correspondante suivante : p et z
Te 1 z 1 pTe
1
2
Cependant, la transformation bilinéaire entraîne une relation non linéaire entre les fréquences du
f
domaine analogique et celles du domaine numérique (frequency warping) : f n e a tan(Te f a )
La méthode de numérisation d’un filtre analogique permet de déterminer, théoriquement, la fonction de
transfert du filtre numérique correspondante à la fonction de transfert du filtre analogique. Cependant les
commandes butter et cheby1 permettent de réaliser cette correspondance directement.
5 - MANIPULATION
Filtre analogique CR :
Calculer la fonction de transfert d’un circuit CR passe haut de constante de temps RC = 10-4s.
En déduire les coefficients a et b de H(p).
Calculer la réponse en fréquence H(f) avec la commande freqs.
Tracer sur un graphe le module de H(f).
Mesurer la fréquence de coupure de ce filtre. Vérifier qu’elle correspond bien à la valeur théorique.
Numérisation :
Transformation de p vers z-1. Déduction de H(z) théoriquement. On peut utiliser la commande :
[b, a] bilinear (ba , a a , f e ); On prends Fe=8000 Hz.
Calculer la réponse en fréquence H(f) avec la commande freqz.
Tracer sur un le même graphe le module de H(f).
Mesurer la fréquence de coupure numérique du filtre
Vérifier que cette fréquence de coupure est bien celle donnée par la Transformation bilinéaire de la
f
fréquence de coupure analogique : f n e a tan( f a Te ) .
Conclusion.
Nous allons utiliser maintenant deux filtres de Chebyshev, l'un passe bas et l'autre passe haut, pour
filtrer un signal contenant deux composantes périodiques de fréquences différentes. Le but est de séparer ces
deux composantes.
17
EnR@ME TP de Traitement du signal Sefyani Fouad
0
TP N 3 MESURE DU PITCH DE LA 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 – METHODE DE MESURE
1 – Signal de la parole
Le signal de la parole est émis par l’appareil phonatoire. Le processus de génération du son est composé
des étapes suivantes :
Génération d’un flux d’air par les poumons.
Vibration des cordes vocales.
Réalisation d’une disposition articulatoire dans les cavités vocales et nasales.
Exemple de pitch :
Homme : 70 – 250 Hz
Femme : 150 – 400 Hz
Enfant : 200 – 600 Hz
Le signal de la parole est considéré comme un signal quasi stationnaire. Il est stationnaire jusqu’à une durée de
1 2
100 ms, constitué par du bruit et par de pseudo périodique. Son spectre est étalé sur la bande comprise
3 3
entre 20 Hz et 20 KHz. L’oreille est capable d’entendre des sons dont le spectre s’étale jusqu’à 20 KHz.
Le système acoustique est défini par l’excitateur : cordes vocales ou air propulsé + résonateur (cavité nasale
et/ou buccal). La dynamique de la parole est la différence entre le signal le plus faible et le plus fort admissible
par notre oreille.
Cavité buccale
Glotte Lèvres son
(Bruit et/ou impulsion) Cavité nasale
18
EnR@ME TP de Traitement du signal Sefyani Fouad
2 - Manipulation
La méthode d’autocorrélation de mesure du pitch repose sur la propriété que les signaux périodiques de
période T ont une autocorrélation périodique aussi et de même période T. .Nous allons exploiter cette propriété
pour la mesure du pitch de la parole.
Enregistrer votre son voisé (la lettre « A ») sur une durée T de 1 s avec une fréquence d’échantillonnage
fe = 8KHz avec la commande : x wavrecord ( N , f e ); N T * f e ou avec Matlab 2018
b –Autoccorélation
19
EnR@ME TP de Traitement du signal Sefyani Fouad
0
TP N 4 RECONNAISSANCE DES NUMEROS DTMF D’UN TELEPHONE FIXE
I - BUT
Cette manipulation a pour but de détecter les numéros d’un téléphone fixe à partir de l’enregistrement
des sons des tonalités de ces numéros.
II – METHODE DE MESURE
Le signal de numérotation émis par un téléphone fixe s’appelle signal DTMF (Dual Tone Multi
Frequency), il est produit par des oscillateurs qui superposent deux fréquences sinusoïdales correspondant à la
paire de fréquence de la touche appuyée. Par exemple la '4' correspond à la superposition des fréquences 770Hz
et 1209Hz.
Voici le tableau avec les fréquences normalisées sur le plan international :
f5 f6 f7 f8
f1 697 Hz 1 2 3 A
f2 770 Hz 4 5 6 B
f3 852 7 8 9 C
f4 941 Hz * 0 # D
Tableau : Fréquences de codage DTMF des différentes touches d’un téléphone fixe.
Le choix de ces fréquences a été dicté par le fait que les distorsions harmoniques et d’intermodulation ne
doivent pas perturber le bon fonctionnement du processus de reconnaissance de ces numéros. En effet, aucune
fréquence n'est un multiple des autres fréquences DTMF, la différence entre deux fréquences quelconques
n'égale pas celle d’aucune de ces fréquences DTMF, et la somme de deux fréquences quelconques n'égale pas,
également, celle d’aucune de ces fréquences DTMF. L’erreur tolérée sur la valeur de ces fréquences est de 1.5%.
L’erreur tolérée sur l’amplitude de ces fréquences est de 4 dB.
La méthode que nous allons utiliser pour reconnaître les numéros DTMF repose sur l’utilisation des
filtres numériques passes bandes. Pour cela, nous allons d’abord observer l’allure du spectre des signaux DTMF
enregistrés au préalable. Ensuite, on va calculer les paramètres {an} et {bm} des équations récurrentes des filtre
passes bandes centrés sur l’une des fréquences DTMF. Il suffit alors de filtrer tous les signaux DTMF enregistrés
par ce banc de 7 filtres passe bande et de mesurer la puissance sortante. Il est évidemment clair que deux
puissances parmi les 7 mesurées seront largement supérieures aux 5 puissances restantes.
20
EnR@ME TP de Traitement du signal Sefyani Fouad
Utiliser la commande [ x, fe, Nbits ] wavrread (' DTMF 1.wav ' ); pour extraire le signal correspondant à un
numéro 1 du dossier DTMF1 par exemple.
Tracer le signal x avec la commande plot.
Eliminer la voix gauche par la commande : x x(1 : end / 2);
Eliminer la valeur moyenne du signal par la commande : x x mean (x);
Calculer le nombre d’échantillons du signal par la commande : N length (x );
fe f
Définir l’axe fréquentiel f [0 : : f e e ];
N N
Calculer le spectre X du signal x par la commande : X fft(x );
Tracer le spectre d’amplitude en fonction de f.
f
Mesurer, en Hz, les fréquences dans l’intervalle [0 : e ] . Ces fréquences sont elles dans le catalogue des
2
fréquences DTMF.
Refaites la même chose en choisissant le même numéro enregistré dans le dossier DTMF3. Interpréter la
nature de ces fréquences parasites qui apparaissent dans ce spectre.
Utiliser la commande : [b, a ] butter (4, [677 ,717 ] * 2 / fe, ' bandpass' ); pour concevoir un filtre passe bande
de Butterworth, de 4ème ordre, centré sur la fréquence DTMF 697 Hz et de bande passante égale à 40 Hz.
Utiliser la commande [ H , f ] freqz(b, a,512 , fe); pour calculer H(f) et tracer le module de H(f). Vérifier
que la courbe obtenue est correcte.
Refaite la même chose pour les 6 autres fréquences.
C – Détection du numéro
Filtrer le signal enregistré par l’ensemble des 7 filtres passes bandes conçus par la commande :
y1 filter (b, a, x1 );
Mesurer les 7 puissances de sortie à travers chaque filtre par la commande p1 var( y1 );
Placer toutes les puissances calculées sur un vecteur P [ p1 , p 2 , p 3 , p 4 , p 5 , vp 6 , p 7 ]; et le tracer par la
commande stem.
Conclusion.
21
EnR@ME TP de Traitement du signal Sefyani Fouad
0
TP N 5 SYNTHESE DES NOTES MUSICALES D’UN PIANO
I - BUT
Cette manipulation a pour but de réaliser la synthèse d’une note musicale d’un piano à partir de la
méthode additive.
II – MODELISATION ET SYNTHESE
Le signal produit par un instrument de musique est généralement un son discret c’est-à-dire formé par
une suite d’harmoniques ou de partiels. Un exemple de son constitué de partiel est le son d’une cloche dont les
fréquences sont données comme suit : 0.5fP, fP, 1.2fP, 1.5fP, 2fP, 2.5fP, 3fP,… fP est appelée partiel principal. Une
note musicale est véhiculée par une onde acoustique caractérisée par son intensité, sa durée, sa hauteur et son
timbre. Aux basses fréquences correspondent les sons graves et aux hautes fréquences correspondent les sons
aigus. La fréquence de référence pour un musicien est la fréquence 440 Hz qui correspond à la note La3. C’est le
son que nous entendons lorsque nous décrochons le combiné d’un téléphone fixe.
L’intensité d’un son est définie comme le flux d’énergie véhiculé par l’onde acoustique par unité de
temps et par unité de surface. Elle est mesurée en W.m-2. Le seuil d’audition est approximativement :
I
I 0 10 12W .m 2 . On défini l’intensité IdB en décibel par : I dB 10 log . L’intensité maximale perçue par
I0
l’oreille humaine, et qui correspondant au seuil de la douleur, est de 120dB : c’est-à-dire 1W .m 2 .
La perception de l’oreille humaine de l’intensité et de la hauteur d’un son est perçue comme le
logarithme de l’excitation : Loi de Fechner Weber. Ainsi l’oreille humaine perçoit la même augmentation de
volume sonore lorsque nous passons, par exemple, de 1 violon à 10 violons que si nous passons de 10 violons à
100 violons. Le rapport des intensités est le même : 10/1 = 100/10. Dans les deux cas nous gagnerons 10 dB. Le
même phénomène se produit pour la perception de la hauteur. L’oreille perçoit le rapport entre la fréquence de
deux notes et non la distance qui sépare leurs fréquences. Ainsi, nous sentons la même augmentation de la
fréquence lorsque nous passons, par exemple, de 220 Hz à 440 Hz que si nous passons de 440 Hz à 880 Hz. Le
rapport est le même : 440/220 = 880/440. Dans les deux cas nous gagnerons une octave. Une octave correspond
à un intervalle dont le rapport de ces fréquences limites est 2.
Les notes d’un piano sont réparties par octave. Selon le tempérament égal, chaque octave est partagée
1
en 12 intervalles égaux appelés demi-ton de rapport de fréquence 2 12 . Ces 12 intervalles forme la gamme
chromatique, inventée par les chinois il y’a plus de 4 millénaire, notée Do, Do#, Re, Re#, Mi, Fa, Fa#, Sol, Sol#,
La, La#, Si. Les touches noires correspondent aux notes en # et sont en nombre de 5. Les Touches blanches sont
au nombre de 7. Un piano classique est constitué de 7 octaves numérotées de 0 à 6 en partant de gauche à droite.
Ainsi la note La3 correspond à l’octave centrale numéro 3 et dont la fréquence est 440 Hz.
Le son d’un piano est constitué d’harmoniques, multiple de la fréquence fondamentale, repartit selon
une certaine progression d’amplitude enveloppé par une sorte d’emballage qui définit la manière dont apparaît,
22
EnR@ME TP de Traitement du signal Sefyani Fouad
vit et disparaît le son musical. Cette enveloppe exprime l’évolution de l’amplitude du son au cours du temps.
Elle peut être représentée par une courbe, en forme de cloche, qui porte le nom de la courbe d’ADSR (Attack
Decay Sustain Release). En d’autre terme cette courbe permet aussi au concepteur d’instrument numérique de
décrire comment son instrument doit faire évoluer l’amplitude du son crée en fonction du temps. Cette courbe
présente quatre parties :
Attack : décrit la phase nécessaire au son pour atteindre son amplitude maximale après avoir appuyé sur une
touche du synthétiseur.
Decay ou décroissance : décrit le temps nécessaire pour que le son entre dans la phase du maintien.
Sustain ou maintien décrit le temps nécessaire et le niveau sonore dans la phase du maintien. Plus ce temps est
long plus on reste appuyé sur la touche produisant ce son.
Release ou extinction décrit la phase de relâchement de la touche, l’amplitude du son diminue pour s'éteindre
complètement.
ecnassiorcéd maintien
noitcnitxe
euqatta
2 – Modélisation et synthèse
Il existe plusieurs méthodes de synthèse du son d’une note musicale. Nous allons utilisé une d’entre elle
connu sous le nom de méthode additive. Elle consiste à créer un signal synthétique formé par les mêmes
fréquences, les mêmes amplitudes et la même durée que le signal à modéliser. Ensuite on multiplie ce signal par
la courbe ADSR extraite du signal originale.
Modélisation :
23