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 59 60 61 62 63 64
| load('essai.mat');
% Réduction du nombre de données
n=10000;
s=4000;
x=s:s+n;
y=Data{1}(s:s+n);
figure
% Tracé du signal non filtré
subplot(2,1,1)
plot(x,y,'r-')
title('Signal non filtré')
% Vecteur des valeurs théoriques possibles
appuis=[0;0.267;0.533;0.8;1.067;1.334;1.6;1.867;2.133;2.4;2.666;2.933;3.2;3.467;3.73;4];
% Création d'un vecteur NaN correspondant à y filtré
yfiltr=nan(size(y));
% ALGORITHME A AMELIORER (CERTAINEMENT)
% Arrondis des valeurs de y pour simplifier le test qui suit
y=round(100*y)/100;
% Comparaison de chaque valeur de y à chaque valeur théorique de appuis
% Si y est presque égal à appuis(n) alors yfiltr=appuis(n);
for n=1:numel(appuis)
idx=abs(appuis(n)-y)<0.01;
yfiltr(idx)=appuis(n);
end
% Affichage des valeurs sans le "bruit"
subplot(2,1,2)
plot(x,yfiltr,'r-')
title('Signal sans "bruit"')
% Interpolation des valeurs manquantes ("bruit") du signal filtré
idx=isnan(yfiltr);
yfiltr(idx) = interp1(find(~idx), yfiltr(~idx), find(idx), 'nearest');
figure
% Tracé du signal filtré
plot(x,yfiltr,'r-','linewidth',2)
% Mise en forme du graphique
hold on
col=jet(numel(appuis));
colormap(col);
% Ajout des lignes correspondant aux valeurs d'appuis
for n=1:numel(appuis)
p(n)=plot([x(1) x(end)],[appuis(n) appuis(n)]);
set(p(n),'color',col(n,:),'linestyle',':')
end
uistack(p,'bottom')
title('Signal filtré')
legend(p,num2str(appuis,'%.3f')) |
Partager