Retour sur Les éléments de base

Systèmes

Fonction de transfert

Un système peut-être mathématiquement modélisé par sa fonction de transfert \(H(p)\), qui est une fraction rationnelle de deux polynomes \(N(p)\) et \(D(p)\). Il s’agit de la relation qui lie le signal d’entrée au signal de sortie en fonction de la fréquence du signal d’entrée.

Il existe deux moyens sous Matlab pour définir cette fonction de transfert.

Fonction de transfert dépendant de w

La première méthode consiste à utiliser les outils vectoriels de Matlab.

Chacun de ces polynômes dépend de la pulsation \(\omega\) (ou fréquence \(f = \frac{\omega}{2 \pi}\)). Il faut donc créer un vecteur permettant de stocker des valeurs de pulsation :

% vecteur des pulsations, variation log de 10^1 à 10^6 sur 101 points
w = logspace(1, 6, 101); 

Dans la suite de cet exemple, nous allons nous intéresser à un filtre passe-bas RC, dont la fonction de transfert est : \(H(j\omega) = \frac{1}{1 + j R C \omega}\).

Il est donc nécessaire de saisir les paramètres du modèle, ici R et C :

% paramètres du filtre RC
R = 1e4;
C = 1e-7;

On peut à présent définir les deux polynomes : numérateur (\(num\)) et dénominateur (\(den\)) ainsi que la fonction de transfert (\(TF\)) :

% fonction de transfert
num = 1;
den = 1 + j * R * C * w;
TF = num ./ den;

Fonction tf de Matlab

Diagramme de Bode d’un système

A partir de la TF vectorielle

A partir de la fonction de transfert calculée précédemment, il est possible de calculer alors le gain en dB et la phase de cette fonction de transfert de la manière suivante :

% calcul du gain et de la phase
gain = 20*log10(abs(TF));
phase = angle(TF);

On peut alors tracer le diagramme de Bode dans deux sous-figures de la manière suivante :

subplot(2,1,1);
semilogx(w,gain);
xlabel('Frequence (Hz)');
ylabel('Gain (dB)');
grid on;
subplot(2,1,2);
semilogx(w,phase);
xlabel('Frequence (Hz)');
ylabel('Phase (radians)');
grid on;

On obtient alors une courbe de la forme suivante :

A partir d’un système TF de Matlab

Calculer la FFT d’un signal

Un des calculs les plus utilisés dans le traitement du signal (électrique ou traitement d’image) est la transformée de Fourier discrète. L’un des algorithmes permettant d’obtenir ce résultat est la FFT (Fast Fourier Transform). Matlab permet de calculer le spectre d’un signal en utilisant la fonction fft.

Cette fonction retourne un vecteur de nombres complexes de la même taille que le vecteur du signal d’entrée dont on veut connaitre la transformée de Fourier. Les fréquences associées sont comprises entre 0 et Fe – où Fe est la fréquence d’échantillonnage utilisée pour acquérir (ou créer) le signal d’entrée.

Le script suivant génère deux signaux sinusoïdaux de N échantillons chacun sur une durée de visualisation TA (en s). Le premier a une fréquence f1 et l’autre f2. fa et fb sont les deux signaux numériques. La figure 1 affiche les deux signaux échantillonnées et la figure 2 les transformées de Fourier de deux signaux.

%% Signaux temporels et FFT
f1 = 12;
f2 = 18;
amp = 25;
N = 201;
TA = 1;
ta = linspace(0,TA,N);
tb = [0:TA/(N-1):TA];

fa = amp * sin(2*pi*f1*ta);
fb = amp/2 * sin(2*pi*f2*ta);

figure(1);
plot(ta, fa, ta, fb);
legend('sinus à 12Hz','sinus à 18Hz')
xlabel('temps (s)')
ylabel('signal (V)')
title('Sinus en fonction du temps')

%% calcul de la FFT
freqa = linspace(-N/(2*TA),N/(2*TA),N);
tfa = fft(fa);
tfa_s = fftshift(tfa)/N;
tfb = fft(fb);
tfb_s = fftshift(tfb)/N;
figure(2);
plot(freqa,abs(tfa_s),freqa,abs(tfb_s));
xlabel('Fréquence (Hz)')
ylabel('TF (V)')
legend('sinus 12Hz','sinus 18Hz')

Le script précédent permet d’obtenir les deux figures suivantes :

MATLAB / Systèmes et simulations