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
|
CONST Nmax = Long_L1; // nombre de données disponibles
Seuil = 100; // exemple simple - s = (Xmax - Xmin)/2 ?
m = 10;
TYPE Element = RECORD OF Pic: Byte; // réductible à un booléen
Signal: LongInt END; //
LstLi = ARRAY[1..Nmax] OF LongInt; //
LstEl = ARRAY[1..Nmax] OF Element; //
VAR Liste1: LstLi; // liste des données
Liste2: LstEl; // liste des pics détectés
p: Byte; Dwx, Dxy, Dwy, i, w, x, y: LongInt
// ...
PROCEDURE ZeroE(VAR P1: Byte; VAR I1: LongInt);
BEGIN
P1:= 0; I1:= 0
END;
// ...
Liste2[1]:= 0;
FOR k:= 2 TO Nmax-1 DO
BEGIN
w:= Liste1[k-1]; x:= Liste1[k]; y:= Liste1[k+1];
Dwx:= Abs(w - x); Dxy:= Abs(x - y); Dwy:= ZAbs(w - y);
IF (Liste2[k-1]=m) THEN ZeroE(p, i) // interdiction de 2 pics adjacents
ELSE BEGIN
Swxy:= Dwx + Dxy;
Test1:= (Swxy>Seuil); // intensité suffisamment forte
Test2:= (3*Dwy)<Swxy); // pic nettement détaché de la base - condition sur la forme
IF (Test1 AND Test2) THEN BEGIN
p:= m; i:= 2 * x; Dec(i, w + y)
END
ELSE ZeroE(p, i)
END
Liste2[k].Pic:= p; Liste2[k].Signal:= i
END; |
Partager