Monday, 23 January 2017

Exponentielle Mobile Moyenne Irrégulière

J'ai une valeur continue pour laquelle Id veut calculer une moyenne mobile exponentielle. Normalement Id juste utiliser la formule standard pour cela: où S n est la nouvelle moyenne, alpha est l'alpha, Y est l'échantillon, et S n-1 est la moyenne précédente. Malheureusement, en raison de diverses questions, je n'ai pas un temps d'échantillonnage cohérent. Je sais peut-être que je peux échantillonner au plus, disons, une fois par milliseconde, mais en raison de facteurs hors de mon contrôle, je ne peux pas être en mesure de prendre un échantillon de plusieurs millisecondes à la fois. Un cas probablement plus courant, cependant, est que je sample simple un peu tôt ou tard: au lieu d'échantillonnage à 0, 1 et 2 ms. I échantillon à 0, 0,9 et 2,1 ms. Je prévois que, indépendamment des retards, ma fréquence d'échantillonnage sera très, bien au-dessus de la limite de Nyquist, et donc je n'ai pas besoin de s'inquiéter d'aliasing. Je pense que je peux faire face à cela d'une manière plus ou moins raisonnable en faisant varier l'alpha de façon appropriée, en fonction de la durée écoulée depuis le dernier échantillon. Une partie de mon raisonnement que cela fonctionnera, c'est que l'EMA interpole linéairement entre le point de données précédent et le courant. Si l'on considère le calcul d'une EMA de la liste suivante d'échantillons aux intervalles t: 0,1,2,3,4. Nous devrions obtenir le même résultat si nous utilisons l'intervalle 2t, où les entrées deviennent 0,2,4, à droite Si l'EMA avait supposé que, à t 2, la valeur avait été 2 depuis t 0. Qui serait le même que l'intervalle t calculant sur 0,2,2,4,4, ce que ne fait pas. Ou est-ce que le sens du tout Peut-on me dire comment varier l'alpha de façon appropriée S'il vous plaît montrer votre travail. C'est à dire. Montrez-moi les maths qui prouvent que votre méthode est vraiment faire la bonne chose. Vous ne devriez pas obtenir le même EMA pour les différentes entrées. Pensez à EMA comme un filtre, l'échantillonnage à 2t équivaut à l'échantillonnage descendant, et le filtre va donner une sortie différente. Cela me paraît évident puisque 0,2,4 contient des composantes de fréquence plus élevée que 0,1,2,3,4. Sauf si la question est, comment puis-je changer le filtre à la volée pour lui donner la même sortie. Peut-être que je manque quelque chose ndash freespace Jun 21 09 at 15:52 Mais l'entrée n'est pas différente, il a juste échantillonné moins souvent. 0,2,4 à intervalles 2t est comme 0,, 2,, 4 aux intervalles t, où l'indique que l'échantillon est ignoré ndash Curt Sampson Jun 21 09 à 23:45 Cette réponse basée sur ma bonne compréhension du passe-bas Filtres (moyenne mobile exponentielle est vraiment juste un filtre passe-bas unipolaire), mais ma compréhension floue de ce que vous cherchez. Je pense que ce qui suit est ce que vous voulez: Tout d'abord, vous pouvez simplifier votre équation un peu (semble plus compliqué, mais son plus facile dans le code). Je vais utiliser Y pour la sortie et X pour l'entrée (au lieu de S pour la sortie et Y pour l'entrée, comme vous l'avez fait). Deuxièmement, la valeur de alpha ici est égale à 1-e-Tatt tau où Deltat est le temps entre les échantillons, et tau est la constante de temps du filtre passe-bas. Je dis égale entre guillemets car cela fonctionne bien quand Deltat tau est petit par rapport à 1, et alpha 1-e-Datat tau asymp Deltat tau. (Mais pas trop petit: vous allez rencontrer des problèmes de quantification, et à moins que vous ne recourriez à certaines techniques exotiques, vous avez généralement besoin de N bits supplémentaires de résolution dans votre variable d'état S, où N - log 2 (alpha).) Tau l'effet de filtrage commence à disparaître, jusqu'à ce que vous arrivez au point où alpha est proche de 1 et vous êtes essentiellement simplement d'assigner l'entrée à la sortie. Cela devrait fonctionner correctement avec des valeurs variables de Deltat (la variation de Deltat n'est pas très importante tant que alpha est petit, sinon vous rencontrerez quelques problèmes de Nyquist plutôt étranges aliasing etc.) et si vous travaillez sur un processeur où la multiplication Est moins cher que la division, ou les questions à point fixe sont importantes, precalculate omega 1 tau, et envisager d'essayer d'approcher la formule de l'alpha. Si vous voulez vraiment savoir comment dériver la formule alpha 1-e-Datat tau, considérons sa source d'équations différentielles: qui, lorsque X est une fonction d'échelon unitaire, a la solution Y 1 - e - t tau. Pour de petites valeurs de Deltat, la dérivée peut être approchée par DeltaY Deltat, donnant Y tau DeltaY Deltat X DeltaY (XY) (Deltat tau) alpha (XY) et l'extrapolation de alpha 1-e-Datat tau vient de tenter de faire correspondre Le comportement avec le cas de fonction d'étape unité. Vous voudrez peut-être élaborer sur le quottrying pour correspondre à la partie behaviour. Je comprends votre solution en temps continu Y 1 - exp (-t47) et sa généralisation à une fonction step échelonnée avec magnitude x et condition initiale y (0). Mais je ne vois pas comment mettre ces idées ensemble pour atteindre votre résultat. Ndash Rhys Ulerich May 4 13 à 22:34 Ceci n'est pas une réponse complète, mais peut être le début d'un. Son autant que j'ai obtenu avec cela dans une heure ou deux de jouer Im affichant comme un exemple de ce que je cherche, et peut-être une inspiration pour d'autres travaillant sur le problème. Je commence par S 0. Qui est la moyenne résultant de la moyenne précédente S -1 et de l'échantillon Y 0 pris à t 0. (T 1 - t 0) est mon intervalle d'échantillonnage et alpha est fixé à ce qui est approprié pour cet intervalle d'échantillonnage et la période sur laquelle je souhaite faire la moyenne. J'ai réfléchi à ce qui se passerait si je manquais l'échantillon à t 1 et au lieu de me contenter de me contenter de l'échantillon Y 2 pris à t 2. Eh bien, on peut commencer par étendre l'équation pour voir ce qui serait arrivé si on avait eu Y 1: Je remarque que la série semble s'étendre infiniment de cette façon, parce que nous pouvons substituer le S n à la droite indéfiniment: Ok , Donc ce n'est pas vraiment un polynôme (idiot moi), mais si nous multiplions le terme initial par un, nous voyons alors un modèle: Hm: sa une série exponentielle. Quelle surprise Imaginez que sortir de l'équation pour une moyenne mobile exponentielle So anyway, j'ai cette x 0 x 1 x 2 x 3. Chose va, Im et Im Im odeur e ou un logarithme naturel coups de pied ici, mais je ne peux pas me rappeler où je me dirigeais avant que je me suis écoulé du temps. Toute réponse à cette question, ou toute preuve d'exactitude d'une telle réponse, dépend fortement des données que vous mesurez. Si vos échantillons ont été pris à t 0 0 ms. T 1 0,9ms et t 2 2,1ms. Mais votre choix d'alpha est basé sur des intervalles de 1 ms, et donc vous voulez un alpha localement ajusté n. La preuve de l'exactitude du choix signifierait connaître les valeurs d'échantillonnage à t1ms et t2ms. Cela vous amène à la question suivante: Pouvez-vous interpoler vos données de manière raisonnable pour avoir des suppositions saines de ce que les valeurs intermédiaires auraient pu être Ou pouvez-vous même interpoler la moyenne elle-même Si ni l'un ni l'autre de ces est possible, Le choix d'une valeur intermédiaire Y (t) est la moyenne calculée la plus récemment. À savoir Y (t) asymp S n où n est maxmial tel que t n ltt. Ce choix a une conséquence simple: Laissez l'alpha seul, quelle que soit la différence de temps. Si, d'autre part, il est possible d'interpoler vos valeurs, cela vous donnera des échantillons d'intervalle constant moyennables. Enfin, s'il est même possible d'interpoler la moyenne elle-même, cela rendrait la question sans signification. Je pense que je peux interpoler mes données: étant donné que I39m échantillonnage à intervalles discrets, I39m déjà le faire avec un standard EMA Anyway, supposons que j'ai besoin Un quotproofquot qui montre qu'il fonctionne aussi bien qu'un EMA standard, qui a également produit un résultat incorrect si les valeurs ne changent pas assez facilement entre les périodes d'échantillon. Si vous considérez l'EMA comme une interpolation de vos valeurs, vous avez terminé si vous laissez l'alpha tel qu'il est (parce que l'insertion de la moyenne la plus récente comme Y ne change pas la moyenne) . Si vous dites que vous avez besoin de quelque chose qui fonctionne aussi bien qu'un EMA standard - ce qui ne va pas avec l'original Sauf si vous avez plus d'informations sur les données que vous mesurez, tous les ajustements locaux à alpha seront au mieux arbitraires. Ndash balpha 9830 Jun 21 09 at 15:31 Je laisserais la valeur alpha seul, et de remplir les données manquantes. Puisque vous ne savez pas ce qui se passe pendant le temps où vous ne pouvez pas échantillonner, vous pouvez remplir ces échantillons avec 0s, ou tenir la valeur précédente stable et utiliser ces valeurs pour l'EMA. Ou une interpolation arrière une fois que vous avez un nouvel échantillon, remplissez les valeurs manquantes, et recomputer l'EMA. Ce que j'essaie d'obtenir est que vous avez une entrée xn qui a des trous. Il n'existe aucun moyen de contourner le fait que vous manquez des données. Ainsi, vous pouvez utiliser un maintien d'ordre zéro, ou le mettre à zéro, ou une sorte d'interpolation entre xn et xnM. Où M est le nombre d'échantillons manquants et n le début de l'écart. Peut-être même en utilisant des valeurs avant n. Réponse June 21 09 at 13:35 De passer une heure ou ainsi de mucking un peu avec les mathématiques pour cela, je pense que simplement varier l'alpha me donnera réellement l'interpolation appropriée entre les deux points dont vous parlez, mais dans un Beaucoup plus simple. En outre, je pense que la variation de l'alpha traitera aussi correctement les échantillons prélevés entre les intervalles d'échantillonnage standard. En d'autres termes, je cherche ce que vous avez décrit, mais en essayant d'utiliser les mathématiques pour comprendre la façon simple de le faire. Ndash Curt Sampson Jun 21 09 at 14:07 Je ne pense pas qu'il ya une telle bête que interpolation quotproper. Vous ne savez tout simplement pas ce qui s'est passé dans le temps que vous n'êtes pas l'échantillonnage. Interpolation bonne et mauvaise implique une certaine connaissance de ce que vous avez manqué, puisque vous avez besoin de mesurer contre qui de juger si une interpolation est bonne ou mauvaise. Cela dit, vous pouvez placer des contraintes, c'est-à-dire avec une accélération maximale, une vitesse, etc. Je pense que si vous savez comment modéliser les données manquantes, alors vous modéliseriez simplement les données manquantes, puis appliquez l'algorithme EMA sans changement, plutôt Que de changer l'alpha. Just my 2c :) ndash freespace Jun 21 09 à 14:17 C'est exactement ce que je recevais dans ma modification à la question il ya 15 minutes: quotYou don39t simplement savoir ce qui s'est passé dans le temps que vous n'êtes pas l'échantillonnage, mais ce qui est vrai Même si vous prenez un échantillon à chaque intervalle désigné. Ainsi ma contemplation de Nyquist: tant que vous savez que la forme d'onde ne change pas de direction plus que chaque couple d'échantillons, l'intervalle d'échantillonnage réel ne devrait pas être important et devrait pouvoir varier. L'équation EMA me semble exactement calculer comme si la forme d'onde a changé linéairement de la dernière valeur d'échantillon à la courante. Ndash Curt Sampson Jun 21 09 at 14:26 Je ne pense pas que c'est tout à fait vrai. Le théorème de Nyquist requiert un minimum de 2 échantillons par période pour pouvoir identifier le signal de manière unique. Si vous ne faites pas cela, vous obtenez aliasing. Il serait le même que l'échantillonnage comme fs1 pour un temps, puis fs2, puis retour à fs1, et vous obtenez aliasing dans les données lorsque vous échantillons avec fs2 si fs2 est en dessous de la limite de Nyquist. Je dois également avouer que je ne comprends pas ce que vous entendez par quotwaveform changements linéairement de l'échantillon précédent à l'actuel onequot. Pourriez-vous s'il vous plaît expliquer Cheers, Steve. Ndash freespace Jun 21 09 at 14:36 ​​Ceci est similaire à un problème ouvert sur ma liste de tâches. J'ai un schéma élaboré dans une certaine mesure, mais n'ont pas de travail mathématique à l'appui de cette suggestion encore. Mise à jour du résumé de l'ampli: Souhaitez garder le facteur de lissage (alpha) indépendant du facteur de compensation (que je désigne ici comme bêta). Jasons excellente réponse déjà acceptée ici fonctionne très bien pour moi. Si vous pouvez également mesurer le temps écoulé depuis le dernier échantillon (en multiples arrondis de votre temps d'échantillonnage constant - donc 7,8 ms depuis le dernier échantillon serait de 8 unités), qui pourrait être utilisé pour appliquer le lissage plusieurs fois. Appliquer la formule 8 fois dans ce cas. Vous avez effectivement fait un lissage biaisé plus vers la valeur actuelle. Pour obtenir un meilleur lissage, nous avons besoin de tordre l'alpha tout en appliquant la formule 8 fois dans le cas précédent. Ce que cette approximation de lissage manquera Il a déjà manqué 7 échantillons dans l'exemple ci-dessus Ceci a été approché à l'étape 1 avec une réapplication aplatie de la valeur courante de 7 fois supplémentaires Si nous définissons un facteur d'approximation bêta qui sera appliqué avec l'alpha (Comme alphabeta au lieu d'alpha), nous allons supposer que les 7 échantillons manqués ont été en douceur entre les valeurs de l'échantillon précédent et actuel. J'ai réfléchi à ce sujet, mais un peu de bouger avec les mathématiques m'a fait au point où je crois que, plutôt que d'appliquer la formule de huit fois avec la valeur de l'échantillon, je peux faire un calcul D'un nouvel alpha qui me permettra d'appliquer la formule une fois, et me donner le même résultat. De plus, cela traiterait automatiquement de la question des échantillons compensés par les temps d'échantillonnage exacts. Ndash Curt Sampson Jun 21 09 at 13:47 La demande unique est très bien. Ce dont je ne suis pas sûr, c'est la bonne approximation des 7 valeurs manquantes. Si le mouvement continu fait la gigue de la valeur beaucoup sur les 8 millisecondes, les approximations peuvent être tout à fait hors de la réalité. Mais, si vous échantillonniez à 1ms (la plus haute résolution en excluant les échantillons retardés), vous avez déjà calculé que la gigue en 1ms n'est pas pertinente. Ce raisonnement fonctionne-t-il pour vous (j'essaie toujours de me convaincre). Ndash nik Jun 21 09 at 14:08 Droit. C'est le facteur bêta de ma description. Un facteur bêta serait calculé en fonction de l'intervalle de différence et des échantillons actuels et précédents. Le nouvel alpha sera (alphabeta) mais il sera utilisé uniquement pour cet échantillon. Alors que vous semblez être en train de faire l'alpha dans la formule, je tend vers l'alpha constant (facteur de lissage) et un bêta calculé indépendamment (un facteur d'accord) qui compense les échantillons manqués tout à l'heure. Ndash nik Jun 21 09 at 15: 23Exponential Filter Cette page décrit le filtrage exponentiel, le filtre le plus simple et le plus populaire. Cela fait partie de la section Filtrage qui fait partie de A Guide to Fault Detection and Diagnostic .. Vue d'ensemble, constante de temps et équivalent analogique Le filtre le plus simple est le filtre exponentiel. Elle n'a qu'un seul paramètre d'accord (autre que l'intervalle d'échantillonnage). Elle nécessite le stockage d'une seule variable - la sortie précédente. Il s'agit d'un filtre IIR (autorégressif) - les effets d'un changement d'entrée décroissent exponentiellement jusqu'à ce que les limites d'affichage ou l'arithmétique informatique le masquent. Dans diverses disciplines, l'utilisation de ce filtre est également appelée lissage 8220exponentiel8221. Dans certaines disciplines telles que l'analyse d'investissement, le filtre exponentiel est appelé 8220 Moyenne mobile pondérée exponentiellement8221 (EWMA), ou juste 8220 Moyenne mobile exponentielle8221 (EMA). Cela empiète sur la terminologie traditionnelle ARMA 8220moving average8221 de l'analyse des séries temporelles, car il n'y a pas d'historique d'entrée utilisé - juste l'entrée courante. Il s'agit de l'équivalent temps discret du lag8221 de premier ordre 8220 couramment utilisé dans la modélisation analogique de systèmes de contrôle en temps continu. Dans les circuits électriques, un filtre RC (filtre avec une résistance et un condensateur) est un décalage de premier ordre. En mettant l'accent sur l'analogie avec les circuits analogiques, le paramètre d'accord unique est la constante de temps 82208221, généralement écrite sous la forme de la lettre minuscule grecque Tau (). En fait, les valeurs aux temps d'échantillonnage discrets correspondent exactement au décalage de temps continu équivalent avec la même constante de temps. La relation entre l'implémentation numérique et la constante de temps est représentée dans les équations ci-dessous. Equations du filtre exponentiel et initialisation Le filtre exponentiel est une combinaison pondérée de l'estimation précédente (sortie) avec les données d'entrée les plus récentes, la somme des poids égaux à 1 pour que la sortie corresponde à l'entrée à l'état stationnaire. Après la notation de filtre déjà introduite: y (k) ay (k-1) (1-a) x (k) où x (k) est l'entrée brute au temps ky (k) est la sortie filtrée au temps ka Est une constante entre 0 et 1, normalement comprise entre 0,8 et 0,99. (A-1) ou a est parfois appelée la constante de lissage 82208221. Pour des systèmes avec un intervalle de temps T fixe entre des échantillons, la constante 8220a8221 est calculée et stockée pour des raisons de commodité seulement lorsque le développeur d'application spécifie une nouvelle valeur de la constante de temps souhaitée. Pour les systèmes avec échantillonnage de données à intervalles irréguliers, la fonction exponentielle ci-dessus doit être utilisée à chaque pas de temps, où T est le temps écoulé depuis l'échantillon précédent. La sortie du filtre est généralement initialisée pour correspondre à la première entrée. Lorsque la constante de temps approche 0, a passe à zéro, donc il n'y a pas de filtrage 8211 la sortie est égale à la nouvelle entrée. Comme la constante de temps devient très grande, une approches 1, de sorte que la nouvelle entrée est presque ignorée 8211 très lourd de filtrage. L'équation de filtre ci-dessus peut être réarrangée dans l'équivalent prédicteur-correcteur suivant: Cette forme rend plus évident que l'estimation variable (sortie du filtre) est prédite comme étant inchangée par rapport à l'estimation précédente y (k-1) plus un terme de correction basé Sur l'inattendue 8220innovation8221 - la différence entre la nouvelle entrée x (k) et la prédiction y (k-1). Cette forme est également le résultat de dériver le filtre exponentiel comme un simple cas particulier d'un filtre de Kalman. Qui est la solution optimale à un problème d'estimation avec un ensemble particulier d'hypothèses. Etape réponse Une façon de visualiser le fonctionnement du filtre exponentiel est de tracer sa réponse dans le temps à une entrée pas à pas. C'est-à-dire, en commençant par l'entrée et la sortie du filtre à 0, la valeur d'entrée est soudainement changée à 1. Les valeurs résultantes sont tracées ci-dessous: Dans le graphique ci-dessus, le temps est divisé par la constante de temps tau du filtre, Les résultats pour toute période de temps, pour toute valeur de la constante de temps du filtre. Après un temps égal à la constante de temps, la sortie du filtre s'élève à 63,21 de sa valeur finale. Après un temps égal à 2 constantes de temps, la valeur s'élève à 86,47 de sa valeur finale. Les sorties après des temps égaux à 3,4 et 5 constantes de temps sont respectivement 95,02, 98,17 et 99,33 de la valeur finale. Etant donné que le filtre est linéaire, cela signifie que ces pourcentages peuvent être utilisés pour n'importe quelle grandeur du changement de pas, pas seulement pour la valeur de 1 utilisée ici. Bien que la réponse d'échelon prenne en théorie un temps infini, d'un point de vue pratique, pensez au filtre exponentiel comme 98 à 99 8220done8221 répondant après un temps égal à 4 à 5 constantes de temps de filtrage. Variations sur le filtre exponentiel Il existe une variation du filtre exponentiel appelé filtre exponentiel non linéaire, qui vise à filtrer fortement le bruit dans une certaine amplitude 8220typical8221, mais qui réagit plus rapidement à des changements plus importants. Copyright 2010 - 2013, Greg Stanley Partager cette page:


No comments:

Post a Comment