kamill:
Bonjour,Il faut déjà revoir ton algorithme de recherche des min et max.
Ensuite il suffit de mémoriser i dans une variable (par exemple imin1 et imax1 ) quand tu mémorise min1 et max1.
Est tu sur que les max/min soient univoques?
Souvent les mesures ont du bruit il y a des max provisoires...
Voici un code qui fonctionne bien chez moi:
if (A0Byte > Treshold && ATpointer < 394)
{ // Detection of Events Above Treshold, that must last for at least Duration and max 3xDuration
// Find maximum value and record corresponding time.
ATDuration ++;
if (A0Byte > ATMax)
{
ATMax = A0Byte;
AThour = hour;
ATmin = minute;
ATsec = second;
}
}
else // At the end of the event categorize it
{
if (ATDuration > Duration && ATDuration < 3 * Duration)
{
// record event data in Array
filbuff4[ATpointer] = AThour;
ATpointer ++;
filbuff4[ATpointer] = ATmin;
ATpointer ++;
filbuff4[ATpointer] = ATsec;
ATpointer ++;
filbuff4[ATpointer] = ATMax; // Maximum
ATpointer ++;
filbuff4[ATpointer] = ATDuration;
ATpointer ++;
ATDuration = 0;
if (ATMax > NAT1) nNAT1 ++;
if (ATMax > NAT2) nNAT2 ++;
if (ATMax > NAT3) nNAT3 ++;
}
else
{
// drop event
ATDuration = 0;
ATMax = 0;
} // end if/else duration
} // end if/else above treshold
Je classe tous les max dans un array avec l'heure, le maximum et la durée.
Il y a des conditions supplémentaires:
le max doit durer au moins x et moins de 3x et
l'évènement doit être supérieur a une limite inférieure.
J'attends de repasser par la limite inférieure avand d'enregistrer l'évènement,