MATLAB
MATLAB
MATLAB
+
u v
g v
m
k
u
m
f
u
'
'
k
0
x
Introduction MATLAB Auteur : Serge Bedwani
Page 25
Pour rsoudre ce systme diffrentiel, on utilisera la fonction ode45 prvue par
MATLAB. Cette fonction utilise la mthode de Runge-Kutta avec un calcul de pas
automatique.
Pour utiliser la fonction ode45, nous avons besoin de deux fichiers : un fichier
fonction dans lequel on dcrit le systme diffrentiel et un fichier script qui fait appel
la fonction ode45 et qui ralise le trac des courbes.
fichier rsprime.m
function sd=rsprime(t,s)
global k m f g
%systme diffrentiel
sd=[(-k*s(2)-f*s(1))/m+g;s(1)];
fichier rs_nl.m
global k m f g
k=10; m=0.2; f=0.1; g=9.81;
%conditions initiales
t0=0; tf=20; x0=0.1; v0=0;
[t,x]=ode45(rsprime,t0,tf,[x0,v0]);
%trac de la vitesse
subplot(211)
plot(t,x(:,1))
xlabel(temps)
ylabel(vitesse)
grid
%trac de la position
subplot(212)
plot(t,x(:,2))
xlabel(temps)
ylabel(position)
grid
0 2 4 6 8 10 12 14 16 18 20
-2
-1
0
1
2
temps
v
i
t
e
s
s
e
0 2 4 6 8 10 12 14 16 18 20
0
0.1
0.2
0.3
0.4
temps
p
o
s
i
t
i
o
n
Introduction MATLAB Auteur : Serge Bedwani
Page 26
4.0 La programmation avec MATLAB
4.1 Oprateurs et caractres spciaux
Le tableau suivant rsume les oprateurs que lon peut rencontrer dans MATLAB
ainsi quun certain nombre de caractres spciaux.
Symbole fonction
+ Addition de rels et de matrices
- Soustraction de rels et de matrices
* Produit de rels et de matrices
.* Produit lment par lment de matrices
^ lvation une puissance de rels et de matrices
.^ Puissance lment par lment de matrices
\ Division gauche de rels et de matrices
/ Division droite de rels et de matrices (division classique)
./ Division lment par lment de matrices
== galit
~= Diffrent
< Strictement infrieur
<= Infrieur ou gal
> Strictement suprieur
>= Suprieur ou gal
& ET logique (AND)
| OU logique (OR)
~ NON logique (NOT)
xor OU exclusif (XOR)
% Commentaires
= Affectation
Transpose de matrices et dlimiteur de chanes de caractres
! Commandes systme (chappement)
, Sparation dinstructions ou de rels dans une matrice
; Sparation dinstructions (pas daffichage de valeurs intermdiaires)
ou de lignes dune matrice
Symbole de continuation (pour terminer une instruction ou une
expression la ligne suivante)
. Point dcimal
.. Rpertoire parent du rpertoire en cours
[ ] Dfinition de vecteurs ou de matrices
( ) Utilisation dans des expressions ou des fonctions
Introduction MATLAB Auteur : Serge Bedwani
Page 27
4.2 Instructions et commandes structures
MATLAB dispose des instructions structures suivantes : for, while et if.
4.2.1 Instruction for
syntaxe
for variable = expression
instructions
end
Exemple :
n=7;
x=[];
for i=1:n,
x=[x, sqrt(i)];
end
Les boucles for peuvent tre imbriques entre elles et avec les autres instructions de
contrle.
4.2.2 Instruction while
syntaxe
while expression
instructions
end
Exemple :
n=0;
while (x^n <= Max)
n=n+1;
end
Introduction MATLAB Auteur : Serge Bedwani
Page 28
4.2.3 Instruction if
syntaxe
if expression
instructions I1
else
instructions I2
end
En cas dinstructions conditionnelles imbriques, un else est toujours associ au if
le plus proche. Dans le cas de slections multiples, on utilisera linstruction elseif.
Exemple :
if moy >= 5.5
mention = trs bien;
elseif moy >= 5
mention = bien;
elseif moy >= 4.5
mention = Assez bien;
elseif moy >= 4
mention = Passable;
else
mention = Ajourn(e);
end
4.2.4 Instructions de rupture de squence
break : Termine lexcution dune boucle. Si plusieurs boucles
sont imbriques, break permet de sortir de la boucle la
plus proche.
return : Cette instruction permet de revenir au fichier M ayant
appel le programme courant ou la ligne de commandes
MATLAB.
error(message) : Affiche le message spcifi, met un bip et interrompt
lexcution du programme.
Introduction MATLAB Auteur : Serge Bedwani
Page 29
4.3 Ralisation dinterfaces graphiques
Visualisons directement un exemple, pour expliquer la cration de menus, dans une
fentre MATLAB.
% Cration de la fentre graphique
figure(gcf) ;
% Dclaration des proprits de la fentre
set(gcf,'Resize','Off','Name','Exemple',...
'Menubar','None','NumberTitle','off',...
'Position',[120 120 600 420]);
% Dfinitions des menus
fichier=uimenu('Label','Fichier');
edition=uimenu('Label','Edition');
% Dfinitions des sous-menus
uimenu(fichier,...
'label','Imprimer',...
'callback','print -f');
uimenu(fichier,...
'label','Configuration de limpression',...
'callback','print -dsetup');
uimenu(fichier,...
'Label','Quitter',...
'separator','on',...
'Callback','close(gcf)');
uimenu(edition,...
'label','Copier au format Metafile',...
'callback','print -dmeta');
uimenu(edition,...
'label','Copier au format Bitmap',...
'callback','print -dbitmap');
Le rsultat obtenu est le suivant :
Introduction MATLAB Auteur : Serge Bedwani
Page 30
Il existe une autre faon de raliser une interface graphique depuis la version 5 de
MATLAB. Cette outil est destin ceux qui aiment travailler de faon visuelle
(mme principe que Delphi, Visual C++, Visual Basic).
Linvocation de lditeur se fera laide de la commande guide. Une fentre
principale contenant les outils de cration (panneau de contrle) et une fentre vierge
pour la cration de linterface sont alors prsentes lcran.
guide
Pour plus dexplication, lutilisateur peut consulter le livre intitul Apprendre et
Matriser MATLAB chapitre 5 La programmation oriente Objets, page 416.
Et pour plus de dtails sur la ralisation dinterfaces graphiques, au chapitre 10,
page 301.
Introduction MATLAB Auteur : Serge Bedwani
Page 31
5.0 Complment : Analyse de systmes dynamiques linaires laide de
la bote outils control systems
5.1 Introduction de fonctions de transfert (transmittances)
5.1.1 Introduction sous forme polynmiale
Lintroduction de fonctions de transfert seffectue en deux temps, les numrateurs et
dnominateurs doivent tre donns sparment. Le principe est simple : les
numrateurs et dnominateurs apparaissent sous forme de vecteurs-ligne, les
composantes desquels tant les coefficients des puissances dcroissantes de s
(systmes analogiques) ou de z (systmes numriques).
Soit par exemple la fonction de transfert
2 . 0 s 4 s 1
12 s 1
50
) s ( U
) s ( Y
) s ( G
2
+ +
+
Son introduction dans MATLAB se fait par les commandes :
numG=50*[12,1];
denG=[0.2,4,1];
Le coefficient de s
0
(ou z
0
pour les systmes numriques), quil soit nul ou non, doit
toujours tre donn. Ainsi, la fonction de transfert de lintgrateur :
s
4567 . 3
) s ( G
est introduite sous la forme :
numG=3.4567;
denG=[1,0];
Les noms donns aux numrateurs et dnominateurs sont libres. On aura toutefois
intrt tre organis et rigoureux dans les notations employes.
5.1.2 Introduction sous forme de zros, ples et gain (forme dEvans)
Il est galement possible dintroduire une fonction de transfert par le biais de ses
zros, ples et de son facteur dEvans k. Les zros et ples doivent apparatre sous
forme de vecteurs-colonne.
Introduction MATLAB Auteur : Serge Bedwani
Page 32
Soit par exemple la fonction de transfert :
( ) ( )
( ) ( ) ( )
( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( ) ( ) j 3 5 s j 3 5 s 11 s
j 7 3 s j 7 3 s
s
32 . 5
3 5 s 11 s
7 3 s
s
32 . 5
) s ( G
2 2
2 2
+
+
+ + +
+ +
La suite de commandes ncessaires est simplement :
zG=[-3+j*7,-3-j*7];
pG=[0,-11,-5+j*3,-5-j*3];
kG=5.32;
Il va sans dire que lon privilgiera cette forme lorsque le numrateur et dnominateur
de la fonction de transfert du systme G(s) ou G(z) ne sont pas directement
disponibles sous forme de polynmes.
5.2 Passage dun modle lautre
Les ples et zros des fonctions de transfert sont obtenus laide de la fonction
tf2zp(transfert function to zero pole) :
[zG,pG,kG]=tf2zp(numG,denG);
MATLAB place alors les zros et les ples dans les vecteurs-colonne zG et pG,
respectivement, et le facteur dEvans dans la variable kG. Les noms zG, pG et kG
sont arbitraires.
Remarque : un polynme est introduit sous la forme dun vecteur-ligne v dont les
composantes reprsentent les coefficients des puissances dcroissantes; ses racines
sont obtenues par la fonction roots(v)
Toute une catgorie de routines permettent de passer dun modle lautre :
Forme polynmiale forme en zros, ples et gain
[zG,pG,kG]=tf2zp(numG,denG);
Forme polynmiale modle dtat
[AG,BG,CG,DG]=tf2ss(numG,denG);
Forme en zros, ples et gain forme polynmiale
[numG,denG]=zp2tf(zG,pG,kG);
Introduction MATLAB Auteur : Serge Bedwani
Page 33
Forme en zros, ple et gain modle dtat
[AG,BG,CG,DG]=zp2ss(zG,pG,kG);
Modle dtat forme polynmiale
[numG,denG]=ss2tf(AG,BG,CG,DG);
Modle dtat forme en zros, ples et gain
[zG,pG,kG]=ss2zp(AG,BG,CG,DG);
Modle dtat autre modle dtat, avec matrice de
transformation T
[AG2,BG2,CG2,DG2]=ss2ss(AG,BG,CG,DG,T);
5.3 Construction de schmas fonctionnels
5.3.1 Fonctions series, cloop
Prenons par exemple le schma fonctionnel universel, dont on souhaite obtenir les
fonctions de transfert en boucle ouverte G
o
(s) et en boucle ferme G
w
(s). Pour ce
faire, il faut procder par tapes, comme indiqu par la figure ci-dessous :
w(t) e(t)
G (s)
o
y(t)
-
G (s)
w
w(t)
y(t)
Introduction MATLAB Auteur : Serge Bedwani
Page 34
1) Calcul de G
a
(s) par la mise en srie de G
a1
et G
a2
.
On fait usage de la fonction series :
[numGa,denGa]=series(numGa1,denGa1,numGa2,denGa2);
2) Calcul de G
o
(s) par la mise en srie de G
c
et G
a
On procde de mme quen 1) :
[numGo,denGo]=series(numGc,denGc,numGa,denGa);
3) Calcul de G
w
(s) par fermeture de la boucle (retour unitaire)
On fait usage de la fonction cloop comme suit :
[numGw,denGw]=cloop(numGo,denGo);
La rponse indicielle en boucle ferme peut alors tre calcule et trace par :
step(numGw,denGw);
Introduction MATLAB Auteur : Serge Bedwani
Page 35
de mme que la rponse harmonique en boucle ouverte par :
bode(numGo,denGo);
5.3.2 Fonction feedback
La fonction feedback est utile pour calculer la fonction de transfert quivalente du
systmes ayant pour schma fonctionnel :
[numGv,denGv]=feedback(numGa,denGa,numGc,denGc,signe);
Si le paramtre signe nest pas spcifi ou vaut 1, la transmittance G
c
(s) est en
contre-raction, alors quelle est ractionne pour une valeur de signe gale 1.
w(t)=0
v(t)
G (s)
c
G (s)
a2
y(t)
-
G (s)
a1
-
Introduction MATLAB Auteur : Serge Bedwani
Page 36
5.4 Calcul et trac de rponses de systmes dynamiques linaires
5.4.1 Rponse temporelle
Les fonctions impulse, step, lsim, et pour les systmes numriques,
dimpulse, dstep, dlsim sont disponibles. Leur signification est la suivante :
SYSTEMES ANALOGIQUES :
Rponse impulsionnelle :
impulse(numG,denG,t);
Rponse indicielle :
step(numG,denG,t);
Rponse une entre u quelconque dfinie par lutilisateur :
lsim(numG,denG,u,t);
Rponse du systme lorsque ses conditions initiales sont x0 :
initial(A,B,C,D,x0,t);
SYSTEMES NUMERIQUES :
Rponse impulsionnelle :
dimpulse(numH,denH,n);
Rponse indicielle :
dstep(numH,denH,n);
Rponse une entre u quelconque dfinie par lutilisateur :
dlsim(numH,denH,u);
Rponse du systme lorsque ses conditions initiales sont x0 :
dinitial(A,B,C,D,x0,n);
Introduction MATLAB Auteur : Serge Bedwani
Page 37
Les paramtres t, n et w sont optionnels et MATLAB les dtermine lui-mme par
dfaut. Si lon souhaite les fixer, on peut par exemple le faire selon les indications
suivantes :
t : (facultatif) vecteur-ligne de temps, spcifiant les instants o la rponse doit
tre calcule (ce paramtre est obligatoire si lon utilise lsim)
Exemple :
Cre un vecteur temps variant entre 0[s] et 0.2[s] par pas de 0.01[s].
t=[0:0.01:0.2];
ou
t=linspace(0,0.2,201);
n : (facultatif) nombre dchantillons dsirs
Exemple :
Seuls les 10 premiers chantillons de la rponse seront affichs.
n=10;
w : (facultatif) vecteur-ligne de pulsation, spcifiant les pulsations o la rponse
doit tre calcule.
Exemple :
Cre un vecteur pulsation de 100 points espacs logarithmiquement et
variant entre 10
2
[rad/s] et 10
5
[rad/s].
w=logspace(2,5,100);
u : vecteur-colonne de lentre simule du systme (ce paramtre est obligatoire
si lon utilise lsim ou dlsim)
Exemple :
Cre un vecteur u reprsentant une entre sinusodale damplitude 1.5
et de frquence 10[Hz]. u est calcul pour chaque instant dfini dans le
vecteur t.
u=1.5*sin(2*pi*10*t);
Lors du calcul de la rponse harmonique de systmes numriques, il convient de
spcifier la priode dchantillonnage h.
Introduction MATLAB Auteur : Serge Bedwani
Page 38
Il est souvent utile deffectuer ces calculs de rponse sans tracer celle-ci
immdiatement. Dans ce cas, on procde comme ci-dessus en spcifiant toutefois des
arguments de sortie dans lesquels MATLAB sauvera les rsultats de ses calculs :
SYSTEMES ANALOGIQUES SYSTEMES NUMERIQUES
[y,x,t]=impulse(numG,denG,t); [y,x]=dimpulse(numH,denH,n);
[y,x,t]=step(numG,denG,t); [y,x]=dstep(numH,denH,n);
[y,x]=lsim(numG,denG,u,t); [y,x]=dlsim(numH,denH,u);
y est un vecteur-colonne contenant la rponse cherche et t un vecteur-ligne contenant
les instants auxquels elle a t calcule. x est une matrice contenant lvolution du
vecteur dtat systme dynamique.
5.4.2 Rponse frquentielle
Les fonctions bode, nyquist, nychols, et pour les systmes numriques,
dbode, dnyquist, dnychols sont disponibles. Leur signification est la
suivante :
SYSTEMES ANALOGIQUES SYSTEMES NUMERIQUES
bode(numG,denG,w) Dbode(numH,denH,h,w)
Si les rsultats des calculs doivent tre sauvegards en vue dun traitement ultrieur,
on indique galement des arguments de sortie :
SYSTEMES ANALOGIQUES SYSTEMES NUMERIQUES
[A,phi,w]=bode(numG,denG,w) [A,phi,w]=dbode(numH,denH,h,w)
A et phi sont des vecteurs-colonne contenant respectivement le gain et la phase et w
un vecteur-ligne contenant les pulsations correspondantes.
5.5 Analyse des proprits des systmes
Gain statique dun systme analogique :
dcgain(num,den);
Gain statique dun systme numrique :
ddcgain(num,den);
Taux damortissement , pulsation propre non-amortie
n
et ples dun systme
analogique ayant den pour dnominateur :
damp(den);
Introduction MATLAB Auteur : Serge Bedwani
Page 39
Taux damortissement , pulsation propre non-amortie
n
et ples dun systme
discret ayant den pour dnominateur :
ddamp(den);
5.6 Calcul ,affichage des marges de gain et de phase
Marges de phase et de gain dun systme analogique.
Si les arguments de sortie ne sont pas spcifis, trace le lieu de Bode et montre
graphiquement la valeur des marges.
[Am,phi_m]=margin(numGo,denGo);
5.7 Trac du lieu dEvans
Trace le lieu dEvans de la fonction de transfert. k est une option; cest un vecteur-
ligne contenant les diffrentes valeurs du facteur dEvans pour lesquelles le lieu doit
tre trac.
rlocus(num,den,k)
Affiche les courbes qui-amortissement des plans de s et de z respectivement. A
excuter immdiatement aprs rlocus.
sgrid
zgrid
Configuration ples-zros de la fonction de transfert.
pzmap(num,den)
Trac interactif du lieu dEvans. A excuter directement aprs rlocus et sgrid; une
croix est alors affiche, que lon peut dplacer avec la souris sur un point particulier
du lieu. En cliquant, on obtient alors dans k le facteur dEvans correspondant et dans
p lexpression du ple.
[k,p]=rlocfind(num,den)
Introduction MATLAB Auteur : Serge Bedwani
Page 40
5.8 Divers
Force la compensation ple-zro.
minreal(num,den)
Affiche les fonctions de transfert comme fractions rationnelles en s ou en z.
printsys(num,den,s)
printsys(num,den,z)
Runis le numrateur et le dnominateur en une seul variable compose dune
matrice.
G0=tf(num,den)
Linverse de la fonction prcdente, partant dune seul variable compose dun
vecteur en un numrateur et un dnominateur .
[num,den]=tfdata(G0,v)
Introduction MATLAB Auteur : Serge Bedwani
Page 41
6.0 Applications (exemples)
6.1 Ralisation dune fonction qui affiche le lieu de Bode
Pour tracer un lieu de Bode, il faut avoir au pralable la toolbox system control.
Mais nous allons raliser une fonction traant le lieu de Bode, sans toolbox!!!
De plus cette fonction est capable de dterminer la marge de phase
m
et de gain A
m
ainsi que les pulsations
co
et
correpondantes.
Tout dabord, il sagit de crer un fichier fonction, avec des paramtres dentres, tels
que le numrateur et le dnominateur, donns dans le domaine de s, de la fonction de
transfert que lon dsire tracer.
function[]=bode_sbe(num,den,w_min,w_max,titre,nb_pts)
Nous traiterons ensuite les erreurs et les valeurs par dfaut avec la commande
nargin.
Il ne faut pas oublier que les variables dfinies dans une fonction, ne sont pas vues de
lextrieur! Do lemploi de global.
La suite consiste crer la fentre graphique avec ses menus, tel que dcrit au
chapitre 4.3.
Algorithme du lieu de Bode :
Cration dun espacement logarithmique avec logspace.
logspace(d1,d2,N)
qui gnre N valeurs espaces dun pas logarithmique entre 10
d1
et 10
d2
, si N est
omis sa valeur par dfaut est 50.
Cration de la rponse frquentielle complexe dans un vecteur.
h=freqs(num,den,w)
Lamplitude du diagramme de Bode est dtermin par lextraction du module du
nombre complexe.
mag=abs(h)
Pour la phase, cela devient un petit peu plus compliqu, vu que larctangente, ne traite
pas des angles au-del de 180 . Nous allons donc fabriquer un algorithme capable
de grer la phase 360 .
Introduction MATLAB Auteur : Serge Bedwani
Page 42
Il ne faut pas oublier de transformer les radians en degr la fin, puisque MATLAB
travail en radian.
La phase suivante est le trac de lamplitude et de la phase.
Pour cela nous utiliserons la commande subplot, qui divise la fentre graphique en
plusieurs zones.
subplot(m,n,p)
avec m, qui dsigne le nombre de lignes et n le nombre de colonnes et trace le
graphique qui suit cette instruction dans la zone de numro p (la numrotation se fait
de gauche droite et ligne par ligne).
Pour laffichage de lamplitude, le graphique aura ses chelles en logarithmique.
loglog(f,mag)
Pour laffichage de la phase, lchelle de la pulsation sera logarithmique, mais pas
celle de la phase.
semilogx(f,phase)
Et pour finir, il est intressant de voir, quil est possible de modifier les proprits
dun objet graphique. Dans notre cas, nous allons modifier la couleur des courbes en
rouges.
line(f,mag,color,r)
line(f,phase,color,r)
Exemple de trac du lieu de Bode :
10
-2
10
0
10
2
10
4
10
6
-150
-100
-50
0
50
LIEU DE BODE
g
a
i
n
[
d
B
]
10
-2
10
0
10
2
10
4
10
6
-100
-50
0
50
pulsation [rad/s]
p
h
a
s
e
[
d
e
g
r
]
Introduction MATLAB Auteur : Serge Bedwani
Page 43
Fichier Source :
(bode_sbe.m)
%/*
%****************************************************************************
% bode_sbe.M
%****************************************************************************
%
% Lieu de Bode sans TOOLBOX !!!!!!
%
%****************************************************************************
%****************************************************************************
%Version Date Auteur Motif
% 0 28/04/00 SBE Creation
%
%****************************************************************************
%*/
% Trace le lieu de Bode
% ATTENTION, la phase de la fonction de transfert n'est valable
% que dans l'intervalle de +-360
%
% function [] = bode_sbe(num,den,w_min,w_max,titre,nb_pts)
%
% num : numrateur de la fonction G(s)
% den : dnominateur de la fonction G(s)
% w_min : borne infrieur du diagramme de bode 10^w_min
% w_max : borne suprieur du diagramme de bode 10^w_max
% titre : titre du diagramme, donner entre guillemets simples
% nb_pts : nombre de points calculer
function[]=bode_sbe(num,den,w_min,w_max,titre,nb_pts)
nargs = 6;
if nargin < nargs, nb_pts=1000; end
if nargin < nargs-1, titre='LIEU DE BODE'; end
if nargin < nargs-2, w_max=6; end
if nargin < nargs-3, w_min=-1; end
if nargin < nargs-4,
error('Il manque le numrateur et le dnominateur');
end
% Variables externes
global hZoomOn hZoomOff hZoomreset
% Variables internes
quadrant=1;
previous_quadrant=1;
quadrant_III_to_II=0;
quadrant_II_to_III=0;
close all;
figure(gcf)
set(gcf,'Resize','Off','Name','Lieu de Bode',...
'Menubar','None','NumberTitle','off',...
'Position',[120 120 600 420]);
fichier=uimenu('Label','Fichier');
sauver=uimenu(fichier,...
'label','Sauvegarde');
uimenu(sauver,...
'label','Sauvegarder au format BMP',...
'callback','print -dbitmap bode');
uimenu(sauver,...
'label','Sauvegarder au format Metafile',...
'callback','print -dmeta bode');
uimenu(sauver,...
'label','Sauvegarder au format postcript',...
'callback','print -deps bode');
Introduction MATLAB Auteur : Serge Bedwani
Page 44
impression=uimenu(fichier,...
'label','Impression');
uimenu(impression,...
'label','Imprimer Lieu de Bode',...
'callback','print -f');
uimenu(impression,...
'label','Configuration de l''impression',...
'callback','print -dsetup');
uimenu(fichier,...
'Label','Quitter',...
'separator','on',...
'Callback','close(gcf)');
edition=uimenu('Label','Edition');
uimenu(edition,...
'label','Copier au format Metafile',...
'callback','print -dmeta');
uimenu(edition,...
'label','Copier au format Bitmap',...
'callback','print -dbitmap');
hZoom=uimenu('Label','Zoom');
hZoomOn=uimenu(hZoom,...
'label','Enclenchement du zoom',...
'callback',['type_zoom=1;','gest_opt']);
hZoomOff=uimenu(hZoom,...
'label','Dclenchement du zoom',...
'callback',['type_zoom=2;','gest_opt']);
hZoomreset=uimenu(hZoom,...
'label','Zoom Reset',...
'separator','on',...
'callback',['type_zoom=3;','gest_opt']);
set(hZoomOff,'checked','on');
uimenu('Label','Quitter','Callback','close(gcf)');
w=logspace(w_min,w_max,nb_pts);
h=freqs(num,den,w);
f=w/(2*pi);
mag=abs(h);
i=1;
while i~= length(h)+1
reel=real(h(i));
imaginaire=imag(h(i));
if (imaginaire>=0)
if ((reel>=0)&(quadrant_II_to_III==0))
quadrant=1;
phase(i)=atan2(imaginaire,reel)*(180/pi);
else
if (quadrant_II_to_III==0)
quadrant=2;
if (previous_quadrant==3)
quadrant_II_to_III=1;
phase(i)=(atan2(imaginaire,reel)*(180/pi))-360;
else
phase(i)=atan2(imaginaire,reel)*(180/pi);
end
else
if (reel>=0)
quadrant=1;
phase(i)=(atan2(imaginaire,reel)*(180/pi))-360;
else
quadrant=2;
phase(i)=(atan2(imaginaire,reel)*(180/pi))-360;
end
end
end
else
if ((reel>=0)&(quadrant_III_to_II==0))
quadrant=4;
phase(i)=atan2(imaginaire,reel)*(180/pi);
else
if (quadrant_III_to_II==0)
quadrant=3;
if (previous_quadrant==2)
Introduction MATLAB Auteur : Serge Bedwani
Page 45
quadrant_III_to_II=1;
phase(i)=(atan2(imaginaire,reel)*(180/pi))+360;
else
phase(i)=atan2(imaginaire,reel)*(180/pi);
end
else
if (reel>=0)
quadrant=4;
phase(i)=(atan2(imaginaire,reel)*(180/pi))+360;
else
quadrant=3;
phase(i)=(atan2(imaginaire,reel)*(180/pi))+360;
end
end
end
end
if (abs(phase(i))>=359)
warning('ATTENTION, la phase de la fonction de transfert dpasse 360');
end
previous_quadrant=quadrant;
i=i+1;
end
subplot(2,1,1),loglog(f,mag);
line(f,mag,'color','r');
title(titre)
ylabel('gain [dB]')
grid on
subplot(2,1,2),semilogx(f,phase);
line(f,phase,'color','r');
xlabel('pulsation [rad/s]')
ylabel('phase [degr]')
grid on
clc;
% Recherche de la marge de phase et de gain
k=2;
while k~=length(mag)
if ((20*log10(mag(k))<0)&(20*log10(mag(k-1))>0))|(20*log10(mag(k))==0)
position_zero=k;
break
else
k=k+1;
end
end
if exist('position_zero')
pulsation_wco=f(position_zero);
marge=180-abs(phase(position_zero));
marge_phase=phase(position_zero);
magnitude=mag(position_zero);
if marge<=0
phi_m=0;
else
phi_m=marge;
end
fprintf('Marge de phase : %f[]\n', phi_m)
fprintf('Pulsation wco : %f[rad/s]\n', pulsation_wco)
else
warning('Attention, pas de marge de phase, le gain ne passe pas par 0[dB]')
pulsation_wco=0;
marge_phase=0;
magnitude=0;
end
fprintf('\n')
k=2;
while k~=length(phase)
if ((phase(k)<-180)&(phase(k-1)>-180))|(phase(k)==-180)
position_phase=k;
break
else
k=k+1;
end
end
Introduction MATLAB Auteur : Serge Bedwani
Page 46
if exist('position_phase')
pulsation_wpi=f(position_phase);
am=mag(position_phase);
if am<1
am=-am;
end
fprintf('Marge de gain : %f[dB]\n',am)
fprintf('Pulsation wpi : %f[rad/s]\n',pulsation_wpi)
else
warning('Attention, pas de marge de gain, la phase ne passe pas par -180')
end
magdb = 20*log10(mag);
subplot(2,1,1),semilogx(f,magdb,pulsation_wco,magnitude,'o');
line(f,magdb,'color','r');
title(titre)
ylabel('gain [dB]')
grid on
subplot(2,1,2),semilogx(f,phase,pulsation_wco,marge_phase,'o');
line(f,phase,'color','r');
xlabel('pulsation [rad/s]')
ylabel('phase [degr]')
grid on
(gest_opt.m)
global hZoomOn hZoomOff hZoomreset
set(hZoomOn,'checked','off');
set(hZoomOff,'checked','off');
set(hZoomreset,'checked','off');
if type_zoom == 1
set(hZoomOn,'checked','on');
zoom on;
elseif type_zoom == 2
set(hZoomOff,'checked','on');
zoom off;
elseif type_zoom == 3
set(hZoomOff,'checked','on');
zoom out;
zoom off;
end
Introduction MATLAB Auteur : Serge Bedwani
Page 47
6.2 Rponse en frquence dun filtre RLC
Nous allons maintenant raliser un filtre RLC, et tracer son lieu de Bode avec la
fonction que nous venons de crer dans lexemple prcdent.
Schma lectrique :
C L
R
Equation correspondante :
R
sC
1
sL
R
) s ( V ) s ( V
in out
+ +
Ce qui nous donne comme fonction de transfert :
( ) ( )
(
(
,
\
,
,
(
j
+
+
(
(
,
\
,
,
(
j
+
+ +
1
LC 4 RC RC
LC 2
s 1
LC 4 RC RC
LC 2
s
sRC
1 sRC LC s
sRC
) s ( V
) s ( V
) s ( H
2 2
2
in
out
Rappel : le numrateur et le dnominateur doivent tre dclars avec les puissances
de s dcroisssantes.
Bien sr qu'il est plus appropri de donner le dnominateur sous la forme de Bode,
pour la comprhension, mais cela devient plus compliqu exprimer.
Si cela avait t le cas, comme le dnominateur est du second ordre, il aurait t
judicieux d'utiliser la convolution, comme suit :
den=conv([T1 1],[T2 1])
Fichier Source :
(rlc.m)
% Fichier : rlc.m
% Auteur : Serge Bedwani
% Date : 04.05.00
% But : Rponse en frquence d'un filtre RLC
L=5; % Self [H]
C=1.25e-6; % Condensateur [F]
R1=10000; % Rsistance [Ohm]
R2=100; % Rsistance [Ohm]
numG1=[C*R1 0];
denG1=[L*C C*R1 1];
numG2=[C*R2 0];
denG2=[L*C C*R2 1];
Introduction MATLAB Auteur : Serge Bedwani
Page 48
% Diagramme de Bode
bode_sbe(numG1,denG1,0,4,'Rponse pour R=10k'); pause;
bode_sbe(numG2,denG2,0,4,'Rponse pour R=10k'); pause;
% Forme de Bode
racine1=sqrt((R1*C)^2-(4*L*C));
numB1=[C*R1 0];
denB1=conv([((2*L*C)/((R1*C)-racine1)) 1],[((2*L*C)/((R1*C)+racine1)) 1]);
bode_sbe(numB1,denB1,0,4,'Rponse pour R=10k sous forme de Bode');
pause;
racine2=sqrt((R2*C)^2-(4*L*C));
numB2=[C*R2 0];
denB2=conv([((2*L*C)/((R2*C)-racine2)) 1],[((2*L*C)/((R2*C)+racine2)) 1]);
bode_sbe(numB2,denB2,0,4,'Rponse pour R=0.1k sous forme de Bode');
Diagramme de Bode obtenu avec R = 10k :
10
-1
10
0
10
1
10
2
10
3
10
4
-40
-30
-20
-10
0
Rponse pour R=10k
g
a
i
n
[
d
B
]
10
-1
10
0
10
1
10
2
10
3
10
4
-100
-50
0
50
100
pulsation [rad/s]
p
h
a
s
e
[
d
e
g
r
]
Diagramme de Bode obtenu avec R = 0.1k :
10
-1
10
0
10
1
10
2
10
3
10
4
-80
-60
-40
-20
0
Rponse pour R=0.1k
g
a
i
n
[
d
B
]
10
-1
10
0
10
1
10
2
10
3
10
4
-100
-50
0
50
100
pulsation [rad/s]
p
h
a
s
e
[
d
e
g
r
]
Introduction MATLAB Auteur : Serge Bedwani
Page 49
6.3 Sous-chantillonnage d'une sinusode
Considrons un signal sinusodal x(t) de frquence f
o
= 10kHz que l'on chantillonne
avec une frquence f
e
= 8kHz.
Frquence de repliement :
kHz 2 kHz 8 kHz 10 f f nf f f
e o e r
Fichier Source :
(sousech.m)
% Fichier : sousech.m
% Date : 9.05.00
% But : Sous-chantillonnage d'une sinusode
% paramtres
fo=10e3; % frquence du signal sinusodal
fe=8e3; % frquence d'chantillonnage
To=1/fo; % priode du signal sinusodal
Te=1/fe; % priode d'chantillonnage
fa=fo-fe; % frquence apparente
tmax=10*To;
% Calcul de x(t)
t=0:tmax/200:tmax;
xt=sin(2*pi*t/To);
% Calcul du signal apparent
xta=sin(2*pi*t*fa);
% Echantillonnage de x(t)
tn=0:Te:tmax;
xn=sin(2*pi*tn/To);
% Traage des courbes
plot(t,xt,tn,xn,'o',t,xta,'-');
title('Sous-chantillonnage d''une sinusode');
xlabel('Temps [s]');
Signal sinusodal de frquence f
o
et signal sinusodal d au sous-chantillonnage :
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
x 10
-3
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Sous-chantillonnage d'une sinusode
Temps [s]
Introduction MATLAB Auteur : Serge Bedwani
Page 50
6.4 Suite d'impulsions rectangulaires
La suite d'impulsions rectangulaires (SIR) est un signal particulirement important car
elle apparat dans de nombreuses applications telles que l'chantillonnage, la
modulation d'impulsions, etc.
Evaluons donc la srie de Fourier complexe de la SIR x(t). Par dfinition des
coefficients complexes X(jk), on a:
2 / T
2 / T
) t f 2 jk (
dt e ) t ( x
T
1
) jk ( X
o
avec f
o
= 1/T
En tenant compte de la dfinition de la SIR, il vient :
+
2 / t
2 / t
) t f 2 jk (
dt e
T
A
) jk ( X
o
]
]
]
,
)
2
t
f 2 jk ( )
2
t
f 2 jk (
o
o o
e e
f 2 jk
1
T
A
) jk ( X
Les relations d'Euler permettent de passer de la diffrence des exponentielles un
sinus et d'crire ces coefficients sous une forme plus simple :
t f k
) t f k sin(
T
t
A ) jk ( X
o
o
Fichier Source :
(sir.m)
% Fichier : sir.m
% Date : 9.05.00
% But : Echantillonnage d'une SIR
clear all;close all;
% paramtres
T = 1e-3; % priode
delta = T/4; % priode/4
fo = 1/T; % frquence SIR
fe = 20*fo; % frquence chantillonnage
Te = 1/fe; % priode chantillonnage
A = 4; % amplitude en Volt
% signal temporel xt = x(t)
Nmax = 500;
t=-T/2:T/Nmax:T/2;
lt0=round((Nmax/T)*((T-delta)/2));
lt1=(Nmax/T)*delta;
x0=zeros(1,lt0);
x1=A*ones(1,lt1);
xt=[x0,x1,x0];
Introduction MATLAB Auteur : Serge Bedwani
Page 51
% echantillonnage xtn = x(nTe)
tn=-T/2:Te:+T/2;
Nmax=ceil(T/Te); % arrondi >= (T/Te)
lt0=round((Nmax/T)*((T-delta)/2));
lt1=(Nmax/T)*delta;
x0=zeros(1,lt0);
x1=A*ones(1,lt1);
xtn=[x0,x1,x0];
% traage des signaux temporels
figure(gcf);
plot(t,xt,tn,xtn,'o');
title('Signaux xa(t) et xe(t)');
xlabel('temps [s]');
% spectre original
f=-fe:fo:fe;
xf=(A*(delta/T))*sinc(f*delta);
% spectre en +fe et -fe
xfp1=sinc((f-fe)*delta);
xfm1=sinc((f+fe)*delta);
% traage des spectres
figure(gcf+1);
subplot(3,1,1);
plot(f,xf);stem(f,xf);
title('Spectre original');
subplot(3,1,2);
stem(f,xfp1);
title('Spectre d +fe');
subplot(3,1,3);
stem(f,xfm1);
title('Spectre d -fe');
xlabel('frquence [Hz]');
% effet du repliement spectral
figure(gcf+1);
subplot(1,1,1);
plot(f,xf,'x');
hold on;
stem(f,xf+xfp1+xfm1);
title('Effet du repliement spectral: x = Xa(jf), o = Xe(jf)');
xlabel('frquence [Hz]');
hold off;
Prenons un exemple :
SIR d'amplitude 4V de priode T = 1msec et de largeur t = T/4 que l'on chantillonne
avec T
e
= T/20.
Introduction MATLAB Auteur : Serge Bedwani
Page 52
Signaux temporels, x(t) et x(nTe) :
-5 -4 -3 -2 -1 0 1 2 3 4 5
x 10
-4
0
0.5
1
1.5
2
2.5
3
3.5
4
Signaux xa(t) et xe(t)
temps [s]
T=1msec
delta=T/4
Spectres :
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
x 10
4
-0.5
0
0.5
1
Spectre original
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
x 10
4
-0.5
0
0.5
1
Spectre d +fe
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
x 10
4
-0.5
0
0.5
1
Spectre d -fe
frequence [Hz]
Introduction MATLAB Auteur : Serge Bedwani
Page 53
Effet du repliement spectral :
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
x 10
4
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Effet du repliement spectral: x = Xa(jf), o = Xe(jf)
frequence [Hz]
Introduction MATLAB Auteur : Serge Bedwani
Page 54
7.0 Rfrences bibliographiques
Introduction au logiciel MATLAB
Cours & exercices
Auteur : Michel Etique, EIVD
Laboratoire danalyse numrique
Auteur : Louis Chassot, EIVD
Apprendre et Matriser MATLAB
Versions 4&5 et SIMULINK
Auteurs : M.Mokhtari & A.Mesbah
Edition Springer
ISBN 3-540-62773-1
Applications de MATLAB 5 et SIMULINK 2
Auteurs : M.Mokhtari & M.Marie
Edition Springer
ISBN 2-287-59651-8
Electronics and circuit analysis using MATLAB
John O. Attia
Editeur : CRC BIRKHAUESER
ISBN 0-8493-1176-4
8.0 Services Internet
Site The MathWorks : http://www.mathworks.com
Site SCIENTIFIC SOFTWARE : http://www.ssg.fr
Fournisseur Suisse :
Scientific Computers SC AG
Schrmattstrasse 6+8
3073 Gmligen
Homepage : www.scientific.ch