Saturday 11 February 2017

Moving Average Vector Matlab

Ive a obtenu un vecteur et je veux calculer la moyenne mobile de celui-ci (en utilisant une fenêtre de largeur 5). Par exemple, si le vecteur en question est 1, 2, 3, 4, 5, 6, 7, 8. Alors la première entrée du vecteur résultant doit être la somme de toutes les entrées dans 1,2,3,4,5 (ie 15) la deuxième entrée du vecteur résultant doit être la somme de toutes les entrées dans 2,3,4, 5,6 (ie 20) etc. A la fin, le vecteur résultant devrait être 15,20,25,30. Comment puis-je faire? La fonction conv est tout à fait votre allée: Trois réponses, trois méthodes différentes. Voici un repère rapide (différentes tailles d'entrée, largeur de fenêtre fixe de 5) en utilisant le temps, n'hésitez pas à piquer des trous dans les commentaires si vous pensez qu'il doit être affiné. Conv apparaît comme l'approche la plus rapide son environ deux fois plus vite que l'approche des pièces (à l'aide de filtre). Et environ quatre fois plus vite que l'approche de Luis Mendos (en utilisant cumsum). Voici un autre benchmark (taille d'entrée fixe de 1e4: différentes largeurs de fenêtre). Ici, Luis Mendos cumsum approche émerge comme le vainqueur clair, parce que sa complexité est principalement régie par la longueur de l'entrée et est insensible à la largeur de la fenêtre. Conclusion Pour résumer, vous devez utiliser l'approche conv si votre fenêtre est relativement petite, utilisez l'approche cumsum si votre fenêtre est relativement grande. Code (pour les repères) Je dois calculer une moyenne mobile sur une série de données, dans une boucle for. Je dois obtenir la moyenne mobile sur N9 jours. Le tableau Im calculant est 4 séries de 365 valeurs (M), qui sont elles-mêmes des valeurs moyennes d'un autre ensemble de données. Je veux tracer les valeurs moyennes de mes données avec la moyenne mobile dans une parcelle. J'ai googlé un peu sur les moyennes mobiles et la commande conv et trouvé quelque chose que j'ai essayé de mettre en œuvre dans mon code. Ainsi, fondamentalement, je calculer ma moyenne et le tracer avec une moyenne mobile (fausse). J'ai choisi la valeur wts directement sur le site mathworks, donc c'est incorrect. (Source: mathworks. nlhelpeconmoving-average-trend-estimation. html) Mon problème, c'est que je ne comprends pas ce que c'est wts est. Quelqu'un peut-il expliquer si elle a quelque chose à voir avec le poids des valeurs: qui est invalide dans ce cas. Toutes les valeurs sont pondérées de la même façon. Et si je fais ce tout à fait mal, puis-je obtenir de l'aide avec elle Mes plus sincères remerciements. L'utilisation de conv est un excellent moyen de mettre en œuvre une moyenne mobile. Dans le code que vous utilisez, wts est combien vous peser chaque valeur (comme vous l'avez deviné). La somme de ce vecteur doit toujours être égale à un. Si vous souhaitez pondérer chaque valeur uniformément et faire un filtre N de taille N alors vous voudriez faire L'utilisation de l'argument valide en conv entraînera à avoir moins de valeurs dans Ms que vous avez dans M. Utilisez même si vous ne vous inquiétez pas les effets de Rembourrage zéro. Si vous avez la boîte à outils de traitement du signal, vous pouvez utiliser cconv si vous voulez essayer une moyenne mobile circulaire. Quelque chose comme vous devrait lire la documentation conv et cconv pour plus d'informations si vous n'avez pas déjà. Vous pouvez utiliser le filtre pour trouver une moyenne courante sans utiliser une boucle for. Cet exemple trouve la moyenne courante d'un vecteur à 16 éléments, en utilisant une taille de fenêtre de 5. 2) lisse dans le cadre de la Boîte à outils d'ajustement de courbe (qui est disponible dans la plupart des cas) yy lisse (y) lisse les données dans le vecteur colonne Y en utilisant un filtre de moyenne mobile. Les résultats sont renvoyés dans le vecteur colonne yy. La portée par défaut pour la moyenne mobile est 5.29 Septembre, 2013 Moyenne mobile par convolution Qu'est-ce que la moyenne mobile et à quoi sert-elle? Comment la moyenne mobile se fait-elle en utilisant la convolution La moyenne mobile est généralement utilisée pour supprimer le bruit d'un signal? Définissez la valeur de chaque point à la moyenne des valeurs dans son voisinage. Par une formule: Ici x est l'entrée et y est le signal de sortie, tandis que la taille de la fenêtre est w, supposé être impair. La formule ci-dessus décrit une opération symétrique: les échantillons sont prélevés des deux côtés du point réel. Voici un exemple de vie réelle. Le point sur lequel la fenêtre est posée est en fait rouge. Les valeurs en dehors de x sont censées être des zéros: Pour jouer et voir les effets de la moyenne mobile, jetez un oeil à cette démonstration interactive. Comment le faire par convolution Comme vous l'avez peut-être reconnu, calculer la moyenne mobile simple est semblable à la convolution: dans les deux cas une fenêtre est glissée le long du signal et les éléments dans la fenêtre sont résumés. Donc, essayez de faire la même chose en utilisant la convolution. Utilisez les paramètres suivants: La sortie souhaitée est: Comme première approche, essayons ce que nous obtenons en convolvant le signal x par le noyau k suivant: La sortie est exactement trois fois plus grande que la valeur attendue. On peut également voir que les valeurs de sortie sont le résumé des trois éléments de la fenêtre. C'est parce que pendant la convolution la fenêtre est glissée le long, tous les éléments en elle sont multipliés par un, puis résumés: yk 1 cdot x 1 cdot x 1 cdot x Pour obtenir les valeurs désirées de y. La sortie sera divisée par 3: Par une formule comprenant la division: Mais ne serait-il pas optimal de faire la division au cours de la convolution Voici l'idée en réarrangant l'équation: Nous utiliserons donc le k noyau suivant: Obtenir la sortie souhaitée: En général: si nous voulons faire la moyenne mobile par convolution ayant une taille de fenêtre de w. Nous utiliserons le noyau k suivant: Une fonction simple faisant la moyenne mobile est: Un exemple d'utilisation est:


No comments:

Post a Comment