Monday, January 16, 2017

Filtre Moyen De Déplacement 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-filtrage-bibliothèque géré par jeroendoggen Je travaille sur un robot mobile contrôlé via Une liaison sans fil de 2,4 GHz. Le récepteur est connecté à l'Arduino Uno qui sert à bord comme le contrôleur principal. Le canal d'entrée le plus critique (et principal) provenant du récepteur produit un signal très bruyant, ce qui entraîne de nombreux changements mineurs dans la sortie des actionneurs, même si ceux-ci ne sont pas nécessaires. Je recherche des bibliothèques qui peuvent effectuer un lissage efficace. Existe-t-il des bibliothèques de lissage de signal disponibles pour l'Arduino (Uno) demandé Feb 16 14 at 13:57 Je pense que je vois beaucoup de pointes de bruit d'un seul échantillon dans votre signal bruyant. Le filtre médian fait mieux pour se débarrasser des pics de bruit d'un seul échantillon que n'importe quel filtre linéaire. (Il est meilleur que n'importe quel filtre passe-bas, moyenne mobile, moyenne mobile pondérée, etc. en termes de temps de réponse et sa capacité à ignorer ces outliers de pic de bruit à un seul échantillon). Il existe, en fait, de nombreuses bibliothèques de lissage de signal pour l'Arduino, dont beaucoup comportent un filtre médian. Bibliothèques de lissage de signal à arduino. cc: bibliothèques de lissage de signal à github: ce serait quelque chose comme ça dans votre robot (La médiane-de-3 nécessite très peu de puissance CPU, et donc rapide): Vous pouvez filtrer ce numérique en utilisant un faible Pass: Changez le 0.99 pour changer la fréquence de coupure (plus proche de 1.0 est la fréquence plus basse). L'expression réelle de cette valeur est exp (-2piffs) où f est la fréquence de coupure que vous voulez et fs la fréquence à laquelle les données sont échantillonnées. Un autre type de filtre numérique est un filtre d'événement. Il fonctionne bien sur les données qui ont des valeurs aberrantes, p. 9,9,8,10,9,25,9. Un filtre d'événements retourne la valeur la plus fréquente. Statistiquement, c'est le mode. Les moyennes statistiques telles que Moyenne, Mode etc. peuvent être calculées à l'aide de la bibliothèque moyenne Arduino. Un exemple tiré de la page de la bibliothèque Arduino: 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