Appliquer des calculs à des échantillons spécifiques
Il existe différentes méthodes permettant de limiter un calcul à des échantillons spécifiques.
Premièrement, l'utilisation de la fonction If-Then-Else (Si-Alors-Sinon) est un moyen puissant pour définir le comportement des cas vrai et faux.
Deuxièmement, la fonction If-Then-Else permet également d'exclure des échantillons spécifiques afin que ceux-ci soient ignorés dans le calcul.
Bases de If-Then-Else (Si-Alors-Sinon)
La fonction If-Then-Else requiert une condition qui résulte en des états Vrai et Faux.
Then (Alors) et Else (Sinon) représentent les deux comportements, à savoir pour le cas Vrai (Then) et le cas Faux (Else).
Résultat = Condition ? Cas Vrai : Cas Faux
Les trois parties (condition, cas Vrai, cas Faux) dans la structure If-Then-Else sont des expressions qui peuvent utiliser les mêmes signaux d'entrée ou bien des signaux différents. Le cas Vrai et le cas Faux peuvent être des formules complexes, des signaux d'entrée individuels ou des constantes.
Vous souhaitez calculer la puissance du moteur, mais uniquement dans le cas où la voiture roule en montée.
Condition de montée = Gradient (Altitude) > 0
Cas Vrai = EngineSpeed * Load
Cas Faux = 0
Power_Uphill = Gradient (Altitude) > 0 ? EngineSpeed * Load [* Factor] : 0
(suivant l'unité attendue pour Power (puissance) et les unités données pour EngineSpeed (vitesse du moteur) et Load (charge), un facteur supplémentaire pour la conversion des unités doit être ajouté.)
If-Then-Else au sein d'un autre calcul
Si la fonction If-Then-Else est intégrée dans un calcul plus complexe, généralement soit le cas Vrai ou le cas Faux doit être une valeur neutre pour le calcul global. La valeur neutre la plus simple est 0 pour une addition ou soustraction et 1 pour une multiplication ou division.
-
Vous souhaitez connaître les émissions totales de CO2 pour la plage de vitesse de 40 à 80 km/h. En intégrant le débit de CO2 émis (en g/s), vous pouvez calculer la quantité.
-
Condition pour la plage de vitesse : (Speed > 40) AND (Speed <= 80)
-
Cas Vrai : intégration du débit de CO2
-
Cas Faux : valeur neutre pour l'intégration, donc 0
CO2_Amount = Accumulate_Prefix_Integral ( ( (Speed > 40) AND (Speed <= 80) ) ? CO2_Emission : 0 )
Accumulate_Prefix_Integral est le nom de la fonction intégrale commençant par le premier échantillon.
-
-
Vous souhaitez calculer la distance parcourue durant un parcours d'essai dans une plage de vitesse comprise seulement entre 40 et 80 km/h.
La distance peut être calculée comme intégrale du signal de Vitesse. Seules les sections au sein de la plage de vitesse donnée doivent être prises en compte.
-
Condition pour la plage de vitesse : (Speed > 40) AND (Speed <= 80)
-
Cas Vrai : la valeur Speed (Vitesse) actuelle est utilisée pour le calcul intégral
-
Cas Faux : une valeur neutre est utilisée pour le calcul intégral, donc 0
Distance = [Factor *] Accumulate_Prefix_Integral ( ( (Speed > 40) AND (Speed <= 80) ) ? Speed : 0 )
En partant du principe que l'unité de vitesse est km/h et que la distance doit être en kilomètres, vous devez appliquer un facteur de conversion = 1/3600.
-
-
Vous souhaitez savoir pendant combien de temps la vitesse était dans la plage comprise entre 40 et 80 km/h
Duration = Accumulate_Prefix_Integral ( (Speed > 40) AND (Speed <= 80) )
Vu que la condition elle-même donne déjà une valeur égale à 1 ou 0, une opération intégrale simple est suffisante et il n'est pas nécessaire d'utiliser la fonction If-Then-Else.
Dans la formule mentionnée, la durée est donnée en secondes.
If-Then-Else pour ignorer des échantillons
Dans tous les exemples ci-dessus, la fonction If-Then-Else permet de calculer un résultat basé sur une condition spécifique. Il existe un résultat de calcul pour chaque échantillon, y compris ceux qui ne remplissent pas la condition. Par le choix approprié de la valeur neutre, ceci n'a pas d'effet sur le résultat du calcul, mais il y a toujours une valeur pour chaque horodateur, donc pour chaque échantillon d'entrée. Cela se voit par exemple sur la courbe tracée dans un oscilloscope, qui est une ligne continue.
En certains cas, il n'est pas si simple de trouver une valeur neutre pour le résultat du calcul. Dans ce cas, il peut s'avérer utile de pouvoir ignorer des échantillons pour le calcul. Ceci est le cas dans un calcul de moyenne où vous devez ignorer des échantillons car il n'existe pas de valeur neutre appropriée.
Pour exclure complètement des échantillons, donc pour qu'il n'y ait aucun résultat de calcul, vous pouvez utiliser la fonction No Value (Pas une valeur). En réalité, la fonction No Value ne supprime pas des échantillons, mais définit un indicateur sur la valeur devant être ignorée.
Il existe deux façons de créer des échantillons avec un indicateur No Value.
-
Vous souhaitez obtenir les données statistiques pour la plage de vitesse de 40 à 80 km/h. Pour éliminer les échantillons présentant une vitesse différente, l'indicateur No Value leur est attribué.
-
Condition pour la plage de vitesse : (Speed > 40) AND (Speed <= 80)
-
Cas Vrai : conserver la valeur de Speed (vitesse) actuelle telle quelle
-
Cas Faux : attribuer l'indicateur No Value à l'échantillon
Selected_Samples = (Speed > 40) AND (Speed <= 80) ? Speed : NoValue (0)
Quand vous ajoutez le signal Selected_Samples (Échantillons sélectionnés) à un instrument de données statistiques, seuls les échantillons dans la plage de vitesse définie seront utilisés comme base pour les statistiques.
Quand vous affectez le signal à un oscilloscope, la courbe est limitée aux sections dans lesquelles des échantillons existent dans la plage de vitesse définie.
Remarque : Le terme NoValue ( 0 ) signifie qu'un échantillon a la valeur 0 et que l'indicateur No Value va être affecté.
ou
Vu qu'un cas d'utilisation fréquent consiste à ignorer des échantillons pour un calcul, il existe une fonction séparée pour affecter l'état No Value aux échantillons.
Contrairement aux anciennes définitions, vous devez définir la condition de manière à établir clairement quels échantillons doivent être exclus.
-
Condition pour que la plage de vitesse soit exclue : (Speed <= 40) Or (Speed > 80)
(contrairement à la condition Vrai ci-dessus)
-
Fonction pour affecter l'état No Value à des échantillons spécifiques (en dehors de la plage 40 - 80 km/h):
SetNoValueStatus ( Speed, ( (Speed <= 40) Or (Speed > 80) )
Ceci est équivalent à
Selected_Samples = (Speed > 40) AND (Speed <= 80) ? Speed : NoValue (Speed)
Dans ce cas, le (signal) NoValue a pour effet que la valeur de signal d'origine de Speed est conservée, mais que l'indicateur No Value lui est affecté.
Cette sélection d'échantillons pour le signal de vitesse peut être utilisée comme entrée, par ex. pour un calcul de moyenne (depuis le début de l'enregistrement).
Average_Speed = Accumulate_Prefix_Average ( Selected_Samples )
-
-
La fonction No Value peut également être utilisée pour supprimer les échantillons de dessin dans un oscilloscope, par exemple pour le calcul de distance mentionné ci-dessus.
Interrupted_Distance_Curve = (Speed > 40) AND (Speed <= 80) ? Distance : NoValue (0)
Avec Distance = [Factor *] Accumulate_Prefix_Integral ( ( (Speed > 40) AND (Speed <= 80) ) ? Speed : 0 )
Remarque : Bien que le calcul
Accumulate_Prefix_Integral ( ( (Speed > 40) AND (Speed <= 80) ) ? Speed : NoValue (0) )
montrerait également une courbe avec les mêmes écarts que le signal Interrupted_Distance_Curve, le résultat ne serait pas celui auquel on pourrait s'attendre.
Ceci est un effet de la fonction intégrale : s'il n'y a pas d'échantillon (ou un échantillon avec indicateur No Value), l'intégrale utilise la dernière valeur d'échantillon disponible pour toute la plage de temps jusqu'à ce que le prochain échantillon soit disponible.
If-Then-Else pour ignorer les échantillons avec un état Not a Number (NaN = pas un nombre)
Dans certains cas, votre signal enregistré comprend déjà des échantillons avec une valeur Not a Number (NaN).
Généralement, ces échantillons spécifiques empêchent un calcul ultérieur et, là encore, vous avez besoin d'une méthode pour exclure ces échantillons de votre calcul.
-
Pour éliminer un échantillon NaN, vous devez tout d'abord détecter un échantillon NaN, puis affecter l'indicateur No Value à la place.
Condition pour Not a Number : InputSignal != InputSignal
Vu que NaN empêche le calcul pour un échantillon, la condition est vrai si le signal d'entrée contient à un moment donné un échantillon NaN.
Vous pouvez remplacer directement la longue fonction If-Then-Else par la fonction plus courte SetNoValueStatus (définir état pas une valeur) :
InputSignal_without_NaN = SetNoValueStatus (InputSignal, InputSignal != InputSignal
Vous pouvez utiliser le InputSignal_without_NaN pour les calculs avec historique (comme Average, Minimum, Maximum) et obtenir quand même un résultat dans lequel les échantillons NaN sont exclus.
-
Exclure les échantillons NaN du calcul intégral
Comme déjà mentionné ci-dessus, l'état No Value (pas une valeur) affecte une intégrale calculée de manière non souhaitée.
De ce fait, pour exclure les valeurs NaN d'un calcul intégral, vous devez utiliser le calcul If-Then-Else afin que les échantillons NaN obtiennent la valeur neutre pour le calcul intégral, donc 0.
Integral_excl_NaN = Accumulate_Prefix_Integral ( InputSignal != InputSignal ? 0 : InputSignal)
Voir également