%% Exercice 3 - Simulation et Discrétisation du Filtre clear; clc; close all; %% 1. Définition du filtre continu F(s) num_s = [1, 20]; den_s = [1, 200]; F_s = tf(num_s, den_s); % Paramètres d'échantillonnage T = 1/200; % Constante de temps du pôle (0.005 s) Ts = T / 10; % Période d'échantillonnage (0.0005 s) fs = 1 / Ts; % Fréquence d'échantillonnage (2000 Hz) fprintf('Période d''échantillonnage Ts = %.4f s\n', Ts); fprintf('Fréquence d''échantillonnage fs = %.0f Hz\n', fs); %% 2. Définition de la fonction de transfert discrète F(z) z_p = exp(-200 * Ts); % Pôle en z ~ 0.9048 z_z = exp(-20 * Ts); % Zéro en z ~ 0.9905 num_z = [1, -z_z]; den_z = [1, -z_p]; F_z = tf(num_z, den_z, Ts); disp('Fonction de transfert en z F(z) :'); disp(F_z); %% 3. Tracé des diagrammes de Bode figure('Name', 'Diagramme de Bode'); bode(F_s, 'b', F_z, 'r--'); grid on; legend('Filtre continu F(s)', 'Filtre numérique F(z)'); title('Comparaison des diagrammes de Bode (Continu vs Discret)'); %% 4. Simulation temporelle du code récursif (Temps réel) t_sim = 0:Ts:0.05; % Vecteur temps sur 50 ms N = length(t_sim); % Entrée Y : Échelon unité Y_input = ones(1, N); % Initialisation des variables pour le filtrage pas-à-pas Y_fil = zeros(1, N); Y_old = 0; Y_fil_old = 0; % Algorithme récursif (tel qu'écrit dans le corrigé) for k = 1:N Y_current = Y_input(k); % Équation aux différences Y_fil(k) = Y_current - 0.9905 * Y_old + 0.9048 * Y_fil_old; % Mise à jour des états précédents pour le pas suivant Y_old = Y_current; Y_fil_old = Y_fil(k); end %% 5. Affichage de la réponse temporelle figure('Name', 'Réponse temporelle'); lsim(F_s, Y_input, t_sim, 'b'); hold on; stem(t_sim, Y_fil, 'r.', 'LineWidth', 1.2); grid on; xlabel('Temps [s]'); ylabel('Sortie Y_{fil}'); legend('Réponse continue F(s)', 'Réponse du code numérique Y_{fil}'); title('Réponse à un échelon du filtre numérique');