Tuesday 14 February 2017

Exponentielle Mobile Moyenne De Traitement Du Signal

J'ai une série de dates et de mesures à chacune de ces dates. J'aimerais calculer une moyenne mobile exponentielle pour chacune des dates. Est-ce que quelqu'un sait comment faire ceci Im nouveau à python. Il ne semble pas que les moyennes sont intégrées dans la bibliothèque standard de python, ce qui me paraît un peu bizarre. Peut-être que je ne cherche pas au bon endroit. Donc, étant donné le code suivant, comment pourrais-je calculer la moyenne mobile pondérée des points de QI pour les dates de calendrier (theres probablement une meilleure façon de structurer les données, tout conseil serait apprécié) demandé Jan 28 09 at 18:01 My python is a Un peu rusty (n'importe qui peut se sentir libre pour éditer ce code pour faire des corrections, si Ive a brouillé la syntaxe en quelque sorte), mais ici va. Cette fonction se déplace vers l'arrière, de la fin de la liste au début, en calculant la moyenne mobile exponentielle pour chaque valeur en travaillant vers l'arrière jusqu'à ce que le coefficient de pondération pour un élément soit inférieur à l'épsilon donné. À la fin de la fonction, il inverse les valeurs avant de retourner la liste (de sorte qu'ils sont dans l'ordre correct pour l'appelant). (NOTE LATÉRALE: si j'utilisais une langue autre que python, je devais créer un tableau vide en taille réelle, puis le remplir à l'envers, de sorte que je ne devais pas l'inverser à la fin. Un grand tableau vide en python. Et dans les listes de python, l'ajout est beaucoup moins cher que le pré-paiement, c'est pourquoi j'ai construit la liste dans l'ordre inverse. Je me corrige si Im mal.) L'argument alpha est le facteur de désintégration à chaque itération. Par exemple, si vous avez utilisé un alpha de 0,5, alors la valeur moyenne mobile d'aujourd'hui serait composée des valeurs pondérées suivantes: Bien sûr, si vous avez obtenu un tableau énorme de valeurs, les valeurs de dix ou quinze jours ne contribuera pas beaucoup à Moyenne pondérée d'aujourd'hui. L'argument epsilon vous permet de définir un point de coupure, en dessous duquel vous cesserez de vous soucier des anciennes valeurs (puisque leur contribution à la valeur d'aujourd'hui sera insignifiante). Youd invoquer la fonction quelque chose comme ceci: je ne sais pas Python, mais pour la partie moyenne, voulez-vous dire un filtre passe-bas exponentiellement décroissant de la forme où alpha dttau, dt le timestep du filtre , Tau la constante de temps du filtre (la forme variable-timestep de ceci est comme suit, juste le clip dttau pour ne pas être plus que 1.0) Si vous voulez filtrer quelque chose comme une date, assurez-vous de convertir en une quantité à virgule flottante Comme de secondes depuis Jan 1 1970. J'ai répondu Jan 28 09 à 18:10 J'ai trouvé l'extrait de code ci-dessus par earino assez utile - mais j'avais besoin de quelque chose qui pourrait continuellement lisser un flux de valeurs - donc je l'ai refacturé à ceci: et j'utilise Il comme ceci: (où pin. read () produit la prochaine valeur Id comme de consommer). Répondre fév 12 14 at 20h35 Im toujours calculer EMAs avec Pandas: Voici un exemple comment le faire: Plus d'infos sur Pandas EWMA: Réponse Oct 4 15 at 12:42 Don39t versions plus récentes de Pandas ont de nouvelles et meilleures fonctions. Ndash Cristian Ciupitu 11 mai à 14:10 Notez que contrairement à leur feuille de calcul, je ne calculer le SMA, et je ne pas attendre pour générer l'EMA après 10 échantillons. Cela signifie que mes valeurs diffèrent légèrement, mais si vous le tracer, il suit exactement après 10 échantillons. Au cours des 10 premiers échantillons, l'EMA I calcule est correctement lissé. Avec le vecteur poids, je veux dire le vecteur avec des poids que vous devez multiplier les observations dans la fenêtre qui glisse sur vos données avec donc si vous ajoutez ces produits ensemble renvoie la valeur De l'EMA sur le côté droit de la fenêtre. Pour une moyenne mobile pondérée linéaire, la formule pour trouver le vecteur de poids est: (1: n) somme (1: n) (en code R). Cette série de longueur n s'ajoute à 1. Pour n10 ce sera 0.01818182 0.03636364 0.05454545 0.07272727 0.09090909 0.10909091 0.12727273 0.14545455 0.16363636 0.18181818 les numéros 1 à 10 55, avec 55 la somme des nombres 1 à 10. Comment calculez-vous le vecteur de poids Pour une moyenne mobile exponentielle (EMA) de longueur n si n est la longueur de la fenêtre, alors alphalt-2 (n1) et ilt-1: n so EmaWeightVectorlt - ((alpha (1-alpha) (1-i)) ) Est-ce correct Même si l'EMA n'est pas vraiment confiné à une fenêtre avec un début et une fin, ne devrait pas les poids s'ajoutent à 1 tout comme avec le LWMA Merci Jason, tous les pointeurs de la façon d'approcher le filtre EMA à toute précision souhaitée En l'approchant avec un filtre FIR suffisamment long Il ya un script perl sur en. wikipedia. orgwikihellip qui a fait l'image du vecteur de poids EMA, mais je don39t le comprendre: si elles fixent le nombre de poids à 15 pourquoi y at-il 20 rouge Bars au lieu de 15 ndash MisterH Dec 19 12 à 22h40 J'ai lu dans de nombreux endroits que la médiane de déplacement est un peu mieux que la moyenne mobile pour certaines applications, car il est moins sensible aux valeurs aberrantes. Je voulais tester cette affirmation sur des données réelles, mais je ne peux pas voir cet effet (vert: médiane, rouge: moyenne). Voir ici: J'ai essayé avec différentes valeurs pour la largeur de fenêtre (ici dans le code 1000), et il était toujours le même: la médiane mobile n'est pas meilleure que la moyenne mobile (c'est-à-dire pas moins sensible aux valeurs aberrantes). La même chose avec largeur de fenêtre 10000 (10000 la largeur de pointe). Pouvez-vous fournir un exemple montrant que le déplacement médian est moins sensible aux valeurs aberrantes que la moyenne mobile Et si possible en utilisant l'exemple de fichier. WAV fichier de données (lien de téléchargement). C'est-à-dire est-il possible de faire une médiane mobile sur ces données de sorte que le résultat est comme cette courbe jaune (c'est-à-dire plus de pic) Ce n'est pas vraiment une réponse, mais j'ai pensé Id rapport ce que je vois et demandez plus d'informations. Ive chargé votre fichier test. wav et je peux voir le signal tracé ci-dessous. Donc, ce que vous obtenez dans les parcelles que vous affichez n'est pas tant la valeur médiane, mais est plus comme une enveloppe du signal. La deuxième question est que le signal semble effectivement faire partie du signal. Si je zoomer sur le blip, alors c'est ce que je vois: Qu'est-ce que vous essayez vraiment d'obtenir Merci pour les commentaires. Ci-dessous un code R qui effectue les opérations suivantes: Charge le fichier wav. Prend la valeur absolue du signal (son chargé dans le canal gauche par la bibliothèque waveR). Effectue un filtre de moyenne mobile de 100 mètres sur les données pour obtenir quelque chose de plus proche de l'enveloppe (signal rouge). Puis applique un filtre médian des longueurs 201, 2001 et 4001 au résultat (signal bleu). À partir du graphique ci-dessous, le plus performant est le 4001 de longueur. Sinon, l'effet du glitch est toujours présent. La seule chose que je peux voir mal maintenant, c'est que l'enveloppe ne correspond pas à l'enveloppe vraie ainsi que Id comme. Un meilleur détecteur d'enveloppe pourrait l'améliorer (par exemple le signal analytique ou autre). Ci-dessous un graphique de l'enveloppe médiane filtrée calculée superposée sur le signal d'origine. Merci pour le temps que vous avez passé sur cette question En fait, j'ai tracé la médiane et la moyenne de la valeur absolue du signal. Et oui cela donne une idée de l'enveloppe, c'est ce que je veux. Ce que j'attendais (grâce à la médiane au lieu de moyenne) était quelque chose comme ça. capture d'écran. Malheureusement quelle que soit la largeur de la fenêtre pour la médiane. Le pic est toujours ici. Alors que beaucoup de documents disent que la médiane a l'avantage d'abaisser l'effet des valeurs aberrantes. Ndash Basj Nov 30 15 at 14:01 Droit, donc la question est de demander: quotoutlier de whatquot. -) Prendre la médiane directe ou la moyenne des données que vous avez donnera des résultats absurdes. Le filtrage médian ne fonctionne bien que lorsque quelques échantillons (par rapport à la longueur de la fenêtre) sont en dehors de la plage attendue. Parce que les données que vous avez est swinging positif et négatif, la médiane isn39t vraiment approprié pour elle. Prendre la médiane de l'enveloppe devrait fonctionner mieux. Vous pouvez même mettre un filtre passe-bas simple sur la valeur absolue pour obtenir une valeur d'enveloppe plus stable. Ndash Peter K. 9830 Nov 30 15 at 14:05


No comments:

Post a Comment