Matlab TP Sujets
Matlab TP Sujets
Matlab TP Sujets
Parcours Fondamental
1. Introduction
Le but de ces cours est de vous familiariser avec l'environnement Octave que vous utiliserez dans la suite de vos études
et dans votre vie professionnelle.
Le Langage Octave est largement utilisé en laboratoire tant pour le calcul proprement dit que pour des simulations.
Dans le cadre de cette formation, vous utiliserez Octave (un clone de Matlab) pour calculer et représenter les résultats
des calculs.
Le message que vous devrez retenir, si vous devez en retenir un, est le recul nécessaire que doit prendre l'utilisateur de
tels langages vis à vis des résultats retournés. Dans nombre de cas, les méthodes utilisées par le logiciel pour mener le
calcul supposent des hypothèses très précises qui ne sont pas toujours vérifiées. Il faut donc toujours regarder les
résultats obtenus avec un oeil critique.
2. Objectifs
• Prise de contact avec le logiciel (savoir naviguer dans les menus)
• Utilisation de l'aide en ligne
• Calculs élémentaires
• Opérateurs matriciels
• la fenêtre de commande,
• les fenêtres graphique
• et les fenêtres d'édition dans lesquels on définit les fichiers de programmation (M-File) contenant une série
d'instructions.
">" est le début d'une ligne de commande. On peut écrire plusieurs commandes par ligne séparées par " ;" mais pour des
questions de lisibilité, il vaut mieux éviter cette démarche.
Il est possible (et même conseillé) de commenter ses programmes. Sous Octave les commentaires sont précédés du
signe "%". Cela sera surtout utile lorsque vous programmerez sous Octave.
Page 1
Bureau d'Etude Matlab Licence STS mention EEA
Certaines constantes sont déjà définies comme "pi", "inf" (l'infini), "NaN" signifiant 'Not a Number' qui exprime une
indétermination comme une division par 0.
Il est possible de spécifier le format d'affichage des calculs. Plusieurs formats sont disponibles :
short, short e, long, long e, hex, rat
Ceci doit être spécifié avant de demander le contenu de la variable. Le type de format choisi est conservé ensuite, quelle
que soit la variable jusqu'à un changement du format.
> pi
ans = 3.1416
> format long
> pi
ans = 3.14159265358979
> format long e
> pi
ans = 3.141592653589793e+00
Pour en savoir plus sur les formats de sortie, on peut demander l'aide en ligne par :
>help format ou doc format
Pour supprimer l'affichage de l'exécution d'une instruction, la faire suivre par un ";".
Octave sait gérer les nombres complexes. i est le nombre complexe (j peut aussi être utilisé).
>(1+2j)*(1+j)
ans = -1.0000 + 3.0000i
Attention : pour éviter toute ambiguïté, penser que la lettre "i" est réservée à la définition de la partie imaginaire d'un
nombre complexe, et bannir son utilisation.
Toutes les fonctions d'Octave savent traiter les nombres complexes ainsi :
>exp(i*pi/2)
ans = 6.1232e-17 + 1.0000e+00i
Il est possible de définir des variables en leur affectant une valeur :
Le nom d'une variable débute forcément par une lettre. Octave fait la distinction entre minuscules et majuscules. Il n'y a
pas de spécification particulière suivant le type de variable (entier, réel, complexe, matrice,..) comme dans certains
logiciels.
>a=(1+4i)/(1-4i)
a = -0.88235 + 0.47059i
Page 2
Bureau d'Etude Matlab Licence STS mention EEA
• Calculez la partie réelle, la partie imaginaire, l'angle, le module de la variable "a" définie ci-dessus et son
complexe conjugué (utilisez l'aide en ligne sur la fonction real, angle et abs).
Si Octave sait calculer avec des scalaires, il a été conçu pour le calcul matriciel (après tout un scalaire est une matrice
1*1).
On peut avoir accès à la liste des variables déjà utilisées, en supprimer certaines de la mémoire :
• Définissez un vecteur ligne A2 dont la 1 ère valeur vaut 2 et la dernière 12 (les données sont
équidistantes de 1)
• Définissez un vecteur ligne A3 contenant 7 valeurs dont la 1 ère valeur est 0.2 et la dernière 0.8
• Définissez un vecteur ligne A4 contenant 4 valeurs dont la 1 ère est 10-1 et la dernière est 102
• Les valeurs suivantes correspondent aux abscisses des points d'une droite :
-3 ; -1 ; 0.5 ; 1 ; 2.5 ; 3 ; 4 ; 8 ;10
Page 3
Bureau d'Etude Matlab Licence STS mention EEA
• Saisissez ces données dans un vecteur X et calculez le vecteur Y correspondant aux ordonnées.
• Soit la matrice M1 = [ 3 : 3 : 9 ; 0 : 2 : 5 ; 15 : -5 : 5 ]
Octave offre quelques fonctions particulières, souvent pratiques pour la création de matrices : les fonctions ones,
zeros, eye.
• Créez une matrice 3 lignes et 4 colonnes contenant des "0"
• Créez une matrice 3 lignes et 3 colonnes contenant des "4" sur la diagonale
7. Calcul matriciel
Octave peut, évidement, réaliser des sommes et produits matriciels, les opérateurs sont les mêmes que pour les
produits et sommes scalaires. De même il est possible d'utiliser les opérateurs de comparaison sur une matrice (égalité
(==), >, <, <=, différent de (~=)...)
ou |
non ~
Octave sait aussi réaliser des opérations terme à terme. Le symbole de l'opérateur est alors précédé du point ".".
Page 4
Bureau d'Etude Matlab Licence STS mention EEA
• Créez une matrice C identique à A, hormis les éléments de A inférieurs ou égaux à quatre qui seront
remplacés par zéro.
• Créez une matrice D identique à B, hormis les éléments de B égaux à cinq qui seront remplacés par
zéro.
Il existe les opérateurs prod et sum qui réalisent le produit des éléments d'un vecteur, ou la somme des mêmes
éléments.
• Calculez 10!
Il existe bien d'autres opérateurs permettant, par exemple, de déterminer la valeur maximale, minimale, ou de calculer la
valeur moyenne des éléments d'un vecteur (consulter l'aide en ligne).
Page 5
Bureau d'Etude Matlab Licence STS mention EEA
a=input('Entrez a : ').
• Entrez comme réponse 2, puis [1 2 ; 3 4 ].
Il est possible d'obtenir un affichage formaté avec la commande sprintf. La syntaxe de sprintf est la même qu'en
langage C :
La chaîne de formatage peut contenir du texte ou des commandes de format pour les variables à afficher -comment les
interpréter- ou des commandes pour l'affichage -passage à la ligne par exemple-
Les variables sont affichées en tant qu'entiers avec %d, en tant que réels avec %f. Il est possible de spécifier la
longueur et le nombre de décimales affichées avec le mode %f. Il suffit d'écrire ces informations entre le % et le f. Par
exemple %8.3f affichera avec 8 caractères dont 3 décimales.
Il est possible de supprimez de l'affichage le mot “ans” à l'aide de la commande disp. La syntaxe sera alors :
disp(sprintf ( ) ).
• Définissez une variable A comme étant un vecteur de 3 valeurs équiréparties allant de 0 à 2π, affichez A à
l'aide d'un sprintf, les valeurs étant affichées sur 6 caractères et 3 décimales.
3. Les scripts
Ce sont des fichiers texte comportant une listes d'instructions. Ils doivent OBLIGATOIREMENT porter l'extension ".m",
d'où le nom de « M-File »
Pour éviter que le résultat partiel du calcul ne s'affiche à l'écran, il suffit de mettre à la fin de l'instruction un ";". Ces ";" ne
servent pas à séparer les instructions comme en langage C, mais seulement à supprimer l'affichage.
• Écrivez un script définissant y = 1,5*sin( x + π/2 ) en ayant échantillonné x sur 50 intervalles entre 0 et 2π,
d'abord avec l'opérateur colon puis avec l'opérateur linspace.
• Lancez le script, puis affichez les dimensions des vecteurs x et y dans la fenêtre de commande. Les valeurs
des variables x et y ne doivent pas apparaître à l'écran.
• Dans ce même script, calculez le pas h de deux manières différentes et affichez-le d'abord sans format,
puis formaté (3 décimales).
Page 6
Bureau d'Etude Matlab Licence STS mention EEA
• Modifiez votre script pour qu'il saisisse à l'aide de la commande input le nombre de points. Recalculez x et
y et le pas h en fonction de cette donnée.
4. Tracé de graphiques
Octave offre de nombreux outils pour tracer des courbes en 2D. Regardez l'aide en ligne sur plot.
En fait, l'aide en ligne n'est pas tout à fait à jour. La syntaxe est la suivante :
plot ( x, y, format )
format est une chaîne de caractères qui conditionne le mode de tracé. Trois informations peuvent être transmises :
la couleur :
le type de tracé :
Octave utilise Gnuplot pour les tracés. Il faut donc parfois demander au grapheur de retracer les courbes pour mise à
jour (commande replot), ou de fermer le flux de données pour le tracé (commande close). On peut effacer un tracé
avec clf ou clg, et avoir plusieurs fenêtres avec figure. clearplot (obsolète) et clg sont identiques et effacent le
graphe. Par contre clf efface la fenêtre. Ceci sera mis à profit avec la fonction subplot, qui permet de tracer plusieurs
graphes dans une même fenêtre.
Page 7
Bureau d'Etude Matlab Licence STS mention EEA
Les axes auront un intitulé avec xlabel et ylabel et le tracé un titre avec title. On peut afficher une grille avec grid,
ajuster les axes avec axis. Il existe des fonctions de tracés spécialisés (bar, loglog, semilogx, semilogy, polar,
stairs). Il est possible d'annuler une commande subplot avec la commande subplot(1,1,1 ).
• Créez un nouveau script.
• Dans ce script, tracez la courbe définie par y = 1,5*sin( x + π/2 ) en ayant échantillonné la
fonction sur 50 intervalles entre 0 et 2π.
• Dans le terminal, à l'aide de la commande axis, fixez les dimensions des axes à leur valeur de
optimale.
• Superposez à la courbe tracée précédement celle définie par y = exp ( -x/5 ) en ayant
échantillonné sur 100 intervalles entre 0 et 10. Utilisez pour ce faire la commande hold
• Tracez les 2 courbes suivantes sur un même graphe, l'une en symboles, l'autre en traits pleins et
de couleurs différentes :
y = 10 sin ( x + π/3 )
z = 20 sin ( x + π ) + y
le tout échantillonné sur 50 intervalles entre 0 et 2π.
Page 8
Bureau d'Etude Matlab Licence STS mention EEA
• Tracez les courbes définies par y = x 4 / 2500 et y = x3 avec x compris entre 10 -3 et 1000
échantillonné logarithmiquement. Commencez avec un tracé en échelle linéaire puis en semilog et
finalement en loglog.
• Utilisez la commande subplot pour avoir les 4 courbes dans la même fenêtre graphique (définir
une fenêtre pouvant contenir 6 courbes (2 lignes et 3 colonnes))
• Tracez en mode graphique à barre z = y sin(x) avec y 2 = 2 sin(8x) sur 100 intervalles entre 0 et
2π.
Page 9
Bureau d'Etude Matlab Licence STS mention EEA
Toutefois on préférera dans le cas où les possibilités sont nombreuses utiliser switch. La syntaxe est :
if ( condition )
instructions…
else
instructions…
end
2.2 switch / case -Aiguillage multiple-
Il s'agit de l'aiguillage multiple. Il est possible de construire autant de cas que voulu. Ne jamais omettre le cas
"autrement". La syntaxe est :
switch ( expression )
case { liste de valeurs } , instructions…
case { liste de valeurs }, instructions…
otherwise, instructions…
end
Il n'y a pas besoin de l'instruction break comme en langage C. De même les parenthèses sont obligatoires. Enfin, Il faut
qu'il y ait au moins un case. De plus il est fortement recommandé de mettre un otherwise.
Par exemple, si l'on veut que le programme boucle "tant que ds>eps et dp>eps" la syntaxe exacte sera :
En effet le "ET" de l'expression linguistique dans le cas présent correspond au " OU" logique. Ces problèmes sont moins
fréquents avec les boucles "répéter ... jusqu'à".
Bien entendu, il faut modifier la condition dans la boucle sous peine de n'en jamais sortir. La syntaxe est :
while ( condition )
instructions…
end
2.4 do ... until (répéter jusqu'à)
C'est l'autre boucle conditionnelle. Cette boucle contrairement à la boucle while est toujours parcourue une fois. Le test
est effectué a posteriori ce qui est parfois utile. Bien entendu, comme pour la boucle while, il faut modifier la condition
dans la boucle sous peine de n'en jamais sortir. La syntaxe est :
Page 10
Bureau d'Etude Matlab Licence STS mention EEA
do
instructions…
until ( condition )
2.5 for -Boucle avec compteur-
C'est la boucle de base du calcul scientifique. L'index n'est pas forcément un entier. Le pas est par défaut égal à un. Si
l'on veut une boucle décroissante, le pas doit être spécifié négatif.
Il ne faut pas modifier l'index dans la boucle, c'est Octave qui s'en charge.
La syntaxe est :
for index = debut : pas : fin
instructions…
end
3. Les Fonctions
Ce sont des fichiers comportant des listes d'instructions, voire des fonctions. Nous allons écrire plusieurs fonctions. Voici
la syntaxe d'une fonction Octave :
function [variables résultats] = <Nom>(variables d'entrée)
Il peut y avoir plusieurs fonctions dans un fichier M-file, toutefois seule la première fonction est accessible depuis la
fenêtre de commande. Les autres fonctions du fichier M-File ne sont accessibles qu'aux autres fonctions du fichier.
Notez la présence des ";" dans l'écriture de la fonction comme dans l'écriture des scripts. Rappel: Ces " ;" ne servent pas
à séparer les instructions Octave, mais à éviter que des résultats partiels de calcul ne s'affichent à l'écran.
function z = cube(x)
z=x*x*x;
• Créez un nouveau fichier Octave et sauvegardez-le sous le nom "cube.m".
Attention : Le nom du fichier doit être le même que celui de la fonction. Il doit porter l'extension “.m”
• A l'aide de la fonction cube calculez le cube de 3. Puis de la variable A qui prendra les valeurs : A = 3 ; A =
3+i ; A = [ 1 2 ; 3 4 ].
4. Lecture de fichiers
De plus en plus souvent, les données sont contenues dans des fichiers et on utilise un logiciel de traitement de données
pour les exploiter. Octave peut parfaitement remplir ce rôle.
La fonction load permet de lire un fichier et de stocker son contenu dans une matrice. Sa syntaxe est : load -options
nom_de_fichier, ce qui crée une variable portant le nom du fichier. Les options sont nombreuses, nous n'utiliserons
que l'option ascii signifiant que les données sont au format texte sous forme de colonnes séparées par une tabulation et
sans en tête. Reportez-vous à l'aide pour plus de détails.
• Depuis le terminal lisez le contenu du fichier 'sonde.txt' dans la variable sonde. Affichez les dimensions de
sonde.
Page 11
Bureau d'Etude Matlab Licence STS mention EEA
• Les abscisses de la courbe sont dans la première colonne, les ordonnées dans la deuxième. Tracez la courbe
en mode point.
Il est possible de charger le contenu du fichier dans une variable en utilisant la syntaxe fonctionnelle. La syntaxe sera :
• Puis, en considérant que la première colonne contient les abscisses de toutes les courbes, trace les
courbes dans une seule figure. Pour ce faire, tester l'une après l'autre, l'instruction while, do until et
for.
• Modifiez ce script pour en faire une fonction qui aura comme paramètre d'entrée le nom du fichier à lire.
Page 12
Bureau d'Etude Matlab Licence STS mention EEA
TP IV : Transformée de Fourier
1. Rappels sur la Transformée de Fourier Discrète
L'expression de la transformée de Fourier est :
∞
−2j t
F = ∫ S t e dt I
−∞
Nous allons mettre en œuvre la transformée discrète. En effet si l'on connaît la fonction S(t), le signal, il est possible
d'utiliser la transformation continue.
En général on ne connaît le signal que par les valeurs qu'il prend en des temps régulièrement espacés (on a discrétisé,
échantillonné, le signal).
Dans ces conditions, le spectre (= module de F() ) continu devient discret lui aussi et on montre qu'il devient périodique.
Ta est la durée de l'acquisition du signal, Fe est la fréquence de répétition des acquisitions aussi appelée "fréquence
d'échantillonnage".
Page 13
Bureau d'Etude Matlab Licence STS mention EEA
On représente le spectre d'un signal échantillonné sous forme de bargraphe. Notez que :
3. Il y a des fréquences négatives. Elles n'ont pas de signification physique, elles découlent simplement de la
définition de la Transformée de Fourier. Par contre, elles sont "porteuses" d'autant d'énergie que les fréquences
positives.
4. La puissance contenue dans le spectre est la même que dans le signal temporel (théorème de Parseval).
Transformée directe :
n−1
1
F k = ∑ Si exp −2 j
n i=0 ik
n k ∈[0, n] II
Transformée inverse :
n−1
S i= ∑
k=0
F k exp 2 j
ik
n i ∈[ 0, n] III
Nota Bene :
À chaque fréquence positive correspond une fréquence négative, sauf pour la fréquence nulle qui est la composante
continue du signal. Cette fréquence appartient à la fois aux fréquences positives et négatives. C'est pourquoi, son
amplitude est directement la valeur moyenne du signal, alors que le module des autres harmoniques ne représente que
Fmax / 2. En conséquence, si l'on a transformé n points, ceci conduit à avoir n-1 harmoniques représentés :
● la composante continue ,
n−2
● harmoniques correspondant aux fréquences positives,
2
n−2
● harmoniques correspondant aux fréquences négatives.
2
Figure 3
En fait, le point n calculé dans le domaine des fréquences correspond à la composante continue de la période suivante
du spectre. Le même raisonnement peut se tenir pour le signal échantillonné dans le domaine réel. C'est pourquoi les
sommes calculant la transformée discrète ne vont que de 0 à n-1.
Pour écrire la fonction demandée il va falloir utiliser des instructions de contrôle de flux (boucles ...)
Page 14
Bureau d'Etude Matlab Licence STS mention EEA
function z = fourierD(S)
• Tracer le spectre d'une période de la fonction sinus échantillonnée sur 64 points. Observez
l'amplitude des raies du spectre et expliquez la position des raies.
function z = fourier( a , S )
% si a = -1, calcule la transformée directe
% si a = 1, calcule la transformée inverse
• Calculez la transformée inverse de cette réponse fréquentielle. Tracez le signal temporel obtenu.
Page 15
Bureau d'Etude Matlab Licence STS mention EEA
• Ajoutez une composante continue au signal temporel et tracez le spectre de ce nouveau signal.
La première raie est la valeur moyenne du signal temporel. L'amplitude est correcte car cette raie est à la fois en
fréquence négative et positive.
De la même manière que le dernier point dans le domaine temporel appartient à la période suivante du signal, la
dernière raie appartient à la période suivante du spectre.
• Copiez les 32 premiers points de ce signal fréquentiel dans un vecteur et calculez la transformée
inverse de ce nouveau signal fréquentiel. Tracez ce signal temporel en fonction du numéro du point, pas en
fonction de t. Que remarquez-vous au niveau des amplitudes ?
• idem pour sin(2t) + sin (5t) + sin(15t). Même question que ci-dessus.
• idem pour sin(2t) + sin(20t) – sin(43t) puis sin(2t) + sin(20t) + sin(43t). Même question que ci-dessus.
Donnez les fréquences des harmoniques du signal à partir du spectre, correspondent-elles au signal
calculé ? Que pensez-vous des amplitudes des harmoniques ?
Page 16
Bureau d'Etude Matlab Licence STS mention EEA
2. Signaux "carrés"
• Écrivez une fonction qui calculera les points d'un signal "carré périodique” (attention, le signal doit être
périodique !!). L'interface de la fonction sera :
• Recommencez (signaux périodiques) avec différents rapports cycliques et différentes valeurs maximales {0 ;
10} et rapports cycliques { 0,1 ; 0,3 ; 0,5 } et valeurs minimales {-Smax ; 0}.
• Calculez la Transformée de Fourier TFD(S) d'un signal S, "carré périodique" de rapport cyclique 0,5 et
d'amplitude -10 /+10, calculez le signal S2 = TFD(S) * TFD(S). Tracez le spectre de ce signal, calculez sa
Transformée de Fourier Inverse TFI(S2) et tracez ce signal temporel.
Nota Bene :
Le produit dans le domaine fréquentiel correspond à la convolution dans le domaine temporel. Expliquez la forme du
signal temporel TFI(S2).
Page 17
Bureau d'Etude Matlab Licence STS mention EEA
• Calculez un signal S, sinusoïdal, d'amplitude crête unité sur 64 points. Observez l'amplitude des raies
du spectre et expliquez la position des raies. Que constatez-vous ?
• Ajoutez une composante continue au signal S et tracez le nouveau spectre. Que constatez-vous ?
• Divisez chaque harmonique du signal fréquentiel par le nombre de points du signal temporel. Tracez le
spectre de ce nouveau signal. Que constatez-vous ?
En fait, la syntaxe de la commande fft est multiple : on peut préciser le numéro du dernier point à transformer (tapez
help fft), l'appel de la commande devient : z = fft( S, n ) où n est le nombre de points pris dans le signal S pour calculer
la Transformée de Fourier.
● Tracez le spectre du signal S en ayant calculé la transformée sur n-1 points où n est le nombre de
points du signal S.
● Créez un nouveau script dans lequel vous échantillonnerez un signal sinusoïdal S sur une période avec
64 points de telle sorte que l'on n'ait pas le dernier point dans le vecteur.
● Tracez le spectre de ce signal en prenant tous les points du signal temporel. Que concluez-vous ?
● Tracez le spectre d'un signal "carre non périodique" de rapport cyclique 0,5 en utilisant la commande
fft sur tous les points. Conclusion ?
Les commandes Fourier et fft renvoient les même résultats à condition que l'on connaisse leur mode de calcul.
Fourier suppose un signal périodique : S(0) = S(n). Elle donne une période complète du spectre (on a deux fois la
composante continue : en F=0 et en F=n).
Les deux fonctions retournent le "bon résultat" pour peu que l'on sache exactement le mode de calcul et les conventions
adoptées. Il en va de même pour toutes les fonctions des logiciels évolués. Il est absolument nécessaire de connaître
exactement leur fonctionnement pour pouvoir s'appuyer sur leurs résultats.
4. Conservation de l'énergie
4.1 Introduction
La Transformée de Fourier conserve l'énergie. C'est ce qu'exprime l'identité de Parseval :
∞ ∞
1
∫
−∞
∣ f x∣2 dx= ∫ ∣ F ∣2 d
2 −∞
I
Page 18
Bureau d'Etude Matlab Licence STS mention EEA
Il y a autant d'énergie dans le spectre d'un signal que dans le signal lui-même. C'est ce que l'on peut vérifier aisément en
choisissant la bonne expression de la transformée et un échantillon contenant un nombre entier de périodes d'un signal
sinusoïdal : la somme des harmoniques positive et négative pour une même fréquence vaut la valeur crête des signaux
à cette même fréquence.
Toutefois, si le signal n'est pas sinusoïdal au départ, on ne peut pas faire cette comparaison. Il faut alors calculer
l'énergie sur tout le spectre et le signal pour comparer.
4.2 Application
• Échantillonnez un signal carré S(t) de rapport cyclique 0,3, d'amplitude max 10 et min -5 d'une
longueur de 120 échantillons.
• Vérifiez l'expression (II). Attention aux indices, que signifie n dans l'expression (II). Quelle est la
longueur du vecteur contenant le spectre de S(t) ?
On constate bien que les énergies sont les mêmes, il faut toutefois bien faire attention aux longueurs des vecteurs
manipulés.
Page 19
Bureau d'Etude Matlab Licence STS mention EEA
La TFD ne permet pas d'avoir des fréquences très basses : la durée d'acquisition fixe la fréquence minimale ; les
fréquences très basses imposent des durées d'acquisition très longues. Enfin, le nombre de points (ou la période
d'acquisition) fixe la fréquence maximale.
La résolution spectrale est inversement proportionnelle à la durée d'acquisition du signal. La fréquence maximale
représentable est la fréquence d'échantillonnage divisée par deux (Shanon). Ces informations sont résumées sur la
figure 1 ci après.
Figure 1
2. Application
• Générez un vecteur-temps t d'une durée d'1/10 de seconde, échantillonné à la fréquence d'1 kHz.
• Calculez à partir de t les valeurs que prend un signal sinusoïdal de fréquence 30Hz aux instants
échantillonnés. On obtient ainsi le même signal qu'obtiendrait un Convertisseur Analogique/Numérique
cadencé à 1kHz en 1/10 de seconde (le bruit en moins !).
• En changeant le domaine de tracé à l'aide d'axis() comparez le rang des raies qui apparaissent dans le
spectre.
Page 20
Bureau d'Etude Matlab Licence STS mention EEA
Nous allons maintenant nous confronter au réel. Dans la réalité, on n'acquiert jamais des signaux ne contenant que des
multiples entiers de la fréquence minimale.
3.2 Application 1
• Reprenez le même "vecteur-temps" que précédemment (durée d'1/10s échantillonnée à 1kHz), et
calculez à partir de ce vecteur-temps les valeurs que prend un signal sinusoïdal de fréquence 10Hz aux
instants échantillonnés.
On pourrait penser que c'est parce que l'on a pris un signal dont la période "ne tient pas" dans la durée de l'échantillon,
que pour les autres signaux, on n'aurait pas le même problème. Testez les exemples suivants :
3.3 Application 2
• Dans les mêmes conditions que précédemment (durée d'1/10s échantillonnée à 1kHz) échantillonnez un
signal sinus de fréquence 10Hz.
• Superposez un signal de fréquence 25Hz échantillonné dans les mêmes conditions à ce signal.
• Tracez le spectre du signal combinant les deux signaux précédents. Que constatez-vous ?
Avec le "vecteur-temps" choisi, la résolution du spectre est de 10Hz. Il n'est pas possible de représenter un signal de
fréquence 25Hz, puisque les harmoniques sont des multiples entiers de la fréquence minimale représentée dans le
spectre (1/Ta).
Dans le cas où toutes les fréquences présentes dans le signal d'entrée sont des multiples entiers de la fréquence
minimale, on parle de TFD Synchrone (Asynchrone sinon).
4. Notion de Fenêtrage
4.1 Introduction
Si le signal est asynchrone (c'est à dire qu'il ne contient pas uniquement des fréquences multiples de 1/Ta, la durée
d'acquisition), le spectre peut devenir complètement illisible. Le problème vient du fait que l'on ne "voit" le signal que
pendant une courte "fenêtre" temporelle. En fait, c'est la troncature brutale du signal acquis qui pose problème,
autrement dit on a affaire à un "effet de bord".
Il existe des techniques pour "éclaircir" le spectre et le rendre plus lisible. Elles sont basées sur la modification de la
fenêtre de visualisation du signal. En effet, puisque le fait d'avoir un signal asynchrone pose problème, il suffit de rendre
ce signal synchrone pour lever la difficulté !
Page 21
Bureau d'Etude Matlab Licence STS mention EEA
Une méthode couramment utilisée est le fenêtrage. L'idée consiste à amoindrir l'influence de "l'effet de bord" en
multipliant le signal temporel par un signal périodique de période 1/Ta : la fenêtre. Il en existe, bien sur de différentes
formes.
La fenêtre "naturelle" ou l'on prend tous les échantillons tels qu'ils viennent est aussi appelée "fenêtre rectangulaire".
En fait, "fenêtrer" un signal revient à le rendre "pseudo-périodique". On se replace donc, autant que possible, dans les
conditions de la transformée synchrone.
L'autre idée consiste à diminuer le nombre de points de l'échantillon jusqu'à arriver sur un échantillon de longueur telle
qu'il soit un multiple d'une des fréquences contenue dans le signal. Cette méthode est dite ”Short-time Fourier
Transform”.
Bien entendu, cette méthode peut ne jamais marcher : si la fréquence contenue est 634,678587 Hz, la probabilité d'avoir
un nombre de points qui corresponde à un nombre entier de périodes est plus que faible. On combine en général les
deux méthodes.
où i est l'indice du point, N le numéro du dernier point dans une numérotation débutant à zéro.
0,5 * ( 1 - cos(2*π*t/Ta) )
5. Application
1. Échantillonnez un signal S(t) composé de deux signaux sinusoïdaux de fréquences 50 et 625 Hz
pendant 100ms à la fréquence de 5Kz.
Page 22
Bureau d'Etude Matlab Licence STS mention EEA
3. Tracez le spectre de S(t) en précisant en abscisse la fréquence des harmoniques - on ne tracera que
les fréquences positives-.
5. Calculez le signal ST(t) = S(t)*T(t). Tracez le spectre de ce nouveau signal. Comparez avec le spectre
de S(t). N'affichez que les fréquences entre 0 et 700 Hz
7. Reprenez les points 1 à 5 avec les fréquences 50 et 627, puis 622 Hz, n'affichez que les fréquences
entre 0 et 700Hz.
8. Reprenez les points 1 à 5 en utilisant une fenêtre triangulaire.(amplitude entre 0 et 1, rapport cyclique
0,5).
6. Conséquences du fenêtrage
Il est bien sûr beaucoup plus compliqué dans ces conditions (TFD asynchrone + fenêtrage) de vérifier l'égalité de
Parseval (II). Il faut donc regarder avec précaution les spectres donnés par des appareils automatiques (oscilloscopes,
analyseurs...). Très souvent, ces appareils effectuent un fenêtrage de Hamming (ou de Hanning), et il n'est pas réaliste
de parler de l'amplitude des raies sans avoir lu de façon approfondie la documentation de l'appareil à moins de ne se
contenter que d'une mesure qualitative.
7. Bibliographie
Vous trouverez d'autres fenêtres et des explications dans l'article de Frederic J. Harris « On the Use of Windows for
Harmonic Analysis with the Discrete Fourier Transform », Proceedings of the IEEE", Vol. 66, No. 1, January 1978. -allez
voir sur wikipédia avec comme mot clé « window function »
De même il est possible d'installer la toolbox traitement du signal dont le contenu est décrit ici :
http://octave.sourceforge.net/doc/signal.html
Page 23
Bureau d'Etude Matlab Licence STS mention EEA
• On considère le signal H t =1−exp −10 t . Calculez les valeurs que prend ce signal sur le vecteur
temps t. Tracez H(t) dans une figure 2.
• Calculez les transformées de Fourier TFD(S) et TFD(H) de ces signaux à l'aide de la fonction fft
d'Octave (attention à la convention !!). Tracez les spectres obtenus en fonction de la fréquence dans une
même figure 3 comportant 2 graphes.
2. Convolution numérique
La réponse s(t) d'un système dont la réponse impulsionnelle est H(t) à un signal e(t) est le produit de convolution :
∞
st =e t ∗H t = ∫ e H t− d I
−∞
Cette équation est le résultat de la convolution des fonctions de transfert de l'entrée et de la sortie du filtre. Si le système
fait intervenir la sortie on a affaire à un filtre récursif, dans le cas inverse, c'est à dire si tous les b sont nuls, le filtre est
dit non récursif. Il est possible d'échantillonner la réponse impulsionnelle H et d'utiliser la convolution numérique pour
calculer la sortie :
Page 24
Bureau d'Etude Matlab Licence STS mention EEA
∞
y k = ∑ H i xk −i IV
−∞
Si la réponse impulsionnelle est finie, il sera possible d'utiliser la relation (IV) sinon on utilisera la relation (III). Dans le
premier cas, on parlera de filtre à Réponse Impulsionnelle Finie, dans le second de filtre à Réponse Impulsionnelle
Infinie.
Une question mérite d'être posée : quel bénéfice tire-t-on de ces méthodes par rapport à l'utilisation d'une simple TFD
qui permet de modifier comme bon nous semble le spectre d'un signal quelconque ?
L'avantage est évidement un avantage de coût. Plus l'algorithme est rapide, moins les moyens de sa mise en œuvre
sont chers, plus le produit final sera compétitif…
1− z−1
p V
Te
2 1−z−1
p VI
T e 1z−1
Notez :
On écrit donc que le signal de sortie composé des échantillons yi vérifie la relation :
1
H p =
1 p
Page 25
Bureau d'Etude Matlab Licence STS mention EEA
Figure 1
• Générez, à l'aide de la fonction pulse, une impulsion d'une durée totale de 10 ms échantillonnée à une
fréquence de 100kHz.
• Appliquez le filtre passe bas à l'impulsion et tracez le résultat. Avec R=1k et C = 1 µF.
Figure 2
• Créez une impulsion d'une durée totale de 10ms échantillonnée à une fréquence de 100kHz ayant la
forme (2).
Page 26
Bureau d'Etude Matlab Licence STS mention EEA
• Tracez les spectres en fréquence du signal d'entrée et de sortie. Comparez les amplitudes. Quelle est
la fréquence de coupure du filtre RC ?
• Échantillonnez un signal composé de deux signaux sinusoïdaux de fréquence respectives 100Hz et 3kHz
pendant 25ms à 20kHz.
• Tracez les spectres en fréquence du signal d'entrée et de sortie. Comparez les amplitudes. Quelle est
la fréquence de coupure du filtre RC ?
• Échantillonnez un signal composé de deux signaux sinusoïdaux de fréquence respectives 100Hz et 3kHz
pendant 25ms à 20kHz.
• Calculez l'affaiblissement en dB en comparant les amplitudes des dernières périodes des signaux
d'entrée et de sortie.
• Tracez le diagramme de Bode de ce filtre dans la gamme de fréquence 10Hz- 10kHz (attention à la
durée du signal !). Comparez la courbe obtenue à la courbe théorique d'un premier ordre. Que constatez-
vous aux hautes fréquences ?
1
H p =
1a⋅pb⋅p2
Le circuit que vous étudierez est le suivant :
Figure 3
Page 27
Bureau d'Etude Matlab Licence STS mention EEA
• Calculez les valeurs de C1 et C2 pour que l'on ait ωm= 444Hz et égal à 0,7071. Tracez les réponses
indicielle, impulsionnelle et les réponses aux signaux sinusoïdaux du filtre ayant ces valeurs de C1 et C2.
• Tracez le diagramme de Bode de ce filtre dans la gamme de fréquence allant de 10Hz à 10kHz. La
durée du signal sera adaptée pour que l'on ait pour chaque fréquence 3 périodes de signal.
• Même question pour le cas où C1 = 3,6µF et C2 = 36nF, on prendra en ce cas une durée de 10 périodes.
La mesure s'effectuant toujours sur la dernière période.
• Reprenez les mêmes études (premier et second ordre) avec l'équivalence de l'intégration.
Page 28