Je simple filtre passe- bas va probablement résoudre le problème. Il est facile à mettre en œuvre et vous pouvez ajuster le nombre de filtres que vous souhaitez filtrer avec la constante de temps.
Voici un exemple de filtre passe-bas dans le code réel. C'est techniquement Python mais se lit comme un pseudo-code. Il prend une liste de valeurs de température en entrée et génère les valeurs filtrées sous forme de liste.
Input: input_series, time_constant
Output: output_series
output_series = []
output_series.append(input_series[0])
for current_unfiltered_value in input_series:
previous_filtered_value = output_series[-1]
B = 1.0 / time_constant
A = 1.0 - B
new_filtered_value = (A * previous_filtered_value
+ B * current_unfiltered_value)
output_series.append(new_filtered_value)
return output_series
L'utilisation de filtres passe-bas présente l'inconvénient d'introduire un décalage de phase. La valeur filtrée sera légèrement en retard par rapport au signal mesuré, en fonction de la constante de temps. Un signal hautement filtré sera plus lent qu'un signal moins filtré.
Il existe d'autres filtres que vous pouvez utiliser pour obtenir un meilleur résultat de filtrage. Par exemple, le filtre de Kalman ou le filtre Alpha-beta . Ils sont tous deux basés sur des modèles, ce qui signifie que vous devez créer un modèle pour que vos changements de température fonctionnent. Il existe un excellent cahier sur Github qui introduit ces filtres si vous ne les connaissez pas bien.
Personnellement, je choisirais un simple filtre passe-bas au début. Si vous ne contrôlez pas un processus basé sur les valeurs filtrées, mais souhaitez filtrer les valeurs pour les rendre plus jolies dans une interface utilisateur, c'est généralement plus que suffisant.
Pour éliminer les valeurs d'emballement, je calculerais la variance du signal mesuré à chaque pas de temps (vous pouvez, par exemple, calculer la variance pour les 50 derniers échantillons). Si la variance calculée dépasse un certain seuil, on peut supposer qu'il s'agit d'une pointe qui peut ensuite être rejetée.