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
| figure(1), hold off
H = [0 1 2 3 4 5 4 3 2 1 0 0 0 0 0 1 3 5 7 9 7 5 3 1 0 0 0 0 0 1 2 3 4 5 6 7 8 9 7 5 3 1 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 1 2 3 1 4 3 4 0 1 0 1 2 3 1 0 1 3 4 5 7 1 9 5 4 3 1 1 0 2 0 1 3 1 9 1 9 0 0 1 0 1 2 3 1 0 1 2 1 5 5 7 1 5 0 4 1 ].^2 ;
X = 1:length(H) ;
stairs(X, H)
S0 = cumsum(H) ;
S1 = cumsum(H .* X) ;
% si i est le lieu approximatif d'un pic,de largeur +/-2, alors les
% coordonées exactes du pic sont :
% x = (S1(i+2)-S1(i-2))/(S0(i+2)-S0(i-2))
% h = (S0(i+2)-S0(i-2))/5
figure(2), hold off
plot(X, S1)
% Lissage du signal cumulé. optimiser winl selon le problème
% Deux options de lissage :
% option 1 : savisky-golay
% Nécessite la sinal processing toolbox
winl = 4 ; % taille de la demi-fenêtre de lissage
winl2 = 2*winl + 1 ; % la fenêtre finale doit être symétrique
Ss = sgolayfilt(S0,2,winl2) ;
% % option 2 : moyenne glissante.
% % si tu n'as pas la sinal processing toolbox
% % active le code ci-dessous à la palce de la ligne 'Ss = sgolayfilt(S0,2,winl2) ;
% filter = [ 1:winl winl winl:-1:1] ;
% filter = filter / sum(filter) ;
% Sc = conv(S0, filter) ;
% Sc = Sc((winl+1):(end-winl)) ;
hold on
plot(X, Ss, 'r')
dSs = [0 diff(Ss)] ; % je veux les max locaux de cette fonction
figure (3), hold off
plot(X, dSs)
i = find (dSs > dSs([1 1:end-1]) & dSs > dSs([2:end end])) ;
Xpic = (S1(i+2)-S1(i-2))./(S0(i+2)-S0(i-2)) ;
Ypic = (S0(i+2)-S0(i-2))/5 ;
[unused j] = sort (Ypic) ;
figure (1), hold on
plot(Xpic, Ypic, 'ro')
disp ('les 7 plus gros pics sont')
disp ('Xmoyen Y moyen')
j = j(end:-1:end-7) ;
disp([Xpic(j) ; Ypic(j)]') ; |
Partager