Je travaille sur un robot mobile contrôlé via une liaison sans fil 2,4 GHz. Le récepteur est connecté à l'Arduino Uno qui sert à bord de 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.
Tracé de l'entrée de l'Arduino dans un intervalle de 30 secondes.
Je recherche des bibliothèques pouvant effectuer un lissage efficace. Existe-t-il des bibliothèques de lissage de signal disponibles pour l'Arduino (Uno)?
library
signal-processing
asheeshr
la source
la source
Réponses:
Microsmooth est une bibliothèque de lissage de signal léger actuellement en cours de développement par mes soins.
Il est toujours en cours d'élaboration et l'objectif est de le rendre léger en termes de mémoire et rapide. La bibliothèque propose plusieurs filtres pour le lissage:
Pour utiliser la bibliothèque, téléchargez-la et ajoutez-la au répertoire source. Ajoutez également la ligne suivante à votre fichier source:
la source
Je pense que je vois beaucoup de pics de bruit sur 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 tout 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 de capacité à ignorer de telles valeurs aberrantes de pic de bruit).
Il existe, en fait, de nombreuses bibliothèques de lissage de signal pour l'Arduino, dont beaucoup incluent un filtre médian.
bibliothèques de lissage du signal sur arduino.cc:
bibliothèques de lissage du signal sur github:
Est-ce que quelque chose comme ça fonctionnerait dans votre robot? (La médiane de 3 nécessite très peu de puissance CPU, et donc rapide):
la source
Avez-vous essayé un filtre passe-bas? J'ai trouvé un exemple ici et un autre ici .
Ces deux bibliothèques ont une liste de données lues à partir du capteur analogique de votre choix qui est moyennée. Chaque nouvelle valeur de capteur est ajoutée à la liste et la dernière est supprimée, comme ceci:
la source
Vous pouvez filtrer cela numériquement en utilisant un filtre passe-bas:
Changez le 0.99 pour changer la fréquence de coupure (plus proche de 1.0 est une fréquence plus basse). L'expression réelle de cette valeur est exp (-2 * pi * f / fs) où f est la fréquence de coupure souhaitée et fs est la fréquence à laquelle les données sont échantillonnées.
Un autre type de "filtre numérique" est un filtre d'événements. Cela fonctionne bien sur les données qui ont des valeurs aberrantes; par exemple 9,9,8,10,9,25,9. Un filtre d'événements renvoie la valeur la plus fréquente. Statistiquement, c'est le mode.
Les moyennes statistiques telles que la moyenne, le 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 fait référence à:
la source