lire une tension de batterie dans un dispositif intégré. Cependant, la tension réelle varie considérablement en fonction de la charge du système. Nous avons besoin d'une méthode pour réduire la fluctuation de la tension pour afficher la meilleure valeur. P>
Actuellement, nous utilisons une moyenne roulante / mobile. Cependant, au cours des 15 dernières lectures, le résultat fluctue encore trop. P>
En lecture sur les algorithmes de lissage, il apparaît que les splines B, les filtres du noyau ou certains autres algorithmes de lissage seraient idéaux. Cependant, je ne trouve pas d'exemple simple qui n'utilise pas de fonctions numpées ou intrinsèques au sein de Mathcad ou d'une autre. P>
Tout le monde connaît une fonction simple à mettre en œuvre qui pourrait aider cela? Il s'agit d'un projet C ++ (utilisant QT 4.5) avec juste la barre minimum de bibliothèques. Je préférerais rester dans le domaine entier (montrant la tension en millivolts à partir de 3300-4200). P>
tia Mike P>
7 Réponses :
Vous pouvez trouver des explications et du code source dans le livre NR classique: http://apps.nrbook.com/c/index.html , P >
nommément chapitre 3: http://www.arcetri.astro.it/irlab /Library/Recipes/bookcpdf/c3-3.pdf P>
Avez-vous envisagé simplement d'appliquer une limite d'inclinaison à la valeur?
new_val = Read_From_HW(); diff = new_val - prev_val; if (diff > SKEW_LIMIT) diff = SKEW_LIMIT; else if (diff < -SKEW_LIMIT) diff = -SKEW_LIMIT; reported_val = prev_val + diff; prev_val = reported_val;
Je sais que cela ne répond pas directement à votre question, mais des barres moyennes aident-elles? En d'autres termes, montrer min / max / moyenne / médiane sur 15 secondes Windows au lieu d'une moyenne. P>
Eh bien, c'est un peu difficile de dire ce dont vous avez besoin sans détails sur votre situation. Par exemple, quel est votre taux d'échantillonnage du capteur et comment la fluctuation du capteur et le bruit que vous essayez de supprimer caractérisés?
Cependant, si vous avez déjà déménagé la moyenne mise en œuvre, je vous recommande d'essayer une médiane en mouvement. (Médian des derniers n em> échantillons, plutôt que la moyenne.) Cela aura tendance à réduire l'impact de grandes aberrations à court terme de la normale de votre production. P> Si vous pouvez trouver Les paramètres fonctionnant, il serait préférable que la CPU et les exigences de la mémoire utilisent une forme d'un filtre passe-temps discret. Celles-ci sont assez faciles à mettre en œuvre et n'ont besoin que de connaissances de la valeur de sortie précédente et de l'entrée actuelle pour calculer la sortie actuelle. Par exemple: p> (où y code> est la sortie actuelle,
y [n-1] code> est le dernier calculé sortie et
x code> est votre dernière lecture de capteur.) p>
A code> est effectivement la constante de temps du filtre passe-bas bas, mais c'est un moment discret, alors Cela dépend du taux d'échantillonnage. Spécifiquement,
a = dt / tau code>, où
dt code> est votre période d'échantillonnage en secondes et
tau code> est à peu près analogue à la constante de temps de temps continu . p> p>
C'était parfait. Rapide, facile à calculer. A pris un peu pour comprendre mon coefficient, mais fonctionne bien.
@Mike: Des outils tels que MATLAB (et ses clones libres tels que FreemAt et Octave) ont des installations permettant de calculer les coefficients de filtrage IIR pour des exigences de bande passante spécifique. Bien que dans ce cas, avec seulement un seul coefficient, une approche empirique est probablement suffisante (et probablement plus rapide que d'apprendre Matlab). Votre méthode moyenne mobile est un exemple simple d'un filtre à sapin (avec tous les coefficients égaux 1).
Merci exactement ce que je cherchais, c'est ma fonction basée sur cela pour arduino: // compresseur int compressor (int Signal, int LastSignal) {int Résultat = LastSignal + 0,2 * (signal - LastSignal); résultat de retour; }
Il serait possible de devenir très profondément dans les techniques de traitement du signal et des calculs complexes, mais vous devez vous demander si cela est vraiment nécessaire?
Si cet affichage est une simple sortie numérique instantanée, utilisée pour "indication uniquement" plutôt que de dire un graphique ou un journal de données continu (c'est-à-dire que vous n'avez pas besoin de reconstruire le signal), il serait souvent parfaitement acceptable, tout simplement Prenez un moyen périodique em> plutôt qu'une moyenne mobile. Comme cela ne nécessite aucun stockage d'historique, vous pouvez la moyenne autant de nombreux échantillons que vous le souhaitez, ce qui serait déterminé par la fréquence requise de la mise à jour d'affichage. P> Ce n'est pas intelligent em>, Mais il est souvent adéquat pour la tâche. Voici un exemple et une simulation de test de son utilisation. P> raffinement de cette technique qui produira encore une sortie plus douce mais générera Les résultats de la même fréquence seraient utiles à la sortie moyenne périodique comme entrée de votre filtre moyen en mouvement. Si vous utilisiez mes 100 échantillons par seconde par exemple avec la période d'échantillonnage de 100, puis placez-le à 15 échantillons de la moyenne mobile, vous aurez utilisé 15 secondes de données d'échantillonnage tout en obtenant toujours un résultat chaque seconde, avec une faible mémoire supplémentaire. usage. P> Évidemment, vous pouvez modifier la période, la longueur moyenne mobile et la fréquence d'échantillonnage pour obtenir les résultats dont vous avez besoin à la fréquence de mise à jour dont vous avez besoin. Je vous suggère de prendre autant d'échantillons que possible pour la période pour laquelle vous avez besoin d'une mise à jour, puis faites la moyenne mobile aussi longtemps que vous le souhaitez vous permettre. P> p>
Cela ressemble vraiment à un problème matériel pour moi. Est-ce une batterie Li-io ou NIMH? À quoi ressemble la courbe de décharge? Quels composants y a-t-il entre les cellules de la batterie et votre ADC? Vous besoin em> de connaître ces choses avant de lancer différents filtres numériques. P>
Si vous n'avez pas votre réponse, c'est un bon moyen d'imprimer quelque chose
sur un robot tel qu'un pololu 3pi.
p>
S'il vous plaît soyez prudent lorsque vous répondez à de vieilles questions qui ont beaucoup de réponses, en particulier lorsque l'une d'entre elles est acceptée. Vous devez expliquer pourquoi votre réponse est meilleure que l'une des personnes existantes.
Cette réponse est complètement éteinte. La question était de savoir comment filtrer / lisser les lectures de capteurs et pour éliminer les pointes ... Cette réponse montre essentiellement une copie en boucle de la lecture int ...