Page 1 sur 1

[Tuto] Calcul moyenne instantanée

Posté : 30 janv. 2023, 04:06
par itasoft
Calcul de la valeur moyenne instantanée de la mesure (ex :sur les 10 dernières mesures)
-Déclarer un tableau de taille 10
-Sur changement d’état de la mesure (N<>N-1) :
-Faire un décalage logique à gauche du tableau
(ça éjecte la mesure la plus ancienne et libère la case [0] du tableau pour la nouvelle mesure)
-Copier la mesure dans la première case du tableau ex : TABLEAU[0] :=Mesure
(De ce fait, le tableau contient toujours les 10 dernière mesures qui se suivent dans le temps, ça s’appelle un tableau glissant, seule solution pour une moyenne instantanée )
-Faire la somme du tableau
-Calculer la moyenne : Moyenne :=Somme/10
-Copier la mesure N dans N-1
-
---Exemple sur Unity -------

Code : Tout sélectionner

if INT_Mesure<>INT_Mesure_Mem then
(*Décalage du tableau*)
	ROL_ARDINT(1, DINT_TABLEAU);
	DINT_TABLEAU[0]:=INT_TO_DINT(INT_Mesure);
	IF DINT_Compteur<10 then
		INC(DINT_Compteur);
	end_if;
	DINT_Somme:=SUM_ARDINT(DINT_TABLEAU);
	INT_Moyenne:=DINT_TO_INT(DINT_Somme / DINT_Compteur);
	INT_Mesure_Mem:=INT_Mesure;
end_if;

Re: [Tuto] Calcul moyenne instantanée

Posté : 24 mars 2023, 15:44
par Uphelus
Bonjour,

Merci itasoft pour ta solution.

Je me permet quelques critiques (le prends pas mal c'est plus a titre de discutions et d'évolution que de contradiction). Ma méthode ne marchera qu'avec des entiers.

La méthode utilisé peut être gourmande en ressource si le tableau augmente en taille.
Ainsi pour une moyenne réalisé sur un tableau assez grand, par exemple une moyenne de mesures sur un niveau d'eau, cela permet de filtrer les vagues, je réalise:
incrément à 1 de l'entier nommé "n" (si n> valeur max du tableau alors n=0)
Suppression de la valeur de la case "n" du tableau de ma sommation,
Enregistrement de la mesure courante dans le tableau à la case "n",
Ajout de la valeur de la case "n" du tableau de ma sommation,

Code : Tout sélectionner

Val_Max	DINT				Valeur maximal de la taille de mon tableau
n 	DINT 				pointeur utilisé dans le tableau
TAB 	ARRAY[0..Val_Max] OF INT 	Tableau d'enregistrement de la mesure moyenné
Som	DINT				Résultat de la somme du tableau
Moy	INT				Résultat de la moyenne
Mesure	INT				Mesure courante

n := n+1;
IF n>Val_Max THEN n:=0; END_IF; (* Limitation à la valeur maximal du tableau *)
Som := Som-INT_TO_DINT(TAB[n]); (* Supression de la mesure il y a Val_Max cycles dans le sommation*)
TAB[n] := Mesure; (* Remplacement de la valeur il y a Val_Max cycle par la mesure courante *)
Som := Som+INT_TO_DINT(TAB[n]); (* Ajout de la mesure courante dans la sommation *)
Moy := DINT_TO_INT(Som/Val_Max); (* Calcul de la valeur moyenne *)

Re: [Tuto] Calcul moyenne instantanée

Posté : 24 mars 2023, 16:38
par itasoft
Slts,
Ta méthode est chaudement recommandé si on ne dispose pas de l’instruction décalages sur tableau
(ROL_ARDINT) ou (ROL_ARREAL) sinon c’est faire compliqué quand on peut faire simple,