Beruflich Dokumente
Kultur Dokumente
Unit SES
Signaux et Systmes
Travaux pratiques
tude de deux systmes analogiques . 1.1.1 Circuit RLC . . . . . . . . . . 1.1.2 Systme oscillant . . . . . . . Analyse avec Matlab . . . . . . . . . 1.2.1 Circuit RLC . . . . . . . . . . 1.2.2 Systme oscillant . . . . . . . Simulation d'un systme ractionn . Quelques fonctions utiles . . . . . . Analyse temporelle . . . . . . . . . . 2.1.1 Cration de quelques signaux 2.1.2 Valeurs moyennes, puissance . 2.1.3 Analyse des rsultats . . . . . Analyse spectrale . . . . . . . . . . . Reconstruction d'un signal . . . . . . Annexe . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
1 1 2 2 2 3 3 3
7
2.1
. 8 . 8 . 8 . 9 . 9 . 10 . 10
13
3.1 3.2
3.3
3.4 3.5
Numrisation des signaux analogiques . . . . . . chantillonnage des signaux analogiques . . . . 3.2.1 Signal sinusodal . . . . . . . . . . . . . 3.2.2 Signal audio . . . . . . . . . . . . . . . . 3.2.3 Signal modul en frquence . . . . . . . Rponse temporelle des systmes numriques . . 3.3.1 Produit de convolution . . . . . . . . . . 3.3.2 Rponses impulsionnelles et temporelles 3.3.3 quations aux dirences . . . . . . . . Rponse frquentielle des systmes numriques . Annexe . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
13 13 13 13 15 15 15 16 16 17 18
Etude des systmes avec Matlab Analyse de signaux priodiques Signaux et systmes numriques Ralisation d'un ltre analogique
Dates
ii
k
u1(t) C u2(t)
m
y(t)
Fig.
F(t)
3. Transformez de Laplace l'quation direntielle pour obtenir la fonction de transfert U2 (s) H (s) U1 (s) 4. Calculez 0 , Q0 et les ples de H (s). 5. Analysez et commentez.
% calcul d'un circuit RLC clear all ; close all ; clc ; format compact ; format short g ; % description d'un circuit RLC U1 = ... ; R = ... ; L = ... ; C = ... ; w0 = ..., Q0 = ... num = [...] ; den = [...] ; Hs = tf(...) ; ........
% calcul de la rponse temporelle tmax = ... ; Npts = ... ; dt = tmax / Npts ; tt = 0 :dt :tmax-dt ; ........ % calcul de la rponse frquentielle fmax = ... ; Npts = ... ; df = fmax / Npts ; ff = 0 :df :fmax-df ; f_bode = logspace(0, log10(fmax),Npts) ; % que fait cette fonction ? ........
Compltez l'criture de ce chier de manire raliser les oprations suivantes : acher les ples du systme ; rechercher ses pulsations naturelles et facteurs d'amortissement ; calculer et tracer sa rponse indicielle ; calculer sa rponse frquentielle ; tracer sa rponse frquentielle (module et argument) avec des axes linaires puis dans un diagramme de Bode.
Analysez et concluez.
Dans ce qui suit, on s'intresse l'oscillateur de Wien (voir EAN2) dcrit par le gain A et le taux de raction jRC (j ) = 1 + 3 jRC + (jRC )2 Dessinez le schma-bloc de l'oscillateur puis simulez son comportement lorsque le gain vaut 2.9, 3.0 ou 3.1. Observez, analysez et commentez.
1.4 Quelques fonctions utiles
Dans l'analyse de systmes linaires avec Matlab, la manire la plus simple de travailler avec ceux-ci est de les dnir avec des fonctions de transfert dont la forme gnrale est la suivante
G(s) =
N (s) a0 + a1 s + a2 s 2 + = D(s) b 0 + b 1 s + b 2 s2 +
Ces fonctions de transfert peuvent reprsenter aussi bien des quations direntielles linaires que des gains en tension ou en courant, des impdances, des admittances ou toute autre relation dcrivant des systmes linaires. Une fois la fonction de transfert dnie, Matlab ore un grand nombre de fonctions permettant de rpondre la plupart de nos interrogations. Quelques fonctions frquemment utilises sont rappeles ci-aprs : 1. dnition d'une fonction de transfert d'ordre 2
2.
3. 4.
5. 6.
7. 8. 9. 10.
11.
12. 13.
num = [a2, a1, a0] ; den = [b2, b1, b0] ; G1 = tf(num,den) ; mise en cascade ou en parallle de fonctions de transfert Gserie = G1*G2*G3 ; Gparr = G1+G2+G3 ; achage d'une fonction de transfert zpk(G1) ; recherche des ples et des zros pk = roots(den) ; zk = roots(num) ; recherche des pulsations naturelles et facteurs d'amortissement [wn, z] = damp(G1) ; calcul d'une fonction de transfert en boucle ferme o G(s) reprsente la branche directe et H (s) celle de retour Gbf = feedback(G,H,-1) ; extraction du numrateur et dnominateur d'une fonction de transfert [num, den] = tfdata(Gbf,'value') ; calcul d'une rponse indicielle aprs dnition du vecteur temporel yt = step(G1, tt) ; calcul de la rponse temporelle y (t) un signal x(t) prdni yt = lsim(G1, xt, tt) ; calcul d'une rponse frquentielle aprs dnition du vecteur frquentiel Gjw = freqs(num,den, 2*pi*ff) ; mod_Gjw = abs(Gjw) ; phi_Gjw = angle(Gjw) ; traage d'une fonction subplot(...,...,...) ; plot(...,...,...) ; ou semilogx(...,...,...) ; title('...') ; xlabel('...') ; ylabel('...') ; recherche de la longueur d'un vecteur lgxt = length(xt) ; recherche des composantes d'un vecteur dpassant le 30% de sa valeur maximum kf = find(xt > 0.3*max(xt)) ;
14. recherche de la premire composante d'un vecteur dpassant le 30% de sa valeur maximum
N'oubliez pas la fonction help qui vous donnera tous les dtails ncessaires au sujet de ces fonctions et de nombreuses autres.
10
15
20
25
10
15
20
25
10
15
20
25
10
15
20
25
Fig.
Commencez par lire la section 2.4 et observez quel point il est simple de crer des signaux priodiques o, sauf pour la sit, deux lignes de code susent. Copiez dans votre rpertoire de travail les fonctions sir.m, sit.m, sie.m, sinam.m gnratrices de quelques signaux utiles. Puis, dans la fentre de commandes Matlab, tapez help sir.m ou autres pour voir comment on utilise ces fonctions.
Px =
1 T
t0 +T t0
x2 (t) dt =
k
|X (jk )|2
(2.1)
et que la puissance totale d'un signal est gale la somme des puissances DC et AC
2 2 Px = Pdc + Pac = Xdc + Xac
(2.2)
On en dduit alors que la puissance et la valeur ecace de la composante alternative valent 2 Pac = Px Xdc , Xac = Pac (2.3) Comme les signaux que l'on traite avec Matlab sont des grandeurs analogiques numrises, il est important de dnir comment on calcule les valeurs associes aux signaux analogiques x(t) ou numriques x[n] : la composante continue ou valeur moyenne du signal
Xdc =
1 T
t0 +T
x(t) dt,
t0
Xdc =
1 N
N 1
x [n ]
n=0
(2.4)
Px =
1 T
t0 +T t0
x2 (t) dt,
Px =
1 N
N 1
x2 [n]
n=0
(2.5)
An d'obtenir les paramtres caractristiques de vos signaux, crivez une fonction fournissant ces valeurs :
Le travail qui est demand dans cette section s'inspire directement du chapitre consacr l'analyse spectrale numrique. Vous devez donc commencer par relire son contenu et vous attachez plus particulirement aux deux premiers exemples d'analyse spectrale. Une fois cela fait, copiez dans votre rpertoire de travail le chier enreg_signaux.txt et crez un nouveau chier signaux_c.m dans lequel vous eectuerez les oprations et analyses suivantes. 1. Chargez le chier enregistr et extrayez les informations utiles
mesure = load('enreg_signaux.txt') ; tt = mesure( :,1) ; xt = mesure( :,2) ; N = length(xt) ; dt = tt(2) - tt(1) ; duree = N * dt ; 2. Tracez et observez le signal x(t) ;
a) que valent sa puissance et ses valeurs moyenne et ecace ? b) que valent la dure du signal et sa priode d'chantillonnage ? c) que vaudront l'incrment frquentiel et la frquence maximum du spectre ? 3. Calculez le vecteur f [k ] des frquences et le spectre X [jk ] du signal x(t)]. Vriez que la puissance calcule avec X [jk ] donne bien le mme rsultat que celle calcule avec x(t)]. 4. Tracez (subplot(2,1,k)) les spectres d'amplitudes unitlatraux Ak et Aw,k avec des axes satisfaisants ; observez et analysez ; a) pouvez-vous mettre en vidence des composantes spectrales ? b) que valent leurs frquence, amplitude et phase ? c) quelle est l'incertitude sur la valeur des frquences ?
d) commentez l'allure du contenu spectral. 5. partir des composantes spectrales choisies comme signicatives, reconstruisez le signal original et calculez sa valeur ecace.
Comme on l'a vu dans l'analyse de Fourier, la reconstruction ou synthse d'un signal se fait partir de ses K composantes spectrales X (jk ) :
+K
x(K ) (t) =
k = K
(2.6)
En pralable votre travail, rappelez ce que valent les spectres d'une SIR et d'une SIT puis ouvrez un chier signaux_b.m dans lequel vous crerez des signaux de priode T0 = 1 ms et d'approximation K = 5, 10, 20. Pour cela : 1. Construisez les trois signaux priodiques suivants pour une dure 5T0 : a) un signal triangulaire similaire celui de la gure 2.1 ; b) une SIR centre caractrise par A = 5, t = 0.2 ms ; c) un signal carr dmarant au anc montant et d'amplitude comprise entre -2.5 et +2.5. 2. Pour chacun des signaux tracez les trois approximations (subplot(3,1,k)) ; observez-les et concluez. 3. Pour chacun des trois signaux, calculez leur puissance dans les domaines temporel et frquentiel. Comparez et expliquez les dirences.
2.4 Annexe
Voici les chers Matlab permettant de gnrer les signaux particuliers dnis en introduction. Vous noterez quel point la fonction modulo est utile pour gnrer des signaux priodiques.
Suites d'impulsions rectangulaires (sir.m)
function [x] = sir(temps, T0, rc) ; % sir(temps, T0, rc) % Calcul d'une suite d'impulsions rectangulaires d'amplitude 1,dure 5T_{0} % de rapport cyclique rc demarrant lorsque temps = 0 % Parametres : % temps = variable temporelle % rc = rapport cyclique = 0.5 par defaut
10
2.4 Annexe
% Exemple d'utilisation : % xt = amplitude * sir((temps+decalage),T0, rc) ; % valeurs par defaut if nargin == 2, rc = 0.5 ; end ; tm = mod(temps,T0) ; % rampe comprise entre 0 et T0 x = tm/T0 < rc ; % x = 1 ou 0
Suites d'impulsions triangulaires (sit.m)
function [x] = sit(temps, T0, rc) ; % sit(t, T0, rc) % Calcul d'une suite d'impulsions % priode T0, de rapport cyclique % Parametres : % temps = variable % T0 = priode % rc = rapport cyclique = 0.5 par % Exemple d'utilisation : % xt = amplitude * sit(temps, T0,
defaut rc) ;
% verification des parametres d'entree if nargin == 2, rc = 0.5 ; end ; % valeur par defaut if (rc > 1)|(rc < 0) error('Le rapport cyclique doit etre compris entre 0 et 1') ; end ; % creation du signal x = 0 x = zeros(size(temps)) ; tm = mod(temps,T0) ; % rampe comprise entre 0 et T0 % creation des triangles k1 = find(tm/T0 < rc/2) ; x(k1) = tm(k1)/T0 ; % rampe positive 0 ... rc/2 k2 = find((tm/T0 >= rc/2)&(tm/T0 < rc)) ; x(k2) = rc - tm(k2)/T0 ; % rampe negative rc/2 ... 0 % normalisation x = x/max(x) ;
Suites d'impulsions exponentielles amorties (sie.m)
function [x] = sie(temps, T0, tau) ; % sie(temps, T0, tau) % Calcul d'une suite d'impulsions exponentielles d'amplitude 1, % de constante de temps tau demarrant lorsque temps = 0 % Parametres : % temps = variable temporelle % T0 = periode % tau = constante de temps % Exemple d'utilisation : % xt = amplitude * sie(temps+decal, T0, tau) ;
11
function [y] = sinam(temps, T0, tau, Tp) ; % sinam(temps, T0, tau, Tp) % Calcul d'une suite de sinusoides amorties de periode Tp, % d'amortissement tau se repetant avec la periodicite T0 % Utilisation : % yt = amplitude * sinam(temps+decal, T0, tau, Tp) ; tm = mod(temps,T0) ; % rampe comprise entre 0 et T0 y = exp(-tm/tau).*sin(2*pi*tm/Tp) ;
12
Lorsqu'on analyse et/ou traite signaux par programmation (Matlab ou autres), ces signaux sont par dnition numriques. Au sens strict, on ne peut donc plus parler de signaux analogiques. Cependant, on se permet de le faire si l'incrment temporel utilis pour les dcrire est beaucoup plus petit que le temps caractristique minimum du signal. Dans tout ce qui suit, il est donc extrmement important de bien distinguer au niveau des variables entre les signaux analogiques numriss xt (quivalent de x(t)) et les signaux chantillonns xn (quivalent de x[n]) qui sont tous deux numriques. Dans le premier cas, on choisira un nombre lev de points de manire avoir un incrment temporel dt trs petit alors que dans le deuxime cas, l'incrment temporel Te sera x par la frquence d'chantillonnage qui doit respecter le thorme de Shannon ; gnralement, le nombre de points sera beaucoup moins lev que dans le premier cas. Une illustration en est donne dans la gure 3.1.
13
2 2
2 x 10
3
3
2 20
10
10
20
30
2 2
0 1 temps [s]
2 x 10
3
3
2 20
10
0 10 temps [t/Te]
20
30
% signal analogique numris tmin = -2e-3 ; tmax = +10e-3 ; Npts = 1000 ; dt = (tmax - tmin)/Npts ; tt = tmin :dt :tmax-dt ; A = 2 ; T0 = 1e-3 ; xt = A*sin(2*pi*tt/T0) ; subplot(2,2,1) ; plot(tt,xt) ; subplot(2,2,2) ; plot(tt,xt,'.') ; xlabel('temps [s]') ;
% signal chantillonn tmin = -2e-3 ; tmax = +10e-3 ; fe = 8000 ; Te = 1/fe ; tn = tmin :Te :tmax-Te ; A = 2 ; T0 = 1e-3 ; xn = A*sin(2*pi*tn/T0) ; subplot(2,2,3) ; plot(tn/Te,xn,'.') ; subplot(2,2,4) ; plot(tn/Te,xn,tn/Te,xn,'.') ; xlabel('temps [t/Te]') ;
Fig.
14
coutez le signal avec soundsc(xn,fe) ; pause(2) ; Connaissant la frquence d'chantillonnage et la dure du signal, calculez les frquences fk du spectre numrique ; rptez les oprations ci-dessus en traant les spectres Xjk dans une nouvelle gure : Xjk = fft(xn)/Npts ; subplot(3,3,k1) ; plot(fk,abs(Xjk)) ; coutez, observez et concluez.
2 t 2
f (t) =
Considrant que l'on choisit
2. 3. 4.
5.
calculez les frquences fmin , fmax . A quel instant t, la frquence vaudra-t-elle 4 kHz ? Tracez la main l'volution de la frquence f (t) ; imaginez l'allure du signal x(t). Que se passera-t-il d'anormal l'coute de ce signal ? Calculez le signal x[n] ; tracez-le avec la fonction large_plot.m (voir en annexe). Dans une nouvelle gure, tracez son spectrogramme specgram(xn,Nfft,fe), avec le code des couleurs colorbar et Nfft valant 128 ou 256. Qu'est-ce qui change avec 128 et 256 ? coutez le signal et concluez.
15
La fonction conv existe bien entendu dans Matlab. Cependant, an de bien comprendre l'algorithme de convolution, vous crerez votre propre fonction [yn] = myconv(hn,xn). Pour cela : 1. Calculez la main la convolution entre xn = [1,2,3,4] et hn = [5,6] ; quelle est la longueur du rsultat yn ? 2. Qu'est ce qui change si on augmente la longueur de xn avec des 0 (par exemple, xn = [1,2,3,4,0,0]) ? 3. crivez un chier myconv.m dont la premire ligne sera
function [yn] = myconv(hn,xn) ; 4. Dnissez les longueurs des signaux dont vous aurez besoin. crivez la double boucle for vous permettant de calculer yn(n). 5. Testez votre fonction avec les signaux dnis au point 1.
= = = = = =
[1 1 1 [5 4 3 [1 2 3 [1 2 3 0.7^n ; [3.27,
Pour ce faire : 1. Tracez ces rponses impulsionnelles avec subplot(3,2,k) ; plot(hkn,'.') ; observez et commentez. 2. Dans une nouvelle gure, calculez et tracez leur rponse yn = conv(xn,hnk) un signal carr xn = [0,ones(1,20),zeros(1,20)]. 3. Observez et analysez ces rponses ; quels types de ltres a-t-on aaire ? 4. Quelles sont les longueurs de xn et yn ? Justiez leur valeur. 5. Que faut-il faire pour que le gain des ltres passe-bas soit gal 1 ?
H (z )
b 0 + b 1 z 1 + b 2 z 2 Y (z ) = X (z ) 1 + a1 z 1 + a2 z 2
16
1. crivez une fonction [yn] = filtre_ed2(b,a,xn) vous permettant de calculer la rponse temporelle d'un ltre dcrit par les vecteurs a et b de longueur 2. 2. Considrant un ltre dcrit par a = [1,-1.4,+0.45] et b = [1,2,1], calculez ses ples et ses zros. 3. Quel sera le comportement transitoire du systme ? Que faut-il faire pour que le gain du ltre soit gal 1 ? 4. Calculez et tracez sa rponse xn = [0, ones(1,50)]. 5. Observez et commentez ; de quel type de ltre s'agit-il ? 6. Rptez les points 2 5 lorsque a) a = [1,-1.4,+0.7] et b = [1,2,1] ; b) a = [1,-1.4,+0.9] et b = [1,-2,1] ; c) a = [1,-1.4,+0.45] et b = [1,-2,1] ; d) a = [1,-1.4,+0.7] et b = [1,-2,1] ; e) a = [1,-0.7,0] et b = [1,0,0] ; 7. Comparez vos rsultats avec ceux fournis par la fonction filter(b,a,x) de Matlab.
H (z )
Y (z ) b 0 + b 1 z 1 + b 2 z 2 = X (z ) 1 + a1 z 1 + a2 z 2
on peut facilement calculer sa rponse frquentielle en remplaant l'oprateur de retard z 1 par sa transforme de Fourier exp(j ) o est la pulsation normalise
2f Te = 2
On obtient alors
f fe
H (j )
Y (j ) b0 + b1 ej + b2 ej 2 = X (j ) 1 + a1 ej + a2 ej 2
1. crivez une fonction [H] = myfreqz(b,a,W) permettant de calculer la rponse frquentielle d'un systme numrique d'ordre 2. 2. Calculez et tracez les modules et phases des rponses frquentielles des ltres numriques tudis plus haut. 3. Comparez vos rsultats ceux fournis par la fonction freqz(b,a,W) de Matlab.
17
3.5 Annexe
Voici le code du chier large_plot.m qui permet de tracer des enregistrements de longue dure.
function [] = large_plot(x,y) ; % [] = large_plot(x,y) ; % plot a graph on 10 sub-graphs Npts = length(x) ; Ndiv = 10 ; Npdiv = round(Npts/Ndiv) ; min_y = min(y) ; max_y = max(y) ; for kk = 1 :Ndiv deb = 1+Npdiv*(kk-1) ; fin = deb+Npdiv-1 ; subplot(Ndiv,1,kk) ; plot(x(deb :fin),y(deb :fin)) ; axis([x(deb),x(fin),min_y,max_y]) ; end ;
18