1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| % Ce script n'est qu'une application théorique du test d'amélioration du
% SNR sous Matlab
clear all; clc;
% Test de suppression de bruit blanc : oversampling et moyennage
Fech = 250; % Ancienne fréquence d'échantillonnage
New_Fech = 25; % Nouvelle fréquence d'échantillonnage ^^
coef_bruit = 10; % Amplitude du bruit par rapport au signal
duree = 10; % Durée de l'acquisition
nb_capteurs = 12; % Nombres de capteurs
Freq_sinus = 3; % Fréquence du signal
k = (1/Fech:1/Fech:duree)'; % Vecteur temps
signal = sin(2*pi*Freq_sinus*k); % Signal utile (ici un simple sinus)
sb = zeros(size(signal,1),nb_capteurs); % Vecteur des signaux additionnés de bruit
for i = 1:nb_capteurs,
sb(:,i) = signal + coef_bruit*randn(size(signal,1),1);
end; % On crée une matrice constituée du signal additionné de bruits blancs...
% Calcul de la moyenne simple et sous échantillonnage à New_Fech Hz
moy = mean(sb,2);
% Calcul du sous échantillonnage maison
new_moy = zeros(Fech*duree,nb_capteurs);
for capteur = 1:nb_capteurs,
signal_courant = sb(:,capteur);
ratio = Fech/New_Fech;
signal_selection_coupee = reshape(signal_courant,ratio,size(signal_courant,1)/ratio)';
signal_resample = zeros(Fech*duree,ratio);
for i = 1:ratio,
signal_resample(:,i) = resample(signal_selection_coupee(:,i),ratio,1);
signal_resample(:,i) = [zeros(i-1,1);signal_resample(1:end-i+1,i)];
end;
new_moy(:,capteur) = mean(signal_resample,2);
end;
new_moy_recalculee = mean(new_moy,2);
% Lavage du workspace
clear new_moy; clear i; clear k; clear Fr*; clear capteur; clear coef_bruit; clear ratio;
clear signal_resample; clear signal_courant; clear signal_selection_coupee;
% Rééchantillonnage
resampled_signal = resample(signal,New_Fech,Fech); % Signal d'origine
resampled_moy = resample(moy,New_Fech,Fech); % Moyenne de tous les signaux
resampled_new_moy = resample(new_moy_recalculee,New_Fech,Fech); % Moyenne recalculée
% Affichage de comparaison (temporel)
figure(1); plot([signal moy new_moy_recalculee])
figure(2); plot([resampled_signal resampled_moy resampled_new_moy])
% Affichage des FFT
figure(3)
k_freq = (1:size(signal,1))/duree;
plot(k_freq,abs(fft(signal)))
hold on;
plot(k_freq,abs(fft(moy)),'g')
plot(k_freq,abs(fft(new_moy_recalculee)),'r')
legend('Signal d''origine','Signal moyenné','Signal suréchantillonné, moyenné et sous-échantillonné')
xlim([0 125]) |
Partager