Wednesday, 22 February 2017

Matlab Moyen Roulant

La meilleure façon de le faire (à mon avis) serait d'utiliser un buffer circulaire pour stocker vos images. Dans un buffer circulaire ou en anneau, l'élément de données le plus ancien du tableau est écrasé par l'élément le plus récent introduit dans le tableau. Les bases de la réalisation d'une telle structure sont décrites dans la courte vidéo de Mathworks. Implémentation d'un tampon circulaire simple. Pour chaque itération de votre boucle principale qui traite d'une seule image, il suffit de charger une nouvelle image dans le buffer circulaire, puis d'utiliser MATLAB s construit dans la fonction moyenne pour prendre la moyenne efficacement. Si vous devez appliquer une fonction de fenêtre aux données, puis faire une copie temporaire des cadres multiplié par la fonction de fenêtre et prendre la moyenne de la copie à chaque itération de la boucle. A répondu 6 août à 10:11 calcule une sorte de moyenne mobile pour chacun des 10 bandes sur toutes vos images. Cette ligne calcule une moyenne mobile de la valeur moyenne sur vos images: Pour les deux, vous voulez ajouter une structure de tampon qui ne conserve que les 10 dernières images. Pour simplifier, vous pouvez également tout garder en mémoire. Voici un exemple pour Yout: Changez cette ligne: (Ajouter une dimension) Et changez ceci: Ensuite, pour afficher l'utilisation Vous ferez sth. Similaire pour le moyenvalueI ont une matrice de données de séries chronologiques pour 8 variables avec environ 2500 points (10 ans de lundi-vendredi) et voudrait calculer la moyenne, la variance, l'asymétrie et kurtosis sur une moyenne mobile. Supposons que les cadres 100 252 504 756 - Je voudrais calculer les quatre fonctions ci-dessus sur plus de chacun des (temps-) cadres, sur une base quotidienne - de sorte que le retour pour le jour 300 dans le cas de 100 jours de cadre, serait moyen Variance skewness kurtosis de la période day201-day300 (100 jours au total). etc. Je sais que cela signifie que je voudrais obtenir un tableau de sortie, et le numéro de premier cadre de jours serait NaNs, mais je ne peux pas comprendre l'indexation requise pour obtenir ce fait. Posée Mar 24 14 at 0:07 C'est une question intéressante parce que je pense que la solution optimale est différente pour la moyenne que pour les autres statistiques de l'échantillon. Ive a fourni un exemple de simulation ci-dessous que vous pouvez travailler à travers. Tout d'abord, choisissez quelques paramètres arbitraires et simulez quelques données: Pour la moyenne, utilisez le filtre pour obtenir une moyenne mobile: j'avais pensé à résoudre ce problème en utilisant conv comme suit: Mais comme PhilGoddard a souligné dans les commentaires, l'approche filtre évite la Besoin de la boucle. Notez également que Ive a choisi de faire les dates dans la matrice de sortie correspondent aux dates dans X afin que dans le travail plus tard vous pouvez utiliser les mêmes indices pour les deux. Ainsi, les premières observations WindowLength-1 dans MeanMA seront nan. Pour la variance, je ne peux pas voir comment utiliser un filtre ou une conv ou même une somme courante pour rendre les choses plus efficaces, alors au lieu de cela je effectue le calcul manuellement à chaque itération: Nous pourrions accélérer légèrement en exploitant le fait que nous avons déjà Calculé la moyenne mobile moyenne. Il suffit de remplacer la ligne de boucle intérieure dans la précédente avec: Cependant, je doute que cela fera beaucoup de différence. Si quelqu'un d'autre peut voir une manière intelligente d'utiliser le filtre ou la convolution pour obtenir l'ID de la variance de la fenêtre en mouvement, être très intéressé à le voir. Je laisse le cas de skewness et kurtosis à l'OP, car ils sont essentiellement identiques à l'exemple de variance, mais avec la fonction appropriée. Un dernier point: si vous convertissiez ce qui précède en une fonction générale, vous pourriez passer dans une fonction anonyme comme l'un des arguments, alors vous auriez une routine moyenne mobile qui fonctionne pour le choix arbitraire des transformations. Final, point final: Pour une séquence de longueurs de fenêtre, il suffit de boucler sur le bloc de code entier pour chaque longueur de fenêtre. Ouais, la fonction de filtre est en effet mieux pour la moyenne - mais je voulais le faire pour plusieurs fonctions différentes, pas seulement la moyenne. J'ai posté juste ma réponse parce qu'elle a fonctionné pour moi et j'ai pensé que cela pourrait aider quelqu'un d'autre aussi. Ndash Dexter Morgan Apr 15 14 at 12: 4029 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: Nous fixons 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