Wednesday 11 January 2017

Filtre Passe Bas À Moyenne Mobile Exponentielle

Un filtre numérique facile à utiliser La moyenne mobile exponentielle (EMA) est un type de filtre à réponse impulsionnelle infinie (IIR) qui peut être utilisé dans de nombreuses applications DSP intégrées. Il ne nécessite qu'une petite quantité de RAM et de puissance de calcul. Qu'est-ce qu'un filtre Les filtres sont disponibles sous forme analogique et numérique et existent pour supprimer des fréquences spécifiques d'un signal. Un filtre analogique commun est le filtre passe-bas RC montré ci-dessous. Les filtres analogiques sont caractérisés par leur réponse en fréquence qui est la mesure dans laquelle les fréquences sont atténuées (réponse de magnitude) et décalées (réponse de phase). La réponse en fréquence peut être analysée en utilisant une transformée de Laplace qui définit une fonction de transfert dans le domaine S. Pour le circuit ci-dessus, la fonction de transfert est donnée par: Pour R égal à un kilo-ohm et C égal à un microfarad, la réponse de magnitude est montrée ci-dessous. Notez que l'axe des x est logarithmique (chaque marque est 10 fois plus grande que la dernière). L'axe y est en décibels (qui est une fonction logarithmique de la sortie). La fréquence de coupure pour ce filtre est de 1000 rads ou 160 Hz. C'est le point où moins de la moitié de la puissance à une fréquence donnée est transférée de l'entrée à la sortie du filtre. Les filtres analogiques doivent être utilisés dans les conceptions intégrées lors de l'échantillonnage d'un signal à l'aide d'un convertisseur analogique-numérique (ADC). L'ADC ne capture que des fréquences jusqu'à la moitié de la fréquence d'échantillonnage. Par exemple, si l'ADC acquiert 320 échantillons par seconde, le filtre ci-dessus (avec une fréquence de coupure de 160Hz) est placé entre le signal et l'entrée ADC pour empêcher l'aliasing (qui est un phénomène où des fréquences plus élevées apparaissent dans le signal échantillonné comme Fréquences basses). Filtres numériques Les filtres numériques atténuent les fréquences du logiciel plutôt que les composants analogiques. Leur implémentation comprend l'échantillonnage des signaux analogiques avec un ADC puis l'application d'un algorithme logiciel. Deux approches de conception communes pour le filtrage numérique sont les filtres FIR et les filtres IIR. Filtres FIR Les filtres à réponse impulsionnelle finie (FIR) utilisent un nombre fini d'échantillons pour générer la sortie. Une moyenne mobile simple est un exemple d'un filtre FIR passe-bas. Les fréquences plus élevées sont atténuées parce que la moyenne lisse le signal. Le filtre est fini car la sortie du filtre est déterminée par un nombre fini d'échantillons d'entrée. A titre d'exemple, un filtre de moyenne mobile à 12 points additionne les 12 échantillons les plus récents puis les divise par 12. La sortie des filtres IIR est déterminée par (jusqu'à) un nombre infini d'échantillons d'entrée. Filtres IIR Les filtres à réponse impulsionnelle infinie (IIR) sont un type de filtre numérique où la sortie est inifinetelyin théorie influencée par une entrée. La moyenne mobile exponentielle est un exemple de filtre passe-bas IIR. Moyenne mobile exponentielle Une moyenne mobile exponentielle (EMA) applique des pondérations exponentielles à chaque échantillon afin de calculer une moyenne. Bien que cela semble compliqué, l'équation connue dans le langage de filtrage numérique comme équation de différence pour calculer la sortie est simple. Dans l'équation ci-dessous, y est la sortie x est l'entrée et alpha est une constante qui définit la fréquence de coupure. Pour analyser comment ce filtre influe sur la fréquence de la sortie, la fonction de transfert de domaine Z est utilisée. La réponse en magnitude est indiquée ci-dessous pour alpha égal à 0,5. L'axe y est à nouveau représenté en décibels. L'axe des x est logarithmique de 0,001 à pi. La fréquence du monde réel correspond à l'axe x, zéro étant la tension continue et pi égal à la moitié de la fréquence d'échantillonnage. Toutes les fréquences qui sont supérieures à la moitié de la fréquence d'échantillonnage seront aliasées. Comme mentionné précédemment, un filtre analogique peut garantir que pratiquement toutes les fréquences du signal numérique sont inférieures à la moitié de la fréquence d'échantillonnage. Le filtre EMA est bénéfique dans les conceptions intégrées pour deux raisons. Tout d'abord, il est facile d'ajuster la fréquence de coupure. La diminution de la valeur de alpha réduira la fréquence de coupure du filtre comme illustré en comparant la courbe alpha 0,5 ci-dessus à la courbe ci-dessous où alpha 0,1. Deuxièmement, l'EMA est facile à coder et nécessite seulement une petite quantité de puissance de calcul et de mémoire. L'implémentation de code du filtre utilise l'équation de différence. Il existe deux opérations de multiplication et une opération d'addition pour chaque sortie, ce qui ignore les opérations nécessaires pour arrondir les calculs de points fixes. Seul l'échantillon le plus récent doit être stocké dans la RAM. Ceci est sensiblement inférieur à l'utilisation d'un filtre de moyenne mobile simple avec N points qui nécessite N opérations de multiplication et d'addition ainsi que N échantillons à stocker dans la RAM. Le code suivant implémente le filtre EMA à l'aide de mathématiques à points fixes 32 bits. Le code ci-dessous est un exemple d'utilisation de la fonction ci-dessus. Conclusion Les filtres, analogiques et numériques, sont une partie essentielle des conceptions intégrées. Ils permettent aux développeurs de se débarrasser des fréquences indésirables lors de l'analyse de l'entrée du capteur. Pour que les filtres numériques soient utiles, les filtres analogiques doivent supprimer toutes les fréquences supérieures à la moitié de la fréquence d'échantillonnage. Les filtres numériques IIR peuvent être des outils puissants dans le design intégré où les ressources sont limitées. La moyenne mobile exponentielle (EMA) est un exemple d'un tel filtre qui fonctionne bien dans les conceptions intégrées en raison de la mémoire faible et la puissance de calcul requirements. Im codage quelque chose au moment où Im prendre un tas de valeurs dans le temps à partir d'une boussole matérielle. Cette boussole est très précise et mise à jour très souvent, avec le résultat que si elle jiggles légèrement, je me retrouve avec la valeur étrange qui est sauvagement incompatible avec ses voisins. Je veux lisser ces valeurs. Après avoir fait quelques lectures, il semblerait que ce que je veux est un filtre passe-haut, un filtre passe-bas ou une moyenne mobile. Moyenne mobile je peux descendre avec, il suffit de garder un historique des dernières 5 valeurs ou autre, et d'utiliser la moyenne de ces valeurs en aval dans mon code où j'ai été une fois juste en utilisant la valeur la plus récente. Cela devrait, je pense, lisser ces jiggles joliment, mais il me semble que son probablement tout à fait inefficace, et c'est probablement l'un de ces problèmes connus aux programmeurs appropriés à qui theres une solution vraiment ordonnée Clever Math. Je suis, cependant, l'un de ces programmateurs autodidactes horribles sans un morceau de l'éducation formelle dans quelque chose même vaguement liés à CompSci ou Math. La lecture autour d'un peu suggère que cela peut être un filtre passe-haut ou bas, mais je ne peux pas trouver quoi que ce soit qui explique en termes compréhensibles à un hack comme moi ce que l'effet de ces algorithmes serait sur un tableau de valeurs, travaux. La réponse donnée ici. Par exemple, techniquement répond à ma question, mais seulement en termes compréhensibles à ceux qui seraient probablement déjà savoir comment résoudre le problème. Ce serait une personne très belle et intelligente en effet qui pourrait expliquer le genre de problème, c'est, et comment les solutions de travail, en termes compréhensibles pour un diplômé Arts. Si votre moyenne mobile doit être longue afin d'obtenir le lissage requis, et que vous n'avez pas vraiment besoin d'une forme particulière de noyau, alors vous êtes mieux si vous utilisez une moyenne mobile exponentiellement en décomposition: où vous Choisissez minuscule pour être une constante appropriée (par exemple, si vous choisissez 1 - 1 N minuscule, il aura la même quantité de moyenne que la fenêtre de taille N, mais différemment différemment sur les points plus anciens). Quoi qu'il en soit, puisque la prochaine valeur de la moyenne mobile ne dépend que de la précédente et vos données, vous n'avez pas à garder une file d'attente ou quoi que ce soit. Et vous pouvez penser à cela comme faire quelque chose comme, Eh bien, Ive a obtenu un nouveau point, mais je ne fais pas vraiment confiance, donc Im va garder 80 de ma vieille estimation de la mesure, et ne font confiance à ce nouveau point de données 20. Thats À peu près la même chose que de dire, Eh bien, je ne fais confiance à ce nouveau point 20, et Ill utiliser 4 autres points que je fais confiance à la même quantité, sauf qu'au lieu de prendre explicitement les 4 autres points, vous êtes en supposant que la moyenne que vous avez fait la dernière fois Était raisonnable, donc vous pouvez utiliser votre travail précédent. Répondre Sep 21 10 at 14:27 Hey, je sais que c'est 5 ans de retard, mais merci pour une réponse géniale. I39m travaillant sur un jeu où le son change en fonction de votre vitesse, mais en raison de l'exécution du jeu sur un ordinateur slow-ass, la vitesse fluctuerait sauvagement, ce qui était bien pour la direction, mais super ennuyeux en termes de son. C'était une solution vraiment simple et bon marché pour quelque chose que je pensais être un problème vraiment complexe. Ndash Adam Mar 16 15 at 20:20 Si vous essayez de supprimer la valeur impair occasionnelle, un filtre passe-bas est le meilleur des trois options que vous avez identifié. Les filtres passe-bas permettent des changements à faible vitesse tels que ceux causés par la rotation d'une boussole à la main, tout en rejetant des changements à grande vitesse tels que ceux provoqués par des bosses sur la route, par exemple. Une moyenne mobile ne sera probablement pas suffisante, car les effets d'un seul flip dans vos données affecteront plusieurs valeurs ultérieures, selon la taille de votre fenêtre de moyenne mobile. Si les valeurs impaires sont facilement détectées, vous pouvez même être mieux avec un algorithme de suppression de glitch qui les ignore complètement: Voici un graphique guick à illustrer: Le premier graphe est le signal d'entrée, avec un glitch désagréable. Le deuxième graphique montre l'effet d'une moyenne mobile de 10 échantillons. Le graphe final est une combinaison de la moyenne de 10 échantillons et de l'algorithme de détection de glitch simple représenté ci-dessus. Lorsque le glitch est détecté, la moyenne de 10 échantillons est utilisée au lieu de la valeur réelle. Moyenne mobile, je peux descendre avec. Mais il me semble que son probablement tout à fait inefficace. Theres vraiment aucune raison qu'une moyenne mobile devrait être inefficace. Vous conservez le nombre de points de données que vous voulez dans un tampon (comme une file d'attente circulaire). Sur chaque nouveau point de données, vous générez la valeur la plus ancienne et soustrayez-la d'une somme, puis appuyez sur la plus récente et ajoutez-la à la somme. Ainsi, chaque nouveau point de données implique réellement une poussée pop, un ajout et une soustraction. Votre moyenne mobile est toujours cette somme décalage divisée par le nombre de valeurs dans votre tampon. Il devient un peu plus délicat si vous recevez des données simultanément à partir de plusieurs threads, mais puisque vos données proviennent d'un périphérique matériel qui me semble très douteux. Oh et aussi: horribles programmeurs autodidactes se réunissent) La moyenne mobile semblait inefficace pour moi parce que vous devez stocker un tampon de valeurs - mieux faire juste quelques Clever Maths avec votre valeur d'entrée et la valeur de travail courante Je pense que la moyenne mobile exponentielle travaux. Une optimisation que j'observe pour ce type de moyenne mobile implique l'utilisation d'un ampli de files d'attente de longueur fixe, un pointeur vers l'endroit où vous vous trouvez dans cette file d'attente, et juste d'envelopper le pointeur autour (avec ou un if). Voila Pas de poussée poussée coûteuse. Puissance pour les amateurs, le frère ndash Henry: Pour une moyenne mobile straight-up vous avez besoin de la mémoire tampon simplement pour que vous sachiez ce que la valeur se fait sauter lorsque la prochaine valeur obtenir poussé. Cela dit, l'ampli de queue de longueur fixe, un pointeur que vous décrivez est exactement ce que je voulais dire par file d'attente quotcirculaire. C'est pourquoi je disais que ce n'est pas efficace. Qu'est-ce que vous pensez que je voulais dire Et si votre réponse est quotan tableau qui décale ses valeurs sur chaque suppression indexée (comme std :: vector en C). Je ne sais pas sur AS3, mais un programmeur Java a obtenu des collections comme CircularQueue à sa disposition (I39m pas Un développeur Java, donc je suis certain qu'il ya de meilleurs exemples là-bas que ce que j'ai trouvé à partir d'une recherche rapide Google), qui implémente précisément la fonctionnalité we39re parler. I39m assez confiant la majorité des langues de moyenne et de basse-niveau avec les bibliothèques standard ont quelque chose de semblable (par exemple, dans. NET QueuxTTGt). Quoi qu'il en soit, j'étais moi-même la philosophie. tout est pardonné. Ndash Dan Tao Sep 22 10 at 12:44 Une moyenne mobile exponentiellement en décomposition peut être calculée à la main avec seulement la tendance si vous utilisez les valeurs appropriées. Voir fourmilab. ch hackdiet e4 pour une idée sur la façon de le faire rapidement avec un stylo et du papier si vous cherchez exponentiellement lissé moyenne mobile avec 10 lissage. Mais puisque vous avez un ordinateur, vous voulez probablement faire le décalage binaire plutôt que le décalage décimal) De cette façon, tout ce que vous avez besoin est une variable pour votre valeur actuelle et une pour la moyenne. La moyenne suivante peut ensuite être calculée à partir de cela. Il ya une technique appelée une porte de gamme qui fonctionne bien avec des échantillons parasites faible occurrence. En supposant l'utilisation de l'une des techniques de filtrage mentionnées ci-dessus (moyenne mobile, exponentielle), une fois que vous avez suffisamment d'historique (une constante de temps), vous pouvez tester le nouvel échantillon de données entrantes pour le caractère raisonnable avant d'être ajouté au calcul. Une certaine connaissance du taux de changement de signal maximal raisonnable est nécessaire. L'échantillon brut est comparé à la valeur lissée la plus récente et si la valeur absolue de cette différence est supérieure à la plage permise, cet échantillon est rejeté (ou remplacé par une certaine heuristique, par exemple une prédiction basée sur le différentiel de pente ou la tendance Valeur de prédiction à partir du double lissage exponentiel) Répondue Apr 30 at 6:56


No comments:

Post a Comment