%% Simulation / Modélisation de systèmes linéaires % Module : Ingénierie Electronique % pour le Traitement de l'Information %-------------------------------------------------------------- % Modélisation d'un filtre du premier ordre % et du deuxième ordre % Affichage des réponses en fréquence %-------------------------------------------------------------- % Auteur : Julien VILLEMEJANE % Date : 11/12/2020 %-------------------------------------------------------------- clear all; close all; %% Premier ordre % Fonction de transfert d'un filtre passe-bas du premier ordre % --> H(jw) = 1 / (1 + jw/wc) R = 1e4; C = 100e-9; wc = 1/(R*C); w = logspace(0,6,1001); % vecteur des pulsations entre 10^0 et 10^6 tf_num = 1; tf_den = 1 + 1*j * w/wc; % Fonction de transfert H = tf_num ./ tf_den; % Diagramme de Bode figure(1); title('Filtre du premier ordre') subplot(2,1,1); semilogx(w, 20*log10(abs(H))); grid on; xlabel('pulsation (rd/s)'); ylabel('Gain (dB)'); legend('Système étudié'); subplot(2,1,2); semilogx(w, angle(H)); grid on; xlabel('pulsation (rd/s)'); ylabel('Phase (rd)'); %% Autre méthode - choix automatique des pulsations tf_num = [1]; tf_den = [1/wc 1]; H = tf(tf_num, tf_den); [mag, phase, w_out] = bode(H); mag = squeeze(mag); phase = squeeze(phase); figure(2); title('Filtre du premier ordre') subplot(2,1,1); semilogx(w_out, 20*log(mag)); grid on; xlabel('pulsation (rd/s)'); ylabel('Gain (dB)'); legend('Système étudié'); subplot(2,1,2); semilogx(w_out, 2*pi*phase/360.0); grid on; xlabel('pulsation (rd/s)'); ylabel('Phase (rd)'); %% Autre méthode - choix imposé des pulsations tf_num = [1]; tf_den = [1/wc 1]; H = tf(tf_num, tf_den); [mag, phase, w_out] = bode(H, w); mag = squeeze(mag); phase = squeeze(phase); figure(3); title('Filtre du premier ordre') subplot(2,1,1); semilogx(w, 20*log(mag)); grid on; xlabel('pulsation (rd/s)'); ylabel('Gain (dB)'); legend('Système étudié'); subplot(2,1,2); semilogx(w_out, 2*pi*phase/360.0); grid on; xlabel('pulsation (rd/s)'); ylabel('Phase (rd)'); %% Deuxième ordre / Passe-bas % Fonction de transfert d'un filtre passe-bas du second ordre % --> H(jw) = A / (1 + jw/wc/Q + (jw/wc)^2) A = 1; fc = 1000; % fréquence de coupure wc = 2*pi*fc; Q = 10; % facteur qualité f = logspace(0,6,1001); % vecteur des fréquences entre 10^0 et 10^6 tf_num = A; tf_den = 1 + 1*j * 2*pi*f/wc * 1/Q + (1*j*2*pi*f/wc).^2; % Fonction de transfert H = tf_num ./ tf_den; % Diagramme de Bode figure(4); title('Passe-bas du second ordre') subplot(2,1,1); semilogx(f, 20*log(abs(H))); grid on; xlabel('fréquence (Hz)'); ylabel('Gain (dB)'); legend('Système étudié'); subplot(2,1,2); semilogx(f, angle(H)); grid on; xlabel('fréquence (Hz)'); ylabel('Phase (rd)'); %% Deuxième ordre / Passe-bande % Fonction de transfert d'un filtre passe-bas du second ordre % --> H(jw) = A . jw/wc/Q / (1 + jw/wc/Q + (jw/wc)^2) A = 1; fc = 1000; % fréquence de coupure wc = 2*pi*fc; Q = 10; % facteur qualité f = logspace(0,6,1001); % vecteur des pulsations entre 10^0 et 10^6 tf_num = A * 1*j * 2*pi*f/wc * 1/Q; tf_den = 1 + 1*j * 2*pi*f/wc * 1/Q + (1*j*2*pi*f/wc).^2; % Fonction de transfert H = tf_num ./ tf_den; % Diagramme de Bode figure(5); subplot(2,1,1); semilogx(f, 20*log(abs(H))); grid on; xlabel('fréquence (Hz)'); ylabel('Gain (dB)'); legend('Système étudié'); subplot(2,1,2); semilogx(f, angle(H)); grid on; xlabel('fréquence (Hz)'); ylabel('Phase (rd)'); %% Deuxième ordre / Passe-haut % Fonction de transfert d'un filtre passe-haut du second ordre % --> H(jw) = A . (jw/wc)^2 / (1 + jw/wc/Q + (jw/wc)^2) A = 1; fc = 1000; % fréquence de coupure wc = 2*pi*fc; Q = 10; % facteur qualité f = logspace(0,6,1001); % vecteur des pulsations entre 10^0 et 10^6 tf_num = A * (1*j*2*pi*f/wc).^2; tf_den = 1 + 1*j * 2*pi*f/wc * 1/Q + (1*j*2*pi*f/wc).^2; % Fonction de transfert H = tf_num ./ tf_den; % Diagramme de Bode figure(6); subplot(2,1,1); semilogx(f, 20*log(abs(H))); grid on; xlabel('fréquence (Hz)'); ylabel('Gain (dB)'); legend('Système étudié'); subplot(2,1,2); semilogx(f, angle(H)); grid on; xlabel('fréquence (Hz)'); ylabel('Phase (rd)');