clc;
clear;
close all;
% --- Paramètres du signal analogique (capteur) ---
f = 5; % fréquence du signal (Hz)
A = 1; % amplitude du signal
t = 0:0.001:1; % temps continu (1 ms de pas)
signal_ideal = A * sin(2 * pi * f * t); % signal sinusoïdal pur
% --- Ajout de bruit (bruit blanc gaussien) ---
bruit = 0.3 * randn(size(t)); % bruit de moyenne 0, écart-type ajustable
signal_brule = signal_ideal + bruit; % signal bruité
% --- Conditionneur : amplification ---
gain = 2;
signal_amplifie = gain * signal_brule;
% --- Filtrage passe-bas (filtre FIR simple) ---
fc = 10; % fréquence de coupure du filtre (Hz)
Fs = 1000; % fréquence d’échantillonnage du signal analogique (1/pas)
ordre = 50;
wn = fc / (Fs / 2); % fréquence normalisée
b = fir1(ordre, wn); % coefficients du filtre passe-bas
signal_filtre = filter(b, 1, signal_amplifie);
% --- Echantillonnage ---
Fe = 50; % fréquence d'échantillonnage (Hz)
Te = 1 / Fe;
t_ech = 0:Te:1;
signal_ech = interp1(t, signal_filtre, t_ech); % valeurs échantillonnées
% --- Conversion analogique-numérique (quantification) ---
nb_bits = 8;
Vref = 5;
niveaux = 2^nb_bits;
pas_quantif = Vref / niveaux;
% Mise à l’échelle entre 0 et Vref
sig_rescale = signal_ech - min(signal_ech);
sig_rescale = sig_rescale * (Vref / max(sig_rescale));
% Quantification
signal_num = round(sig_rescale / pas_quantif) * pas_quantif;
% --- Enregistrement des données numériques dans un fichier CSV ---
csvwrite("donnees_acquisition.csv", [t_ech' signal_num']);
% --- Affichages ---
figure;
subplot(4,1,1);
plot(t, signal_ideal, 'b', t, signal_brule, 'm:');
title('Signal capteur avec bruit');
legend('Signal idéal','Signal bruité');
xlabel('Temps (s)');
ylabel('Amplitude');
subplot(4,1,2);
plot(t, signal_amplifie, 'r');
title('Signal amplifié avant filtrage');
xlabel('Temps (s)');
ylabel('Amplitude');
subplot(4,1,3);
plot(t, signal_filtre, 'k');
title('Signal après filtrage passe-bas');
xlabel('Temps (s)');
ylabel('Amplitude');
subplot(4,1,4);
stem(t_ech, signal_num, 'g');
title('Signal numérique (échantillonné + quantifié)');
xlabel('Temps (s)');
ylabel('Amplitude');