Monday, February 13, 2017

Moyenne Mobile Simple Arduino

Arduino-signal-filtering-library Ce projet est une initiative gratuite pour créer une bibliothèque Arduino pour le filtrage des signaux. Filtres disponibles: Filtre médian (1er et 2ème ordre, Chebychev et Bessel) Utilisation de la bibliothèque Téléchargez la source Placez le dossier de filtre dans votre dossier de bibliothèques Arduino1.0 Ouvrez exemple d'exemple: fichier, exemples, SignalFilter, Bessel (ou tout autre exemple ) Connecter un capteur analogique (bruyant) au port A0 Compiler le code de chargement de l'amplificateur Les données du capteur original et filtré doivent arriver sur le port série Modification des filtres: Cette bibliothèque est partiellement basée sur des filtres générés automatiquement sur le site web filtuino. Filtuino est une suite de filtres qui génère un code source pour différents filtres numériques (IIR Lowpass, Highpass, Bandpass, Bandstop, IIR Resonanz Filter, Proportional Integral Filter). Si vous souhaitez disposer de vos propres propriétés de filtre, je vous suggère: Utilisez ma bibliothèque comme modèle (pour avoir un code de travail pour commencer) Générer le code de filtrage exact dont vous avez besoin sur le site filtuino (type de filtre, ripple, fréquences) Des filtres dans ma bibliothèque avec votre propre filtre personnalisé. Historique des versions: Version 0.1: Filtre passe-bas Chebychev et Bessel Version 0.2: Filtre médian Version 0.3: Plus de filtres (passe bande, moyenne courante, Kalman.) Arduino-signal-filtering-library géré par jeroendoggenC'est un ensemble de routines pour effectuer des mathématiques Analyse de tableaux de nombres. Prise en charge des fonctions courantes: Toutes les fonctions sont complètement surchargées pour prendre en charge les types de données suivants: À l'exception de stddev (), elles renvoient toutes le même type de données que le tableau. Un tableau de valeurs int renvoie un seul int. Stddev () renvoie toujours un flotteur. Toutes les fonctions sauf rollingAverage () prennent deux arguments. Le premier est le tableau à travailler. Le second est le nombre d'entrées dans le tableau. RollingAverage () prend un troisième argument - la nouvelle entrée à ajouter au tableau. Rolling average Format: average rollingAverage (historyarray, slicecount, value) Ajoute de la valeur au tableau historyarray en déplaçant toutes les valeurs vers le bas d'un emplacement. La moyenne moyenne est alors retournée. Format: average mean (array, slicecount) Calcule la moyenne des valeurs dans le tableau. Slicecount est le nombre d'entrées dans le tableau. Format: mode moyen (array, slicecount) Recherche le nombre le plus courant dans le tableau. Format: max maximum (array, slicecount) Recherche la plus grande valeur dans le tableau. Format: min minimum (array, slicecount) Recherche la plus petite valeur dans le tableau. Écart-type Format: déviation stddev (tableau, slicecount) L'écart-type est la racine carrée de la moyenne de la somme des carrés de la différence entre chaque point de données et la moyenne moyenne du tableau. C'est la seule fonction qui ne retourne pas le même type de données que le tableau. L'écart-type est toujours retourné comme un flotteur. Une des principales applications de la carte Arduino est la lecture et l'enregistrement des données des capteurs. Par exemple, on surveille la pression toutes les secondes du jour. Comme les taux d'échantillonnage élevés génèrent souvent des pointes dans les graphiques, on veut aussi avoir une moyenne des mesures. Comme les mesures ne sont pas statiques dans le temps ce dont nous avons souvent besoin est une moyenne courante. Il s'agit de la moyenne d'une certaine période et très utile lors de l'analyse des tendances. La forme la plus simple d'une moyenne courante peut être faite par le code qui s'appuie sur la moyenne courante précédente: Si on ne veut pas utiliser les mathématiques en virgule flottante - car cela prend la mémoire et diminue la vitesse - on peut faire la même chose complètement dans le domaine entier. La division par 256 dans l'exemple de code est un décalage à droite 8, qui est plus rapide que par division par exemple. 100. Ceci est vrai pour chaque puissance de 2 comme diviseur et un seul doit prendre soin de la somme des poids égale à la puissance de 2. Et bien sûr on devrait prendre soin il n'y a pas de débordement intermédiaire (envisager d'utiliser non signés long) Si vous avez besoin Une moyenne de course plus précise, in concreto à partir des 10 dernières mesures, vous avez besoin d'un tableau (ou une liste liée) pour les tenir. Ce tableau agit comme un tampon circulaire et à chaque nouvelle mesure, le plus ancien est supprimé. La moyenne courante est calculée comme la somme de tous les éléments divisée par le nombre d'éléments dans le tableau. Le code pour la moyenne courante sera quelque chose comme ceci: L'inconvénient de ce code est que le tableau pour contenir toutes les valeurs peut devenir assez grand. Si vous avez une mesure par seconde et que vous voulez une moyenne courante par minute, vous avez besoin d'un tableau de 60 une moyenne par heure aurait besoin d'un tableau de 3600. Cela ne pourrait pas être fait de cette façon sur un Arduino, car il n'a que 2K de RAM. Toutefois, en construisant une moyenne de 2 étages, il peut être approché assez bien (disclaimer: pas pour toutes les mesures). En psuedo code: Comme un nouveau tableau interne statique est nécessaire pour chaque fonction runningAverage, cela crie à être mis en œuvre comme une classe. Bibliothèque RunningAverage La bibliothèque runningAverage génère une classe de la fonction ci-dessus pour qu'elle puisse être utilisée plusieurs fois dans un croquis. Il découple la fonction add () et avg () pour être un peu plus souple, par ex. On peut appeler la moyenne plusieurs fois sans ajouter une chose. Notez que chaque instance de la classe ajoute son propre tableau pour tenir les mesures, et que cela s'ajoute à l'utilisation de la mémoire. L'interface de la classe est maintenue aussi petite que possible. Note: avec la version 0.2, les noms des méthodes sont tous plus descriptifs. Un petit croquis montre comment il peut être utilisé. Un générateur aléatoire est utilisé pour imiter un capteur. Dans setup (), la myRA est effacée afin que nous puissions commencer à ajouter de nouvelles données. Dans loop (), d'abord un nombre aléatoire est généré et converti en un flotteur à ajouter à myRA. Ensuite, la valeur runningAverage est imprimée sur le port série. On pourrait aussi l'afficher sur un écran LCD ou envoyer sur ethernet, etc Lorsque 300 articles sont ajoutés myRA est effacé pour recommencer. Pour utiliser la bibliothèque, créez un dossier dans votre SKETCHBOOKPATHlibaries avec le nom RunningAverage et placez les. h et. cpp là. Vous pouvez éventuellement créer un sous-répertoire d'exemples pour placer l'exemple d'application. 2011-01-30: initial version 2011-02-28: corrigé destructeur manquant dans le fichier. h 2011-02-28: supprimé constructeur par défaut 2012--. Ajouté fillValue () refactored for publishing 2014-07-03: ajout du code de protection de la mémoire - si la matrice interne ne peut pas être allouée size Devient 0. Ceci est pour résoudre le problème décrit ici - forum. arduino. ccindex. phptopic50473.msg1790086msg1790086 - Testez considérablement. Classe de modèle CourantAccurrence. h CourantAccurrence. cpp


No comments:

Post a Comment