Code MatLab :
clc; clear; close all;
%% Paramètres du filtre Sallen-Key
fc = 1000; % Fréquence de coupure en Hz
C = 10e-9; % Capacité en Farads (10nF)
R = 1 / (2 * pi * fc * C); % Calcul de R pour atteindre fc
R = round(R, -1); % Arrondi à une valeur standard (ex: 16kΩ)
%% Définition de la fonction de transfert H(s)
s = tf('s'); % Définition de l'opérateur de Laplace
H = 1 / (1 + 2 * R * C * s + (R * C)^2 * s^2);
%% Tracé des courbes de Bode
figure;
bode(H);
title('Réponse fréquentielle du filtre passe-bas actif');
grid on;
%% Simulation temporelle : signal sinusoïdal
Fs = 50e3; % Fréquence d'échantillonnage (50 kHz)
T = 5e-3; % Durée de simulation (5 ms)
t = 0:1/Fs:T; % Axe temporel
freqs = [500, 1000, 2000, 5000, 10000]; % Fréquences d'entrée
colors = ['b', 'r', 'g', 'm', 'k']; % Couleurs pour distinguer les signaux
figure;
hold on;
for i = 1:length(freqs)
Vin = sin(2 * pi * freqs(i) * t); % Signal d'entrée
Vout = lsim(H, Vin, t); % Signal en sortie du filtre
% Tracé des signaux d'entrée
subplot(2,1,1);
plot(t*1000, Vin, 'Color', colors(i), 'LineWidth', 1.5);
hold on;
% Tracé des signaux de sortie
subplot(2,1,2);
plot(t*1000, Vout, 'Color', colors(i), 'LineWidth', 1.5);
hold on;
end
% Configuration des axes
subplot(2,1,1);
xlabel('Temps (ms)');
ylabel('Amplitude');
title('Signaux d’entrée pour différentes fréquences');
legend(arrayfun(@(f) [num2str(f), ' Hz'], freqs, 'UniformOutput', false));
grid on;
subplot(2,1,2);
xlabel('Temps (ms)');
ylabel('Amplitude');
title('Signaux de sortie après filtrage');
legend(arrayfun(@(f) [num2str(f), ' Hz'], freqs, 'UniformOutput', false));
grid on;
hold off;